From 55b09e701691463b065357cd3959f0ff77c3313d Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Wed, 13 Jun 2012 19:52:59 -0400 Subject: [PATCH 01/83] 7158800: Improve storage of symbol tables Use an alternate version of hashing algorithm for symbol string tables and after a certain bucket size to improve performance Reviewed-by: pbk, kamg, dlong, kvn, fparain --- hotspot/src/share/vm/classfile/altHashing.cpp | 304 + hotspot/src/share/vm/classfile/altHashing.hpp | 62 + .../src/share/vm/classfile/javaClasses.cpp | 22 +- .../src/share/vm/classfile/javaClasses.hpp | 24 +- .../src/share/vm/classfile/symbolTable.cpp | 153 +- .../src/share/vm/classfile/symbolTable.hpp | 40 +- hotspot/src/share/vm/memory/dump.cpp | 6 +- hotspot/src/share/vm/prims/jni.cpp | 2 + hotspot/src/share/vm/runtime/globals.hpp | 3 + hotspot/src/share/vm/runtime/init.cpp | 5 + hotspot/src/share/vm/runtime/safepoint.cpp | 17 +- hotspot/src/share/vm/utilities/hashtable.cpp | 51 +- hotspot/src/share/vm/utilities/hashtable.hpp | 39 +- .../share/vm/utilities/hashtable.inline.hpp | 23 +- hotspot/test/runtime/7158800/BadUtf8.java | 1254 + hotspot/test/runtime/7158800/InternTest.java | 80 + hotspot/test/runtime/7158800/badstrings.txt | 30001 ++++++++++++++++ 17 files changed, 32031 insertions(+), 55 deletions(-) create mode 100644 hotspot/src/share/vm/classfile/altHashing.cpp create mode 100644 hotspot/src/share/vm/classfile/altHashing.hpp create mode 100644 hotspot/test/runtime/7158800/BadUtf8.java create mode 100644 hotspot/test/runtime/7158800/InternTest.java create mode 100644 hotspot/test/runtime/7158800/badstrings.txt diff --git a/hotspot/src/share/vm/classfile/altHashing.cpp b/hotspot/src/share/vm/classfile/altHashing.cpp new file mode 100644 index 00000000000..096d17e9303 --- /dev/null +++ b/hotspot/src/share/vm/classfile/altHashing.cpp @@ -0,0 +1,304 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#include "precompiled.hpp" +#include "classfile/altHashing.hpp" +#include "classfile/symbolTable.hpp" +#include "classfile/systemDictionary.hpp" +#include "oops/markOop.hpp" +#include "runtime/thread.hpp" + +// Get the hash code of the classes mirror if it exists, otherwise just +// return a random number, which is one of the possible hash code used for +// objects. We don't want to call the synchronizer hash code to install +// this value because it may safepoint. +intptr_t object_hash(klassOop k) { + intptr_t hc = k->java_mirror()->mark()->hash(); + return hc != markOopDesc::no_hash ? hc : os::random(); +} + +// Seed value used for each alternative hash calculated. +jint AltHashing::compute_seed() { + jlong nanos = os::javaTimeNanos(); + jlong now = os::javaTimeMillis(); + jint SEED_MATERIAL[8] = { + (jint) object_hash(SystemDictionary::String_klass()), + (jint) object_hash(SystemDictionary::System_klass()), + (jint) os::random(), // current thread isn't a java thread + (jint) (((julong)nanos) >> 32), + (jint) nanos, + (jint) (((julong)now) >> 32), + (jint) now, + (jint) (os::javaTimeNanos() >> 2) + }; + + return murmur3_32(SEED_MATERIAL, 8); +} + + +// Murmur3 hashing for Symbol +jint AltHashing::murmur3_32(jint seed, const jbyte* data, int len) { + jint h1 = seed; + int count = len; + int offset = 0; + + // body + while (count >= 4) { + jint k1 = (data[offset] & 0x0FF) + | (data[offset + 1] & 0x0FF) << 8 + | (data[offset + 2] & 0x0FF) << 16 + | data[offset + 3] << 24; + + count -= 4; + offset += 4; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + + h1 ^= k1; + h1 = Integer_rotateLeft(h1, 13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail + + if (count > 0) { + jint k1 = 0; + + switch (count) { + case 3: + k1 ^= (data[offset + 2] & 0xff) << 16; + // fall through + case 2: + k1 ^= (data[offset + 1] & 0xff) << 8; + // fall through + case 1: + k1 ^= (data[offset] & 0xff); + // fall through + default: + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + h1 ^= k1; + } + } + + // finalization + h1 ^= len; + + // finalization mix force all bits of a hash block to avalanche + h1 ^= ((unsigned int)h1) >> 16; + h1 *= 0x85ebca6b; + h1 ^= ((unsigned int)h1) >> 13; + h1 *= 0xc2b2ae35; + h1 ^= ((unsigned int)h1) >> 16; + + return h1; +} + +// Murmur3 hashing for Strings +jint AltHashing::murmur3_32(jint seed, const jchar* data, int len) { + jint h1 = seed; + + int off = 0; + int count = len; + + // body + while (count >= 2) { + jchar d1 = data[off++] & 0xFFFF; + jchar d2 = data[off++]; + jint k1 = (d1 | d2 << 16); + + count -= 2; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + + h1 ^= k1; + h1 = Integer_rotateLeft(h1, 13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail + + if (count > 0) { + int k1 = data[off]; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + h1 ^= k1; + } + + // finalization + h1 ^= len * 2; // (Character.SIZE / Byte.SIZE); + + // finalization mix force all bits of a hash block to avalanche + h1 ^= ((unsigned int)h1) >> 16; + h1 *= 0x85ebca6b; + h1 ^= ((unsigned int)h1) >> 13; + h1 *= 0xc2b2ae35; + h1 ^= ((unsigned int)h1) >> 16; + + return h1; +} + +// Hash used for the seed. +jint AltHashing::murmur3_32(jint seed, const int* data, int len) { + jint h1 = seed; + + int off = 0; + int end = len; + + // body + while (off < end) { + jint k1 = data[off++]; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + + h1 ^= k1; + h1 = Integer_rotateLeft(h1, 13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail (always empty, as body is always 32-bit chunks) + + // finalization + + h1 ^= len * 4; // (Integer.SIZE / Byte.SIZE); + + // finalization mix force all bits of a hash block to avalanche + h1 ^= ((juint)h1) >> 16; + h1 *= 0x85ebca6b; + h1 ^= ((juint)h1) >> 13; + h1 *= 0xc2b2ae35; + h1 ^= ((juint)h1) >> 16; + + return h1; +} + +jint AltHashing::murmur3_32(const int* data, int len) { + return murmur3_32(0, data, len); +} + +#ifndef PRODUCT +// Overloaded versions for internal test. +jint AltHashing::murmur3_32(const jbyte* data, int len) { + return murmur3_32(0, data, len); +} + +jint AltHashing::murmur3_32(const jchar* data, int len) { + return murmur3_32(0, data, len); +} + +// Internal test for alternate hashing. Translated from JDK version +// test/sun/misc/Hashing.java +static const jbyte ONE_BYTE[] = { (jbyte) 0x80}; +static const jbyte TWO_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81}; +static const jchar ONE_CHAR[] = { (jchar) 0x8180}; +static const jbyte THREE_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82}; +static const jbyte FOUR_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, (jbyte) 0x83}; +static const jchar TWO_CHAR[] = { (jchar) 0x8180, (jchar) 0x8382}; +static const jint ONE_INT[] = { 0x83828180}; +static const jbyte SIX_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, (jbyte) 0x83, (jbyte) 0x84, (jbyte) 0x85}; +static const jchar THREE_CHAR[] = { (jchar) 0x8180, (jchar) 0x8382, (jchar) 0x8584}; +static const jbyte EIGHT_BYTE[] = { + (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, + (jbyte) 0x83, (jbyte) 0x84, (jbyte) 0x85, + (jbyte) 0x86, (jbyte) 0x87}; +static const jchar FOUR_CHAR[] = { + (jchar) 0x8180, (jchar) 0x8382, + (jchar) 0x8584, (jchar) 0x8786}; + +static const jint TWO_INT[] = { 0x83828180, 0x87868584}; + +static const juint MURMUR3_32_X86_CHECK_VALUE = 0xB0F57EE3; + +void AltHashing::testMurmur3_32_ByteArray() { + // printf("testMurmur3_32_ByteArray\n"); + + jbyte* vector = new jbyte[256]; + jbyte* hashes = new jbyte[4 * 256]; + + for (int i = 0; i < 256; i++) { + vector[i] = (jbyte) i; + } + + // Hash subranges {}, {0}, {0,1}, {0,1,2}, ..., {0,...,255} + for (int i = 0; i < 256; i++) { + jint hash = murmur3_32(256 - i, vector, i); + hashes[i * 4] = (jbyte) hash; + hashes[i * 4 + 1] = (jbyte) (((juint)hash) >> 8); + hashes[i * 4 + 2] = (jbyte) (((juint)hash) >> 16); + hashes[i * 4 + 3] = (jbyte) (((juint)hash) >> 24); + } + + // hash to get const result. + juint final_hash = murmur3_32(hashes, 4*256); + + assert (MURMUR3_32_X86_CHECK_VALUE == final_hash, + err_msg( + "Calculated hash result not as expected. Expected %08X got %08X\n", + MURMUR3_32_X86_CHECK_VALUE, + final_hash)); +} + +void AltHashing::testEquivalentHashes() { + jint jbytes, jchars, ints; + + // printf("testEquivalentHashes\n"); + + jbytes = murmur3_32(TWO_BYTE, 2); + jchars = murmur3_32(ONE_CHAR, 1); + assert (jbytes == jchars, + err_msg("Hashes did not match. b:%08x != c:%08x\n", jbytes, jchars)); + + jbytes = murmur3_32(FOUR_BYTE, 4); + jchars = murmur3_32(TWO_CHAR, 2); + ints = murmur3_32(ONE_INT, 1); + assert ((jbytes == jchars) && (jbytes == ints), + err_msg("Hashes did not match. b:%08x != c:%08x != i:%08x\n", jbytes, jchars, ints)); + + jbytes = murmur3_32(SIX_BYTE, 6); + jchars = murmur3_32(THREE_CHAR, 3); + assert (jbytes == jchars, + err_msg("Hashes did not match. b:%08x != c:%08x\n", jbytes, jchars)); + + jbytes = murmur3_32(EIGHT_BYTE, 8); + jchars = murmur3_32(FOUR_CHAR, 4); + ints = murmur3_32(TWO_INT, 2); + assert ((jbytes == jchars) && (jbytes == ints), + err_msg("Hashes did not match. b:%08x != c:%08x != i:%08x\n", jbytes, jchars, ints)); +} + +// Returns true if the alternate hashcode is correct +void AltHashing::test_alt_hash() { + testMurmur3_32_ByteArray(); + testEquivalentHashes(); +} +#endif // PRODUCT diff --git a/hotspot/src/share/vm/classfile/altHashing.hpp b/hotspot/src/share/vm/classfile/altHashing.hpp new file mode 100644 index 00000000000..941b9a0dc37 --- /dev/null +++ b/hotspot/src/share/vm/classfile/altHashing.hpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#ifndef SHARE_VM_CLASSFILE_ALTHASHING_HPP +#define SHARE_VM_CLASSFILE_ALTHASHING_HPP + +#include "prims/jni.h" +#include "classfile/symbolTable.hpp" + +/** + * Hashing utilities. + * + * Implementation of Murmur3 hashing. + * This code was translated from src/share/classes/sun/misc/Hashing.java + * code in the JDK. + */ + +class AltHashing : AllStatic { + + // utility function copied from java/lang/Integer + static jint Integer_rotateLeft(jint i, int distance) { + return (i << distance) | (((juint)i) >> (32-distance)); + } + static jint murmur3_32(const int* data, int len); + static jint murmur3_32(jint seed, const int* data, int len); + +#ifndef PRODUCT + // Hashing functions used for internal testing + static jint murmur3_32(const jbyte* data, int len); + static jint murmur3_32(const jchar* data, int len); + static void testMurmur3_32_ByteArray(); + static void testEquivalentHashes(); +#endif // PRODUCT + + public: + static jint compute_seed(); + static jint murmur3_32(jint seed, const jbyte* data, int len); + static jint murmur3_32(jint seed, const jchar* data, int len); + NOT_PRODUCT(static void test_alt_hash();) +}; +#endif // SHARE_VM_CLASSFILE_ALTHASHING_HPP diff --git a/hotspot/src/share/vm/classfile/javaClasses.cpp b/hotspot/src/share/vm/classfile/javaClasses.cpp index eab75e181e3..0c452cf4a1e 100644 --- a/hotspot/src/share/vm/classfile/javaClasses.cpp +++ b/hotspot/src/share/vm/classfile/javaClasses.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/vmSymbols.hpp" @@ -347,13 +348,26 @@ jchar* java_lang_String::as_unicode_string(oop java_string, int& length) { return result; } -unsigned int java_lang_String::hash_string(oop java_string) { +unsigned int java_lang_String::to_hash(oop java_string) { + int length = java_lang_String::length(java_string); + // Zero length string will hash to zero with String.toHash() function. + if (length == 0) return 0; + typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); - int length = java_lang_String::length(java_string); + return java_lang_String::to_hash(value->char_at_addr(offset), length); +} - if (length == 0) return 0; - return hash_string(value->char_at_addr(offset), length); +unsigned int java_lang_String::hash_string(oop java_string) { + int length = java_lang_String::length(java_string); + // Zero length string doesn't hash necessarily hash to zero. + if (length == 0) { + return StringTable::hash_string(NULL, 0); + } + + typeArrayOop value = java_lang_String::value(java_string); + int offset = java_lang_String::offset(java_string); + return StringTable::hash_string(value->char_at_addr(offset), length); } Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) { diff --git a/hotspot/src/share/vm/classfile/javaClasses.hpp b/hotspot/src/share/vm/classfile/javaClasses.hpp index 708ea4f544a..9ada29863b5 100644 --- a/hotspot/src/share/vm/classfile/javaClasses.hpp +++ b/hotspot/src/share/vm/classfile/javaClasses.hpp @@ -158,20 +158,16 @@ class java_lang_String : AllStatic { static jchar* as_unicode_string(oop java_string, int& length); // Compute the hash value for a java.lang.String object which would - // contain the characters passed in. This hash value is used for at - // least two purposes. + // contain the characters passed in. // - // (a) As the hash value used by the StringTable for bucket selection - // and comparison (stored in the HashtableEntry structures). This - // is used in the String.intern() method. + // As the hash value used by the String object itself, in + // String.hashCode(). This value is normally calculated in Java code + // in the String.hashCode method(), but is precomputed for String + // objects in the shared archive file. + // hash P(31) from Kernighan & Ritchie // - // (b) As the hash value used by the String object itself, in - // String.hashCode(). This value is normally calculate in Java code - // in the String.hashCode method(), but is precomputed for String - // objects in the shared archive file. - // - // For this reason, THIS ALGORITHM MUST MATCH String.hashCode(). - static unsigned int hash_string(jchar* s, int len) { + // For this reason, THIS ALGORITHM MUST MATCH String.toHash(). + template static unsigned int to_hash(T* s, int len) { unsigned int h = 0; while (len-- > 0) { h = 31*h + (unsigned int) *s; @@ -179,6 +175,10 @@ class java_lang_String : AllStatic { } return h; } + static unsigned int to_hash(oop java_string); + + // This is the string hash code used by the StringTable, which may be + // the same as String.toHash or an alternate hash code. static unsigned int hash_string(oop java_string); static bool equals(oop java_string, jchar* chars, int len); diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp index 66218822525..fabe679f3a8 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.cpp +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" @@ -34,12 +35,15 @@ #include "oops/oop.inline2.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/hashtable.inline.hpp" +#include "utilities/numberSeq.hpp" // -------------------------------------------------------------------------- SymbolTable* SymbolTable::_the_table = NULL; // Static arena for symbols that are not deallocated Arena* SymbolTable::_arena = NULL; +bool SymbolTable::_needs_rehashing = false; +jint SymbolTable::_seed = 0; Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS) { // Don't allow symbols to be created which cannot fit in a Symbol*. @@ -121,12 +125,41 @@ void SymbolTable::unlink() { } } +unsigned int SymbolTable::new_hash(Symbol* sym) { + ResourceMark rm; + // Use alternate hashing algorithm on this symbol. + return AltHashing::murmur3_32(seed(), (const jbyte*)sym->as_C_string(), sym->utf8_length()); +} + +// Create a new table and using alternate hash code, populate the new table +// with the existing strings. Set flag to use the alternate hash code afterwards. +void SymbolTable::rehash_table() { + assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); + assert(!DumpSharedSpaces, "this should never happen with -Xshare:dump"); + // Create a new symbol table + SymbolTable* new_table = new SymbolTable(); + + // Initialize the global seed for hashing. + _seed = AltHashing::compute_seed(); + assert(seed() != 0, "shouldn't be zero"); + + the_table()->move_to(new_table); + + // Delete the table and buckets (entries are reused in new table). + delete _the_table; + // Don't check if we need rehashing until the table gets unbalanced again. + // Then rehash with a new global seed. + _needs_rehashing = false; + _the_table = new_table; +} // Lookup a symbol in a bucket. Symbol* SymbolTable::lookup(int index, const char* name, int len, unsigned int hash) { + int count = 0; for (HashtableEntry* e = bucket(index); e != NULL; e = e->next()) { + count++; // count all entries in this bucket, not just ones with same hash if (e->hash() == hash) { Symbol* sym = e->literal(); if (sym->equals(name, len)) { @@ -136,9 +169,21 @@ Symbol* SymbolTable::lookup(int index, const char* name, } } } + // If the bucket size is too deep check if this hash code is insufficient. + if (count >= BasicHashtable::rehash_count && !needs_rehashing()) { + _needs_rehashing = check_rehash_table(count); + } return NULL; } +// Pick hashing algorithm, but return value already given if not using a new +// hash algorithm. +unsigned int SymbolTable::hash_symbol(const char* s, int len, unsigned int hashValue) { + return use_alternate_hashcode() ? + AltHashing::murmur3_32(seed(), (const jbyte*)s, len) : + (hashValue != 0 ? hashValue : java_lang_String::to_hash(s, len)); +} + // We take care not to be blocking while holding the // SymbolTable_lock. Otherwise, the system might deadlock, since the @@ -287,13 +332,17 @@ Symbol* SymbolTable::new_permanent_symbol(const char* name, TRAPS) { } Symbol* SymbolTable::basic_add(int index, u1 *name, int len, - unsigned int hashValue, bool c_heap, TRAPS) { + unsigned int hashValue_arg, bool c_heap, TRAPS) { assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(), "proposed name of symbol must be stable"); // Grab SymbolTable_lock first. MutexLocker ml(SymbolTable_lock, THREAD); + // Check if the symbol table has been rehashed, if so, need to recalculate + // the hash value. + unsigned int hashValue = hash_symbol((const char*)name, len, hashValue_arg); + // Since look-up was done lock-free, we need to check if another // thread beat us in the race to insert the symbol. Symbol* test = lookup(index, (char*)name, len, hashValue); @@ -332,10 +381,13 @@ bool SymbolTable::basic_add(Handle class_loader, constantPoolHandle cp, MutexLocker ml(SymbolTable_lock, THREAD); for (int i=0; iequals(names[i], lengths[i]), "symbol must be properly initialized"); // why wouldn't it be??? - HashtableEntry* entry = new_entry(hashValues[i], sym); + HashtableEntry* entry = new_entry(hashValue, sym); add_entry(index, entry); cp->symbol_at_put(cp_indices[i], sym); } @@ -370,6 +422,24 @@ void SymbolTable::verify() { } } +void SymbolTable::dump(outputStream* st) { + NumberSeq summary; + for (int i = 0; i < the_table()->table_size(); ++i) { + int count = 0; + for (HashtableEntry* e = the_table()->bucket(i); + e != NULL; e = e->next()) { + count++; + } + summary.add((double)count); + } + st->print_cr("SymbolTable statistics:"); + st->print_cr("Number of buckets : %7d", summary.num()); + st->print_cr("Average bucket size : %7.0f", summary.avg()); + st->print_cr("Variance of bucket size : %7.0f", summary.variance()); + st->print_cr("Std. dev. of bucket size: %7.0f", summary.sd()); + st->print_cr("Maximum bucket size : %7.0f", summary.maximum()); +} + //--------------------------------------------------------------------------- // Non-product code @@ -468,7 +538,6 @@ void SymbolTable::print() { } } } - #endif // PRODUCT // -------------------------------------------------------------------------- @@ -514,21 +583,36 @@ class StableMemoryChecker : public StackObj { // -------------------------------------------------------------------------- StringTable* StringTable::_the_table = NULL; +bool StringTable::_needs_rehashing = false; +jint StringTable::_seed = 0; + +// Pick hashing algorithm +unsigned int StringTable::hash_string(const jchar* s, int len, unsigned int hashValue) { + return use_alternate_hashcode() ? AltHashing::murmur3_32(seed(), s, len) : + (hashValue != 0 ? hashValue : java_lang_String::to_hash(s, len)); +} + oop StringTable::lookup(int index, jchar* name, int len, unsigned int hash) { + int count = 0; for (HashtableEntry* l = bucket(index); l != NULL; l = l->next()) { + count++; if (l->hash() == hash) { if (java_lang_String::equals(l->literal(), name, len)) { return l->literal(); } } } + // If the bucket size is too deep check if this hash code is insufficient. + if (count >= BasicHashtable::rehash_count && !needs_rehashing()) { + _needs_rehashing = check_rehash_table(count); + } return NULL; } oop StringTable::basic_add(int index, Handle string_or_null, jchar* name, - int len, unsigned int hashValue, TRAPS) { + int len, unsigned int hashValue_arg, TRAPS) { debug_only(StableMemoryChecker smc(name, len * sizeof(name[0]))); assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(), "proposed name of symbol must be stable"); @@ -547,6 +631,10 @@ oop StringTable::basic_add(int index, Handle string_or_null, jchar* name, assert(java_lang_String::equals(string(), name, len), "string must be properly initialized"); + // Check if the symbol table has been rehashed, if so, need to recalculate + // the hash value before second lookup. + unsigned int hashValue = hash_string(name, len, hashValue_arg); + // Since look-up was done lock-free, we need to check if another // thread beat us in the race to insert the symbol. @@ -566,7 +654,7 @@ oop StringTable::lookup(Symbol* symbol) { ResourceMark rm; int length; jchar* chars = symbol->as_unicode(length); - unsigned int hashValue = java_lang_String::hash_string(chars, length); + unsigned int hashValue = hash_string(chars, length); int index = the_table()->hash_to_index(hashValue); return the_table()->lookup(index, chars, length, hashValue); } @@ -574,7 +662,7 @@ oop StringTable::lookup(Symbol* symbol) { oop StringTable::intern(Handle string_or_null, jchar* name, int len, TRAPS) { - unsigned int hashValue = java_lang_String::hash_string(name, len); + unsigned int hashValue = hash_string(name, len); int index = the_table()->hash_to_index(hashValue); oop string = the_table()->lookup(index, name, len, hashValue); @@ -675,3 +763,52 @@ void StringTable::verify() { } } } + +void StringTable::dump(outputStream* st) { + NumberSeq summary; + for (int i = 0; i < the_table()->table_size(); ++i) { + HashtableEntry* p = the_table()->bucket(i); + int count = 0; + for ( ; p != NULL; p = p->next()) { + count++; + } + summary.add((double)count); + } + st->print_cr("StringTable statistics:"); + st->print_cr("Number of buckets : %7d", summary.num()); + st->print_cr("Average bucket size : %7.0f", summary.avg()); + st->print_cr("Variance of bucket size : %7.0f", summary.variance()); + st->print_cr("Std. dev. of bucket size: %7.0f", summary.sd()); + st->print_cr("Maximum bucket size : %7.0f", summary.maximum()); +} + + +unsigned int StringTable::new_hash(oop string) { + ResourceMark rm; + int length; + jchar* chars = java_lang_String::as_unicode_string(string, length); + // Use alternate hashing algorithm on the string + return AltHashing::murmur3_32(seed(), chars, length); +} + +// Create a new table and using alternate hash code, populate the new table +// with the existing strings. Set flag to use the alternate hash code afterwards. +void StringTable::rehash_table() { + assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); + assert(!DumpSharedSpaces, "this should never happen with -Xshare:dump"); + StringTable* new_table = new StringTable(); + + // Initialize new global seed for hashing. + _seed = AltHashing::compute_seed(); + assert(seed() != 0, "shouldn't be zero"); + + // Rehash the table + the_table()->move_to(new_table); + + // Delete the table and buckets (entries are reused in new table). + delete _the_table; + // Don't check if we need rehashing until the table gets unbalanced again. + // Then rehash with a new global seed. + _needs_rehashing = false; + _the_table = new_table; +} diff --git a/hotspot/src/share/vm/classfile/symbolTable.hpp b/hotspot/src/share/vm/classfile/symbolTable.hpp index 3e0777fc7c1..6afc2524498 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.hpp +++ b/hotspot/src/share/vm/classfile/symbolTable.hpp @@ -40,6 +40,7 @@ // - symbolTableEntrys are allocated in blocks to reduce the space overhead. class BoolObjectClosure; +class outputStream; // Class to hold a newly created or referenced Symbol* temporarily in scope. @@ -78,6 +79,10 @@ private: // The symbol table static SymbolTable* _the_table; + // Set if one bucket is out of balance due to hash algorithm deficiency + static bool _needs_rehashing; + static jint _seed; + // For statistics static int symbols_removed; static int symbols_counted; @@ -119,6 +124,11 @@ private: static Arena* arena() { return _arena; } // called for statistics static void initialize_symbols(int arena_alloc_size = 0); + + static bool use_alternate_hashcode() { return _seed != 0; } + static jint seed() { return _seed; } + + unsigned int new_hash(Symbol* sym); public: enum { symbol_alloc_batch_size = 8, @@ -146,6 +156,8 @@ public: initialize_symbols(); } + static unsigned int hash_symbol(const char* s, int len, unsigned int hashValue = 0); + static Symbol* lookup(const char* name, int len, TRAPS); // lookup only, won't add. Also calculate hash. static Symbol* lookup_only(const char* name, int len, unsigned int& hash); @@ -208,6 +220,7 @@ public: // Debugging static void verify(); + static void dump(outputStream* st); // Sharing static void copy_buckets(char** top, char*end) { @@ -219,8 +232,13 @@ public: static void reverse(void* boundary = NULL) { the_table()->Hashtable::reverse(boundary); } + + // Rehash the symbol table if it gets out of balance + static void rehash_table(); + static bool needs_rehashing() { return _needs_rehashing; } }; + class StringTable : public Hashtable { friend class VMStructs; @@ -228,6 +246,10 @@ private: // The string table static StringTable* _the_table; + // Set if one bucket is out of balance due to hash algorithm deficiency + static bool _needs_rehashing; + static jint _seed; + static oop intern(Handle string_or_null, jchar* chars, int length, TRAPS); oop basic_add(int index, Handle string_or_null, jchar* name, int len, unsigned int hashValue, TRAPS); @@ -241,6 +263,10 @@ private: : Hashtable((int)StringTableSize, sizeof (HashtableEntry), t, number_of_entries) {} + static bool use_alternate_hashcode() { return _seed != 0; } + static jint seed() { return _seed; } + + unsigned int new_hash(oop s); public: // The string table static StringTable* the_table() { return _the_table; } @@ -265,6 +291,14 @@ public: // Invoke "f->do_oop" on the locations of all oops in the table. static void oops_do(OopClosure* f); + // Hashing algorithm, used as the hash value used by the + // StringTable for bucket selection and comparison (stored in the + // HashtableEntry structures). This is used in the String.intern() method. + static unsigned int hash_string(const jchar* s, int len, unsigned int hashValue = 0); + + // Internal test. + static void test_alt_hash() PRODUCT_RETURN; + // Probing static oop lookup(Symbol* symbol); @@ -275,6 +309,7 @@ public: // Debugging static void verify(); + static void dump(outputStream* st); // Sharing static void copy_buckets(char** top, char*end) { @@ -286,6 +321,9 @@ public: static void reverse() { the_table()->Hashtable::reverse(); } -}; + // Rehash the symbol table if it gets out of balance + static void rehash_table(); + static bool needs_rehashing() { return _needs_rehashing; } +}; #endif // SHARE_VM_CLASSFILE_SYMBOLTABLE_HPP diff --git a/hotspot/src/share/vm/memory/dump.cpp b/hotspot/src/share/vm/memory/dump.cpp index e91d33135e4..c9950524220 100644 --- a/hotspot/src/share/vm/memory/dump.cpp +++ b/hotspot/src/share/vm/memory/dump.cpp @@ -62,8 +62,8 @@ public: // written later, increasing the likelihood that the shared page contain // the hash can be shared. // -// NOTE THAT the algorithm in StringTable::hash_string() MUST MATCH the -// algorithm in java.lang.String.hashCode(). +// NOTE THAT we have to call java_lang_String::to_hash() to match the +// algorithm in java.lang.String.toHash(). class StringHashCodeClosure: public OopClosure { private: @@ -80,7 +80,7 @@ public: oop obj = *p; if (obj->klass() == SystemDictionary::String_klass() && java_lang_String::has_hash_field()) { - int hash = java_lang_String::hash_string(obj); + int hash = java_lang_String::to_hash(obj); obj->int_field_put(hash_offset, hash); } } diff --git a/hotspot/src/share/vm/prims/jni.cpp b/hotspot/src/share/vm/prims/jni.cpp index b37f44a9120..166bbd6079d 100644 --- a/hotspot/src/share/vm/prims/jni.cpp +++ b/hotspot/src/share/vm/prims/jni.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" #include "classfile/classLoader.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" @@ -5053,6 +5054,7 @@ void execute_internal_vm_tests() { run_unit_test(arrayOopDesc::test_max_array_length()); run_unit_test(CollectedHeap::test_is_in()); run_unit_test(QuickSort::test_quick_sort()); + run_unit_test(AltHashing::test_alt_hash()); tty->print_cr("All internal VM tests passed"); } } diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index 1838252c37b..ff4adf0109e 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -2662,6 +2662,9 @@ class CommandLineFlags { product(bool, UseHeavyMonitors, false, \ "use heavyweight instead of lightweight Java monitors") \ \ + product(bool, PrintStringTableStatistics, false, \ + "print statistics about the StringTable and SymbolTable") \ + \ notproduct(bool, PrintSymbolTableSizeHistogram, false, \ "print histogram of the symbol table") \ \ diff --git a/hotspot/src/share/vm/runtime/init.cpp b/hotspot/src/share/vm/runtime/init.cpp index c0e870ea26e..d46de5c6532 100644 --- a/hotspot/src/share/vm/runtime/init.cpp +++ b/hotspot/src/share/vm/runtime/init.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/symbolTable.hpp" #include "code/icBuffer.hpp" #include "gc_interface/collectedHeap.hpp" #include "interpreter/bytecodes.hpp" @@ -157,6 +158,10 @@ void exit_globals() { // Print the collected safepoint statistics. SafepointSynchronize::print_stat_on_exit(); } + if (PrintStringTableStatistics) { + SymbolTable::dump(tty); + StringTable::dump(tty); + } ostream_exit(); } } diff --git a/hotspot/src/share/vm/runtime/safepoint.cpp b/hotspot/src/share/vm/runtime/safepoint.cpp index 514e7c97657..c29d257cc3f 100644 --- a/hotspot/src/share/vm/runtime/safepoint.cpp +++ b/hotspot/src/share/vm/runtime/safepoint.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" #include "code/icBuffer.hpp" @@ -526,8 +527,20 @@ void SafepointSynchronize::do_cleanup_tasks() { CompilationPolicy::policy()->do_safepoint_work(); } - TraceTime t4("sweeping nmethods", TraceSafepointCleanupTime); - NMethodSweeper::scan_stacks(); + { + TraceTime t4("sweeping nmethods", TraceSafepointCleanupTime); + NMethodSweeper::scan_stacks(); + } + + if (SymbolTable::needs_rehashing()) { + TraceTime t5("rehashing symbol table", TraceSafepointCleanupTime); + SymbolTable::rehash_table(); + } + + if (StringTable::needs_rehashing()) { + TraceTime t6("rehashing string table", TraceSafepointCleanupTime); + StringTable::rehash_table(); + } // rotate log files? if (UseGCLogFileRotation) { diff --git a/hotspot/src/share/vm/utilities/hashtable.cpp b/hotspot/src/share/vm/utilities/hashtable.cpp index 698e137ff82..1b722195d8b 100644 --- a/hotspot/src/share/vm/utilities/hashtable.cpp +++ b/hotspot/src/share/vm/utilities/hashtable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -86,6 +86,55 @@ template HashtableEntry* Hashtable::new_entry(unsigned int hashV } +// Check to see if the hashtable is unbalanced. The caller set a flag to +// rehash at the next safepoint. If this bucket is 60 times greater than the +// expected average bucket length, it's an unbalanced hashtable. +// This is somewhat an arbitrary heuristic but if one bucket gets to +// rehash_count which is currently 100, there's probably something wrong. + +bool BasicHashtable::check_rehash_table(int count) { + assert(table_size() != 0, "underflow"); + if (count > (((double)number_of_entries()/(double)table_size())*rehash_multiple)) { + // Set a flag for the next safepoint, which should be at some guaranteed + // safepoint interval. + return true; + } + return false; +} + +// Create a new table and using alternate hash code, populate the new table +// with the existing elements. This can be used to change the hash code +// and could in the future change the size of the table. + +template void Hashtable::move_to(Hashtable* new_table) { + int saved_entry_count = number_of_entries(); + + // Iterate through the table and create a new entry for the new table + for (int i = 0; i < new_table->table_size(); ++i) { + for (HashtableEntry* p = bucket(i); p != NULL; ) { + HashtableEntry* next = p->next(); + T string = p->literal(); + // Use alternate hashing algorithm on the symbol in the first table + unsigned int hashValue = new_hash(string); + // Get a new index relative to the new table (can also change size) + int index = new_table->hash_to_index(hashValue); + p->set_hash(hashValue); + unlink_entry(p); + new_table->add_entry(index, p); + p = next; + } + } + // give the new table the free list as well + new_table->copy_freelist(this); + assert(new_table->number_of_entries() == saved_entry_count, "lost entry on dictionary copy?"); + + // Destroy memory used by the buckets in the hashtable. The memory + // for the elements has been used in a new table and is not + // destroyed. The memory reuse will benefit resizing the SystemDictionary + // to avoid a memory allocation spike at safepoint. + free_buckets(); +} + // Reverse the order of elements in the hash buckets. void BasicHashtable::reverse() { diff --git a/hotspot/src/share/vm/utilities/hashtable.hpp b/hotspot/src/share/vm/utilities/hashtable.hpp index 527470938d9..46b9c1bbe62 100644 --- a/hotspot/src/share/vm/utilities/hashtable.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.hpp @@ -159,8 +159,6 @@ public: // Reverse the order of elements in each of the buckets. void reverse(); - static unsigned int hash_symbol(const char* s, int len); - private: // Instance variables int _table_size; @@ -179,6 +177,11 @@ protected: void verify_lookup_length(double load); #endif + enum { + rehash_count = 100, + rehash_multiple = 60 + }; + void initialize(int table_size, int entry_size, int number_of_entries); // Accessor @@ -193,6 +196,34 @@ protected: // Table entry management BasicHashtableEntry* new_entry(unsigned int hashValue); + // Check that the table is unbalanced + bool check_rehash_table(int count); + + // Used when moving the entry to another table + // Clean up links, but do not add to free_list + void unlink_entry(BasicHashtableEntry* entry) { + entry->set_next(NULL); + --_number_of_entries; + } + + // Move over freelist and free block for allocation + void copy_freelist(BasicHashtable* src) { + _free_list = src->_free_list; + src->_free_list = NULL; + _first_free_entry = src->_first_free_entry; + src->_first_free_entry = NULL; + _end_block = src->_end_block; + src->_end_block = NULL; + } + + // Free the buckets in this hashtable + void free_buckets() { + if (NULL != _buckets) { + FREE_C_HEAP_ARRAY(HashtableBucket, _buckets); + _buckets = NULL; + } + } + public: int table_size() { return _table_size; } void set_entry(int index, BasicHashtableEntry* entry); @@ -249,6 +280,10 @@ protected: HashtableEntry** bucket_addr(int i) { return (HashtableEntry**)BasicHashtable::bucket_addr(i); } + + // Function to move these elements into the new table. + void move_to(Hashtable* new_table); + virtual unsigned int new_hash(T) { ShouldNotReachHere(); return 0; } // should be overridden }; diff --git a/hotspot/src/share/vm/utilities/hashtable.inline.hpp b/hotspot/src/share/vm/utilities/hashtable.inline.hpp index 8cd2f89d0c8..68741427975 100644 --- a/hotspot/src/share/vm/utilities/hashtable.inline.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -30,27 +30,6 @@ // Inline function definitions for hashtable.hpp. - -// -------------------------------------------------------------------------- -// Hash function - -// We originally used hashpjw, but hash P(31) gives just as good results -// and is slighly faster. We would like a hash function that looks at every -// character, since package names have large common prefixes, and also because -// hash_or_fail does error checking while iterating. - -// hash P(31) from Kernighan & Ritchie - -inline unsigned int BasicHashtable::hash_symbol(const char* s, int len) { - unsigned int h = 0; - while (len-- > 0) { - h = 31*h + (unsigned) *s; - s++; - } - return h; -} - - // -------------------------------------------------------------------------- // Initialize a table. diff --git a/hotspot/test/runtime/7158800/BadUtf8.java b/hotspot/test/runtime/7158800/BadUtf8.java new file mode 100644 index 00000000000..8b79762a365 --- /dev/null +++ b/hotspot/test/runtime/7158800/BadUtf8.java @@ -0,0 +1,1254 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7158800 + * @summary Test that 1200 symbols that hash to the same value triggers + * the symbol table alternate hashing mechanism. There isn't actually a + * way to verify this. + */ +// +// Generate large number of strings that hash to the same value +// to slow down symbol table lookup. + +import java.io.BufferedOutputStream; +import java.io.FileOutputStream; + +public class BadUtf8 { +static String[] strings = { + "EOcLKvbddZyPxYpb", + "DncLKvbdPxmAGrqj", + "DoCjjvbdpxoIHQdY", + "EPCkKvbdqYoHfqEY", + "DnbkKvbdezvYdiUX", + "DnbjjvbdeEoRbXCj", + "EObkKvbdbsCkUEKB", + "EOcLKvbdnUtyjiqf", + "DncLKvbdRWnDcMHc", + "DoCkKvbdrSUkOLAm", + "DncLKvbdfNFwGmJk", + "EPDLKvbdvAdYroFI", + "DoDLKvbdiGibyViu", + "DncLKvbdYqNEhmFR", + "DoCkKvbdEARhlzXX", + "DncLKvbdSZjHsCvA", + "DncKjvbdqTsgRqkU", + "DnbjjvbdqAiFAXHd", + "EPDKjvbdGcjvJaij", + "DnbkKvbdwtldpxkn", + "DoDKjvbdYkrETnMN", + "EPCjjvbdbBWEfQQX", + "EPCjjvbduMXwAtBX", + "DncLKvbdbsCkTcia", + "DoCjjvbdczYpYZRC", + "EOcKjvbdFeiqmhsq", + "DoCkKvbdKCicQibx", + "EOcKjvbdZLrEUOLm", + "DoCjjvbdaNKbStmH", + "DoDKjvbdJbjDQjDY", + "EPCkKvbdemFwGmKL", + "EPDKjvbdZQleImEq", + "DncKjvbdZjShPfbG", + "DnbjjvbdqYnhHREY", + "DoCkKvbdaRfDIUGL", + "DoDKjvbdLrWlyuQz", + "DnbjjvbdZisHofaf", + "EObjjvbdhtydvrUb", + "DnbjjvbdRotHKGEX", + "EObjjvbdNeEThhkE", + "EPCjjvbdZtJJZESn", + "DoDKjvbdnPyxvLYb", + "EPDKjvbdeEoRbWbj", + "EOcLKvbdFxttaEXb", + "EObjjvbddwystRez", + "EPCjjvbdJpzEnenF", + "DnbkKvbdTppntuIN", + "EPCkKvbdTukpKUBR", + "DnbkKvbdhlFEOUcZ", + "EObkKvbdlhdUQuRa", + "DnbjjvbdkClKqHUg", + "EOcKjvbdqTtGqqkU", + "DncKjvbdtkwvaUBX", + "DoDKjvbdsQWOjCuf", + "DncLKvbdEKIJuwjA", + "DncKjvbdGLErcIMu", + "EOcLKvbdNPwpumfs", + "EObkKvbdnVUzLJrG", + "DoCkKvbdcTDKsdKB", + "DncKjvbdKRZdoFme", + "EOcLKvbdemFvgNKL", + "EPCkKvbdznopdblY", + "EPDLKvbdOYPVzdOU", + "DnbjjvbdsZlPsAhO", + "DoDLKvbdKCjDRKDY", + "DoCkKvbdhuZeXSVC", + "EPDKjvbdOStVgEtp", + "DncLKvbdvwMAvBWV", + "EPDKjvbdBcoaWJlf", + "EOcKjvbdZxdKODMS", + "DoCjjvbdbsCkTcjB", + "EOcLKvbdwWlAuaWV", + "DnbjjvbdFejRnJUR", + "DnbjjvbdmIdTqVSB", + "DnbkKvbdqBIeAWhE", + "DncKjvbdrMzJyMIJ", + "DoCkKvbdZGvdAOsJ", + "DncLKvbdjggLfFnL", + "DoCjjvbdYqNFJMdq", + "DoCkKvbdqZPHfqDx", + "DncLKvbdOEdThiLE", + "DoCkKvbdZirgpGaf", + "EPDLKvbdziuQPdSt", + "EObkKvbdKQyeOenF", + "DoDLKvbduaDySndh", + "DoCjjvbdVUNUGLvK", + "DncKjvbdAMhYrvzY", + "DnbkKvbdnQZxvKxb", + "EPCjjvbdBhjakJFj", + "DncLKvbdmfeYNNfy", + "DoDLKvbdjlbLydfo", + "DoDLKvbdpyPIGpcx", + "EOcLKvbdnVUzLJqf", + "DoCjjvbdmJETqVSB", + "DoDLKvbdJTZAsMxM", + "DoCkKvbdnQZxvLZC", + "DoDKjvbdACqwizJQ", + "DncKjvbdvBEZSoFI", + "DncKjvbdGckVjCJj", + "DncLKvbdiMFENtcZ", + "Dnbjjvbdjuvmcaww", + "DnbkKvbdZyEKNblS", + "DoCjjvbduMYXBUBX", + "DnbjjvbdFWYopNJe", + "DoDKjvbdelfXGljL", + "DnbjjvbdakLenmcA", + "EPDKjvbdfILWRmpg", + "EObjjvbdSLYeuHLT", + "DoCjjvbdMfbolotk", + "EPDLKvbdrRuKnKaN", + "EOcKjvbdyzdnRhIh", + "DoDLKvbdGAoRZJzm", + "DoCjjvbdhlFDnUcZ", + "EPDLKvbdmpZyVkYb", + "DncKjvbdTpqPUuIN", + "DncLKvbdHDjvJaij", + "EPDLKvbdYlRcsmkm", + "EPDLKvbdvlvAMdFN", + "DncKjvbdIsZArmYM", + "EOcLKvbdegjuqnQg", + "EOcLKvbdZQmFJNFR", + "DoCjjvbdZxdJmcMS", + "EPCkKvbdlZTSTYgU", + "DoDKjvbdqceJPnWB", + "DncLKvbdVgwuxGxz", + "DncKjvbdDnbkLXDE", + "EPDLKvbdatbHYKsh", + "DncKjvbdEzsqFLbi", + "EPDLKvbdnVVZkKRf", + "EOcKjvbdKeegbBQu", + "EPCkKvbdKfGHaaRV", + "EPDKjvbdmIctRVRa", + "EPCjjvbdRMxBxnUz", + "DnbjjvbdJYTbILpp", + "EPCkKvbdTAEiHbPE", + "EOcLKvbdfelZnGgA", + "DoCjjvbdOStWGeUp", + "EOcLKvbdemGXHNJk", + "DoDKjvbdYTMAmUOx", + "EPCkKvbdpyOhGpcx", + "EPCkKvbdAMgxsWzY", + "DnbjjvbdYkrETnMN", + "EPDLKvbdUQqPUtgm", + "DncKjvbdehKurNqH", + "DoCjjvbdZMSETnLm", + "DoDKjvbdIHGyyXwg", + "EObjjvbdXGYzUAPT", + "DoCjjvbdhbPCeWqR", + "DoCkKvbdKNADzGuB", + "DnbjjvbdFeirOJTq", + "DncLKvbdaRecHtFk", + "DnbkKvbdzoPpeClY", + "EObkKvbdZRMeJMeR", + "DnbjjvbdYfvdAPSi", + "DncLKvbdJcKCqJcY", + "EOcLKvbdqvokbhyR", + "DoDLKvbdrRuLNjaN", + "DoCjjvbdTlWPBWOi", + "DoCkKvbdjvWnEBxX", + "DoDLKvbdTkunaVoJ", + "DoCkKvbdQZNAHTSK", + "EObjjvbdqwPkbhyR", + "EOcLKvbdNHDPlpUk", + "DncLKvbdIHHZxxYH", + "DncLKvbdtkxXAtAw", + "DncLKvbdSCEFMJZL", + "DnbjjvbdZQmEhldq", + "DoCjjvbdNGbolotk", + "DnbjjvbdnCKWwnmu", + "DncLKvbdzHZMANEw", + "DoDKjvbdmttykJrG", + "DnbkKvbdlrZUzSci", + "EPDKjvbdSKyGVHKs", + "DoCjjvbdKVuGEFGi", + "EPCjjvbdCIkBkIej", + "DncLKvbdzHZMAMeX", + "DnbkKvbdaSFbgsek", + "DncLKvbdHDjujBij", + "DoDKjvbdGZVUaDwb", + "DnbjjvbdZnnJFEzK", + "DoCkKvbdtcDUwWOo", + "DoCkKvbdlBMoNALA", + "EOcKjvbdNsUWHFUp", + "DoDLKvbdVUNUFlVj", + "DnbkKvbdhkdcnUcZ", + "DncLKvbdLiBkqYAS", + "EOcKjvbdzoPpdcLx", + "EPDKjvbdijGIJmXr", + "EOcKjvbdZisHofaf", + "DoDLKvbdeOdrkUUS", + "DoDLKvbdnPyxvKxb", + "EPDKjvbdIxUBhMRQ", + "DncLKvbdlhctRUqa", + "DoDLKvbdmgFXlnGy", + "DncKjvbdCJKbKiGK", + "EOcLKvbddndrjtUS", + "DnbjjvbdkDLjqGuH", + "DncKjvbdmIcsptqa", + "DoCkKvbdvvlAvBWV", + "EObjjvbdjblLQftg", + "DnbjjvbdCEQBWKMf", + "DnbjjvbdBdPaVilf", + "DoCkKvbdZxcjODLr", + "DoCkKvbdEObjjwCd", + "EPDKjvbdyTNhlqbH", + "EPCkKvbdUMVoAvPJ", + "DncKjvbdUxhUZjoO", + "DncKjvbdqqtjmkAm", + "DncKjvbdKfGICBRV", + "EPCjjvbdVrOXaeLc", + "EPDLKvbdwXLaWBWV", + "EPCkKvbdjblKqHUg", + "DnbjjvbduDCuWuoP", + "EPDKjvbdNGbpMouL", + "EObjjvbdBcoaVjNG", + "DncLKvbdrWpMDIxq", + "DncLKvbdhaoCdwRR", + "DnbkKvbdFxtuBDwb", + "DncKjvbdIjEAKPgE", + "EOcLKvbduCbuXVoP", + "DoDKjvbdZtIiZDsO", + "DnbjjvbdEztRElCi", + "DncLKvbdxmsHwsJD", + "DnbjjvbdRbEElIxk", + "DoDKjvbdWHwvXgYz", + "EOcKjvbdQlwbYnUz", + "EOcLKvbdVTltFkuj", + "DncKjvbdliETptqa", + "DnbkKvbddoErjtTr", + "DoCkKvbdgPazvdXh", + "DncKjvbdySmhlqag", + "DoCjjvbdbPgHDkzd", + "DoCkKvbdFWZPomKF", + "EObjjvbdssSSxydc", + "EObjjvbdzQnliJwA", + "EObkKvbdKCjCpibx", + "EPCjjvbdpyOhHREY", + "DncLKvbddjJqutzn", + "EObkKvbdBdQAujMf", + "EPCkKvbdLAjflbXq", + "DncLKvbdLBLGlaxR", + "DoDLKvbdrpWPJbuf", + "DoCjjvbdEKHiuxKA", + "DoCjjvbdXsMAlsnx", + "EObkKvbdptTgSSLU", + "DoDKjvbdnHFXmNfy", + "DncKjvbdCJKbKhej", + "EPCjjvbdhlEdOUby", + "EOcKjvbdKWUfEFGi", + "DoDKjvbdZQmFJMdq", + "EPCjjvbdiGjDZWKV", + "EObkKvbdVAbQrprZ", + "DoDKjvbdfekzNgHA", + "DoDLKvbdnHEwlmgZ", + "DncKjvbdwzHeexEr", + "DoCjjvbdmpZxujyC", + "EPDKjvbdwMvAMcdm", + "DoCjjvbdfHkVrNqH", + "EPCkKvbdYzbfRiuy", + "EPCkKvbdZtIiZDrn", + "DnbjjvbdjvWnDbYX", + "DoCjjvbdOStVgEtp", + "EPDLKvbdZMSETmlN", + "EPDKjvbdBhjajhej", + "EPCjjvbddoFTLUUS", + "DnbkKvbdsQVoJcWG", + "EPCjjvbdrEFJQNvB", + "DoCjjvbdMpYRWOGs", + "EOcLKvbdZirgpHBf", + "EPDLKvbdyOTIXsJD", + "DoCkKvbdKRZdnfNe", + "DnbjjvbdbBWFFoow", + "EPCjjvbdgFlZnHHA", + "DnbkKvbdGGJrOIsq", + "DoDLKvbduDCtwWPP", + "EObjjvbdNddUIhjd", + "DnbjjvbdxsNiMqag", + "EObjjvbddeOrCWbj", + "EObjjvbdPxmAGsRj", + "EOcLKvbddeOrCXDK", + "DoDLKvbddeOrBwCj", + "DoCjjvbdVqnYCElD", + "DnbkKvbdUyIUZjoO", + "EObjjvbdeFOrCXDK", + "EObkKvbdVrNxCFLc", + "EObjjvbdTfzmkwWF", + "EOcKjvbdIHGzZYYH", + "EPDKjvbdtbbuXWPP", + "DoCjjvbdZisIQHBf", + "EObjjvbdbsCkUDjB", + "EPCkKvbdVwJXudFH", + "EPDKjvbdrouoKDVf", + "EPCkKvbdFyVVBEYC", + "DncLKvbdZnnIeEzK", + "EPDLKvbdxVNFQxkn", + "DoDKjvbdpxnggRDx", + "DoDLKvbdqZOgfpcx", + "DncKjvbdCIjakJGK", + "EPCkKvbdCJLBjhej", + "DoDLKvbdnPzYvKxb", + "EOcKjvbdqTsgSRkU", + "EOcLKvbdLBLGlaxR", + "DoDLKvbdcbTMrAUN", + "DncLKvbdzitoodSt", + "DoDKjvbdJvUfDdfi", + "EOcLKvbdHDjvKCJj", + "EPCkKvbdeOeTKssr", + "DnbkKvbdlYrqsYft", + "DncLKvbdiiehKMxS", + "DncKjvbdURQoVUhN", + "DnbkKvbduMYXBUAw", + "DoDLKvbdSPtHJfEX", + "EObkKvbdqBJFAWgd", + "EOcKjvbdFpATWgFy", + "DoDLKvbdBsBDTfXS", + "DncKjvbdjhHLfFmk", + "DoCjjvbdCJKakIfK", + "DnbkKvbddoFSjtTr", + "EObkKvbdANIYsWzY", + "EObjjvbdCTAbtFvr", + "EObjjvbdrRtkOLAm", + "DnbkKvbdkxsSTYgU", + "DoCjjvbdnBiwXnmu", + "EObjjvbdwtmEqYlO", + "EPDKjvbdrylQTAhO", + "DoDLKvbdtbbtvvOo", + "EPCjjvbdZLrETmlN", + "EPDLKvbdWXJYWDdg", + "DoCkKvbdKQzFOfOF", + "EPCjjvbdwzIFfXeS", + "DncKjvbdRjyFuHLT", + "EPDLKvbdULunaWPJ", + "DncKjvbdUxhTykOn", + "DnbkKvbdJcKCqKDY", + "EPDLKvbdcbSmSATm", + "DnbkKvbdegjurNqH", + "EPDKjvbdZjTIQGbG", + "EPCjjvbdiLddNuCy", + "DoCjjvbdZQldiNEq", + "EOcLKvbdakMGPODA", + "EObjjvbdnHEwlmgZ", + "EOcLKvbdBsAcUGXS", + "EPCkKvbdiVZdwSUb", + "EOcLKvbddCTNSAUN", + "DnbkKvbdEXxMUUUM", + "DncKjvbdYpldiMeR", + "DoDKjvbdNddTiIjd", + "DoDLKvbdZLqdUNlN", + "EPCkKvbdiBncFWpq", + "DncLKvbdiCPDEvqR", + "EOcKjvbdUyHszKoO", + "DncKjvbdhtydvqtb", + "EPCjjvbdpxoHgQcx", + "EObkKvbdkWWnDaxX", + "DnbjjvbdBhkBkJFj", + "DoCkKvbdRacdkhyL", + "EOcLKvbdZjTHpHCG", + "EPCkKvbdMowqWOGs", + "DncLKvbdegjurNpg", + "EObjjvbdfMfWfmKL", + "EPDLKvbdZirgpGaf", + "DoDLKvbdiZuFlQnG", + "DncLKvbdFxuVAcxC", + "EObkKvbdZisHofaf", + "EOcKjvbdJSyBSmYM", + "EPDLKvbdVYgtZkPO", + "EOcKjvbdRbEFMJYk", + "DncLKvbdrEFIonWB", + "DncKjvbdKDJbqJcY", + "EOcLKvbdhfjCxuiu", + "EObjjvbdLLAhWAKZ", + "DoCkKvbdRXNcblID", + "DoDLKvbdcbSmSATm", + "EOcLKvbdwWlAvAuu", + "EObkKvbdiBnbdvpq", + "DoCkKvbdNQXpumgT", + "DncLKvbdkVwOECYX", + "DnbkKvbdfoazwDxI", + "DoDLKvbdbBWFFpPw", + "DoDLKvbdvBDxsPEh", + "EPDKjvbdJqZdoFme", + "DoDLKvbdIryArmXl", + "EPCjjvbdANIZSwZx", + "EPCkKvbdVhYVxGxz", + "DncKjvbdLAjgNCYR", + "DncKjvbdxxIjCQZk", + "DncKjvbdbiNKKewY", + "EPCjjvbdlrZVZsEJ", + "EPDKjvbdIryAsMwl", + "DoCkKvbdtAHRIAAr", + "EPDKjvbdJmAEZfuB", + "EPCkKvbdZjSgogBf", + "DoDLKvbdOXnuzcnU", + "DnbkKvbdehKvRnQg", + "EObjjvbdZyDimbkr", + "DoDKjvbdmajWwoOV", + "EOcKjvbdkMalZeHP", + "EOcKjvbdIjEAJpHE", + "EPCkKvbdDihKVxKA", + "DncKjvbdNddUIiKd", + "EObjjvbdqdFIpOWB", + "DoCkKvbdxnShXsJD", + "DoDLKvbdjmBkzEfo", + "EOcLKvbdatagYLTh", + "DoCjjvbdVhYVxHYz", + "DnbjjvbdJbjDRKDY", + "EPCjjvbdLBLHNCYR", + "DnbjjvbdnGeYNOGy", + "EOcLKvbdUsmTekvK", + "EPCjjvbdtkxXBTaX", + "EPCjjvbdzoPqFCkx", + "DncKjvbdCIjbKhej", + "DncKjvbdZLqdTmkm", + "DoDKjvbdsPunicVf", + "EOcKjvbdmgFXmNgZ", + "EObkKvbdiMFENuCy", + "DoDKjvbdhanbeXRR", + "EObkKvbdACqwiyhp", + "DncKjvbdZisIQHBf", + "EPCjjvbdgQBzwDwh", + "DnbjjvbdyYJJaoyk", + "DoDKjvbdxUldqZMO", + "EObkKvbdkClLQgVH", + "EPCjjvbdZQldiMeR", + "EPDLKvbdZyEKOClS", + "EPDLKvbdcIlikFvx", + "DoDKjvbdrzMQTBHn", + "DnbjjvbdVYgtZkPO", + "DoDLKvbdHEKuiajK", + "EPCkKvbdczZQXxqC", + "DoDKjvbdrDdiQNua", + "DncLKvbdcImKLGWx", + "DoCjjvbdVYgtZkPO", + "EPDLKvbdZnnIeFZj", + "EPDKjvbdMIakqYAS", + "DoCkKvbdSLYfUgLT", + "EPDLKvbdiCObdvpq", + "DnbjjvbdRpUHKFcw", + "DoDLKvbdIHHZyYXg", + "EPCjjvbdypoMhiwA", + "DnbkKvbdCEPaVjMf", + "DnbkKvbderAvzlDP", + "DnbkKvbdZQleImFR", + "EOcKjvbdKRZdneme", + "DoDLKvbdiBnbeXQq", + "DncLKvbdEPDKjvcE", + "EOcLKvbdauCGwkTh", + "DncLKvbdEvZQPmJe", + "EPCkKvbdURQnuVIN", + "DncLKvbdegjvSOQg", + "EPCjjvbdKaKgMawq", + "DnbkKvbdRzKISbvA", + "DncLKvbdiLdcnUcZ", + "EPDLKvbdkDMKpfuH", + "DoDLKvbdRbDdkhyL", + "DnbjjvbdDwxMUUTl", + "DnbkKvbdrpWPKCuf", + "DnbkKvbdNVSqjmAX", + "DoDKjvbdRbDeMIxk", + "EOcLKvbdcyxpXyRC", + "DncLKvbdRMwbYnUz", + "EObjjvbdqlzJxlHi", + "DoCkKvbdJYUCIMQp", + "DncLKvbdLZQjSzuG", + "EOcKjvbdxVNEqYkn", + "DnbkKvbdZoOIeFZj", + "DoCjjvbdBraCtFwS", + "EOcLKvbdliDsqVSB", + "EPCkKvbdeATqNXif", + "DncLKvbdkMbLydgP", + "EObjjvbdZxdJmbkr", + "DoCjjvbdraellHLZ", + "EObkKvbduDCuWvPP", + "DoCkKvbdpstGrSLU", + "DoCjjvbdLGFgbBQu", + "DnbkKvbdhtzFWquC", + "EObjjvbdoAKztHdO", + "EPDLKvbdatafxKtI", + "EPDKjvbdkWXNcaww", + "DoCkKvbdwkXEHzzG", + "EObkKvbdmgEwmNgZ", + "DncKjvbdBiLCLJFj", + "DoCjjvbdeOdsKssr", + "EOcLKvbdfILWSORH", + "EObkKvbdCDpAujMf", + "EPDKjvbdKDKDQibx", + "DoDKjvbdVUMtGLuj", + "EObkKvbdrXQMCiYq", + "DncKjvbdePEsLTtS", + "DncLKvbdDxYLtUTl", + "EPCkKvbdGYuVBEYC", + "DncLKvbdNeEUIiKd", + "EPCkKvbdpxoIHRDx", + "EObjjvbdFkEsDHlu", + "EObjjvbdssSSxzFD", + "DoCkKvbdUtNTfMVj", + "DnbjjvbdJcKDRKDY", + "DncKjvbdqiAKEmOe", + "DoDKjvbdtlXwAtBX", + "DnbkKvbdxmsIYTIc", + "EObkKvbdLrXMzUpz", + "DoCjjvbdkxsSSxft", + "DncKjvbdQlwaxnUz", + "EObkKvbdjhGlFfNk", + "EPCkKvbdxsNhmRag", + "DoDLKvbdMfcPmQUk", + "DoDKjvbdQvnEDLhD", + "EObjjvbdVgxVxHYz", + "DoDLKvbdlrYtyrdJ", + "DoCjjvbdezvYeIsw", + "DncLKvbdNddTiIjd", + "EPDLKvbdGGJrNiUR", + "EPDLKvbdRzJhTDWA", + "EPCjjvbdvvkaWBVu", + "EOcKjvbdRXNdCkgc", + "EOcKjvbdQZNAHTSK", + "EPCkKvbdsCGNLfkZ", + "EOcLKvbdDwwktTsl", + "EOcLKvbdqlzJyLgi", + "EOcLKvbdxsNiMqag", + "EOcLKvbdhzVFlROG", + "EOcKjvbdEztRFMCi", + "DnbkKvbdqiAJdmPF", + "EPDLKvbdjcMKqGtg", + "EObkKvbdTlWOaWOi", + "EPDLKvbdURRPUuHm", + "DoDKjvbdelfWgNKL", + "EOcLKvbdGAnqZJzm", + "EObjjvbdGZUuAdXb", + "DoDLKvbduLwwAtAw", + "DoCjjvbdZjTIQGbG", + "EPCjjvbdRNXbYnUz", + "EPDLKvbdiLeENtby", + "EObjjvbdMowpunGs", + "EOcKjvbdbiNJjevx", + "DoDKjvbdEYYLstTl", + "DoDLKvbdqUTfrRjt", + "DoDKjvbdbsCkUEJa", + "DoDKjvbdXsMBNUPY", + "EPCjjvbdRNXaxnUz", + "DoDLKvbdNGcQNQUk", + "DnbjjvbdEARiMywX", + "EPDKjvbdSKxfUfkT", + "DncKjvbdhtyeXRtb", + "DncKjvbdZLqcsnLm", + "EObkKvbdZnmheEzK", + "EObjjvbdtbcUvuno", + "DnbjjvbdrzMQTBHn", + "DnbjjvbdDwwktTsl", + "EPDKjvbdkxsSTYgU", + "DoDKjvbdIryArlxM", + "DoDKjvbdnBivxOnV", + "DoDKjvbdeATplwif", + "EOcLKvbdKeegbApu", + "EPCjjvbdMgDQMotk", + "DoCjjvbduCbtwWOo", + "DnbkKvbdyNsHwrhc", + "DnbkKvbdtvNxJpsA", + "EOcLKvbdqAheAWgd", + "DoCkKvbdURQoUtgm", + "EOcKjvbdqceIpOWB", + "DoCkKvbdVwIwudFH", + "DnbkKvbdbLMFnmcA", + "EOcLKvbdZjTHpHBf", + "EOcKjvbdRXNdCkhD", + "EPDLKvbdiHJcZViu", + "DoCjjvbdxxIjCPzL", + "DnbkKvbdBcpBWJmG", + "EPCkKvbdZyEKOCkr", + "EPDKjvbdOTUWHFVQ", + "DoCjjvbdIGgZxwwg", + "EPDLKvbdFjeSbhMu", + "EPDLKvbdhgKCxvJu", + "EOcLKvbdNsUWGdtp", + "EPDKjvbduVnXipsA", + "DncLKvbdGYuVBEXb", + "EPDLKvbdZtIhyESn", + "DoDKjvbdZxdJmcLr", + "DoCjjvbdUsltGLuj", + "DoDKjvbdDoDLKvbd", + "DncLKvbdrDdhpNvB", + "EPDLKvbdKCjDRJbx", + "DoDLKvbdxLWdHzyf", + "EObkKvbdrzMQTAhO", + "EOcLKvbdOFDtJJKd", + "EPCkKvbdrSVKmjaN", + "EOcKjvbdWWiYVdEg", + "EOcKjvbdWWhwvDdg", + "DncKjvbdpstHRqjt", + "EPCkKvbdKWVFceGi", + "DoCkKvbdZjShPfbG", + "DoCkKvbdSxKlNzkY", + "EPDLKvbdIwtCHkqQ", + "EOcKjvbdsCGNLgLZ", + "DncKjvbdzaAOfgCM", + "DoDLKvbdxmrhYSiD", + "DncLKvbdfMfWgMjL", + "EPDKjvbdqFdEsuaI", + "EOcLKvbdiLeDnUcZ", + "DoCjjvbdKVuFceHJ", + "DoCjjvbdfekzNgHA", + "EOcKjvbdOFEThiLE", + "EPDLKvbdqceJPnWB", + "DoDLKvbduCbtwWOo", + "DncKjvbdTqROtuIN", + "DncKjvbdpedFUWBI", + "DoDLKvbdrEFJQNua", + "DoDLKvbdyXhjCPyk", + "EPCkKvbdJYUBhLqQ", + "EPCkKvbdtcCuXVno", + "DoDLKvbdZLrEUOLm", + "EPCkKvbdpstGrRjt", + "DncLKvbddePSCXCj", + "EObkKvbdauCHXjsh", + "DoDLKvbdkHfkefNk", + "EObjjvbdMRwMzUpz", + "EObjjvbdaMkCTVNH", + "DoCkKvbdGGJrNhtR", + "EPDLKvbdvBDxrneI", + "EPDLKvbdIHHZxwxH", + "EOcLKvbdrJAJdmPF", + "EOcKjvbdGZUuAdXb", + "EOcLKvbdbUbHYLUI", + "DnbjjvbdJzofYEAN", + "EPDKjvbdFxtuBDxC", + "DnbkKvbdQvnDbkgc", + "EPDKjvbdJmADzGta", + "DoDKjvbdZRMdhleR", + "DnbkKvbdsrqsZZeD", + "EObkKvbdrovPJbuf", + "EPCjjvbddeOqbXCj", + "EObjjvbdtcDVXVoP", + "DncKjvbdMfbpNQVL", + "DoCkKvbdhbPCeXQq", + "DoCkKvbdNHComQVL", + "EObjjvbdvBDxroFI", + "EPCjjvbdnBivwoNu", + "EObjjvbdbhljKewY", + "EPDKjvbdZyDimcMS", + "EObkKvbdWSOXbElD", + "EOcKjvbdTfznMXVe", + "EPCjjvbdZtJJYcsO", + "DoCjjvbdRjxfVHLT", + "DoCkKvbdVTltGMVj", + "DncKjvbdYfwEAOri", + "DncKjvbdYkrEUOMN", + "EObkKvbdqGEEsuaI", + "DncLKvbdjJfHimXr", + "EPDLKvbddndsLUTr", + "DnbkKvbdqBJFAWhE", + "EPDLKvbdEOcKjwDE", + "EPCkKvbdtvOYJqTA", + "DncLKvbdkyTRsZHU", + "DoCjjvbdTppnuVIN", + "DncLKvbdwyhFeweS", + "DncKjvbdsBelkgKy", + "DoCjjvbdKDKCqJcY", + "DoCjjvbdkClKqHVH", + "DoCjjvbdcTCjtDia", + "EPDLKvbdUVkpJtAq", + "EPDLKvbdRyjITCvA", + "DnbjjvbdJuuFcdgJ", + "DoDKjvbdrJAJdmOe", + "DncKjvbdJcJbqKCx", + "DoDLKvbdJcJbqJcY", + "DoDKjvbdeEoSCXDK", + "DoDLKvbdSwjlNzkY", + "EObjjvbdzitopDrt", + "DoCkKvbdKWVGEEgJ", + "DncKjvbdpssfqrKt", + "EOcLKvbdUMWPBVoJ", + "DncKjvbdyzdmrIIh", + "EPCjjvbdxUldqZLn", + "DoDLKvbdySnImRbH", + "DoCjjvbdGdKvJaij", + "DoCkKvbdxZgeewdr", + "EObkKvbdiLddNuDZ", + "DnbjjvbdSCDdkiZL", + "DncKjvbdznpREcMY", + "EOcLKvbdaRebhTfL", + "DnbjjvbdZQldiMdq", + "EPCjjvbdbrbjtEKB", + "EOcKjvbdEARiMzXX", + "DoDLKvbdXrkaNTnx", + "EPCkKvbdQZNAHTRj", + "DoDLKvbdEzspeLcJ", + "EPCjjvbduVnYKRTA", + "EObjjvbdJXtBhMQp", + "EPDKjvbdeOdrjssr", + "EPCjjvbdLqwMytpz", + "EPDKjvbdUMVoBVoJ", + "DncKjvbdRpUGifDw", + "EPDLKvbdZyDinDLr", + "DnbkKvbdNrsufeVQ", + "EPCkKvbdZMSDtNlN", + "EPCkKvbdySnJNSCH", + "EPCjjvbdfMevfljL", + "DncLKvbdXsMBNTnx", + "DnbkKvbdpxoHfqDx", + "DncLKvbdUQpntthN", + "DncKjvbdIsZArlwl", + "DoDLKvbdZGwEAOsJ", + "EOcKjvbdVvhwvDdg", + "EOcLKvbduWNxJqTA", + "EPCjjvbdHEKvJaij", + "DoDKjvbdrpWOjCuf", + "DncLKvbdrpWOjDVf", + "DoCjjvbdIHGzYwwg", + "DoDLKvbdpxoIGqEY", + "DoDLKvbdJcJbqKDY", + "DoCjjvbdRWmdClHc", + "EPCjjvbdFWYopNJe", + "DncKjvbdmfdwlmfy", + "DoCkKvbdxUleQxlO", + "EObjjvbdnGdxMnGy", + "EPCjjvbdvvlAvBVu", + "DncLKvbddndsKssr", + "EObjjvbdZMRcsnLm", + "EOcKjvbdFxttaEXb", + "DncKjvbdVUNTfMVj", + "EOcLKvbdNrtWHFUp", + "DoDKjvbdwuMdqYlO", + "EPDLKvbdrXPkbhxq", + "EObjjvbdrEFIpNua", + "EObjjvbdziuQQDrt", + "EOcLKvbdqYoIGpcx", + "DnbjjvbdsQVoJcVf", + "EObkKvbdkDMKpgUg", + "EObjjvbdvBDyTPFI", + "DncKjvbduCbuWvOo", + "EPCjjvbdkVvnECYX", + "DncLKvbdZGvdAOri", + "DoCkKvbdrXPlDJZR", + "EOcLKvbduCcVWvOo", + "DoDKjvbdCEPaWJlf", + "EPDKjvbddoErjssr", + "DncKjvbdACqxKZiQ", + "EPCjjvbdUVlPitAq", + "EPDKjvbdjJfHjMxS", + "EObkKvbdAMhYsWzY", + "DoDKjvbdnBivxOmu", + "EOcLKvbdbiNKKfXY", + "EPDKjvbdYqMeIleR", + "EObkKvbdJmADygUa", + "EObjjvbdEPDLLWcE", + "EPCjjvbdrXPkcIxq", + "EOcLKvbdliDtQtqa", + "DoCjjvbdmoyxujyC", + "EPDLKvbddoFTLTsr", + "EOcLKvbdCWzdJEpW", + "DnbjjvbdrEEhpOWB", + "DoDKjvbdZLrDtNkm", + "EOcLKvbdLFfHbAqV", + "EOcKjvbdmttzLKSG", + "EOcLKvbdmbJvwoOV", + "EOcKjvbdUaCQrqSZ", + "DnbjjvbdmgExMnGy", + "EPDKjvbddndrkUUS", + "EObkKvbdDwwkstTl", + "DoCkKvbdcJMjLFwY", + "DnbjjvbdaNLBruMg", + "DoDLKvbdQYmAHTRj", + "DnbkKvbdsQWOicWG", + "EObkKvbdMRwMzUpz", + "DoDLKvbdZshiZDrn", + "EPDLKvbdnPzYujxb", + "EOcKjvbdCEQAujMf", + "EPDLKvbdKefHbApu", + "DoDLKvbdYpldiNFR", + "DoCkKvbdFWZQQNJe", + "DncLKvbdznpQeCkx", + "EOcKjvbdnQZxvKxb", + "DoCkKvbdVBBprpqy", + "DnbkKvbdZirhPfaf", + "DnbkKvbdegjvSNqH", + "EOcLKvbdqdEiPnWB", + "EObjjvbdBhkCKiGK", + "EObjjvbdxZgfGYFS", + "DnbjjvbdNQYQumgT", + "EPCjjvbdxsNhlrBg", + "DoCkKvbdQdDApRDr", + "DoCkKvbdxxIiaoyk", + "EPDKjvbdFeirNhtR", + "DoCjjvbdegjvSOQg", + "EObkKvbdqcdiQNvB", + "DncLKvbdiMEdNtcZ", + "DncLKvbdTqRPUthN", + "EPCkKvbdwygeexFS", + "DoDKjvbdyTOJMrBg", + "DncLKvbdeEoRavbj", + "EPCjjvbdtbcUvvOo", + "EObjjvbdKCicRJcY", + "EObjjvbdZyEKODMS", + "DnbjjvbdmJDtQtrB", + "DncLKvbdEARhlyvw", + "DnbjjvbdIxTbILqQ", + "EOcLKvbdwygefYFS", + "DoCjjvbdznoqFCkx", + "DoCjjvbdRpUGjGDw", + "DncKjvbdhzVGMQnG", + "EPCjjvbdhkeDnVCy", + "EObkKvbdOEdUIiKd", + "DncKjvbdrDeIomua", + "DncLKvbdiHJbxuiu", + "EPDKjvbddxZstRez", + "EPDLKvbdmSYuZrdJ", + "EObkKvbdVUNUFkvK", + "EPDLKvbdNeEUJIjd", + "DoCkKvbdiMEdNuCy", + "DoDLKvbdRDcApQcr", + "EPCjjvbdTlVoBVoJ", + "EObjjvbdLBKgNBwq", + "EPCkKvbdsCFllHKy", + "EObjjvbdnVUzLJqf", + "DoDKjvbdqrVLNkBN", + "DoCkKvbdqFcdtWBI", + "DncLKvbdbVCGxLTh", + "EOcLKvbdeFPSCXCj", + "EOcLKvbdRpTgKFdX", + "EObjjvbdznpQeDLx", + "EOcKjvbdjvXNcaxX", + "DnbjjvbdHDkWJbJj", + "DncKjvbdhkeENuDZ", + "DnbkKvbdnUtyjjSG", + "DoDKjvbdSQUHJfDw", + "DncKjvbdbUbHYLUI", + "EOcLKvbdNsTvGduQ", + "EPDLKvbdSZigsCvA", + "DncKjvbdMfcPlpUk", + "DoDLKvbdxrnIlrBg", + "DncKjvbdiLdcnVCy", + "EPCjjvbdmfeYNOHZ", + "DoCkKvbdjvWmcaxX", + "DoDKjvbdbUbHXkUI", + "DncKjvbdBhkBjiFj", + "DoDLKvbdNHColpVL", + "EOcKjvbdrykosAhO", + "DncLKvbdqGDeUVaI", + "DnbkKvbdhgJcZViu", + "DnbjjvbduLxXAtBX", + "EPCjjvbdYpleJNFR", + "EPDLKvbdQvmdClHc", + "DnbjjvbdJYTbIMRQ", + "DncLKvbdznpRFDMY", + "EOcLKvbdZnmiFEyj", + "DnbkKvbdrRuLOLAm", + "EObkKvbdhkeEOUby", + "DncLKvbdYlSEUOLm", + "DoCjjvbdhkdcmtby", + "DncLKvbdddnrCXDK", + "DoDLKvbdKaLHNCYR", + "EOcKjvbdcyxpYZQb", + "EPDLKvbdACqwjZhp", + "DoCkKvbdBsBDTevr", + "EObkKvbdeKJqvUzn", + "EObkKvbdcImJkGWx", + "DncLKvbdYSlAltOx", + "DncLKvbdlrYtyrdJ", + "EObkKvbdKxqJrztf", + "EOcKjvbdsQWPJcVf", + "DoDKjvbdkySqrxgU", + "EObjjvbdeEoRbXCj", + "EOcKjvbdHDkVjBij", + "DoDLKvbdCTBCsfXS", + "DoCjjvbdKCjDQibx", + "DoCjjvbdlhdTqUrB", + "DoDKjvbdTulQKTaR", + "DoCkKvbdRjxetfkT", + "EPCjjvbdEuyQQNKF", + "EPCjjvbdDoDKkXDE", + "DoCjjvbdsQWPJbuf", + "DoDKjvbdhuZdvqtb", + "EPDLKvbdiHKCyWJu", + "EPDLKvbdLFegaaQu", + "DoCjjvbdqZPHgRDx", + "DncKjvbdUWMPjUAq", + "DoDLKvbdTYKkmzjx", + "DoDKjvbdegjvSOQg", + "DnbkKvbdUtNTekvK", + "EObkKvbdNsTvGeVQ", + "DoDLKvbdfNFvgMjL", + "EOcLKvbdZQmEiNEq", + "EPDKjvbdBraDTfWr", + "EPDKjvbdNGcQNQVL", + "EPDLKvbdZyEKODMS", + "EOcKjvbdBvzdIdpW", + "EPCjjvbdACqwiyiQ", + "DoCjjvbddePRawCj", + "EPDKjvbdWWiXucdg", + "DoDKjvbdWexzUAPT", + "DnbjjvbdwXMBWBWV", + "EOcLKvbdUyHszLOn", + "EPCkKvbdOYOuzcnU", + "EPCkKvbdhancEwQq", + "DnbkKvbdjggLefOL", + "EPCkKvbdFjdsDIMu", + "DoDKjvbdrSUjmkBN", + "DoDLKvbdZjTIQGaf", + "DoDKjvbdMgDPmPtk", + "EPDLKvbdWRmwbFMD", + "DoCkKvbdzROmJKXA", + "DnbkKvbdrDdiQNvB", + "DnbjjvbduDCtwVoP", + "EOcLKvbdCIjbLJFj", + "EPDKjvbdXrkaMsnx", + "EPDKjvbdVhXvXfxz", + "DncKjvbdhbPDEwRR", + "DoCkKvbdpxoHgQcx", + "DoCkKvbduMXwBUBX", + "EObjjvbdNeEThhjd", + "DoCjjvbdirzhrkJz", + "DoDLKvbdaMkCTUlg", + "DncLKvbdWRnYBeLc", + "DnbjjvbdGBPRZJzm", + "EOcLKvbdeOeSjstS", + "DoDLKvbdmIctRVSB", + "DoCjjvbdZxdJnDMS", + "DoCkKvbdRpTgKFcw", + "DncLKvbdTukojTaR", + "DnbjjvbdKRZdoFme", + "DnbkKvbdURQoVUhN", + "DoDLKvbdyYJKBozL", + "EObkKvbdfNFwHMjL", + "DoDLKvbdZisIQHBf", + "EObkKvbdqFcdsuaI", + "DncLKvbdzoPqFDLx", + "DoDKjvbdSKxeuHLT", + "EPDKjvbdsBemLfjy", + "DoCjjvbdJbjCqJcY", + "DoCjjvbdNPxRVnGs", + "DncLKvbdGcjvJbKK", + "EOcKjvbdrWpMDIxq", + "EOcLKvbdQdDApQcr", + "DoDKjvbdZMRdTnLm", + "EOcLKvbddxZssrFz", + "EObjjvbdUtNTfLuj", + "EPCjjvbdLLBIWAKZ", + "DoCkKvbdgFlZmfgA", + "EPCjjvbdUVkoitAq", + "DoDKjvbdDncKjvcE", + "DoDLKvbdRpUHJfEX", + "EPDKjvbdLqvlzVQz", + "EPDKjvbdZMRdUOLm", + "EOcLKvbdCJLBkIfK", + "DncKjvbdaSFbhUFk", + "EPDLKvbdZoNheEzK", + "DncKjvbdUVlPjUAq", + "DnbkKvbdKNADyfuB", + "EObkKvbdZdwfzghb", + "EPDLKvbdZtIhxcrn", + "EObkKvbdGckViajK", + "DncLKvbdFfJqmiUR", + "DncKjvbdKWUfDdgJ", + "DoDKjvbdMtrqjmAX", + "EOcLKvbdsQWPKDVf", + "DoCjjvbdwtleRZMO", + "EObjjvbduaDxsPEh", + "EPDLKvbdKxqJrzuG", + "EOcKjvbdVAaprprZ", + "EObjjvbdEuxopMjF", + "DnbjjvbdyOTHwriD", + "EPDLKvbdrpVnibvG", + "EPDKjvbdkWWnDaww", + "DncLKvbdrXPkbiYq", + "DoDLKvbddxZssqez", + "EOcLKvbdHDkWJbJj", + "DncLKvbdEPCkLWcE", + "DnbkKvbdEXwkstTl", + "EObjjvbdqiAKEmOe", + "DncLKvbdjAQGaQGj", + "EPCjjvbdNeDtJJKd", + "EPCjjvbdvwMBWBVu", + "EPDKjvbdFejSOItR", + "EOcLKvbdNPwqWOHT", + "EPDKjvbdbsCjscia", + "EObkKvbdyYIiaoyk", + "DoDKjvbdLZQirzuG", + "EObjjvbdSLZGVGjs", + "DoCjjvbdAMgxsWzY", + "DoDLKvbdEObjjwCd", + "DnbkKvbdsPvOicWG", + "EPCkKvbdrJAKElne", + "EPCkKvbdauCGwjsh", + "DncLKvbdegkWRnQg", + "EPCkKvbdYpmEiNFR", + "DoDKjvbduaDxsPFI", + "DoCjjvbdcyxoxYqC", + "DoCkKvbdkMakzFHP", + "DnbjjvbdJbibqJbx", + "DnbkKvbdWWhxWDeH", + "DoCjjvbdssRsYzFD", + "DoDKjvbdpyPIHRDx", + "DncLKvbdwNWANDeN", + "DoDKjvbdJYUBglRQ", + "EObkKvbdXnRAYVVt", + "DoCjjvbdUWLpKTaR", + "DoDKjvbdTqROttgm", + "EPCkKvbdVqnXaeMD", + "EObjjvbdADRwiyiQ", + "DoDKjvbdlrZUyrci", + "EPDKjvbdvAdZSndh", + "DoCkKvbdzoQQeDLx", + "DnbkKvbdSQUGjFdX", + "EOcLKvbdqBJFAXIE", + "EObkKvbdSCEFLiZL", + "DnbjjvbdzoQQdcMY", + "DnbkKvbdpxngfqEY", + "DncLKvbdbsDLUEKB", + "DoCjjvbdXrlBMtOx", + "EObjjvbdKCjDQicY", + "DncLKvbdLrWlzUpz", + "EObjjvbdaaWEfQQX", + "EObjjvbdtlYWaTaX", + "DnbkKvbdMowpunGs", + "EObkKvbdSLYeuHKs", + "EObkKvbdTAEhhCOd", + "EPCkKvbdmSYtyrci", + "DncLKvbdYkqcsnLm", + "DoDLKvbdrylQTAgn", + "DncLKvbdJXtCIMRQ", + "EObkKvbdSBdElIyL", + "DoDLKvbdwygefYFS", + "DncKjvbdyXhibPzL", + "EPCjjvbduaDxsPFI", + "EObjjvbdZoNiFEzK", + "EPCjjvbdkNBkyeHP", + "EPCkKvbdWRnXadlD", + "DncLKvbdRWmdDLhD", + "DnbkKvbdmSYtzTDi", + "EOcKjvbdkVwODbXw", + "DncLKvbdQlxCZOUz", + "EObjjvbdbhlijfXY", + "EOcLKvbdXmqAXtut", + "EOcLKvbdmbKXXnnV", + "DoDKjvbdkHgMFfOL", + "EPCkKvbdfekymgHA", + "DoCjjvbdeKKRvUzn", + "DoDKjvbdkHfkefNk", + "DoCjjvbdyqPMiKXA", + "DnbjjvbdUQqOtuIN", + "EOcKjvbdEPCkKwDE", + "DoDLKvbdZRNFIleR", + "DnbjjvbdRacdlJZL", + "EOcLKvbdTukoitAq", + "EOcLKvbdZLrDtOMN", + "EOcLKvbdgKfzcGAE", + "EObjjvbdzjVQQESt", + "EOcLKvbdcIlijevx", + "EOcKjvbdGKdsDHmV", + "DncLKvbdKkBHvAJy", + "EOcKjvbdZMRctOLm", + "EPCkKvbdADRxKZiQ", + "EObjjvbdDwxLsssl", + "EPDLKvbdUxgszLPO", + "EPCkKvbdSQTfiedX", + "EPCjjvbdNeEUJIkE", + "DoDLKvbdpyPHfqDx", + "DnbkKvbdyOShXsJD", + "DncLKvbdLiBkpxAS", + "DoDKjvbdaaWEepQX", + "DoCjjvbdWSOYBeLc", + "EOcKjvbdLFegbAqV", + "EPDKjvbdffLzOGgA", + "EObkKvbdFkErbglu", + "DncLKvbdiZuFlROG", + "DncKjvbdegkWRnQg", + "DoDLKvbdQdDApRDr", + "EOcLKvbdeYZtURez", + "EObjjvbdrXQLcIxq", + "DoDLKvbdxZhGGXeS", + "DoDLKvbdGGKSOItR", + "EObjjvbdjhHLfFnL", + "EOcLKvbdUQpoUuHm", + "DoCkKvbdXrlBNUPY", + "DoDKjvbdJXtCIMRQ", + "DnbkKvbdZMSDsnLm", + "DncKjvbdCTBDUGWr", + "DncKjvbdbhlikGXY", + "DoDKjvbdXmqAYVWU", + "DnbjjvbdliDsqVRa", + "DnbkKvbdmajXYOnV", + "EObjjvbdJpyePGNe", + "DnbkKvbdCTAcUGXS", + "DoDLKvbdCDpBVjNG", + "EOcLKvbdxwhiaoyk", + "DoDKjvbdxVNFQyMO", + "EPCkKvbdVvhwvEEg", + "DnbkKvbdFWYoomJe", + "EOcKjvbdlrZUysEJ", + "EPDKjvbdqquKnKaN", + "DoCkKvbdTkunaVoJ", + "EOcLKvbdfHkVrOQg", + "EPDLKvbdiUzFWrUb", + "DoDLKvbdtAGqIABS", + "DoCkKvbdZRMdhmEq", + "DnbkKvbdNsUVfeVQ", + "EPDLKvbdqwPkbiZR", + "DoCkKvbdNUsSLNAX", + "DncKjvbdmpZxvKyC", + "EPCkKvbdLYqKSztf", + "EPDKjvbdZyEKODMS", + "EPDKjvbdNGbomPuL", + "DncKjvbdZMSDtNlN", + "EPCjjvbdTXjkmzjx", + "EObkKvbdBdQAvKMf", + "EOcLKvbdkySrTYgU", + "DnbkKvbdZoOIddzK", + "DoCkKvbdZMSDsmkm", + "EPCkKvbdCWzdIdpW", + "DncLKvbdBvzdIdov", + "DoCjjvbdaRfDHtFk", + "DnbkKvbdWeyZtAOs", + "DoDLKvbdnCJwYPOV", + "DoCjjvbdEYYLstUM", + "EOcLKvbdwtldqZMO", + "EPCjjvbdFVxoomKF", + "EObkKvbdyqPMhiwA", + "DoDLKvbdkxrrSxgU", + "DoCjjvbdeATqNYKG", + "DncLKvbdJKEAJpHE", + "DoCkKvbddndsLUTr", + "DnbjjvbdqFceUWBI", + "DoDLKvbdhkddOUby", + "DncKjvbdGKdrcIMu", + "EPCkKvbdelevflik", + "DoDKjvbdhaoDFWqR", + "DoCjjvbdYlSDsmlN", + "EPCjjvbdiZuGLpmf", + "EObkKvbdnCJvxPNu", + "DnbkKvbdhzUelRNf", + "DnbkKvbdZeYGzgiC", + "DoCkKvbdDnbkLWbd", + "DnbkKvbdnHFYMmfy", + "DoCjjvbdePEsKtTr", + "DnbjjvbdZQmEhleR", + "DnbkKvbdTkunaVoJ", + "DnbkKvbdFWZPpMjF", + "DoDKjvbdSwkMNzkY", + "EOcLKvbdwtldpyMO", + "EOcKjvbdhkdcmtby", + "DoCjjvbdNQXqWNfs", + "EPDKjvbdzjUpPdTU", + "DnbjjvbdqceJPnWB", + "EPDKjvbdUyHsyjoO", + "EPCkKvbdZshhxcsO", + "DncKjvbdqAiFAWgd", + "EObkKvbdgFkzOGgA", + "DncKjvbdmgFYNNgZ", + "DoDLKvbdDjHjWYKA", + "DnbjjvbdJbicRKCx", + "DnbkKvbdfNFwHMjL", + "EPCkKvbdWSNxBdlD", + "EPDLKvbdCJKbLJFj", + "EPDKjvbdEOcKkXDE", + "EPCkKvbdVrOYCElD", + "DnbjjvbdCIkBjhej", + "DoDLKvbddoFTKstS", + "DnbjjvbduDDVXVoP", + "EObkKvbdxwiKCPzL", + "DnbkKvbdZGvdAPTJ", + "DoDLKvbdBdPaVjNG", + "EOcKjvbdIHGzYwxH", + "DoCjjvbdGFjSNhsq", + "DnbjjvbdlYsSSxgU", + "EPCjjvbdqrUjnKaN", + "EOcLKvbdtvOXipsA", + "DoDLKvbdrounjCuf", + "DoCkKvbdFVyPomKF", + "EOcKjvbdNHCpNPtk", + "EPDLKvbdWeyZtAPT", + "EPDKjvbdjcLkQfuH", + "EOcLKvbdzHZMAMeX", + "DoCjjvbdUMWPBVni", + "EOcKjvbdHELWKBjK", + "DoDKjvbdMgComQUk", + "DnbkKvbdiGjDZWJu", + "DncKjvbdyqOmJKXA", + "DoDKjvbdVZITyjoO", + "DoCjjvbdzQoNJJwA", + "EOcLKvbdGAoQxizm", + "DoDKjvbdatagYKsh", + "EPDKjvbdSBceMJYk", + "DoDLKvbdMpYQvOHT", + "DncKjvbdiCOcFWpq", + "DoCjjvbdUGznLvvF", + "EPDLKvbdANIYrvyx", + "EPCjjvbdIwtCHkpp", + "EObkKvbdJSyBSmYM", + "EObkKvbdwuMdqYlO", + "EObjjvbdmuVZkKSG", + "DncLKvbdSPsfjFdX", + "DoDLKvbdSQUHJedX", + "DoDKjvbdiVZdwSUb", + "EPDLKvbdRjxfVGkT", + "EObjjvbdmpZyVkZC", + "DncLKvbdhzUelROG", + "EPCkKvbdxVMeRZMO", + "EOcKjvbdxxIiapZk", + "EOcKjvbdJSyBTNYM", + "EPDKjvbdMSXMzUpz", + "EObkKvbdJmADzHVB" }; + + public static void main(java.lang.String[] unused) { + try { + BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("bad.out")); + for (int i = 0; i < strings.length; i++) { + out.write(strings[i].getBytes()); + out.write("\n".getBytes()); + } + out.close(); + } catch (Exception e) { + System.out.println("Some exception occurred"); + } + } +} diff --git a/hotspot/test/runtime/7158800/InternTest.java b/hotspot/test/runtime/7158800/InternTest.java new file mode 100644 index 00000000000..d0cd1c024f2 --- /dev/null +++ b/hotspot/test/runtime/7158800/InternTest.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7158800 + * @run shell/timeout=400 Test7158800.sh + * @summary This test performs poorly if alternate hashing isn't used for + * string table. + * The timeout is handled by the shell file (which kills the process) + */ +import java.util.*; +import java.io.*; + +public class InternTest { + public static void main (String args[]) throws Exception { + final String badStringsFilename = "badstrings.txt"; + + if (args.length == 0 || (!args[0].equals("bad") && !args[0].equals("normal"))) { + System.out.println("Usage: java InternTest [normal|bad]"); + System.exit(1); + } + + FileInputStream fstream = new FileInputStream(badStringsFilename); + DataInputStream in = new DataInputStream(fstream); + BufferedReader br = new BufferedReader(new InputStreamReader(in)); + String toIntern, toDiscard; + int count = 0; + long current = 0L; + long last = System.currentTimeMillis(); + + if (args[0].equals("bad")) { + while ((toIntern = br.readLine()) != null) { + toDiscard = new String((new Integer((int)(Math.random() * Integer.MAX_VALUE))).toString()); + toIntern.intern(); + count++; + if (count % 10000 == 0 && count != 0) { + current = System.currentTimeMillis(); + System.out.println(new Date(current) + ": interned " + count + " 0-hash strings - last 10000 took " + ((float)(current - last))/1000 + "s (" + ((float)(current - last))/10000000 + "s per String)"); + last = current; + } + } + } + if (args[0].equals("normal")) { + while ((toDiscard = br.readLine()) != null) { // do the same read from the file to try and make the test fair + toIntern = new String((new Integer((int)(Math.random() * Integer.MAX_VALUE))).toString()); + toIntern.intern(); + count++; + if (count % 10000 == 0 && count != 0) { + current = System.currentTimeMillis(); + System.out.println(new Date(current) + ": interned " + count + " normal strings - last 10000 took " + ((float)(current - last))/1000 + "s (" + ((float)(current - last))/10000000 + "s per String)"); + last = current; + } + } + } + in.close(); + } +} + + diff --git a/hotspot/test/runtime/7158800/badstrings.txt b/hotspot/test/runtime/7158800/badstrings.txt new file mode 100644 index 00000000000..d7f76fb838e --- /dev/null +++ b/hotspot/test/runtime/7158800/badstrings.txt @@ -0,0 +1,30001 @@ +EOcLKvbddZyPxYpb +DncLKvbdPxmAGrqj +DoCjjvbdpxoIHQdY +EPCkKvbdqYoHfqEY +DnbkKvbdezvYdiUX +DnbjjvbdeEoRbXCj +EObkKvbdbsCkUEKB +EOcLKvbdnUtyjiqf +DncLKvbdRWnDcMHc +DoCkKvbdrSUkOLAm +DncLKvbdfNFwGmJk +EPDLKvbdvAdYroFI +DoDLKvbdiGibyViu +DncLKvbdYqNEhmFR +DoCkKvbdEARhlzXX +DncLKvbdSZjHsCvA +DncKjvbdqTsgRqkU +DnbjjvbdqAiFAXHd +EPDKjvbdGcjvJaij +DnbkKvbdwtldpxkn +DoDKjvbdYkrETnMN +EPCjjvbdbBWEfQQX +EPCjjvbduMXwAtBX +DncLKvbdbsCkTcia +DoCjjvbdczYpYZRC +EOcKjvbdFeiqmhsq +DoCkKvbdKCicQibx +EOcKjvbdZLrEUOLm +DoCjjvbdaNKbStmH +DoDKjvbdJbjDQjDY +EPCkKvbdemFwGmKL +EPDKjvbdZQleImEq +DncKjvbdZjShPfbG +DnbjjvbdqYnhHREY +DoCkKvbdaRfDIUGL +DoDKjvbdLrWlyuQz +DnbjjvbdZisHofaf +EObjjvbdhtydvrUb +DnbjjvbdRotHKGEX +EObjjvbdNeEThhkE +EPCjjvbdZtJJZESn +DoDKjvbdnPyxvLYb +EPDKjvbdeEoRbWbj +EOcLKvbdFxttaEXb +EObjjvbddwystRez +EPCjjvbdJpzEnenF +DnbkKvbdTppntuIN +EPCkKvbdTukpKUBR +DnbkKvbdhlFEOUcZ +EObkKvbdlhdUQuRa +DnbjjvbdkClKqHUg +EOcKjvbdqTtGqqkU +DncKjvbdtkwvaUBX +DoDKjvbdsQWOjCuf +DncLKvbdEKIJuwjA +DncKjvbdGLErcIMu +EOcLKvbdNPwpumfs +EObkKvbdnVUzLJrG +DoCkKvbdcTDKsdKB +DncKjvbdKRZdoFme +EOcLKvbdemFvgNKL +EPCkKvbdznopdblY +EPDLKvbdOYPVzdOU +DnbjjvbdsZlPsAhO +DoDLKvbdKCjDRKDY +DoCkKvbdhuZeXSVC +EPDKjvbdOStVgEtp +DncLKvbdvwMAvBWV +EPDKjvbdBcoaWJlf +EOcKjvbdZxdKODMS +DoCjjvbdbsCkTcjB +EOcLKvbdwWlAuaWV +DnbjjvbdFejRnJUR +DnbjjvbdmIdTqVSB +DnbkKvbdqBIeAWhE +DncKjvbdrMzJyMIJ +DoCkKvbdZGvdAOsJ +DncLKvbdjggLfFnL +DoCjjvbdYqNFJMdq +DoCkKvbdqZPHfqDx +DncLKvbdOEdThiLE +DoCkKvbdZirgpGaf +EPDLKvbdziuQPdSt +EObkKvbdKQyeOenF +DoDLKvbduaDySndh +DoCjjvbdVUNUGLvK +DncKjvbdAMhYrvzY +DnbkKvbdnQZxvKxb +EPCjjvbdBhjakJFj +DncLKvbdmfeYNNfy +DoDLKvbdjlbLydfo +DoDLKvbdpyPIGpcx +EOcLKvbdnVUzLJqf +DoCjjvbdmJETqVSB +DoDLKvbdJTZAsMxM +DoCkKvbdnQZxvLZC +DoDKjvbdACqwizJQ +DncKjvbdvBEZSoFI +DncKjvbdGckVjCJj +DncLKvbdiMFENtcZ +Dnbjjvbdjuvmcaww +DnbkKvbdZyEKNblS +DoCjjvbduMYXBUBX +DnbjjvbdFWYopNJe +DoDKjvbdelfXGljL +DnbjjvbdakLenmcA +EPDKjvbdfILWRmpg +EObjjvbdSLYeuHLT +DoCjjvbdMfbolotk +EPDLKvbdrRuKnKaN +EOcKjvbdyzdnRhIh +DoDLKvbdGAoRZJzm +DoCjjvbdhlFDnUcZ +EPDLKvbdmpZyVkYb +DncKjvbdTpqPUuIN +DncLKvbdHDjvJaij +EPDLKvbdYlRcsmkm +EPDLKvbdvlvAMdFN +DncKjvbdIsZArmYM +EOcLKvbdegjuqnQg +EOcLKvbdZQmFJNFR +DoCjjvbdZxdJmcMS +EPCkKvbdlZTSTYgU +DoDKjvbdqceJPnWB +DncLKvbdVgwuxGxz +DncKjvbdDnbkLXDE +EPDLKvbdatbHYKsh +DncKjvbdEzsqFLbi +EPDLKvbdnVVZkKRf +EOcKjvbdKeegbBQu +EPCkKvbdKfGHaaRV +EPDKjvbdmIctRVRa +EPCjjvbdRMxBxnUz +DnbjjvbdJYTbILpp +EPCkKvbdTAEiHbPE +EOcLKvbdfelZnGgA +DoCjjvbdOStWGeUp +EOcLKvbdemGXHNJk +DoDKjvbdYTMAmUOx +EPCkKvbdpyOhGpcx +EPCkKvbdAMgxsWzY +DnbjjvbdYkrETnMN +EPDLKvbdUQqPUtgm +DncKjvbdehKurNqH +DoCjjvbdZMSETnLm +DoDKjvbdIHGyyXwg +EObjjvbdXGYzUAPT +DoCjjvbdhbPCeWqR +DoCkKvbdKNADzGuB +DnbjjvbdFeirOJTq +DncLKvbdaRecHtFk +DnbkKvbdzoPpeClY +EObkKvbdZRMeJMeR +DnbjjvbdYfvdAPSi +DncLKvbdJcKCqJcY +EOcLKvbdqvokbhyR +DoDLKvbdrRuLNjaN +DoCjjvbdTlWPBWOi +DoCkKvbdjvWnEBxX +DoDLKvbdTkunaVoJ +DoCkKvbdQZNAHTSK +EObjjvbdqwPkbhyR +EOcLKvbdNHDPlpUk +DncLKvbdIHHZxxYH +DncLKvbdtkxXAtAw +DncLKvbdSCEFMJZL +DnbjjvbdZQmEhldq +DoCjjvbdNGbolotk +DnbjjvbdnCKWwnmu +DncLKvbdzHZMANEw +DoDKjvbdmttykJrG +DnbkKvbdlrZUzSci +EPDKjvbdSKyGVHKs +DoCjjvbdKVuGEFGi +EPCjjvbdCIkBkIej +DncLKvbdzHZMAMeX +DnbkKvbdaSFbgsek +DncLKvbdHDjujBij +DoDKjvbdGZVUaDwb +DnbjjvbdZnnJFEzK +DoCkKvbdtcDUwWOo +DoCkKvbdlBMoNALA +EOcKjvbdNsUWHFUp +DoDLKvbdVUNUFlVj +DnbkKvbdhkdcnUcZ +DncLKvbdLiBkqYAS +EOcKjvbdzoPpdcLx +EPDKjvbdijGIJmXr +EOcKjvbdZisHofaf +DoDLKvbdeOdrkUUS +DoDLKvbdnPyxvKxb +EPDKjvbdIxUBhMRQ +DncLKvbdlhctRUqa +DoDLKvbdmgFXlnGy +DncKjvbdCJKbKiGK +EOcLKvbddndrjtUS +DnbjjvbdkDLjqGuH +DncKjvbdmIcsptqa +DoCkKvbdvvlAvBWV +EObjjvbdjblLQftg +DnbjjvbdCEQBWKMf +DnbjjvbdBdPaVilf +DoCkKvbdZxcjODLr +DoCkKvbdEObjjwCd +EPDKjvbdyTNhlqbH +EPCkKvbdUMVoAvPJ +DncKjvbdUxhUZjoO +DncKjvbdqqtjmkAm +DncKjvbdKfGICBRV +EPCjjvbdVrOXaeLc +EPDLKvbdwXLaWBWV +EPCkKvbdjblKqHUg +DnbjjvbduDCuWuoP +EPDKjvbdNGbpMouL +EObjjvbdBcoaVjNG +DncLKvbdrWpMDIxq +DncLKvbdhaoCdwRR +DnbkKvbdFxtuBDwb +DncKjvbdIjEAKPgE +EOcLKvbduCbuXVoP +DoDKjvbdZtIiZDsO +DnbjjvbdEztRElCi +DncLKvbdxmsHwsJD +DnbjjvbdRbEElIxk +DoDKjvbdWHwvXgYz +EOcKjvbdQlwbYnUz +EOcLKvbdVTltFkuj +DncKjvbdliETptqa +DnbkKvbddoErjtTr +DoCkKvbdgPazvdXh +DncKjvbdySmhlqag +DoCjjvbdbPgHDkzd +DoCkKvbdFWZPomKF +EObjjvbdssSSxydc +EObjjvbdzQnliJwA +EObkKvbdKCjCpibx +EPCjjvbdpyOhHREY +DncLKvbddjJqutzn +EObkKvbdBdQAujMf +EPCkKvbdLAjflbXq +DncLKvbdLBLGlaxR +DoDLKvbdrpWPJbuf +DoCjjvbdEKHiuxKA +DoCjjvbdXsMAlsnx +EObkKvbdptTgSSLU +DoDKjvbdnHFXmNfy +DncKjvbdCJKbKhej +EPCjjvbdhlEdOUby +EOcKjvbdKWUfEFGi +DoDKjvbdZQmFJMdq +EPCjjvbdiGjDZWKV +EObkKvbdVAbQrprZ +DoDKjvbdfekzNgHA +DoDLKvbdnHEwlmgZ +DncKjvbdwzHeexEr +DoCjjvbdmpZxujyC +EPDKjvbdwMvAMcdm +DoCjjvbdfHkVrNqH +EPCkKvbdYzbfRiuy +EPCkKvbdZtIiZDrn +DnbjjvbdjvWnDbYX +DoCjjvbdOStVgEtp +EPDLKvbdZMSETmlN +EPDKjvbdBhjajhej +EPCjjvbddoFTLUUS +DnbkKvbdsQVoJcWG +EPCjjvbdrEFJQNvB +DoCjjvbdMpYRWOGs +EOcLKvbdZirgpHBf +EPDLKvbdyOTIXsJD +DoCkKvbdKRZdnfNe +DnbjjvbdbBWFFoow +EPCjjvbdgFlZnHHA +DnbkKvbdGGJrOIsq +DoDLKvbduDCtwWPP +EObjjvbdNddUIhjd +DnbjjvbdxsNiMqag +EObjjvbddeOrCWbj +EObjjvbdPxmAGsRj +EOcLKvbddeOrCXDK +DoDLKvbddeOrBwCj +DoCjjvbdVqnYCElD +DnbkKvbdUyIUZjoO +EObjjvbdeFOrCXDK +EObkKvbdVrNxCFLc +EObjjvbdTfzmkwWF +EOcKjvbdIHGzZYYH +EPDKjvbdtbbuXWPP +DoCjjvbdZisIQHBf +EObjjvbdbsCkUDjB +EPCkKvbdVwJXudFH +EPDKjvbdrouoKDVf +EPCkKvbdFyVVBEYC +DncLKvbdZnnIeEzK +EPDLKvbdxVNFQxkn +DoDKjvbdpxnggRDx +DoDLKvbdqZOgfpcx +DncKjvbdCIjakJGK +EPCkKvbdCJLBjhej +DoDLKvbdnPzYvKxb +EOcKjvbdqTsgSRkU +EOcLKvbdLBLGlaxR +DoDLKvbdcbTMrAUN +DncLKvbdzitoodSt +DoDKjvbdJvUfDdfi +EOcLKvbdHDjvKCJj +EPCkKvbdeOeTKssr +DnbkKvbdlYrqsYft +DncLKvbdiiehKMxS +DncKjvbdURQoVUhN +DnbkKvbduMYXBUAw +DoDLKvbdSPtHJfEX +EObkKvbdqBJFAWgd +EOcKjvbdFpATWgFy +DoDLKvbdBsBDTfXS +DncKjvbdjhHLfFmk +DoCjjvbdCJKakIfK +DnbkKvbddoFSjtTr +EObkKvbdANIYsWzY +EObjjvbdCTAbtFvr +EObjjvbdrRtkOLAm +DnbkKvbdkxsSTYgU +DoCjjvbdnBiwXnmu +EObjjvbdwtmEqYlO +EPDKjvbdrylQTAhO +DoDLKvbdtbbtvvOo +EPCjjvbdZLrETmlN +EPDLKvbdWXJYWDdg +DoCkKvbdKQzFOfOF +EPCjjvbdwzIFfXeS +DncKjvbdRjyFuHLT +EPDLKvbdULunaWPJ +DncKjvbdUxhTykOn +DnbkKvbdJcKCqKDY +EPDLKvbdcbSmSATm +DnbkKvbdegjurNqH +EPDKjvbdZjTIQGbG +EPCjjvbdiLddNuCy +DoCjjvbdZQldiNEq +EOcLKvbdakMGPODA +EObjjvbdnHEwlmgZ +EOcLKvbdBsAcUGXS +EPCkKvbdiVZdwSUb +EOcLKvbddCTNSAUN +DnbkKvbdEXxMUUUM +DncKjvbdYpldiMeR +DoDKjvbdNddTiIjd +DoDLKvbdZLqdUNlN +EPCkKvbdiBncFWpq +DncLKvbdiCPDEvqR +EOcKjvbdUyHszKoO +DncKjvbdhtydvqtb +EPCjjvbdpxoHgQcx +EObkKvbdkWWnDaxX +DnbjjvbdBhkBkJFj +DoCkKvbdRacdkhyL +EOcLKvbdZjTHpHCG +EPCkKvbdMowqWOGs +DncLKvbdegjurNpg +EObjjvbdfMfWfmKL +EPDLKvbdZirgpGaf +DoDLKvbdiZuFlQnG +DncLKvbdFxuVAcxC +EObkKvbdZisHofaf +EOcKjvbdJSyBSmYM +EPDLKvbdVYgtZkPO +EOcKjvbdRbEFMJYk +DncLKvbdrEFIonWB +DncKjvbdKDJbqJcY +EOcLKvbdhfjCxuiu +EObjjvbdLLAhWAKZ +DoCkKvbdRXNcblID +DoDLKvbdcbSmSATm +EOcLKvbdwWlAvAuu +EObkKvbdiBnbdvpq +DoCkKvbdNQXpumgT +DncLKvbdkVwOECYX +DnbkKvbdfoazwDxI +DoDLKvbdbBWFFpPw +DoDLKvbdvBDxsPEh +EPDKjvbdJqZdoFme +DoDLKvbdIryArmXl +EPCjjvbdANIZSwZx +EPCkKvbdVhYVxGxz +DncKjvbdLAjgNCYR +DncKjvbdxxIjCQZk +DncKjvbdbiNKKewY +EPCjjvbdlrZVZsEJ +EPDKjvbdIryAsMwl +DoCkKvbdtAHRIAAr +EPDKjvbdJmAEZfuB +EPCkKvbdZjSgogBf +DoDLKvbdOXnuzcnU +DnbkKvbdehKvRnQg +EObjjvbdZyDimbkr +DoDKjvbdmajWwoOV +EOcKjvbdkMalZeHP +EOcKjvbdIjEAJpHE +EPCkKvbdDihKVxKA +DncKjvbdNddUIiKd +EObjjvbdqdFIpOWB +DoCkKvbdxnShXsJD +DoDLKvbdjmBkzEfo +EOcLKvbdatagYLTh +DoCjjvbdVhYVxHYz +DnbjjvbdJbjDRKDY +EPCjjvbdLBLHNCYR +DnbjjvbdnGeYNOGy +EOcLKvbdUsmTekvK +EPCjjvbdtkxXBTaX +EPCjjvbdzoPqFCkx +DncKjvbdCIjbKhej +DncKjvbdZLqdTmkm +DoDKjvbdsPunicVf +EOcKjvbdmgFXmNgZ +EObkKvbdiMFENuCy +DoDKjvbdhanbeXRR +EObkKvbdACqwiyhp +DncKjvbdZisIQHBf +EPCjjvbdgQBzwDwh +DnbjjvbdyYJJaoyk +DoDKjvbdxUldqZMO +EObkKvbdkClLQgVH +EPCjjvbdZQldiMeR +EPDLKvbdZyEKOClS +EPDLKvbdcIlikFvx +DoDKjvbdrzMQTBHn +DnbjjvbdVYgtZkPO +DoDLKvbdHEKuiajK +EPCkKvbdczZQXxqC +DoDKjvbdrDdiQNua +DncLKvbdcImKLGWx +DoCjjvbdVYgtZkPO +EPDLKvbdZnnIeFZj +EPDKjvbdMIakqYAS +DoCkKvbdSLYfUgLT +EPDLKvbdiCObdvpq +DnbjjvbdRpUHKFcw +DoDLKvbdIHHZyYXg +EPCjjvbdypoMhiwA +DnbkKvbdCEPaVjMf +DnbkKvbderAvzlDP +DnbkKvbdZQleImFR +EOcKjvbdKRZdneme +DoDLKvbdiBnbeXQq +DncLKvbdEPDKjvcE +EOcLKvbdauCGwkTh +DncLKvbdEvZQPmJe +EPCkKvbdURQnuVIN +DncLKvbdegjvSOQg +EPCjjvbdKaKgMawq +DnbkKvbdRzKISbvA +DncLKvbdiLdcnUcZ +EPDLKvbdkDMKpfuH +DoDLKvbdRbDdkhyL +DnbjjvbdDwxMUUTl +DnbkKvbdrpWPKCuf +DnbkKvbdNVSqjmAX +DoDKjvbdRbDeMIxk +EOcLKvbdcyxpXyRC +DncLKvbdRMwbYnUz +EObjjvbdqlzJxlHi +DoCkKvbdJYUCIMQp +DncLKvbdLZQjSzuG +EOcKjvbdxVNEqYkn +DnbkKvbdZoOIeFZj +DoCjjvbdBraCtFwS +EOcLKvbdliDsqVSB +EPCkKvbdeATqNXif +DncLKvbdkMbLydgP +EObjjvbdZxdJmbkr +DoCjjvbdraellHLZ +EObkKvbduDCuWvPP +DoCkKvbdpstGrSLU +DoCjjvbdLGFgbBQu +DnbkKvbdhtzFWquC +EObjjvbdoAKztHdO +EPDLKvbdatafxKtI +EPDKjvbdkWXNcaww +DoCkKvbdwkXEHzzG +EObkKvbdmgEwmNgZ +DncKjvbdBiLCLJFj +DoCjjvbdeOdsKssr +EOcLKvbdfILWSORH +EObkKvbdCDpAujMf +EPDKjvbdKDKDQibx +DoDKjvbdVUMtGLuj +EObkKvbdrXQMCiYq +DncKjvbdePEsLTtS +DncLKvbdDxYLtUTl +EPCkKvbdGYuVBEYC +DncLKvbdNeEUIiKd +EPCkKvbdpxoIHRDx +EObjjvbdFkEsDHlu +EObjjvbdssSSxzFD +DoCkKvbdUtNTfMVj +DnbjjvbdJcKDRKDY +DncKjvbdqiAKEmOe +DoDKjvbdtlXwAtBX +DnbkKvbdxmsIYTIc +EObkKvbdLrXMzUpz +DoCjjvbdkxsSSxft +DncKjvbdQlwaxnUz +EObkKvbdjhGlFfNk +EPCkKvbdxsNhmRag +DoDLKvbdMfcPmQUk +DoDKjvbdQvnEDLhD +EObjjvbdVgxVxHYz +DoDLKvbdlrYtyrdJ +DoCjjvbdezvYeIsw +DncLKvbdNddTiIjd +EPDLKvbdGGJrNiUR +EPDLKvbdRzJhTDWA +EPCjjvbdvvkaWBVu +EOcKjvbdRXNdCkgc +EOcKjvbdQZNAHTSK +EPCkKvbdsCGNLfkZ +EOcLKvbdDwwktTsl +EOcLKvbdqlzJyLgi +EOcLKvbdxsNiMqag +EOcLKvbdhzVFlROG +EOcKjvbdEztRFMCi +DnbkKvbdqiAJdmPF +EPDLKvbdjcMKqGtg +EObkKvbdTlWOaWOi +EPDLKvbdURRPUuHm +DoDKjvbdelfWgNKL +EOcLKvbdGAnqZJzm +EObjjvbdGZUuAdXb +DoDLKvbduLwwAtAw +DoCjjvbdZjTIQGbG +EPCjjvbdRNXbYnUz +EPDLKvbdiLeENtby +EObjjvbdMowpunGs +EOcKjvbdbiNJjevx +DoDKjvbdEYYLstTl +DoDLKvbdqUTfrRjt +DoDKjvbdbsCkUEJa +DoDKjvbdXsMBNUPY +EPCjjvbdRNXaxnUz +DoDLKvbdNGcQNQUk +DnbjjvbdEARiMywX +EPDKjvbdSKxfUfkT +DncKjvbdhtyeXRtb +DncKjvbdZLqcsnLm +EObkKvbdZnmheEzK +EObjjvbdtbcUvuno +DnbjjvbdrzMQTBHn +DnbjjvbdDwwktTsl +EPDKjvbdkxsSTYgU +DoDKjvbdIryArlxM +DoDKjvbdnBivxOnV +DoDKjvbdeATplwif +EOcLKvbdKeegbApu +EPCjjvbdMgDQMotk +DoCjjvbduCbtwWOo +DnbkKvbdyNsHwrhc +DnbkKvbdtvNxJpsA +EOcLKvbdqAheAWgd +DoCkKvbdURQoUtgm +EOcKjvbdqceIpOWB +DoCkKvbdVwIwudFH +DnbkKvbdbLMFnmcA +EOcLKvbdZjTHpHBf +EOcKjvbdRXNdCkhD +EPDLKvbdiHJcZViu +DoCjjvbdxxIjCPzL +DnbkKvbdBcpBWJmG +EPCkKvbdZyEKOCkr +EPDKjvbdOTUWHFVQ +DoCjjvbdIGgZxwwg +EPDLKvbdFjeSbhMu +EPDLKvbdhgKCxvJu +EOcLKvbdNsUWGdtp +EPDKjvbduVnXipsA +DncLKvbdGYuVBEXb +EPDLKvbdZtIhyESn +DoDKjvbdZxdJmcLr +DoCjjvbdUsltGLuj +DoDKjvbdDoDLKvbd +DncLKvbdrDdhpNvB +EPDLKvbdKCjDRJbx +DoDLKvbdxLWdHzyf +EObkKvbdrzMQTAhO +EOcLKvbdOFDtJJKd +EPCkKvbdrSVKmjaN +EOcKjvbdWWiYVdEg +EOcKjvbdWWhwvDdg +DncKjvbdpstHRqjt +EPCkKvbdKWVFceGi +DoCkKvbdZjShPfbG +DoCkKvbdSxKlNzkY +EPDLKvbdIwtCHkqQ +EOcKjvbdsCGNLgLZ +DncKjvbdzaAOfgCM +DoDLKvbdxmrhYSiD +DncLKvbdfMfWgMjL +EPDKjvbdqFdEsuaI +EOcLKvbdiLeDnUcZ +DoCjjvbdKVuFceHJ +DoCjjvbdfekzNgHA +EOcKjvbdOFEThiLE +EPDLKvbdqceJPnWB +DoDLKvbduCbtwWOo +DncKjvbdTqROtuIN +DncKjvbdpedFUWBI +DoDLKvbdrEFJQNua +DoDLKvbdyXhjCPyk +EPCkKvbdJYUBhLqQ +EPCkKvbdtcCuXVno +DoDLKvbdZLrEUOLm +EPCkKvbdpstGrRjt +DncLKvbddePSCXCj +EObkKvbdauCHXjsh +DoDLKvbdkHfkefNk +EObjjvbdMRwMzUpz +EObjjvbdaMkCTVNH +DoCkKvbdGGJrNhtR +EPDLKvbdvBDxrneI +EPDLKvbdIHHZxwxH +EOcLKvbdrJAJdmPF +EOcKjvbdGZUuAdXb +EOcLKvbdbUbHYLUI +DnbjjvbdJzofYEAN +EPDKjvbdFxtuBDxC +DnbkKvbdQvnDbkgc +EPDKjvbdJmADzGta +DoDKjvbdZRMdhleR +DnbkKvbdsrqsZZeD +EObkKvbdrovPJbuf +EPCjjvbddeOqbXCj +EObjjvbdtcDVXVoP +DncKjvbdMfbpNQVL +DoCkKvbdhbPCeXQq +DoCkKvbdNHComQVL +EObjjvbdvBDxroFI +EPCjjvbdnBivwoNu +EObjjvbdbhljKewY +EPDKjvbdZyDimcMS +EObkKvbdWSOXbElD +EOcKjvbdTfznMXVe +EPCjjvbdZtJJYcsO +DoCjjvbdRjxfVHLT +DoCkKvbdVTltGMVj +DncKjvbdYfwEAOri +DncKjvbdYkrEUOMN +EObkKvbdqGEEsuaI +DncLKvbdjJfHimXr +EPDLKvbddndsLUTr +DnbkKvbdqBJFAWhE +EPDLKvbdEOcKjwDE +EPCkKvbdtvOYJqTA +DncLKvbdkyTRsZHU +DoCjjvbdTppnuVIN +DncLKvbdwyhFeweS +DncKjvbdsBelkgKy +DoCjjvbdKDKCqJcY +DoCjjvbdkClKqHVH +DoCjjvbdcTCjtDia +EPDLKvbdUVkpJtAq +EPDLKvbdRyjITCvA +DnbjjvbdJuuFcdgJ +DoDKjvbdrJAJdmOe +DncKjvbdJcJbqKCx +DoDLKvbdJcJbqJcY +DoDKjvbdeEoSCXDK +DoDLKvbdSwjlNzkY +EObjjvbdzitopDrt +DoCkKvbdKWVGEEgJ +DncKjvbdpssfqrKt +EOcLKvbdUMWPBVoJ +DncKjvbdyzdmrIIh +EPCjjvbdxUldqZLn +DoDLKvbdySnImRbH +DoCjjvbdGdKvJaij +DoCkKvbdxZgeewdr +EObkKvbdiLddNuDZ +DnbjjvbdSCDdkiZL +DncKjvbdznpREcMY +EOcLKvbdaRebhTfL +DnbjjvbdZQldiMdq +EPCjjvbdbrbjtEKB +EOcKjvbdEARiMzXX +DoDLKvbdXrkaNTnx +EPCkKvbdQZNAHTRj +DoDLKvbdEzspeLcJ +EPCjjvbduVnYKRTA +EObjjvbdJXtBhMQp +EPDKjvbdeOdrjssr +EPCjjvbdLqwMytpz +EPDKjvbdUMVoBVoJ +DncKjvbdRpUGifDw +EPDLKvbdZyDinDLr +DnbkKvbdNrsufeVQ +EPCkKvbdZMSDtNlN +EPCkKvbdySnJNSCH +EPCjjvbdfMevfljL +DncLKvbdXsMBNTnx +DnbkKvbdpxoHfqDx +DncLKvbdUQpntthN +DncKjvbdIsZArlwl +DoDLKvbdZGwEAOsJ +EOcKjvbdVvhwvDdg +EOcLKvbduWNxJqTA +EPCjjvbdHEKvJaij +DoDKjvbdrpWOjCuf +DncLKvbdrpWOjDVf +DoCjjvbdIHGzYwwg +DoDLKvbdpxoIGqEY +DoDLKvbdJcJbqKDY +DoCjjvbdRWmdClHc +EPCjjvbdFWYopNJe +DncKjvbdmfdwlmfy +DoCkKvbdxUleQxlO +EObjjvbdnGdxMnGy +EPCjjvbdvvlAvBVu +DncLKvbddndsKssr +EObjjvbdZMRcsnLm +EOcKjvbdFxttaEXb +DncKjvbdVUNTfMVj +EOcLKvbdNrtWHFUp +DoDKjvbdwuMdqYlO +EPDLKvbdrXPkbhxq +EObjjvbdrEFIpNua +EObjjvbdziuQQDrt +EOcLKvbdqYoIGpcx +DnbjjvbdsQVoJcVf +EObkKvbdkDMKpgUg +EObjjvbdvBDyTPFI +DncKjvbduCbuWvOo +EPCjjvbdkVvnECYX +DncLKvbdZGvdAOri +DoCkKvbdrXPlDJZR +EOcLKvbduCcVWvOo +DoDKjvbdCEPaWJlf +EPDKjvbddoErjssr +DncKjvbdACqxKZiQ +EPCjjvbdUVlPitAq +EPDKjvbdjJfHjMxS +EObkKvbdAMhYsWzY +DoDKjvbdnBivxOmu +EOcLKvbdbiNKKfXY +EPDKjvbdYqMeIleR +EObkKvbdJmADygUa +EObjjvbdEPDLLWcE +EPCjjvbdrXPkcIxq +EOcLKvbdliDtQtqa +DoCjjvbdmoyxujyC +EPDLKvbddoFTLTsr +EOcLKvbdCWzdJEpW +DnbjjvbdrEEhpOWB +DoDKjvbdZLrDtNkm +EOcLKvbdLFfHbAqV +EOcKjvbdmttzLKSG +EOcLKvbdmbJvwoOV +EOcKjvbdUaCQrqSZ +DnbjjvbdmgExMnGy +EPDKjvbddndrkUUS +EObkKvbdDwwkstTl +DoCkKvbdcJMjLFwY +DnbjjvbdaNLBruMg +DoDLKvbdQYmAHTRj +DnbkKvbdsQWOicWG +EObkKvbdMRwMzUpz +DoDLKvbdZshiZDrn +EPDLKvbdnPzYujxb +EOcKjvbdCEQAujMf +EPDLKvbdKefHbApu +DoDLKvbdYpldiNFR +DoCkKvbdFWZQQNJe +DncLKvbdznpQeCkx +EOcKjvbdnQZxvKxb +DoCkKvbdVBBprpqy +DnbkKvbdZirhPfaf +DnbkKvbdegjvSNqH +EOcLKvbdqdEiPnWB +EObjjvbdBhkCKiGK +EObjjvbdxZgfGYFS +DnbjjvbdNQYQumgT +EPCjjvbdxsNhlrBg +DoCkKvbdQdDApRDr +DoCkKvbdxxIiaoyk +EPDKjvbdFeirNhtR +DoCjjvbdegjvSOQg +EObkKvbdqcdiQNvB +DncLKvbdiMEdNtcZ +DncLKvbdTqRPUthN +EPCkKvbdwygeexFS +DoDKjvbdyTOJMrBg +DncLKvbdeEoRavbj +EPCjjvbdtbcUvvOo +EObjjvbdKCicRJcY +EObjjvbdZyEKODMS +DnbjjvbdmJDtQtrB +DncLKvbdEARhlyvw +DnbjjvbdIxTbILqQ +EOcLKvbdwygefYFS +DoCjjvbdznoqFCkx +DoCjjvbdRpUGjGDw +DncKjvbdhzVGMQnG +EPCjjvbdhkeDnVCy +EObkKvbdOEdUIiKd +DncKjvbdrDeIomua +DncLKvbdiHJbxuiu +EPDKjvbddxZstRez +EPDLKvbdmSYuZrdJ +EObkKvbdVUNUFkvK +EPDLKvbdNeEUJIjd +DoCkKvbdiMEdNuCy +DoDLKvbdRDcApQcr +EPCjjvbdTlVoBVoJ +EObjjvbdLBKgNBwq +EPCkKvbdsCFllHKy +EObjjvbdnVUzLJqf +DoDKjvbdqrVLNkBN +DoCkKvbdqFcdtWBI +DncLKvbdbVCGxLTh +EOcLKvbdeFPSCXCj +EOcLKvbdRpTgKFdX +EObjjvbdznpQeDLx +EOcKjvbdjvXNcaxX +DnbjjvbdHDkWJbJj +DncKjvbdhkeENuDZ +DnbkKvbdnUtyjjSG +DoDKjvbdSQUHJfDw +DncKjvbdbUbHYLUI +EOcLKvbdNsTvGduQ +EPDLKvbdSZigsCvA +DncKjvbdMfcPlpUk +DoDLKvbdxrnIlrBg +DncKjvbdiLdcnVCy +EPCjjvbdmfeYNOHZ +DoCkKvbdjvWmcaxX +DoDKjvbdbUbHXkUI +DncKjvbdBhkBjiFj +DoDLKvbdNHColpVL +EOcKjvbdrykosAhO +DncLKvbdqGDeUVaI +DnbkKvbdhgJcZViu +DnbjjvbduLxXAtBX +EPCjjvbdYpleJNFR +EPDLKvbdQvmdClHc +DnbjjvbdJYTbIMRQ +DncLKvbdznpRFDMY +EOcLKvbdZnmiFEyj +DnbkKvbdrRuLOLAm +EObkKvbdhkeEOUby +DncLKvbdYlSEUOLm +DoCjjvbdhkdcmtby +DncLKvbdddnrCXDK +DoDLKvbdKaLHNCYR +EOcKjvbdcyxpYZQb +EPDLKvbdACqwjZhp +DoCkKvbdBsBDTevr +EObkKvbdeKJqvUzn +EObkKvbdcImJkGWx +DncLKvbdYSlAltOx +DncLKvbdlrYtyrdJ +EObkKvbdKxqJrztf +EOcKjvbdsQWPJcVf +DoDKjvbdkySqrxgU +EObjjvbdeEoRbXCj +EOcKjvbdHDkVjBij +DoDLKvbdCTBCsfXS +DoCjjvbdKCjDQibx +DoCjjvbdlhdTqUrB +DoDKjvbdTulQKTaR +DoCkKvbdRjxetfkT +EPCjjvbdEuyQQNKF +EPCjjvbdDoDKkXDE +DoCjjvbdsQWPJbuf +DoDKjvbdhuZdvqtb +EPDLKvbdiHKCyWJu +EPDLKvbdLFegaaQu +DoCjjvbdqZPHgRDx +DncKjvbdUWMPjUAq +DoDLKvbdTYKkmzjx +DoDKjvbdegjvSOQg +DnbkKvbdUtNTekvK +EObkKvbdNsTvGeVQ +DoDLKvbdfNFvgMjL +EOcLKvbdZQmEiNEq +EPDKjvbdBraDTfWr +EPDKjvbdNGcQNQVL +EPDLKvbdZyEKODMS +EOcKjvbdBvzdIdpW +EPCjjvbdACqwiyiQ +DoCjjvbddePRawCj +EPDKjvbdWWiXucdg +DoDKjvbdWexzUAPT +DnbjjvbdwXMBWBWV +EOcLKvbdUyHszLOn +EPCkKvbdOYOuzcnU +EPCkKvbdhancEwQq +DnbkKvbdjggLefOL +EPCkKvbdFjdsDIMu +DoDKjvbdrSUjmkBN +DoDLKvbdZjTIQGaf +DoDKjvbdMgDPmPtk +EPDLKvbdWRmwbFMD +DoCkKvbdzROmJKXA +DnbkKvbdrDdiQNvB +DnbjjvbduDCtwVoP +EOcLKvbdCIjbLJFj +EPDKjvbdXrkaMsnx +EPDKjvbdVhXvXfxz +DncKjvbdhbPDEwRR +DoCkKvbdpxoHgQcx +DoCkKvbduMXwBUBX +EObjjvbdNeEThhjd +DoCjjvbdirzhrkJz +DoDLKvbdaMkCTUlg +DncLKvbdWRnYBeLc +DnbjjvbdGBPRZJzm +EOcLKvbdeOeSjstS +DoDLKvbdmIctRVSB +DoCjjvbdZxdJnDMS +DoCkKvbdRpTgKFcw +DncLKvbdTukojTaR +DnbjjvbdKRZdoFme +DnbkKvbdURQoVUhN +DoDLKvbdyYJKBozL +EObkKvbdfNFwHMjL +DoDLKvbdZisIQHBf +EObkKvbdqFcdsuaI +DncLKvbdzoPqFDLx +DoDKjvbdSKxeuHLT +EPDKjvbdsBemLfjy +DoCjjvbdJbjCqJcY +DoCjjvbdNPxRVnGs +DncLKvbdGcjvJbKK +EOcKjvbdrWpMDIxq +EOcLKvbdQdDApQcr +DoDKjvbdZMRdTnLm +EOcLKvbddxZssrFz +EObjjvbdUtNTfLuj +EPCjjvbdLLBIWAKZ +DoCkKvbdgFlZmfgA +EPCjjvbdUVkoitAq +DoDKjvbdDncKjvcE +DoDLKvbdRpUHJfEX +EPDKjvbdLqvlzVQz +EPDKjvbdZMRdUOLm +EOcLKvbdCJLBkIfK +DncKjvbdaSFbhUFk +EPDLKvbdZoNheEzK +DncKjvbdUVlPjUAq +DnbkKvbdKNADyfuB +EObkKvbdZdwfzghb +EPDLKvbdZtIhxcrn +EObkKvbdGckViajK +DncLKvbdFfJqmiUR +DncKjvbdKWUfDdgJ +DoDKjvbdMtrqjmAX +EOcLKvbdsQWPKDVf +DoCjjvbdwtleRZMO +EObjjvbduaDxsPEh +EPDLKvbdKxqJrzuG +EOcKjvbdVAaprprZ +EObjjvbdEuxopMjF +DnbjjvbdyOTHwriD +EPDLKvbdrpVnibvG +EPDKjvbdkWWnDaww +DncLKvbdrXPkbiYq +DoDLKvbddxZssqez +EOcLKvbdHDkWJbJj +DncLKvbdEPCkLWcE +DnbkKvbdEXwkstTl +EObjjvbdqiAKEmOe +DncLKvbdjAQGaQGj +EPCjjvbdNeDtJJKd +EPCjjvbdvwMBWBVu +EPDKjvbdFejSOItR +EOcLKvbdNPwqWOHT +EPDKjvbdbsCjscia +EObkKvbdyYIiaoyk +DoDKjvbdLZQirzuG +EObjjvbdSLZGVGjs +DoCjjvbdAMgxsWzY +DoDLKvbdEObjjwCd +DnbkKvbdsPvOicWG +EPCkKvbdrJAKElne +EPCkKvbdauCGwjsh +DncLKvbdegkWRnQg +EPCkKvbdYpmEiNFR +DoDKjvbduaDxsPFI +DoCjjvbdcyxoxYqC +DoCkKvbdkMakzFHP +DnbjjvbdJbibqJbx +DnbkKvbdWWhxWDeH +DoCjjvbdssRsYzFD +DoDKjvbdpyPIHRDx +DncLKvbdwNWANDeN +DoDKjvbdJYUBglRQ +EObkKvbdXnRAYVVt +DoCjjvbdUWLpKTaR +DoDKjvbdTqROttgm +EPCkKvbdVqnXaeMD +EObjjvbdADRwiyiQ +DoDKjvbdlrZUyrci +EPDKjvbdvAdZSndh +DoCkKvbdzoQQeDLx +DnbkKvbdSQUGjFdX +EOcLKvbdqBJFAXIE +EObkKvbdSCEFLiZL +DnbjjvbdzoQQdcMY +DnbkKvbdpxngfqEY +DncLKvbdbsDLUEKB +DoCjjvbdXrlBMtOx +EObjjvbdKCjDQicY +DncLKvbdLrWlzUpz +EObjjvbdaaWEfQQX +EObjjvbdtlYWaTaX +DnbkKvbdMowpunGs +EObkKvbdSLYeuHKs +EObkKvbdTAEhhCOd +EPCkKvbdmSYtyrci +DncLKvbdYkqcsnLm +DoDLKvbdrylQTAgn +DncLKvbdJXtCIMRQ +EObkKvbdSBdElIyL +DoDLKvbdwygefYFS +DncKjvbdyXhibPzL +EPCjjvbduaDxsPFI +EObjjvbdZoNiFEzK +EPCjjvbdkNBkyeHP +EPCkKvbdWRnXadlD +DncLKvbdRWmdDLhD +DnbkKvbdmSYtzTDi +EOcKjvbdkVwODbXw +DncLKvbdQlxCZOUz +EObjjvbdbhlijfXY +EOcLKvbdXmqAXtut +EOcLKvbdmbKXXnnV +DoDKjvbdkHgMFfOL +EPCkKvbdfekymgHA +DoCjjvbdeKKRvUzn +DoDKjvbdkHfkefNk +DoCjjvbdyqPMiKXA +DnbjjvbdUQqOtuIN +EOcKjvbdEPCkKwDE +DoDLKvbdZRNFIleR +DnbjjvbdRacdlJZL +EOcLKvbdTukoitAq +EOcLKvbdZLrDtOMN +EOcLKvbdgKfzcGAE +EObjjvbdzjVQQESt +EOcLKvbdcIlijevx +EOcKjvbdGKdsDHmV +DncLKvbdKkBHvAJy +EOcKjvbdZMRctOLm +EPCkKvbdADRxKZiQ +EObjjvbdDwxLsssl +EPDLKvbdUxgszLPO +EPCkKvbdSQTfiedX +EPCjjvbdNeEUJIkE +DoDLKvbdpyPHfqDx +DnbkKvbdyOShXsJD +DncLKvbdLiBkpxAS +DoDKjvbdaaWEepQX +DoCjjvbdWSOYBeLc +EOcKjvbdLFegbAqV +EPDKjvbdffLzOGgA +EObkKvbdFkErbglu +DncLKvbdiZuFlROG +DncKjvbdegkWRnQg +DoDLKvbdQdDApRDr +EOcLKvbdeYZtURez +EObjjvbdrXQLcIxq +DoDLKvbdxZhGGXeS +DoDLKvbdGGKSOItR +EObjjvbdjhHLfFnL +EOcLKvbdUQpoUuHm +DoCkKvbdXrlBNUPY +DoDKjvbdJXtCIMRQ +DnbkKvbdZMSDsnLm +DncKjvbdCTBDUGWr +DncKjvbdbhlikGXY +DoDKjvbdXmqAYVWU +DnbjjvbdliDsqVRa +DnbkKvbdmajXYOnV +EObjjvbdJpyePGNe +DnbkKvbdCTAcUGXS +DoDLKvbdCDpBVjNG +EOcLKvbdxwhiaoyk +DoDKjvbdxVNFQyMO +EPCkKvbdVvhwvEEg +DnbkKvbdFWYoomJe +EOcKjvbdlrZUysEJ +EPDKjvbdqquKnKaN +DoCkKvbdTkunaVoJ +EOcLKvbdfHkVrOQg +EPDLKvbdiUzFWrUb +DoDLKvbdtAGqIABS +DoCkKvbdZRMdhmEq +DnbkKvbdNsUVfeVQ +EPDLKvbdqwPkbiZR +DoCkKvbdNUsSLNAX +DncKjvbdmpZxvKyC +EPCkKvbdLYqKSztf +EPDKjvbdZyEKODMS +EPDKjvbdNGbomPuL +DncKjvbdZMSDtNlN +EPCjjvbdTXjkmzjx +EObkKvbdBdQAvKMf +EOcLKvbdkySrTYgU +DnbkKvbdZoOIddzK +DoCkKvbdZMSDsmkm +EPCkKvbdCWzdIdpW +DncLKvbdBvzdIdov +DoCjjvbdaRfDHtFk +DnbkKvbdWeyZtAOs +DoDLKvbdnCJwYPOV +DoCjjvbdEYYLstUM +EOcLKvbdwtldqZMO +EPCjjvbdFVxoomKF +EObkKvbdyqPMhiwA +DoDLKvbdkxrrSxgU +DoCjjvbdeATqNYKG +DncLKvbdJKEAJpHE +DoCkKvbddndsLUTr +DnbjjvbdqFceUWBI +DoDLKvbdhkddOUby +DncKjvbdGKdrcIMu +EPCkKvbdelevflik +DoDKjvbdhaoDFWqR +DoCjjvbdYlSDsmlN +EPCjjvbdiZuGLpmf +EObkKvbdnCJvxPNu +DnbkKvbdhzUelRNf +DnbkKvbdZeYGzgiC +DoCkKvbdDnbkLWbd +DnbkKvbdnHFYMmfy +DoCjjvbdePEsKtTr +DnbjjvbdZQmEhleR +DnbkKvbdTkunaVoJ +DnbkKvbdFWZPpMjF +DoDKjvbdSwkMNzkY +EOcLKvbdwtldpyMO +EOcKjvbdhkdcmtby +DoCjjvbdNQXqWNfs +EPDKjvbdzjUpPdTU +DnbjjvbdqceJPnWB +EPDKjvbdUyHsyjoO +EPCkKvbdZshhxcsO +DncKjvbdqAiFAWgd +EObkKvbdgFkzOGgA +DncKjvbdmgFYNNgZ +DoDLKvbdDjHjWYKA +DnbjjvbdJbicRKCx +DnbkKvbdfNFwHMjL +EPCkKvbdWSNxBdlD +EPDLKvbdCJKbLJFj +EPDKjvbdEOcKkXDE +EPCkKvbdVrOYCElD +DnbjjvbdCIkBjhej +DoDLKvbddoFTKstS +DnbjjvbduDDVXVoP +EObkKvbdxwiKCPzL +DnbkKvbdZGvdAPTJ +DoDLKvbdBdPaVjNG +EOcKjvbdIHGzYwxH +DoCjjvbdGFjSNhsq +DnbjjvbdlYsSSxgU +EPCjjvbdqrUjnKaN +EOcLKvbdtvOXipsA +DoDLKvbdrounjCuf +DoCkKvbdFVyPomKF +EOcKjvbdNHCpNPtk +EPDLKvbdWeyZtAPT +EPDKjvbdjcLkQfuH +EOcLKvbdzHZMAMeX +DoCjjvbdUMWPBVni +EOcKjvbdHELWKBjK +DoDKjvbdMgComQUk +DnbkKvbdiGjDZWJu +DncKjvbdyqOmJKXA +DoDKjvbdVZITyjoO +DoCjjvbdzQoNJJwA +EOcLKvbdGAoQxizm +DoDKjvbdatagYKsh +EPDKjvbdSBceMJYk +DoDLKvbdMpYQvOHT +DncKjvbdiCOcFWpq +DoCjjvbdUGznLvvF +EPDLKvbdANIYrvyx +EPCjjvbdIwtCHkpp +EObkKvbdJSyBSmYM +EObkKvbdwuMdqYlO +EObjjvbdmuVZkKSG +DncLKvbdSPsfjFdX +DoDLKvbdSQUHJedX +DoDKjvbdiVZdwSUb +EPDLKvbdRjxfVGkT +EObjjvbdmpZyVkZC +DncLKvbdhzUelROG +EPCkKvbdxVMeRZMO +EOcKjvbdxxIiapZk +EOcKjvbdJSyBTNYM +EPDKjvbdMSXMzUpz +EPCkKvbdNddThhjd +DoDKjvbdznpREcLx +DncLKvbdqYoHgREY +DnbjjvbdiCPCdvqR +DoCjjvbdsQVoKDVf +DoCjjvbdqFcdtWBI +EPCkKvbdFkFTDIMu +DnbkKvbdQvmdCkgc +DnbjjvbduCbtwWOo +DoCjjvbdaNKaruNH +EOcLKvbdrpWPKCvG +DoCjjvbdEKHiuwjA +DoDLKvbdsBfMlHKy +EObjjvbduCcVWuno +DoCkKvbdNddUIiLE +DoDLKvbdVrNwbElD +EPCkKvbdTqQoUuHm +DoCjjvbdcJMikFvx +EOcKjvbdijGIJmYS +DncKjvbdtvNwipsA +EPDKjvbdGQASwGey +DoCkKvbdmJEUQtqa +DncKjvbdpxnggQcx +EOcLKvbdDnbjjwDE +DnbjjvbdxVMdqZLn +EPCkKvbdTkvPAvOi +DnbkKvbddijRvUzn +DnbjjvbdJuuFceGi +DoDLKvbdeATplxJf +EObjjvbdiLeDmuDZ +EObkKvbdzHYlANFX +EObkKvbdSBdFLiYk +DncLKvbdMgCpNPuL +DncLKvbdNsTufeVQ +EPCjjvbdUQqOtuIN +EPCkKvbdKDJcQicY +DnbkKvbdsCFmLfjy +DnbjjvbdNdctJIjd +DoDLKvbdzjUpPdSt +EPDLKvbdMoxRVmgT +EOcKjvbdbsCjscia +DoCjjvbdrDeIpOWB +EPDKjvbdOTUVgFVQ +EOcLKvbduWNwipsA +DoDKjvbdJcJcRKCx +DncKjvbdGZUtaDwb +EPCjjvbdZtJJYdSn +DoDLKvbdtcDVWuoP +EObjjvbdKaLGmCXq +DoCjjvbddZxoxYpb +DnbkKvbdWRmxCEkc +EOcLKvbdNrsufduQ +DoDLKvbdqlzJxlIJ +DoCkKvbdFVyPoljF +DnbkKvbdjggMGGOL +DoDLKvbdLAkHMawq +DncLKvbdwuMdpxlO +DoDKjvbdtSqrxydc +DoCjjvbdSLZGVHKs +DnbjjvbdrMzKYlIJ +DnbjjvbdTAFIhBnd +EPDLKvbdIxTbIMRQ +DoDLKvbdbBVeGQPw +DnbkKvbdvlvANEEm +EPDLKvbdEOcKkXCd +DoCkKvbdYqMdhmFR +EObjjvbdnUtzKiqf +EPCkKvbdtunXjQsA +DnbkKvbdddoSBwDK +DnbjjvbdTqROttgm +EPCkKvbdzQnmJJwA +EObjjvbdfpBzwDwh +DncKjvbdRotHJecw +EPCjjvbdhtzFWrVC +DncLKvbdqdEhpNvB +DnbjjvbdkWWmcbYX +EOcLKvbdYSkaMsoY +EObjjvbdDjIKVxKA +DnbkKvbdrounjDVf +EObkKvbdJzpFwdAN +DoDLKvbdsBelkgLZ +DoDLKvbdwtmEqZMO +DncKjvbdxmrgwriD +EOcKjvbdDoDLLWbd +EPDKjvbdIwtBhLpp +EPDLKvbdUaBqTRRy +DoCjjvbdjKFhJlwr +DoCkKvbdGLFTDIMu +EPCjjvbdrbFmMHKy +DoDLKvbdehKurOQg +DncKjvbdijFhJlwr +DoCjjvbdjvXOEBww +EPCjjvbdTXjkmzkY +EOcKjvbdaSFcHtGL +EPDLKvbdpyPIHQcx +EOcKjvbdmaiwXoNu +DoDKjvbdSBdFMJZL +DoDKjvbdjKGIKMwr +DncLKvbdyXiKBozL +DoCkKvbdqlzJxkhJ +EObkKvbdrNZiyLhJ +DoCkKvbdrpWPKCvG +DncLKvbdVrOXbEkc +DnbkKvbdOAIrtJrA +DnbkKvbdrXQMChyR +EOcLKvbdDnbjjwCd +EPCjjvbdjvXOECXw +EPCkKvbdMgDPmPtk +DoDLKvbdYfwEAPSi +EPCjjvbdzGxlANEw +DoDKjvbdmbKWwoNu +EOcLKvbddZxpXxqC +DoDLKvbdLGGHbApu +DoCjjvbdVTltGLuj +EPCjjvbdOEdThiKd +DoCjjvbdUyHtZkPO +DncLKvbdHELWJajK +EOcKjvbdcarmSAUN +EObjjvbdqiAJdmOe +EObkKvbdZQleImFR +EObkKvbdQccBQRDr +DoCkKvbdLAjfmBwq +DncKjvbdSKxeuHKs +DncLKvbdmJDsqUrB +EOcLKvbdGFirNhtR +DncLKvbdEARiMywX +DnbjjvbdZxcjNblS +DncLKvbdWXIwudEg +DoDLKvbdhkeDmuCy +EObkKvbdUslselWK +DoCkKvbdLhakqYAS +DoCjjvbdIMBzmvpk +EPCjjvbdKaKgMbXq +EPCjjvbdiLeDmtcZ +DnbjjvbdsPvPKCvG +DncLKvbdnVUzLKRf +DoDLKvbdiUyeWrVC +EOcLKvbdjblLRGuH +DnbkKvbdhtydvqtb +EOcKjvbdTqQnuVIN +DoCjjvbdMtsRkNAX +EPCjjvbdGKdrbglu +DncKjvbdMoxQvOGs +DoDKjvbdiHKDZWKV +DoDKjvbdULvPAvPJ +DnbkKvbdEvZQPmKF +EObjjvbdkxrrTZGt +EObjjvbdKCicQibx +DoCjjvbdKkAgvAKZ +EOcKjvbdNxOuzcmt +EPDLKvbdbsCjsdJa +EObjjvbdHDkVjBjK +EPCjjvbdYqMdiMeR +EPCkKvbdczYoxZRC +DncKjvbdnPzYujxb +DnbjjvbdMpYRWOHT +DncLKvbdLFegbBRV +DncKjvbdxVMdqYlO +DoDKjvbdFkErbhNV +DncKjvbdLLBHvAJy +DoDKjvbdTfzmkwWF +EPCjjvbdyXiKCQZk +DoDKjvbdqUUGrSLU +EObjjvbdGcjuiaij +EOcLKvbdZRMdhmFR +DoCjjvbdZoNiEdzK +DoCjjvbdEARiNZwX +DoCkKvbdwXMBVaWV +EPCjjvbdVZHsyjoO +DoDKjvbdyXhjBpZk +EObkKvbdtkxWaUAw +DnbkKvbdLrWmZuQz +DncLKvbdySnJNRbH +EPCjjvbdezvYdhsw +DoDLKvbdhancFWqR +EObjjvbdyzeORgiI +EPCjjvbdyXiJbPyk +EObjjvbduVnXiqTA +DnbjjvbdZjTHofaf +EPDLKvbdLrXMyuQz +DnbjjvbdHffyxxXg +DoDLKvbdOStWGdtp +DnbjjvbddijRvUzn +DoCjjvbdYNqAXtut +EPCjjvbdUQpntuHm +DoDKjvbduWOXjQsA +DoDLKvbdtTRsYydc +DncKjvbdpfDeUVaI +DoDLKvbdULuoAvOi +DnbjjvbdqmZjYkhJ +EPDKjvbdZMSETmkm +DoDLKvbdZshhyETO +DncLKvbdQdCaQQcr +DncKjvbdQccBQRES +EOcKjvbdrNZjYlIJ +EPDKjvbdjAQHBPgK +DoCjjvbdnUuZkJqf +DoDKjvbdLAjfmBxR +EObjjvbdUsltFkuj +DoDLKvbdZQleJMeR +DnbjjvbdBraCtGXS +DoDLKvbdaSFbhUGL +EObjjvbdrbGMkgLZ +EPCkKvbdJYUCHlRQ +EOcKjvbdgFkzNfgA +DoCjjvbdaRecHtFk +EPDKjvbdnUuZkKSG +EPDLKvbdkWWmdBww +EObkKvbdypoNJKXA +EOcKjvbdZxdJmblS +DncLKvbdZirhPgCG +DoDLKvbddeOrCXCj +DoCjjvbdOXoVzcnU +DncLKvbdSBdFMJZL +DncKjvbdrzMPraHn +DncLKvbdqZPHfpcx +DncKjvbdVAbQsQqy +DoDKjvbdySnJNSCH +EPDLKvbdtSqsZZeD +DncLKvbdtvOYKRTA +DncLKvbdLGGICBQu +DoDLKvbdDncLKwDE +EObjjvbdNrtVgEtp +EOcKjvbdUQqOtthN +EObjjvbdZtIiYcrn +EOcKjvbdmuVZjjRf +DnbjjvbdcJNKKevx +DoCkKvbdDxXlTtUM +DncLKvbdqZOhHQcx +EPDKjvbdIsZBSlwl +EOcKjvbdNUsRkNAX +DoDLKvbdRbEFMJYk +DnbjjvbdiBncFWqR +EOcLKvbdRzKIScWA +EOcKjvbdRbEFMIyL +EPDKjvbdsPunjDVf +DoCjjvbdhzVFkpmf +EOcKjvbddxZtUSFz +DncKjvbdnVUykJrG +EOcLKvbdEPCkKvbd +EPCjjvbdnUuZkKSG +DnbjjvbdnCKWxOmu +DnbkKvbdYzcFrKVy +DoDKjvbdvmWAMcdm +EObkKvbdhkdcmuDZ +DncKjvbdNsUVgFVQ +EPDLKvbdYzbeqiuy +EOcLKvbdUxgszLOn +DnbjjvbdZQmEiMeR +DoCjjvbdkHflFemk +EPDLKvbdhbPCdwRR +DoDLKvbdWXIwucdg +DoCjjvbdOYOuzcnU +DoDLKvbdcSbkTdJa +EOcKjvbdEvYpQMjF +EPDLKvbdrykosAhO +EObkKvbdrovPJbvG +DoDLKvbdkHflGGNk +DoCjjvbdZtIiYcsO +DoDLKvbdZnmiEdzK +EObjjvbdZMSDsnLm +EPCjjvbdLAjfmBxR +DncLKvbdptUGrRjt +EOcLKvbdNQXqVmgT +DoDLKvbdCIkCLIfK +EPDLKvbduVmxKRTA +EPDKjvbdHbLzEzAD +EPCjjvbdbUbGxKsh +DoCkKvbdjlbLzEgP +EPCkKvbdXGYzUAPT +DnbkKvbduLxXAsaX +EObkKvbdJvUfEFHJ +EOcKjvbdmbKXXoNu +EPDKjvbdQvnDbkgc +DoDLKvbdiUzFWrVC +EObkKvbdZyEKNcLr +DoDKjvbdrEEhpNua +DnbkKvbdzitoocsU +EPCjjvbdmbJvxOnV +EOcLKvbdNddTiIjd +DncKjvbdfpBzvdYI +EObkKvbdBhjbLIfK +DoCjjvbdFjeTDHmV +EOcKjvbdRjyGVGkT +DoCkKvbdZQldhmFR +EPDKjvbdqlzKZLhJ +DnbkKvbdZoOIeEyj +DncKjvbdBdPaVjNG +EPCkKvbdTulPjUBR +EPDLKvbdGGJqmiTq +DoDLKvbdGGJqmhsq +EOcKjvbdIryBTNXl +EPDLKvbdIsYaSmXl +DoCjjvbdVwJXudEg +EPCkKvbduDCtvuoP +EOcLKvbddBsMrAUN +DncLKvbdrouoJcWG +DoDKjvbdCgLfHAzc +DncLKvbdhtzEvqtb +DoDKjvbdZtIiYcsO +DncKjvbdMfbomPtk +DncKjvbdYqNEiMdq +DnbkKvbdCTBCtFvr +DncLKvbdhtzEvquC +DoCjjvbdAMhZSvyx +DoDKjvbdjlbLzEfo +EOcKjvbdZLrETmkm +DncKjvbdULvPAuni +DoCjjvbdtcCtvuoP +EPCkKvbdOTTugEtp +EObjjvbdhtzEvquC +DoCjjvbdkHgLfFmk +DncKjvbdmoyyVkZC +DnbkKvbdsBemLgKy +DoDKjvbddCTMrAUN +DoCjjvbdmuUykJqf +DnbjjvbdbQHGckzd +DoDLKvbdyOShXriD +EPDLKvbdZRNFImFR +EOcLKvbdDoDKkWcE +EPCkKvbdwMvAMcdm +DnbjjvbdbKlFoNcA +DoCkKvbdMfbpMpVL +DncLKvbdhkeDnUby +DoDKjvbdMSWmZtpz +EPCjjvbdmfeYMmgZ +DnbjjvbdqiAKFMoF +DoCkKvbdSBdElIxk +EOcLKvbduoTzpkPU +DncLKvbdDoCjjwCd +EObjjvbdLGGHbBQu +DnbkKvbdQcbaQRDr +EPDLKvbdyNrgxTJD +EObjjvbdtSqryZdc +DoDLKvbdegkWSNpg +EOcKjvbdZLrDsnLm +EObjjvbdFkEsCgmV +DoDKjvbdatagXjtI +DncLKvbdGZUuBDwb +DoDLKvbduDDUvuno +EObjjvbdURROtuIN +DnbkKvbdyXhjBpZk +DoDLKvbdKaLGlaxR +DoCkKvbdlZTRrxgU +EPDLKvbdUsltFlWK +DncLKvbdGGKRnIsq +DnbkKvbdijFhKNXr +DoDKjvbdrWokbiYq +EObjjvbdUaCRSqRy +EObjjvbdRkYfVHKs +DnbkKvbdQvnDcMID +EObjjvbdvBEYrneI +DnbkKvbdySmiNRbH +EPDKjvbdjuvmcaxX +DoCjjvbdVTmUGLuj +EPDLKvbdxVMeRYlO +DnbjjvbdNPwpvNgT +DoDKjvbdJTZArlxM +EPDLKvbdjbkkRHUg +DnbkKvbdSBdFMIyL +EPDKjvbdMgColpUk +DncLKvbdVAbQsQrZ +DncLKvbdyTOJNRag +DnbjjvbdmgFYMmgZ +EPDKjvbdTAFIgbOd +EObkKvbdFWYoomJe +DoDKjvbdIxUBhMRQ +DoCjjvbdFWYopNKF +DoDKjvbdNdcshiLE +EOcLKvbdwWlBWAuu +EPCkKvbdYpldiNFR +EPDLKvbdQwODbkgc +EPCkKvbdqZOhHQcx +EObjjvbdHDjujCKK +DoDLKvbdnBjWwnmu +EPDLKvbdUQqPUuHm +DnbkKvbdIryBSlxM +DnbkKvbdjhGlFfNk +DnbkKvbdqlyiyMHi +EPDLKvbdxmsIYTIc +EPCjjvbdNrsufduQ +DncLKvbdaaWEepPw +DnbjjvbdkVvnDaxX +EOcKjvbdUQpntuIN +EOcKjvbdQdDAopcr +DoCkKvbduMXvaUAw +DnbkKvbdMRwNZuQz +DoCkKvbdNGcQMotk +EPDLKvbduWOYJpsA +DncKjvbdZtJIxcrn +DnbjjvbdwyhFfXeS +EOcLKvbdIryAsNYM +EObjjvbdyTNiNRag +EPCkKvbdiZuGLqOG +DncKjvbdHELWJbKK +DoDKjvbdIGfyxwxH +EPCkKvbdeOdrkTsr +DoDKjvbdpstGrRjt +EOcKjvbdZtJIxdSn +EObjjvbdZtIiZDrn +DnbjjvbdOEctIhkE +DncLKvbdKDJbqJbx +DncKjvbdEOcLKvcE +EOcLKvbdgLGzcGAE +DoCjjvbdGBPQxizm +EPCjjvbdeFOqbXDK +EObkKvbdehKuqnQg +DncKjvbdRosgKFcw +EOcLKvbdUsmUGLuj +EOcLKvbdrXQMCiZR +DoDKjvbdjcMLQftg +EPDLKvbdHEKvKBjK +EPDKjvbdbVCHYLUI +DncKjvbdFfKSOItR +DncKjvbdYSkaNToY +DncLKvbdQvmccLhD +EOcKjvbdnVUykKSG +DoCkKvbdbsDKsdJa +EObkKvbdGLFTChMu +DoCkKvbdqGEFTuaI +EPCkKvbdddoRbXCj +EPCjjvbdMfbpNQVL +DoDKjvbdFjdrbgmV +EPCkKvbdmRxuZsDi +DncKjvbdaRfChUGL +DncLKvbdMJBkqYAS +EObkKvbdxUmEqYlO +EPDLKvbdtbbtvuoP +DoDKjvbdxsOJNSBg +EPDKjvbdZtIhyDrn +DncLKvbdKCicRKDY +EPDLKvbdUtNUFlVj +EPCjjvbdeATqMxJf +EOcLKvbdaNLBsUmH +DoDKjvbdJcJcQjDY +EPCkKvbdiMEdNtby +DoCjjvbdiGibyWJu +DncKjvbdeEnrCXDK +EPCjjvbdUVlPisaR +DncLKvbdXGZZtAPT +DoDKjvbdddoRbXDK +DoDLKvbdSBdElIyL +DoCjjvbdRNXbZOUz +DnbjjvbdTAEhhCPE +EObjjvbdUMVoBWOi +DnbkKvbdFjdrcHmV +DoCjjvbdfIKurORH +DoDLKvbdVBCRTQrZ +EOcLKvbdZoNhddzK +DoCkKvbdULvOaVoJ +DnbjjvbdZirhPgCG +EOcKjvbdVBBprqSZ +DoDLKvbdaSFcIUGL +DoDLKvbdfIKuqnRH +DncKjvbdijGIKNXr +EPDLKvbdrzMPsAgn +EPDKjvbdNUsSKmAX +EPCkKvbdLLAhWAKZ +DncKjvbdkWWnDaww +DnbkKvbdJYUCHlQp +EPDLKvbdNwoVzdNt +DoCjjvbdSLYetfjs +DoDLKvbdptTgSSLU +DncKjvbdxVMdqZLn +DncKjvbdZyDinDMS +DnbkKvbdnPyxujxb +EPCkKvbdSiZjRABM +EPDKjvbdPyNAHSqj +DncLKvbdqwPlChyR +EPDKjvbdGckWJbKK +DoDLKvbdbBWFFoow +DoCkKvbdkCkkRGuH +DncLKvbdmJDtQuSB +EObkKvbdQdCaQQdS +DncKjvbdKfFhBaQu +DncKjvbdaNKaruMg +EOcKjvbdnPzZWLYb +EObjjvbdxUldqZMO +DnbkKvbdGckWJaij +DncKjvbdkVwODaww +EObjjvbdGKdsDHlu +EObkKvbdKQyeOfOF +EPCkKvbdGdKvKCJj +DnbkKvbdGdKuibKK +DoDKjvbdOFDtJJKd +DoCkKvbdwuMdpxkn +EObjjvbdZjShPgBf +DoDKjvbdcyxpYZQb +DnbjjvbdrbGMkgLZ +DnbjjvbdxsNiMqbH +DoDKjvbdWSOXbFLc +EPCjjvbdrDeIomvB +EOcKjvbdEuxopNJe +DoDKjvbdKDKCqKCx +DoCkKvbdkIHLfGNk +EOcKjvbdnUuZjirG +DncKjvbdIryArmXl +DoDKjvbdraemMGkZ +DncKjvbdEJgivYKA +DoDLKvbdbhmJkGWx +DnbjjvbdZyDimcMS +EOcKjvbdhuZeWrVC +DnbkKvbdRbEFMJZL +EPCkKvbdeOdrkUTr +DoCkKvbdlhdUQuRa +DnbjjvbdZtIiZDsO +EPCjjvbdZyEJmcMS +DnbjjvbdFpATWgGZ +EOcLKvbduaDxroEh +DnbkKvbdpeceUWBI +EOcKjvbdjcMLQftg +DncLKvbdnPzZWLZC +DnbjjvbdZyEKNcMS +DoDKjvbdZMSDsnLm +DnbjjvbdOAIsTjSA +DoCjjvbdWSNxCFLc +DoDKjvbdkClLRHVH +DncKjvbdZxdJmcLr +EPCjjvbdOYOuzdOU +DncKjvbdWHxVxHYz +DoDLKvbdwXMBWBVu +EObjjvbdZxdJmcMS +EOcKjvbdrEFJPmvB +EOcKjvbdQcbaQQcr +EPCkKvbdfHkWRnRH +EOcKjvbdrEEiQNvB +EObkKvbdcTCjtDia +DoCkKvbdnCJvwoOV +DoDLKvbdxnTIYSiD +EOcKjvbdGQASvfey +DoDKjvbdUtNTekvK +DoDLKvbdbUbHXkTh +DncKjvbdaNLBsVNH +EPCkKvbdmtuZjirG +EPDKjvbdvlvANEEm +DnbkKvbdcIljLGWx +EOcKjvbdJSyArmYM +EObjjvbdVTltFlVj +DncKjvbdTAFIgbOd +EOcLKvbdUsltGLuj +EObjjvbdZRNEhmFR +EOcKjvbdUGznMXVe +DnbjjvbdTqQoUthN +DncLKvbdZRNEhmEq +EObkKvbdKxpirzuG +EOcKjvbdiVZdvqtb +EOcLKvbdatbGxKtI +DnbkKvbdpfDdsvBI +DnbjjvbdpyPIGqDx +DoCkKvbdqUUGrRjt +DoCjjvbdfHjuqmqH +EPDKjvbdqlzJyLgi +DoCjjvbdznpREcMY +EObjjvbdjuvnEBww +DoCkKvbdQwNdCkgc +DoCjjvbdxsNhlqag +EOcKjvbdbsDKtEJa +EPDLKvbdfIKuqnQg +DncLKvbdJXsbILqQ +DoDLKvbdiUydwRuC +EOcLKvbdUtMsfMVj +DnbkKvbdfNGWflik +DoDLKvbdqwQLcJZR +DncLKvbdYqMeIleR +DoCjjvbdzaAPGgBl +EPCkKvbdauBgYLUI +EPDLKvbdiUydvqtb +DnbjjvbdRyjITCvA +DncLKvbdIwsahLqQ +EPCjjvbdRacdkiYk +EOcKjvbdRbEFMJZL +DoCjjvbdrzLoraHn +EObkKvbdxxIiaozL +EOcLKvbdJcJbqJbx +EPCjjvbdZisHogBf +EOcKjvbdVTmUGMWK +EPDKjvbdrylQSaIO +DncLKvbdSCEEkiYk +DoDLKvbdhtyeXRuC +EObjjvbdQvmcblID +DoDKjvbdauCGwjtI +DnbkKvbdGYtuBEYC +DoCkKvbdkyTSSxft +EPDLKvbdIGfyyYYH +EObjjvbdjlbLzEgP +EPCjjvbdIwsbHkpp +EPDKjvbdmuUyjjSG +DoCkKvbdUQpoUtgm +EObkKvbdUQqPVVIN +DncLKvbdXrkaMsnx +DncLKvbdaMjbTUlg +DncLKvbdhgJbyVjV +DnbkKvbdURQoUuIN +DnbjjvbdFWZQQMie +EPCjjvbdnCJwYPNu +EOcLKvbdBcpBVimG +DoCkKvbdyqPMiKXA +EObkKvbdnVUzKjRf +DnbkKvbdVgwvXgYz +EObkKvbdZsiJZDsO +EPDKjvbdiCPCdwRR +EObkKvbdGYuUaEYC +DnbkKvbdpyPIHREY +DnbjjvbdiZtfLpnG +EPCkKvbdVUNTelWK +DnbkKvbdTppoVUhN +DnbjjvbdxrnIlrBg +EPDKjvbdmIdUQtrB +EObjjvbdkNBkzFGo +DncKjvbdhbOcFXQq +DoDLKvbdNGcPmQVL +EPDKjvbdZoNheEyj +DnbkKvbdjlbLzEfo +DoCjjvbdZRMdiNEq +EObjjvbdczYoxYqC +EPDKjvbdLAkHMaxR +DoDLKvbdsPunibuf +DoDLKvbdNdcshhkE +EPDKjvbdhkdcnVCy +EPCkKvbdVZHtZkOn +DnbjjvbdsrrTYzFD +DoCjjvbdatbGxKtI +EOcLKvbdnGdxMnHZ +EPDLKvbdmaivwoOV +EObkKvbdjJegjMwr +EPDKjvbdYfwEAOri +EOcKjvbdpxngfpcx +DnbjjvbdEPCjkXCd +EPDKjvbdxsOImRag +EObjjvbdEPDKjwDE +DnbjjvbdYlSETnLm +DncLKvbdBiLBjhej +DoDKjvbdrpWPJcVf +DncKjvbdRpTfiedX +DoDKjvbdakMGOnDA +DnbjjvbduVmxKQsA +DncKjvbdKfFhCBRV +DnbkKvbdpfEFTvBI +DncLKvbdqwQLcIyR +EOcKjvbdlhdTpuSB +DncKjvbdqwQLbhxq +DnbkKvbdnHEwlmgZ +EPDKjvbdDoCjkWbd +EObkKvbdANIYsWyx +EObjjvbdpfEEsvBI +EPDKjvbdCJLCKiFj +DoDKjvbdqcdhonVa +EPCjjvbdzjUpQESt +DncLKvbdZQleImEq +EPCjjvbdEPCkLXCd +EPDKjvbdYlRdUNlN +EObkKvbdxwiKBozL +DnbjjvbdFjdsChNV +EObjjvbdwtleRYlO +DoDLKvbdeOdsLUUS +EPDKjvbdZLqctOLm +DoDLKvbdjlbLyeHP +DoCkKvbdaNLCTVMg +DnbkKvbdEKHjWXjA +DnbkKvbdZshhyDsO +DnbjjvbdsPunibuf +EPCkKvbdwWkaWBVu +EPDLKvbdFpATWfey +EObjjvbdzoQQdcMY +EPDLKvbdpxngfpcx +DnbjjvbdgPazwDwh +EPDKjvbdKVtfEEfi +EOcLKvbdhkeENuDZ +EObkKvbdIwtCILqQ +EPCjjvbdyNrhXsJD +DnbkKvbdMSWmZuQz +EOcLKvbdsPunicWG +DncLKvbdULvPBWPJ +DoCkKvbdKfFhCApu +EOcLKvbdTAEhhCOd +DnbkKvbdSKxetfjs +DoCjjvbdUtNTfLuj +EObjjvbdhzVGMROG +DoCkKvbdxsNhmRag +DnbjjvbddZyPwxpb +EObjjvbdEuxooljF +DncLKvbdVTlsfLuj +DoCkKvbdZjShQGaf +EPDKjvbdrSVKnKaN +DnbkKvbdFxuVBDwb +DoCkKvbdJXtBhLpp +EPCjjvbdHffzZXxH +DoCjjvbdqZOgfqDx +DncLKvbdqwQMChyR +EObjjvbdaSGDIUFk +EPDLKvbdZxdKNcMS +EObjjvbdhuZdwSUb +EPDLKvbdfMfWgMik +DncLKvbdZRNFJMdq +EOcKjvbdJKEAKPfd +EPCkKvbdcyxoxYqC +EOcKjvbdCSaCsevr +DoDLKvbdKQzEoGNe +DoDLKvbdjhHLefOL +DoCjjvbdRjxeuGjs +DncKjvbdyOTIXsIc +DnbkKvbdBdQBWKMf +EOcKjvbduLxXBUBX +EObkKvbdrSUkNkAm +DoDKjvbdKfFhBaRV +EPCjjvbdddoSBvcK +DncKjvbdyOTHxTJD +EOcLKvbdiLeENuDZ +DoCjjvbdJbjDRKCx +EPDKjvbddoErkUUS +DoCkKvbdBiKakJGK +DnbkKvbdCIjbKiFj +DoCjjvbdIsZBSmXl +EOcLKvbdBhjajiFj +DnbjjvbdrzMQTBIO +EObjjvbdrWolChyR +EPCkKvbdEARiMzXX +DoDLKvbdrWpMDJYq +EOcLKvbdKRZdoGOF +DoCjjvbdBsAcUFvr +DoCjjvbdBraDUGXS +DoCkKvbdIwtBhMQp +EObjjvbdeATqMxKG +EPDKjvbdYzbfRjWZ +EOcLKvbdsCGNLgKy +DoDKjvbdhficZWKV +EObjjvbdZQldhldq +EPDKjvbdsQVoJbvG +EPDKjvbdsQVnicWG +DoDLKvbdVZITyjoO +EPCjjvbdILazmvpk +EPCkKvbdZMSDsmlN +DoCjjvbdZGvdAOri +DoDKjvbdwuMeRYkn +DnbjjvbdZyEJmblS +EPDKjvbdhkeENuDZ +EPDLKvbdGdKvKCKK +EPCjjvbdjuwOECXw +EObkKvbdZeXfzghb +EObjjvbdJmAEZgUa +EOcLKvbdtcCuWvOo +EPCkKvbdiiehJlwr +DoDLKvbdwtldpyMO +DoCjjvbdjblLQfuH +DncKjvbdNPwpunGs +DnbjjvbdSLZFtgLT +EPDKjvbdyXhjCPyk +EObjjvbdliETpuSB +Dnbjjvbdqlyixkgi +DoDLKvbdmbJvxOnV +DoCjjvbdZjSgpGaf +DoCjjvbdqdEhpNua +DoDLKvbdelfXGmKL +EPDKjvbdIGgZyYYH +DncLKvbdfMfXHMik +DoCjjvbdZoNheEyj +EPCkKvbdsZlPsBIO +EOcKjvbdLAjgMbXq +DncKjvbdVZITykOn +DnbjjvbdpyOgfqEY +EPDKjvbdbUagYKtI +EObkKvbdrSUjnLBN +DncKjvbdQwNdDLhD +EOcLKvbdrykosBIO +EPDKjvbdsPunicWG +EPCjjvbdliDtQuRa +EOcKjvbdcSbkTdKB +EOcLKvbdKaKgNCXq +DnbjjvbdZshhxcrn +DnbkKvbdcbTMrAUN +EPCkKvbdsQWPKDVf +DncKjvbdijGHjMwr +EOcLKvbdULvPBVni +EPCjjvbdffLynHHA +DoCjjvbdTqQntuHm +DoDLKvbdjuwNdCXw +DoCkKvbdVZITzLOn +EPDLKvbdqrUkOLAm +EPDLKvbdZQmEhmFR +DoDKjvbdwjvdHzyf +EPDKjvbdePErjtTr +EObjjvbdmozYvLZC +DnbjjvbdACrXizIp +EOcLKvbdTvMQJtAq +DncLKvbdssSTZZeD +DnbjjvbdmozZVjxb +EOcLKvbdtSrSxzFD +EPDLKvbdZyDjOCkr +DnbkKvbdbBWEeopX +EOcLKvbdkWWmcbXw +DoCkKvbdkVwNdBww +DncKjvbdEzsqFMCi +DncLKvbdACqxJyhp +DoDKjvbdYpmFIleR +DncKjvbdGKdsCglu +DoCkKvbdZnnJFEzK +DoDKjvbdBsBCtGWr +EPDKjvbdBcpAuimG +DnbjjvbdIGfzYxXg +DnbkKvbdGLEsCgmV +EPCkKvbdySnJNSBg +DoCkKvbdPyNAGrqj +EPDKjvbdmaivxPNu +DnbjjvbddoFSkUUS +DoCkKvbdySmiNRag +DoDLKvbdEYXlUUUM +EObkKvbdCTBCtFwS +DoDLKvbdoznDkXoA +EOcLKvbdBvzciEov +DoCjjvbdSPtHJfEX +EPDLKvbdtvOYJqTA +EPDKjvbdZisHpHBf +EPDKjvbdILazmvqL +EOcKjvbdRpUHKGDw +DncKjvbdWXJYWDdg +EPDLKvbdIwtCHlQp +EPDKjvbdUtNTfLvK +DncLKvbddZxpXxqC +EOcLKvbdkNBlZdgP +EObkKvbdqYnhGqEY +EPDLKvbdfpBzwDwh +DncLKvbdTkuoBVoJ +DnbkKvbdvvlBWAvV +DoCjjvbdrXQMCiYq +EPCjjvbdFeiqmiUR +DncLKvbdzjUopDsU +DncKjvbdhkeDmuCy +EPCjjvbdVqnYBdlD +EOcLKvbdSCDeLiYk +DoCjjvbdJvUeceHJ +EPCjjvbdjgfkfFnL +DnbjjvbdkVwNdBww +EObkKvbdczYowyRC +EPCjjvbdZoNhddyj +EPCjjvbdOSsugEuQ +EObkKvbdZMRcsnLm +EObjjvbdrMzJyLgi +EPDKjvbdrSUjnKaN +EPDKjvbdSLYfUfkT +EPDKjvbdUVlQKUAq +DoDLKvbdJcKCqJbx +DnbjjvbdeFPRbWcK +DoCkKvbdVAbQsQqy +DncLKvbdpeceTvBI +DoDLKvbdcIlikFwY +DoDLKvbdbsDLTdJa +EPCkKvbdRXOEClHc +DnbjjvbdbKkennDA +DncLKvbdEzsqEkcJ +EPCjjvbdJvUedEgJ +EOcLKvbdzitpQDsU +DncLKvbdQvnDblHc +EOcKjvbdbQGgDkzd +DnbkKvbddZyPxYpb +EPDLKvbdLrXNZuQz +DoDKjvbdDjIJvYKA +EPCjjvbdbVCHXjsh +EOcLKvbdsPunicVf +EOcLKvbdEzspdlCi +DoDLKvbdmRxtzSdJ +DnbjjvbdsBfNLfjy +DoCjjvbdcTDLUDia +EPDLKvbdidjgVPAO +DoCkKvbduVmxKQsA +EObjjvbdxLXDgzzG +EPCkKvbduaEZSoFI +EOcLKvbddneSjssr +DoCkKvbdWXJYVdFH +DncLKvbdHkaznWqL +DncKjvbdbVCGxKsh +DnbjjvbdiMEcmtcZ +DoDKjvbdqAheAXHd +EPCkKvbdMIalQxAS +DnbjjvbdVviXucdg +DnbjjvbdMpXpumgT +EObkKvbdMJCLqYAS +EObjjvbdczZQYYqC +DncLKvbdUxgtZjoO +EOcLKvbdjuwNdCYX +DncKjvbdSwjlNzkY +EPDLKvbdrWpLbhxq +DoDKjvbdnBjWwoOV +EPCjjvbdmSYtyrdJ +DoDLKvbdzeZnzdzQ +DncLKvbdMowqWOGs +EPCkKvbdqTsfqrLU +EObkKvbdraemMHKy +EOcLKvbdJcJbpjCx +DnbjjvbdmuUzKjRf +DncKjvbdNeEThhkE +DoDKjvbdHakydzAD +EOcKjvbdXsLaNUPY +EObjjvbdLFfHbBQu +DncLKvbdbKlFoODA +DoCjjvbdRpTfiecw +DnbkKvbdRkYetgLT +DoCjjvbdegkVrOQg +DoDLKvbdhlFEOUby +DoCkKvbdFyUtaEXb +DnbjjvbdAMgxsXZx +EOcLKvbdUQqOtuHm +EPDKjvbdxrmiMrCH +EOcLKvbdREDApQdS +DoDLKvbdWRmxBdlD +DnbjjvbdiHKCyVjV +EPCkKvbdxwhjCPyk +EObjjvbdLKaHvAJy +EPDLKvbdZtJJYcsO +DoCjjvbdbPfgDkzd +EObkKvbdUaBqTRRy +EPDKjvbdGYtuAcwb +DnbjjvbdQcbaQRDr +EPCjjvbdsBfNMHKy +EPDKjvbdZyDimblS +DoDKjvbdJXtBglRQ +EObkKvbdpssfrSLU +EOcLKvbdMRwMytpz +DoCjjvbdEYYMUTtM +DoCkKvbdeAUQmXif +DncLKvbdUaBqSpqy +EObkKvbdVAbQrqRy +EObkKvbdwXMAuaWV +DncLKvbdCIjakIfK +DncLKvbdjmBkzEfo +EOcLKvbdKVtfDeGi +EObkKvbdnQZyVjxb +DncLKvbdzRPMhiwA +DncKjvbdJpydnfOF +EPDKjvbdqTsfrRkU +EPDLKvbdEuyQPlie +DnbjjvbdfSBWzlCo +DnbkKvbdqiAKFMne +EPCjjvbdatbHYLUI +EOcKjvbdNsTugEtp +EPCkKvbdmgFXmNgZ +EPDLKvbdMSXNZtpz +DoDKjvbdUaBprqRy +DnbjjvbdXmqAXtvU +EOcKjvbdHlBznWpk +EOcKjvbdVqmwbElD +DoCkKvbdqrVLOLAm +DnbkKvbdZshiYcrn +DoCkKvbdZoNhddyj +EOcLKvbdEuxooljF +DnbkKvbduCcVXVoP +EPCkKvbdmuVZjirG +DncKjvbdRzKHrbvA +EObkKvbdeKJqutzn +EObkKvbdyOShXsIc +EPCjjvbdRbDdlJZL +DoDKjvbdSBdFMIxk +DncLKvbdKaKgMawq +EObkKvbdCDpAuilf +DnbkKvbdRWnDcLgc +DncLKvbdqlzJxkhJ +EPCjjvbdNHDQMpUk +EOcLKvbdRMwbZNtz +EPDKjvbdOEdThiLE +DoDLKvbdUyHszKoO +DnbkKvbdZisIPgCG +DncKjvbdwzHeeweS +DncKjvbdQwODcLhD +DoDLKvbdqdFJPmua +EOcLKvbdvwMAvBVu +EPDLKvbdbVBfwjsh +DoCkKvbdRyjHrcWA +DoDLKvbdWIYVxGxz +DnbkKvbdbiMjLGXY +EOcLKvbdBhjbKiFj +EObjjvbdCDpAvJmG +EPDKjvbdLBKfmCYR +DoCkKvbdbiMijevx +DnbkKvbdyOSgwriD +EPDLKvbdlYrqsZHU +EOcLKvbdwyhGFxFS +EPDLKvbdRyjHsCvA +EPCkKvbdHgGzYxYH +DoDLKvbdGFjRmhtR +EPDKjvbdFyUtaEYC +DncLKvbdeFOrCWbj +DoDLKvbdJSyArlwl +EOcKjvbdZyEKODLr +EOcLKvbdemGXGmJk +DnbjjvbdSCDeLhyL +DoDLKvbdYTLaMsnx +DoCjjvbdxKwEHzyf +EOcLKvbdiVZdvquC +DnbkKvbdUaBqTQqy +EPCjjvbdGZVVBEXb +DoDLKvbdCEQAvKMf +DoDLKvbdRWmdCkhD +EPDKjvbdRotHJecw +DoCjjvbdZxcimblS +EOcLKvbdtbcUvvOo +DnbjjvbdZsiJZDsO +EOcKjvbdRyjHsCvA +EOcKjvbdxLWdHzzG +DoCjjvbdFjdrbhMu +EPCkKvbdxVNFRYlO +DoCkKvbdmIcsqUqa +EPDLKvbdfMfWgMjL +EPDKjvbdTqQoUthN +EOcKjvbdtkwvaUAw +DoDKjvbdBdPaVilf +DoDLKvbdZMRdTmkm +EPDLKvbdelewGlik +DoCkKvbdwzHfFxEr +EPCkKvbdvAcyTPFI +EObjjvbdQdDBPqES +DoDKjvbdZtIiYcrn +EOcKjvbdypnlhiwA +DoCkKvbdNrtWGduQ +DncKjvbdxsOIlqbH +EPCjjvbdANIYrvyx +DnbjjvbdNwnuzdOU +EPCkKvbdFyUuBEXb +EOcLKvbdaaWFGQQX +DncLKvbdraelkfkZ +EPCjjvbdTpqPVUhN +DncKjvbdySmiNSBg +EPDKjvbdrpWPJbvG +EObjjvbdwNWANEFN +EObjjvbdZeYGzhJC +DoCjjvbddndsKstS +EPDLKvbdegkWSORH +EPCjjvbdvwMAvBVu +EPCjjvbdkySqrxgU +EPCkKvbdHkaznWqL +EPCjjvbdqlzKYkhJ +DncLKvbdZxdJmcMS +EPCjjvbdqGEFTvAh +EObjjvbdTYKkmzkY +EPCkKvbdZisHofbG +EOcLKvbdzoPpdcLx +EPDKjvbdZjTHpHCG +EOcKjvbdKWVGEFHJ +EPCjjvbdhyuFlROG +EPCkKvbdFjeTDIMu +DncLKvbdOYPVzcnU +DoCjjvbdSZjISbvA +DoCkKvbdZoNiEdyj +EPCjjvbdrWpMDJZR +EObkKvbdkVvnDaxX +EObjjvbdcSbjtDia +DnbjjvbdLGGICBRV +EPDLKvbdkWWmcbXw +EObjjvbdnHExNOHZ +DncKjvbdUtNUFlVj +EObkKvbdEvZPomKF +DoCkKvbduoTzpjnt +EOcLKvbdURQoVVHm +DnbkKvbdTAEiIBnd +DncKjvbdQwOECkgc +DnbjjvbdRbDdkiZL +DoCjjvbdEPCkLWcE +EPDKjvbdzjUpPdSt +EPDKjvbdZMSDsmkm +DoDLKvbdBdPaWJmG +EPCkKvbdwjwEHzyf +DnbjjvbdhuZeXSUb +DoCkKvbdlYrqsYft +DoCjjvbdEXxMTssl +DoDKjvbdzoPpdbkx +DncKjvbdWRnXbFMD +DoDLKvbddijRutzn +DncKjvbdnCKWwnmu +EOcLKvbdZMSDsmkm +EOcLKvbdUaCRTRSZ +EObkKvbdkCkjpgVH +DnbkKvbdirziTKiz +DoDLKvbdJpyeOenF +EObkKvbdGKdsDHmV +EObjjvbdoAKzshDn +EPDLKvbdlrZVZrci +DncLKvbdRzKHsDWA +EObkKvbdKkAhWAKZ +EPDLKvbdVAaqSqRy +DoCkKvbdjAPgApHK +EPCkKvbdBcpBWJmG +DncKjvbduCbuXWOo +EOcLKvbdqiAKEmOe +EPDKjvbdYpldhleR +DnbjjvbdEPCjjwCd +DnbjjvbdbsDKtEJa +EObjjvbdKfGICBRV +DoDLKvbdRadFMIxk +DoDKjvbdGGJqmhsq +EPCjjvbdJbicQjDY +DncKjvbdbiNKKfWx +EOcLKvbduLxXAsaX +EPCjjvbdEKIJuwjA +EPCjjvbdWRmwadlD +DnbjjvbdfMewGmJk +EOcLKvbdNxOuzdOU +DnbkKvbdfIKvSOQg +DncLKvbdQZNAHSqj +DnbjjvbdZLqdUNlN +EPCjjvbdSLYetgLT +DncKjvbdeEoSCWbj +EPDLKvbdsCFmMGjy +EPDLKvbdLGGHaaRV +DncLKvbdEuxpQMjF +EObjjvbdVYhTzLPO +EPCkKvbdaSFbhTek +DnbkKvbdDihJuwjA +EObjjvbdFjeTDIMu +EObjjvbdhkeDnUby +DoDKjvbdxUmEpyLn +DncLKvbdiVZdvqtb +DoCkKvbdunszqLPU +DnbkKvbdSBcdkiYk +EObjjvbdbhmKKevx +DnbjjvbdVZHtZkOn +DoDLKvbdZirgogCG +DoDLKvbdqBIeAWhE +EPCjjvbdwtmEqYkn +DncKjvbdKCjDRJbx +EOcKjvbdTvLpJsaR +DoDKjvbdyXhjBozL +DnbjjvbduDDUwVoP +DoDKjvbdzaAOfgBl +DoCjjvbdWSOYCElD +EOcLKvbdqwQMDJYq +DoCkKvbdNHColpUk +EPCkKvbdCEPaVimG +EOcKjvbdjKFhJlxS +EOcLKvbdxUleRYkn +DnbkKvbdrNZjZMHi +DoDKjvbdmuUzLKSG +EObjjvbdfIKurOQg +EPDKjvbdQlwbZNtz +DncKjvbdhkeDnUby +EObjjvbdwuMdqZMO +DncKjvbdliDtQtrB +EPCjjvbdNPwqWNgT +DncKjvbdjAPgApGj +EObkKvbdMpYRVmfs +DnbkKvbdGKeTChNV +DoDLKvbdHbMZdzAD +EObjjvbdQlwayOUz +EPDKjvbdVqnYCFLc +DoCkKvbdmpZyVjyC +EObkKvbdUslsfLuj +DoDLKvbdlhdURVSB +EOcLKvbdmSZVZrci +DoCjjvbdYzberJuy +EPDLKvbdhzVGLpnG +EPCjjvbdsPvOicVf +EObkKvbdeOeTLUUS +DncLKvbdmfdxMnHZ +EPDKjvbdHffzYwxH +EPDLKvbdrylPsAgn +EOcKjvbdwWlBWAvV +EPDKjvbdVAbQsQqy +DnbkKvbdsZlPsBIO +DncLKvbdEzspdkbi +DncLKvbdhyuGMROG +DoCkKvbdFaOpxizm +DoCkKvbdZsiIxcrn +DoCkKvbdijGHjMwr +DnbkKvbdcyxpYZQb +DnbjjvbdEzspdkbi +DncLKvbdNQYRVnGs +EObkKvbdkClKpgVH +EOcLKvbdkClKqHVH +EOcKjvbdhanbdvqR +EPCkKvbdmfdwmNfy +EObkKvbdYTMAmUPY +DoCkKvbdIGgZxxXg +EOcKjvbdnHEwlnHZ +DncLKvbdCDpAuilf +EPCjjvbdmbKXXoOV +EObkKvbdapGfdLzd +EPCkKvbdRjyGVHLT +DoCkKvbddoFTLTtS +EPCjjvbdGLFTCglu +DoCjjvbdiLeENtcZ +DoCkKvbdKCicQjCx +EPCkKvbduoTzqLPU +EPCjjvbduVmwiqTA +EPCjjvbdWIXuxGxz +EPCjjvbdpxngfqDx +EOcKjvbdeOdrkTsr +DoDLKvbdNrsufduQ +EOcKjvbdIHHZyXwg +DoCjjvbdpfEEsvBI +EOcKjvbdhgKDYvKV +DnbjjvbdmbJvxOmu +EPDKjvbdGdKujCKK +DoDLKvbdfkGzcGAE +EPCkKvbdZoNiEeZj +EPDLKvbdaMjbTUlg +EPCkKvbdSPsgJfEX +EPDKjvbdDxYLstUM +EPCjjvbdKVtfDeGi +EOcLKvbdpeceTvAh +EObjjvbdHffzYwxH +DnbjjvbdffMZnHHA +EOcLKvbdsQVnibvG +EOcKjvbdZirgpGbG +EObjjvbdJSxaTMxM +EOcLKvbdbrcLUEKB +EPCjjvbdGZUuAcwb +DnbkKvbdpssgRrLU +DnbkKvbdKVteceHJ +EPDKjvbdmajXYOmu +EPDKjvbdNwoVzdOU +DnbjjvbdrpVnicWG +DoDKjvbdjhGlFfNk +EObjjvbdEXwlTtTl +DoDLKvbdkCkkQftg +DncKjvbdDxYLtUTl +DncKjvbdNQYQunGs +DoDLKvbdZQleImFR +DoDKjvbduVmxKRTA +DoDLKvbdsrqsZZdc +DoDLKvbdZLqctNlN +EPDLKvbdNsUVfeVQ +DncLKvbdhuZeXRuC +EPCkKvbdiCObdwRR +DoDKjvbdIwsbIMQp +EObjjvbdtcCtvvPP +EOcLKvbdpyOhHRDx +EObjjvbdmgEwmOHZ +DoCkKvbdelevgNJk +DoCjjvbduLwwBTaX +DoCkKvbdXrlBNTnx +EPDLKvbduCcUvuoP +EPDKjvbdURRPVUgm +EObkKvbdBsBCsfXS +DoDLKvbdZjSgogCG +EObkKvbdhgKDZViu +EPCkKvbdEYXkstUM +DncLKvbdrMzJyLgi +DnbjjvbdaSFcIUFk +EPDLKvbdnBjWxOnV +EPDLKvbdssRryZeD +EOcKjvbderAvzkbo +DoCjjvbdZirhQHCG +DnbkKvbdBraCtFvr +EOcLKvbdxZgfFxFS +DoDKjvbdJuuFdFGi +EPDKjvbdUQqPUtgm +EPDLKvbdNHCpMpUk +EPDKjvbdnCKXYOnV +DoCkKvbddZyQXyQb +DnbjjvbdpxoHgREY +EPCkKvbdfNFwHNJk +DncLKvbdVBCQsQqy +EPCkKvbdUxhTzLOn +EObjjvbdSQTgJfEX +DoCkKvbdrWpLbiZR +DoDLKvbdtcDUwWOo +DoCkKvbdwzHfGXeS +EPDLKvbdrzMPraHn +EPCkKvbdDoCjjvcE +DoDLKvbdbhlijewY +EObkKvbdUxgsyjoO +DoDLKvbdbUafxKsh +DoCjjvbdULuoBWOi +EPCkKvbdVBBqSqRy +DoCjjvbdhkeENtcZ +EPCjjvbdqYnggRDx +DncLKvbdjhHMFfOL +EOcKjvbdZxcinDMS +DoDLKvbdvBDySndh +DncKjvbdirziTKiz +DncKjvbdJXsaglRQ +DncKjvbdhfjDYvJu +DncLKvbdjuvnDbYX +EOcKjvbdKaLHMaxR +DoCjjvbdiGjDZWKV +DnbjjvbdEObjkWbd +DnbkKvbdJmADygVB +EPDKjvbdJvVFdEfi +EPDLKvbdnGeXmOGy +DoCjjvbdpssgSSKt +EPDKjvbdwtldqYlO +EPDKjvbdmfeXmNgZ +DoCjjvbdqvokbiZR +DoDLKvbdqUUHSRjt +EObkKvbdmbKXYOnV +EOcKjvbdaSGChTfL +EPCkKvbdWWiYWDdg +DoCjjvbduoTzqKnt +DnbjjvbdHDkVjBjK +EOcKjvbdbVBfwjtI +EOcKjvbdjvXOEBxX +DncKjvbdZLrETnMN +EObkKvbdfNGXHMjL +EPCkKvbdkDLkRHUg +EObjjvbdZjTIQGbG +DoDKjvbdZsiIyDsO +DnbkKvbdbrbjscjB +EPCjjvbdmbJwYPOV +DoCkKvbdKDJcQicY +DoDLKvbdZxcinCkr +DoDKjvbduoTzqLPU +EOcKjvbddndsKstS +DnbjjvbdNQXqWNfs +EOcKjvbdIidAKQGd +DoDLKvbdTkvOaVni +DoCjjvbdsPvPJcVf +DoDKjvbdVqnXbElD +EOcKjvbdIHGyyXxH +DnbkKvbdUxgszLOn +EPDLKvbdwuMdpxkn +DnbkKvbdqrVLNkBN +DncKjvbdijFgjMwr +EPCkKvbdSQUGjFcw +EObjjvbdRWmdCkgc +DnbkKvbdVTltFkvK +EOcLKvbdJbjCqKDY +EObkKvbdfMfXGmKL +EObjjvbdzRPNJKXA +EPCjjvbdBsAbtGWr +DoDKjvbdJXsahLqQ +DnbkKvbdlBNOmALA +DoDLKvbdlrYtzTDi +EPDLKvbdZtJIxdTO +DncKjvbdmbJvxPOV +EPDLKvbdaMkBsUmH +EPCkKvbdNsUVgFUp +DoCjjvbdWfYytAPT +EObjjvbdNHCpMpVL +EPCjjvbdMgComPtk +EOcLKvbdeqaWzlDP +DoCkKvbdFVxopNKF +EOcKjvbdYkrDsmlN +DncKjvbdWWiYWEFH +DoDKjvbdSLYfUfkT +DnbjjvbdhkeEOVCy +DoDKjvbdJXsagkpp +DoDLKvbdZoOIdeZj +DncLKvbdLiCMRYAS +DncKjvbdyOTHwsJD +DncKjvbdvmWANDeN +DoDLKvbdtTSTYydc +DoCkKvbddneSjtTr +EObkKvbdkDMKpftg +DnbjjvbdbhljKewY +EPCkKvbdIsZBSlwl +EPCjjvbdlqxuZsDi +DnbjjvbdNrtWGeVQ +EOcLKvbdvBEZSndh +EOcKjvbdrJAJdmOe +DoCjjvbdyOTHxTIc +DoCjjvbdmfdwlnGy +EOcLKvbdkDMKpgVH +DoCkKvbdRECaQQdS +DncKjvbdaMjartlg +EPCjjvbdVviXuceH +DnbkKvbdNsUVgFVQ +DoDKjvbdFkEsDIMu +EOcKjvbddZyPwyQb +DoDKjvbdqmZixlIJ +DoDKjvbdrEEhomvB +EOcLKvbdlZSqsZHU +EPCkKvbdehKuqmqH +DoDLKvbdFxtuBDwb +EPCjjvbdKjaHvAJy +DncLKvbdBcpAujMf +DoCjjvbdNQYRWOHT +DoCjjvbdHakzEzAD +EPCkKvbdJTYaSlwl +DoCjjvbdzitpQETU +DoDKjvbdvBEZSoFI +DncLKvbdnBjXXoOV +DoDLKvbdiZuGMROG +DoDKjvbdKVtecdfi +DnbjjvbddjJqvUzn +EPCkKvbdaMjbStlg +EOcKjvbdSZjHsDWA +DnbkKvbdUaCRSqSZ +DoDLKvbdxZgefXeS +DncKjvbdjhGkfFnL +DncKjvbdIjEAJogE +EPCkKvbdNGcPlpVL +DncKjvbdUMWPAvOi +DnbkKvbdatafxKsh +EObkKvbdjcMLQgUg +DoDKjvbddeOqavcK +EOcLKvbdoznELXoA +EPDLKvbdeOdrjtUS +DnbkKvbdjKFhJmXr +EPCkKvbdpxoHfpdY +DoCjjvbdZLrDsnMN +EPCkKvbdwyhFexFS +EOcKjvbdkClKpftg +DoDKjvbdxnTIYSiD +DncKjvbdxnShYSiD +DoCkKvbdFxtuBDwb +EObjjvbdYkrEUNkm +DnbjjvbdNQYQvNfs +EPCkKvbdhlFDnUby +EOcLKvbdiCObdwRR +DoCjjvbdVwJXvEFH +DnbkKvbdBvzchePv +EObkKvbdZHWdAPSi +DncKjvbdHgGzYxXg +DoCkKvbdMJCMQxAS +EPCkKvbdZLqdTmkm +DoDLKvbdnCJwYPNu +EPCjjvbdOSsvGdtp +DncKjvbdlYrqsZGt +EOcLKvbdJYUBhLqQ +DoCjjvbdZisHpGaf +DnbjjvbdVgxWXfxz +EPDKjvbdkWXNdBxX +DoCkKvbdlZTSSyHU +DncKjvbdjggLeenL +DnbjjvbdKNAEZfuB +DoCjjvbdLAkHMaxR +EOcLKvbdZRNFJNFR +DoDLKvbdjAQGaPfj +EObjjvbdjggMGFmk +DoDLKvbdyfyMAMeX +DncLKvbdjbkkRHVH +EOcLKvbdOTTugFVQ +EOcKjvbdWHxWXfxz +EPCkKvbdvwMBWBVu +EPCjjvbdnHEwlnHZ +DoDKjvbdHEKuiaij +DoCjjvbdVwIwvEEg +EPDLKvbdehKvRnRH +DncLKvbdnVUyjirG +EObjjvbdfMevgNJk +EPDKjvbdjbkjqHVH +DncLKvbdrJAKEloF +DoCkKvbdGckWJaij +DnbjjvbdTvMQJtAq +EPCkKvbdhkddNtcZ +DnbkKvbdrzMQTBIO +DncKjvbdsZlQTAgn +EPDLKvbdOFDtJIjd +EOcLKvbdnBivwoOV +DncKjvbdJXtBhLpp +EPCkKvbdJTYaSmXl +EOcLKvbdLGFgbBQu +DncKjvbdnHEwlmgZ +DoCjjvbdACrYJzJQ +EPCkKvbdiZuGLqNf +DnbjjvbdnGdxMmfy +DnbkKvbdRkZGUgKs +DoDLKvbdZisHofaf +EPDLKvbdJKEAJpGd +DnbkKvbdBsBDUFwS +EObjjvbdtcDVWuno +EOcKjvbdBsAbsfWr +EPDKjvbdrWpMChyR +DoDLKvbdVTltFkuj +EPDKjvbdGFjSOJUR +EOcKjvbdBsAcUGXS +EPCkKvbdcJNKKfWx +EPDLKvbdnQZyWKxb +EPCkKvbdqTtGrSKt +EObkKvbdjJfIKNXr +EOcLKvbdVqmxBdkc +EOcKjvbdFWYopMjF +DnbjjvbdqdFJPnWB +DoCjjvbdehKvRnRH +EPDKjvbdkyTRsZGt +EObjjvbdozmckYPA +DnbjjvbdbrcLUDjB +DoDLKvbdrMyixkhJ +DoDLKvbdrpWOjCvG +DoDKjvbdLFehCAqV +DncKjvbdrWpMCiYq +EOcKjvbdVTmUFkvK +EObkKvbdhficZVjV +EPCkKvbdIsZAsNXl +DoCjjvbdmfdxNOHZ +EPDKjvbdznopdblY +DnbjjvbdLiCMRYAS +DncLKvbdePEsKstS +DoDLKvbdUMVoBVni +DncKjvbdWRnXaeLc +EObjjvbdrDdiPmvB +DoDKjvbdDoDKkXDE +DncKjvbdOAIrtJrA +EPCkKvbdwzIGGXdr +EOcLKvbdUQqPUtgm +EPDLKvbdhlFEOUby +DncKjvbdZirhPfbG +EOcLKvbdKVuGEEgJ +DoDKjvbddePSBvbj +EPDLKvbdfHjuqmqH +EPDKjvbdZjSgpHBf +DncLKvbdunszpjoU +EPCkKvbdqTtHRrKt +EObjjvbdfNGXGljL +EObjjvbdUGznMWue +DnbkKvbdsPuoJbvG +EObjjvbdnQZxujxb +EPDLKvbdczZPwyQb +DoCkKvbdWXIwvDdg +EOcKjvbdQvmdDLhD +DncLKvbdCIkBjiFj +EObjjvbdjJegjNXr +DncLKvbdcIlikFvx +EPDLKvbdRkZFtfjs +DoCjjvbdczYoxZRC +EOcLKvbdatagXjsh +DncLKvbdjcLjqGuH +DoCjjvbdMSWlyuQz +DoCkKvbdjuvnDbYX +DnbjjvbdiMEdOUcZ +EPCjjvbdcTDKtEKB +DnbjjvbdwzHeexEr +EPDLKvbdemGWgNJk +EObjjvbdakLfOnDA +EPDLKvbdTfznLvvF +DoDKjvbdaNLBsUmH +EOcLKvbdhzVFkqNf +DoDKjvbdZRNFIldq +DoDKjvbdlrZVZsEJ +EObkKvbdbUagXjtI +DoDLKvbdUyHsykPO +EObjjvbdkVwNdCYX +EPDLKvbdUVkpJtBR +EPDKjvbdrMzJxkgi +EOcKjvbdSLYfUgLT +DoCjjvbdMRwNZtpz +EPDLKvbdIxTaglRQ +EPDLKvbdJqZdnenF +DoDLKvbdZMRdTmkm +DnbkKvbdANHxrvyx +EPCjjvbdFkErbhNV +EOcLKvbdWSNxCEkc +EPCjjvbdiCPCdwQq +DnbkKvbdbAvEeoow +EOcKjvbdeFOrBvcK +DnbkKvbdaRecHtGL +DnbkKvbdZshhxcrn +EOcKjvbdqTtHRrKt +EObjjvbdauBgXjtI +EOcKjvbdQdCaQRDr +DoCjjvbdFVxopMjF +EPDLKvbdIGgZyXwg +DoDLKvbdRpTfjFdX +DnbkKvbdSQUGifEX +DnbjjvbdpxoIHREY +DoDLKvbdqiAJeMne +EOcLKvbdCIkBkJFj +DncLKvbdFfKSNhsq +DoDKjvbdwWkaVaVu +EPDLKvbdNeETiJKd +DnbjjvbdhbOcEvpq +DoCkKvbdrbGMlHLZ +DnbjjvbdLAjgMawq +DncLKvbdlqyUzSdJ +DncLKvbdYkqdTnLm +EOcKjvbdYkrDsnMN +EOcLKvbdnCKXXnnV +DoCjjvbdDncLLWbd +DoDKjvbdYpmFJMdq +EPDLKvbdFpATXHFy +DoDKjvbdJvUfEEfi +EPDLKvbdmJEURVSB +DncLKvbdtbcVWuno +EOcLKvbdbUagYKtI +EObkKvbdcJMjKevx +DnbjjvbdKVuGEFGi +DoCkKvbdZMRctNkm +EOcLKvbdYpmEiMdq +DoDKjvbdYpmEhmEq +DncKjvbdzjVQQDrt +EPCjjvbdzHYlAMdw +EPDLKvbdYkqcsnMN +EObkKvbdiiehJmYS +DnbjjvbdDwwktUUM +EObkKvbdrounjCuf +DnbjjvbdGGKRmiUR +EOcLKvbdwzIGFxEr +EPDKjvbdOEdUJJLE +DoCkKvbdfNFvgMjL +DoDLKvbdOEdThhjd +DnbkKvbdyTOImSCH +EOcLKvbdzitpQESt +DoDKjvbduDCuWvPP +DoCjjvbdTppnuUhN +DoCkKvbdIBlZdzAD +DoCjjvbdZQmFJMeR +DnbkKvbdJXsaglQp +DoCkKvbdSZigrcWA +EObjjvbdZsiIyETO +EPDKjvbdZLqctOLm +DncKjvbdwyhGFxFS +DncLKvbdqwPkcIyR +EPDKjvbdRkYfUgLT +DoCkKvbdxxIjBpZk +DncLKvbdqlyjYlIJ +EPCjjvbdRaceLiYk +EPDKjvbdjlbLyeHP +EPDKjvbdrbFmLfkZ +EPCkKvbdvBEYsPFI +DncKjvbdSBdElJYk +EPDKjvbdpxoIHREY +EPCkKvbdjhHMFfNk +EPCkKvbdANIYsXZx +EObjjvbdnGdxNOHZ +EObjjvbdKQzFPGOF +DoCjjvbdtunYKRTA +DnbjjvbdLFfHbBRV +EOcKjvbdpedEsuaI +DnbjjvbdYkqcsmkm +EPCkKvbdbrcLUEKB +DnbkKvbdNQYQunGs +DoDLKvbdJcJbqKCx +EPDLKvbdIxTbHlRQ +DnbkKvbdvwMAvBWV +EOcKjvbdfHkVqnQg +EOcLKvbdbKkfPNcA +EPDLKvbdVAbQrpqy +DncLKvbdWRnXaeLc +EPCkKvbdFpATXGey +DoDLKvbdyfxlANFX +DoCkKvbdFVyQQMjF +EOcLKvbdxnShXrhc +DoCjjvbdmaivwoOV +DnbkKvbdbsDLTdJa +DoCkKvbdUtMtGMVj +DnbjjvbdNVSqkNAX +EPDLKvbdWfYytAOs +EPCkKvbdZyEJnDLr +EObkKvbdyXhjCQZk +EObkKvbddoFSkUTr +EOcKjvbdeATqMxKG +DnbkKvbdnPyyWKyC +DncKjvbdkySrTZHU +DnbjjvbdmfdxNNfy +EPCkKvbdHlBznXQk +EPDKjvbdZisIPgCG +DncLKvbdrEEhonVa +DoDLKvbdrykosBHn +EObkKvbdqvpLbiZR +DoCjjvbdhkeDnUcZ +DoCkKvbdVwIwudEg +DncLKvbdyXiJaozL +DoCkKvbdyzeOSIIh +EPCjjvbdkVwNcbYX +DncLKvbdTkuoAuoJ +EPCjjvbdijFgimYS +DncLKvbdliEURUrB +DoDKjvbdURQoUuIN +DoDKjvbdrMzJxkhJ +EPCkKvbdqYngfqEY +EPDLKvbddwzUTrFz +DoCkKvbdyYIjBpZk +EPCjjvbdssSSxzEc +EObkKvbdFejSNiUR +EPCkKvbdrEFJPmua +DnbkKvbdiifIJmXr +EPDLKvbdZLrEUOLm +EObjjvbdGFiqnItR +DoCkKvbdjuwNcaww +DncKjvbdmpZxukYb +DoDLKvbdqdFJQNua +EPDKjvbdNQYRWOGs +DoCjjvbdZeYGzhIb +EObjjvbdZjSgpHCG +EObjjvbdhfjDYvKV +EPCkKvbdJpzFOeme +DnbkKvbdlhcsptrB +DncLKvbdFeiqnJTq +EObjjvbdZxcinCkr +EPDLKvbdFVyQPmKF +EObkKvbdelfWfljL +EOcKjvbdJpydnenF +DnbkKvbdbVCGwkUI +EObkKvbdemFwGmJk +DoCkKvbdBsAbsfWr +EPDLKvbdJYTbHkqQ +DncKjvbdyNrgxTIc +DoDKjvbdGQASvfey +EOcLKvbdRNYCZOUz +EOcKjvbdyzeORgiI +EOcLKvbdZQmEhleR +EPCjjvbdmttyjjRf +DnbjjvbdLBLGmBwq +EOcLKvbdKVuFdFGi +EPCkKvbdxmsHwsJD +DoDLKvbdyOTIXriD +EPDLKvbdZsiJYcsO +EPCjjvbdjvXOEBxX +DoCkKvbdlZSqsZGt +DoDKjvbdADRxKZiQ +EOcKjvbdzoQREcMY +EObkKvbdGGKRmhsq +EObjjvbdJutfDdgJ +DoDLKvbdUsltFkvK +EObkKvbdHDkWKBjK +DncKjvbdLqwMzVQz +EObjjvbdaRecITfL +DoDKjvbdakMGPNcA +DnbjjvbdwXMBWAvV +EOcKjvbdQwOEDLhD +EOcKjvbdAMgxrwZx +DnbjjvbdqqtkNkAm +DoDLKvbdbhmKKewY +DoCjjvbdQmYBxnUz +DnbkKvbdvPTzqKnt +EPCkKvbdJqZePGOF +DoDLKvbdTfznMXVe +DoCkKvbdFyVUaDwb +DncLKvbdFxuUaDwb +EObkKvbdhlEcnUby +DnbjjvbdCJLCKhfK +DoCkKvbdPyNAGrrK +EOcKjvbdVgxVxGxz +EObkKvbdSxKkmzjx +EOcLKvbdemFwHMjL +EObjjvbdrEEiPnVa +DoCkKvbdDjIJvXjA +EPCjjvbdYTMAmToY +DoCjjvbdbLMFnmcA +DoCkKvbdrounjCuf +EPDKjvbdrJAJeNOe +DncLKvbdJbicQjDY +EPCjjvbdmpZxvLZC +DncLKvbdVrNxCElD +DnbkKvbdDoDLKwCd +DoDKjvbdsZkpSaIO +EPCjjvbdNQYRVnGs +DoCkKvbdVrOXbFMD +DoCjjvbdlYrqryHU +DoDLKvbdVTltGMVj +DncLKvbdwzHfGXeS +EPCkKvbdmajXYOnV +EOcLKvbdZLqdTmlN +DoDLKvbdqdFJQOWB +EObkKvbdVgwvXgYz +EPDKjvbdkMakzFHP +DoDKjvbdakLfPNcA +EObjjvbdyYJJbQZk +DoDLKvbdDigivXjA +DoDLKvbdHELWJajK +EObjjvbdZGvdAPTJ +EOcKjvbdUGzmkvue +DncLKvbdSZigsCvA +DoDLKvbddBsMrATm +EObkKvbdmSZUzSdJ +DncKjvbdjAPfaQGj +DoDKjvbdlBMoNALA +DnbkKvbdJTZArlxM +EObjjvbdHgHZyXwg +EPDLKvbdhzUekpnG +EPDKjvbdEOcKjvbd +DoCkKvbdjcLkRHUg +EObjjvbdBiLBkIej +DnbjjvbdZMSEUNkm +DoCkKvbdzRPNJJwA +EPCjjvbdGdKuiajK +EPDLKvbdrEFIpOVa +EPCkKvbdKfGHbApu +EPDKjvbdUtMsfMVj +DoDLKvbdbVCHYKsh +EPDLKvbdEztRFMCi +EOcLKvbdJmADzGta +DnbjjvbdtSrSxydc +DoCjjvbdACrYKZiQ +EPDKjvbdsrqsYzEc +DoCjjvbduLxXAtAw +DoCjjvbdEztQdkbi +DoDLKvbdkClKpgVH +DoDLKvbdSCDeMJYk +DoDLKvbdpxoIGqDx +DoCkKvbdDigjVxKA +EPDKjvbdGGKSOJUR +EOcLKvbdiLeDnVDZ +DnbjjvbdyOSgxShc +EPDLKvbdNsUWHEuQ +EOcLKvbdYpmFImEq +DoDKjvbdZLrDtOLm +DncKjvbdJvVGEFHJ +EOcKjvbdZirgogCG +EPCkKvbdKCjCqJbx +EObjjvbdgKfzcGAE +DncKjvbdZjTIQHBf +DoDKjvbdRDcBQQcr +DnbkKvbdZQmEiNFR +EObkKvbdSiZjRABM +EObkKvbdURROttgm +EObjjvbdlZSrSxft +DoCjjvbdNxPVzdOU +EPCjjvbdqAheAWhE +EPCkKvbdwXLaWBWV +DoCkKvbdKDKDQjCx +EOcKjvbdehLVqnQg +DoCkKvbdZxdJmcMS +DncLKvbdDjHjVxKA +EObkKvbdXrlAmToY +EOcLKvbdwtleRYlO +EPCjjvbdtlYWaUBX +EPCkKvbdiUzFXSVC +DoCjjvbdcJNJkFwY +EObkKvbdaRebhUGL +EOcKjvbdNHDQMotk +DoDLKvbdyTNhlqbH +EOcLKvbdKfGIBaRV +EObkKvbdKaLHMawq +DoCkKvbdnCKWwoNu +EPDLKvbdHffzYwxH +DncKjvbdnGdxMmgZ +EPCjjvbdNPwpvNgT +DoDLKvbdYkrEUOMN +DoDKjvbdTqROuUgm +DoDKjvbdvBDyTPEh +DnbkKvbdJKEAKQHE +EObjjvbdiBoCeWqR +DnbkKvbdmRyUyrci +DnbkKvbdJuuGEFGi +EOcLKvbdFyVVBEXb +EObkKvbdwyhGFwdr +EObkKvbdCTBDTevr +DoDKjvbdjbkkQftg +EOcKjvbdVAbQrqRy +EObjjvbdLAkHMawq +EObjjvbdEztQeLcJ +EPCjjvbdcIlikFvx +DncKjvbdZyEJmcLr +EObjjvbdqceJPmua +DncKjvbdZnmiEdyj +EOcLKvbdiGicYujV +DoCkKvbdFeirNhtR +DoCkKvbdDjHjVxKA +DnbkKvbdqFdEsvBI +EOcKjvbdcImKKevx +EPDLKvbdQmXbZOUz +DncKjvbdqcdhpNvB +EObkKvbdsPvOjCvG +DoDKjvbdFVyQPmKF +EOcKjvbdqYnhGpcx +EPDKjvbdKfGIBaRV +EPCkKvbdnGeXmNgZ +DncKjvbdKVtedEgJ +EObjjvbdCTAbsewS +DnbjjvbdeEoRavcK +EPCkKvbdNsUVfeVQ +EPDLKvbdGdLWKCKK +DnbjjvbdKfFhCBRV +DoCjjvbdZLrDtOLm +EPDLKvbdhtydvrVC +DoDLKvbdZjTIPfaf +DoCjjvbdbrcLTdKB +DncKjvbdzoQRFClY +DnbjjvbdSKyFuHKs +EOcKjvbdZQldiMeR +DncLKvbdkySrTYft +DnbkKvbdSLZGUgKs +EPCkKvbduCbuWvOo +DoDKjvbdsCFlkgLZ +DoCjjvbdrDdiPmvB +EPDLKvbdySnJNRbH +EPDLKvbdDoDKkXDE +EPCjjvbdijGHjMwr +EOcLKvbdeJjSWUzn +EPCkKvbdKWVFdEgJ +DoDLKvbdVYhTykPO +EObkKvbdeJiqutzn +DoCjjvbdRjyFuGkT +DoDKjvbdHDkWJajK +EPCkKvbdbKlFnnDA +EPDKjvbdQwOEDMHc +DoDLKvbdZshiZESn +EObjjvbdkyTSSyGt +DoCkKvbdxUmEpyLn +EObjjvbdMuSqkNAX +DncLKvbdbiNJkGWx +DoCjjvbdWIYVwfxz +DncLKvbdkVwNcaww +DoDLKvbdOFEThhjd +DoDLKvbddndrkUTr +DnbkKvbdyzeNrHiI +EPCjjvbdZRNEhldq +DncKjvbdhlEdNuDZ +DoCjjvbdqquKmkAm +DoDKjvbdFyVVBDxC +EPCkKvbdJuteceHJ +DnbkKvbdiBoDEvqR +DoDLKvbdLqvlzUpz +EPCjjvbdrRuKnLBN +DnbkKvbdZjShQHCG +DnbkKvbdcScLTcjB +EOcKjvbdyNrgxSiD +EOcKjvbdZirhPfbG +DoDLKvbdkIGkefOL +EPDLKvbdkCkkRGtg +EPDKjvbdbUafxLTh +EObkKvbdhfjDYvKV +DoCjjvbdpecdsvAh +EOcKjvbdpfDeUWAh +DnbkKvbdPxmAGsRj +DnbjjvbdZMSEUNlN +EOcLKvbdqFdFTvAh +DoCjjvbdWXJXvDeH +DoCjjvbdqUTfqrLU +EPCjjvbdvOszqLPU +EObkKvbdmtuZkJqf +EOcLKvbdjgfkefNk +DoCjjvbdhaoCeWqR +EObjjvbdKaLHMbXq +DoCjjvbdSLZFtfjs +DoCjjvbdFfKSOItR +DnbkKvbdqUUHSSKt +EPCkKvbdHEKujBjK +EObkKvbdIsZBSmXl +EOcKjvbdRDcApQcr +DoDKjvbduDDVWvPP +EOcKjvbdLBLGlaxR +DoDLKvbdIxTbHlQp +EPDLKvbdrRtkOKaN +DoCjjvbdRjyFtfkT +EPDKjvbdGQASwHGZ +EPDKjvbdMgDPlouL +EObkKvbdJXtCILqQ +EObkKvbdrEFJQNvB +DoCkKvbdeOeTKtUS +EObkKvbdSQTgJfDw +EPCjjvbdSQUGiedX +DoCjjvbdqUUGrRjt +EPDKjvbdTqRPVUgm +EPCkKvbdIMBznWqL +EObkKvbdhancEwRR +EOcKjvbdrMzJxkgi +EPCjjvbdhbPDEvqR +EPDKjvbdZHXEAOsJ +EPDLKvbdxnShXriD +DoCkKvbdLLAgvAKZ +DoCkKvbdhficYvJu +EObjjvbdZRMeIleR +DncLKvbdYfwEAOri +DoDLKvbdDwxMTtUM +DoCkKvbdWRmwbFLc +DnbkKvbdNQYRVnHT +DnbjjvbdjmCMZeHP +EPDKjvbdaNKbTUlg +EPCkKvbdidkHVPAO +DoCjjvbdHfgZxwxH +EObjjvbdxwhibPyk +EPDKjvbdFjeTDHmV +DoDKjvbdiCOcFWqR +DoCkKvbdJmADyfuB +EOcLKvbdhficYujV +DncLKvbdYzbfSJuy +DoCjjvbdbUagXjtI +DoDKjvbdjKFhKNYS +EOcLKvbdCIkCLJGK +DoDKjvbdZshiZESn +EPCkKvbdSQTfjFcw +EObkKvbdiMEcnUcZ +EPDLKvbdyOTHxSiD +EPCjjvbdFjeTDHmV +DnbjjvbdJuuGEFGi +EPDKjvbdhkeDnVCy +EPCkKvbdVAaqSprZ +DncLKvbdVUNTelVj +DoCkKvbdfILVrNpg +DncKjvbdNHDQNPuL +EOcLKvbdLZQirztf +EObjjvbdGckWKCJj +EObkKvbdIHGyyXwg +DncLKvbdiUydwSVC +DoDLKvbdpecdtWBI +EOcLKvbdLGFgaaRV +EOcLKvbdezuxeJUX +EObkKvbdgGLymgHA +DnbjjvbdEvZQQNJe +DncKjvbdJcJbpjDY +DoDKjvbdIxTahLqQ +DncKjvbdBcpAvJlf +EObjjvbdnPyyVkYb +EObjjvbdfNGWfljL +DnbjjvbdieLHVPAO +EOcKjvbdRNYCYmtz +EPDKjvbdiHJcYuiu +EObkKvbdMowqVnHT +DoCjjvbdiUydvrUb +EObjjvbdZMRcsnLm +DnbkKvbdaSFcIUFk +DnbjjvbdZyEKNcLr +DnbkKvbdZnnJFEzK +DncLKvbdJSyBSlxM +DoCkKvbdXsMAmUOx +EPCjjvbddneSkTtS +EOcLKvbdVwIxWEEg +EPCjjvbdxsOJMrBg +DncKjvbdkIHMGGOL +DncLKvbdGFjRmhsq +DnbkKvbdySmiNRag +EPDKjvbdpyPHgREY +DnbjjvbdGZUuAcxC +DnbjjvbdiHKDYvJu +DoCjjvbdtlXwBUBX +EObkKvbdTkvPAvPJ +EOcKjvbdSxLLmzkY +DncKjvbdhgJcZVjV +EOcLKvbdZirgogBf +EOcKjvbdTukpKUBR +EPDLKvbdQlwaxmtz +DoCkKvbdNxOuzdNt +EPDLKvbduCbuXWPP +EPCkKvbdmbJvwoNu +EObkKvbdKDKCqJbx +EPCjjvbdyNsIXrhc +EPCkKvbdSCEEkiYk +EObkKvbdOFDshiLE +DoDKjvbdZnmiFEzK +EObkKvbdJbjDRKDY +EObkKvbdYfvdAOri +DncKjvbdkDLjpfuH +DoCkKvbdsrqsZZdc +DoDKjvbdLBLHNBwq +DncLKvbdDjHjWYKA +DoDKjvbdZQleIldq +DoDKjvbdatbGxKtI +EObjjvbdUWMQKUAq +EOcLKvbdlhdUQtrB +EPCjjvbdAMhZTWyx +DoCjjvbdjhGlGFmk +DoDLKvbdHgGzZXxH +EOcKjvbdrykoraIO +DoDKjvbdjJehJlwr +EObkKvbdrEEhonWB +EPCjjvbdiUyeWrUb +DnbkKvbdNQYRVmgT +EPCjjvbdVUNUFkuj +DnbjjvbdEYYMTtUM +DoDKjvbdYpldhldq +EPCjjvbdtlYWaTaX +DoCjjvbdozmdLXoA +DnbjjvbdZnnJFFZj +EObjjvbdZshiZDrn +EPDLKvbdZjShPfaf +DoCkKvbdrpVnibvG +DoCkKvbdQwNcblHc +EObkKvbdxZgefXdr +DoDKjvbdNddUIhkE +DncKjvbdcImJkFwY +DoDKjvbdZirhQGaf +DoDKjvbdqwPkcJZR +EPDLKvbdkHgLfFnL +DncKjvbdlqxuZrci +DncKjvbdRadFLiYk +EPDKjvbdIHGyxxXg +EObkKvbdmpZyVjyC +EPCkKvbdUaBqSpqy +EOcKjvbdqZOgfqDx +EObkKvbdkNBlZeGo +EObjjvbdOAIrsjSA +EPDLKvbdEvZPpNKF +DnbjjvbdczYoxZRC +DoDKjvbdvAdZTPEh +DncKjvbdqUTfqrKt +EPCkKvbdZGwEAPTJ +EPDLKvbdZMSEUNkm +EPCjjvbdYkqctNlN +DnbkKvbdeEnqawDK +DoCjjvbdKVuGEFHJ +EOcKjvbdzitopDsU +DnbjjvbdsBfNLgLZ +DnbjjvbdcImJkFvx +EPCkKvbdMgCpNQUk +EOcLKvbdZQmEhleR +EPDLKvbdtTRrxzEc +DncLKvbdKVuFceHJ +EPCkKvbdyfxlAMdw +DnbkKvbdsZkosBHn +EPDLKvbdwWlAvBVu +DoDLKvbdlqxuZrdJ +EPDLKvbdMRwMzUpz +EObjjvbdFkFTCgmV +EObkKvbdHEKvJbKK +DncLKvbdkNCMZdfo +DoCjjvbddoFSkTtS +EPCkKvbdRpTfjFdX +DoDKjvbdIGgZyYXg +EPCkKvbdBiLCLIfK +DoCjjvbdKQydnfNe +EPCjjvbdHgGzZYYH +DnbjjvbdYNqAYUvU +DncKjvbdGckVjBjK +DoCjjvbdjhHMFemk +DnbkKvbdkIGkeenL +DncLKvbdmaivwnmu +EPDLKvbdmuVZkJqf +EPDKjvbdNddUIhjd +DoCkKvbdRDbaQRES +DncLKvbdTvLojUBR +DncLKvbdtSrSxyeD +DncKjvbdjgflGFmk +DoCkKvbdQwNdDLgc +DoCkKvbdEXwksssl +DoDKjvbdtAHRIAAr +DoDLKvbdSPsgJecw +EObkKvbdjggLfGOL +DoCjjvbdSBdFLhxk +DoCkKvbdiMEdNuDZ +DoCjjvbdhtzFWrUb +EPCjjvbdSKxetgKs +DoDLKvbddndsLTtS +DncKjvbdtcCtwVno +DoDLKvbdACrYJzJQ +EOcLKvbdyOShXrhc +EObjjvbdqquKnKaN +DoCkKvbdnCJvxOnV +EPDLKvbdFWYpQMjF +DnbjjvbdnCJvwoNu +EObkKvbdhfjCyWKV +DoDKjvbdrNZjZLhJ +DnbkKvbdyNrgwsIc +EPCkKvbdSZjITDWA +DncLKvbdqiAJeNOe +DoCkKvbdhaoDEvpq +EOcLKvbdtkwwAtAw +DncKjvbdsPvOicWG +DoCjjvbdWXJYVcdg +DoDLKvbdmIdUQuSB +DnbkKvbdauBgYKtI +EOcLKvbdJbicRKCx +DoDLKvbdsPuoJcVf +EPCkKvbdfILWRnRH +EPCkKvbdAMhYrvzY +DoCjjvbdKWUedEfi +EPCkKvbdhaoDEvqR +EObjjvbdxVMeRZMO +DncKjvbdFaOqZJzm +DncKjvbdIryArlwl +EObkKvbdRWmccLgc +EPCkKvbdsPunibvG +EOcKjvbdQccBPpcr +EPDKjvbdssRsYzFD +DncLKvbdySmiMqbH +EObkKvbdZLqdTmlN +EPDLKvbdVAaqTQqy +DncLKvbdFWZPomJe +DoDKjvbdUVkojTaR +DncKjvbdULvPBWPJ +EObjjvbdUslsfLuj +DoDKjvbdsBfMlHKy +DoCjjvbdkySrTYgU +EPDKjvbdYgXEAPTJ +EOcLKvbdrzMPsAhO +DoCkKvbdcyxpXyRC +DncLKvbdkIGkeemk +EObkKvbdVqnXbElD +EObkKvbdMuSqkNAX +DncLKvbdkNCLydfo +EOcLKvbdUVlQJsaR +EOcKjvbdczZPxYqC +EObkKvbdWIXvXfxz +DoCkKvbddndsLTtS +DnbkKvbdFfJqmiUR +DncKjvbdURROuVIN +EObkKvbdddnrCXDK +DncLKvbdZyEJmcLr +EPCkKvbdVgxVxHYz +DoDKjvbdFfKRmiTq +EPDKjvbddCTNSAUN +DoDLKvbdUxgsykOn +DoDLKvbdBhjbLIfK +DoCkKvbdFejRmiTq +EPDLKvbdmuUykJqf +DoCkKvbdVTmTfLuj +DoCjjvbdkNCLydgP +DnbjjvbdHffzYxYH +EObkKvbdpxngfpcx +EPCjjvbdKQzFOfOF +DncLKvbdOEdThiKd +EOcKjvbdJSyBTNXl +DncLKvbdyNsIXriD +EOcLKvbdJYTagkpp +DoCjjvbdkMakzEfo +DoDLKvbdZjSgpGbG +DnbjjvbdSQUHJfDw +DncKjvbdRpTgJedX +DncKjvbdrykosBIO +EObkKvbdGYttaEYC +DoCkKvbdZxcjNcMS +DoCjjvbdRadElIyL +DoDKjvbdkySqryGt +EPDKjvbdiHJbyWJu +EPCjjvbdwzHeewdr +EPDKjvbdQwNccLhD +DoCjjvbdbBVeGPow +EOcKjvbdddnrCWcK +EPCjjvbdJXtCHkqQ +EObkKvbdrbFllHLZ +DncKjvbdACqxKZhp +DoCkKvbdJXtCILpp +DncKjvbdEYYMTssl +EOcKjvbdwjvdHzzG +EPDLKvbdemGWgMik +EPCjjvbdqvokcIyR +DnbkKvbdUaCQrprZ +DoCjjvbdKCjCqKDY +EPDKjvbdYSlBMtOx +EPDLKvbdyXiKBozL +EObkKvbdZxdKNcMS +EObkKvbdCDpBVjNG +DncKjvbdmgExMmgZ +EObjjvbdHkaznWqL +EObjjvbdkNCLzEfo +EPDLKvbdyNrgwsIc +DncKjvbdnHFYNNfy +DoCkKvbdDwwktTsl +EPDLKvbdTlWOaWPJ +DoDKjvbdmIctRVRa +EPCkKvbdeEnqbWbj +EPDKjvbdTYLMNzkY +DncKjvbdkHgLfGNk +DncLKvbdnPyxvLZC +EOcLKvbdjKGHjMxS +DoCjjvbdiZtfMROG +EPDKjvbdFeiqmhsq +EPDKjvbdDoDKjvbd +EOcLKvbdKRZeOfOF +DoDKjvbdzoQQeCkx +EObjjvbdEOcLKwDE +DoCkKvbdrafNLgLZ +EObjjvbdMfbomPuL +DncKjvbdUQqPUthN +EOcLKvbddjJrWUzn +DoDLKvbdvBDySoEh +DnbjjvbdVUMselVj +DoCkKvbddndrkUUS +EObkKvbdmpZxvKxb +EPCkKvbdmbJvxPNu +EPCkKvbdmfdwlnHZ +DnbkKvbdZRMdhmFR +DnbjjvbdYSlBNToY +DncLKvbdzoQRFClY +EPCkKvbdVZITzLOn +DncKjvbdZtIiZDrn +DncKjvbdFVxopNKF +EOcKjvbdtTSSxydc +EObjjvbdUVlQKTaR +EPDLKvbdkMbLzEgP +DoDLKvbdKDJcQicY +DoDLKvbdJmAEZgVB +EOcKjvbdCWzdJFPv +DncLKvbddneTLUUS +EObjjvbdBcoaWJlf +EPDKjvbdGcjvJbJj +DoCjjvbdddoRavcK +EOcLKvbdAMhZSvyx +DnbjjvbdajlGOmcA +DoCkKvbdCIkCLJFj +DnbjjvbdMSWmZtpz +EOcKjvbdNGcQMpUk +EOcKjvbdTqROuUhN +DoCkKvbdFVxoolie +DoDKjvbdUQpnuUgm +EPDKjvbdnBiwXnmu +DnbjjvbdJuuGDdgJ +EPCjjvbdZLqcsnLm +EObkKvbdZnmheEzK +DoDKjvbdXsMAltOx +EObkKvbdiMEdOUcZ +DoDKjvbdZRNEhleR +DoDLKvbdMIbLpxAS +DoDLKvbdVwIwucdg +DoCjjvbdRbDeLiZL +DncLKvbdZMRctNlN +DoCkKvbdGcjvJbJj +DnbjjvbdSZihScWA +EPDLKvbdkDLjqHUg +DnbjjvbdZisIPfaf +EObjjvbdmpZyWLZC +EOcLKvbdrbGNLgLZ +DnbkKvbdkVvmdBww +EObjjvbddoFSjstS +EObjjvbdxwiJbPyk +EPDKjvbdTvLoitAq +DoCkKvbdZLrDsnMN +DoDKjvbdOAJTUJrA +EObkKvbdURQntuHm +EObkKvbdkIGkefOL +DncLKvbdsCFllHKy +EPCkKvbdatafxKtI +DoCjjvbdiifHjMxS +DnbkKvbdZsiIyDsO +DncKjvbdieKgUoAO +EPCjjvbdBhkCLIej +DnbjjvbdDxXktTsl +EObkKvbdKCjCqKCx +EOcLKvbdIwsahLqQ +EPDLKvbdhzUfLpnG +EObjjvbdbAvEepPw +EOcLKvbdSLZFuHKs +DnbkKvbdIidAJogE +DnbjjvbdJbjDQicY +EPDLKvbdQwODblID +EObkKvbdqZOgfqEY +EObjjvbdkWWnDbXw +DncLKvbdEvZPpMjF +EPDLKvbdKQydnfNe +EObjjvbdUWMQJtAq +EOcLKvbdqrUjmkBN +DoDLKvbdJmAEZfuB +DoCkKvbdhtydvqtb +DoCkKvbdtAHQhABS +EPDLKvbdxZhGGXdr +EPDKjvbdmSZVZrci +DnbkKvbdZjTHogCG +EObkKvbdYqMdiMeR +DoDKjvbddwzUURez +DoDLKvbdbKlFnnDA +EPCkKvbdGGKSOJTq +EObkKvbdLGFgbBRV +DoCkKvbdKyQjSzuG +DncKjvbdJcJcRJcY +EOcLKvbdnBiwYPOV +EOcLKvbdLGGHaaRV +EObjjvbddneSkTtS +DoDKjvbdiLddOUcZ +EObkKvbdsPvOjCuf +DnbkKvbdZyEKOClS +DoCjjvbdyzeORhIh +DnbkKvbdhkeDmuCy +EObkKvbdvvkaWAvV +EOcKjvbdzeZnzdzQ +DoCjjvbdVAaprqSZ +EObjjvbdjhGkefNk +DncLKvbdSKxfVHLT +EPCjjvbdZRMeImFR +DncLKvbdFeirOJTq +DncLKvbdFfJrOItR +DoDLKvbdmoyyVkYb +DncLKvbdddoRavcK +DoDLKvbdauBfxKtI +EObjjvbdSPtHJfDw +EPCjjvbdCEQBWJmG +DoCjjvbdDnbkLWcE +EPDLKvbdVUNUGMVj +DnbkKvbdnQZyVjyC +DnbkKvbdgFkymfgA +DoDKjvbdRDcBQQdS +EOcKjvbdtcCuWvOo +EObkKvbdlrYuZrdJ +DoCjjvbdZirgogBf +DoDLKvbdMfcPmPuL +EOcKjvbdDwwlTtTl +DncLKvbdwXLaWAuu +EPDKjvbdUaBqSpqy +EObkKvbdHlBznXRL +EPCkKvbdkMakzFHP +DnbkKvbdqZOgfpcx +DnbkKvbdUMWOaWPJ +DncLKvbdMfbolpVL +EObjjvbdfekynGgA +EPCkKvbdWWiXvEFH +DoCjjvbdpxnhGqDx +DoDKjvbdsQVnjDWG +EObkKvbdYNqAXtut +DncLKvbdDnbkLXCd +EObkKvbdKaLGmBwq +DoCkKvbdBvzciFPv +DoDLKvbdjKFgilwr +EPCkKvbdUaBqTQqy +DoDLKvbdVgwvYHYz +EPDKjvbdIHGyyXwg +EPDKjvbdEXxMTstM +DnbkKvbdQccBPpcr +DnbkKvbdMgCpNPuL +EPDKjvbdSPtHKFcw +DoDKjvbdkIHMGFnL +DncLKvbdnGeXmNgZ +DoDLKvbdhtyeWquC +EObjjvbdqGEFUVaI +EOcLKvbdNPwpumgT +DnbkKvbdZshiYdTO +DoDKjvbdZMSETmkm +DncLKvbdRbDdkhyL +EPCjjvbdTvMQJtBR +EObkKvbdjvXOEBww +DncLKvbdrXPkbiZR +EOcLKvbdFejSOJTq +EOcKjvbdegjvRnRH +EPDLKvbdJvVGDeHJ +EObjjvbdXrlBMtOx +DncKjvbdFejSNhsq +EPDKjvbdBiLBjiGK +EOcKjvbddiirVtzn +EPDLKvbdVBBqTRRy +DoCkKvbdeqaWzkcP +EObjjvbdqYnggREY +EPDKjvbdEARiNZwX +EObjjvbdSQTfifEX +EObjjvbdLBLHNBxR +EPCkKvbdNHCpMpUk +EPCkKvbdKVuGDdfi +EPCkKvbdxrnImRbH +EOcLKvbdZRNEiNFR +EOcLKvbdtbcUvuno +EPCjjvbdJTZAsNXl +EPDLKvbdFVyQPljF +DoCkKvbdieKftoAO +EObkKvbdZMSETnMN +DoCjjvbddePSBvcK +DncLKvbdqUUHSSLU +DoDLKvbdZQldhmEq +DoDKjvbdOTTugFUp +DncLKvbdZsiJZESn +DnbjjvbdtbcUwWPP +EPDLKvbddwzTtRez +DnbjjvbdZoNheFZj +EPCkKvbdKfFgbApu +DoDLKvbdhytfMQmf +DnbkKvbdnGeXlnGy +EPCjjvbdSBcdlIyL +DncKjvbdbAvFFpPw +EObjjvbdzoPpeClY +EOcLKvbdqwQMDIyR +EPCjjvbdmaivxOmu +EPCjjvbdIwsahLqQ +DncLKvbdddoSBwCj +EOcLKvbdrEEhpNvB +DoCjjvbdEPCkKvcE +DncKjvbdePEsLTsr +DncKjvbdmRyVZsEJ +DnbjjvbdZLqdTnMN +EPDKjvbdRbEFMIxk +EObjjvbdJXsbHlRQ +DncKjvbdkDMLQftg +EOcKjvbdOEctJIjd +DnbkKvbdqTsfrRkU +EPDKjvbdkIGkeenL +DoDLKvbdUxhUZjnn +DncLKvbdwyhFexFS +EPDKjvbdbLLfOmcA +DnbkKvbdtbbuXWPP +EOcLKvbdYpmEhmFR +DnbkKvbdxmsHxTIc +DoDKjvbdznoqFDLx +EObjjvbdmfdxMnHZ +EObjjvbdYTMBNUOx +EObjjvbdADRwizJQ +EOcLKvbdMoxQvOGs +EOcLKvbdrWolDJYq +EPCjjvbdeFPRbXDK +DoDKjvbdrDdhpNvB +EPDKjvbdZxdKODLr +EOcLKvbdWSNwadlD +EOcKjvbdxrmhlqbH +DoDLKvbdzoPqEblY +DncKjvbdTkuoBWPJ +DnbjjvbdrykpSaHn +EOcKjvbdKWUfDdgJ +DnbkKvbdZMSEUOMN +EObkKvbdSBcdkhxk +DnbjjvbdIGfyyYXg +EPCkKvbdnBjWwoOV +EOcKjvbdzaAPGgBl +DnbjjvbdkVvmdCXw +DoDLKvbdkDLkQfuH +DoCkKvbdVqnXbFMD +DncKjvbdWWiXuceH +DoCjjvbdBvzdIePv +DncKjvbdLFfICBQu +DncLKvbdeFPRawDK +DncKjvbdjmBkydgP +EObjjvbdVUMtFkuj +EPDLKvbdrSUjmkBN +DoDLKvbdSPsgKFdX +DoDKjvbduDDVXVno +DoCjjvbdMuSqjmAX +EPCkKvbdZyEJmcLr +DnbkKvbdMfcQMouL +DoDLKvbdUMWPAuni +DnbjjvbddZxpYZRC +EPDKjvbdbAvEeopX +DnbkKvbddoErkUUS +DoCjjvbdePErjstS +EOcKjvbdGKeTDHlu +EObjjvbdfIKvSORH +EPCjjvbdUsmTelWK +EObkKvbdaMkBsVMg +DoCkKvbdRjxfVHKs +DnbkKvbdMpYQumgT +DncLKvbdVwIxWEFH +DncKjvbdaMkCTUmH +DoDLKvbdhlFENuDZ +EPCjjvbdZisIPgCG +EPCjjvbdZnnJEdzK +EPDKjvbdGLEsDINV +EObjjvbdYzcFrKVy +EPDKjvbdZirhPgBf +EPDLKvbdKaLGmCXq +EObkKvbddoErkTsr +DoCkKvbdRXNdCkgc +DoDLKvbdEvZQQNKF +DoCkKvbdZoNhdeZj +EPCkKvbdhkddNtby +EPDLKvbdZLrDtNlN +DncKjvbdRbDdlIxk +EPCkKvbdEOcKjwCd +DncKjvbdlqyUyrdJ +DoDLKvbdNddThhkE +EOcKjvbdwyhFewdr +EPDLKvbdiUydwSVC +DnbkKvbdYzcFqjWZ +DnbkKvbdiBoCdwRR +EOcLKvbdpecdsuaI +EPCkKvbdQlxCYnUz +EPDLKvbdVvhxWEEg +EOcLKvbdlZSqryGt +EPCkKvbdUaCQsQqy +DoCkKvbdvAdZSndh +DnbjjvbdmttykKRf +EPCkKvbdYgWdAPTJ +DoCkKvbdlYrqsZGt +DnbkKvbdZsiIxcrn +DoCjjvbddeOqavbj +EObkKvbdbVBfwjsh +EObjjvbdMoxQvOHT +EPCkKvbdRbEFLiYk +DoCkKvbdlhdTqUqa +EOcLKvbdMIbMRYAS +EObkKvbdDncKkWbd +DncLKvbdfSAvzkcP +DnbkKvbdxsOIlqbH +DoCkKvbdADSYKZhp +EPCjjvbdZshiZESn +DoCjjvbdieLGuPAO +EPCjjvbdkHgMFenL +EPDKjvbddBrlrAUN +DncKjvbdddoSCXCj +EPCjjvbdsQWOibvG +EObkKvbdKkBHvAKZ +EObjjvbdkWWmdBww +EObjjvbdnGeXmNgZ +EOcLKvbdyNrgwrhc +DnbkKvbdNddThiLE +DncKjvbdDjHivYKA +EObjjvbdWXIxWDdg +EObjjvbdrMyixlIJ +EOcKjvbdcyyPxYpb +DncKjvbdcyxowxpb +EOcLKvbdhbOcFXQq +EOcKjvbdHDjuibKK +DoDKjvbdiVZeXRuC +EOcKjvbdnBjXYOnV +DnbkKvbdOTTufdtp +DoDKjvbdVAbRTRSZ +DnbjjvbdRXOEDLgc +EOcLKvbdznopdcLx +DncLKvbdRNXayOUz +DncLKvbdSPtHKFdX +EPDKjvbdxUldqYkn +DoCkKvbdZRNEiNEq +EPDKjvbdrbFllGjy +EPCjjvbdUyHszLPO +DncLKvbdxwhibQZk +EOcKjvbdFWYopMie +EOcKjvbdaNKbTVMg +DnbjjvbdliETqUrB +EObjjvbdRXODbkgc +DnbkKvbdTlWPBWPJ +EOcKjvbdOFEThiKd +EObjjvbdMSXMzVQz +EObjjvbdHDkVjCKK +EPDLKvbdqFceTuaI +EOcKjvbdFyUtaDxC +EOcLKvbdmgExMnGy +DncKjvbdtlYWaUBX +DoDKjvbdCDoaWJlf +EPDKjvbdkyTSTYgU +DoCjjvbdqqtjnLAm +DnbjjvbdGYtuAdXb +DoCkKvbdBhjbLIfK +EPDKjvbdNPwqVmfs +DoCjjvbdsrqsYzFD +EPDKjvbdSPsfjFdX +EPCjjvbdZyDjNbkr +EPDKjvbdqZOgfpcx +EPCkKvbdqGDeUVaI +DoDKjvbdUVkpKUAq +DoCjjvbdRpUGjGEX +DoDLKvbdmgFYMmfy +EPDLKvbdRpUHKFcw +DoDLKvbdEvZQPmKF +DoDKjvbdZshhxdTO +DoCjjvbdiZuGMROG +DoDKjvbdfpBzvdYI +EPCjjvbdmgFYNOGy +EOcKjvbdNrtWGdtp +DnbjjvbdWHxVwgYz +EPCkKvbdJbjDRKDY +EPCjjvbduWOYJpsA +DncKjvbdehLVrORH +DoCjjvbdGFjSOItR +DoCkKvbdjuwODbYX +EObjjvbdJTZBSmXl +DnbkKvbdzQoNIiwA +EObjjvbdjJfHilwr +EOcKjvbdJpyeOfOF +DnbjjvbdqFdEsuaI +EPDLKvbdUxhTzKoO +EPDKjvbdBraCsfXS +DoCjjvbdLAjgNBxR +EObkKvbdlhdTqUrB +EPCjjvbdZoOIeFZj +DnbjjvbdrDdhpNua +EPCjjvbdIHHZxxYH +EPCkKvbdiMEdOVCy +DoDKjvbdhgJbxvKV +DoDLKvbdUyHsyjoO +DoDKjvbdGQATXGfZ +DnbjjvbdvAdYroEh +EPCkKvbdhtydvrUb +DoCjjvbdsQWOicWG +DncLKvbdcJMjLGWx +DoCkKvbdIwsaglQp +DoCkKvbdYkrEUOLm +EObkKvbdVvhxWDeH +EPDLKvbdZMRdTnLm +DoCjjvbdADRwizJQ +DoDKjvbdSwjkmzjx +DnbkKvbdBiKbLIfK +EPCjjvbdRyigsDWA +EPDKjvbdRXOECkhD +EObjjvbddxZtTqez +EObjjvbdbBVdfPow +DncLKvbdMfcQNQVL +EPDKjvbdVBBqTQrZ +DncKjvbdZMRctOLm +DncKjvbdGGJrOIsq +EPCjjvbdZMSETmlN +DoDLKvbdhlEdOVDZ +EOcLKvbdOhAXyAZB +DoCkKvbdyOTIYSiD +DoCjjvbdUtNUGMVj +EObkKvbdWXJYWDdg +EOcLKvbdBhjbKhej +EObkKvbdVwIwvDdg +EPDLKvbdzjUpQDsU +EOcKjvbdqAiFAXHd +DoDLKvbdqrUkNjaN +EOcKjvbdYORAYUvU +EOcLKvbdcIljLFwY +DnbkKvbdVwJXvDdg +DoDKjvbdVBCQsRSZ +DoDLKvbdmuUzKiqf +EObkKvbdJYUCILpp +EPDKjvbdsQVoKCvG +EPDLKvbdmoyyVkZC +EPDLKvbdsCGNLfjy +EOcKjvbdbiNKLGWx +DoCjjvbdrpVnjDWG +EObkKvbdfVzxPizs +DnbkKvbdRXODcLgc +EPCjjvbdjJfIJlxS +DoCjjvbdZLqcsnLm +DncKjvbdjuvnECXw +DoDLKvbdEPDKkXCd +DnbjjvbdOSsvGduQ +DoDKjvbdIMBzmvpk +EPCjjvbdqrUkOLAm +EPCjjvbdTkvOaVoJ +EObjjvbdozmdKwoA +DncLKvbdDxXkstTl +EOcKjvbdfMewHMik +DoDLKvbdGKeTCgmV +EObjjvbdxnSgwsIc +EPCkKvbdaaVdepPw +EObkKvbdqGEFUVaI +DncLKvbdjblKpgUg +DoDLKvbdRWnEDLhD +DnbjjvbdFxuVAcxC +DncKjvbdqZOhGpcx +DoCkKvbdfHjvRnQg +DnbkKvbdwMvANDeN +EObkKvbdFfKSOIsq +DoCjjvbdmajXYPNu +EObkKvbdANHyTXZx +EPCjjvbdLFfHbAqV +DoCjjvbdVgwuxHYz +EPCjjvbdQvmcblHc +DoDKjvbdaSFbhUGL +DncLKvbdzHZMANFX +DncKjvbdySnJNRbH +DoCjjvbdMpYRVnHT +EObkKvbddePSBwDK +EPCkKvbdMfcPmQUk +EObjjvbdMgCpNQVL +DoDKjvbdrEFIonWB +DoDLKvbdFjdsCgmV +EObjjvbdwtmFRYlO +DnbjjvbdIwtBgkqQ +EPCjjvbduaDxrndh +EPDLKvbdShzKRABM +DnbjjvbdfHjvRnRH +EOcKjvbdBiLBjiGK +EPCjjvbdCEPaWKNG +DoDKjvbdtbbuWuoP +DoDKjvbdegkWRmqH +DnbjjvbdNeETiJLE +EPCkKvbdjcLkRHUg +DnbjjvbdjvXOEBww +EOcLKvbdTlWPAvOi +DoCjjvbdrMyixkhJ +EObkKvbdqGEEtWAh +DncKjvbdbBVeGQPw +DoDLKvbdpssfqqjt +DnbkKvbdFWZPomJe +DoDKjvbdSBcdkiYk +DoCkKvbdvBEZSoFI +EOcKjvbdRaceLhxk +EOcKjvbdJKEAKQHE +DoDLKvbddZyQYYpb +EObjjvbdeXzTsqez +DncLKvbdCSaCtGXS +EPCkKvbdlZSrSyHU +EOcLKvbdTJZiqABM +DncLKvbdvAdYsOdh +DnbkKvbdcyxoxZQb +DnbkKvbdhanbdwRR +EPCjjvbdbBVeFopX +DncKjvbdGLFTDHmV +DoCjjvbdiZuGLpmf +EOcLKvbdJbjCqJbx +EObkKvbdGdLWJbKK +DoCjjvbdRkZGVHKs +DoCjjvbdGckWJajK +DncKjvbdAMgxrvyx +EPCjjvbdEPDKjvbd +EOcLKvbdkDLjqGtg +DoDLKvbdNPxRVnGs +DoDKjvbdySmhmRag +EPCjjvbdVqnXadkc +EPDKjvbdTulPitAq +EObjjvbdGLErcHlu +DoDLKvbdHELWKCJj +EObjjvbdbVCHYLUI +DncKjvbdqvpLbiZR +EPCjjvbdvAdZSoFI +EOcLKvbdfjfzcGAE +DnbjjvbdaNKartmH +EOcLKvbdcTDKsdJa +DncLKvbdOSsufduQ +DnbkKvbdyYIiapZk +DoCjjvbdunszqKoU +DoCkKvbddndsLTsr +DoDKjvbdxxJKBoyk +DoDLKvbdrovOibvG +EPCkKvbdiLddOVDZ +EPCkKvbdiBncFWqR +EOcLKvbdZQldiNFR +DoCkKvbdOEctJJKd +DoCkKvbdrMzKZMIJ +DnbkKvbdVhYVwgYz +EOcLKvbdQvnDblHc +DoDLKvbdmJEURVRa +DoDLKvbdCTBDUFwS +EPCkKvbdNrsvHEuQ +DnbkKvbdegkVqnRH +DoCjjvbddBrlrATm +DoCkKvbdCJLCLJFj +EOcKjvbdxZgefXeS +EPDKjvbdZtJJZDsO +DoCkKvbdQvmdDMID +DoDLKvbdRaceLhxk +DnbkKvbdSBdFLhxk +DoDKjvbdOTTufdtp +DoDLKvbdnQZxujyC +DnbjjvbdZshhyETO +DoCjjvbdtvOYJqTA +DncLKvbdRMxBxmtz +DnbjjvbdEzsqElCi +EObjjvbdKefHbAqV +DnbkKvbdmpZyWKyC +DncLKvbdNQXqWOGs +EPDLKvbdVTlsekuj +EPCkKvbdGcjvJajK +EPDLKvbdIryArlxM +DoDLKvbdwyhGFwdr +EPCkKvbdzaAOgGal +DncLKvbdiHKCxvJu +EOcKjvbdLBKgMbXq +DoCjjvbdTppoVVIN +EPDKjvbdNPxQvOHT +DnbjjvbdTvLpJsaR +DncKjvbdnVUyjiqf +EPCjjvbdVUNTfLvK +EOcLKvbdDxYLtTtM +DnbkKvbddePSCXCj +EPDLKvbdgGLzOHHA +DoCkKvbdTukpKTaR +DncLKvbdVUMtGMWK +EObkKvbdXnRAYVWU +DncLKvbdyqOmJJwA +DoDKjvbdFVyQQNKF +DncKjvbdvOszqLOt +EPCkKvbdZRMdhmFR +EPDLKvbdhlFDmuCy +EOcKjvbdkIHLeenL +DnbjjvbdqceJQOWB +DoCkKvbdzitpPdSt +EPCjjvbdFeiqmhtR +DoDLKvbdsQVoJcVf +EPDLKvbdUQpnuVIN +DoDLKvbdWSNxBdlD +EPCjjvbdpyPHgQcx +EOcKjvbdUyHsyjoO +DoCjjvbdxrnJNSCH +DoCjjvbdKDKCpjCx +EPDLKvbdxsOIlrBg +DoCkKvbdnGdxMnHZ +EPDLKvbdfHkWSNpg +DnbjjvbdkHgMGFnL +EOcLKvbdxmsIYSiD +DoDLKvbdEXxLsssl +DoDKjvbdjFLGuPAO +EOcLKvbdeEoRawCj +DoDKjvbdyOTIYSiD +DnbjjvbdIHGyyXxH +DncKjvbdTqQoUuHm +EOcKjvbdMfcQNPuL +DnbkKvbdatbGxKsh +DoDKjvbdOTUWHEtp +EPCkKvbdGLFTCgmV +DoDKjvbdkHfkfGNk +EObjjvbdJXtBhMRQ +EObkKvbdRpUHKGEX +DnbjjvbdiUzFWrVC +EPCkKvbdliETqUrB +DnbkKvbdZjTIQHBf +DoCjjvbdZMSETnLm +EPDLKvbdFWYoomKF +EPDLKvbdRaceLhxk +DoDLKvbdEASJNZwX +EPDLKvbdGZUtaEXb +DncLKvbdyNrgxSiD +EOcKjvbdbVBgXkTh +EPCkKvbdvOszpkOt +EObkKvbdKfGHbBRV +DncLKvbdjvXOEBxX +EPDLKvbdvAcyTPFI +EObjjvbdNsUWGeUp +EPCjjvbdZtIiZDrn +DoDLKvbdrRtkOLBN +DncKjvbdptUHSSLU +DncLKvbdWSOXaeLc +EPCkKvbdiLeDmuCy +DoCjjvbdhyuFkqNf +DnbkKvbdzoPqFDMY +DoCkKvbdGFirOItR +DoCjjvbdEObjkXCd +DnbkKvbdjKFgilwr +EPDLKvbdVwIwvEFH +DoDKjvbdfIKvRmpg +EPDLKvbdOFDsiIkE +EPDLKvbdGKdrcIMu +EPDKjvbdZnmiEeZj +DoDKjvbdKWVFceHJ +DncKjvbdvBDySneI +DncKjvbddeOqawCj +DoCkKvbdEztRFLbi +EPDKjvbdMpXpumgT +EPDKjvbdtunYJqTA +EPCjjvbdegkVqmpg +EObjjvbdlYsRsZHU +EOcKjvbdbUagXkUI +EPDLKvbdANHySvyx +DnbkKvbdmJEUQtqa +EPDKjvbdVUNUFlVj +EPCkKvbdvvlBVaVu +DoCjjvbdmozZWLYb +DoDKjvbdwzIFfXeS +DoDLKvbdNQXpvOGs +DncLKvbdEYXlTstM +EPCkKvbdbUbGwkUI +EOcLKvbdLBLHNBxR +DnbkKvbdePErkUUS +EObjjvbdyXiJaoyk +DncLKvbdVrNxBeLc +DoCjjvbdaRebhUGL +EOcKjvbdxsNhmSBg +EOcKjvbdXrkaMsoY +EObjjvbdhuZdwSVC +DoCkKvbdqGEFUWAh +DoDKjvbdegkVrNpg +DoCkKvbdtcCtvuoP +EOcKjvbdmJEUQtrB +EOcKjvbdWXIwucdg +DoDLKvbdhgKCyWJu +EPCjjvbdcSbkUDjB +EPDKjvbdLrWmZuQz +EPDLKvbdXrlAlsnx +DnbkKvbdKNADygUa +EPDKjvbdyNrhXsJD +EOcLKvbdIsZBSlxM +EPCkKvbddndrkTsr +DnbjjvbdFyUuBEYC +EPCkKvbdJcKCpjCx +EObkKvbdbBWFGQPw +EOcLKvbdFjdrbhNV +EPDLKvbdrDdiQNvB +EObkKvbdkHgMGGOL +EPCkKvbdkySrSyHU +DncLKvbdaaWEfQQX +EObkKvbdehKvRmpg +DnbkKvbdmIdURVRa +DoDLKvbdvBEZSneI +DoCkKvbdNdcshhjd +DncLKvbdZyEKOCkr +DoCkKvbdVrNwbFMD +DnbkKvbdnCKXXoNu +EPDKjvbdSQTgKGDw +EObkKvbdaRfCgtFk +EObjjvbdkWXNcaww +EObkKvbdDihJuxKA +DncLKvbdnVVZkKSG +EPCkKvbdVBBqSpqy +DncLKvbdqGEFUWAh +DoCkKvbdsPvOjDWG +DncKjvbdySmiNRbH +DoDKjvbdraemLfjy +DoDLKvbdnPzZWKxb +DnbjjvbdRjxfVGkT +DoDKjvbdGLEsDHlu +DnbjjvbdRotHKFdX +DoCkKvbdRpUGiecw +DnbjjvbdZjTHogBf +EPDKjvbdcTCjtDia +EOcKjvbdrounibuf +EOcKjvbdVBCRSqRy +EPDKjvbdEvZPolie +DnbkKvbdzRPNJKXA +DncLKvbdBhjbKiGK +DnbkKvbdqrVKmkBN +DnbjjvbdBraDTewS +DnbkKvbdJcKDRJbx +DoCjjvbdbUbHYLUI +DoDKjvbdUyITykOn +DoCkKvbdYlSEUOMN +EPCkKvbdRpUHKGEX +EObkKvbdTAFJICPE +EPDKjvbdrpWPJcVf +DoCkKvbdZnnJFFZj +EPCkKvbdkVvmcaxX +EOcKjvbdyzdnRgiI +EObjjvbdqAiFAXIE +DncLKvbdWWiYWDeH +EPCjjvbdqlzKZLgi +EObjjvbdauCGwkUI +DoDLKvbdtTSSxydc +EObkKvbdbVCGxLTh +EObkKvbdkWWmdBxX +EObjjvbdRNXaxnUz +EOcKjvbdwXLaVaVu +DncKjvbdqTtGqrKt +DncKjvbdIjEAJpGd +EPDKjvbdHffyyXwg +EObkKvbdSCEFLiYk +DncKjvbdiVZeXRuC +DoDLKvbdWWhwudFH +EPDLKvbdrRuKmkAm +EObjjvbdxsNhlqag +EPDKjvbdcJMikFwY +DoDKjvbdpyPHfpdY +DncKjvbdwyhGGXdr +DoCkKvbdkVwODbXw +DncLKvbdJcJbpibx +EPCkKvbdsQWPJcVf +EOcKjvbdZRNEiMdq +EObkKvbdjvXOECXw +EObjjvbdZxcjODLr +DncKjvbdRWmdDMID +DncKjvbdjvWmcbYX +DoCjjvbdnBjXXoOV +DncKjvbdiBnbdwQq +EPDKjvbdDoDKjwCd +EPCkKvbdFxuVBEYC +DncKjvbdFVxopMie +EOcLKvbdKWUfEEfi +EPCkKvbdNrtVgEtp +DoDLKvbdfoazwDxI +DoDKjvbdqquKmkAm +EPDKjvbdhbPCeXRR +DncKjvbdZtIhyETO +EPCkKvbdQwNdCkhD +EPDKjvbdhzUfMROG +DnbjjvbdrpVoKCuf +EPDLKvbdtlYWaUAw +EOcLKvbddoErjstS +DnbkKvbdyzeORghh +EPDLKvbdZnmhdeZj +DoCjjvbdcIlikGXY +EOcLKvbdLAkHNBxR +DoCjjvbdtkwwBUAw +DoCjjvbdgGMZnHHA +DnbkKvbdUsmTfLuj +EOcLKvbdqZPHgQcx +EPDLKvbdLqvlytpz +DoDLKvbdqdFIomvB +EObjjvbdBhjbKhfK +EOcLKvbdrMyjYlIJ +DncKjvbdDncKkXCd +DnbkKvbdNQXpunHT +EPDKjvbdZjSgofbG +DnbjjvbdBiKbLIej +DoCjjvbdGAoQxizm +EOcLKvbdwtldqZLn +DoDLKvbdIrxaSmXl +DoCjjvbdNHDQMpUk +EOcLKvbdTkunaWOi +DncLKvbdNHCpMpVL +DoDKjvbdelfXHNKL +EObjjvbdcyxpYYqC +DoDLKvbdZGwEAOri +DoDLKvbdIxUCHkqQ +DoCjjvbdoznEKxPA +EOcKjvbdbLMGPNcA +EObjjvbdiiegilxS +DoDKjvbdZRNFImFR +DncLKvbdRbDeLhxk +EPCkKvbdqlzJxlHi +EOcLKvbdhkeDnUby +EPCjjvbdhaoDEwQq +EPCkKvbdFkFScHlu +EPCjjvbdJKEAKQGd +DoCkKvbdpxngfqDx +EObjjvbdUGznLwWF +EObjjvbdVZHsykPO +DncLKvbdYlRdUNlN +EPCkKvbdHDkWKBjK +DncLKvbdjKFhKMxS +DnbjjvbdnBjWxPOV +EObkKvbdtcCtvvOo +DnbjjvbdTpqPUthN +DncLKvbdMoxQvOGs +DnbjjvbdfNGXHMjL +EPDKjvbdhgJcZVjV +DoDLKvbdNGbolpVL +EPDKjvbdatbHYLUI +DncLKvbdczZPwxqC +DnbjjvbdZxcimblS +EPDLKvbdKaKgMbXq +EOcLKvbdtbcUwWOo +DnbkKvbdJutfEEfi +DoCjjvbdmIdURUqa +EPCjjvbddBrmSATm +EPCkKvbdXsLaNUPY +DnbkKvbdNPwpvOGs +EOcKjvbdIwsaglQp +DoCkKvbdlhdUQtrB +DoDLKvbdGdLWJaij +DoCjjvbdwXMAvAvV +DnbkKvbdbrbkTdJa +EPDKjvbdFVxpQNJe +DoCjjvbdHDkWJbKK +DnbkKvbdjvXODbYX +DoCjjvbdemFwGmJk +DoCjjvbdQdCaPpcr +EOcKjvbdqcdiQNvB +DncLKvbdbBWFFoow +EOcKjvbdKaKgMawq +EObkKvbdLBKgMawq +DncKjvbdcbSmSAUN +DoCjjvbdyOTHwsJD +EOcLKvbdOStVfeUp +EObkKvbdHffyyYXg +EPCjjvbdmuUykJrG +DoDLKvbdJYTbILpp +DncKjvbdnGdwlmgZ +EPDKjvbdZQldhldq +EObjjvbdUaBpsRSZ +EOcKjvbdrzLpSaIO +DnbjjvbdLGFgbAqV +EPDKjvbdXrlAmUOx +EPDLKvbdtSqryZeD +DoDKjvbdtlXwAtAw +DoDKjvbdaRebgsfL +EObjjvbdUWLpKUAq +EObjjvbdQvmccLgc +EOcLKvbdznopeDMY +EOcLKvbdIwsbHkpp +EPDLKvbdziuQPcsU +EPDLKvbdelevgMik +DoDKjvbdTAFIgbOd +DoDLKvbdbBWFGPow +DoDKjvbdYqNEiMeR +EOcLKvbdhficYuiu +EOcKjvbdyTOImRbH +DncKjvbdiLeDmtby +EPDLKvbdUsmTekvK +DoCkKvbdkCkkQftg +DoCkKvbdVTmUFlVj +DoCkKvbdTIyjRAAl +EOcKjvbdbUafxKtI +EOcKjvbdZsiIxdSn +DoDKjvbdSCEElIyL +DnbjjvbdBsAbsfXS +DoCkKvbdBcpAuimG +DoCkKvbdVwIwvEEg +DnbjjvbdajlFoNcA +EPCkKvbdtSrTYzFD +DnbkKvbdGFirNhsq +EOcKjvbdapHHELzd +DoDLKvbdiUyeXSUb +DnbjjvbdtAGqIABS +DnbkKvbdXsLaMsnx +DoCkKvbdeEnqawDK +EOcKjvbdDxXkstUM +DnbjjvbdcyxoxZQb +DoDLKvbdlrZVZrci +DoCkKvbdTAEiICPE +EOcLKvbdpyPHfpcx +EPDLKvbdVBCRTQqy +DnbjjvbdmJEUQtqa +DnbjjvbdkClKqHVH +EObkKvbdCJKajiGK +EObkKvbdeAURMxJf +EPDLKvbdcSbkUDjB +DncLKvbdsCFmLfjy +EPCkKvbdIwsahLqQ +DoCkKvbdrJAJeMne +DoDLKvbdIHGzYwxH +DoCjjvbdGckVjBjK +EObjjvbdegkVqmqH +DoDLKvbdLKaIWAKZ +EPDLKvbdaRfChUGL +DoDLKvbdyYJJaozL +DoCkKvbdrWpLbhyR +DoCkKvbdLGGIBaRV +DoDKjvbdKyRJrztf +DoCkKvbdjuvnEBxX +EObkKvbdNeEThhkE +EPCjjvbdQwNcbkhD +DoCkKvbdJqZePGOF +EObjjvbdNGbomQUk +EObkKvbdkxrqsZHU +EOcLKvbdrounjDVf +DoDLKvbdkClLRGtg +EOcLKvbdbKkfOnDA +EPCkKvbdRDbaPpcr +EPDLKvbdkHgLefNk +EOcLKvbdFVxpPmKF +EObkKvbdsrrSxzEc +DnbkKvbdFeirOIsq +DncLKvbdzitopDrt +DoCjjvbduWOXjQsA +EPCkKvbdyXhjCPyk +DoDKjvbdaaWEfPow +DncLKvbdvAcySneI +EObjjvbdADRwjZhp +EObkKvbdnPyxvLYb +DncKjvbdijGIJlwr +EPCjjvbdJcJbqJcY +DnbkKvbdkMbLydgP +DoCkKvbdRDbaQQcr +DoCjjvbdxsOIlrCH +DnbjjvbdKQydnfOF +EPDKjvbdcImKKfWx +DnbjjvbdcImKKewY +EObkKvbdqdFJPmua +EObjjvbdajkennDA +DnbjjvbdZyEKNcLr +DoCjjvbdKWVFdEgJ +EPDKjvbdWXIwuceH +DnbjjvbdqiAJdlne +EOcLKvbdkyTRryGt +EPCjjvbdpaJFAWgd +EPCjjvbdmJDsqVSB +EPCjjvbdREDAopdS +DoCjjvbdRpUHKFdX +DncKjvbdptUHSSKt +EPCjjvbdiCObdvpq +DncLKvbdNwnuzcmt +DncKjvbdqdFIpOWB +DoDKjvbdjggLefNk +EObkKvbdrNZiyLgi +EPCkKvbdaSFcITfL +DnbjjvbdGLFTDINV +EPCkKvbdiLeENuDZ +DncLKvbdZyEJmcLr +EObjjvbduDCuWvOo +DoDKjvbdNQXqWNgT +DncKjvbdVBCRTRRy +EPCjjvbdSQUGifEX +EOcLKvbdANIZSvyx +DoDKjvbdvBDyTPFI +DnbkKvbdEPCkLWbd +DoCkKvbdyYIjCPyk +DnbkKvbdelewGmKL +EPDLKvbdatbGxLUI +EPDLKvbdTvLojTaR +DoCjjvbdhtyeWrVC +DoDKjvbdzeZnzdzQ +DnbjjvbdyzdnRhJI +EPCjjvbduLxWaUBX +EOcLKvbdkyTRsYgU +DnbjjvbdCTBCsewS +EObjjvbdjAPgApHK +EPDLKvbdwkWdHzyf +EObjjvbdsPvOicWG +DoCkKvbdTulPisaR +DnbkKvbduCcUvuoP +EObkKvbdZRMdiMeR +DoCkKvbdSPtHJfDw +DncLKvbdKaLGlaxR +DnbkKvbdRpTgKGDw +DoCjjvbdWXJYWEEg +EObjjvbdWXJYWDdg +EOcKjvbdKCjCqKCx +DnbkKvbdakMGPNcA +DoDKjvbdwkXDgzzG +EObkKvbdNHDPlotk +DncLKvbdyzdmrIJI +EObkKvbdFkErbhMu +EPCkKvbdNeDsiIjd +DoDKjvbdIGfyyXxH +DoCjjvbdZyDinDLr +EPCjjvbdemFvfmJk +EObjjvbdJYTbILqQ +DnbjjvbdWXIwucdg +DoCjjvbdiHKCxvJu +EPDKjvbdfpBzwDxI +DoCjjvbdaNLCStlg +EPCkKvbdnVUykJqf +DoCjjvbdyYIjBozL +EPCjjvbdzjUpQDsU +DoDLKvbdZxcjOCkr +EPCkKvbdeFOrBvcK +EPDKjvbdKaKflaxR +EOcLKvbdfMevgMjL +EPDKjvbdGckWKCKK +DoCjjvbdKVuFdEgJ +EObjjvbdfMfWfmJk +DoDLKvbdMfbomQVL +EPDLKvbdRkYeuGjs +EOcLKvbdKfGHaaQu +EObkKvbdoznDjwoA +EOcKjvbdUMWPBVoJ +DoCkKvbdFjeSbgmV +EPCjjvbdrEFJQOWB +EOcLKvbdvAcyTOdh +DnbjjvbdWfYzUAOs +EObkKvbdTkuoBWPJ +DnbkKvbdFpASvgFy +DoCjjvbdczZQXyRC +DoCjjvbdRDcBQQdS +DoDKjvbdqYngfqDx +EObkKvbdWRmwbElD +EPCjjvbdFyVVBDwb +EObjjvbdBhjbKhej +DncLKvbdzaAPGgBl +EObkKvbdTppoVUgm +DoCjjvbdbrcLTcjB +EPCkKvbdGLFTCglu +DoDLKvbdDwxMUUUM +EPCjjvbdNQYQumgT +DncKjvbdmfeXmOGy +EPCjjvbdwtmFRYkn +DoCkKvbdsBfMlGjy +DncLKvbdRpUHKGDw +EObjjvbdjblLQfuH +EObjjvbdJYTbHlRQ +DoCkKvbdmttyjiqf +DoCkKvbdZQldiMdq +EPDKjvbdFejSNiUR +EOcLKvbdjgfkfFnL +DnbjjvbdMpYQvNgT +DnbkKvbdUyIUZjnn +DnbkKvbdJbjDRKDY +EPCjjvbdeEnrBvcK +EOcKjvbdyzdnSIIh +DoDKjvbdDoDKjwCd +DoDLKvbdCSaDUFwS +DoDLKvbdIrxaTMwl +DnbkKvbdRNXayNtz +DoCkKvbdxxJKBoyk +DncLKvbdnGdxNOGy +DnbjjvbdySmhlqbH +DoCkKvbdxwhjBoyk +EPCjjvbdZQleIleR +EPCjjvbdaRfChTek +EOcKjvbdYTMBNUPY +DoCjjvbdegkWSNpg +EObkKvbdziuQPdTU +EOcKjvbdnCKXYOmu +DoCkKvbdZnmhddzK +EObjjvbdzaAPGgBl +DoDLKvbdePFSjtTr +EPCkKvbdNrtWGeVQ +EPCjjvbdelfWfmKL +DoDKjvbdKxpjSztf +EPDKjvbdxmsIXsIc +EPCjjvbddZyPxYqC +DoDKjvbdvOszqLOt +DncKjvbdatbGxLTh +EObjjvbdzoQQdbkx +DoCjjvbdZRMeImEq +EOcKjvbdqTtGqqjt +EOcKjvbdqAheAWgd +DnbjjvbdySmhmRag +DncKjvbdjKFhJlwr +EPDKjvbdqFceUWBI +DoDKjvbdsBemLgLZ +EPDLKvbdKQzEoFnF +EOcKjvbdFjdsCgmV +EObjjvbdpfEEtWBI +EPDKjvbdZxcjOClS +EPDKjvbdnBivwoOV +EPCjjvbdrylQTAhO +EPDKjvbdKaLGmBxR +EPDKjvbdHgGzYwxH +EObjjvbdkHflGFmk +DnbjjvbdqGDeUVaI +EPDKjvbdMgDQNQUk +DncLKvbdSKyGVHKs +EOcKjvbdqFdEsvAh +EOcKjvbdYkrETnLm +DnbkKvbdqBIeAXHd +DncLKvbdZQldhmFR +DncLKvbdFjeSbhMu +EPCkKvbddePRavcK +EPCkKvbdssRsYzEc +EPCkKvbdRadFLhxk +DnbkKvbdVvhxWEEg +EOcLKvbdIryArmYM +EPCkKvbdKfGHbAqV +DncKjvbdEKIJuxKA +EPDKjvbdIwsbIMRQ +EObkKvbdzaAOfgBl +DncLKvbdeUAUASlv +DnbjjvbdlqxuZsDi +DnbjjvbdUWMQKTaR +EOcLKvbdNGbpNPtk +EPDKjvbdWSOYCEkc +DoCkKvbdjggMGGOL +DoCjjvbdSQUHJecw +DncLKvbdZyDjODMS +EObjjvbdfpBzvcxI +EOcLKvbdTlVoAvPJ +DnbjjvbdVviYWEFH +EPCkKvbdZnmiFFZj +EObjjvbdNGbpNQUk +DoDLKvbdrbGMkfjy +DoDLKvbdxnShYSiD +EObkKvbdJYTahMRQ +DoDLKvbdoAKzshEO +DoCkKvbdZxcjOCkr +EPDLKvbdRWmdCkgc +EPCkKvbdGFiqnJUR +DoDKjvbdRzJgsDWA +DncLKvbdptTfqqjt +EPDKjvbdmIctRUqa +EObkKvbdnBiwXoOV +DnbjjvbdfMevfljL +EObkKvbdBraDUGWr +DncKjvbdUxhTzKnn +DoCjjvbdmfdxMmfy +DnbjjvbdhuZeWrVC +DnbkKvbdLiCLpxAS +DnbjjvbdKfFgbApu +DnbjjvbdziuPpETU +DoCjjvbdwuNEqZLn +EPCkKvbdEXwksssl +EPCjjvbdhgKCxujV +DoDKjvbdhlEdOVDZ +DncKjvbdLAjgMbXq +DncKjvbdOFEThhkE +DoCkKvbdANHxrvzY +EPCjjvbdZtIiZDrn +DoCjjvbdYpldhmEq +DncLKvbdqwPlDIyR +DncLKvbdUtNUFlWK +EObkKvbdkWXODbYX +DnbjjvbdRzJhSbvA +DoCkKvbdEJgjVxKA +DncKjvbdxnSgxShc +EObjjvbdbUbHYKsh +DncLKvbdZoNiFEzK +EPDKjvbdbiMjKevx +DnbkKvbdIwsbHlRQ +EObjjvbdhWyAzzAJ +EObkKvbdqvpLcIyR +EObjjvbdGGKSOIsq +EObkKvbdTpqPUthN +DncKjvbduaEZTOdh +EObkKvbdJJdAJofd +DoCkKvbdEKIJuwjA +DncLKvbdDnbjkXDE +DnbjjvbdhbObdwQq +EObjjvbdunszpkPU +EPCjjvbdwNWANDdm +EPDLKvbdozmcjxPA +EObjjvbdZnmiFFZj +DnbjjvbduDDUwVno +EOcKjvbdZjShPfbG +DncLKvbdADSXiyhp +DoCjjvbduCcVXWPP +DnbkKvbdffLzOHHA +DncLKvbdBdPaWJlf +EPDLKvbdJvVGEFGi +EPCkKvbdvwMBWBWV +EObjjvbdijGHjMxS +EPCkKvbdaNLCTVNH +EPCjjvbdbAudeopX +DoDKjvbdozmcjwoA +EPCjjvbdYlRctOMN +DoCjjvbdDoDLKvcE +EObkKvbdVqmwaeMD +DnbjjvbdqvolChyR +EPCkKvbdRkZGVGjs +DoDKjvbdjvXOEBxX +DoCjjvbdIHHZyXwg +DnbkKvbdLBKgNCYR +EPDKjvbdyNsHxShc +EOcKjvbdyzdmqhJI +DnbjjvbdqFcdtVaI +EObjjvbdrJAKElne +DncKjvbdTvLpJtAq +EObkKvbdDoDKjvbd +EPCjjvbdYlRcsnLm +DoDKjvbdegkVqmqH +EPDLKvbdZHXEAPSi +DoDKjvbdakLennDA +DncLKvbdrDdiPmua +DoCjjvbdhbPDEwRR +EPDLKvbdtcDUvuno +DnbjjvbdEKHjVxKA +EOcLKvbdYqMdhmFR +EPDLKvbdmttzKiqf +EPDLKvbdTkvPAuoJ +DncLKvbdVAbRTQqy +DncLKvbdLBKflbYR +DoCjjvbdZyDimcMS +EOcKjvbdFpATXHFy +EObkKvbdnCJwYOmu +EPCkKvbdVZHszLPO +EPCkKvbdCSaDTfXS +DncKjvbdNVSqjmAX +EPCkKvbdFjdrbhMu +EPCkKvbdbsCkUDjB +EObjjvbdMowpumfs +DoDLKvbdRotHJecw +DnbjjvbdTfzmkwWF +EObjjvbdBcpAvKNG +DoDLKvbdWHxWXfxz +EPCjjvbdqUUGrSKt +DncLKvbdliDsqVSB +DnbkKvbdBdQAujMf +DnbkKvbdWXIxVcdg +DoCkKvbddePSCXCj +DnbjjvbdZirhPfbG +DnbjjvbdyXiKBozL +DnbjjvbdznpREcMY +DncKjvbdJcKCqKCx +EPCkKvbdJbibpjDY +EPDLKvbdkClLRHVH +EPDKjvbdTvLoisaR +EOcKjvbdZGwEAPSi +EPCkKvbdKRZdnenF +DncKjvbdfMfXGmJk +EPCkKvbdhfibyWJu +EOcKjvbdMIbLqYAS +EPDLKvbdbUbHXjtI +EObkKvbdCSaDUFwS +EPDLKvbdGGJqnJUR +EOcLKvbdDoDKjvbd +DnbjjvbdFkFTDIMu +DnbjjvbdgFlZnGgA +DoCkKvbdakLfPODA +EPDLKvbdDwwlTstM +DoCjjvbdMJBkqYAS +DnbjjvbdiGjCxujV +EPDLKvbdVwIwuceH +EPDLKvbdZyEKOCkr +EPDKjvbddoFTLTtS +DoCkKvbdXrlAlsnx +EOcLKvbdZoOIeEzK +DnbjjvbdaMjbTVMg +EPDKjvbdeOeTKssr +DncKjvbdSKxetfjs +DoCjjvbdpxnhGpcx +EPDLKvbdmtuZkJrG +DoCjjvbdYkqdTmlN +EOcLKvbdJuuGEEfi +DoCjjvbdhzUfMROG +DncLKvbdddnrBvbj +EOcLKvbdWSNwbFMD +DoDLKvbdtSrTYydc +EPCjjvbdRjxetgKs +DncKjvbdFxttaEYC +EPDLKvbdiBncFWpq +DnbjjvbdyTOImSCH +DoDKjvbdcyyQXyRC +EOcLKvbdZLrEUOLm +DoCjjvbdXmqAYVWU +EPCjjvbdUsltFkvK +DncKjvbdLqvmZuQz +DnbjjvbdZjTIQGaf +DoDKjvbdzoPpeCkx +EPDKjvbdGGKSNhsq +DncKjvbdtSrSxzFD +EPCkKvbdyOTHxShc +DnbkKvbdehKvSORH +DoDLKvbdWIXvYHYz +EObkKvbdDoCkLXCd +DoDLKvbdLBKflaxR +EPDLKvbdKQzFOenF +EObjjvbdjFLHVPAO +EObkKvbdFeiqmhsq +DoDKjvbdRotHKFdX +DnbkKvbddZxpYZQb +DncKjvbdqqtkNkBN +EPDKjvbdZjShPgBf +DoCkKvbdNHCpMouL +EObjjvbdxZgefYFS +DoCjjvbdNrsvHEuQ +DoCjjvbdwzHeewdr +EObjjvbdvPTzpkPU +EPDKjvbdrounibvG +DnbkKvbdpstGqqjt +EPDLKvbdeFOrCXDK +EOcLKvbdGBPRYizm +DoDLKvbdNwnuzdOU +DnbkKvbdRMwaxnUz +EOcLKvbdDihKWXjA +EObkKvbdFeirOJTq +DoDLKvbdSKxeuGjs +EOcLKvbddndsKssr +DnbjjvbdiCPDEvpq +EOcKjvbdMoxQumfs +DnbkKvbdfNGWfljL +DnbkKvbdIHGzZXwg +EObjjvbdTlWPAvOi +DoDLKvbdnPyyVkZC +EOcKjvbdkWWmdBxX +EObkKvbdEJgjWXjA +DnbjjvbdkMalZdgP +DnbkKvbdsCGNLfjy +DnbjjvbdYqMeIleR +DncLKvbdMgComPtk +DoCkKvbdMfbolouL +DncKjvbderAvzlDP +DnbjjvbdqwQLcIyR +EObjjvbdcImJkFwY +EPCjjvbdYzberKVy +DoCjjvbdEzsqElCi +EObkKvbdRotGiecw +EPCkKvbdGLErcINV +DoCkKvbdYpmEiMdq +DoDKjvbdJXsaglRQ +DnbkKvbdFVxpPmJe +DnbkKvbdxUmEpyLn +EPCjjvbdLrXMytpz +DnbkKvbdhtzEvqtb +EPDKjvbdDxYLstTl +EPCkKvbdiBoDFXQq +EPCkKvbdZoOJEeZj +DoCjjvbduDCuWuoP +EObkKvbdjcLkQfuH +DoCkKvbdcImKLGWx +EPDLKvbdEYXlUUTl +EOcLKvbdZLqdTnMN +EOcKjvbdmozYujyC +DncLKvbdJpzEnfOF +EOcLKvbdiCPCdvpq +DncKjvbdADRxKZhp +DoDLKvbdmJDsqVSB +EObkKvbdnBiwYPOV +EObkKvbdqwQMDIxq +DncKjvbdeFOqbWbj +EPDKjvbdmfeYMmfy +DnbkKvbdGLFSbhNV +DoDLKvbdwkXDgzzG +EObkKvbdbAvFFpQX +EPDLKvbdyXhjBoyk +DoCjjvbdMfbpMouL +DoCjjvbdREDApRES +DncLKvbdmajWwnmu +DoDLKvbdIidAJofd +DoCjjvbdSZihTCvA +DoCkKvbduLwvaUBX +EPCkKvbdiHJbyVjV +EObkKvbdGYtuAdXb +DoDLKvbdCTBCtFwS +EOcLKvbdhlFENtby +DoCkKvbdySnIlrBg +EPDLKvbdwuNFQyMO +DncKjvbdlqxtzTDi +DoDKjvbdWWhxWEFH +DoCkKvbdiHJcZVjV +EPDKjvbdCflGHAzc +DncLKvbdzROmJKXA +EPDLKvbdCJLBjhej +EOcKjvbdVrNwbEkc +DnbkKvbdUtNUFlWK +DoDKjvbdLBKflbYR +EPCjjvbdauBfwkTh +EPCkKvbdrXQMDJZR +DnbjjvbdnVUyjjSG +DncKjvbdiMEdOUby +DoDKjvbdqiAKFNPF +EOcLKvbdQdDBQQcr +DoDKjvbdpxnggQdY +DncKjvbdtSrTYydc +DnbjjvbdwzHefXeS +DoCjjvbdRosfjGEX +EPCkKvbdnPyxujyC +EObjjvbdZyEJnCkr +DnbkKvbdhytelRNf +EPDLKvbdeYZstSFz +EObjjvbdTfzmlXVe +EOcKjvbdbKkenmcA +DncLKvbdvwMAuaVu +EObkKvbdwMvAMdEm +EOcLKvbdkHflFfNk +EPCjjvbdzoPpeDMY +DoCjjvbdiLeDmuCy +EOcKjvbdRpUGjGDw +DnbkKvbdUslsekuj +EPCjjvbdmJEURVRa +DncLKvbdZjSgofaf +EOcLKvbdaMjasUlg +DoCjjvbdREDBPpdS +DnbjjvbdIwsaglQp +DoCkKvbdkNCLzFHP +DoDLKvbdaRfChUFk +EPCjjvbdrRtjnKaN +EPCkKvbduoTzpkOt +EOcKjvbdnHFYMmfy +EOcKjvbdHDkVjBjK +EObjjvbdEXxMTssl +DnbjjvbdNPxRWOHT +EObjjvbdiZtfLpmf +EObjjvbdTvLojTaR +DoDKjvbdKkBIWAKZ +DoDLKvbduCbtwVno +DncLKvbdmttzKjSG +DncLKvbdbBVdfQQX +EObkKvbdyXiKBpZk +DncLKvbdzGxlAMdw +DoCkKvbdMpXpvNfs +DoCkKvbdKQydoGOF +EPDLKvbdTfzmlXVe +EPDKjvbdQccBPqES +EPCjjvbdZtJIyESn +DoCjjvbdVrOXbElD +DnbjjvbdbLMGOmcA +DnbkKvbdnPzZWKyC +EPDLKvbdmajWwoOV +EObjjvbdQwOEDMHc +EPCkKvbdTvMQKUBR +DoCjjvbdOTUVgEtp +DoCkKvbdIHHZyXxH +EPDLKvbdDoDLKwDE +EObjjvbdiZtfMQmf +EObjjvbdijGHimXr +DoDKjvbdVrNxCElD +EPDLKvbdJutedFGi +DnbjjvbdmSZVZsEJ +DncKjvbdqlzKYlIJ +EOcKjvbdfelZnGgA +EOcKjvbdYlRctOLm +DoDKjvbdPxmAHSrK +EPCjjvbdWWiYWEEg +DoCjjvbdbAvFFoow +EOcKjvbdFjeSbglu +EPDLKvbdlqyVZsEJ +EOcKjvbdddoRbXDK +EPCkKvbdaRecHtFk +DncLKvbdSKyGUgKs +DoDLKvbdcyyPwyQb +DoDLKvbdnVUzKjRf +EObjjvbdYkqdUOLm +EObkKvbdRbEEkhyL +DncKjvbdtAHQhAAr +DnbkKvbdVqmwbFMD +EOcLKvbdznoqFDLx +EOcLKvbdEXxLtTsl +DnbkKvbdtumwipsA +EObjjvbdmJEUQtqa +DncKjvbdxwhjCPyk +DnbkKvbdyfyMANFX +DncLKvbdiVZeXRtb +EObkKvbddtAUATMv +EOcKjvbdxnSgwriD +EObjjvbdlrZVZrdJ +EPCkKvbdsBelkfkZ +DoDKjvbdFVyPomJe +EPCkKvbdQmYBxnUz +EOcKjvbdSBdFLhyL +DncLKvbdmJETpuSB +DoDLKvbdRECaPpcr +DncLKvbdIxUBglRQ +DoCjjvbdpssfrSLU +DnbkKvbdSQUHJedX +EObjjvbdkySrTZHU +EObkKvbdZtIiZETO +DoCjjvbdtumwipsA +DoCjjvbddBrlrAUN +EPCjjvbdKCjDQibx +DoCjjvbdQccAopdS +DoDLKvbdSBceLiYk +EPDKjvbdREDAoqDr +EOcKjvbdZQleJMeR +DoCkKvbdEARiMywX +EPDKjvbdkDLkQgUg +DncLKvbdFjdsDIMu +EPCjjvbdlrYtysDi +EPCkKvbdezuxeIsw +EObkKvbdyNsHxTJD +DnbkKvbdemGWgMik +DoDLKvbdBhkCKhej +EOcLKvbdjvWmcaww +EPDLKvbdqTsgRrLU +EObkKvbdZyDimcLr +EPCjjvbdlrYtzTEJ +DoCkKvbdHgGyyYXg +DoCkKvbdZoNhddyj +EPDKjvbdhtzFWquC +EPCkKvbdDoCkKwDE +DoDLKvbdsrqsZZeD +EPCkKvbdiHJbxuiu +DoCjjvbdhlFEOUcZ +EPDKjvbdDigiuwjA +EPDKjvbdQdDBPqES +DoCjjvbdcTCjsdKB +DncLKvbdUsmUFkuj +EPDLKvbdnHEwlnGy +EOcLKvbdxVNEqYkn +DoDKjvbdEuxopNJe +EObkKvbdkClLQfuH +EPCjjvbdcTDLUEKB +EOcKjvbdEPDKkXDE +EPCjjvbdXsLaNUOx +DoDKjvbdFWZQQNKF +EPDLKvbdUtMtFlVj +EOcKjvbdzaAPGfal +DnbkKvbdHlBznXRL +DoDLKvbdTlVoBWPJ +EPCkKvbdDoCjkXDE +EOcKjvbdrzMQTAhO +EOcLKvbdozmdLXoA +DoDLKvbdzQnmIjXA +DoCkKvbdmgExMmgZ +EPCkKvbdzjUoocrt +EOcLKvbdwyhGFweS +EOcLKvbdWWhxVceH +DncLKvbdqqtkOKaN +DoCkKvbdOTTvHEuQ +DoDLKvbdjJehKMwr +DoCjjvbduDCtvuoP +DnbjjvbdqdEiPmvB +DnbjjvbdhtzEwRuC +DnbkKvbdRkYetfkT +DoDKjvbdCDpBVjNG +DoCkKvbdcSbjscjB +EPDLKvbdYpldiMdq +DoCjjvbdaaWEfPow +EOcKjvbdqZPHgQdY +DoCkKvbdeOdrjtUS +DoDLKvbdFaPRZJzm +DnbjjvbdRECaPqES +DncKjvbdaMjaruMg +EObjjvbduVnYJpsA +DnbkKvbdqTsfrSLU +DncKjvbdYqMeJMdq +EOcKjvbdvvlBWAuu +DnbjjvbdUxgtZkOn +EOcKjvbdOSsufduQ +EOcLKvbdtumxJqTA +DncKjvbdIryAsNXl +DoDKjvbdMuTRkNAX +DoDLKvbdxnSgwrhc +EOcKjvbdiHKCxujV +EObkKvbdeKJrVtzn +EPDLKvbdjhHMGGNk +EOcLKvbdkVwNdBww +EOcLKvbdygZMANEw +EPDLKvbdRXODcLhD +EPCjjvbdSPsfjFcw +DoDKjvbdYpleIldq +DoDLKvbdOEcsiIjd +DnbjjvbdddoRavbj +DncLKvbdHDkWKBjK +DoCjjvbdxxJKBoyk +EPDKjvbdYkqdUNkm +DoDLKvbdDnbjjvcE +DoCkKvbdVvhxVceH +EPDLKvbdWRnXbFMD +EObkKvbdliEUQtqa +EPCkKvbdNQXqVmfs +EOcLKvbdIGfyyYYH +DncKjvbdxUldpxlO +DoDKjvbdznopdcLx +DncKjvbdHDkVibKK +EPDLKvbdjlbLydgP +DoDKjvbdYTMAltOx +DoDKjvbdcSbkUEKB +EPCjjvbdzoQREblY +EOcKjvbdZxcinDMS +DoDKjvbdZyDjODMS +DoCjjvbdxZgfFwdr +EPDLKvbdaMkBsVMg +EPCkKvbduDDUvuno +DncKjvbdsCFmLgKy +DoDLKvbddeOrCWcK +DncLKvbdNddThhjd +EOcKjvbdBvzcheQW +EPDLKvbdeEnqbXCj +DoCjjvbdNrtVfduQ +EOcKjvbdZQmEiNFR +EPCkKvbdGFjSNiTq +EPDKjvbdZxcinCkr +DoCjjvbdkNBlZdgP +DoCkKvbdEYXkstTl +DncLKvbdYpmEhmEq +EOcLKvbdePFSkTsr +DoCjjvbdemFvfmKL +DnbkKvbdemFwGljL +EPDLKvbdmbJvxOnV +EPCjjvbdtbcVXVoP +EOcKjvbdFkErcHmV +DoDKjvbdVUMtFlWK +EOcLKvbdkMakydfo +DnbjjvbdIMBznWqL +EObkKvbdptUHRrLU +DnbkKvbdjJfHilwr +EPCjjvbdGYuUaDxC +EObjjvbdmtuZjjRf +DncLKvbdkCkkQfuH +DoDLKvbdtlXwBUBX +DncLKvbdCWzchePv +EObkKvbdrEEiPmua +EOcLKvbdYqNFIldq +DoDLKvbdfILWRnQg +DoDLKvbdqUUGrRkU +DoCjjvbdfMfWflik +EOcLKvbdOTTugEuQ +DncLKvbdjvWnDaww +EOcLKvbdsPuoKDVf +EPDLKvbdZirhPfaf +DoCjjvbdDwxLsstM +DnbjjvbdfHkWRmpg +DncLKvbdrpWOibuf +EPDLKvbdZtIhyESn +DncLKvbdwygfGYEr +EPCjjvbdeEoSCWcK +EPCjjvbdjuvmdBww +EObjjvbdqUTfqqjt +EOcLKvbdZjSgogBf +DoDKjvbdYqMdiMeR +DoCjjvbdKefICApu +DoDLKvbdMfcQNQVL +EPCkKvbdjggMGGNk +EObkKvbdCDoaVjMf +EObkKvbdWWiXuceH +EOcLKvbdURROuVHm +DnbjjvbdpssfrSLU +DncKjvbdgFkzNgHA +DnbjjvbdaSFbgtFk +DncLKvbdIxTahMQp +EPDLKvbdKWVFceGi +DncKjvbdFVyPomKF +DoDKjvbdZirgpHBf +EObjjvbdVqmwadkc +EPCkKvbdieLHVPAO +DncKjvbdZLqdUOMN +DoDKjvbdWWiYWDeH +EObkKvbdQwNdClID +DnbjjvbdMoxRVnGs +DncLKvbdrDdiPmvB +DnbjjvbdZQleJNFR +EOcLKvbdrDdhpOVa +EPDLKvbdYqNFImFR +DoDKjvbdEYXlTtUM +DoCjjvbdhuZeWqtb +EPDKjvbdMfcPlpVL +EOcKjvbdNQYQvNfs +DoDKjvbdiUzFXSVC +DoCkKvbdmRxtzSci +DnbjjvbdbiMikGXY +DoCjjvbdQdDBQQdS +EObjjvbdqZPIGqDx +DoCkKvbdkWWmdBxX +DoDKjvbdKxpirzuG +DoCjjvbdlBNPNALA +DoCjjvbdhzVGMROG +DoCjjvbdzoQREcMY +EPDKjvbdlAlnmALA +EPDLKvbdwuMeRZLn +EOcLKvbdYqMdiNFR +EObkKvbdOTTugEuQ +EOcKjvbdYTMAmUOx +DnbjjvbdRDcBQRES +DoDLKvbdidkHVPAO +EPCkKvbdSKyFtfjs +DoCjjvbdhytelQmf +DncLKvbdEztRElCi +EPDLKvbdRWnEDLgc +DoDKjvbdwuNFQyLn +EObkKvbdGLFTDHmV +DnbkKvbdShyiqABM +EObkKvbdUaCQsRSZ +EOcKjvbdjuwNcbXw +DnbkKvbdmfeXlnHZ +DncKjvbdsPuoKDVf +EOcKjvbdNGbomPtk +DoDKjvbdvPTzpkOt +EPDKjvbdJqZdneme +DncKjvbdqTtGqqkU +DnbkKvbdjggLeemk +DoCjjvbdVZIUZkOn +EPCkKvbdzjVPodTU +DncKjvbdnBjXYOnV +DoDKjvbdHgGzYxYH +EPCkKvbdSZigsCvA +EPCjjvbdtbbtvuno +DoDKjvbdPIAXyAZB +EObjjvbdRNXaxmtz +DoCkKvbdUyITykPO +EPCkKvbdssRryZeD +EObkKvbdJuuGEFGi +DoDLKvbdxZgfGXeS +EObjjvbduoTzqLOt +DoDKjvbdbrbkTcjB +DncLKvbdxxIiaoyk +DoCjjvbdFxtuBDxC +EPDLKvbdzaAPGgBl +EPDLKvbdpxnhGqDx +EOcKjvbdtSqsZZeD +EOcLKvbdMowpvOGs +EObkKvbdVBCRSpqy +DoCkKvbdZRNEiMeR +EPCjjvbdczYowyQb +DncKjvbdjgfkfGNk +DnbkKvbdssSTYzFD +EOcLKvbdVhYWYGxz +DncKjvbdKDJcQibx +DncKjvbdZHWdAPTJ +EPCkKvbdFjdsChNV +DoDLKvbdJcJcRJcY +EPCjjvbdRjyGVHLT +DnbkKvbdBcpBWKMf +DoCjjvbdxUmEpyMO +EPDKjvbdZoNiFEzK +DoCjjvbdPIAYZAZB +EOcLKvbdFejSOIsq +DoDKjvbdjggMGFmk +EObkKvbdWRnXadlD +EObkKvbdnGdxMmfy +DoDLKvbdLBKgNBxR +DoCjjvbdaSGChTek +EPCkKvbdSCEElIxk +EObjjvbdIxTbHlQp +EPCkKvbdOEcshhkE +EOcLKvbdbsCjsdKB +DncLKvbdCSaDUGXS +EPCjjvbdRzJgsDWA +EPDLKvbduCbuXVno +EOcLKvbdGdLViajK +DncKjvbdCWzdJEpW +DncKjvbdjuwODbXw +DncLKvbdqUTfqqjt +EOcKjvbdxUmFRYkn +DoCjjvbdVAaqSqRy +EPDLKvbdaMkBsUlg +EOcKjvbdGLFTCgmV +EPCkKvbdZeYGzgiC +DoCjjvbdwXLaWBVu +DoCjjvbdelevgMik +EPDKjvbdkHgMGGOL +DoCjjvbdcJMjKewY +EOcLKvbdwzHfGYEr +DncLKvbdlZTRryGt +EOcLKvbdfVzwoizs +EPDKjvbdhzUelRNf +EPCkKvbdiHKCxvKV +EOcKjvbdGFjRmhtR +EPDLKvbdGLEsChNV +DoDKjvbdYORAXuWU +DnbjjvbdpstHSSKt +EObkKvbdegkVqmpg +EPDLKvbdhyuGMQmf +EObkKvbdliDtQtqa +DoCkKvbdfNGXGlik +DoCkKvbdHfgZyXwg +DoCjjvbddndsKssr +EPCjjvbdZMSDsnLm +EObkKvbdEXxMTstM +EPDKjvbdJvUecdfi +DnbkKvbdVUMsekuj +EPCjjvbdPyNAGsSK +DoCjjvbdMSWmZuQz +EObkKvbdBcpBVjNG +DnbjjvbdezuxdiUX +EPCjjvbdBdQAvJlf +DncKjvbdOTUWHFVQ +DoDKjvbdaSGDIUFk +EOcKjvbdUGzmlWvF +EOcLKvbdjlakydfo +DoCkKvbdWSOXaeLc +DoDKjvbdznpRFDLx +DoCkKvbdwtldpxlO +DoDLKvbdGdLVjBjK +EObjjvbdmttykKSG +DoDKjvbdZjShQGaf +DoDKjvbdrDdhomvB +EPDLKvbdiUyeXSVC +DncKjvbdIsYaSmXl +DnbjjvbdVhXvYHYz +EPDKjvbdwzHfGXdr +EOcKjvbdxsOJMqbH +DoCjjvbdehKuqmqH +EPCjjvbdZdxGzhJC +EOcKjvbdsCGMlHLZ +DoCjjvbdOEcshhkE +DoCjjvbdEzsqElDJ +DncLKvbdURRPVVIN +EPCkKvbdZoOJFEzK +DnbjjvbdBiKajhfK +EOcLKvbdbUafwkTh +EOcLKvbdVZHszKoO +DnbkKvbdGKdsDIMu +DnbkKvbddoFSkUUS +DnbjjvbdPxmAGrqj +EPCjjvbdKNADzHVB +EPCjjvbdcyxpXxqC +DnbkKvbdLBLGmBxR +EPDKjvbdFWYopNJe +EPCkKvbdcJNKKewY +DoCjjvbdGLErcHmV +EPCjjvbdWXIxWDdg +DnbkKvbdQvmcbkhD +EOcLKvbdbVCGwjtI +DoCjjvbdmgFYMmfy +EPDLKvbdQdDApRES +DnbkKvbdWWhwvEFH +DnbjjvbdxZhFexFS +EPCkKvbdCIjakJGK +EPCkKvbdKQyeOfOF +DncKjvbdEObjkXDE +DnbjjvbdNGcPlotk +DoCjjvbdVUMtGMVj +EPDLKvbdelfWgNKL +DnbkKvbdqwPlDJZR +DncLKvbdbiMikFwY +EObkKvbdkNBkzEgP +DoCkKvbdmuUyjiqf +DncKjvbddneSjtTr +EPCkKvbdRkZFtgLT +EObkKvbdRjyGUgLT +EPCkKvbdKaKgMaxR +DnbkKvbdZMRdTnMN +EPCkKvbdqZOhGpcx +EPCkKvbdxwhjBozL +DncKjvbdGckViajK +EPCkKvbdiifHilxS +EOcLKvbdqUUGrRjt +EPCjjvbdbhljLGWx +DnbkKvbdhgKCxujV +DoDLKvbdJSyAsNXl +DoDLKvbdjgflFenL +EPCkKvbdMJBlQxAS +DncLKvbdUMVoAvPJ +DoCkKvbdkCkjpgVH +EPDKjvbdqGEEsvAh +EObkKvbdmRxuZrci +EObjjvbdNdctIhjd +EPCkKvbdCSaDTevr +EPCjjvbdRDcAopcr +EObkKvbdwtmEpyMO +EOcKjvbdqZPHfqDx +EOcLKvbdaNKbStmH +EOcLKvbdaSFcHsfL +DnbkKvbdRosgJecw +EObkKvbdkySrSyGt +EOcLKvbdwuMdqYkn +EPCjjvbdrDdhonWB +EPCkKvbdiBoDEwRR +EPCkKvbdEztQdlCi +EObkKvbdFyUuBEXb +EPDKjvbdOAIsUJrA +EPDKjvbdKCicRKCx +EObjjvbdSZihSbvA +DncLKvbdvAdYsPEh +DncKjvbdySnImSCH +EObkKvbdiVZeXRtb +EOcKjvbdsCFllHLZ +EPDKjvbdZeXfzgiC +DnbjjvbdMpXpvNgT +DoDLKvbdsCFllHKy +DoCkKvbdqYoHfpdY +DnbjjvbdRzKHrbvA +EOcKjvbdNHComPtk +EOcLKvbdCJLBjiGK +EPDLKvbdsZlPsAhO +DnbkKvbdemFvgMik +DoCjjvbdFyUuBDwb +DnbjjvbdrafMlGkZ +DncKjvbddZyPxYpb +EObjjvbdxZhGFwdr +EPCkKvbdEXwlTssl +DnbkKvbdANIYrvyx +EObjjvbddePRawCj +EPDKjvbdyNsIXrhc +EPCkKvbdhkeEOVDZ +DoDLKvbdAMgxrwZx +EPDLKvbdsQWPJbvG +DoCkKvbdkVvmcbXw +EPDKjvbdJYTbIMQp +DncLKvbdBsAcTewS +DncLKvbdxrnJNRag +EOcLKvbdmSYtzSdJ +EObkKvbdqdFJQNua +DoCjjvbdZyEKOCkr +DoCkKvbdZLrEUOLm +EPCkKvbdRNXaxnUz +EPDLKvbdnUuZjjRf +EObkKvbdmbKXYOmu +DnbkKvbdlZTSTYgU +EPDKjvbdGYuUaDxC +DncLKvbdFyVVAcxC +DoDKjvbdEvZPpMjF +EPDLKvbdSwjlNzjx +EPCjjvbdbKkeoNcA +DoCkKvbdMfcQMotk +DnbkKvbdyTNiNRbH +DncLKvbdFWYpQMjF +EPCkKvbdEvYopMjF +DncKjvbdeKJrWUzn +EOcKjvbdpssfrSLU +EObjjvbdKCjDRJbx +DnbkKvbdeUAUATMv +EPDLKvbdjKGIJlxS +DnbkKvbdpssfqrLU +EPDKjvbdqZPHgQdY +EPDLKvbdeAURNXif +DoCjjvbdypoMhiwA +EPDLKvbdGYtuAdXb +EObkKvbdRaceLiYk +DoCjjvbdXsMBNTnx +EOcLKvbdKCjCqKCx +DoCjjvbdYSlAmUPY +EPDLKvbdpstGrSKt +EPDKjvbdhtyeXRuC +EObjjvbdtlYXBUBX +EObjjvbdRMxByNtz +EObjjvbdhanbeWqR +EOcKjvbdpyPIHQcx +EPDLKvbdrRtjnLBN +DoDKjvbdNQYQvNgT +DnbjjvbdbsDKsdJa +DnbjjvbdDxYMTssl +EPDLKvbdnCKWxOmu +DncKjvbdILazmwQk +DoDKjvbdhgJcYuiu +DoCjjvbdlYrrSyHU +EOcKjvbdVUNUFkvK +EObjjvbdRyjHrbvA +DoDLKvbdDnbkKvbd +EOcKjvbdaNKbStmH +DnbkKvbdjblLRGtg +DncKjvbdxUleQyLn +EPDKjvbdLGFhBaQu +EObkKvbdqmZiyLgi +DoCjjvbdJuuGEFGi +EPDKjvbdqmZixlIJ +DoCjjvbdXnRAYVVt +EOcLKvbdWIYVxGxz +EPCkKvbdxZgfGYEr +EPDKjvbdfNGWfmKL +EPDKjvbdbrbjscjB +DoDKjvbdsPunjCvG +DoDKjvbdziuQQDsU +DoDLKvbdbhlijfWx +EPCkKvbdhgKCyWKV +EPDLKvbdGLEsCgmV +EOcKjvbdmIcspuSB +EPDKjvbdIwsbILqQ +DoDLKvbdpedEsvBI +DncLKvbdsPunjDVf +DncLKvbdIxTbHkqQ +DncLKvbdcSbkTdJa +DncKjvbdUWLpJsaR +DnbkKvbdsQVnjCvG +EPDKjvbdyXiJapZk +EPCkKvbdrzLosAgn +DncLKvbdNsTugEuQ +DoDLKvbdrykoraHn +EObjjvbduaDySoFI +DncKjvbdZHWdAOri +EPCjjvbdlqxtysEJ +DnbkKvbdOSsvHEtp +DoDKjvbdRotGjGDw +DoDKjvbdYfvdAOsJ +DoCkKvbdBhjajiGK +EObjjvbdCgLegAzc +DoDLKvbdhtyeWrVC +EOcKjvbdzitoocrt +EOcKjvbdNVTSKmAX +EPCjjvbdVYgsyjnn +EObkKvbdliEUQuRa +DoCkKvbdqFceUWAh +EPDKjvbdIsZAsMxM +DnbkKvbdUVlPjUBR +DoDKjvbdbUafwjsh +EObjjvbdQlxCZOUz +DoCkKvbdQvnEDLhD +EOcKjvbdUVlQKUBR +EPDKjvbdehKvRnQg +DoDLKvbdxmsIYTIc +EObjjvbdsCGNLfkZ +EObjjvbdmSYtzSdJ +DoCjjvbdiMEcnVDZ +EPCjjvbdypnlhiwA +DoCjjvbdRyihTDWA +DoCjjvbdZoOJEdzK +DoCjjvbdJpzEoGOF +DoCkKvbdYpmEiMeR +EPCkKvbdbhljKfWx +EPDLKvbdqYnggQcx +EOcLKvbdwjwEHzyf +EPCjjvbdLFegbAqV +DoCjjvbdMoxQvNgT +EPCjjvbdZsiIyETO +DoDLKvbdZQmFImEq +DnbjjvbdYkrDtOMN +EPCjjvbdjggMGGOL +DncLKvbdDwwlTstM +EOcKjvbdCWzciFQW +DoCkKvbdyYIiaozL +DnbkKvbdNsTufeVQ +DoDKjvbdjlakydfo +EObjjvbdUGznLvue +DoCjjvbdeFOqawDK +DoCjjvbdZnmiFEyj +EOcKjvbdVBCQrprZ +EOcLKvbdrovOjCvG +DncKjvbdrovPKCuf +EOcLKvbdlYrqryHU +EObkKvbdcyyPxZQb +EObjjvbdnBivwnnV +EObjjvbdjJehJlwr +DnbkKvbdOFDtJIjd +DnbjjvbdVAaqSqSZ +EObkKvbdrXPkbiZR +DoCjjvbdzaAPGfal +DncKjvbdZQldhmEq +EObjjvbdmoyxvLZC +DnbkKvbdmpZxujyC +DoCjjvbdvwLaWBWV +DncLKvbdiVZdvquC +DnbjjvbderBWzlDP +EPCjjvbdjbkjpfuH +DncLKvbdrafNLfkZ +DncKjvbdrWokbhxq +EPCkKvbdsZkosBHn +EOcKjvbdidjfuPAO +DnbjjvbdNGcPmQUk +EPCjjvbdrJAKFNOe +DnbjjvbdTukoitBR +DnbkKvbdySmhlrCH +EObkKvbdrXPkcIxq +EOcLKvbdFejSOItR +EObkKvbdmgExMnGy +EPDKjvbdqrVLOLBN +DoDKjvbdLAkHNCYR +EObkKvbdVrOXbEkc +DnbjjvbdEXwlUTsl +EPCkKvbdyXhjBpZk +EObkKvbdiifHjMxS +EOcKjvbdEKHiuxKA +EObkKvbdZLqdTmlN +EObkKvbdWRnXaeLc +DnbjjvbdWSNwaeMD +DnbjjvbdfNGWgNKL +DoDKjvbdoAKztIDn +DncLKvbdmaivxOmu +DnbjjvbdZLqcsnMN +EObjjvbdcTDKscia +EPCjjvbdOTTufeUp +DoDKjvbdGdLVjBjK +DncKjvbdcJNKLFvx +EOcLKvbdTYKkmzjx +EOcKjvbdZRMeImEq +DoDLKvbdKQyePFnF +DnbkKvbdNrtWGduQ +EPCjjvbdatbHXjtI +EPCjjvbdvwMAuaVu +EPDLKvbdnQZxvLZC +EObjjvbdtlYXAsaX +DnbkKvbduDDVWvPP +EPDLKvbdqTtGrSKt +EObjjvbdxnSgwsJD +EObjjvbdbKkenmcA +EPCkKvbdFaOqYizm +EOcKjvbdLGGHbBRV +DoDLKvbdRzJhTCvA +EPCjjvbdiMFDmtcZ +DnbjjvbdWWhwvEEg +EPCjjvbdJmAEZgVB +DoCjjvbdmuVZjirG +DoCjjvbdliEURUqa +DoDLKvbdnCKWwnnV +EPDLKvbdhgJbyViu +DnbkKvbdjggMFfNk +EObkKvbdEuxopMie +EPDKjvbdssRsYydc +DncLKvbdliDsqVRa +EOcLKvbdLBKflbYR +DncKjvbdzoPpeClY +DncKjvbdqFdEsvBI +DoCjjvbdZMRctOMN +DncKjvbdDnbkLWcE +EObkKvbdMfcQNPuL +DoDKjvbdUWMPjTaR +DnbjjvbdxmsHwsIc +EObkKvbdrDdhonWB +EPCkKvbdhgJcYvJu +DoCkKvbdlYsSSyHU +EPCjjvbdNdcsiJLE +DoDKjvbdhlEcmuCy +EObjjvbdJTZAsNXl +EPCjjvbdznpQeClY +DncLKvbdDxYMTssl +DoCjjvbdkVwNcbXw +EOcLKvbdMgDPlpUk +EObkKvbdXsMAlsnx +DnbkKvbdiBncEvqR +EPCjjvbdeFPSCWcK +DoDKjvbdmuUzKjSG +EPDKjvbdqrUkNjaN +DoDKjvbdhyuFlQnG +EOcKjvbdDigivYKA +DoDLKvbdJYUCHkqQ +DncKjvbdACqwiyiQ +EPDKjvbdEYXkstUM +DoDLKvbdKDKCpicY +DncLKvbdCDoaVjNG +EObkKvbdxZhFexFS +EPCkKvbdKDJcQjCx +DoDLKvbdEPCkKwCd +EPCkKvbdTfzmkwVe +DnbjjvbduWOYJqTA +DoCjjvbdcJMijfXY +EPCkKvbdmaiwYPOV +EOcKjvbddjJrVtzn +EObkKvbdpstHSRjt +EOcKjvbdyXiKCQZk +DnbkKvbdIsYaSmYM +DnbjjvbdwtmFQxlO +DnbkKvbdYpleJMdq +DoCjjvbdkNBkzFGo +EOcKjvbdbsCkUEKB +DoDKjvbdYlRctOMN +DnbkKvbdjuwOECXw +EPDKjvbdWRnXaeMD +DncLKvbdkDLkQgVH +DoDLKvbdFeiqnJTq +EOcKjvbdzHYlAMeX +EPCjjvbdJbjCpjDY +EPDLKvbdzitopDsU +DnbkKvbdziuPpDrt +DncLKvbdySnImSCH +DnbjjvbdySnImRbH +DoCjjvbdKjaIWAJy +DnbjjvbdTqRPUthN +DoCjjvbdURQntuIN +EObjjvbdQlxCYmtz +EPDKjvbdMtsSLNAX +EObjjvbdJbjDQicY +DoDKjvbdEPCkKwDE +EObkKvbdKQydoGNe +DoDLKvbdVwJXuceH +EObjjvbdnUtykJrG +DncLKvbdwMvANEEm +EPDKjvbdpyPHgQdY +DnbjjvbdUVkpKUBR +EOcLKvbdhfjCyVjV +EPDKjvbddoFTKstS +EPCkKvbdANHyTXZx +EPCkKvbdUxhTyjoO +EObjjvbdkVwNdBxX +EPDKjvbdDoCjjvbd +DnbkKvbdWWhwudEg +DnbkKvbdyTNiMrCH +DoDLKvbdelewGljL +DncLKvbdUGznMWue +DncKjvbdwygfFwdr +EPCkKvbdJqZePFnF +DnbjjvbdNsTugEuQ +DoDKjvbdQcbaPqDr +DncLKvbdfMevgNJk +DncLKvbdlrZVZrdJ +DoCjjvbdFjeTCglu +DnbjjvbdYqNFImEq +DoCjjvbdsCGMkfkZ +DncLKvbdhuZdwSUb +DoCkKvbdrXPkbiZR +DoCjjvbdZRMdiMdq +DoDKjvbdemFvgMjL +DoCjjvbdygZMANEw +EOcKjvbdZRMeIldq +EObkKvbdiHJcZWKV +DncKjvbdCJKbKiFj +EObjjvbdzROlhjXA +DnbjjvbdDoDLKvbd +EPDLKvbdVYgtZjnn +EObkKvbdDoCjjwDE +DnbkKvbdrouoJbuf +DoCkKvbdyTOImRag +EPDKjvbdBcpBVilf +DoCjjvbdCWzdJFQW +EPCkKvbdbrbjscjB +EOcLKvbdwkWdHzzG +EPDKjvbdnGeXlnGy +EPCkKvbdznpREcLx +EPCkKvbdZMRcsnLm +EOcKjvbdJSyArmXl +DnbkKvbdZMSDtNkm +EPDKjvbdAMgySvzY +DoDLKvbdyYJJbPzL +DoCkKvbdLAjgMaxR +DoDLKvbdWIXuxGxz +DoCjjvbdqwQLbiYq +DnbkKvbdpyPIHQcx +EOcKjvbdfNGXHNJk +DncKjvbdqYnhHQdY +DncKjvbdeEnrBvcK +EPDKjvbdZjTHpGaf +DoDLKvbduoTzqLPU +DnbkKvbdIjEAJofd +DnbkKvbdxnSgxTJD +DoDLKvbdXsLaMsnx +DnbjjvbdaRfDHsek +DoCkKvbduLwwAtBX +DnbkKvbdrpWPJcVf +DoDKjvbdrbFlkgLZ +DoCkKvbdlqxtyrdJ +EObkKvbdRyihSbvA +EObkKvbdWRnYCFLc +DoCkKvbdOEcshhjd +DnbkKvbdZjTHpHBf +DnbjjvbdcyyPwxpb +DncLKvbdkVvmdCXw +DncLKvbdcScKtEJa +DnbjjvbdrSVLOLBN +EObkKvbdiGjDYvKV +EPCkKvbdEJgjVwjA +DnbkKvbdRosgKFdX +EPDLKvbdcScKtDia +DoCjjvbdtbcVXVno +DncKjvbdhgJbyViu +EPCjjvbdjJehKNYS +EObkKvbdyOTIYTJD +DnbkKvbdRaceMJYk +DoCkKvbdqiAKEmOe +DoDLKvbdEKHiuwjA +EObkKvbdxUldpxkn +EObkKvbdFejRmhtR +DncLKvbdSBcdlIyL +EPCkKvbdxZhFexFS +EObjjvbdwjwEHzzG +EPCjjvbdmRxtzSdJ +EPDLKvbdEvYooljF +DoCkKvbdmgFXlmfy +DoCjjvbdtkxXBTaX +EObkKvbdmgExMnHZ +DncLKvbdjvXODaww +DoCkKvbdSCEFMIyL +EPDKjvbdVYhTykOn +DoDLKvbdNsUVgFUp +DncKjvbdRXOEClID +DoDKjvbdnVVZkKSG +DoDKjvbdWWhxVcdg +EPCkKvbdwuNFQxlO +DncLKvbdKeegbBRV +DncLKvbdUWLpJsaR +EOcLKvbdNxOuzcmt +EObjjvbddwzUUSFz +DoCjjvbdJXtBhMQp +DoCkKvbdLGFgbBRV +EOcLKvbdcJMjKewY +DnbjjvbdxUmEqYkn +DnbkKvbdjbkjqGtg +EPCkKvbdIHGzYwwg +DnbjjvbdrpWOjCvG +DoDKjvbdZMRctNkm +DnbkKvbddZyPwxqC +DoCjjvbdtcDVWuno +DoCkKvbdJcKDRJcY +EOcLKvbdmbKWwnnV +EPDKjvbdcasNSAUN +EPCkKvbdUaBpsQqy +EObkKvbdJutedFHJ +DoDLKvbdBhjakJFj +DnbkKvbdnUuZjiqf +EPDKjvbdpxoHgQcx +DnbjjvbdZjTHofbG +EObkKvbdkxsSSxgU +DnbjjvbdWRmwbElD +DoCkKvbdRkZFuGjs +EPCkKvbdwNWANDdm +EObjjvbdTkvPBVni +DoDKjvbddndrkTtS +DncLKvbdZtJIxdSn +EOcLKvbduaDyTOeI +EOcKjvbdxZgfGXdr +EOcLKvbdkySrTZGt +EPDKjvbdVwJXucdg +EPDLKvbdatagYLUI +DoCjjvbddZxpYZQb +EPDKjvbdtunXjRTA +DoDLKvbdWSOYBeMD +DoCjjvbdHlBznXRL +EPDLKvbdcyxpXxpb +DnbjjvbdAMhYsWzY +EObjjvbdraemLgKy +EPDKjvbdJpzFOenF +DoCjjvbdZnnIeEyj +DoCjjvbdrWpLbiZR +EOcKjvbdLqwMytpz +DncKjvbdKQzEoFme +EPDKjvbdZRMeJMeR +DncKjvbdEuxpPlie +EOcLKvbdFWYpPlie +EOcLKvbdjblKpgUg +EOcLKvbdiBnbdwQq +DoDLKvbdOTTufeVQ +EPDKjvbdpyOggQdY +DnbkKvbdGBOqYizm +EObjjvbdRjxfUfkT +EPCjjvbdUMVoAuoJ +DoDLKvbdVwJXvEEg +EObkKvbdnCKXXoOV +DoDKjvbdNPxRVmgT +DncLKvbdZsiIxdSn +EPDKjvbdjlalZeHP +DoDLKvbdeFPSBvbj +DoDKjvbdVqnXbFMD +DncKjvbdHffyyYYH +EOcLKvbdBhjbLJFj +EPDKjvbdJvVGEFHJ +EOcKjvbdgQBzvdYI +EPDLKvbdpyOggRDx +EObjjvbdKQyeOfNe +EPCjjvbdtcCtwVno +EPCjjvbdQvmdClHc +DnbkKvbdyXiKBoyk +DncKjvbdqTsgSSLU +EObjjvbdyNrgxShc +DnbjjvbdRkZFuGjs +EObjjvbdYfvdAOri +DoDKjvbdkMbMZeGo +EPDLKvbdCIjbLIej +DoDKjvbdHffyxwwg +EPCkKvbdGdLVibJj +DoCkKvbdaaVdepQX +DnbkKvbdSQUGifDw +EPCkKvbdqYngfpdY +DnbkKvbdxUleQyLn +DoCjjvbdqlyixkgi +EPCkKvbdjgfkfGNk +EObjjvbdeFOqavbj +DoDLKvbdYkrDtNlN +DoCkKvbdjhGlFenL +EPCjjvbdijFhJmXr +EObjjvbdnGeYMmfy +EOcLKvbdbhmJjfXY +EOcLKvbdLBKfmCYR +DncLKvbdJSxaSmXl +EPCjjvbdsQVnicWG +DoDKjvbdjhHLfFnL +EObkKvbdjuwOEBww +DoCjjvbdiBncEvpq +EOcLKvbduLxWaUAw +DncLKvbdhuZdwRtb +EOcKjvbdjvWnECXw +EObkKvbdZeYGzghb +DoDLKvbdNQYQumgT +DoDKjvbdJpydoFnF +EPCkKvbdRjyFuGkT +DnbjjvbdraelkgKy +EObjjvbdfNGXHMjL +DoDLKvbduWNwiqTA +DncKjvbdnVUzLJrG +DoDLKvbdehKvSOQg +EPDLKvbdwtmFRYkn +DoDKjvbdKfFgaaQu +DncKjvbdCTBDTfXS +EObjjvbdDoCjjwCd +EPCjjvbdYTMAmUOx +EOcKjvbdiMFDnVCy +EObkKvbdjlalZeHP +DnbjjvbdCJLCLIfK +DoDLKvbdZMRdUNkm +DnbjjvbdURRPVUgm +EObjjvbdJcJbpibx +EObkKvbdrWpMDJZR +EObjjvbdjuwNdBxX +EPCjjvbdbBVdfQQX +EPCjjvbdKRZeOfOF +DoCkKvbdKDKCqKCx +DoCjjvbdkVvmdBxX +EPDKjvbdvAdYroEh +EOcLKvbdtcCuXWPP +EPCjjvbdczZQXxpb +DncKjvbdUxhUZkPO +EObjjvbdlrYtysEJ +DncLKvbdcScLUDia +EPDKjvbdBsAbsevr +DoDLKvbdqTtGqrLU +DoDKjvbdSCEFLiYk +EPCjjvbdRWmccLgc +DncLKvbdNQYQunGs +EObkKvbdmbKXYPNu +EPCjjvbdfMewGmKL +EObjjvbdzROmIiwA +DnbkKvbdliETptqa +EPDKjvbdHlBznWpk +DoCkKvbdUaBpsQqy +DoCkKvbdWSOYCFMD +DoDLKvbdxmrhYTIc +DncLKvbdLAkGlbYR +DncKjvbdlhctRUqa +DoCjjvbduDCtwVno +DnbkKvbdIjEAKQHE +DnbjjvbdiLddNuCy +EPDKjvbdEXwktUTl +EPCjjvbdyNrgwsJD +EObkKvbdnPzYujxb +EPDKjvbdznoqEcMY +EPDKjvbdZRNEhleR +DoCjjvbdGQATXHFy +EPCjjvbdyqPNIiwA +EOcKjvbdkxrrTYgU +EOcKjvbdcImKLFvx +DoCkKvbduoTzpkPU +EPCjjvbdJXtCIMQp +EOcKjvbdrpVoJbvG +DncLKvbdqZPIHRDx +DnbjjvbdTAFJHand +EOcKjvbdtcCuWuno +DncLKvbdfIKurNqH +DncKjvbdLrWmZtpz +DoDLKvbdMtsRjmAX +EObjjvbdLGGHbBRV +EObkKvbdCWzchePv +EOcKjvbdZxcjODMS +EObkKvbdzaAPGgBl +DoDLKvbdKVtecdgJ +DnbjjvbdHDjvJbJj +EPCjjvbdLiCLqYAS +EPDLKvbdFVxpPmKF +DoDLKvbdZisIPgBf +DncLKvbdTppoUtgm +DnbjjvbdpyPIGpdY +DoDLKvbdEztRElCi +DncLKvbdHgGzZYYH +DnbjjvbdZLqctOMN +DnbkKvbdqTtGqqkU +DnbjjvbdiMEcnVCy +EPDKjvbdvBDxrneI +DoDKjvbdemGXHNJk +DoDKjvbdhficYvKV +EObjjvbdegkWSOQg +DoDLKvbdOFDtIiKd +EPCjjvbdBdQAuimG +DoCjjvbdpyPHgREY +DncKjvbdJXsbHkpp +DoDKjvbdRbEElIxk +DoDKjvbdsQWPJcWG +EObkKvbdsCGNLfkZ +EOcLKvbdzaAPGgCM +EObkKvbdzjUoodSt +DnbkKvbdemFvgMjL +DnbkKvbdWWhxVcdg +DncLKvbdxrmiMqag +EPCkKvbdMSWlytpz +EObjjvbdwNWAMdFN +EPDLKvbdlrYtzTEJ +DnbjjvbdVqnYBeLc +DncKjvbdnHEwmOGy +DnbjjvbdtbbuWvPP +DncKjvbdmIcspuSB +EObkKvbdEOcKkXCd +EOcKjvbdDncKkXCd +EPDLKvbduaDxrndh +DoCjjvbdOFDshhkE +DnbkKvbdRaceLhyL +EPCkKvbdZshhyDrn +DoCjjvbdCSaDTfWr +EOcKjvbdqUTfrSLU +EPDLKvbdtTRryZdc +DoDLKvbdkyTRsZGt +EPDKjvbdyqPNIjXA +DoCkKvbdNUrrKmAX +DoCjjvbdSCDeMIxk +EObkKvbdkMbLzEgP +DncKjvbdEvZPpMie +DoCkKvbdyYIibQZk +EObkKvbdNPxQumfs +EOcLKvbdDncKjvbd +EPCkKvbdozmcjxPA +EPDKjvbdCIkCLIfK +DncKjvbdcyxoxZRC +DoCkKvbdeOdrkUUS +DoCjjvbdhzVFlQnG +EObjjvbdOFETiJLE +DncKjvbdhyuGLqNf +EObkKvbdRWmdClID +DoCjjvbdFpATWgFy +DnbkKvbdlqxtysDi +EObjjvbdqmZjYkhJ +DoDKjvbdZyDjODMS +DoCjjvbdEJhJvYKA +EOcKjvbdqTsgRrLU +EOcKjvbdZsiIxcrn +EObkKvbdIHGzZYYH +EPDKjvbdHgGyxxXg +EObkKvbdxmrgwriD +EPCkKvbdxrnJNSBg +DnbkKvbdjhGkefOL +EPCjjvbdKQydoGNe +EOcKjvbdqvpMDJZR +EObjjvbdQdDBQQdS +DoDKjvbdSKxfVHKs +DoDKjvbdbLLeoODA +DoDLKvbdBsAcUGWr +DoCjjvbdRzKHrbvA +EObjjvbdfMfXGljL +EObkKvbddeOrCWbj +DoDKjvbddjJrVtzn +DoDLKvbdhtydvqtb +DnbjjvbdRNXayOUz +EPDLKvbdRjyFtgKs +EObkKvbdsPuoKCvG +EPCkKvbdYqNEiNFR +DncKjvbdUxgsyjnn +EPCjjvbdZRMdhldq +DoDLKvbdEJhKWXjA +DoCkKvbdQwODblID +EPCkKvbdssRrxzFD +DnbjjvbdZxdKOCkr +EObjjvbduCcUwVno +EOcKjvbdmuUzLKRf +EPCjjvbdfpBzvcwh +DnbjjvbdMowpvNfs +EPDKjvbdGLErcHmV +EPDLKvbdZoOIeEyj +DncLKvbdSLZGUgKs +DncLKvbdlqyUzTEJ +EPCjjvbddePRawDK +DncKjvbdHEKvKCJj +DoDKjvbdeEnqavcK +DoDLKvbdtSrTYzFD +EPDLKvbdxUmFQxlO +DnbjjvbdLLBIWAJy +EOcLKvbdMowqWNfs +EPDKjvbdptUGrSKt +DoDLKvbdHEKvKCKK +EPCjjvbdJcJbpjDY +DnbjjvbdMuTRkNAX +DnbkKvbdEzspdlDJ +DncLKvbdVUMsekvK +EPDKjvbdOTUVgEtp +DncKjvbdAMgySwZx +DoCkKvbdwtmFRYkn +EObjjvbdIjEAKPgE +EPDKjvbdRpTfjGEX +DncKjvbdFjeSbglu +EObkKvbdjFLGtoAO +DoCkKvbduWOYJqTA +EPCkKvbdVAapsQrZ +DnbjjvbdVwJXudEg +DoDLKvbdUtMsfLvK +EPCjjvbdHELVjBij +DncKjvbdRWnECkhD +EPDLKvbdZsiJZDsO +DncLKvbdnPzZWLYb +EPCjjvbdznoqEcMY +EOcKjvbdzoQQeDMY +DnbjjvbdznpQdbkx +EPDKjvbdeYZtTrFz +DoCkKvbdkySrTZHU +DncKjvbdCSaDUGXS +DoCkKvbdcJNJjfXY +EOcLKvbdCEQAvJlf +EPDKjvbdyzdmqhJI +DncLKvbdNPwpvNgT +DoDKjvbdqmZixkgi +EOcKjvbdVYhUZkPO +EObkKvbdhgJbxvJu +DoDKjvbdUQqPUuHm +DncLKvbdqvolChyR +EPCkKvbdEXxMTssl +DnbkKvbdHgGzYwxH +DoDLKvbdIidAJpGd +DnbkKvbdZLqdUOMN +DnbkKvbdGckViaij +DoCkKvbdFVxopNJe +EOcLKvbdRbEFMIyL +EObkKvbdLAjflawq +EObjjvbdziuPodTU +EPDLKvbdQwNdCkhD +EPCjjvbdZxdJmcLr +EPDLKvbdxrmhlqag +DoCkKvbdSPsgJfDw +EPCjjvbdkDLjpgUg +DnbjjvbdtbcUwWOo +DnbkKvbdWIXuxHYz +EObjjvbdEvYpQMie +DoDLKvbdIHGzZXxH +EPDLKvbdVYgszKoO +DncKjvbdhancEvpq +EPCjjvbdcJNKKewY +EPDKjvbdWWhwvEEg +EOcLKvbdvAdYsOdh +EObkKvbdcyyPwxqC +EObjjvbdSPtGifDw +EOcLKvbdkMalZeHP +EPDKjvbdYlRctNlN +DoDLKvbdKWVGEFGi +DncLKvbdMgColouL +DncLKvbdhbPCeXRR +DncLKvbdDwxMTstM +DoDKjvbdvAcySndh +EObkKvbdXGYytAPT +DoCjjvbdmuVZjjRf +EOcLKvbdDGlFgAzc +DoDKjvbdiBncFXRR +DoDKjvbdkaMnmALA +DncKjvbdVBCQrqSZ +DoCkKvbdVviYWEFH +EObkKvbdAMhZSwZx +DoDLKvbdeAUQlwjG +DoDLKvbdZxcjODMS +EOcLKvbdrpWPKDVf +EPCkKvbdWRnYCFLc +DnbkKvbdKeehBaRV +DoDKjvbdMSXMzUpz +EOcKjvbdRkZGVGjs +DoDLKvbdFkFScIMu +DoCjjvbdZjTHogBf +DnbkKvbdnBivwnmu +EOcKjvbdCTAcTevr +EOcKjvbdVviXvDeH +DoDLKvbdliDsptqa +EPDLKvbdZirgpGaf +EPCjjvbdaRfChUFk +EPCjjvbdkClKqGtg +DoCjjvbdKQyeOfOF +EPCkKvbdqvpLbiYq +DnbjjvbdCTBDTfXS +DoCjjvbdOEctIhkE +EObjjvbdbVCHXkUI +DncKjvbdxnTIXrhc +DnbjjvbdezvYdhsw +EPCjjvbdDwwkstUM +EPCkKvbdaaVdepQX +DoDLKvbdjlbMZeHP +DoDLKvbdqAiFAXHd +EPDLKvbdGLEsCglu +EPCjjvbdZyDinClS +EPCkKvbdSLYeuGkT +EPDKjvbdwyhGFweS +EOcLKvbdjJfIKNYS +DoCjjvbddeOrCXCj +DoDKjvbdkxrqsZHU +EOcKjvbdGYuVBEYC +DncKjvbdHkazmvqL +DnbkKvbdZsiIxdSn +EObkKvbdhanbeXQq +EOcLKvbdMpXqWNfs +DnbkKvbdEztQdkcJ +EPCjjvbdDjHjWXjA +EOcKjvbdNQYQvNgT +EPCkKvbdNHCpNPtk +DoCjjvbdbsCkUDjB +EObkKvbdOStWGeUp +EOcKjvbdVqnYBdlD +DoCkKvbdvlvANDeN +DoDKjvbdnQZyWKyC +EOcLKvbdkyTRsYft +EOcKjvbdnVUyjiqf +EPCjjvbdXnRAXtut +EPDKjvbddZxpXxpb +EPDLKvbdfHjvSOQg +DncKjvbdXsMBNTnx +DncKjvbdEARiMzXX +EPCjjvbdOStVgEuQ +DnbjjvbdHELWKCKK +EOcLKvbdehLWSOQg +DncLKvbdYkqctOLm +DoDLKvbdxsOJMqbH +DoCjjvbdzGyMANFX +DoCjjvbdSCEElJZL +DoDKjvbdRkYeuHLT +EOcKjvbdXsLaMsnx +DnbjjvbdePFSkUUS +DncKjvbdGZUuAdXb +EOcLKvbdlZSqsZGt +DncKjvbdiCPCdwRR +EObjjvbdjvXOEBxX +EPDLKvbdRXOEDMHc +EPCkKvbdZisIQHCG +EPDKjvbdjKGIKNYS +DncLKvbdWWiYVdEg +DnbjjvbdaMkBruNH +EOcLKvbdOFEThiKd +DoCkKvbdVZHszLPO +DoDKjvbdiHJcYvJu +EPCkKvbdwuNFRZLn +EObkKvbdJqZdoGNe +EOcKjvbddndsLUUS +EOcLKvbdBraCtGWr +DncLKvbdxrnJNRbH +DoDLKvbdCWzciFPv +EPCkKvbdtlXvaUAw +DoCjjvbdMfbomQUk +DoCjjvbdfoazwDxI +DoCkKvbdauCHXkUI +DnbjjvbdaogHELzd +EPCjjvbdTulPisaR +EPCkKvbdOSsvHEtp +DoDLKvbdTkuoBVni +EPDKjvbdVBBqTRSZ +DnbjjvbdEJgivYKA +DncKjvbdJXtBgkqQ +DnbkKvbdbsCjsdJa +EPCjjvbdhlEcnUby +EObjjvbdssSSyZdc +EObkKvbdhgKCyWJu +EObkKvbddeOqbWcK +DoCkKvbdqvpLcJYq +EPDKjvbdxZgefXeS +EOcLKvbdkVwOEBww +EPDKjvbdemFvfljL +EPCjjvbdFkErcIMu +EOcKjvbdZyEKNcMS +EPDKjvbdqlzJxlHi +EPCjjvbdmbJwXnmu +EOcLKvbdcTDLTcia +DoCkKvbdyzdmqhJI +DnbjjvbdGdLWKBij +DoDKjvbduaDxsPEh +DoDKjvbdZshhxdTO +DncKjvbdptUGqrKt +EPCjjvbdJvVFceGi +EOcKjvbdddoRawDK +DoCkKvbdfMfXHMik +EObjjvbdVAbRSpqy +EObkKvbddZyPxYpb +DnbkKvbdVYgszKnn +DoCkKvbdZMRdUNkm +EObjjvbdTvMPitBR +EObkKvbdIxTaglQp +EObkKvbdGGKSNiUR +DoCkKvbdGBOpyJzm +EPCjjvbdqrUjmjaN +DncKjvbdIMBzmvpk +EPCjjvbdcyxoxYpb +EOcKjvbdmIcsqUrB +DoCkKvbdqvolChyR +EPCjjvbdkHgMGGOL +EPDLKvbdpaIeAWgd +DncLKvbdqvokcIxq +EOcKjvbdZsiJYcrn +EObkKvbdyYJKBpZk +DoCkKvbdKDKDQicY +EObkKvbdlhdTptqa +EObkKvbdyXhjBpZk +EObkKvbdKNAEZfta +EOcLKvbdRyihTCvA +DncLKvbdtcCtwVno +DnbjjvbdVZITykOn +DoCjjvbdJSyArlwl +EPDKjvbdDxYLtUUM +EPDKjvbdvlvANEFN +DoDKjvbdrykpTAgn +DnbjjvbdeYZtUSFz +DoDKjvbdzjVQQETU +EObjjvbdiHJbyVjV +DoCjjvbdcScLTcjB +DncLKvbdhaoDEwQq +DnbkKvbdQlwbZNtz +EPCjjvbdEARiMzXX +EPCjjvbdGFjSOIsq +DoDKjvbdrXPlChxq +DoDLKvbdYqMeImEq +DoDKjvbdOFETiJKd +EPCjjvbdCTBDUFvr +DoCkKvbdZoOIdeZj +DncLKvbdHgHZyYXg +EOcLKvbdCSaCsevr +DoCjjvbdsQWOjCuf +DoDKjvbdKWUfDeGi +EOcKjvbdzitpPcrt +EPDKjvbdZyDimcMS +EPCjjvbdBcpAuilf +EOcKjvbdqwQMCiYq +EOcLKvbdsrrTZZdc +EObjjvbdSQUHKGEX +DoDLKvbdcyxoxZRC +EObkKvbdWXJYWEFH +DnbkKvbdhgKDYuiu +DoDKjvbdrSVLOKaN +EPCjjvbdMoxQumgT +EPDKjvbdcbTMrATm +EPDKjvbdznopdcMY +DnbjjvbdzdzOzdyp +EObjjvbdGYuVBEXb +EPDKjvbdiZtekpnG +DoDLKvbdvvlAuaVu +DoDKjvbdEYXkstTl +EPCjjvbdauCHYKsh +DoCjjvbdDjIJuwjA +EObjjvbdkNCLzFGo +EPDLKvbdiGicZWKV +EPCkKvbdtlXvaTaX +DoCkKvbdpyOggQcx +EObjjvbdtTSSyZdc +DoDLKvbdiZtelROG +EOcLKvbdWRnYCFMD +EPDLKvbdNddUIhjd +DncLKvbdEObjjvbd +EPDLKvbdVUNTelVj +EPCjjvbdVhXvYGxz +DoCkKvbdfRaWzkbo +DoCjjvbdRjyGVHKs +DoCjjvbdSKxfUfkT +EOcKjvbdaRecITek +DoCkKvbdEJhKVwjA +DoDLKvbdwXLaWBVu +EPDLKvbdLYqJrztf +DncKjvbdUMVoAuoJ +DnbjjvbdvmWAMcdm +EObjjvbdpssfqrKt +DnbjjvbdhlEcnVDZ +EOcKjvbdNsUWGeVQ +EObjjvbdVUNTekuj +DnbkKvbdVYgsykOn +EObkKvbdpssgSRjt +DncKjvbdVZITzLOn +DoDKjvbdGGJrNiTq +DoDLKvbdACqwizJQ +DoDKjvbdIryArmXl +DoCkKvbdZMRdTmlN +DnbkKvbdrovPKDVf +EObkKvbdrounjDWG +DnbjjvbdCSaDTevr +DnbjjvbdUyITyjnn +DnbkKvbdKRZeOfOF +DoCkKvbdDigiuxKA +EOcKjvbdxsNhlrCH +EOcLKvbdDjHiuxKA +DncKjvbdXmqAXtvU +DnbjjvbdqFdFTvAh +EObkKvbdxrmhmSBg +DoCjjvbdIidAKPfd +EOcKjvbdKQydoGOF +DnbjjvbdlqyUzSdJ +EPDKjvbdtvOYKQsA +EPCkKvbdcIljLFvx +DoCjjvbdYqNEhldq +EPDKjvbdczYpYZRC +DoDLKvbdiBoCeXQq +EOcLKvbdiCPDFXRR +EPDLKvbdZisHofaf +EPDKjvbdmIdURVSB +EPDKjvbdZRNFIldq +DoDKjvbdJpydoFme +DoDLKvbdWWhwudEg +DncLKvbdDnbjjwDE +DncKjvbdqTsfqqkU +DncKjvbdKDKDRKDY +DoDKjvbdTulQJsaR +DoCjjvbdSBdFMIyL +DncLKvbdqTtHSSKt +EOcKjvbdBcoaVjMf +EObjjvbdiiehKNXr +EObjjvbdCWzciFQW +EPDLKvbdWSNwadlD +EPDKjvbdKVuGEFHJ +DoCkKvbdZMRdUNlN +EPDKjvbdZRMdiMdq +EPCkKvbdxUmEpyMO +DoDLKvbdRkYfVHKs +EObjjvbdIwtCIMQp +EPDKjvbdmJDsqUqa +EPDKjvbdrDeJPmvB +EOcKjvbdTvMPisaR +DncKjvbdMtsRjmAX +DnbjjvbdlqyUysDi +EPDKjvbdQwNdClID +DncLKvbdRjxfVGjs +EObkKvbdauBfxKtI +DoDLKvbdiZtfLpnG +DoDKjvbdhancFXRR +DoDKjvbdREDBQQdS +EObjjvbdrzMQTBIO +EOcKjvbdcImKKfXY +DoDLKvbdijGIKNXr +DncLKvbdgGMZmfgA +EPCjjvbdZnmheFZj +EPDKjvbdmuVZjiqf +EObjjvbdeFPRawDK +EPDLKvbdrNZiyLhJ +EOcKjvbdlhdURUrB +EPDLKvbdGGJrNhtR +EOcKjvbdiGibyWKV +EOcKjvbdQlwbZNtz +DncLKvbdnVUzKiqf +EOcKjvbdbsDKscjB +EPDLKvbdDnbjjvcE +DoCkKvbdySmhmRag +DncKjvbdkyTSTYft +DoDLKvbdEYXkstUM +EOcKjvbdiHJbyVjV +EOcKjvbdsQVnicWG +DoCkKvbdoznDkYPA +EObkKvbdURQoVVHm +EPDLKvbdFfKSNiTq +DnbjjvbdVgxVwgYz +DnbkKvbdmfeYNOHZ +DoDKjvbdyqPNIiwA +EObjjvbdFVyQPlie +EOcLKvbdGdKvKBij +EPCjjvbdDwxMUTtM +DoCkKvbdKVtfEEfi +DoCkKvbddjKRvUzn +EObkKvbdliEURVSB +EPDLKvbdWSNwaeMD +EOcLKvbdJqZdoFnF +DnbjjvbdKxqJrzuG +DnbjjvbdmuUyjjSG +EPDLKvbdADRxKZhp +EPCkKvbdiCPDEwRR +EObjjvbdTXkMNzkY +DnbjjvbdMgDPlouL +EPCjjvbdyzeNqghh +EOcKjvbdmuUyjjSG +EPDKjvbdDoDLKvcE +EPDLKvbdNxPVzdNt +DoDKjvbdBhjbKhfK +DnbjjvbdZLrETmlN +DoCkKvbdHffyxwwg +EOcKjvbdYSlAmUPY +EPCjjvbdtTSTYzFD +DoCjjvbdFjeTCgmV +EObjjvbdNwnuzcnU +DoDLKvbdSPsfiecw +DoDKjvbdKVtedFGi +EObjjvbdUaCQsRRy +EObkKvbdbsDLUDjB +EObkKvbdEOcKjvcE +EPCjjvbdyNsIYShc +EOcLKvbdbVCGxKsh +DoDKjvbdlZSqsYft +DoCjjvbdUslselWK +DncLKvbdbUbHXkUI +DnbkKvbdYkqcsmkm +DncKjvbdXsMAmUOx +DoDKjvbdJuuFcdgJ +EOcLKvbdGLFTChNV +DoCkKvbdaaWEfQQX +DncKjvbdVqnXbFMD +EOcKjvbdZyEJnClS +DoCkKvbdNdctJIjd +DoDLKvbdmaiwYOmu +EPCkKvbdmbJvxPOV +DncLKvbdTqRPUuIN +EPDLKvbdGGKSNiUR +EPCjjvbdIwtCIMQp +EOcKjvbdHDjvJajK +EOcLKvbdZyEJnDMS +DnbkKvbdrWpMDJZR +EOcLKvbdbUagXjtI +EOcLKvbdLGFgbBRV +EOcKjvbdqvpMDIxq +EPDKjvbdOAJSsjSA +DncKjvbdsrqsYyeD +DnbjjvbdtkwvaUBX +DnbjjvbdGQASwGfZ +EObkKvbdURROtuIN +EObkKvbdiUydwRtb +EOcLKvbdqlyixkhJ +EPCkKvbduaEYroFI +DoCkKvbdnUtyjiqf +DoCkKvbdssSTYzFD +DncLKvbdeATqMwjG +DnbkKvbdqlyjYlHi +DncLKvbdTAEhhCOd +EOcLKvbdpxoIHQdY +EPDKjvbdEXxLsstM +DncLKvbdbLLfPNcA +DoDLKvbdCWzdIeQW +DnbjjvbdWSNwbElD +DoDKjvbdGFjSOJUR +DoCjjvbdmttzKjRf +EPCjjvbdqmZjZMHi +DncLKvbddwzUTqez +EObkKvbdrEFIpOVa +DnbjjvbduMYWaTaX +EPDKjvbdTAEiIBoE +EOcKjvbdVrNwaeMD +DoCjjvbdSwkMNzjx +DoDKjvbdZoNheEyj +EObjjvbdFpASvgGZ +DnbkKvbdvBDxsPEh +DoDKjvbdIHGzYxYH +EOcLKvbdhanbeXQq +EObkKvbdACqxJyhp +DoDLKvbdgQBzwDxI +EObjjvbdOYOuzdNt +DnbjjvbdRWmdDMHc +EPCkKvbdePFTLUUS +DnbkKvbdHlBznWpk +EPCkKvbdqlyixlIJ +DnbjjvbdIHHZyYXg +EObjjvbdBcoaVimG +EOcLKvbdZnnIddzK +DnbjjvbdBiLBjhfK +EPDLKvbdeOeTKtTr +EObkKvbdYlRcsnLm +DoDKjvbdnHExNOGy +DoCkKvbdnCJwXoNu +EOcKjvbdwWlBWBWV +DnbjjvbdGYuVAdXb +EObkKvbdLGGHbBQu +EPCkKvbdEJgjVxKA +EObkKvbdlqyVZrdJ +EObkKvbdaNLBsUmH +EPCkKvbdGQASwHGZ +DncLKvbdnBjWwnnV +DnbjjvbdUslsekuj +DncLKvbdeATqNYJf +EOcLKvbdIwtCHlQp +EOcLKvbdGLErcIMu +DnbkKvbdjvXOECXw +EPCkKvbdfSAvzkbo +DnbjjvbdsCGNMHKy +DoDLKvbdURQnuVHm +EObjjvbdQvmdCkgc +EPCjjvbdSPsgKFcw +EPDLKvbdYpmEhleR +EPCjjvbdFjdsDHlu +EPDLKvbdqdFIpOWB +EObjjvbdnQZyVkZC +EPCjjvbdQdCaQRES +DnbjjvbdADRwiyiQ +DnbjjvbdiiehKNYS +DoCkKvbdHkaznWqL +EObjjvbdmoyxujxb +EOcLKvbdxxIibQZk +EObjjvbdsPuoKCvG +EObjjvbdjcMKpftg +EOcKjvbdZisHofbG +DncLKvbdUGznLwWF +DoDLKvbdFfJqnJUR +DnbjjvbdsBelkgLZ +DoCkKvbdrbGNLfkZ +DncKjvbdeYZssqez +EPCkKvbdyNsHwsIc +DnbkKvbdrafMkfjy +EPCjjvbdZyEJnDMS +DnbjjvbdFpASwGey +DnbkKvbdLGGIBaQu +DncLKvbddiiqutzn +DncKjvbdWIXuwfxz +DoCjjvbdNPxRVnHT +DncKjvbdwygefXeS +EPDLKvbdmJEUQtrB +EPCjjvbdQwOECkhD +DoDLKvbdNGbpMotk +DncLKvbdRyjIScWA +DncLKvbdVrOXaeMD +DncLKvbdQmYBxnUz +DnbjjvbdVBCRSqSZ +EPCkKvbdRosfifEX +EPDLKvbdlYrqrxgU +EPDLKvbdKVuGDeHJ +DncLKvbdDncLLWcE +EOcLKvbdfNGXGmKL +EOcLKvbdQvmdDMHc +EOcLKvbdEARiMyvw +DoCjjvbdnHFXlnGy +EOcKjvbdhtyeXRtb +DncKjvbdMgDQNQVL +EObjjvbdpedFUWBI +EPDKjvbdkHfkfFnL +DoDKjvbdrXQMChyR +EObkKvbdREDAoqES +DoDKjvbdBdQAvKMf +DoCkKvbdjvWnDaxX +DnbkKvbdePEsKstS +EPDKjvbdyOTHwsJD +DnbkKvbdrSVKnKaN +EPCkKvbdZirgpHBf +DoCkKvbdsQVnjDVf +DnbjjvbdGLEsCgmV +EPDLKvbdelewHMjL +EObjjvbdjlbMZeGo +DoDLKvbdxrmhlrCH +DoCkKvbdczZQXyQb +EObjjvbdRDcBQRDr +DoCjjvbdxLXEHzyf +DoCkKvbdkySrTZGt +DoCjjvbdDoDKjwCd +EObkKvbdKWVGEEfi +DoDKjvbdTqQoUuIN +EObjjvbdZRNEiMeR +DoDKjvbdxUmEpyMO +EPDLKvbdxxJJaozL +EObkKvbdraemLfkZ +EPCjjvbdbiNKLFvx +DnbjjvbdZjSgpHCG +EObjjvbdqBIeAXHd +EObjjvbdVUNUGMWK +EPDKjvbdliDsqUqa +EOcLKvbdxZgfGYFS +DnbjjvbdYpmFJMdq +EPCkKvbdcTCjtEKB +DncLKvbdVUMtFlVj +EPDKjvbdcIlijevx +DoCjjvbdpstHSSKt +EOcKjvbdLAjgMaxR +DoDKjvbdHkaznXQk +EPDLKvbdrovPJcVf +EObjjvbdjblLRHVH +EPCkKvbdfSAvzlCo +EPDLKvbdkHfkefOL +DoCjjvbdbiNKKfXY +EPDLKvbdjJfHilwr +EOcKjvbdxVMeQxkn +DncKjvbdqlzJyMIJ +DoDLKvbdffMZnGgA +EPDLKvbdrpWPJcVf +DnbkKvbdNsTvGeVQ +DncKjvbdZshiZETO +DoCjjvbdWRnXaeLc +EPDLKvbdUaCRTQqy +EOcKjvbdKDKDQjCx +EPCkKvbdLKaIWAJy +DoDKjvbdjblKpftg +EPDKjvbdfHkWSNqH +EObjjvbdSCEEkiZL +EPDKjvbdcyxpYZQb +EPDLKvbdVUMtFkuj +DnbjjvbdVBCQrprZ +EObjjvbddoEsLUUS +DnbkKvbdiHKDZVjV +EOcKjvbdpyPHgRDx +EObjjvbdYpleJNFR +DncLKvbdrDdhpOWB +DncLKvbdcbSmSAUN +DncLKvbdQwODcLgc +EPCjjvbdKVuFcdgJ +EPDLKvbdJvUecdfi +EObkKvbddjJqvUzn +EPCkKvbdLrXNZuQz +DnbkKvbdDihJuxKA +DoCjjvbdegkWSORH +DncKjvbdFyVUaEYC +DoDLKvbdNHDPlpVL +DoDLKvbddneTKtUS +DoCjjvbdEARhlywX +DncKjvbdmbJwYPOV +DnbjjvbddeOrBvbj +EPDKjvbdAMhZTXZx +DnbjjvbdULuoBVoJ +DoCkKvbdMfbomQVL +EObjjvbdyTNhlqbH +EPDLKvbdcyxowxpb +DoCkKvbdEPDLLXCd +DncLKvbdSCEFLiZL +DnbjjvbdBiLCKiFj +EPCjjvbdmgExNNgZ +EOcLKvbdsPvPKDVf +DoCkKvbdbKkfOmcA +DncLKvbdIxTaglRQ +DnbkKvbdFVyQQNJe +EPDLKvbdbsCjtEKB +EPDKjvbdakMFnnDA +EObjjvbdWWiYVcdg +DnbkKvbdfSAvzkcP +EOcLKvbdbKkennDA +EPCjjvbdTppoVUhN +EPDLKvbdemGWgMjL +DnbjjvbdJvUedFHJ +DoDLKvbdqvokbiZR +EPCjjvbdZMRctOMN +DoCjjvbdNPwpunGs +DoCkKvbdZtJIyDrn +EPCjjvbdFejRnIsq +EPDLKvbdZshhxdTO +DncLKvbdxZhGGXeS +DoDLKvbdKyRKSztf +EPDKjvbdCflFgAzc +EPDKjvbdOEdThiKd +DoDLKvbdTAFIgaoE +EObjjvbdEARiNZvw +EOcLKvbdjhHLefOL +DncKjvbdbVCHXjtI +EPDKjvbdeFPRawCj +DoDLKvbdtcCuWuoP +DoDLKvbdUVkpJtAq +EPCjjvbdaSFcHsfL +EPDKjvbdPxmAGrrK +EPCkKvbdDjHjWXjA +DnbkKvbdpssfqrKt +DoDKjvbdePEsKtTr +EObkKvbdDwxMUTtM +DnbkKvbdZRMdiNEq +EPCjjvbdhuZdvquC +DoCjjvbdGLEsChMu +EPDKjvbdRDbaQQdS +EOcKjvbdEJhJvYKA +DncKjvbdkxsSSxft +EObjjvbdKRZdnfOF +EOcLKvbdZQmFIleR +DnbkKvbdjcLjpfuH +DnbkKvbdYzbfSKWZ +EPDLKvbdbUafxLTh +EPCjjvbdJuuFcdgJ +DoCkKvbdJcKCqJcY +DoCjjvbdSKyGVGkT +DoCjjvbdemFvflik +DoCjjvbdvBEYsPEh +EOcKjvbdCWzdJEov +DncLKvbdqTsgSSKt +DnbkKvbdUMVoBWOi +EPCkKvbdOEcsiIjd +DncLKvbdaSFbhUFk +DoCkKvbdhtzEwRuC +DoCkKvbdiCOcEvqR +DoCkKvbdfILVqnRH +DnbkKvbdCJLCKhej +EPCkKvbdakLeoODA +DnbkKvbdUaCRTQrZ +DoDKjvbdRacdkhyL +EPCjjvbdYNqAXtut +DncKjvbdwzHfFwdr +DncLKvbdNrsvGeUp +EPDKjvbdDoCkKvbd +EPCjjvbdrafNLfkZ +EObjjvbdmajXXoOV +DncLKvbdVAbRTQrZ +EObkKvbdkySrTZHU +DoDKjvbdZeXfzghb +EPDLKvbdiCOcFWpq +EOcKjvbdUQpnuUhN +DncLKvbdijGIKMwr +DncKjvbdHgHZxwwg +DncLKvbdVTmUFlWK +DoDKjvbdeYZtUSFz +EPDKjvbdHffyyYXg +DncKjvbdXsLaMtOx +DncKjvbdzitoocrt +DoDKjvbdhtyeWquC +EPDKjvbdEuyPpNKF +DnbkKvbdtvOYKRTA +DncKjvbdZnnJFEzK +EPCkKvbdqZPIGpcx +DnbkKvbdVgxWYGxz +EPCjjvbdOStWHEuQ +EObkKvbdNddTiIjd +DoDKjvbdwXMBWAuu +EPDLKvbdsPvPKDVf +DncLKvbdQvnDbkhD +DncKjvbdEKHjWYKA +EPCkKvbdCgMFgAzc +EOcLKvbdQvnDbkgc +EPCjjvbdDoCkLWbd +DnbkKvbdKCibpicY +EOcLKvbdhfibyViu +EOcLKvbdzQnliJwA +DncKjvbdEASImZwX +EPDLKvbdFkFTChNV +DnbjjvbdEuxoomKF +EOcKjvbdYqMeJMeR +DnbjjvbdgQBzvdYI +DoCjjvbdkxrrSxft +DnbjjvbdjuwNdCYX +EOcLKvbdfpBzwEXh +DoCkKvbdnHFYMmgZ +EOcKjvbdjlbMZeHP +DoCkKvbdmttzKjSG +EPDLKvbdzjUopDsU +EPDLKvbdsZlPraIO +EOcLKvbdLBLHMbYR +EPDLKvbdtbcVXVno +DoDLKvbdaaVeGQQX +EPCjjvbdWSOYCEkc +EObjjvbdxUmFQyMO +DoDLKvbdRbDdkiZL +DoCjjvbdhlFDnVCy +EPDKjvbdcTDKscia +EPCkKvbdjlbMZeGo +DncLKvbdCIkCKiGK +DoCjjvbdrbFmMGkZ +EObkKvbdQccAoqDr +DnbjjvbdTqRPVUgm +EPCkKvbdNrsufeUp +EOcLKvbdrMyjZLhJ +EPDLKvbdiifHimXr +DnbkKvbdpstHSRjt +EOcKjvbdZtIhxdSn +DnbkKvbdbhmKLGXY +DnbkKvbdkxsSSxft +DoCjjvbdTAFIhBnd +EObkKvbdUtMtGLvK +EPCjjvbdpstGrSLU +DncKjvbdxLXDgzyf +EOcKjvbdSCDdlIxk +EObkKvbdOFEUIiLE +DnbkKvbdjggLefNk +DncKjvbdliEUQtqa +EOcLKvbdFjdsDHlu +DncLKvbdeEnqavcK +EOcLKvbdnPyyVjyC +DoDKjvbdliDsptrB +DoCkKvbdrXQLbiZR +DncLKvbdFkErbhNV +DoDKjvbdTqROtthN +DoCkKvbdYSlAmUOx +DnbkKvbdKVuGDdgJ +EOcKjvbdvwLaWAvV +DoDLKvbdEObjjvbd +DnbkKvbdwXLaWBVu +DnbkKvbdmtuZjiqf +DoDKjvbdegkWRnRH +DoCkKvbdeXzUUSFz +DncLKvbdfNGXGmJk +DoCjjvbdEztQdlCi +EPCkKvbdEuyQPljF +EPCjjvbdrEEiQNvB +DnbkKvbdLqwNZtpz +EObkKvbdKeegbBQu +EObkKvbdvBEZSoFI +DoDLKvbdrXQLbhyR +DnbkKvbdbKlGPODA +DncLKvbdnCKXYOnV +EOcKjvbdjcMKpfuH +DoCkKvbdQdCaQRES +EPCkKvbdDncKjwCd +DoDLKvbdYlSDtNkm +EObkKvbdmbKXXnmu +EPCkKvbdjgfkfGOL +DnbkKvbdZyDjNcMS +EOcLKvbdkNCLyeHP +DncLKvbdVUMtGLuj +EOcKjvbdKVtedFGi +EPCjjvbdKRZeOenF +DoCjjvbdUQqPUthN +EPDKjvbdkMbLydgP +EObjjvbdVqmxBdlD +EPDKjvbdjAQGaPgK +DoCkKvbdTlVnaWPJ +EPCjjvbdwjvdHzzG +EObjjvbdBsBCtGWr +EPCjjvbdwuNEqZMO +DncLKvbdbrcKtEKB +EPCkKvbdFyVVAcxC +EPCkKvbdaSGCgsfL +EPDKjvbdrylQTBIO +DncKjvbdfSBWzlCo +EObjjvbdfRaWzlCo +DnbkKvbdsPvOjDWG +EPCjjvbdcbSlrAUN +EObkKvbdrWpLbhxq +EPCjjvbdhgKDZVjV +EOcKjvbdhlFDnUby +DoCkKvbdddoSBvcK +DoCkKvbdpssfrRkU +DoDLKvbdJutfEFGi +EObkKvbdEPDKkWcE +EOcKjvbdcJNJjevx +EPCjjvbdcTDKscia +DncKjvbdYlRcsmlN +EPDLKvbdkHgMFfNk +DoCkKvbdjbkjqGuH +EPDKjvbdTvMPjUAq +DnbkKvbdQYmAGsRj +EPCkKvbdKeegbApu +EPDKjvbdiLdcmtcZ +DoCkKvbdNeDshhjd +EOcLKvbdxnShXsIc +EPDLKvbdyOShXrhc +EObkKvbdbPgHELzd +DoCjjvbdDoCkKwDE +EOcLKvbdmbJvxPOV +DnbjjvbdkNBlZeHP +DnbkKvbdRXNdDMID +DncLKvbdXnRAYUvU +EObkKvbdBcpAuilf +EPDKjvbdSLYeuGkT +DoCjjvbdRaceLiYk +DncLKvbdZoNiFEzK +EOcLKvbdGLEsDIMu +DnbjjvbdnUuZkJqf +DoCkKvbdlqyUyrci +DoCkKvbdLGGHaaRV +DnbkKvbdmoyyWLYb +DncKjvbdMpYRWOGs +DnbjjvbdkyTRsYft +EObkKvbdjKFhJmXr +DnbjjvbdxLWcgzzG +DoCkKvbdxnShXrhc +DnbjjvbdRbEEkiZL +EOcLKvbdWWiXudEg +DoDLKvbdDjIKVxKA +DoDKjvbdgFkzNgHA +EPDLKvbdvvlAuaVu +EPDLKvbdauBfwkTh +DncLKvbdmIctQtrB +EPDKjvbdCDpBWJmG +DoDKjvbdvAcxsPEh +EOcKjvbdrJAKFNOe +EOcLKvbdbsDKscia +DncLKvbdAMhYsWzY +DncKjvbdddnrCXDK +EOcLKvbdkHflGGOL +DoDKjvbdbUafxKsh +DnbkKvbdNdctIiLE +EOcLKvbdvBDyTPEh +DoCjjvbdFejSOJUR +DnbkKvbdUQpntuHm +EObjjvbdTpqOttgm +DoDLKvbdddoSCXCj +DncLKvbdbVCHXkUI +EPCjjvbdKNAEZgVB +EPDKjvbdFjdsDIMu +DnbjjvbdpaIeAXHd +EOcLKvbdrDdhpOWB +EPDKjvbdIxUBhLpp +EPDKjvbdhkddOVCy +EPCkKvbdTkuoAuni +EPDLKvbdnPyxujxb +EObjjvbdfSBWzlCo +EPDKjvbdMuSrKmAX +EPDLKvbdmozYvKyC +DnbkKvbdZirhPfaf +EPCjjvbdNQXqWOHT +DncKjvbdZsiIyESn +DnbkKvbdURQnuUgm +DoCjjvbdkIHMFfOL +EPDKjvbdKfGHaaRV +DncLKvbdtcDUwVoP +EOcLKvbdxrnImRbH +EPDLKvbdozmdLYPA +DoDKjvbdUVkojUBR +DnbjjvbdqUUHRrLU +DoDLKvbdEARhmZvw +EOcLKvbdZHWdAOri +DoCjjvbdVUMtGLuj +EOcLKvbdmfeYNNfy +EPDKjvbdZirgogCG +DnbjjvbdEJhKVwjA +DnbkKvbdkVvmdBxX +DnbjjvbdvBEYsOeI +EPCkKvbdDoCjjwDE +DoCjjvbdRXNdClID +EPDKjvbdkxrrTZGt +EOcLKvbdZdxGzhJC +DoDLKvbdxnSgxSiD +DoDKjvbdIryAsMxM +DnbkKvbdTYKlNzjx +DncLKvbdIGfzZYXg +DncLKvbdQvnEClHc +DnbkKvbdqUTfrRkU +DoDKjvbdRDcAopdS +DoDKjvbdTfznMXWF +EOcLKvbdauCHYKtI +EObkKvbdNrsvHEtp +DoDLKvbdDihJvXjA +DnbjjvbdliDtRVRa +DncKjvbdgFlZmfgA +DncLKvbdmJDsptqa +DncKjvbdfoazvdXh +EOcKjvbdJXtBgkpp +EPCkKvbdqUUGrSKt +EPDKjvbdrMzJyLgi +EPCjjvbdiGjDYuiu +EOcLKvbdkWXNcaww +EOcLKvbdxxIjBoyk +DnbkKvbdePErjssr +DnbjjvbdIryArmYM +EOcLKvbdRMwayNtz +EOcLKvbdRkZGUgKs +DoDKjvbdZLrEUOMN +DnbkKvbdDHMFgAzc +DnbkKvbdwXMBVaVu +DnbjjvbddeOrCXDK +EPDLKvbdwuMeQyLn +EPCjjvbdBhjbLIej +EPDKjvbdaNLCSuMg +EPCjjvbdBhkCKhej +EPCkKvbdptUGrSKt +EObkKvbdVTmTfLvK +DoCkKvbdDoDKkXDE +DnbjjvbdfoazvdYI +DnbkKvbdatbHYKtI +DnbkKvbdVUMtGLuj +EPDKjvbdeEoRavbj +DoCkKvbdJpzFPGNe +DnbjjvbdNHDQNQUk +DncKjvbdYNqAXuWU +EPCkKvbdZnnIddzK +EObkKvbdYlRdTnMN +EPDKjvbdEzspdkcJ +DoDLKvbdCIkBjhfK +EObjjvbdTkuoAvOi +DoCkKvbdhkdcnUby +EPCjjvbdHfgZyYXg +DncLKvbdbsCkTdKB +DoCjjvbdLqwMzVQz +DoDLKvbdRkYfUgLT +EOcLKvbdbQHHELzd +EPCkKvbdbVCGxLTh +EObjjvbdmSYuZsEJ +DoDKjvbdssRsYyeD +EPDKjvbdLrWlytpz +DncKjvbdJTZBSlxM +DnbkKvbdxrnJMrBg +EPCjjvbdxZgfFxFS +EObkKvbdUQpnuVIN +EObkKvbdzjUpQESt +EObjjvbduaDxsPFI +DoDLKvbdkyTRsYft +DoDKjvbdyTOImRbH +EObkKvbdegkWRnQg +DoCjjvbdaSFbgsek +DoDKjvbdrylPsAhO +DoCjjvbdgGMZnGgA +EPCkKvbdlqyUzSdJ +DncKjvbdwNWAMdFN +EPDKjvbdTlWPAuoJ +EOcLKvbdUMWPAuoJ +DnbjjvbddZxowxqC +EPCkKvbdEuyQPlie +DoDKjvbdVAaqSqSZ +EPDLKvbdwtldpxlO +EOcLKvbdrRtkNkBN +DncKjvbdJqZeOenF +DncKjvbdfHkWSNqH +DoCkKvbdnUuZjirG +EOcKjvbdsCFmMGkZ +DoDLKvbdwzIFfYEr +EOcLKvbdqqtjmjaN +DoCjjvbdrbGNLgKy +EPDKjvbdNHComQUk +DnbkKvbdIMBznWqL +EPCjjvbdEKHivXjA +EPDLKvbdVhYWYGxz +EPDLKvbdZxcjNblS +DnbjjvbdJpzEoFme +EPDKjvbderBWzkcP +DoDLKvbdpssgRrKt +EObkKvbdtbbtvuoP +EOcLKvbdqGDeUWAh +DoDKjvbdlZSrTYft +EOcKjvbdFfKRmhtR +DnbkKvbdNPxRVnGs +EPDLKvbdZshhxcsO +EPCjjvbdMoxQvNgT +EPCjjvbdKaKfmBxR +EPDLKvbdSwjkmzjx +DoCkKvbdjbkkRGtg +DoDKjvbdfoazwDxI +DoDKjvbdqwQLbhxq +EPCkKvbdZtIhyETO +DncLKvbdmpZxukYb +EOcKjvbdMoxQumgT +DoCjjvbdLYqJrzuG +EObjjvbdnGeXlmfy +EPDLKvbdyzeOSHhh +EOcLKvbdiZuGMQmf +EPCkKvbdWSNwadkc +DncKjvbdhfibyVjV +EOcKjvbdQmXbZOUz +DoCjjvbdSKxeuGkT +DnbjjvbdbrbkUDjB +EPDLKvbdJcKCqJbx +DnbjjvbdjSziTLJz +EOcKjvbdZxdKNcMS +DoCkKvbdelfWfmJk +DoCjjvbdFjeScHlu +EPDLKvbdnCJvwnnV +EPDKjvbdNrsufduQ +DnbkKvbdjcLjqGuH +EObjjvbdmbKXYOnV +DoCjjvbdRacdkiYk +EObkKvbdaaVdfQQX +DoCkKvbdJpydnfOF +DoCkKvbduCbtwVoP +DoDKjvbdpxnhHRDx +EOcKjvbdmJEUQtqa +EPDLKvbdRkZGVGjs +EPDKjvbdEObjkXCd +EObjjvbdCTAbtGWr +DoCkKvbdqTsfrSKt +DncLKvbdaMkBsUmH +DncLKvbdqlyixlIJ +EPCkKvbdvwMAuaVu +DncKjvbdiUzEwRuC +DoDKjvbdiUzFWrVC +DnbkKvbdkDMKpfuH +EObkKvbdZnnJFEzK +EObkKvbdWWhwudEg +DoCjjvbdypoNIiwA +DoCjjvbdShyiqABM +DnbjjvbdOFEThhkE +DnbjjvbdRXNcbkgc +DoCkKvbdqUTfrSKt +EPDLKvbdfNGWgMjL +EPDLKvbdGFirOJUR +EOcKjvbdSCEFMJYk +EOcKjvbdmpZxukYb +EPDLKvbdrafNLgKy +DnbkKvbdmJDsqUrB +DnbjjvbdjKFgimXr +EOcLKvbdVYgtZjoO +EObkKvbdTvMPjUBR +EOcLKvbdSxKkmzjx +DoDKjvbdnPzYvKxb +EPCjjvbdaRfDITek +EObkKvbdjKGIJmXr +DoCjjvbdliEURVSB +EObkKvbdFaOqYizm +EOcLKvbdqGEEsuaI +DoCjjvbdZQleJNEq +DoCjjvbdbKlFnnDA +DnbjjvbdWIXuwfxz +EPDLKvbdNGcPmPuL +DoCjjvbdBsBDTevr +DnbkKvbdczYoxYpb +EObjjvbdJutedEfi +DncLKvbdGFirNhsq +EPDKjvbdUaCQrqRy +EPCjjvbdQwNdDMID +EPDLKvbdtSrSyZeD +DnbkKvbdNHDQMpUk +DoDKjvbdZirgofaf +EObkKvbdrpWOibuf +DoCkKvbdwygfFxEr +EPCjjvbdSwjlNzjx +DnbkKvbdjKGHjMxS +DncLKvbdijFhKNXr +EOcKjvbdddoRavbj +EPDLKvbdmIdTpuSB +DncLKvbdiiehJmYS +EObkKvbdjcLkQgUg +DoDKjvbdsQVoJbuf +EObjjvbdhzUfMQmf +DnbkKvbdcImKKfWx +EObkKvbdbQHHELzd +DnbjjvbdWWiXuceH +EPDKjvbdjJegjNXr +EPCjjvbdZyEKNblS +DoDKjvbdLqvlzVQz +EPDLKvbdZRNEhmFR +DnbkKvbdGcjuibJj +EOcLKvbdGAnpxizm +EPCjjvbdkVvnDaww +EOcKjvbdHffzZXwg +DoCkKvbdKeehCAqV +EPCjjvbdHEKuiajK +EOcKjvbdUtMselWK +EPDKjvbdEXwlTstM +EPDKjvbdsrrSxzFD +EOcKjvbdEztQeMDJ +EPCkKvbddoFSjstS +DoCkKvbdSCEElIyL +DncKjvbdFVxpQNJe +DnbjjvbdXmqAYUut +DoCjjvbdiZtfLpmf +DoDKjvbdwygeexEr +EOcLKvbdiUyeXSUb +DncKjvbdsZkoraIO +EOcLKvbdACrYJyhp +EOcLKvbdTlVoBVoJ +EPCkKvbdqZPHfqDx +DnbkKvbdmJDsptqa +DncKjvbdhkeDnUcZ +EPDKjvbdURQoUtgm +EPDKjvbdjAQHAogK +EObjjvbdCIkCKhfK +EOcKjvbdYzbfRjWZ +DnbkKvbdWRnYCEkc +DncKjvbdyzeORgiI +EObjjvbdEPCkLWbd +DoDLKvbdNHComPuL +DnbkKvbdaRebhUFk +DnbkKvbdhlEcmtby +EOcLKvbdliETqUrB +EPDKjvbdIxTbHkqQ +DncLKvbdCEPaVjNG +EOcLKvbdIjEAJogE +DoCkKvbdsZkpSaHn +EPDLKvbdEXxLtTtM +DncKjvbdwXMAvAuu +EPDKjvbdakMGPODA +EPCkKvbdauBfxKsh +EOcKjvbdCJKakJFj +EPCkKvbdyXhjBozL +DoDLKvbdkWWnDbYX +DncKjvbdEPCjkXDE +DoDKjvbdlqxtzTDi +EPCjjvbdyTOJNSBg +DoCkKvbdnGeYMmgZ +EPCkKvbdaSFbhUFk +EObjjvbdnCKWxPNu +DoCjjvbdrWpLbhyR +EPDLKvbdmRxtyrci +DnbjjvbdSBdElJZL +DnbkKvbdrXQLbiYq +DoDLKvbdWHwuwfxz +DoCjjvbdZRNFJNEq +DncKjvbdUVkpJsaR +DoCjjvbdbiMijfXY +EPDKjvbdVTmTekvK +DoCjjvbdeXytTrFz +DoDLKvbdyYJKCQZk +DoDLKvbdczZQYZQb +EObjjvbdRadFMJZL +DncLKvbdkVvnECYX +DncKjvbduaDySneI +DnbjjvbdwuNFQyMO +DncLKvbdsrqrxzEc +DoDLKvbdcSbjtEKB +EPCjjvbdZtJIyETO +DoDLKvbdJvUfDdgJ +DnbjjvbdhbPDFWqR +DncKjvbdcyyQYYpb +DoDKjvbdWSNwbFMD +DoCjjvbdmajXXoNu +EPCkKvbdxZgeexEr +EOcKjvbdxsOIlrBg +DoDKjvbdZyEJmbkr +DncLKvbdTkunaVni +EOcLKvbdUQpoUthN +DoDLKvbdyNsHxTJD +DncKjvbdEztRElCi +DnbkKvbdXnRAYVVt +DnbjjvbdqAheAWgd +DnbkKvbdCJLBkIfK +EPDKjvbdUGzmkwWF +EPCkKvbdSiZiqABM +EPDLKvbdidkGtoAO +EOcLKvbdYlSDsnLm +EPDKjvbdMSWmZtpz +DoDKjvbdlhdURVRa +EOcLKvbdOYOuzdOU +DncLKvbdrafMlGkZ +EObjjvbdrylPraHn +DnbjjvbdDncLKwCd +DoCkKvbdoznELXoA +DoCkKvbdmttykJrG +DoDLKvbdBvzciEov +EPCjjvbdeXzUUSFz +DoDKjvbdtunYKQsA +EObjjvbdqceJQNvB +EOcLKvbdqTtGqqkU +DoCkKvbdiGjDYujV +EPCkKvbdRWnEDLhD +EOcLKvbdcSbjtDia +DncLKvbdTqROuVHm +EOcKjvbdiifIKMxS +EObkKvbdlYrqsZGt +DoDKjvbdSBdFLhxk +DnbkKvbdVUNUFkuj +DoCjjvbdrzLpSaIO +DoDKjvbdzGxlANFX +DoDLKvbdfHjuqmpg +EPDKjvbdZRMeIldq +DncKjvbdMfcPlpVL +DncKjvbdxKwDgzzG +EOcLKvbdYzbfRjVy +EObkKvbdWSNwbElD +DoCkKvbdeFOrCXCj +EObjjvbdbKlGOmcA +EOcKjvbdDxXktUTl +EPCjjvbdvBDySneI +EPDKjvbdLFehCBRV +DoDLKvbdiZuFlROG +EPDKjvbdDoDLKvbd +DoCjjvbdQwNdCkhD +DoCjjvbdCJLBkIfK +DnbjjvbdlqyUzSci +DncLKvbdNHCpMpUk +EOcKjvbdiMFEOVCy +DoCkKvbdnGeYNOGy +DnbkKvbdZoOIddzK +EOcKjvbdFpATWffZ +DoDKjvbdeOeTKtTr +DnbjjvbdGGKSNhsq +EOcKjvbdyXiKCPyk +DoCjjvbdeAURNYKG +DoDKjvbdpssfrRjt +EPDKjvbdnVVZjjRf +EOcKjvbdiZuGMQmf +EOcLKvbdNHDPlotk +DnbjjvbduCbtwVoP +EOcKjvbdxUleQxlO +DoDKjvbdnHFYMnGy +DnbjjvbdUVlPitAq +EPCkKvbdjAPgAofj +DoCkKvbdTlVoAuoJ +EPCkKvbdmSYtyrdJ +EPDKjvbdBsAcTevr +EPCkKvbdUyITzKnn +DnbjjvbdbQHGdLzd +EOcLKvbdezuyFIsw +DoDLKvbdEXwlTtUM +EOcKjvbdKyRJrztf +DnbjjvbdtTSSxzEc +DnbjjvbdHDjujBij +DoCjjvbdsQVnicWG +EObkKvbdZsiJYcrn +EPDLKvbdUtNUFkuj +DoDKjvbdNPwpumfs +EOcKjvbdSBcdlJZL +EPDLKvbdmfeXlmfy +DncKjvbdIsZAsNXl +DncLKvbdmJDsptrB +DncKjvbdGYuUaEXb +DncLKvbdyYJJbPzL +DnbkKvbdrpVnicWG +EPCjjvbdTqQoVUgm +DoDLKvbdFVyPpMjF +EObkKvbdZnnIeEyj +EObkKvbdbUagYKtI +DoCkKvbdqGDdtWBI +EPDLKvbdFVxpQNKF +DncLKvbdkWXNdCYX +EPDKjvbddwystRez +EOcKjvbdaNKasUlg +DnbkKvbdNdctIhjd +EPCkKvbdatagYKsh +DoCkKvbdfNFvgMik +EObjjvbdJYTbIMQp +DoCjjvbdEYYMTtTl +DncKjvbdWRmxCElD +EPCkKvbdbsCjsdKB +EOcLKvbdFVxpQMie +EObkKvbdpaJFAWgd +EPDLKvbdijGHimXr +EPCjjvbdlhctQtqa +EObjjvbdFVxoolie +DncKjvbdrJAKEmOe +DnbkKvbdzQnmIiwA +EPCkKvbdkHfkeemk +DnbjjvbdLGGHaaQu +DnbkKvbdOSsugEtp +DnbkKvbdZtIiYcrn +DoCjjvbdQZNAGsSK +EObjjvbdNPxRWOGs +DoCkKvbdVUMsfLuj +DnbjjvbdmJETqUqa +EPDLKvbdBsAcUFvr +EOcLKvbdIsZArlwl +EPCjjvbdNddTiJKd +DoDKjvbdyXhiaozL +DncLKvbdjmCLzEfo +EOcLKvbdRadElJYk +DncLKvbdjbkkQfuH +EObkKvbdXFxzUAOs +DncLKvbdxZhGFwdr +DoCjjvbdNsTugEuQ +EObjjvbdRbDdlIyL +DoCkKvbdePEsLUUS +DoCjjvbdOStVgFVQ +EPDLKvbdUtMtGLuj +EObjjvbdFjdrbhMu +EOcKjvbddeOrBwCj +DnbjjvbdxUmFRYkn +DnbjjvbdCEQBVimG +EOcLKvbdvAdZTPEh +EPCkKvbdGcjvJaij +EPCjjvbdOFETiIjd +EOcLKvbdemGWgNKL +DoCkKvbdqTsfrRkU +DncLKvbdbrcKsdKB +EPDLKvbdTAFIhBoE +DoCjjvbdKCjCqJbx +DnbjjvbdNsUWHFUp +EPDKjvbdkWWmcaxX +EPDLKvbdbKlFoNcA +DoCjjvbdkIGkefNk +EPCkKvbdXFyZtAPT +EPDKjvbdpxnhGpcx +DoDLKvbdhanbeWqR +EOcKjvbdliEUQtqa +EObjjvbdbBVeFpPw +EObkKvbdQdDApQdS +EPDLKvbdnQZyVkZC +EObjjvbdhbOcEwQq +DnbjjvbdBdPaWKMf +DoCjjvbdCTAbtGWr +EPCjjvbdEvYpQMie +EObjjvbdDxYLtUTl +EObkKvbdCTBDTfXS +EPCjjvbdmpZxvKyC +EPCkKvbdRzKITDWA +EObkKvbdemGXGmJk +EOcLKvbdIryAsNXl +DoDKjvbdkWXNcaww +EObkKvbddCTNSAUN +DncKjvbdvBDxroEh +DncLKvbdiCPDEwRR +EObjjvbdRkZGVHLT +DoCjjvbdFkFSbhNV +EPDLKvbdwjvdHzzG +DoDLKvbdqquKmkBN +EOcKjvbdsQVoJcVf +EPCjjvbdYlSEUOMN +EObkKvbdjKGIKMxS +DncLKvbdRpUGifDw +EObkKvbdEuxooljF +EPDLKvbdzitpQETU +EOcKjvbdTvLpKUAq +DoCjjvbdrSVKmkAm +EOcLKvbdEvZQPmJe +EPCkKvbdfelZnHHA +EOcLKvbdjhGlGGNk +DncKjvbdCEPaWJmG +DncLKvbdrpVnjDWG +DoDLKvbdeOeTKtUS +DoCkKvbdtbbuXVno +EObkKvbdYpleJMeR +DnbjjvbdiCPDEvqR +DoDLKvbdUslsekuj +DnbkKvbdGBPQyJzm +EPCkKvbdtbcUwVoP +DoDKjvbddxZssrFz +DncLKvbdkIGlGFmk +EPCkKvbdhuZdwRtb +EObkKvbdehLWSOQg +DoCkKvbdatafwjsh +DoDKjvbdhfjCyViu +DoCjjvbdFyUuAcxC +EObkKvbdUMWPAvPJ +EPDLKvbdxxIjBoyk +DnbjjvbdMRvlytpz +EPCkKvbdDxYLtUTl +DnbjjvbdiVZeXSUb +DoCjjvbdffMZmgHA +EPDLKvbdnPyyVkYb +EPCkKvbdZtIhyETO +DncKjvbdRECaPqDr +EPDKjvbdVrNxBeMD +DnbkKvbdKVuFdFGi +EOcLKvbdrzLosAgn +EPDKjvbdLLAgvAKZ +EOcLKvbdLYpirztf +DncKjvbdnGeXlnHZ +EOcLKvbdQdDAopdS +DnbkKvbdptTfrRkU +DoCjjvbdqGEFUVaI +DncLKvbdrDeIomvB +DoDLKvbdyOTHxSiD +EOcLKvbdRpTfjGDw +DoDLKvbdzitpPdTU +DnbjjvbdUxhTykOn +EOcKjvbdGFjSNhtR +EObkKvbdidkGuPAO +EObjjvbdVAapsQrZ +EPDLKvbdQccAopdS +EObjjvbdmozYukZC +EOcKjvbdGFjSOIsq +EPCkKvbdyzeNrHiI +DncLKvbdEOcKjvcE +DncLKvbdLFfIBaQu +DoDKjvbdtlXwBUBX +DoCjjvbdeOeTLTsr +DncKjvbdiZuGLpnG +DoCkKvbdWRnYBdkc +DncLKvbduCbtvvOo +DnbkKvbdGGKRnIsq +EOcLKvbdVTmUFkuj +EOcKjvbdFkEsDHlu +DoDKjvbdQwNcbkgc +DncLKvbdWRmwbFLc +DnbjjvbdHlBzmwRL +EPDKjvbdDncKjwCd +EObkKvbdGBPRYizm +EOcKjvbdqrVLNjaN +EObjjvbdqFceUVaI +DoCkKvbdZQmFImFR +EPDLKvbdmIctRVSB +EObkKvbdjAQHBPfj +EObjjvbdrEFIonWB +DnbjjvbdsPuoKCuf +DoDKjvbdtbbuXWPP +EPDLKvbdOStWGduQ +DoCkKvbdUQqPUuIN +EPDLKvbdwyhFewdr +EObkKvbdShyiqAAl +EPDLKvbdGZUuBEXb +EPCkKvbdHffyyXwg +EObjjvbdGBOpyJzm +EObkKvbdZirgpGaf +EObkKvbdRjxfUfkT +EPDKjvbdZHWdAPSi +DnbjjvbdVrOYBdkc +DoCjjvbdGGKSNhsq +EOcKjvbdJqZeOenF +EOcLKvbddBsNSAUN +DncKjvbdZtJJYcsO +EPDKjvbdBraDTevr +DoCkKvbdRDcApQdS +EObjjvbdGGJrNiTq +DoCjjvbdGLFTCgmV +DoCjjvbdtlXwBUAw +DncLKvbdQwNdClHc +DoDLKvbdygYlAMeX +EPDLKvbdTvMQKTaR +EPCjjvbdiMFDnVDZ +DoCjjvbdiBoDFXRR +EObkKvbdUQqOuUgm +EOcKjvbdaMkBsVNH +EObkKvbdwuNEqZMO +EObjjvbdLAkGlbXq +EObkKvbdkCkkQgUg +DncLKvbdVqnYCFLc +EPCkKvbdxVMeRZLn +DncLKvbdRXOEClHc +EObjjvbdvwMAvBWV +EObjjvbdIwsahLpp +EObjjvbdKDKCpicY +DoDKjvbdlrZUzTEJ +EOcLKvbdyYIjBpZk +DncLKvbdxsNhlqag +EPDKjvbdgPazvdXh +EPDLKvbdbKlGPNcA +DoCjjvbdqUUHSRjt +DnbkKvbdNeDsiJKd +DnbjjvbdqGEFTvAh +DoDKjvbdnUtykKRf +EPDKjvbdZtJJZDrn +DoCjjvbdmRxtysEJ +EOcKjvbdQmXbYnUz +EPDKjvbdjmCLzFGo +DncKjvbdsBfMkfkZ +EPCkKvbdFVxpPlie +DnbkKvbdZLrEUOMN +DoCkKvbdEOcKkXDE +EObkKvbdvBEYsPEh +EPDKjvbdcJMjLGXY +EOcLKvbdOYPVzcnU +DnbkKvbdsQWOjDWG +EOcLKvbdfHjvRnRH +DoDLKvbdmbKXYPOV +DncKjvbdrpWPJcVf +EOcKjvbdURROuUgm +DnbkKvbdrovOicWG +EObjjvbdLYpirzuG +DnbjjvbdGQASvgGZ +DnbkKvbdYzcFqjVy +DncKjvbdBsBCtFvr +DoDLKvbdYgXEAOri +EOcLKvbdqTsfqqjt +DncKjvbdPIAYZAYa +EOcLKvbdypnliJwA +DnbkKvbdhyuGLqNf +EOcLKvbdjhGkfGOL +DncKjvbdjblLRGuH +EPCjjvbdxwhibPyk +EOcKjvbdBhkCLIfK +DnbjjvbdJTZArlxM +DoCkKvbdRjxetgKs +EObkKvbdiUyeWrVC +EOcKjvbdwXLaWAuu +EPDLKvbdssSTZZdc +EObkKvbdcSbjtDia +DncKjvbdgGMZnHHA +DoCkKvbdatafwkUI +DncLKvbdnCKWxPNu +EObjjvbdyOShXrhc +EPCjjvbdpyPHfqEY +DoDKjvbdbUbGxKsh +EOcKjvbdypoNJKXA +EObkKvbdyTOJMrBg +DoDLKvbdiZtfLpmf +EPCkKvbdLGFgbBQu +EOcLKvbdCJLBkJFj +DnbkKvbdUxgszLPO +DoDKjvbdUQqPVVHm +EPCjjvbdijGIKNYS +EPDKjvbdCJKajhej +EPDLKvbduoTzqLPU +DnbjjvbdJTZBTMwl +EOcLKvbdLAjfmBwq +DoDLKvbdQwOECkhD +DoCjjvbdQYmAHTSK +DoDKjvbdEuyQQMjF +DoDKjvbdZdwfzhIb +EOcKjvbdyTOJNRag +DoDLKvbdbBVdfQPw +DoCkKvbdbVBfxLUI +DncKjvbdcIljKevx +EOcLKvbdhgKDZViu +EObjjvbdOTUWHEtp +DncKjvbdZRMeIldq +DnbjjvbdkHgMGGNk +EOcLKvbdZMSETmlN +EPCkKvbdjcMKpfuH +EPDLKvbdiBncFXQq +EObjjvbdJcKCqKDY +DoDKjvbdQwOEClID +EPCkKvbdRpUHJecw +DoDKjvbdZjSgogBf +DoCkKvbdEObkKvbd +DoDLKvbdDwwktUTl +DoCkKvbdSKyGVHKs +DnbkKvbdZMSETnMN +DncLKvbdiZuGLpmf +EObjjvbdjcLjpgVH +EOcLKvbdYzcFqjVy +EPCjjvbdQvnDcLhD +DoCkKvbdDihJvYKA +EPDLKvbdJqZeOenF +EOcKjvbdWXJXvDdg +DoCjjvbdznpQeCkx +EPCjjvbdjJehJmXr +DoDKjvbdmSYuZsDi +DoDKjvbdFVyPolie +DnbjjvbdULvPAvOi +DncKjvbdwzIGFwdr +DnbkKvbdOEcsiJKd +EPCkKvbdEJhJuwjA +EObkKvbdYSkaNUOx +EObkKvbddoFSkTtS +DoDLKvbdFkFTDHlu +DoCjjvbddwzTtRez +EOcLKvbdDwwlUTtM +DoDKjvbdHDjvJaij +EObkKvbdyTOIlrBg +EOcLKvbdtSqsYzFD +EObkKvbduVmwjQsA +EPDKjvbdbiMjKfXY +DncLKvbdsQWPKDWG +DncLKvbdRbEElIyL +DnbjjvbdGKeTDHlu +EPCkKvbdrpWOjDWG +EObjjvbdVwJYWEFH +EPCjjvbdvBDySoFI +EPCkKvbdZMSDsmkm +EObkKvbdqYnhHREY +EObjjvbdyqPMiJwA +DncLKvbdCTBCtGXS +EPCkKvbdfekynGgA +EPCkKvbdvvkaWBVu +DoCjjvbdGZUuAdYC +DoDKjvbdpyOgfqDx +EPCjjvbdePFTKstS +EOcLKvbdVviXudFH +EPCkKvbddZyQYZQb +DnbkKvbdUaCQrqRy +EPDLKvbdQwNdDMID +DncKjvbdUaCRTQrZ +DnbjjvbdHDkWJbKK +EOcKjvbdOTTvGduQ +DnbjjvbdssRrxzEc +EObjjvbdezuxdiTw +EOcLKvbdGLFTCgmV +EPDLKvbdUxgtZkOn +EOcLKvbdbrbjscia +DnbjjvbdjJfHimXr +EOcKjvbdjcMLQgUg +DoDKjvbdlYrqrxft +EPDKjvbdGYttaEXb +EOcLKvbdhbPDEwQq +EOcKjvbdvAcxroEh +DoDKjvbdVgxVxHYz +DoCkKvbdTqQnuVIN +DoCjjvbdrXQMCiZR +EOcKjvbdMSWlytpz +DoCjjvbdBiLCLJFj +EObkKvbdUyHtZkPO +DoDLKvbdGcjujCJj +EPCjjvbdfkGzbfAE +DoCjjvbdDoCjjwDE +DnbkKvbdqGDdsvAh +DoDLKvbdjvXNdBww +EOcKjvbdANHySvyx +DoCjjvbdeJjRvUzn +DncKjvbdqUTgRqkU +DncLKvbdEvZQPljF +DnbjjvbdSPsgKFdX +EOcKjvbdGLFScHmV +EPCjjvbdqUTgRqkU +EPCkKvbdNxOuzdOU +DoCkKvbdpfEEtWBI +EOcLKvbdDwwlTtTl +EPCjjvbdSZjITDWA +DncKjvbdQwNcblID +DnbjjvbdijGIKMwr +DnbjjvbdYpldiMdq +DncLKvbdemGXHNKL +EPCkKvbdEKHjWYKA +DoDLKvbdwXMBWAvV +DnbjjvbdQwOEClHc +DnbkKvbdbUbHYKtI +DncLKvbdCSaCtFvr +DncLKvbdEuyPpNJe +EPDKjvbdFVyPolie +DncKjvbddneSkTtS +EOcKjvbdZtJIxcsO +EOcKjvbdiGicZWJu +DncLKvbdOFDtIiLE +DoDLKvbdOSsufduQ +DnbkKvbdMfcPmQVL +EObjjvbdiUzEwSVC +DoCkKvbdCIkBkJFj +DncLKvbdYkrETmlN +EObjjvbdqZOggREY +EPCkKvbdHDkViajK +DnbkKvbdbsDLTdKB +EPDLKvbdlqxtzTDi +DncKjvbdLGFgbAqV +EObjjvbdoAKztHcn +EPDLKvbdRXODblID +DoCjjvbdIHGzYwxH +EObkKvbdNPwqVnHT +EOcKjvbdxrnImRag +EOcLKvbdiLddNuCy +DoCkKvbdkMakzEfo +EObkKvbdnPyxukYb +EPCjjvbdZdwfzgiC +EPCkKvbdnHEwmNfy +EObjjvbdySmiNRag +EOcKjvbdzeZnzdyp +EPCjjvbdJvVFdEgJ +EOcKjvbdZQldiMeR +EOcKjvbdFyVVAdYC +DncKjvbdJXsahMRQ +DnbjjvbdfNGXGljL +EOcLKvbdwWlAvAvV +DncLKvbdkIHLefNk +DncLKvbdliDtQtrB +DoCkKvbdxZgefXdr +DncKjvbdCWzchdpW +EPCkKvbdpyPHfpdY +EOcKjvbdhbOcFWqR +DnbjjvbdzjUpPdSt +DoDLKvbdZMRdUOLm +DncLKvbdVwJXucdg +EPCjjvbdWXIxVcdg +DnbkKvbdMpXpvOHT +DncLKvbdRkZGVHKs +DoDKjvbdmpZyWKxb +DoCjjvbdegkWRmpg +DncLKvbdyzeOSHhh +EPDLKvbdRECaPpdS +EPDKjvbdqvpLcJZR +DoCjjvbdRDbaPqDr +EObjjvbdRECaPqDr +EOcLKvbdsBfNLgLZ +DncKjvbdZyEKOCkr +DnbkKvbdSPsgJfEX +EPDKjvbdZRMdiMeR +EPDLKvbdDwwktTsl +EPDLKvbdLhbLpxAS +EPDKjvbdZirgpHBf +DoCkKvbdmtuZkJqf +DnbjjvbdwWkaWAuu +DnbjjvbdRDcBPqES +DnbkKvbdyzeNqgiI +EObjjvbdYkrEUOLm +DoCkKvbdmtuZkKRf +DoCkKvbdNdctIhkE +DnbjjvbdhytfLqOG +EOcLKvbddZyPwxpb +EPCjjvbdYzbeqivZ +EOcKjvbdwygfGXeS +EOcLKvbdRosfifEX +EPCkKvbdznopdbkx +EObkKvbdVBBqSqSZ +EObjjvbdQlxCZNtz +EPCkKvbdhlFDmtby +DoDLKvbdCDpAvJmG +EPDKjvbddeOrCXDK +EOcLKvbdrovOjDWG +DnbkKvbdIGfyyYYH +EObkKvbdmbKWwnmu +EOcLKvbdkDLjqGuH +EPDLKvbdqrUkNjaN +EPDKjvbduDDVXWPP +EObjjvbdZnnJFEzK +DnbjjvbdaRfCgtGL +DoCkKvbdGKdsDHlu +DncKjvbdqlyiyMHi +DoDLKvbdSLYetgLT +DnbkKvbdZQleJNEq +EOcLKvbdZLrETnMN +DnbjjvbdiUydwRuC +EObjjvbdnPzYvLYb +EPCjjvbdGYuUaEYC +EObjjvbdACqwiyiQ +DncKjvbdIHGzZYXg +DncKjvbdxrnIlqag +DnbjjvbdySmhlqag +DoCjjvbdSCEFMJZL +EObjjvbdSKxfUfjs +DnbjjvbdnUtyjjRf +DncLKvbdkyTRsZGt +DoDLKvbdWRnXbElD +EOcKjvbdjvXNcbYX +EOcKjvbddjKSWUzn +DoDKjvbdvBDxrneI +EOcLKvbddndsKtTr +DoDLKvbdZjTHpGbG +DnbkKvbdpfDdsuaI +EPCkKvbdfMfWgNJk +DoCkKvbdjJegjNXr +DoDKjvbdcTDLTdKB +EPDLKvbdwzHfFxEr +DncKjvbdfMfWgMik +DnbkKvbdrbFllGkZ +EPCkKvbdCIkCLJGK +EObjjvbduDDUvvOo +EOcKjvbdDxYMUTsl +EOcLKvbdsPvOibuf +DncKjvbdUsltGLvK +EPCjjvbdyOShYTIc +DoDKjvbduaEZSoEh +DncKjvbdLrXMzUpz +DoCkKvbdNsTufeUp +EObkKvbdLGGIBaQu +EPCjjvbdmSZVZsEJ +DncLKvbdQdDAoqDr +DoCkKvbdKCicRJbx +EPCkKvbdxwhibQZk +DoDKjvbdTvMQJsaR +DoCkKvbdYzcGSJuy +DnbkKvbdwyhGFwdr +DoCjjvbdEOcLKwDE +DoCkKvbdGGKRmhtR +EOcLKvbdrzMQTAgn +DoDLKvbdJvVFceHJ +DnbkKvbdfMfWfmJk +EPCkKvbdmajWwnmu +EPCjjvbdxrmiMqag +EOcKjvbdqUTfqqkU +EObkKvbdoAKztHcn +EObkKvbdkyTSTZHU +EPCjjvbdiCOcEwRR +DnbkKvbdGZUtaDwb +EPCjjvbdYORAXuWU +DoCkKvbdULvPAuoJ +DnbjjvbdcSbjscjB +DoDKjvbdLrXMytpz +DncKjvbdIryBTNYM +DoCjjvbdZyDinCkr +EPDLKvbdZoOJFEyj +DncLKvbdajkfOmcA +EPDLKvbdRNYCYmtz +DoCkKvbddePRawDK +EOcKjvbdbUbHYKtI +EPCjjvbdbrbjscjB +EPDKjvbdKDJcRKCx +EObjjvbdqcdiQOVa +EPDKjvbdZjTIPgBf +DnbjjvbdrSUjmjaN +DnbjjvbdEXxLsstM +EPCkKvbdFjeSbglu +DnbkKvbdLqwMytpz +DoDKjvbdUGznMXVe +EObkKvbdpstHRrLU +DoDKjvbdYTLaNUPY +DnbkKvbdGKdrbhNV +EObjjvbdRMxCZNtz +DncLKvbdDihJuwjA +EPCjjvbdOFDtJIkE +DnbkKvbdliEUQuSB +DoDKjvbdkCkkQftg +EPCkKvbdGZVVAcwb +EObjjvbdkyTSSxgU +EPDKjvbdIryBSlxM +EOcKjvbdWIXvXfxz +DoDLKvbdhfjCyWKV +DoDKjvbdNQXpumfs +DncKjvbdiMEcnVCy +EPDLKvbdxVMeRZLn +EPCkKvbdDoDKjwDE +DnbkKvbdSCEFLiZL +DoCjjvbdqYoHgQcx +EObjjvbdxZhFexFS +EOcLKvbdkDMLRGuH +EPCkKvbdVwJXvDdg +DoCjjvbdjhHLefOL +EOcLKvbdiCOcFWpq +DnbjjvbdrovOjCvG +DncLKvbdRzKHsCvA +EPCkKvbdDoDLKwDE +EOcKjvbdrNZjZLhJ +EObjjvbdTAFIhBoE +DncKjvbdlqyVZsDi +DncLKvbdjggMFenL +EPDLKvbdUsltGMWK +DoCjjvbdkyTRsZGt +EOcLKvbdrzMPsBHn +EPCkKvbddZxpYYpb +DncLKvbdGKdsCgmV +DnbkKvbdvAdYsPEh +DoDLKvbdqUUGrSKt +EPCjjvbdxnTHxTIc +EOcKjvbdZisIQGaf +DncLKvbdBhjbLJFj +DoCkKvbdJSyBTNYM +DnbjjvbdmfdwlmgZ +EOcLKvbdJcJcRJbx +DncLKvbdmoyyWLYb +EObjjvbdSKxfUfkT +EObjjvbdlAlnmALA +DoDLKvbdTlVnaVoJ +EOcKjvbdnCKWwnnV +EPCjjvbdjbkkRGtg +EPCjjvbdULuoBVoJ +EPDKjvbdwMvAMceN +DnbkKvbdznopdcLx +EPCkKvbdeuzwoizs +EPCjjvbdpssfrRjt +EOcKjvbdiGibyWJu +DnbkKvbdYSlBNToY +EPDKjvbdkVwNcbYX +DoCjjvbdsPuoJcVf +DnbkKvbdrbGNLgLZ +DnbkKvbdRbEFMJYk +EObjjvbdqceIonVa +DnbkKvbdTpqPUuHm +EOcLKvbdVviXvEEg +EOcLKvbdvAcxrndh +DnbjjvbdTYKkmzkY +EOcLKvbduDCuXVno +EPCkKvbdEvYpPlie +DncLKvbdaSGCgtFk +DoCjjvbdpfDdtWBI +DncLKvbdHDkWJbJj +DncLKvbdqZOgfpdY +EPCkKvbdFxuVBEXb +DoDKjvbdnBivwnnV +EPCkKvbdRWmcbkhD +EObjjvbdfIKvSOQg +DnbkKvbdcIlikGWx +EOcKjvbdQdDBQQdS +EPCjjvbdnPzZWKyC +DnbkKvbdZxcimbkr +DncLKvbdLFfHaaRV +DoCjjvbdYSlBNToY +DnbjjvbdKCicRKDY +EPCkKvbddneSjtUS +EObjjvbdmIctRUqa +DncKjvbdYqMdiNFR +DnbjjvbduaDyTPFI +EPCkKvbdePEsLTtS +EPCkKvbdbUagYKsh +DoDLKvbdssSSxzFD +EObkKvbdMuSrLNAX +EPDLKvbdddnqbWbj +DnbkKvbdvAcySneI +EPDKjvbdatbGxLUI +EOcLKvbddePRbWbj +DoDLKvbdijGIKNYS +EPCjjvbdNrsugEtp +EOcLKvbdxZhGGYEr +DnbkKvbdTkvPAvPJ +DoCjjvbdFyUuAcwb +DnbjjvbdJTZBTMxM +EPDLKvbdaMkCStmH +EPDLKvbdjKGHimYS +DnbkKvbdelewGlik +EObjjvbdkHgMGGOL +EObkKvbdURRPUuHm +EOcLKvbdjKFhKNYS +EPDLKvbdhyuFkpnG +EOcLKvbdRosgJecw +DoCjjvbdczYoxYqC +DncLKvbdzaAPGgCM +EPDKjvbdiUzEwSUb +DoCjjvbdKQzEneme +EObjjvbdatagXkTh +DoCjjvbdwtldqYkn +EOcKjvbdUxgszLOn +EPCkKvbdUaBprprZ +EOcLKvbdYNqAYVVt +EObjjvbdbUafwkTh +EPDLKvbdcIljLGWx +DnbjjvbdNHDPlotk +EOcLKvbdkIHMFfOL +EPDKjvbddePSCXDK +EOcLKvbdbUafxLTh +DoDKjvbdQlwaxmtz +DoCkKvbdbQHHELzd +EPDLKvbdhficZWKV +DoDKjvbdqrVLOLAm +DoCjjvbduDDUvvPP +EPCjjvbdCEQAuilf +EOcLKvbdEASIlywX +DncLKvbdRNXayNtz +EOcKjvbdVrOXaeMD +EPCjjvbdFWYopNKF +DnbkKvbdSQTfjFcw +DoDLKvbdJTZAsMwl +DoCjjvbdiCPDEvpq +DncKjvbdVwIwuceH +EPDLKvbdJvVFcdfi +EPCjjvbdcbSlrATm +DnbjjvbdqBJFAXIE +EPCkKvbdTAFJHbOd +EPCjjvbdcTCkUEKB +EPCkKvbdxwhibPzL +EPCkKvbdRpTfifEX +EPDLKvbdvAdYsOeI +DncKjvbdpxngfpdY +EPCjjvbdEXwksstM +DnbkKvbdNrsufeUp +DnbkKvbdJKEAJogE +DoCkKvbdNsUWGduQ +DoCkKvbdbrcLTcjB +EOcKjvbdiHJcZViu +EObkKvbdEztQdkcJ +DoCjjvbdliETptqa +EOcLKvbdOEdUIhjd +DoCkKvbdSKxfVGkT +EPCjjvbdIsZAsMxM +EOcKjvbdZsiIyDsO +DncLKvbduDCtwWOo +DnbkKvbdEztQdlCi +DnbjjvbdLZQjSztf +DoDLKvbdXmqAXuVt +EPCjjvbdxsOJNSCH +DoDLKvbdRadElJZL +EOcLKvbdWRnXbEkc +DncKjvbdSCEFLiYk +EPDLKvbdidkHVPAO +DoCjjvbdkClKqGtg +EPDKjvbduLxXBUAw +DncLKvbdqUTfqqkU +EObjjvbdcImKKevx +DoDLKvbdMgCpMpVL +DnbjjvbdtTRsYydc +DnbkKvbdKefHbBQu +EOcKjvbduoTzpjnt +DoCjjvbdjuwNcaww +DncKjvbdTkvPBVni +EPDLKvbdapGfdLzd +EPDKjvbdvAdZTPEh +EPCkKvbdwXLaVaWV +EOcKjvbdZoNhddyj +DncKjvbdqceIonVa +DnbjjvbdIwsbHkqQ +DoDKjvbdjFKfuPAO +EOcLKvbdbhmJkFvx +DncKjvbdDxYMUUTl +DnbjjvbdMfbpNQVL +DoDLKvbdZeXfzhIb +EOcLKvbdVAbRSpqy +DncLKvbdZxcjOCkr +EOcKjvbdyTNiNSCH +EObkKvbdiLddOUcZ +DoCjjvbddwystRez +DoDKjvbdUsmTelWK +EPDLKvbdEPCjkWcE +DoDKjvbdIwsaglQp +EObkKvbdGcjvJbKK +DoCkKvbdRzJgrbvA +EObkKvbdkxsSSxft +DncLKvbdfHjvSNpg +DnbkKvbdxsNiMqag +DoDLKvbdcImKKevx +EOcLKvbdJutfDdgJ +DoDLKvbdhancEwRR +EObkKvbdnPzYvKyC +DoDKjvbdNHDPlouL +EPCkKvbdKaKgMbXq +EOcLKvbdqUTgSRkU +EPCkKvbdZjSgpHBf +DncLKvbdHffzYxXg +DoCkKvbdFkErbhMu +EObjjvbdhancEwQq +EPDKjvbdJYUCHkpp +EPDKjvbdtkwwBUAw +EOcLKvbdiZuGMRNf +EObkKvbdrJAKElne +DnbjjvbdIHHZxwwg +EPDKjvbdkHgMGGNk +DoCjjvbdeOeSjtUS +DoDLKvbdJbicQjCx +DncKjvbdnGeXlnGy +EPDKjvbdKVtecdfi +EOcKjvbdULuoBVni +DnbkKvbdmJDtRVRa +DncLKvbdJTZAsMxM +EPDKjvbdVgxVxHYz +EPCjjvbdVBCRSqSZ +EPCjjvbdJqZdnfOF +DncKjvbdqdEiQOVa +DnbkKvbdZLqdTnLm +EOcKjvbdzHZMANFX +DncKjvbdVrNxBdkc +DnbjjvbdKkAgvAKZ +DnbjjvbdmbKWxOnV +DoDKjvbdYqMeImEq +EObjjvbdbUagYKtI +DncKjvbdQZNAHSqj +DoDLKvbdfoazvcwh +DnbkKvbdVvhwvDdg +DoDKjvbdURQoUthN +EPDLKvbdvBDyTOeI +DnbjjvbdrRuKmkBN +DnbkKvbdRbDdlIxk +EObjjvbdSCDdkhyL +DoDKjvbdSBceMJYk +DoDLKvbdwyhGGYFS +EPDKjvbdQvmcblID +DoDLKvbdaaWFGQQX +DoDKjvbdEASImZvw +EPDLKvbdnQZyWLYb +EPDKjvbdbrcLUEJa +EOcLKvbdKCicQjDY +EPCjjvbdVBCQsQqy +EPCkKvbdkaNPNALA +DncLKvbdaNKartmH +DoDLKvbdCTAbtFvr +EObjjvbddZxowxpb +EObkKvbdTpqOuUgm +DncLKvbdZQleJNFR +DnbjjvbdUVlPisaR +EObjjvbdBsBCtFvr +EPCjjvbdJutecdgJ +EOcKjvbdfNFvgNKL +DncKjvbddneSjtUS +DoDKjvbdjcMKqGtg +EOcLKvbdGdLWKCKK +EOcKjvbdRDcBPpdS +DoCkKvbdauCGwkTh +EPCjjvbdaNLCStmH +EOcKjvbdelfWgMjL +DoDLKvbdtSrSxyeD +EPCjjvbdemGXGmKL +EOcLKvbduDCuXWOo +DncKjvbdauBfxLUI +DnbjjvbdIHGyyXwg +EPCjjvbdEvYooljF +EObjjvbddneTLUTr +DoCjjvbdySmiNRag +DoDKjvbdqUUHSRjt +EObjjvbdczYpXxpb +EObkKvbdaMkBrtlg +EPDLKvbdnUuZkKRf +DoDKjvbdcScKsdJa +EPCjjvbdsrrTYydc +EObjjvbdZoNiFEyj +EPDLKvbdmttyjirG +EOcLKvbdYqMeIleR +DoDKjvbdKWUfEFGi +EOcLKvbdcyxoxYqC +EObkKvbdNeETiJLE +EPCkKvbdUMWOaVoJ +EPCjjvbdWSOXbElD +EPCkKvbdNHCpNPuL +EObkKvbdEuyQQNJe +DoCkKvbdmgExNOGy +EOcKjvbdZtJJYcsO +EOcLKvbdMpXqVnGs +EObjjvbdbsDLTcjB +EPCjjvbddoFTLUTr +EOcLKvbdaNKbTVNH +DoCjjvbdJcKCpicY +DoDLKvbdsBfMlGjy +EPDKjvbdqiAJdlne +EObkKvbdKefHaaRV +DoDLKvbdbiNJjewY +EPCkKvbdVTltFlWK +DoDLKvbdbBWFGPpX +DncLKvbdVZITzKoO +EPCjjvbdnUtzLKSG +EPCkKvbdBraDTevr +EPDLKvbdTkunaWPJ +EObjjvbdZRNFJNEq +DnbkKvbdxUldqYkn +EPDLKvbdtvOYJpsA +EOcLKvbdJvUfEEgJ +DoDKjvbdlYrqsZGt +DncKjvbdePFSjstS +EPDLKvbdqquLOLAm +DoCkKvbdSPtHKFdX +DoCjjvbdZyDjNcMS +EPDKjvbdTlVnaWPJ +EPCjjvbdZirgpHCG +EObkKvbdNQYQvNfs +DncKjvbdqqtjnLBN +DoDKjvbdjJehJmYS +DncLKvbdrNZixlHi +EPDLKvbdMfcPlpVL +EPCjjvbdUWMQJtBR +DoCkKvbdfMfWfljL +DnbjjvbdaRfDHtFk +DncLKvbdiMFDnVDZ +DoCkKvbdXrkaNToY +DoCjjvbdZLqdUNlN +EObkKvbdRjxetfkT +EOcLKvbdmgFXmOGy +EPDKjvbdUQpntuHm +DoDKjvbdpstHRrKt +DncLKvbdHkazmwRL +EObjjvbdpfEFUWAh +DoDKjvbdZyEJnDMS +EObkKvbdiBoCeXQq +DoCkKvbdeATplxKG +DncLKvbdWRmwadkc +EPDKjvbdUQqPUthN +DoCjjvbdnBjXXnmu +EPDLKvbdZjTIPfbG +EPCkKvbdWHwuxGxz +DncKjvbdYpmFJMdq +DoDKjvbdhbPDFXRR +DnbkKvbdBdQBVimG +DoCjjvbdmIctRUqa +EPDKjvbdZyDjNbkr +EOcLKvbdQYmAHSrK +DnbjjvbdqYoHgQcx +DncKjvbdqiAKFMoF +DncKjvbdOTUWHEuQ +DoCjjvbdVTmTfLuj +DoCkKvbdddoRbWcK +EPDKjvbdIsYaTNYM +EObkKvbdRosfiedX +EOcKjvbdcTDLUEKB +EOcLKvbdmozYujxb +DnbjjvbdZirgogBf +EPCjjvbdKWUeceHJ +DnbjjvbdZoOJEdzK +EPDKjvbdEJhKVwjA +DoCkKvbdfpBzvcxI +DoDKjvbdlrYtysDi +DoDLKvbdZjSgofbG +DoCjjvbdUtMtGMVj +EPCjjvbdGGKRmiTq +EPCkKvbdQvnDcMID +DnbkKvbdKCjCqJbx +EPCkKvbdYpleImEq +DoDLKvbdjKFgjNXr +DoDLKvbdZshhxcrn +EPDLKvbdnVVZjjRf +EOcKjvbdqdFIpNua +DnbjjvbdVwIxVdEg +DoCkKvbduaEZSneI +DnbkKvbdznoqFClY +DoCjjvbdoAKzsgcn +EOcKjvbdSLZGVGkT +DncKjvbdiCObeWqR +EPCjjvbdWRnXbEkc +EObjjvbdRotGiecw +EObkKvbdKDKDQibx +DnbjjvbdlYsRsYft +EOcKjvbdUaBqSprZ +DoCjjvbdhkdcmuDZ +EOcKjvbdjgflFfNk +DoCjjvbdGKdrcINV +EOcLKvbdEJgjVxKA +EObkKvbdSxKkmzkY +DnbjjvbdsZkosBIO +DoCjjvbdBvzchePv +EObkKvbdGYtuBEXb +EPDKjvbdiLeENtby +EPCkKvbdRNXbYnUz +EObjjvbdfHkWRnQg +EObkKvbduDDVXWOo +DoCkKvbdJbjCqJbx +EPDLKvbdpedFTvBI +DncLKvbdjJegjMwr +EPCjjvbdUxgszLPO +EObkKvbdxmrhXsJD +EOcKjvbdJSxaSmXl +EPDLKvbdfNFwGmJk +EPDKjvbdsrrTYydc +DncKjvbdhgKDZVjV +EPCkKvbdZMRctNkm +DoDKjvbdezuyEhtX +EPCkKvbdEXwlUTsl +EPDLKvbdeAUQlxKG +DoDKjvbdZnmiEdyj +EObkKvbdrzMPraIO +EPCjjvbdxxIibPyk +EPCkKvbdKfFgbBRV +DoDKjvbdyzeORhIh +DnbkKvbdbAvFGPpX +DncKjvbdZoOJEdyj +DnbkKvbdrJAJdmOe +DoDKjvbdKVuFdEfi +EOcKjvbdqdFJQNvB +EPDLKvbdOEctIhkE +EPDLKvbdvBEYsOeI +DncKjvbdHELVjBjK +DncLKvbdZshhyDsO +EPDKjvbdGdKuibJj +DoCkKvbdEYXkstUM +DnbjjvbdJpyeOfNe +EPDKjvbdzoPpdbkx +DoCkKvbdMSXMytpz +DncLKvbdqZOggQcx +DoDKjvbdmuUyjirG +DnbkKvbdNVSqkNAX +DncLKvbdRotHJfEX +EOcKjvbdZyEJnCkr +EPDLKvbdyYJKBpZk +DnbkKvbdxmrgxTJD +DnbkKvbdhaoDFWqR +DncKjvbdbhmJjevx +EObjjvbdSKyGVGjs +DnbjjvbdSKxfVHKs +DnbjjvbdqdFIomua +DnbkKvbdkHflGGOL +DoDLKvbdqGDeUVaI +EObjjvbdjmBlZeHP +EPCkKvbdmttykJrG +DncLKvbdRXOEDLgc +DoDLKvbdhaoDFWqR +DoDKjvbdvvkaWAuu +DoCkKvbdbhmKKfWx +EObjjvbdSBdFMJZL +DnbjjvbdnUuZjjSG +EPDLKvbdliDtQuSB +EOcLKvbdsCFmMGjy +DnbjjvbdtunXjQsA +EObkKvbdkCkjqHUg +EObjjvbdDoCkKvbd +DnbkKvbdiZuFlROG +EOcKjvbdRNYCZNtz +EOcLKvbdxUmEpxlO +EPCkKvbddePSBwDK +EOcLKvbdauBfxKsh +DoCjjvbdtkwwBTaX +EObjjvbdmgEwmNfy +DnbjjvbdOStWHEuQ +EPCkKvbdGLFTChNV +EPCkKvbdKDJbpjDY +DoDLKvbdnPzZVjxb +DoCjjvbdFVyPomJe +DncLKvbdACqwizIp +EPCkKvbdZirhQGaf +DncKjvbdtTRsZZeD +EObkKvbdLBLHMbYR +EOcLKvbdrNZjZLgi +EObjjvbdTXkLmzkY +EPCkKvbdBsAbsfXS +EOcKjvbdeATpmXif +DoCkKvbdMSWmZuQz +DncLKvbdVTmTfMVj +DoDLKvbdZxdKODMS +EPDKjvbdZjShPgCG +EPDLKvbdxVMdpxkn +EPDLKvbdcSbjsdKB +EPDLKvbdiifIJlwr +DoDKjvbdKQydoFnF +EObkKvbdegkWRmpg +EObkKvbdiBncFXQq +DoDLKvbdNdctJJLE +EOcKjvbdUyHszKnn +EOcLKvbdSQUHKFcw +EObkKvbdUaBqSprZ +DoCkKvbdSCDeLiZL +EPCkKvbdKDKCpjCx +EPDLKvbdwygfFweS +DoDKjvbdiVZeWqtb +DoCjjvbdMRwMyuQz +DoCjjvbdsCGNLfkZ +DoCkKvbdmRxuZsEJ +EPCkKvbdkDMLRGtg +EObkKvbdGdKuibJj +EPCkKvbdePFTLUTr +EOcKjvbdXrlAlsoY +DoDLKvbdZjTHogBf +DnbjjvbdZirhQGaf +EPCkKvbdFVxooljF +DoCkKvbdbKkeoNcA +DoDKjvbdqYngfqEY +EPDLKvbdrWokcJYq +DoCkKvbdMowqVnHT +EPCkKvbdqqtjnKaN +DoDLKvbdiCPDFWqR +DoDLKvbdeJiqutzn +EObkKvbdqcdiPmvB +EPCjjvbdMgComQUk +DoDLKvbduVnYKQsA +DnbjjvbdjhHLfFmk +EOcKjvbdVvhwvEEg +DnbkKvbdZtIhyESn +DncLKvbdznopeClY +EPCkKvbdwtldqZLn +EOcKjvbdeEnrBwDK +DoCkKvbdkxrqsZHU +DoDKjvbdijGHimYS +DncLKvbdfNGWgMjL +EOcKjvbdmbKWxOnV +EPCkKvbdhtzEvrVC +DoDLKvbdhfibyWJu +DoCkKvbdXrkaMsoY +DoCkKvbdzoPpdbkx +EPDLKvbdSLYeuGjs +EOcLKvbdqlyixlIJ +EObjjvbdnVVZjiqf +EOcLKvbdyNrhXriD +DoCjjvbdRjyFtgLT +EOcLKvbdkyTRryHU +EPCjjvbdrykpTBIO +EObjjvbdlqxtzSdJ +EObjjvbdcarmSATm +EOcKjvbdXsLaNToY +EOcKjvbdlqxtysDi +EOcLKvbdaMkCStmH +DncKjvbdbAvFGPow +EPDLKvbdTulQKTaR +DncKjvbdXGYzUAOs +DncKjvbdezuxeItX +DnbkKvbdrykpTBIO +DoCkKvbdxnShXsIc +DoDLKvbdEPCjkXCd +DnbkKvbdIxUBgkpp +DnbkKvbdBiKbKhfK +DoDKjvbdKNADygVB +EObjjvbdADRxKZiQ +EPCjjvbdMfcQMotk +EObjjvbdSBcdkhxk +EPDKjvbdNrtVgFVQ +EPDKjvbdZMRdTnLm +EObkKvbdehKvRnQg +DoCkKvbdliETptqa +DoDLKvbdEXwktUUM +EObjjvbdBiLBjiFj +EOcLKvbdRkYeuGjs +EOcKjvbdmttzKjRf +EObkKvbdxrmhmRbH +DnbkKvbdyXiJaoyk +EObkKvbdxmrgwsIc +DoDLKvbdiZtfMQmf +DnbkKvbdpxoHfpcx +EObjjvbduaEZTOdh +EObkKvbdqqtkNkAm +DoDKjvbdxmrgxTIc +DncLKvbdMgColpVL +EPCkKvbdZnnJEeZj +EPCjjvbdVYgszKoO +EPCkKvbdBcpAuilf +EObkKvbdlhdUQuSB +EObkKvbdMIbLpxAS +EPCjjvbdnVUyjirG +DoDKjvbdKRZeOenF +DnbjjvbduCbuXWPP +DnbjjvbdssRsYydc +EPCkKvbdlhctQtqa +DoCkKvbdsQVoJcVf +EObjjvbdegkWSNpg +DoDLKvbdOAJTUKSA +DoDLKvbdliEURVSB +DoDKjvbdxsNhlqbH +DnbjjvbdOSsvGdtp +EPDKjvbdaaVeGPow +EObjjvbdNeETiIjd +DnbkKvbdJKEAJpHE +EPCjjvbdANIYsWzY +DoCjjvbdjvWmdCXw +EPDKjvbdrouoJcVf +DnbjjvbdiUzFWquC +DnbjjvbdFxtuBEYC +DnbjjvbdRkYfVHLT +EObjjvbdQwNccMID +DoCjjvbdXsMAmTnx +DoCjjvbdjJfIKMxS +EOcLKvbdbiMikGXY +DoCjjvbdQdDAoqES +EPCkKvbdVwIxVcdg +EOcLKvbdCEQAvKMf +EPDLKvbdzROmJKXA +EPDLKvbdZLrDsnLm +DncKjvbdjggMGFmk +DnbkKvbdddnrBvcK +DnbjjvbdpecdsvBI +EPCkKvbdijFgjNYS +EOcLKvbdUaBqTQqy +DncKjvbdkHgMFfNk +EObkKvbdZGvdAPSi +DnbjjvbdqUTgSRjt +DoDLKvbdqvpLcIyR +DncLKvbdLqvlytpz +DnbkKvbdKDJbpjCx +DoCjjvbdlqyUyrci +DnbkKvbdUQqPUuIN +EObkKvbdTlVnaVni +EOcLKvbdNdcshiLE +EObkKvbdkDMLRHUg +DncKjvbdIxTbILpp +EPCkKvbdePFTKssr +DnbjjvbddeOrCWcK +DnbkKvbdatbGxLTh +EObkKvbdqlzKZLgi +EPCjjvbdOTUVgFUp +EOcLKvbdpfEFTvAh +DncLKvbdZnnIdeZj +EObkKvbdZxdKODLr +DoDKjvbdjggLfGNk +EPCjjvbdRDcAopdS +DncKjvbdlZTRryHU +DncKjvbdZshiYdSn +EPDKjvbdatbHYLTh +EPDKjvbdLAjfmCXq +EPDKjvbdOFEUIiLE +DncKjvbdxVNFQxlO +DoCjjvbdrafNLfkZ +DoCjjvbdGFiqnJTq +EPCkKvbdUsmUFlWK +EObkKvbdLBLHMbXq +EPCkKvbdtlYWaUBX +EPCjjvbdSPsfjGEX +EObjjvbdIjEAJogE +DoDLKvbdNHCpNQUk +DncLKvbdYkqdUNkm +DoCjjvbdqquKmkBN +DnbjjvbdEuyQQMjF +EOcKjvbdURRPUthN +EObjjvbdmoyxvLYb +EObkKvbdGYtuAdYC +DnbjjvbdZeYGzhJC +DoDLKvbdCgLfHAzc +DoDLKvbdhuZeXSUb +DoCkKvbdjlbMZdgP +DoCkKvbdemGWgMjL +EPCkKvbdxxJJaoyk +EPDLKvbdqGEEsuaI +EObkKvbdEKHjVwjA +EOcKjvbdiBoDFWpq +EPCkKvbdffLzNfgA +EObjjvbdDoCjkXDE +EPDKjvbdhficZWJu +DoCjjvbdWWiYVdFH +EPCkKvbdKQzFOenF +DoCkKvbdmbJvxPOV +DnbkKvbdtAHQhAAr +EPDLKvbdmSYtzSci +EPDLKvbddeOqavcK +DoCjjvbdCEQBVjMf +EPDLKvbdlYrqsYft +DnbkKvbdJSyBTNXl +EPCjjvbdcbSmSATm +DoDKjvbdfNFwGmJk +DoCkKvbdGLErbhNV +EObkKvbdiZuFlQnG +DnbjjvbdxUmEpxlO +EPDKjvbdUWMPitBR +EPDKjvbdrafNLfjy +EPDLKvbdrWolDJZR +EObjjvbdhbPDFXQq +DncLKvbdqrUkNjaN +DnbkKvbdBiLCKhej +DoDKjvbdSCEFMIxk +DoDLKvbdffLzNgHA +EPCkKvbdZLqcsmkm +DnbkKvbdZMSEUOMN +DnbjjvbdzaAPHHCM +DnbjjvbdCIkBjhfK +DoCkKvbdZirgpHBf +DnbjjvbdIwtBhLpp +EObkKvbdeOeTLUTr +EObkKvbdUxgszLPO +EObkKvbdhzVGLqOG +DnbjjvbdOTTufdtp +EOcKjvbdZRNEhleR +EPCjjvbdKyRKSzuG +DoCkKvbdZtJJYcsO +EOcLKvbdemGXGmKL +EPDKjvbdJXsahMQp +DoDLKvbdhbObeWqR +EObjjvbdFVxpPljF +EOcKjvbdaNLBruMg +DoCjjvbdpyPIGpcx +EOcLKvbdZMRcsmkm +EOcLKvbdnGeXmNgZ +DoDLKvbdjlalZeGo +DoDLKvbdaSGDHtGL +EPCkKvbdCTAbsewS +EPCjjvbdZjSgofbG +DnbjjvbdJutecdfi +EPCkKvbdIryBSmYM +DoCjjvbdfekzOHHA +DnbkKvbdREDAoqES +EPCjjvbdtTSTYzEc +EPCkKvbdmoyyVkYb +EObkKvbdmfdxMnGy +DoCkKvbdwuNFQxkn +DncKjvbdsBelkfjy +EPDLKvbdQvmdDLhD +EPDKjvbdBhkCLJFj +DoCkKvbdeJiqutzn +EOcLKvbdqTsfrSKt +DoDLKvbdakLfOmcA +DncKjvbdKaLHMawq +EPCkKvbdznopdcMY +DoDKjvbdZtJIyDsO +DoDLKvbdsQVnjCvG +DncKjvbduDDUvuno +DoCkKvbdJYUCHlQp +DnbkKvbdnBiwYPNu +EObjjvbdlYrqryHU +EPCjjvbdqcdiPnWB +DoCjjvbdUQpoUthN +EPDKjvbdsZlQTAhO +EOcKjvbdtbbtwWOo +EPDLKvbdJuuGDdgJ +EOcKjvbdjggMGGOL +EPDLKvbdHffyxwxH +EOcLKvbdSCEElIxk +EObkKvbdIwsbHkqQ +EPDLKvbdjbkjqHUg +DnbjjvbdnQZxujxb +EPDKjvbddePRbWbj +DoCkKvbdhtydwRuC +DoDKjvbdCDoaWKMf +EOcKjvbdRjyGVGjs +EObjjvbddCTNSATm +EOcKjvbdZLrETmlN +EPDKjvbdlrZUysDi +EOcLKvbdwtmFRZMO +EPCjjvbdtTRrxydc +EObjjvbdeFPSBvcK +DoCkKvbdwuNFRZLn +DnbjjvbdhytfLpmf +EPCkKvbdrykpTAgn +EObkKvbdRDcApRDr +DoCjjvbdZnnIeFZj +EOcLKvbdePErkUTr +DoDLKvbdrbGNLgLZ +EObjjvbdVZIUZjoO +DncLKvbdzHYlAMeX +DnbkKvbdbsDLTcia +EPCjjvbdOSsufdtp +DncKjvbdpstHSSLU +DncKjvbduDDVWuoP +EPDKjvbdiMEdNuCy +EOcKjvbdtbcVWuno +DoDKjvbdqUTgRqjt +DncLKvbdZyDjNcLr +DoDLKvbdRWmdDLgc +DncKjvbdZLqdUOMN +DoDKjvbdijGIJlwr +EObjjvbduMYXBUAw +DoCkKvbdHDkWJajK +DoCjjvbdRpTfifEX +DoCjjvbdUyHszKnn +EPDKjvbdqZPIGpdY +EPDKjvbdRWmdCkhD +EObkKvbdsrrSyZdc +EOcKjvbdYlSDtNlN +DncKjvbdbKkennDA +EPCkKvbdiZuGMQmf +EPCkKvbdEztQeLbi +EPCkKvbdaRebgsfL +DoCkKvbdBcpAuilf +EOcKjvbdyNsIYShc +EPCjjvbdcIlijewY +DoCjjvbdmbKXXoOV +DncLKvbduDCtwWPP +EPDKjvbdnCJwXoOV +EPCjjvbdjcLkQgUg +DnbkKvbdtcCtwVno +DncKjvbdGFjRmiUR +DncLKvbdrWpLcJYq +DncLKvbdKWVGDdfi +EPCkKvbdnUuZkJrG +EPCjjvbdiCPCeWqR +DncKjvbdEYYMUUTl +EObjjvbdrpWOicWG +DoDKjvbdFejSOIsq +DnbjjvbdqiAJdmOe +EOcKjvbdUyITzKnn +DoDKjvbdfMfWgMjL +DnbkKvbdXrkaMtOx +DoCkKvbdKefIBaRV +EPCjjvbdyTNhlqbH +EPCjjvbdtlXwBUAw +EOcKjvbdRosfjFdX +DoCjjvbdYpldiMeR +DnbjjvbdwzIFexFS +DncKjvbdSCDeLhyL +DncLKvbdrzLpSaHn +DncKjvbduCcVWuoP +DoDLKvbdatagXkTh +DnbkKvbdsCGMlGkZ +EPCkKvbdkWXNdBww +DncKjvbdJcKCpjCx +EOcKjvbdNxPVzdNt +EPCkKvbdKRZeOfOF +DncLKvbdcIljLGXY +EPDLKvbdVhXuwfxz +DoCjjvbdaoffckzd +EOcKjvbdLhbLpxAS +DnbjjvbdnHExMmgZ +EObjjvbdbhljKfXY +DnbjjvbdkDLkRGuH +EPDLKvbdfHkWSORH +EObjjvbdzoPqFClY +DncKjvbdznopdbkx +EObjjvbdnUtzLKRf +EPCkKvbdZQldiMeR +DoDKjvbdFjeScHmV +EPDKjvbdEOcLKwCd +EPDKjvbdyqOmJKXA +EOcKjvbdSQTfiecw +DoDLKvbdDoDLLXDE +DoDKjvbdhlEcmuDZ +EObjjvbdfHkWRmqH +DnbkKvbdIGfzYwwg +DncLKvbdUWMPjUAq +EPDKjvbdkHflGGOL +DnbkKvbdnPzZVjyC +EPDLKvbdSBceLiYk +DncLKvbdUtMsfLvK +DnbkKvbdbrcLTdJa +EObkKvbdIwtCHkqQ +EPDKjvbdtbcVWvPP +EObkKvbdtbcVWuoP +DoDKjvbdKVtfEFGi +EPCjjvbdMRvlytpz +DoDLKvbdwuMeRYlO +EOcKjvbdlhdTqVRa +EPDKjvbdiGjCyVjV +DnbjjvbdrDeJQNua +DoDKjvbdrbFmMHKy +EOcKjvbdfHjurNpg +DnbkKvbdZRNFJMeR +EOcKjvbdqFdEsvBI +DnbjjvbdZirgogCG +DoDLKvbdDncKjwDE +DoCkKvbdjhGlFfOL +EObjjvbdmaivxOnV +EObkKvbdKkAhWAJy +EOcKjvbdNrtWHEuQ +DnbkKvbdFkFTChMu +EObkKvbdeOdrjstS +EOcKjvbdIwsbHlQp +DoCkKvbdeATpmXif +EOcLKvbdKaKgMaxR +EObkKvbdUGznLvvF +DnbkKvbdbLMGPODA +EObjjvbdTkvOaVoJ +EOcKjvbdsQVoKDVf +EPDKjvbdznopdcLx +DoDLKvbdpfDdsvAh +DncKjvbdrDdhpNua +EOcLKvbdhficZVjV +DncKjvbdFxuVBEYC +EPDKjvbdzjVQQETU +EObkKvbdKRZePGNe +EObjjvbdDncLLXDE +EOcLKvbdYkqctNkm +DoDKjvbdtvOYKRTA +DoCkKvbdmajWxPNu +DncKjvbdIjEAJofd +EPCkKvbdiCPDFWqR +EOcLKvbdIHHZxwwg +EOcKjvbdYpmEiNFR +EOcLKvbdQmYCZNtz +EOcLKvbdVYhTykPO +EPCkKvbdJKEAKPfd +DoCjjvbdRkYfUfjs +EPDLKvbdlZTSTZGt +DoDLKvbdNGbpNQVL +DoCjjvbdvAdZTOdh +EPCjjvbdliDsqUqa +EPDKjvbdSPsfiecw +EOcKjvbdYlRcsmkm +DnbkKvbdwXMAvBVu +EPCkKvbdRjxfVGjs +EOcLKvbdCIkCKiFj +DoCkKvbddxZssrFz +EOcKjvbdREDApRES +EOcLKvbdTpqPVVIN +EObjjvbdaaWEeoow +EOcKjvbddeOrCXCj +EOcLKvbdAMgySvyx +EPDLKvbdNPwqVnHT +EObkKvbdwuMeRYlO +DoCkKvbdTkuoAuoJ +EPDKjvbdmJDspuRa +EPCjjvbdNHCpNQVL +DncKjvbdGcjvKBij +EOcKjvbdbQHHELzd +EPDKjvbdPxmAGrqj +EPCjjvbdRbDdkiYk +EPDLKvbdTAFJHand +DoDKjvbdqmZjZMHi +EObjjvbdtSrTYzFD +DncLKvbdhlEcmtby +EObjjvbdmJEUQuSB +DncKjvbddndsKstS +EPDLKvbdmgFYNOGy +DnbjjvbdSCEElIyL +DncKjvbdmaivxOmu +DoDKjvbdFVyPomKF +DnbkKvbdMpXqWOHT +EObjjvbdKefICBRV +EObjjvbdqGDdtWBI +DnbkKvbdCJLCLIfK +EObkKvbdLqwNZtpz +DoDLKvbdiifHjMwr +DoCkKvbdddoRawDK +DncKjvbdbrcKscjB +DnbjjvbdrSVLNkAm +DnbjjvbdffLynHHA +EObkKvbdTAFJHbPE +DncKjvbdDncKkWcE +EOcLKvbdrouoKDVf +EOcLKvbdZisIPfbG +EOcLKvbdiGicYuiu +DoDLKvbdVgxWXfxz +DoCkKvbdffMZmgHA +EObjjvbdWfZZtAPT +EPDLKvbdEzsqElCi +DoCkKvbdYSlAlsoY +EPDLKvbdFWYpPmKF +DoDKjvbdkNCMZdfo +EPDLKvbdehLWSOQg +DnbjjvbdxxJKCPyk +EOcLKvbdMfcQMpVL +EOcLKvbdnVVZkKRf +EObjjvbdczYoxZQb +EPCkKvbdSQUGiedX +DoDKjvbdeuzwpJzs +DoDLKvbdqZPHfqDx +DoCjjvbdKeehCBQu +DnbkKvbdADSYJyiQ +DoCjjvbdFkFTDHlu +EPDKjvbdZoOJEdzK +EPCjjvbdZjTIQGbG +DncKjvbdZHWdAOri +EPCjjvbdeXystRez +EObkKvbdIxTagkpp +EObjjvbdxZgfFxEr +DoDLKvbdjhHLfGNk +EObkKvbdTfznMWue +DoDLKvbdOSsufeVQ +DncKjvbdVUNTelWK +EPCjjvbdZQmFImEq +DnbjjvbdkClLQftg +DnbjjvbdRXNdDLhD +DncKjvbdTqQoVUgm +EPCjjvbdNQYRVmgT +DoDLKvbdnUuZjiqf +DoDKjvbdbsCjsdJa +EOcKjvbdFkEsDINV +DoDKjvbdyOTHxSiD +EOcKjvbdkMbMZdgP +DnbkKvbdeEnqavcK +DoCkKvbdxZhFfYEr +DncKjvbdNPxQunGs +EOcLKvbdOYOuzdNt +DncKjvbdJbicRKDY +DncKjvbdjAQHAofj +EOcKjvbdWWiYVcdg +DnbjjvbdjFKftoAO +EPCkKvbdTXkLmzjx +EPCkKvbdWSNxBeMD +DoCkKvbduMXwBTaX +DoDLKvbdLBKfmBxR +DoCjjvbdEObjjwDE +EPDKjvbdTlVnaVoJ +DoDLKvbdhgJcZViu +EObjjvbdatbHXjtI +EOcLKvbdZeXfzgiC +EPCkKvbdeFPRbXCj +EPCkKvbdZQleJMdq +DnbjjvbdUWLojUAq +EPCjjvbdFaOpyJzm +DnbkKvbdANIYrwZx +EPCkKvbdbBWEeopX +DoDLKvbdczYpYYpb +EPCkKvbdbVBfxLTh +DoDKjvbdLBKflawq +DoCkKvbdyOSgxSiD +EPDKjvbdkDLkQgVH +EObkKvbdjmBlZdfo +EPDKjvbduoTzqLOt +EOcLKvbdaRebhUFk +EPDKjvbdatbGwjtI +EOcLKvbdCIjbLIfK +DncKjvbdkIGkeemk +DncKjvbdxVMeRZMO +EOcKjvbdRXODcMHc +DnbjjvbdqquLOLAm +DoDKjvbdDHLfHAzc +DoCkKvbdnVVZkKRf +DoDLKvbdGcjvJbKK +DoCjjvbdzoQRFDLx +DoDLKvbdmuUzLKRf +EPDLKvbdtumwiqTA +EOcKjvbdmJDsptrB +EPCjjvbdIGgZxwwg +EPDLKvbdxLXDgzzG +DnbkKvbdQwNdCkhD +DnbjjvbdcasNSAUN +EPCkKvbdTulQKTaR +EOcKjvbdhgJbyVjV +DoDLKvbdKVteceHJ +DnbjjvbdHgGzYwxH +EPCjjvbdxnSgxTJD +EPDKjvbdyYJKCPzL +EOcKjvbdOFDtJJKd +EObkKvbdRadEkhxk +DoCkKvbdiifHjNXr +DoCjjvbdnUtyjirG +EObkKvbdJpydoGNe +DoDKjvbdZLqctOLm +DnbkKvbdsBfMkfkZ +EOcLKvbdOStWGeVQ +EPDLKvbdijGIJmYS +DoDLKvbdxxJJbQZk +DncKjvbdHbLydzAD +EOcLKvbdyTNiMqag +EPDKjvbdMgComQVL +DoDLKvbdzitoocsU +EPDKjvbdsBfMkfjy +DoCkKvbdFyUtaEYC +DoDLKvbdJKEAJpGd +DoCkKvbdygZMAMeX +EPCkKvbdJqZdoFnF +DnbkKvbdiBnbdvqR +EOcLKvbdSQUGjFdX +DnbkKvbdmSYtzTEJ +DoCjjvbdehKvSOQg +EOcLKvbdGckVibJj +DncKjvbdhficYvJu +EPDKjvbdwuMeRYkn +EOcLKvbdFejSNiUR +EPCjjvbdOFEUJJLE +DnbkKvbdXsLaMtOx +EPDKjvbddZyPxYpb +EPCkKvbdhzVFkqNf +DoDKjvbdOEdUIiLE +EPCkKvbdnGeXmOHZ +EObkKvbdiMEdNuCy +DoDLKvbddoFTLTtS +EObkKvbdIxTbHlQp +DncLKvbdZRMdhmEq +DoDLKvbdZnmheEyj +EPDKjvbdKeegbApu +DncLKvbdNVTSLNAX +EOcKjvbdKDJbqKCx +EPCjjvbdFfKSOIsq +EPCjjvbdxnShYSiD +EOcLKvbdOStWHFVQ +DncLKvbdsPvOicWG +DnbjjvbdxnTHwsJD +DoDKjvbdLAkGmBwq +DoCkKvbdwMvAMceN +EOcLKvbdmRyVZsDi +EPCkKvbdmpZyWKyC +DoDLKvbdrykpTBIO +DoCjjvbdVgwvYHYz +EPDLKvbdTvMPjUBR +EOcLKvbdgFkzOGgA +DnbkKvbdVBBpsRRy +DnbjjvbdRzKISbvA +EObjjvbdxnTIXsJD +EObjjvbdZoOJEdyj +EPCjjvbdHDjuibKK +EPCjjvbdezuxdiUX +EOcKjvbdYTMAmToY +EObjjvbdJYTbILpp +DoDKjvbdkClLRHUg +EPDKjvbdTkvPAvPJ +EObkKvbdeAURNXjG +DncLKvbdTukpKUBR +DoCjjvbdcTDKsdJa +DoDKjvbdBsAcUGXS +EObjjvbdDoCjjvcE +EOcKjvbdtlYWaTaX +DnbjjvbdRDbaPpcr +EPCjjvbdrylPsAgn +DoCkKvbdOhAYZAYa +DnbjjvbdiUydwSVC +DoCjjvbdwzIFfYFS +DoCkKvbdZshiZDrn +DoCkKvbdZoOIddyj +DncKjvbdpssgSSKt +EPCjjvbdrSUkNkBN +EPDKjvbdjJfIJlxS +EOcLKvbdxVNFRYkn +DoDKjvbdWWhwvEFH +DncLKvbdRDcBQQcr +DnbkKvbdliETpuRa +EPCjjvbdZRMdiMeR +DnbkKvbdiMEdOVCy +EPCjjvbdznpREbkx +DoCkKvbdwzIFexFS +DnbjjvbdmSYuZrdJ +DoDLKvbdCWzchdov +EPDLKvbdpfEFTvAh +EPDLKvbdyOTIYTIc +DncKjvbdNQXqVnHT +DoDLKvbdCgMFgAzc +EOcKjvbdIwtBgkpp +EPDKjvbdRjyGUfjs +EObjjvbdACqwjZiQ +DoDKjvbdpstGrSKt +DnbkKvbdnGdwmOHZ +DncKjvbdiZtfLpnG +DoDLKvbdaSGCgtFk +DoCkKvbdFfJqnIsq +EPCkKvbdkNCLzEgP +EOcKjvbdFeirOJTq +EOcLKvbdUtNUGMWK +EObkKvbdSQUHJfEX +EPCkKvbdqquKmkBN +DnbjjvbdbhmKKfXY +DoCkKvbdIsYaTNXl +DoCjjvbdZoNheFZj +EOcLKvbdBhjbLIfK +EOcKjvbdatafwjsh +DoCjjvbdkxrrSyHU +EPDLKvbdSCEElIxk +EOcKjvbdfMevfmKL +EPCjjvbdMJBlRYAS +DoCjjvbdSxKkmzkY +DnbkKvbdkNCLydgP +EObkKvbdkxsSTZHU +DoCjjvbdRpUGiedX +EOcKjvbdjblLRGuH +EObkKvbdyTNiMrCH +DnbjjvbdZeXfzhJC +DoDKjvbdZxdJmblS +DncKjvbdOStWHEuQ +DoCkKvbdyNsHwsIc +EPDKjvbdkxrqryHU +EObjjvbdZLqctNlN +DoDLKvbdxnSgxShc +EPDLKvbdnBjWwoNu +DoDKjvbdkIHMGGOL +EObjjvbdqUUGrRkU +DncLKvbdRjyGVHKs +EPDKjvbdhfjCyWJu +EPCkKvbdHELVjBjK +DncKjvbdgQBzvcwh +DoDLKvbdVAaqSpqy +DoCkKvbdySnJNSBg +DoDLKvbdpeceUWAh +DncLKvbdaRebgsfL +EOcKjvbdZLqctNlN +EObjjvbdtbbtvvPP +DoCkKvbdZMSDtNlN +EOcKjvbdsBelkfjy +EPDLKvbdTpqPVVIN +DnbjjvbdBiKbKhfK +DnbjjvbdOFEUIiKd +EPCkKvbdSiZjRAAl +EObkKvbdwjwDgzyf +EPCjjvbdhlEdNtby +EPCjjvbdhtydwSUb +EOcKjvbdnQZyVjyC +DoDKjvbdRzKIScWA +EOcLKvbdLBLHNCXq +DoDLKvbdssSTYzFD +EObjjvbdEvYpPlie +DncLKvbdhficYvKV +EPCjjvbdnUuZkJqf +DnbjjvbdXnRAXtut +EPDKjvbddijRutzn +EOcLKvbdEvYpPljF +DoCjjvbdTulQKUAq +EObkKvbdxmsIYShc +EPDLKvbdkyTRryHU +EObjjvbdCEQAvKNG +EObjjvbdGYuVBEYC +EPDKjvbdvAdYsOeI +EObjjvbdRpUHKGEX +EPCkKvbdKDJcQjDY +DoDLKvbdunszqKoU +DoCjjvbdJvUfEEfi +DncLKvbdrpWPJcWG +DoCkKvbdajkfPNcA +DnbjjvbdFpATXHFy +EObkKvbdFfJrOJTq +DncLKvbdZnnJFEyj +DoCjjvbdOEctIiKd +EPDLKvbdVhXuxGxz +EPDKjvbdySmhlrCH +EOcKjvbdiGjDZWJu +DncKjvbddZyQYZRC +DncLKvbdziuPpETU +DncLKvbdJTYaTNXl +EPCjjvbdNddThiKd +DnbkKvbdbAudepPw +EOcKjvbdMowpunHT +DoDLKvbdmbKXYPNu +DoDLKvbdezvZEiTw +DnbjjvbdrMyixkgi +DnbkKvbdKWVGEFGi +DoCjjvbdkDLjpftg +DnbjjvbdJqZePFme +EObkKvbdDwxLsssl +EPCjjvbdmoyyWLYb +EPCkKvbdFjdrcHmV +DoCkKvbdDwxLtTsl +EOcLKvbdoAKztHdO +EPDLKvbdTkuoAuoJ +DncLKvbdURRPVVHm +EPCkKvbdKCicRJcY +DoCkKvbduDCuXWOo +DoCjjvbdRXNdDMID +DoDKjvbdBcpBWJlf +DoCjjvbdTqROttgm +DncKjvbdRadFMIxk +DoDLKvbdCSaDTewS +EOcKjvbdQlxCYmtz +DncLKvbdeOeSkUTr +DnbkKvbdTqQntthN +DnbjjvbdhbObdvpq +EPDLKvbdMowqVmgT +DncKjvbdANIZTWzY +EPDLKvbdiVZeXRtb +DncLKvbdYNqAXtvU +EOcKjvbdfIKurNpg +DoCkKvbdFpATWfey +EPCjjvbdHkazmwRL +DoDKjvbdJvUfDdgJ +EPCkKvbdSBdElIxk +DoCkKvbdbsCjtEJa +DoDLKvbdvBEYsOdh +EOcLKvbdGGJqmhsq +EOcLKvbdJSyBSlxM +DncLKvbdnQZxukZC +EOcLKvbdySnIlrCH +DoCjjvbdIjEAKPgE +DoDLKvbdhlEcnVDZ +EPDKjvbdZeYGzghb +EPDKjvbdbKlGOnDA +EPDKjvbdkMbMZdgP +EOcLKvbdDoCkKwCd +DnbjjvbdLBLGlbXq +EPDLKvbdZxcinCkr +DoCkKvbdqTsfrRjt +DoCkKvbdADSYJzIp +DoDKjvbdbUagYKsh +EObjjvbdjAQHAofj +EOcKjvbdDoDKkXDE +EPDKjvbdSZigsCvA +EPCkKvbdKRZePGOF +EPCjjvbdKaKgNCXq +EObkKvbdxxJKBoyk +EOcKjvbdxmrgwsIc +DnbkKvbdmozYvKyC +DoCkKvbdqquLOLAm +EObkKvbdDncLLXCd +EPDLKvbdjcMKpftg +EPCjjvbdwkXDgzzG +DoDLKvbdHffyxwwg +DoCkKvbdvAdZSneI +EOcLKvbdrovOjDVf +EOcLKvbdsPuoJbuf +DoDLKvbdySnJNSBg +EObkKvbdXsMAltOx +DncLKvbdFfKSOJTq +EPCkKvbdddnrCWcK +DoCjjvbdySmhlrBg +DnbjjvbdNxPVzcnU +DncKjvbdhtzEvrVC +DoCjjvbdQwODblHc +DoDLKvbdjcLjpgVH +EOcLKvbdbKlGOmcA +EPDKjvbdfMfWflik +DncKjvbdmbJwXnmu +EOcLKvbdTkuoAvOi +DnbjjvbdsZkoraIO +DoDKjvbdZMSEUOLm +EOcLKvbdsCFmLfkZ +DncKjvbdUxhTyjnn +EPDKjvbdRosfjGEX +EOcLKvbdmuUzKirG +EPCkKvbdGGJrOItR +EObjjvbdEXwktUUM +DnbkKvbdiifHimXr +EPDKjvbdmJDspuSB +EObjjvbdwyhGFwdr +DncKjvbdatafwkUI +EPDLKvbdYNqAXtut +DoDLKvbdEPCkLWcE +EOcLKvbdqceJQOWB +EPDKjvbdySnJNSBg +DnbjjvbdyzdnSIIh +DoDKjvbdrDdiQNvB +DoCkKvbdYkqdTnLm +DoCkKvbdlZTSTYgU +EPDKjvbdMpXqWNfs +EObkKvbdJbicQjDY +DoDLKvbdGAoRYizm +DncKjvbdmgExNOHZ +DoCjjvbdznoqFDLx +EOcKjvbdieLGtoAO +DoCjjvbdMfbpMotk +EObkKvbdyzdnSHiI +EObkKvbdcSbjscia +DoDKjvbdNGcQNQUk +EPDKjvbdNGbpMpVL +DoDLKvbdUQqPVUgm +DnbjjvbdVvhwuceH +EPDKjvbdDxXkstTl +EPCjjvbdPyNAHTRj +EPDLKvbdeOdsLTtS +DoDKjvbdTAEiICPE +DoDKjvbdZisIQGaf +EObkKvbdxVMdpxkn +EPCkKvbdnUtzKjRf +EOcKjvbdhtydvrVC +DoDKjvbdbrcLTcia +EPDLKvbdbhlikFvx +EPDKjvbdANIZSwZx +EPDKjvbdtbbuXWOo +EObjjvbdliDtQtqa +DncLKvbdGLFScIMu +DnbkKvbdfMfXGljL +EObkKvbdCTBDTewS +EPDKjvbdSiZiqAAl +EOcKjvbdFfKSNhsq +EPCjjvbdyYJKBpZk +DncKjvbdAMgyTWyx +DnbkKvbdpaJFAXIE +EOcKjvbdEYYMUUTl +EPCjjvbdeFOrBvcK +DoDLKvbdptUHSRkU +DoCkKvbdOYPVzcnU +DnbjjvbdijFhKMxS +DnbkKvbdEKHivXjA +DncLKvbdsPvOicVf +DoCjjvbdmbJvxOmu +EOcKjvbdDxYMUUTl +DoDKjvbdZtIhxdTO +DncKjvbdTlVoAuoJ +DoDKjvbdFyUuBDwb +EObkKvbdQYmAGsSK +DnbkKvbduLwwAsaX +EPDKjvbdegkWRmpg +EPDLKvbdRDcAoqDr +DoCjjvbdFWZPolie +DoCkKvbdbhmJkGWx +DncLKvbdrWpMDJYq +DnbjjvbdaaWEeoow +DoDLKvbdzHYlANFX +DoCkKvbdjFLHUoAO +DnbjjvbdZyEKNbkr +DoDKjvbdLrXMyuQz +EPDLKvbdwNWAMdFN +DoCkKvbdkWXODaxX +EOcKjvbdraelkgKy +EOcLKvbdmSZVZsDi +EPCjjvbdkMbLzEfo +EObjjvbdaSFbgtFk +EObkKvbdmIctRUqa +DncKjvbdhtydvquC +EPDKjvbdZoOJEeZj +DoDLKvbdyXiJaozL +EOcLKvbdVwIxWEFH +DnbkKvbdYpmFJMdq +EPDLKvbdjKGIKMwr +EPCkKvbdFpASwHGZ +DncKjvbdKQzEnfNe +DoDLKvbdkVwODaxX +EPCjjvbdzaAOffal +EObjjvbdnHEwlnGy +DncLKvbdLqwMyuQz +EPCkKvbdWRnXaeMD +DoCkKvbdcbSlrAUN +EPDKjvbdMJBlRYAS +EOcLKvbdZxcimbkr +DncLKvbdCDpBVimG +DoDKjvbdGdKvKBjK +EPDLKvbdziuPodSt +DnbkKvbdbrbjtEKB +EOcLKvbdmIcsptqa +EPDKjvbdMRwMyuQz +DoDLKvbdfHkVrNqH +DnbkKvbdLZRKSzuG +EPDKjvbdTfzmkwWF +EOcLKvbdSKxeuHLT +EPDLKvbdkHgLfGNk +DoDLKvbdVhXuxHYz +EOcKjvbdkHgMGGOL +DoDKjvbdEARhmZvw +EPDLKvbdjKFgimXr +EObkKvbdSQUGiecw +EPCjjvbdjKFhJlxS +DoDKjvbdDxXlTtUM +EPDLKvbdelfWgMik +EOcKjvbdtcDVXWOo +DoDKjvbdiZuFlRNf +DoCkKvbdsBellHKy +EPCkKvbdjlbLyeGo +EOcKjvbdhfibxujV +EObjjvbdhyuGMROG +DoDLKvbdgQBzvdYI +DoDKjvbdeATpmXjG +EPDLKvbdjKFgilxS +DoDKjvbdrpWPJbuf +DncLKvbdDncLKvcE +DoCkKvbdkVvmdCXw +DncLKvbdGcjujCJj +DncLKvbdpxngfpcx +DnbjjvbdiCPCdwQq +EPDLKvbdijFhJlwr +DncKjvbdhgJbxvKV +EPCjjvbdZxcjNbkr +DncKjvbdZQleJMdq +DncLKvbdyfxlAMeX +EPCjjvbdFfJrNiUR +EPDLKvbdzjVQPdSt +DoDLKvbdjAQHBPfj +EObjjvbdZoOJFEzK +EObkKvbdFpATWgGZ +EPDKjvbdvAcxrneI +DoDLKvbdxrnJMrCH +DoCkKvbdjmCLydfo +EPCkKvbdegjuqmqH +DoCkKvbdSBdFLiZL +EObkKvbdbAvFFopX +DncLKvbdGQASwGey +DnbkKvbdQccAopdS +EPCkKvbdZshiYdSn +EPCjjvbdHDjujCKK +EObjjvbduDDVWuno +DoCjjvbdzjVQQDsU +EOcLKvbdeFOqavcK +DoDLKvbdyXhibPzL +DoDLKvbdrzMPsAgn +EObkKvbdUtNTfMWK +EOcLKvbdLqwNZuQz +EPDKjvbdqBJFAXHd +DoCkKvbdnUuZkKSG +DoCjjvbdZHXEAOsJ +DncKjvbdQdDBPpcr +DnbkKvbdCIkBkIej +DnbkKvbdMgDPmQUk +DnbkKvbdxxIjCPyk +DnbjjvbdZsiIxdSn +DoCkKvbdADRxJzJQ +EObjjvbdkxsSTZHU +DncKjvbdWXIxVdEg +DnbjjvbdLrWmZtpz +EPDKjvbdhzUelQnG +DoDLKvbdSBceLhxk +EObjjvbdWIXvYGxz +EPDKjvbdEYXktUUM +EObkKvbdhlFENtby +EPDLKvbdNwnuzcmt +EOcKjvbdaaWEfPpX +DncLKvbdddoSCWcK +EPDKjvbdmaiwXnnV +DoDLKvbdMgDQMpUk +DoDLKvbdjFKfuPAO +DncLKvbdnGeYMmfy +DncLKvbdrSUjmkAm +EOcLKvbdfHkWRnQg +DnbjjvbdnCKWxPNu +DnbjjvbdraemLgKy +EObkKvbdWWiYWDdg +DoCkKvbdKfFgaaQu +EPCkKvbdaSFcIUGL +EOcKjvbdkxrqryHU +DncKjvbdRDbaQQcr +DncLKvbdbVBgXjtI +DoCjjvbdqZPHfqDx +DnbkKvbdcyxowxpb +EPCkKvbdWXIxWDeH +DoCkKvbdyXiKBozL +DnbkKvbdlZSrTYft +EObjjvbdGdKujBij +DnbjjvbdtcDVXWPP +DoDKjvbdZnmhddyj +EObkKvbdTukoisaR +EObkKvbdzoPqFCkx +DncLKvbdLhalQxAS +EPCkKvbdVwIwudFH +DoDKjvbdjKGIKNYS +DoDLKvbdjhHLeenL +EPDKjvbdJTZBSlxM +DoCjjvbdFaOqZJzm +DoDLKvbdnBjXXnnV +DoCjjvbdeFPSCXDK +EPCjjvbdbAvFGPow +DnbkKvbdVwIwvEFH +EObjjvbdqUTfrSLU +DncKjvbdqlyixkhJ +DoDKjvbdSLZFuGjs +DncLKvbdsCGNLfkZ +EPDLKvbdaofgDkzd +DoCkKvbddiirWUzn +EOcKjvbduCcVWuno +DnbkKvbdSPsfjGDw +DoCkKvbdFWYpQMie +DoDLKvbdRECaQRES +EPDLKvbdhfibyVjV +DnbjjvbdqTsgSSLU +EObkKvbdrXQMChyR +DncLKvbdNrtVfduQ +EObjjvbdiUzEvqtb +DncKjvbdUaCQsRRy +EPCjjvbdRbEEkiYk +DncKjvbdUtNUGMVj +EPCjjvbdzHYlAMeX +EPCkKvbdeEoRbXCj +DoDLKvbdcScLUDia +DoDLKvbdtbbuWuno +EOcKjvbdbUafwkTh +DoCjjvbdtcDVXWOo +EOcKjvbdHgGyxxYH +EOcLKvbdWSOXbEkc +DoCkKvbdKeehCBRV +DncLKvbdMgComQVL +DoDKjvbdUMVoBVoJ +DoCjjvbdzoQRFCkx +DoCkKvbdUWMQJsaR +DnbjjvbdkNCLydgP +EOcKjvbdmozYvKyC +DnbkKvbdmgExMnGy +DncKjvbdznpQeDMY +DoDKjvbdZxcjNbkr +EOcKjvbdqdEiQNua +EPDLKvbdfHkVrNpg +DnbkKvbdXsMBMsoY +EObkKvbdcJNKLGXY +EPDLKvbdVqmwbEkc +EPCkKvbdJcJbpibx +EObjjvbdYNqAXtvU +EObkKvbdjAQHApGj +EPDKjvbdrbFmMHLZ +DnbkKvbdPIAXyAYa +DoDKjvbdSLZGVHLT +DoCkKvbdDnbkLWcE +DncKjvbdzoPpeDMY +EPDKjvbdQwNdDLhD +EPDKjvbdhfjCxuiu +DoCjjvbdajkenmcA +EPDKjvbdtTSTYyeD +DoCjjvbdijFhKMwr +DoDLKvbdpfDeTuaI +EPCjjvbdJXtCHlQp +EOcKjvbdjbkkRGuH +EObkKvbdVTlselWK +DoCkKvbdauCHXkTh +DnbjjvbdSLZGVGjs +DoDLKvbdehLWRmqH +DncKjvbdSBdFLhyL +DoDLKvbdmajXYPOV +EOcKjvbdpeceTvAh +EPCjjvbdNdctIhkE +EOcLKvbduWNwjQsA +DoCjjvbdtvOYKRTA +DncKjvbdqiAJeNOe +DnbjjvbdUtNUGLvK +EPDKjvbdMgColotk +EOcKjvbdQlxCZNtz +DoDKjvbdmfdwmNfy +EPDKjvbdrovPKDVf +DnbjjvbdDjIJuwjA +EPCjjvbdsBfNMHLZ +DoCjjvbdJbjDRJcY +EPDLKvbdZRMeJNEq +EPCkKvbdRkYfVGkT +DncLKvbdRbDeLiYk +EPCjjvbdqiAJdloF +DoCjjvbdFyVUaDwb +DoCjjvbdMRvmZtpz +DoDLKvbdGQATWffZ +EPCjjvbdwtmFQyMO +EOcKjvbdTIzKRAAl +DoCkKvbdsQVnicVf +DoDLKvbdFfKRmhtR +EOcKjvbdsCFmLfjy +DoDKjvbdddnqbXDK +DoDKjvbdYgWdAOri +DoCkKvbdmuUyjjSG +EObkKvbdhficYvJu +DoCkKvbdQlxCZNtz +EPCkKvbdGZVUaEXb +DncLKvbdEXxMTtTl +DoDKjvbdGFirNiUR +EPCjjvbdpssgRrLU +EObkKvbdVZHsykOn +DncKjvbdyTOJMrBg +EOcKjvbdRacdlIyL +EObkKvbdiCOcFWqR +DoDLKvbdRjxfVGkT +EOcLKvbdiBncFXQq +DncLKvbdnQZxukYb +DoDKjvbdpaIeAWgd +DncKjvbdVqnYCEkc +DnbjjvbdZRMdhmEq +EPCjjvbdhgKDYuiu +EOcLKvbdCIkBjhfK +EPCkKvbdZnmhdeZj +EOcKjvbdTppnuUhN +EOcLKvbdbVBfxKsh +EPDKjvbdFVxpQNKF +DnbjjvbdjvWnDaxX +EObjjvbdANIYrwZx +EObjjvbdauCHXjtI +EObkKvbdZirgpGaf +EObjjvbduoTzqLPU +DoDLKvbdxZhFeweS +DoCjjvbdILaznWqL +DncLKvbdaMkBrtlg +EObjjvbdNrtVgFUp +DnbkKvbdRzKHsCvA +DoCkKvbdiZuFkpnG +DnbkKvbdEztRElDJ +EPCjjvbdRECaQQdS +EPCjjvbdqqtkNkAm +EObkKvbdyNrhXriD +DoDLKvbdegkWRmqH +DncKjvbdNQXqWNfs +DoDLKvbdRadFLhxk +EPDKjvbdxUmFQyLn +EPCjjvbdxxJKBoyk +EObkKvbdnVUzLJqf +DnbjjvbdSQUGiedX +DncLKvbdrpVnjCvG +DoDKjvbdZirgpGbG +DncKjvbdOAJTUJrA +DnbjjvbdUyHsyjoO +EPDKjvbdfpBzvdXh +EPCjjvbdyTNhlqag +DncKjvbdLBKflaxR +DoCjjvbdVwJXvEEg +EOcKjvbdVqnXadlD +DoDKjvbdyNrgxSiD +EObjjvbdnVVZjjRf +DnbjjvbdFeiqmiTq +EObkKvbdFVxpQMie +DnbkKvbdIBkydzAD +EPCkKvbdZjTHofaf +DncLKvbdnPzYukZC +EObkKvbdLYqKSzuG +Dnbjjvbdxmrgwrhc +EObkKvbdTkuoBWOi +EObkKvbdIrxaSlxM +EOcLKvbdJqZeOfOF +DoCjjvbdBhjbKiFj +EPCkKvbdrDeJPnVa +EPCkKvbdNwoVzcnU +EOcLKvbdXmqAYVWU +EPCkKvbdZeYGzhJC +EOcKjvbdNddUIhjd +DoDKjvbdjggLeemk +EObkKvbdxZgefXeS +EOcKjvbdgFkzOGgA +EObkKvbdNdcsiIkE +EPDKjvbdbiMikFwY +EPDKjvbdelfWfmJk +EOcKjvbdHELWJajK +DoDLKvbdZRMeIldq +EOcLKvbdRXNccMHc +EPCkKvbdQlxCZNtz +DoCkKvbdyTOJMqag +EPDLKvbdCTAcTevr +EOcKjvbdrpVnicWG +DnbkKvbdZLrETmkm +EOcLKvbdRpTfifEX +DnbjjvbdQcbaPqDr +DoCkKvbdEuxpQNKF +EPCjjvbdNeEThiKd +EPDKjvbdVYgtZjoO +DoCjjvbdZRMdhleR +DoCjjvbdZsiIyDrn +EPDLKvbdaSGCgtGL +EPDLKvbdqTtGqrKt +DoCkKvbdnVUzKjSG +EPCjjvbdzQoMiJwA +EPDKjvbdXrlBMtOx +DoCjjvbdNHColpVL +EObkKvbdXnRAXuVt +EObjjvbdMJCMQxAS +EObkKvbdIrxaTMxM +DnbjjvbdbAudfQQX +DnbkKvbdnCKXYOmu +DoDKjvbdEXxMUUTl +EObkKvbdyXhiaozL +EObjjvbdEJhKVwjA +EOcKjvbdpfEFTuaI +EOcKjvbdbVCHYLTh +DncLKvbdyqOliJwA +EOcKjvbdkxrqsZHU +DncKjvbdDjHjVwjA +EPCkKvbdkDMLQfuH +EPCjjvbdUVlPjUBR +DoDLKvbdjJfHimXr +DoCkKvbdEuxooljF +DoDLKvbdYzcGRjWZ +DoDKjvbdwyhGGYFS +DnbkKvbdsrrSxyeD +EPCkKvbdxmrhXrhc +EPDKjvbdDjHivXjA +EObkKvbdfMfXGlik +EPDLKvbdGdKvKBij +DoCkKvbdbLMGOmcA +EPCkKvbdRXNdDLgc +EPCjjvbdZsiIxcrn +DoDKjvbdpyPIGqEY +EPDKjvbdlZTRryHU +DoDKjvbdUslsekvK +DncKjvbdKfFhCBQu +DncLKvbdSCDeMIyL +EPDKjvbdJcJcRJcY +DoDLKvbdraellHLZ +EPCjjvbduDCtwWPP +DnbkKvbdBdPaWJlf +EPCkKvbdqFceUVaI +DnbkKvbdcyxoxYqC +DnbkKvbdlYsSTYft +EObjjvbdZHXEAOsJ +EObjjvbdURROtuHm +EPCjjvbdZLrDsnMN +EPCjjvbdfIKvRmpg +EPDLKvbdwWlBVaVu +EObkKvbdZMSDsmkm +EPDKjvbdKNAEZfuB +DnbjjvbdhyuGMROG +EObjjvbdJuuGDdgJ +EPDLKvbdgQBzwDxI +EObjjvbdjvXNdCXw +EPCjjvbdlZSrSyGt +DoDKjvbdXsLaMsnx +DoDLKvbdTlVoAuoJ +DnbkKvbdptUGrSLU +EObkKvbdEztRFMCi +EOcLKvbdTkvOaVoJ +EObkKvbdDoCjjwCd +EPCkKvbdTfznLwVe +EObkKvbdRjyGUfjs +EPDKjvbdVviXvEFH +DnbjjvbdKkBIWAKZ +EOcLKvbdqFdFUVaI +EOcLKvbdBhjakJFj +DncKjvbdauBgYKsh +DnbjjvbdxKvdHzyf +DoCjjvbdxVMdqYlO +EPCjjvbdEPDLLXDE +EPDLKvbdVvhwucdg +DncKjvbdaRfDITfL +EPDKjvbdfpBzvcxI +DoCkKvbdGLFTDHmV +DoDLKvbdcTDKtDjB +DnbkKvbdZRMeIldq +EObjjvbdRjyGVGkT +EPCjjvbdlhctRVRa +DnbjjvbdyXhibPzL +DnbjjvbdFpASvgFy +DnbjjvbdKCicRJcY +DnbkKvbdPxmAGrrK +EPCjjvbdpstHSSKt +EObkKvbdiZtelQnG +DoDLKvbdKkAgvAJy +EObjjvbdsPvPKCuf +EOcLKvbdhyuGLqOG +EPDLKvbdyOSgxShc +EObkKvbdmJDsptqa +EPCjjvbdbVCHYKtI +DoCkKvbdCJLBkIfK +EPDKjvbdTqQnuUgm +EOcLKvbdypnmIjXA +DoDLKvbdiLddOUby +DoCkKvbdaSFbgtGL +EPDLKvbdraellGjy +EObkKvbdWRmwbEkc +EPCjjvbdDoDLKvcE +DnbjjvbdjEjfuPAO +DnbjjvbdqvokbiYq +DnbkKvbdVZITzLOn +EPDKjvbdUWLpJtAq +EObkKvbdwtmFQyMO +DoDLKvbdFWZQPmKF +EPDKjvbdLBKgMawq +DncLKvbdANIYsWyx +EObkKvbdqvolDJYq +EOcKjvbdQlwbZOUz +EPCkKvbdlqyUzTEJ +EPCkKvbdSLYfUgKs +DoCjjvbdRotHJfEX +EOcKjvbdrXQMCiZR +DncLKvbdaofgELzd +DoDKjvbdehKvSNqH +EPCkKvbdzaAOfgBl +DoCkKvbdVUMsfMVj +DoDLKvbdUGznLwVe +EPDLKvbdDoDKjwDE +DoCjjvbdANHxsXZx +EPCkKvbdJpydnenF +EPCjjvbdtTRsZZeD +DoDLKvbdnQZyWLZC +EPCkKvbdKNADyfta +EPCkKvbdUVlPjTaR +DncLKvbdeOeSjstS +DncKjvbdXrlAmUOx +DoCkKvbdxnTIXrhc +EPDLKvbdZjTIQGaf +DoCjjvbdPxmAGrrK +EPDKjvbdLZQirztf +DoDLKvbdkHflGFnL +DoCjjvbdiMFEOUby +DnbjjvbdhaoDFXQq +EPCkKvbdyzeNqhIh +EPDKjvbdbUbGwkUI +DoCkKvbdEXxLsstM +DoDLKvbdaRebhUGL +EObjjvbdMfbpNQUk +DoDLKvbdCEQAuilf +EObjjvbdMowpunHT +DoDLKvbdzHYlAMeX +DoCkKvbdegkVqnQg +DnbkKvbdwWlAuaVu +DncKjvbdFfJqnItR +EObjjvbdZjTHpHBf +EPCkKvbdbsDKtEJa +EOcLKvbdZtIiZESn +DoDLKvbdpxoIHRDx +EPDLKvbdTpqOtuIN +DnbjjvbdmoyxvKxb +DncKjvbdqGEEtWBI +EPCkKvbdQwNdClHc +DoCkKvbdHELViajK +EPDLKvbdCJLBkIfK +EPDLKvbdvwMBWBVu +EPDKjvbdxrmiNRag +EOcKjvbdxVMeQyLn +DoCkKvbdraelkgLZ +EPCjjvbddndsLUUS +DoCjjvbdhgKDYvKV +EPDKjvbdBiKbKiFj +DncKjvbdKkBIWAKZ +DnbjjvbdjlakzEgP +EObjjvbdNrtWGeUp +EPDKjvbdidkGuPAO +DnbkKvbdjAQHBPgK +DoCkKvbdUxgtZkPO +DoDLKvbdDoCkLXDE +DoDLKvbdkVvmcaxX +EPCkKvbdmfeXmOHZ +DoCjjvbdHDkWJajK +DoDLKvbdkHgMGFnL +EObjjvbdBdQAuilf +EPDKjvbdxUleQxlO +DoDKjvbdJbjDRJcY +EPDKjvbdXsMAltOx +EOcKjvbdIrxaSmXl +DoDLKvbdyYJJbQZk +DoDLKvbdQlwaxnUz +EObkKvbdqvpMDIyR +DoCkKvbdhzVGLpnG +DncKjvbdJKEAJofd +EOcLKvbdZLrETnLm +DncKjvbdQvnDcMID +EPDLKvbdiLddOUby +EOcKjvbdeJiqvUzn +DnbjjvbdsBemMGkZ +EPCkKvbddtAUASmW +EPCjjvbdiLeEOVCy +EPDKjvbdkxrrSyHU +DoCjjvbdURQoVUhN +EOcKjvbdtkwwBUBX +EOcKjvbddeOqawCj +EOcKjvbdbAvEfPow +EPCkKvbdzROmIjXA +EObjjvbdKDKCpibx +EPDKjvbdIGfyyYXg +EOcLKvbdeOdsKssr +EOcKjvbdsBelkgKy +DoDKjvbdJYUCIMRQ +EOcLKvbdjcMLQgVH +EOcLKvbdJTYaSmXl +DoDLKvbdNddUJIkE +DoDLKvbdFjdsChNV +DnbjjvbdmttyjjSG +EPDLKvbdVgwuxHYz +EOcLKvbdsCGMkfjy +EOcKjvbdKWVGDeHJ +EPDLKvbdjJegjMwr +DoCkKvbdNHDQMotk +DoDLKvbdjmBkydgP +DnbkKvbdSLZFtfjs +EPDKjvbdjbkjpfuH +EObjjvbdkVwNdBww +DncKjvbdFxtuBEYC +EPCkKvbdrMzJxkhJ +DoDLKvbdptUGrSKt +EOcKjvbdhzUelQnG +EObkKvbdsQVoKCuf +DoCkKvbdzitpPcsU +DoCkKvbdySnJMqag +DncKjvbdZRMeImFR +EObkKvbdYzcFrKVy +DoDKjvbdrNZjZMIJ +EPCkKvbdEvYoolie +EOcLKvbdLBKgNCXq +DnbkKvbdrpVnjDWG +EObkKvbdLLBHvAJy +DoCkKvbdqmZixkgi +DoCjjvbdhytfLpmf +DnbkKvbdVZHsyjoO +EObkKvbdWWhxWEEg +EObkKvbdhfjDZWJu +DoCjjvbdZoOIddzK +DoCjjvbdCDoaWJmG +DoCkKvbdzitoocrt +EOcLKvbdOSsvGduQ +EOcLKvbdVqnXbElD +EPDKjvbdgFlZnHHA +EOcKjvbdUsltFkvK +EPCkKvbdePFSkTsr +EPCkKvbdssSTYzFD +EOcLKvbdVTlselWK +DncKjvbdZRMeJMdq +EOcKjvbdYSlAlsnx +DncLKvbdSZihTDWA +DnbjjvbdvvlBWAuu +EOcLKvbdEvZPoljF +EPDKjvbdHELWJbJj +DoDKjvbdDjHiuxKA +DncLKvbdrMyjYkgi +EOcLKvbdRbDdlIxk +DoDLKvbdFVyQQMie +EOcLKvbdZxdJmcMS +EPDKjvbdFejRmiUR +EPCjjvbdnPyxujxb +DoCkKvbdjKGIKNXr +DoCjjvbdYSlBNUPY +DoDLKvbdZshiZDsO +EPDLKvbdkyTRsYft +DncKjvbdJbicQicY +DoCkKvbdXGZZtAOs +DnbkKvbdZjSgpGbG +DncKjvbdWSOYBeMD +DoDLKvbdKNADyfta +DoDLKvbdLBKgMbYR +EObjjvbdNddThhkE +EPCjjvbdQdCaPqES +DnbkKvbdvBDySoFI +EPCkKvbdDoDLLWcE +DncLKvbdaSGDHtGL +EObkKvbdKNADzGta +DncLKvbdTAFJHaoE +EOcLKvbdTAFJIBoE +DoDLKvbdUtNTelWK +EPCkKvbdKefICApu +EObkKvbdySmhlqbH +EPDLKvbduaEYroFI +DnbjjvbdSKxfVHLT +EObkKvbdhkdcnVDZ +DnbkKvbdCSaDTevr +DoCkKvbdiBoCeXQq +DncLKvbdZjShQGaf +EPCkKvbdIwsagkqQ +DnbkKvbdnCKWwoNu +DncKjvbdelfWgNJk +EOcLKvbdSPtHKFcw +EObjjvbdZRNEhleR +DoCkKvbdbLMGPNcA +DoCkKvbdRkZFtfjs +EOcLKvbdySmhmSBg +DoCkKvbdWHxVwgYz +EObjjvbdURQntuHm +EPDKjvbdySnJMqbH +EOcLKvbdOStWHEtp +EPCjjvbdeOeTKstS +DncLKvbdssRsZZdc +EObjjvbdrovPKCuf +EPDKjvbdiZuFkqOG +DncLKvbdsBfNLfjy +EOcLKvbdCDpAujNG +EPDKjvbdOSsugFUp +DoDLKvbdNQYRVmfs +EOcLKvbdTAEiHaoE +DoCjjvbdEPDKjwDE +EPCkKvbdqUUGqqkU +EPDKjvbdtbcVXVoP +DnbjjvbdhbOcEvqR +EOcKjvbdCTAcUGWr +EPCkKvbdQdDApQcr +DnbjjvbdTfznLwWF +DnbkKvbdCDoaVjMf +EPCjjvbdBsBDUFvr +EPCkKvbdWWiXuceH +DoCjjvbdJcJcRJbx +DoDLKvbdsCGMlHKy +EPCjjvbdSBceLhyL +DoDKjvbdHffzZYYH +EPCkKvbdvAdZTOeI +DnbkKvbdxwhjBpZk +DncKjvbdOFDtIhjd +DoCjjvbdmpZxujxb +EOcKjvbdIryAsMwl +EPCkKvbdTqQnuUhN +DncKjvbdOSsvHEtp +EPDLKvbdZoOIdeZj +DnbkKvbdKeegbAqV +EPCjjvbdqFceUWAh +DnbkKvbdCWzchdpW +EPCkKvbdzQnlhiwA +DoDLKvbdqdEiQNua +DncKjvbdddoRawCj +EPDLKvbdlYrrSxft +DnbkKvbdRWnECkgc +DncKjvbdGYuUaEYC +EPDLKvbdZsiIxcrn +DoCjjvbdJbibqJbx +EPDKjvbdGYtuBDxC +DnbjjvbdCEQAvKMf +EObjjvbdvAcyTPEh +DoCkKvbdxwhjBozL +DoDKjvbdNsTugFVQ +DoDKjvbdkHgLeemk +EOcLKvbdwWlBVaWV +EOcLKvbdrNZjYkgi +DnbkKvbdJYUBglRQ +DnbkKvbdjvWmdCXw +EObjjvbdmajXYPOV +DncKjvbdDihJuxKA +EPCjjvbdwzIGGYFS +DoDKjvbdMpYQvOHT +DncLKvbdbhljLFwY +EObjjvbdelevgMik +DnbjjvbddePSCWbj +DnbjjvbdKQydnenF +DnbkKvbdZQmEhmFR +DoDKjvbdjKFgimYS +EObjjvbdANIZSvyx +DoCjjvbdfHkWRnRH +EObkKvbddiiqutzn +EOcKjvbdqYnhHQdY +DoDKjvbdKCjDQjCx +DoDLKvbdjgflFfNk +EOcLKvbdtTRrxzEc +DnbkKvbduLwwBUAw +DncLKvbdkWXOEBxX +EPDKjvbdNxPVzcnU +EPCjjvbdUMVnaWOi +EObkKvbdZQmFImEq +DncLKvbdQvmdDMID +EObjjvbdGFjSNhsq +EOcLKvbdbAvFFpQX +DoCjjvbdkCkjqGuH +EPCkKvbdbLLeoNcA +DoDLKvbdemFwGmJk +EOcKjvbdVUMtFlWK +EPDLKvbdWXJXucdg +DncLKvbdqcdhpNua +DncLKvbdGYuUaDxC +EPCkKvbdGZUtaDwb +EOcLKvbdjuwODaxX +EOcKjvbdSKyFuHKs +EOcLKvbdNQYQvOHT +EPCkKvbdNGcQNPuL +EOcLKvbdPIAYZAZB +EObjjvbdMfcPlpVL +EPCjjvbdLAjflbXq +EPCjjvbdySmhmRbH +EPDKjvbdxsNhmSBg +EOcKjvbdZMSDsmkm +DoCjjvbdbAudfQQX +DoCjjvbdePErjtTr +DncKjvbdtkxXBUBX +DoCkKvbdqvokbiYq +DnbjjvbdMfbpMouL +DnbjjvbdijFhKNXr +DoDKjvbdhgJcZVjV +EPDKjvbdIHGzZYYH +DnbjjvbdNsTufeVQ +DnbjjvbdqlyixlIJ +EPDLKvbdmaivxPOV +DnbkKvbdmJDsptrB +DnbjjvbdQYmAGsSK +EOcKjvbdZjTIQHCG +EPDKjvbdqGDeTuaI +EOcLKvbdADSYJzIp +DncLKvbdeuzwoizs +EObjjvbdFyUuBEXb +DncLKvbdnUtykJqf +EPCjjvbdelfXGmKL +EOcKjvbdKCjDQjDY +DncKjvbdaaVeGPow +DncKjvbdqvolDJYq +DoCjjvbdDnbjkWbd +DoCjjvbdjlakyeHP +DoCkKvbdLZRJrztf +DncKjvbdZisIQHCG +EPDLKvbdZyDjNbkr +DnbkKvbdLAjfmBwq +EOcKjvbdtSqryZeD +EOcLKvbdIMBzmvqL +EObjjvbdiVZdvqtb +DoDLKvbdMgDPmQVL +EPDLKvbdMgCpNPtk +EObjjvbdKVuGDeHJ +EOcLKvbdjJehJlxS +EPCkKvbdhlEcmuDZ +DoDKjvbdHfgZyXwg +EPCjjvbdShyiqABM +EPDLKvbdMgColouL +EPDLKvbdVqmwadkc +EPCjjvbdnCKWwnmu +DncKjvbdRpUGjGEX +DoDKjvbdkWWnECYX +DnbjjvbdkMalZeGo +EOcKjvbdxUleRYkn +EObkKvbdFxtuBDxC +EObjjvbdnGdwlnGy +EObkKvbduaEYsOeI +EPCkKvbdyTOJMrBg +EObjjvbdDHMFgAzc +DnbjjvbdEOcKkXCd +EPDLKvbdBhjbLIfK +EPCkKvbdZtJJZETO +EOcLKvbdIwsagkqQ +DoCkKvbdZyDjNbkr +DnbjjvbdBsAbsfWr +DoCjjvbdeOeSjssr +EObkKvbdVUNUGMWK +DncLKvbdfMfWfmKL +DoCjjvbduaEZTOdh +DoCkKvbdZisIPgBf +DnbjjvbdVZHtZjoO +DoCjjvbdCWzchePv +EObjjvbdJmAEZfuB +EObjjvbdvvkaVaWV +DoCjjvbdiiegjNXr +DnbjjvbdcScLUEJa +DncLKvbdJXsbHlQp +EPCjjvbdrpWOjDVf +DoDLKvbdDnbjjwDE +DnbjjvbdxnShYSiD +DoCjjvbdqGEFUWBI +DoDKjvbdtSrTYzEc +EObkKvbdEPDLLWcE +DoDKjvbdKQzEnfOF +EPDLKvbdIwtBhMRQ +DoCjjvbdTvLojUBR +EPDLKvbdZyDimbkr +EPDLKvbdptTfrSKt +DncLKvbdkMbLyeHP +EOcKjvbdKfFhBaQu +EObjjvbdeEoRbXDK +EOcKjvbdHDjvJbJj +EObkKvbdEztQeLcJ +DncKjvbdUtMsfLuj +DnbjjvbdRXOECkgc +DncKjvbdLAjfmBxR +EOcLKvbdsPvPJcVf +EPCjjvbdygYlAMdw +DnbjjvbdmuVZkKRf +EPCkKvbdSZigrcWA +DncLKvbdcJMikGWx +EOcKjvbdGLErcHlu +DoDKjvbdKNADygUa +EPDLKvbdMfbolpUk +DoDLKvbdUxhTyjoO +EPCkKvbdMtrqjmAX +EPDLKvbdLBLGmBxR +DoCjjvbdrzMQTAgn +EPDLKvbdUxhTykPO +DnbkKvbdnVUzLJqf +DoCkKvbdLYpirztf +EPDLKvbdFejSOItR +DncLKvbdvlvANDeN +DncLKvbdwtleRYkn +EObkKvbdcJNKLFvx +EPCjjvbdYSkaNTnx +EOcLKvbdSxKlNzjx +DnbjjvbdHbMZdzAD +EPCjjvbdXnRAXuVt +DoDKjvbdQmYBxnUz +DoCkKvbdWSOYCEkc +DnbkKvbdemGXGlik +EObjjvbdNeDsiJLE +DoCkKvbdbiMijfXY +EPCjjvbdmIdTptrB +DoCjjvbdEztQeMDJ +DncLKvbdCIjbLIfK +EPCjjvbdhkeENuDZ +DoCkKvbdAMgxsWzY +DoCjjvbdiZtelQnG +EOcKjvbdWXJXuceH +EOcLKvbdZRMeJMeR +EPCkKvbdiVZdvquC +DoDLKvbdkVvmdCXw +EObjjvbdnHExMmgZ +EPDKjvbdHgHZyYYH +EPDKjvbdRbEFMJYk +EPCkKvbdvBEZSndh +DnbkKvbdcScLTdJa +DoDLKvbdcJMijfXY +DnbjjvbddndrjstS +EPDLKvbdbiNJjevx +DnbkKvbdOSsvGduQ +DoDKjvbdMowpvNfs +DoCkKvbdZjSgpGaf +DnbkKvbdddnqawDK +DoDLKvbdKaLGmCYR +DoCjjvbdmuVZkKSG +EOcKjvbdZQldiMdq +EObjjvbdRNXayOUz +DncLKvbdeuzxQJzs +DncLKvbdEOcKkXCd +DncKjvbdhtyeXSUb +DnbjjvbdEObjkXDE +DncLKvbdKQyePGNe +EOcLKvbdHgGzZXwg +EObkKvbdrMzJxlIJ +EObkKvbdRXNdClHc +DoDLKvbdwzIFexEr +EPDKjvbdJYUCIMQp +DnbkKvbdhbOcFWqR +EOcKjvbdnGdxMmgZ +EObjjvbddeOqawCj +EPCjjvbdqTsgSSKt +DncKjvbdJXtBhLqQ +DoDLKvbdatagYKsh +EOcKjvbdjEkHUoAO +DncKjvbdLFfICBRV +DnbkKvbdKQydoFme +EPDKjvbdhlFEOVCy +EPCkKvbdZxdJmblS +EPDKjvbdJbjCqKCx +DncKjvbdwNWANDdm +EPDLKvbdpyPHfqDx +EPCjjvbdOTTufeVQ +EPCkKvbdtbbtvvOo +DoCjjvbdbBWEfQQX +EObjjvbdKNAEZgVB +DnbjjvbdJXtBgkqQ +EPCjjvbdGYtuBEXb +DoDLKvbdZjShQGaf +DoDLKvbdQmYCYnUz +EOcLKvbdpedFTvAh +EObjjvbdKQydoGNe +EPCkKvbdKDJcRKDY +EObkKvbdrafMkfkZ +EObkKvbdiCObdwRR +EPCjjvbddBsMrAUN +DoDKjvbdWIXvXgYz +DoDKjvbdkClKpftg +EOcKjvbdkCkjpftg +EOcLKvbdVrOYBeLc +EObkKvbdmoyxukZC +EPCjjvbddZyQXyRC +DoCkKvbdhbPCdvqR +DoCkKvbdJvUeceGi +EOcLKvbdVqnXaeMD +DoCkKvbdWWhxVceH +EPDKjvbdiGjDZVjV +EObjjvbdGAnpxizm +DoCjjvbdiZuFlQnG +EOcKjvbdTqRPVVIN +EPCjjvbdqdEhomvB +DoCkKvbdLAkHMaxR +EPDLKvbdOEdThiKd +DnbkKvbdkxrrTZGt +EOcLKvbdEPDLLXCd +DoDLKvbdTIzKRAAl +EPDLKvbdSCDeLiZL +EPCkKvbdpyOgfpdY +EPCjjvbdtkwwBTaX +EPDKjvbdiBoCeWqR +DoCjjvbdhgJbxujV +DoDLKvbdqdEhpNvB +EOcKjvbdkCkjqGuH +EPCjjvbdhbObeXQq +EOcKjvbdxsOImRbH +DoCjjvbdKWVFceHJ +DoDKjvbdBiKbKiGK +EPDKjvbdnGeXmNgZ +EPDKjvbdiifHjNYS +EOcKjvbdauBgXjsh +DnbkKvbdUtMsfLvK +DncKjvbdNrtVgEuQ +EPDLKvbdUsmUGLvK +EOcLKvbdNGcQMpVL +EPCkKvbdqmZjZLhJ +EObkKvbdFfKSOJUR +DncKjvbdhaoCeXRR +DoCkKvbdmfdwlnGy +EPCjjvbdjbkjqGuH +DoDKjvbdlqyVZsEJ +DnbjjvbdWWiYVcdg +EOcKjvbdeATqMwjG +EOcKjvbdqUTgSSKt +DncKjvbdqwQMDJZR +EPCkKvbdsQVoJbuf +DoCjjvbdVTmUFlVj +DoDKjvbdmajWxPOV +EOcKjvbdUQpoUthN +DoDKjvbdwMvAMdEm +EPDLKvbdDnbkLXDE +DncLKvbdFfKSNiTq +DncKjvbdIryBSlwl +DoDKjvbdmgEwlmfy +DncKjvbdqwPkbhyR +DncLKvbdNeETiJKd +EObjjvbdDoCjkXCd +EObkKvbdjgflFfNk +DncLKvbdxsNhlrCH +DoCjjvbdeFOrCWbj +EObjjvbdkNBkzFHP +DoCjjvbdxrmiNSCH +EOcLKvbdVwJXvDeH +EPCkKvbdZRMdhmEq +EObjjvbdjSzhsKiz +DoCkKvbdqdEiQOVa +EOcLKvbdpaJFAWhE +EPDLKvbdRkYfVGjs +DncKjvbdMpXqWNgT +EOcLKvbdVYhUZkPO +DoCjjvbdUxhTyjnn +DoCkKvbdOYOuzcmt +DoDKjvbdZLqdUNlN +DoDLKvbdJSyBTMxM +DoDLKvbdYORAXtut +DncKjvbdHffzYxXg +DncLKvbdmpZyVjyC +EOcKjvbdmfeXlnGy +DoDLKvbdkHfkeenL +DoDLKvbdJTZBSmYM +EObkKvbdrMzKZMHi +DncLKvbdiLeDmuCy +DoDKjvbdjvXNcbYX +DnbkKvbdrJAJeMne +DoDLKvbdvlvAMdFN +EPCjjvbdZLrDsmlN +DnbjjvbdaaVdfPpX +EObkKvbdrbFlkfjy +DoDKjvbdGLErbhNV +DoCjjvbdCIkCKhfK +DnbjjvbdeEoSBwDK +DncLKvbdirziSjiz +EPDKjvbdwzIGGYEr +DncKjvbdbVCGwkTh +EObkKvbdakMFnmcA +DnbkKvbdRpUHKFdX +DoDLKvbdMSWlytpz +DncLKvbdpssgRrKt +EPCjjvbdZRMeImEq +DoCjjvbdqrVKmjaN +EObjjvbdjAQGaPfj +DoDLKvbdyqOmJJwA +DnbjjvbdQccApRES +DoDLKvbdIsYaSmXl +EPCjjvbdrovPKDWG +EPDLKvbdqdEhpOVa +DoCkKvbdVviYVdEg +DoCjjvbdqZPIGqEY +EPCkKvbdOTTvGeVQ +DoCkKvbdDncLLXCd +EObkKvbdvBEYsOeI +DoCjjvbdYORAYVVt +EOcLKvbdhgKCxuiu +DoDKjvbdddoRbWcK +EObkKvbdmoyyWKyC +EOcLKvbdyYJJbQZk +DnbjjvbdUyIUZkPO +DncKjvbdFyUuBDxC +DoCjjvbdnQZyVjyC +DoDLKvbdatbHYKsh +DoCjjvbdczYowxpb +DncLKvbdIsZAsMxM +EPDKjvbdGKeTChMu +DoCkKvbdptTgSRjt +EPDKjvbdMtrqjmAX +DncLKvbdKQzEoFme +EObjjvbdFxtuAcxC +DncKjvbdkDLkRHVH +EPCkKvbdunszqKnt +DoCkKvbdezuxeJTw +EObkKvbdzjVQQDsU +EPDLKvbdjKGIKMxS +DoCjjvbdcyyQXxqC +EObkKvbdhtydwRtb +DnbjjvbdfNGXHNKL +DoDKjvbdmoyxujxb +DncLKvbdmuVZkJqf +EObkKvbdZyDjNbkr +DnbkKvbdyXhiaozL +EObkKvbdKWUfDeHJ +DoCkKvbddoFTLUUS +DnbjjvbdJvUfEFHJ +EObjjvbdsrqrxzFD +EObjjvbdmgFYMmfy +DnbjjvbdbrcLTcjB +EPDKjvbdZtIiZETO +DncKjvbdSLZGVHLT +EObjjvbdhtzFXSVC +EOcKjvbdvAcxsPEh +EOcKjvbdbrbjsdKB +DoDKjvbdezuxdiTw +DoDKjvbdhkdcnVDZ +DoCkKvbdNddUJIkE +DnbjjvbdsCGMlGjy +EOcKjvbdssSSxydc +DoCjjvbdSPtHJfDw +DoDLKvbdmRyVZrdJ +EOcLKvbdBdQBVjNG +EPCjjvbdtvOXipsA +EOcLKvbdDwwlUUUM +EObkKvbdhkeENuDZ +EOcKjvbdwygfGYEr +DncKjvbdbsCkUEJa +DnbkKvbdvlvAMceN +EPDKjvbdTvMPitAq +EPDLKvbdMowpvOHT +EOcKjvbdNQXpvNgT +DncKjvbdYzcFqiuy +EObjjvbdqUUGrRjt +EOcKjvbdUaBqTRSZ +DnbjjvbdrafMkfjy +DncLKvbdmgFXmNfy +DncKjvbdNrtVfdtp +EOcKjvbdVZITyjoO +EPDKjvbdTukpJtBR +DoDLKvbdyOTHxTIc +DnbjjvbdsBfNLfkZ +EPCjjvbdmJDtRVSB +EObjjvbdmJDtRUrB +DnbjjvbdiVZeWrVC +DncKjvbdBiKajhfK +DnbkKvbdziuQPcsU +EOcKjvbdGFiqnJTq +DoCjjvbdAMhZTXZx +DncLKvbdDjHiuwjA +DnbkKvbdBdQBVjNG +EPCjjvbdqlzKYkgi +DncLKvbdLLBIWAJy +DncLKvbdbhljKfXY +DncKjvbdaogHELzd +DnbkKvbdjEkGtoAO +DnbjjvbdGdKvJbKK +EPDLKvbdqrUjnKaN +EObjjvbdnVUykKSG +EPDKjvbdVrNwbFMD +DoDKjvbdvlvAMdEm +EPCjjvbdaaWEeopX +EPDLKvbdULuoBVoJ +EPDLKvbdzjUpPcsU +EPDKjvbdZnnJEdyj +EPDKjvbdtlXwAsaX +EPCjjvbdjJfHimXr +EPCkKvbdxwiKBpZk +DoCkKvbdLiBlQxAS +EObkKvbdXFxytAOs +EObjjvbdnQZxukYb +DncKjvbdZxcjNcMS +DnbkKvbdQcbaQQcr +EObkKvbdVgxVwgYz +DoDLKvbddoEsLUUS +EOcKjvbdTppnttgm +DoDKjvbdBhkBjhej +EPCkKvbdlhcsqVRa +DoDKjvbdZshiYcsO +DoDKjvbdtcDUvvPP +DnbkKvbdRkZFuGjs +DoCkKvbdaaVeFopX +EObkKvbdYORAXtut +DncLKvbdqwPlDJYq +DoDLKvbdbBWEepPw +DnbkKvbdVvhxWDdg +EObkKvbdfHkVqmpg +DncKjvbdaMjartmH +EPCkKvbdBhjbLIej +DoCjjvbdCIjbKiFj +DoDKjvbdkIHLefOL +EOcKjvbdrbGMlGkZ +DncLKvbdPxmAGsRj +EOcKjvbdZxdKODMS +DncKjvbdkDLjqHUg +EOcLKvbdjEkHUoAO +DoDLKvbdrovOjDVf +DncLKvbdZshiZESn +DncKjvbdUyIUZjnn +EPDLKvbdxmrhYSiD +DoCjjvbdaNKasUlg +DnbkKvbdYqMeJMdq +DncKjvbdZoOIeEyj +EOcKjvbdemGXGlik +EObjjvbdyzdnRhIh +DncKjvbdHEKvJbJj +EObkKvbdSCDdlIxk +EPCjjvbdGAoQxizm +DoCjjvbdaNKasVMg +EObkKvbdePErkTtS +EPCjjvbdlhdUQuSB +EPDKjvbdNQXpvOGs +DoCkKvbdXnRAYUut +EObkKvbdcTCkUEKB +DncLKvbdmRyUzSdJ +EPDLKvbdrSVLNkAm +DoCkKvbdJvUecdgJ +DoDLKvbdRDbaQRDr +EPDKjvbdYlSETmlN +EPCkKvbdbUagYKtI +EPCjjvbdssRrxzFD +EPCjjvbdRMwbYmtz +DnbjjvbdxrmhmRag +DoDKjvbdTvLpJtAq +EPDKjvbdVBBprprZ +DnbkKvbdRkYeuGkT +EOcKjvbdmbKWwoOV +EOcKjvbdZeYGzghb +EPCjjvbdFeirOJUR +DoCkKvbdZsiIxcrn +EPDKjvbdDnbkKvcE +DoDLKvbdsrrTZZeD +DncKjvbdJbjCpicY +DnbjjvbdcyxpXxpb +EPCjjvbdrXQLbhxq +DncKjvbdzROmJJwA +DoDKjvbdqdFIpNvB +EPDKjvbdkHfkfGNk +DoDKjvbdFjdsDINV +DoDKjvbdUyITyjoO +EOcLKvbdiUzEwRtb +EPCkKvbdmfeYMmgZ +DncLKvbdHgGyyXxH +EObkKvbdMuTSLNAX +DncKjvbdtbcUwWOo +DoCjjvbdVwIxWEFH +EOcKjvbdhgJcZWKV +DoCjjvbdsCFllHLZ +EPDKjvbdGcjvJbKK +EOcLKvbdnGeYNNfy +DncKjvbdZnnIeFZj +DoDKjvbdxUldqZLn +EOcKjvbdrovOibvG +DoDKjvbdUWLpKTaR +DncKjvbdePFTKtTr +EPDLKvbdFxtuAdYC +DoDLKvbdfIKvRnQg +EPDLKvbdypnmIjXA +DncKjvbdbUagYLUI +EPDKjvbdnVUyjiqf +EObkKvbdKWVGDeGi +EObkKvbdaNKbSuMg +DoDKjvbdNVSqkNAX +EObkKvbdhbPDFWqR +DoDLKvbdLGFhBaRV +EOcKjvbdbrcLUDjB +EObjjvbdZHXEAPTJ +EPCjjvbdCSaDTevr +DncLKvbdgQBzvcxI +EObjjvbdidjfuPAO +DoDLKvbdzjUoodTU +DncKjvbdGLEsChNV +EPCjjvbdNeDshiLE +EObjjvbdGGKRnIsq +EObkKvbdeYZtTqez +EOcKjvbdQwODblHc +DoCkKvbdkClLRHVH +EPCkKvbdxUldqYkn +EPCkKvbdvBDxsPFI +DnbkKvbdqvpLcIyR +DncKjvbdqmZixkhJ +DoDLKvbdkVwNdCYX +EObkKvbdUxgsykPO +EPCkKvbdjcLjpgUg +DnbjjvbdbUagYKtI +EObjjvbdDjHjWXjA +EObjjvbdrykpSaIO +EObjjvbdrbGMlGjy +DncLKvbdVYhUZjnn +DoDLKvbdjlakydfo +DnbkKvbdVTmUGMVj +EObjjvbdZjTIQHCG +EOcLKvbdZxcjNcLr +DoCkKvbdqTsgSRjt +DnbjjvbdCIkBkJFj +EPCkKvbdaogHELzd +EPCjjvbdNPxQunGs +EObjjvbdxZhFfXeS +DoDKjvbdjblKqHUg +EObkKvbdNPxRWNgT +DoDKjvbdkaNOmALA +EPDLKvbdxsOImSCH +EOcLKvbdZshhyETO +EPDLKvbdIHHZyYYH +DoDKjvbdliEURVRa +EObjjvbdiVZeXRtb +EOcKjvbdiHJcYvJu +EOcKjvbdIsYaTNXl +DoCkKvbdtlXvaTaX +EOcKjvbdNQYRVnHT +DoDKjvbddjJqvUzn +DoDKjvbdULuoBVoJ +DoDLKvbdUslselVj +EPCkKvbddePSCWbj +EPDKjvbdNeDtIiKd +EOcKjvbdiUzFXSUb +DoCkKvbdmRyVZsEJ +EPCjjvbduLwwAtBX +EPDLKvbdxZgfGXdr +DnbkKvbdBcpAujNG +DnbjjvbdZtJIyDrn +EObjjvbdmbJvwnmu +EPCjjvbdXnRAYVWU +EOcLKvbdyOShXsJD +DoCjjvbdptUGqqkU +DnbkKvbdFpASwHGZ +DnbkKvbdwtleRYlO +EPCkKvbdnHFYMmfy +EPDKjvbdKCjDQjDY +EObkKvbdeqaWzlDP +DoCkKvbdbLMGPODA +DoCjjvbdpyPIGqDx +EOcKjvbdbhmKLFwY +DoDLKvbdEOcKjwCd +EPCkKvbdePFTKtUS +EPCkKvbdtvNwipsA +EPCkKvbdzoQQdblY +EOcLKvbdKjaHvAJy +EPDKjvbdvPTzpkOt +EPDKjvbdMJCLpxAS +EObkKvbdWWhwvEEg +DnbkKvbdcJNJjevx +DoCkKvbdNQXpunGs +EPDKjvbdWSNxBdlD +EPDKjvbdwyhFeweS +DncKjvbdddnrCWcK +EObjjvbdeKJrVtzn +EObjjvbdrykosBIO +EPDKjvbdiiehKMxS +DncKjvbdrWpMCiZR +DoCjjvbddoFSjssr +DoCjjvbdbhmKKfWx +EObjjvbdmajWwoNu +EOcLKvbdDxYLstUM +EPCjjvbdddoRawDK +DncKjvbdmuUzKjSG +DoDKjvbdLFegbBRV +EPCkKvbdySnJMqbH +DnbjjvbdLLAgvAKZ +EPCjjvbdraemMHLZ +EObjjvbdnUtzLKSG +EPDKjvbdkDMLQgVH +DoDKjvbdkHgMGGOL +DoCjjvbdxsNiNSCH +EObkKvbdNQXpvOHT +EObkKvbdQwNdDLgc +DnbjjvbdegkWRnRH +DnbkKvbdGZUuAcwb +DncLKvbdiMEcmuCy +DoDLKvbdFfJqnJTq +DoDKjvbdZnnJFEzK +EOcLKvbdTqRPUtgm +EOcLKvbdRjyFuHLT +EOcKjvbdhtzEwRtb +EObjjvbdTXjkmzjx +DoDKjvbdqdFJQOVa +DoCkKvbdGckViajK +DncLKvbdDxXlUTsl +EOcLKvbdeUAUASlv +DnbkKvbdzjUpQETU +DnbkKvbdtcCuWuoP +DncLKvbdauBgXkUI +DoCjjvbdUVlPitBR +DnbkKvbdFfJrOItR +DoDLKvbdxnSgwsJD +EPCkKvbdXsMBNToY +DncLKvbdCTAcUFwS +DoDKjvbdhgJbxvJu +DoDLKvbdhkeDnUby +EObkKvbdEvZPpNKF +EPCjjvbdiHJcZWJu +EObjjvbdIHHZyYXg +DoCkKvbdegkVqmqH +DoCjjvbdxVNFRZMO +DoDLKvbdUQpntuIN +DoDKjvbdEJhJuwjA +DoDKjvbdkHflGGNk +DnbkKvbdmttykKRf +DncLKvbdZxdJmblS +DnbjjvbdZQmEhmEq +DoCjjvbdJcJcQjDY +DoDKjvbdBhkCLIej +DoDLKvbdmIcspuRa +DnbjjvbdqiAKElne +DoCjjvbdJpzEoFnF +EOcKjvbdyOShYTJD +DoCkKvbdmuVZjiqf +DoDLKvbdSCDeLhyL +EOcKjvbdJvUedFGi +EObkKvbdehLWRnRH +EPDKjvbdxmrhXriD +DoDLKvbdOTUWGeVQ +EPCjjvbdzRPMhiwA +EPDKjvbdKRZePGOF +DoCkKvbdrDeIomvB +EPDKjvbdkVvmdBww +DoDKjvbdIGfzYwwg +EPDLKvbdFVyPpNKF +DoDKjvbdhytfLqNf +DnbjjvbdMfbomQUk +EOcLKvbdtcDVXWOo +DoDKjvbdqwPlDJYq +EOcLKvbdZshiZETO +EOcLKvbdeEnrCXCj +EOcKjvbdZLrDsnLm +EPCjjvbdLYqKSzuG +DncLKvbdMtsRjmAX +DoCjjvbdJTZArlxM +EPCkKvbdlZSrTZGt +DncKjvbdRyjITCvA +DoCjjvbdEuxpPmKF +DnbkKvbdTYKkmzjx +DoDLKvbduDDVXWPP +DncLKvbdjAPfaPgK +DncLKvbdrEFJPnVa +EPCjjvbdrXQMChyR +DnbkKvbdznpQeDLx +DoCkKvbdjgflFfOL +EObjjvbdjlalZdgP +DoCjjvbdtbcUvvOo +DoCkKvbdrEFIonWB +EObjjvbdwXMAvAuu +DncLKvbdePFSkUTr +EPCkKvbdTppoUuIN +EPDKjvbdIxUCHlQp +DnbkKvbdBiLBjiGK +DoDKjvbdliDspuRa +EObjjvbdFkFTDIMu +EPCjjvbdsQVnjDVf +EPCjjvbdKefIBaRV +DoDKjvbdIryAsNYM +DoCkKvbdsrqrxzEc +EPCjjvbdLqwNZuQz +EOcLKvbdcIlikGXY +DoCjjvbdADSXizIp +DoCkKvbduaEZTOeI +DncKjvbdvBDyTPEh +EPCkKvbdRkZFuHKs +DoDLKvbdSLZFuGkT +EOcLKvbdfekzOHHA +EOcLKvbdkaMoNALA +DncLKvbdkNCMZeGo +EObjjvbdNsUVfduQ +EPCjjvbdZoNiEeZj +DoDLKvbdLYpirzuG +EPDKjvbdmoyxujyC +DoCkKvbdaMjbSuNH +EPDLKvbdxxIjCPzL +DnbkKvbdVAaqSprZ +DoCjjvbduVmxJqTA +DoCkKvbdRkZGVHLT +DoDKjvbdEuyQPljF +DnbkKvbdptUHSRkU +DncLKvbduLxWaUAw +EObjjvbdaaVdfQQX +EPDLKvbdWWiYVdFH +EOcLKvbdfelZmgHA +DoCjjvbdADRxKZiQ +EOcKjvbdfHkWSORH +EObkKvbdTAEiIBoE +DncKjvbdEKIKVxKA +DoCkKvbdkDMKpgVH +DnbkKvbdCWzciEpW +EObjjvbdxZgefXeS +EOcLKvbdsZkpTBIO +DoDLKvbdrJAKFMne +EPDKjvbdkWXNdBww +DnbkKvbdRbEFLhyL +DncLKvbdWXJYWDeH +EOcLKvbdijFgjMwr +DoDLKvbdnHExMnGy +EObkKvbdZeYGzhJC +DnbjjvbdEvZPpMie +EObjjvbdYpldiMdq +DoCjjvbdfRaWzlCo +EPCjjvbdGYtuBDxC +EOcLKvbdQYmAGrrK +EPCkKvbdlhcspuSB +DoDLKvbdezvZFIsw +EOcKjvbdlYsSTZHU +DnbkKvbdmfeXmOGy +DncLKvbdKDKDQicY +DncKjvbdZjTIQHCG +DnbkKvbdgFkzOHHA +DnbkKvbdaNLBsVNH +DoCjjvbdBsBCtGWr +DncKjvbdqdFIomvB +DnbkKvbdkNBlZdfo +DnbkKvbdSQTgKGDw +DoCkKvbddoFTLTsr +DoDKjvbdEYYLtTtM +EOcKjvbdVwJYWEEg +DoDLKvbdyOSgwrhc +DoCkKvbdZMRdUOLm +DoDLKvbdYSlBMtOx +EPCkKvbdkxsRsYft +DnbkKvbdrzLpTAgn +DncKjvbdRjxfUgKs +DnbkKvbdqquLNkAm +DoDLKvbdRMxCYnUz +EPCjjvbdZoOIdeZj +EObkKvbdrpWOicVf +EPDLKvbdkCkjqHVH +EOcKjvbdmSZUzSci +EObjjvbdRjxfUgLT +EObjjvbdNddThhjd +DoCjjvbdKVuFcdfi +EPDKjvbdzjVPodTU +DncKjvbdJTYaSmXl +DncKjvbddZyQXyQb +EPCjjvbdCIkCKiFj +EPDKjvbdTkunaWOi +EObjjvbdfIKuqnRH +DoCjjvbdZRMdiMeR +DnbjjvbdMpXpunHT +DoDLKvbdZRNEhmFR +EObjjvbdaoffdLzd +DoDLKvbdvAdYsOdh +DnbjjvbdSLZGUgLT +DoCjjvbdSCDdkiZL +DoDLKvbdelewHNKL +DoCjjvbdRXNdDMHc +EObjjvbdkWWnDaww +EObjjvbdcyxoxZRC +DncKjvbdelfWfljL +EObjjvbdZnnJEdzK +EOcKjvbdkHflGFnL +DoCkKvbdhbPCdwRR +EPDLKvbdHDkWKCKK +DnbkKvbdRadEkiYk +EOcLKvbdFWYopNJe +DoDLKvbdqTsfrSKt +EObjjvbdxnSgxTJD +EPDLKvbdxZhFewdr +EPCkKvbdTvLojTaR +EObjjvbdfIKuqnQg +EPCjjvbdDxXlTssl +EObjjvbdQvmccLhD +EObkKvbdRNXayOUz +EPCjjvbdatbGxLTh +EOcKjvbdOSsvGeVQ +EPDKjvbdePFTKstS +DnbjjvbdlYsRsZHU +DnbjjvbdZisIQGaf +DoCkKvbdsrqsYzEc +EObjjvbdfILVqnRH +DnbkKvbdZHWdAPTJ +DoDLKvbdEPCkLXCd +EObjjvbdEXwktTsl +DncLKvbdFVyQPlie +DncKjvbdNsUWHEtp +EOcKjvbdyqOmJKXA +EOcKjvbdADSYJyhp +EPDKjvbdUyIUZjoO +EOcKjvbdmJEURVSB +DnbjjvbdIwtBgkpp +EPCjjvbdZQmEhldq +EPCkKvbdDjHiuxKA +DoDKjvbdrEEiQOVa +DncKjvbdKDKDQjCx +DncKjvbdZRNFJMeR +DncLKvbdwygeeweS +DncLKvbdnUuZkKSG +DoDKjvbdvwMAvBWV +DoCjjvbdBhkCLIfK +DnbjjvbdoznDkXoA +EOcKjvbdjgflFemk +EObkKvbdKVtfDdgJ +DnbjjvbdXrkaNUPY +DncKjvbdhlEdNtby +EPDKjvbdemGWfmJk +DoDLKvbdlhctQtrB +EObjjvbdnVVZkJqf +EObjjvbdwuNEpyMO +DoCjjvbdTpqOuVHm +EObjjvbdbLLennDA +DoDLKvbdiGjDZWKV +EPDLKvbdFjeTDHlu +DoDLKvbdDxYLstUM +EPDLKvbdiUzFXSVC +DncKjvbdJYTbHkpp +DoCkKvbdZshhxdSn +EPDKjvbdxrnIlqag +EOcLKvbdiHJcYvJu +DnbjjvbdkVwNcaxX +EObjjvbdpyPIGpcx +EPCkKvbdauCGxLUI +EObkKvbdWRnXadkc +DnbkKvbdVUNUGLvK +EObkKvbdDxYLsssl +DnbkKvbdCJKbKhfK +DncLKvbdbhmKKfXY +EOcLKvbdZoOIeFZj +DoDLKvbdkNCLzFHP +EObkKvbdpxnggQdY +EObkKvbdYqNFJNEq +EPCjjvbdyzdnSHhh +EOcKjvbdczZQYZQb +DncKjvbdZyDimblS +DncLKvbdyOTIXrhc +EObjjvbdhzUelQnG +EObjjvbdFjeTChNV +DoCjjvbdwMvANEEm +DoDLKvbdRXOEDMID +DncKjvbdiHJcYvJu +EOcLKvbdhtzFWrVC +DncKjvbdVYgsykPO +DoCjjvbdGGKRmiUR +EPDLKvbdQmXbYnUz +DnbkKvbdkIGlFemk +DoCjjvbdSPsgJfDw +DncKjvbdzjVQPcrt +EPDKjvbdmfdxNNfy +EPDKjvbdZyDimblS +DoDKjvbdANIZSvzY +DoCkKvbdJqZdoGOF +EOcKjvbdcJMijewY +DncLKvbdNQXqWNfs +DncLKvbdkNBlZeGo +DoCjjvbdHffzZYXg +DoDKjvbdjhHMGGOL +DnbkKvbdiCObdvpq +DoDLKvbdYlRctNkm +EObkKvbdiUzEwRuC +DncLKvbdMfbomPuL +EPCkKvbdlZSrSyGt +DncLKvbdvAcxroFI +DoCjjvbdNGcQNQUk +DncKjvbdWSNxBeLc +EPCkKvbdqvokcIyR +DncLKvbddZyQXxqC +DoCkKvbdvPTzqLPU +DncLKvbdZxcjNblS +EPCjjvbdkMbLzFHP +EPCkKvbdlYrqsYgU +DnbjjvbdWSOXbFMD +DnbkKvbdWeyZtAPT +EPCkKvbdEKHivYKA +DoCkKvbdkNBkyeGo +DoDLKvbdiBoDEvqR +DoDLKvbdRkYfVGjs +EOcKjvbddneSkUTr +EObjjvbdFejRnItR +DncLKvbdLAjgMbXq +DnbkKvbdUGznLwVe +DoDKjvbdLqwNZtpz +EPDKjvbdUxhTyjnn +EPDLKvbdkNBkyeHP +DoCjjvbdgFkzNgHA +EObjjvbdunszpjnt +EPCkKvbdtAHQhABS +DnbjjvbdbKkfOnDA +DoCjjvbdVviYWEFH +DoCjjvbdGZUuAdXb +EObjjvbdhlFDmuCy +DncLKvbdyfyMAMdw +EObjjvbdFyUtaDxC +DnbkKvbdeEoSCXDK +EOcKjvbdbVCGwjtI +EOcLKvbdTAEhgand +EObkKvbdRpUHJecw +DnbjjvbdZsiJZDrn +DncLKvbdtSqrxyeD +DoDKjvbdJSxaSmYM +EPCkKvbdjuvnECYX +DoDLKvbdrMyjYkgi +DnbkKvbdjJegjNXr +DoDLKvbduaDxsOdh +DoDLKvbdmIcsptrB +EObkKvbdFkFTDHmV +DnbjjvbdYORAYVVt +DncLKvbdddoRbWcK +EPDLKvbdLrWmZuQz +DoDLKvbdliETpuRa +DoCjjvbdbrcKsdKB +DoCkKvbdHkazmvpk +EPCjjvbdUaBpsRRy +EObkKvbdKfFhBaQu +DoCkKvbdKQydnfNe +EOcLKvbdDjIKVxKA +DncKjvbdpeceUWBI +DncLKvbdKaLHNBxR +EPDLKvbdptTfrRkU +EPDKjvbddndsLTtS +EObjjvbdMpXpvOHT +DnbkKvbdaMjaruNH +DoCkKvbdpecdtVaI +DncLKvbdRpTfjGEX +EObkKvbdCSaCsevr +DoCkKvbdnHEwmNgZ +EObjjvbdfHjuqmqH +DoDKjvbdKWVGDeGi +DoDLKvbdWHxVxHYz +DnbjjvbdXsLaMsnx +EPDLKvbdDjHiuwjA +DnbjjvbdaaWFGQQX +DnbjjvbdsrrTZZdc +DoCjjvbddneTKtUS +DoDKjvbdcJMjLFvx +DoDKjvbdaNKbTUlg +DnbjjvbdkHflFfOL +EObjjvbdJpzFOeme +DoCjjvbdrounibuf +DoCjjvbdHgHZxwxH +EOcLKvbdSKxeuGkT +EOcLKvbdzQoNJJwA +EObjjvbdZnnJEdzK +DoDLKvbdJuuFcdfi +DncKjvbdIryBSmYM +EObkKvbdyYJJaozL +EObjjvbdFkEsDHmV +DnbkKvbdfMfXHMjL +DnbkKvbdLGGIBaRV +EOcLKvbdRXNdDMHc +DoDKjvbdegjvRnRH +DnbkKvbdKeegaaQu +DnbjjvbdkMakzEgP +DoDKjvbdcTDKtEKB +DncLKvbdhaoDEvqR +DncLKvbdmgEwmNfy +EPDKjvbdCIjbLIfK +DncLKvbdJvUedEgJ +DoCjjvbdFVxpPljF +EOcLKvbdJYUCIMRQ +EPDKjvbddwyssrFz +DoDKjvbdiMEdOUcZ +DoDKjvbdZQleIldq +EPCkKvbdnQZyVkYb +DoCjjvbdNGbpNPuL +DoCkKvbdOStVgFVQ +EOcKjvbdGBPQxizm +DnbjjvbdOXoVzcnU +DncKjvbdyqPNIiwA +DoDLKvbdkIGlGGNk +EPDKjvbdbiNKLFvx +DoCkKvbdCTBCsfWr +DoDKjvbdShyjRABM +EPCjjvbdxwhjBozL +DoCkKvbdqUUHSSLU +DoDKjvbdbBVdfPow +DoCkKvbdqYnggRDx +DoCkKvbdtkwwAsaX +EPDLKvbdZMSDsnMN +EPDLKvbdZjTIQGbG +EPCjjvbdzoPpdblY +EPDKjvbdVviYWEFH +DnbjjvbdUsltGLuj +DoCkKvbdQdDAopcr +EPDKjvbdZxcjNbkr +EPCjjvbdZisHpGbG +EPDKjvbdEuxpPmKF +EOcKjvbdQwNccLgc +EPCjjvbdEYYLstUM +EObkKvbdZRNEhmEq +DoDKjvbdaRfDIUGL +DncKjvbduaDxsOeI +EObkKvbdmaiwYPOV +EOcKjvbdKDJbqJbx +DoDKjvbdQvnEDLgc +DnbkKvbdtlXvaTaX +EPDKjvbdzQoNIiwA +EOcLKvbdNeDsiIjd +DnbkKvbdBdQAvJlf +DoCkKvbdhzVGMROG +EPDLKvbdUaCQsRRy +EOcLKvbdZisHogCG +DoCkKvbdlqxtzTDi +DoCjjvbdRkZGUgKs +EObkKvbdZnmhdeZj +EOcLKvbdZjTHogBf +DncLKvbdhytfLqNf +EPCkKvbdnPyxvKxb +DncLKvbdjcMKqHVH +EPCkKvbduWNwjRTA +DnbkKvbdwygfGXeS +EObjjvbdTlWOaVoJ +EPCjjvbdUtNUGLvK +EObkKvbdKkAgvAKZ +EObkKvbdaMkCTUmH +EPDKjvbdOFDshhjd +EPDLKvbdhzUfLpmf +EPCkKvbdkySrTYgU +EOcLKvbdFfKSNhsq +DncKjvbdOAJTUKSA +EPDLKvbdrDeJPmvB +EPCkKvbdKRZdnfNe +EPCjjvbdRDcAoqDr +EOcKjvbdNHDQNPtk +EOcLKvbdVTmTfMVj +EOcKjvbdrXQMChyR +DoCjjvbdZQmFJNEq +EPCkKvbdWRmwadkc +EObkKvbdSCDeLhyL +DncKjvbdyNsHxTJD +EPDKjvbdtSrTYydc +DoDLKvbdiGjCxuiu +DoCkKvbdrNZjZLgi +EPDLKvbdJmADzGuB +DncLKvbdtcCuWuno +DnbjjvbdDxXktTtM +EPCjjvbddZyPxZQb +EPDLKvbdlqxtysDi +DoDLKvbdbAueGPpX +EObjjvbdVviXvDdg +EPDKjvbdBdQAvKMf +DnbkKvbdPxmAHSqj +DoDLKvbdUsltFlWK +DncKjvbdVhYWYHYz +DoDKjvbddwzTtSFz +DncLKvbdIGfzYwwg +EPCjjvbdmJDsqUrB +EPCkKvbdGQASwGey +EOcLKvbdTlWOaVoJ +DncLKvbdLFehCBRV +DnbjjvbdTkvOaVoJ +EPCkKvbdwXMAvBWV +EObjjvbdpxnhGqDx +EOcLKvbdsrqryZeD +DoDLKvbduVnXjQsA +DncLKvbdRotHKFdX +EOcKjvbdnUtyjirG +EOcKjvbdCJLCLJFj +EOcLKvbdSCEFLiYk +DoDLKvbdjcMLQgVH +DoCkKvbdLBLGlaxR +EObkKvbdZQldiNFR +EOcLKvbduMXwAsaX +DncKjvbdxrnIlrBg +EObkKvbdehKvRnRH +DoDLKvbdRosfiecw +DoCkKvbdFjdrcINV +EPCjjvbdkWWmdBxX +DnbjjvbdFkFTDHlu +DoCjjvbdTAEhgaoE +DoDKjvbdANIZTWyx +EObkKvbdJSyAsNYM +EPDLKvbdqTtHRqkU +EPDKjvbdbBVeFoow +EPCkKvbdYSkaMsoY +DncLKvbdDnbkKwDE +DncKjvbdMSWlzUpz +DncKjvbdauCHXjsh +DoCjjvbdTvMQKUBR +DoDLKvbdrRuLOLAm +EOcKjvbdatbGxKtI +DncLKvbdNGcQMotk +EPDKjvbdiCObeWqR +DoDKjvbduDDUwVno +DncLKvbdYlRcsmkm +DncKjvbdbAueFoow +EObkKvbdYTMBNToY +DncKjvbdvAdYsPEh +EObjjvbdBdQBWKMf +DnbkKvbduCbuWuno +EOcLKvbdKWVGEFHJ +EObkKvbdcyyQXxqC +DnbkKvbdaMjasUmH +EPCkKvbdmgEwlmfy +DoDLKvbdrDdiQOVa +DoDKjvbdUyIUZjnn +DnbkKvbdnBjXYOnV +EOcKjvbdRpTgJfDw +DncKjvbdjcLjqGuH +DnbkKvbdZjTIQHCG +EOcKjvbduVnYKRTA +DnbkKvbdGckWJbKK +EObjjvbdZyEJnDMS +DncKjvbdNsUWGduQ +EObjjvbdKQzEoFme +EOcKjvbdVUMtGLvK +EPDKjvbdrJAKFMoF +DoCkKvbdNrsvHFVQ +DncLKvbdSKyGUfjs +DoCkKvbdVvhxWEFH +DncLKvbdFejRnIsq +EObjjvbdVYhUZkOn +DoCjjvbdxUmEpxkn +DoDLKvbdBiLCKhej +DoDKjvbdIjEAJofd +EOcKjvbdwzHfFwdr +DncKjvbdFjeTDHlu +DnbjjvbdbiMjKewY +DnbjjvbdaNLCTUlg +EObjjvbdDwxMUUTl +DoCkKvbdmttykKSG +EPDKjvbdiUyeXSVC +EPDLKvbdWIYVwfxz +EPDLKvbdemFvgMik +DoCkKvbdUyHszKoO +EObkKvbdTXkMNzjx +DoDKjvbdSQTgKFdX +DnbjjvbdLiBkpxAS +EPCkKvbdRosgKGEX +DoCkKvbdmfdwmNgZ +DncLKvbdiHJbyViu +DncLKvbdxrnJMqbH +EOcKjvbdhlFENtcZ +DoCjjvbdbKkennDA +DnbkKvbdGckWKBjK +DnbjjvbdUyIUZkOn +EPDKjvbdeEnrCXDK +EOcKjvbdsBfMkgKy +DncKjvbdxsNiNSBg +EPDKjvbdkNCLzEgP +EPDKjvbdSKyGVGjs +DoDKjvbdrWolChyR +DncLKvbdWSNwaeLc +EOcKjvbdJYTbHkqQ +DnbjjvbdZshiZDsO +DoDKjvbdSKxfUfjs +EPCkKvbdptTgRrKt +EPCjjvbdREDApQdS +DncLKvbdtvOXjRTA +EPDKjvbdemGXGljL +EObjjvbdBdQAvJmG +EPDLKvbdhuZdwRuC +DncLKvbdjvWnDaxX +EPDLKvbdFVxopMie +EPCkKvbdajkeoNcA +EPCjjvbdSPsfifEX +DnbkKvbdBsAcTfWr +EPCjjvbdEOcLLWcE +DoCjjvbdZLrDsmlN +EPCkKvbdxnSgxTIc +EObjjvbdGQATXGey +EObkKvbdbsDLUEKB +DoCjjvbdrSVKmjaN +EPCkKvbddneTLUUS +DoCkKvbdxmrgwsJD +EPDKjvbdGYuVAdXb +DncLKvbdauBfxLTh +EPDLKvbdrMzKZLgi +EObkKvbdUsltGLvK +DnbjjvbdDxXlTstM +EObkKvbdsBfNLgLZ +DncKjvbdidjgUoAO +EPDLKvbdJJdAKQHE +EOcKjvbdbBWFFpQX +EPCjjvbdSZihTDWA +EPCkKvbdhgKCxuiu +DncKjvbddneTLUTr +DoDKjvbdczZPxZRC +DnbjjvbdlYrrTYft +DoDKjvbdWXJXvEEg +EPDLKvbdbhmJkFvx +EPCjjvbdDxYLtTsl +EPDKjvbdqdFIonVa +EObjjvbdCIjbLIej +DnbjjvbdmbKXXnmu +EPDKjvbdlZTSTYft +EPDKjvbdwXMBVaWV +DnbjjvbdSPtGjGEX +DoDKjvbdrMzKYlHi +EPCkKvbdiVZdwSVC +DnbjjvbdptUHSSKt +DncLKvbdcSbjscjB +DoDKjvbdSPsfiecw +EOcKjvbdegkVqnQg +EObkKvbdjuvmcbXw +DncKjvbdCJLCKhfK +EObjjvbdVqnYBeMD +DoCjjvbdKCjCqJcY +DncLKvbdZRMdhmEq +EOcKjvbdrRtkOKaN +DoDLKvbdRpTfiedX +DoCjjvbdRMwbZOUz +DoCjjvbdrXQMDIxq +EObjjvbdsrqsZZdc +DnbjjvbdfjfzbfAE +DoCkKvbdJSyBTMxM +EPDKjvbdnCJvwoNu +DoCjjvbdmbJvwoNu +DnbkKvbdFWZQPljF +DncLKvbdxnSgwriD +DnbjjvbdVvhwucdg +DoCjjvbdjgfkfFnL +DncLKvbdzRPMiKXA +EOcLKvbdqZPHgREY +EPCkKvbdrylPsAgn +EPCkKvbdVZITykPO +DoCjjvbdhkeEOVDZ +EOcKjvbdUVkpJtAq +EOcKjvbddCTMrAUN +EPDKjvbdZeXfzghb +EPCjjvbdiMFDmuDZ +EPCjjvbdJKEAJpHE +EOcLKvbdajkeoODA +DnbjjvbdZRNEhmFR +EOcLKvbdNHCpNQVL +EObjjvbdmRxtzSci +DoCjjvbdzRPMhjXA +DnbkKvbdnGdwmNfy +EObkKvbdvAcxsOeI +DoDLKvbdBsAcTevr +DoCkKvbdozmdKxPA +DnbkKvbdTlVoBVoJ +EPCkKvbdqwQLcIxq +DncLKvbdbiMjLGWx +DoDLKvbdfHkWRnRH +EOcKjvbdbVCGxKsh +DoCjjvbdTqRPUthN +DoCkKvbdbQGgELzd +EOcLKvbdQZNAHSrK +DoDLKvbdZyDjNbkr +EPCjjvbdqiAJdmOe +EObkKvbdKaLHNBxR +DncKjvbdyXhjBozL +EObjjvbdDjIKWYKA +EOcKjvbdLFegaaQu +EPDKjvbdZjTIPgCG +EOcLKvbdfHjuqnQg +DnbjjvbdlhcsqVRa +DoCjjvbdMuSqkNAX +DncLKvbdCIkBkIej +DncKjvbdUaCQsQqy +EObjjvbdRbDdkhyL +EOcKjvbdpssfrRkU +EOcKjvbdLGFhBaQu +EPCkKvbdqqtjnLBN +EOcLKvbdWRmwbEkc +EObjjvbdpedFTuaI +DoCkKvbdJJdAJofd +DoDLKvbdwNWANEEm +EPCkKvbdYgWdAOri +DoDLKvbdvAcyTOeI +DnbkKvbdbhmJjfWx +EOcLKvbdypnliKXA +EOcKjvbdZyEJnClS +DoCjjvbdZoNhdeZj +EPCkKvbdkDLkRGtg +EObjjvbdNsUWGdtp +DnbjjvbdZQldhmFR +EOcKjvbdYpmEhldq +EPCkKvbdZQmEiMeR +DnbjjvbdhytfLpnG +EObjjvbdmtuZkJrG +EObjjvbdGLEsDINV +EPCjjvbdVhXvYHYz +DoDLKvbdKefICAqV +DncKjvbdUtMsfLvK +EOcLKvbduaEZTOeI +EPDKjvbdddoSBwDK +DoCkKvbdffLymgHA +DnbkKvbdbAueGQQX +DnbkKvbdbrcLTcia +EPCjjvbdRbEElJYk +DoCkKvbdGFirNiTq +DoDKjvbdNdctIhkE +EPDLKvbdQccAoqES +DnbkKvbdFfKRnJUR +DnbjjvbdFfJrNiUR +EPDLKvbdCfkegAzc +EPCjjvbdRXNccMHc +DoCkKvbdZjShPgBf +EOcKjvbdSLZGUfkT +DoDLKvbdBcpAujMf +EOcLKvbduWNwiqTA +DoDLKvbdpyOgfqEY +EOcKjvbdcScKtEJa +EObjjvbdnCJwXoNu +DnbkKvbdjFLGtoAO +DoCjjvbdXrlBMsnx +EPDKjvbdhgJcZWJu +DoCjjvbdiBoDEvpq +EPDKjvbdczYoxYqC +DoDLKvbdjFLHVPAO +DnbjjvbdbPgGdLzd +DoDKjvbdWIYWYGxz +DncKjvbdhytfLpnG +EObjjvbdfHjuqnQg +DnbjjvbdmgExMmgZ +EOcLKvbdhgKDYuiu +EPDKjvbdmJEURVRa +DoDLKvbdJpyePGNe +DoDLKvbdlhdUQuRa +EObkKvbdmuUzLKSG +DnbjjvbdxwhjBozL +EPDLKvbdVZIUZjnn +EPDLKvbdJpydnfOF +EPCkKvbdqqtjmjaN +EPCkKvbdZoOJFFZj +DnbjjvbdmttzKjRf +EPDLKvbduWOXjQsA +EOcLKvbdwtleRYkn +DoCjjvbdLYpjSzuG +EObjjvbdIsYaSmYM +DnbjjvbdyzeORhJI +EOcLKvbdkWWnECXw +EPDKjvbdVviYVcdg +DoDKjvbdBcoaVjMf +DoCkKvbdiMEcmuDZ +EObjjvbdLKaHvAKZ +DncLKvbdJTZArlwl +EOcLKvbdhaoCeWpq +DncLKvbdrWpLcJZR +EObkKvbdHkaznWpk +DnbjjvbdzjVPocrt +EOcKjvbdyqPMhiwA +DoCkKvbdpstHRqkU +DnbkKvbdRkYfVHKs +DoDLKvbdVgwvYGxz +EOcKjvbdFfKSNiUR +DnbkKvbdqquLOLBN +DncKjvbdOAJTTjSA +DoDKjvbddneSkUTr +EObkKvbdlqyUysEJ +DoDKjvbdbhmKKevx +EOcLKvbdiCObdwQq +EPCkKvbdFejSNiTq +EObkKvbdwygfGYEr +EPDLKvbdsQWPKDVf +DncKjvbdjbkjpfuH +EPDKjvbdRkZFuGjs +EPDKjvbdwyhFfXdr +DncKjvbdcIlikFvx +DoCkKvbdiUydwSVC +DncKjvbdiUzFXSVC +EOcKjvbdjKFgimYS +EPDKjvbdjvXODaww +EPCkKvbdRbDdlJZL +EObkKvbdrEEhpNvB +EObjjvbdrpVoKDWG +DoCjjvbdNxPVzcnU +EPDKjvbdVgwvYHYz +DnbjjvbdmuUyjirG +EObjjvbdrSVLNkBN +DncKjvbdUWLojUBR +EOcLKvbdwygefXeS +EObkKvbdhaoDEvqR +EOcLKvbdGGKRmiUR +EOcKjvbdeEnqawDK +EPDLKvbdGGJqnItR +DoDLKvbddeOrBvbj +DnbkKvbdiVZeWquC +DncLKvbdJcJcQjDY +EPDLKvbdkDMLQgUg +EObjjvbdemFvflik +EObkKvbdwzHeewdr +DoCjjvbdHDjuiajK +DoCkKvbdrEEiPnVa +EOcLKvbdypnmJKXA +DoDLKvbdmgFXmOHZ +EObkKvbdUsmUFkuj +EPDLKvbdcScKtDjB +EPCkKvbdUyITzLOn +DncKjvbdZnnIddyj +EPCkKvbdaaVeGPow +DoCjjvbdSQTfifDw +DoDKjvbdDoDKkXCd +DncLKvbdhtzEwRuC +EObkKvbdMpXqVnGs +DoDKjvbdDncLLXCd +DoCkKvbdtcDUwVoP +DoDKjvbdtSqryZdc +EPDKjvbdbBWFGPpX +EPCjjvbdmRxtyrdJ +DoDLKvbdGckVjCJj +EObjjvbdzoPpeCkx +DnbjjvbdKWVFceHJ +EPCjjvbdSKyGVHLT +DoDLKvbdelevgNKL +DoCjjvbdTXjlNzkY +DoDLKvbdpstHSSLU +EPDKjvbdhgKCxuiu +EObkKvbdZQleJMeR +EPCjjvbdKVuGDdfi +DncKjvbdUGzmkvvF +DncKjvbdxrnJMqbH +EPCjjvbdKVuGDdgJ +EObjjvbdptTgRqjt +EObjjvbdCDpAujMf +EPDKjvbdczZQXyRC +DncLKvbdqYngfpdY +EOcLKvbdqBIeAXIE +EPDLKvbdZLrETmlN +EPDKjvbdNeEThhjd +EOcLKvbdmbKWxOnV +DoCkKvbdCDoaWKNG +EOcLKvbdEOcKkWbd +EPCkKvbdNQXpvOGs +EPDLKvbdFyUtaDxC +EPDKjvbdbLMGOnDA +DoDLKvbdJcJcQjDY +EPDLKvbdOTUWHFUp +DoCjjvbdmgFXlnGy +EOcLKvbdRDbaQRES +DoDLKvbdcyxowxpb +EPDLKvbdliEURVSB +EOcKjvbdXnRAXuWU +DoCkKvbdDnbjjwDE +DoCkKvbdKVuGEEfi +EObkKvbdyOTHxShc +EPDKjvbdySnIlqbH +DoDLKvbdHELWJbJj +DnbjjvbdyOTHxShc +DnbjjvbdczZQXxpb +EPDLKvbdZLrDsmkm +EPCjjvbdfNGWflik +EPDKjvbdmbKWwnmu +DncKjvbdrDdiPnWB +EObjjvbdHDjvKCKK +DnbkKvbdUVkojTaR +EObjjvbdptTfrSKt +EPDKjvbdFxttaEXb +DoCkKvbdjvXNcbYX +DoCkKvbdSLYfUgKs +EOcKjvbdHakzEzAD +DncLKvbdiCObdwQq +EPDLKvbdZLqdUNlN +DoDLKvbdhkeDnVCy +EPCkKvbdemFvgNKL +EObjjvbdliDtQuRa +EObkKvbdwuMdpxkn +EObkKvbdirzhrkJz +EPCjjvbdJYTahLqQ +DncLKvbdIHGyxwwg +EPCjjvbdSQUHKGEX +DoCjjvbdZshiYcsO +EOcLKvbdPyNAHSrK +EPCjjvbdbsCjscia +EObjjvbdUWLojUBR +DoDLKvbdKeehBaQu +EObjjvbdjuwODaww +DoDLKvbdtkxXAsaX +DncLKvbddneSkTtS +DnbjjvbdZtJIxcsO +DnbjjvbdJTYaTNXl +EPCjjvbdGKeTDHlu +DoDLKvbdKQydoGNe +DoDKjvbdVrOXaeLc +EPCkKvbdzHYlAMeX +DoDLKvbdBvzchdov +EObkKvbdapGgELzd +DoDKjvbdaMkBsUlg +DnbjjvbdVUNTelWK +EObjjvbdiHJcZWKV +DncLKvbdZoNheEyj +DncKjvbdDHMFgAzc +DnbkKvbdFpATXGey +EPDKjvbdMpXqWOHT +EPCjjvbdmSZVZrdJ +EPDKjvbdcIljKfXY +DoCkKvbdjcLkRGuH +DoDLKvbdGYuVBEXb +EObkKvbdWXIxWDeH +DncKjvbdQlxCZOUz +DnbjjvbdYNqAXtut +EPDLKvbdGdKvJbJj +DoDLKvbdGLFSbglu +EPCkKvbdRjxfVGkT +DoCkKvbduCbuXWOo +DoCjjvbduCbtvuno +EObkKvbdjAQGaQGj +DoDLKvbdqBJFAXHd +EOcKjvbdkClKpgVH +EOcLKvbdiMFDmtby +EPDLKvbdjvXNcbXw +EPCkKvbdxUmFRYkn +DoDKjvbdHgGyyYXg +DoCjjvbdRzJhScWA +DnbkKvbdlZTRsYgU +DnbkKvbdFVxpQNJe +EPCkKvbdZyEJmcMS +EObjjvbdZQldhmFR +EObjjvbdYSlBMtPY +DncLKvbdvBDxsOdh +DoDLKvbdvAdYrndh +DoCjjvbdZyEJmcLr +DnbkKvbdKaLGmCXq +DnbkKvbdZQmFImEq +EOcKjvbdqvolDIxq +DnbkKvbdVqnYBdkc +DoCkKvbdnPyxvLZC +EOcLKvbdmJEURUqa +DoDLKvbdfHkVrNpg +DoCjjvbdznopdblY +DoCkKvbdjvWmdCXw +EOcKjvbdunszpjnt +EObkKvbdzoPqFDMY +EObjjvbdDxXktTtM +EObjjvbdBcoaVjMf +DncKjvbdtcDVWuno +EObjjvbdpyOggQdY +DnbkKvbdwWkaWAuu +EPCjjvbdajkeoODA +EOcKjvbdKNAEZfta +EOcKjvbdZisIQHCG +DncLKvbdEXwksstM +DoDKjvbdtbbuXVoP +DncLKvbdDxYMTstM +DoCkKvbdcyyPwxpb +EPCkKvbdxmrgwsJD +DoDKjvbdYSkaNUOx +EOcLKvbdxwhjCPyk +DncKjvbdUsmTekuj +DnbkKvbdkVwOECXw +EObkKvbdnBjXYOnV +DncKjvbdcasNSATm +EPDKjvbdTAFIhCOd +DnbkKvbdkWWnECYX +DnbkKvbdFjeSbgmV +DoCjjvbdJzoewdAN +DnbkKvbdZeXfzhIb +DncKjvbdMJCLqYAS +DoCkKvbdGLFTCglu +DoDLKvbdMuSrLNAX +EOcKjvbdqceIomvB +DoDLKvbdegkVqnRH +DoDKjvbdKfGICBQu +EOcKjvbdEvYopNKF +DnbjjvbdlrZVZsEJ +DoDLKvbdqqtjmjaN +DncLKvbdQmXaxmtz +EPDKjvbdCDoaVjNG +EPCkKvbdqquLNjaN +DnbjjvbdKRZdoFnF +DoCkKvbdkVwOECYX +DncKjvbdGQATXGfZ +DncLKvbdCDpAujMf +EOcKjvbdDxXlUUTl +EPCjjvbdYkrEUNlN +DnbjjvbdZtJIyETO +DoCjjvbdXsMAltPY +EOcLKvbdxxIjCPzL +DoDLKvbdSLZFuHLT +DncKjvbdFVyQQMjF +DoCjjvbdFaOpyJzm +EPCjjvbdrJAJdmPF +EOcLKvbdMuSqjmAX +DncLKvbdEJgiuxKA +EPDKjvbdBdQAuimG +DnbjjvbdWXIxVdFH +DnbkKvbdHDkVjBjK +EPDKjvbdnHEwlmgZ +EPCkKvbdBiKbKhfK +EPDKjvbdhyuGLpnG +DoCkKvbdZsiJZDsO +DnbjjvbddBrlrAUN +DoCkKvbdYqMeIldq +DncLKvbdZLqdUNkm +EOcLKvbdMuSrKmAX +DoCkKvbdDxXksstM +EOcKjvbdqdEiPmua +DoCjjvbdOEdUJIjd +DoCkKvbdEObkLWbd +EObkKvbdfekynHHA +EPCkKvbdrEFIpNvB +DnbkKvbdnBjXXoOV +EPCjjvbdmgEwmOGy +DncKjvbdKCjDQjCx +EPDKjvbdJqZdoGOF +DncKjvbdUsmTfLuj +DoDLKvbdjcMKpgUg +EPDLKvbdSQUGjGDw +DnbjjvbdRacdlJYk +DncKjvbdYgXEAOsJ +EPCjjvbdhficZWKV +DoDKjvbdGAnpxizm +EPCkKvbdRbDeLhyL +DoDKjvbdiBncEwQq +DoCkKvbdxZgfFxFS +DoCjjvbdqvpMChyR +EObjjvbdbUbGxKtI +DoCkKvbdEObkKvcE +DnbjjvbdKQzEnfNe +DoCjjvbdRWnDblID +DnbkKvbdkxrqsYgU +DncLKvbdqwPlCiYq +EPDKjvbdSZjHsDWA +DncLKvbdEPCjjvbd +EOcLKvbdpyPIGpcx +DncLKvbdbVCGwkTh +DnbkKvbdnPzZWKxb +EObkKvbdGKeTDIMu +EOcKjvbdiifIKNYS +DncLKvbdnQZxvKxb +EPDLKvbdGFjSNiUR +DnbjjvbdRNXaxnUz +EPCjjvbdOTTvGduQ +EObkKvbdUtMselVj +DoCjjvbdnUuZkKSG +EPDKjvbdQmXaxnUz +EPCkKvbdNeDtIhjd +DncLKvbdNxOuzdOU +DncKjvbdJJdAJpGd +DoDKjvbdwuNEqYkn +DncKjvbdZMSDtOLm +DnbjjvbdNeDsiJLE +EPCjjvbdJpzEoGOF +EPCjjvbdkDLkRGtg +DoCjjvbdUWLpJtAq +EPDKjvbdfMfWfljL +EPCkKvbdrMzJyMIJ +DoCjjvbdJKEAJofd +DnbjjvbdnBiwXoNu +DoCjjvbdDihJvYKA +DnbkKvbdSZigsDWA +DoCjjvbdFejRmhsq +DnbkKvbdaMkCTVNH +EObkKvbdczZPxZRC +EPDKjvbdVZIUZjnn +DoDKjvbdkySrTZGt +DoDLKvbdsPvPKDVf +DoCkKvbdwWlBVaVu +EPDKjvbdANIZSvyx +EPCkKvbdnHFYNNgZ +DnbkKvbdNdcsiIkE +EPDLKvbdDoCkLWbd +EPDKjvbdQccBPqDr +EObkKvbdSPsfifEX +EOcKjvbdelfXHNJk +EObkKvbdFfKRmiUR +EOcLKvbdKCibqKDY +EPDLKvbdUWLpJsaR +EPCkKvbdKfFhCBQu +EOcKjvbdmuUzLJrG +EOcLKvbdBdQBVjMf +EOcKjvbdfpBzvcwh +EOcKjvbdmRyUzSci +EOcKjvbdFVxpPlie +DnbjjvbdDwwlUUUM +DncKjvbdUyHsyjoO +DoCkKvbdUslselVj +DncLKvbdmuUykJqf +DncLKvbdLFfHbApu +DncLKvbdhyuFlROG +EPDKjvbdxnTIYTJD +EPDKjvbdTulPjUAq +DoCjjvbdCDoaWJlf +DoCkKvbdbLMGOnDA +EPDKjvbdOStVfdtp +EPCkKvbdZRMeImFR +DoDLKvbdiVZeXRuC +EPDKjvbdRosfiedX +DoCjjvbdnGeYMnGy +DoCjjvbdiiehKNYS +DncKjvbdbhmKKfXY +EOcLKvbdnBjXXoNu +EPDKjvbduLwwAtAw +EOcLKvbdygYlAMeX +DoCkKvbdNsTvHEtp +EPCjjvbdsrrTYzFD +EPCkKvbdBdQAuimG +DncKjvbdmfeYMnHZ +EOcKjvbdxZhFexEr +DncLKvbdZshhyETO +EObkKvbdOFEUJJLE +DoDLKvbduDCtvuoP +EOcKjvbdGZVVBEYC +EObjjvbdZRMeJNEq +DnbkKvbdkxsRsYft +DnbkKvbdsBfNLfjy +EOcLKvbdNPxQvOHT +DnbjjvbdpstHRqkU +EOcLKvbdZQleJNFR +EPCjjvbdxVNEpxkn +DoCkKvbdwtmEqZLn +DoCkKvbdGAoQxizm +DoDLKvbdVqmwaeLc +DoDKjvbdKfGHaaQu +DoCjjvbdcJNKLGWx +EPDLKvbdrzMPsBHn +DncKjvbdfoazwDxI +EPDKjvbdZyEJnClS +DnbjjvbdwMvANDeN +EObjjvbdZshiZETO +EPDKjvbdUslselVj +DoDKjvbdwtmEpyLn +DncLKvbdJTYaTMxM +EPDKjvbdvBDxsOeI +DoDKjvbdxrmhmSCH +EPDLKvbdjJegjNYS +EOcKjvbdJvUedEgJ +DnbkKvbdVZITyjoO +DoDKjvbddePSCWbj +DncKjvbdWIXvXgYz +EPDKjvbdZQmFJMeR +DnbjjvbdqdEiPnWB +DoDLKvbdUVkojTaR +DoDLKvbdFVxpPmJe +EPCjjvbdxmsHwsIc +EPDLKvbdiiehJlxS +EPDLKvbdCTAbsewS +EPCjjvbdzoPpdbkx +DnbkKvbdijGHilxS +EPDLKvbdOYOuzdNt +EOcLKvbdTppoUuIN +DnbkKvbdcScLUDia +EOcLKvbdePFTLUTr +EOcLKvbdhgKCxvKV +EPCkKvbdrJAKFNOe +EOcKjvbdVwJXucdg +EPCkKvbdNddUJJKd +DncLKvbdJYUCHlQp +EObjjvbdkVvnDaxX +EPCjjvbdNeDsiJLE +EPDKjvbdyzeNqhJI +EPCjjvbdmIdTqUrB +EPDKjvbdZoOJFEyj +DoDKjvbduaDxsOeI +EPCkKvbdKjaIWAKZ +DncLKvbdKaLHMbYR +EOcKjvbdrafMlHKy +EPCjjvbdhtzEvqtb +EPCkKvbdddoSCXDK +EOcKjvbdzjUpPdTU +EPCjjvbdLZRJrzuG +EOcKjvbdaMjaruMg +DoCkKvbdyOSgwsJD +EPCjjvbdKDKCqJcY +EObkKvbdvAcxrneI +EObjjvbdwuMeQxkn +DncLKvbdmSZUysDi +DnbkKvbdcIlijfWx +DoDKjvbddndrjtTr +EOcKjvbdwtmEqYlO +EOcKjvbdYzcFqivZ +DnbkKvbdCDpBWJmG +EOcKjvbdaSGCgsfL +EObjjvbdIwtBhLqQ +DnbkKvbdyzdmrIIh +EPDLKvbdWexzUAOs +DncLKvbdRXNdCkgc +EOcKjvbdkVwNdBww +DncLKvbdIGfzYxYH +DoCkKvbdbAvFGPow +DoCkKvbdQlxBxnUz +DncKjvbdqrUkOKaN +EPDLKvbdZisIQGaf +DoDKjvbdsQWPJbvG +DncLKvbdjhHMFfNk +EObkKvbdwNWAMdFN +DoCkKvbdeKKRutzn +EObkKvbdJpyeOfNe +EOcKjvbdQmXayNtz +DncKjvbdnHExNNgZ +EPCjjvbdULuoBVni +DoCjjvbdqquLNjaN +EPDKjvbdyzdnSIJI +DnbkKvbdQvnDcLgc +DoCkKvbdtcDUvvOo +DnbjjvbdnGeXmNfy +DoDKjvbdxsNhmRbH +DoDKjvbdtTSSyZeD +DoDKjvbdRadFMJZL +EOcKjvbdUaCQrpqy +DoDLKvbdEJgivXjA +EOcLKvbdGFjSOItR +EPDLKvbdaSGDIUGL +DnbjjvbdJYTagkqQ +EOcLKvbdZLrDsmlN +EOcLKvbdEJgiuwjA +DoDKjvbdxUleRYlO +DnbjjvbdQwODcLhD +EObkKvbdOTUVgEtp +EObkKvbdRMwaxnUz +EObjjvbdrEFJPmua +EOcLKvbdiUzEvquC +DoDKjvbdMpYQumfs +EPCkKvbdhancEvqR +DncKjvbdkNCMZdfo +DncLKvbdZHWdAOri +EObjjvbdlrYuZrci +EObjjvbdgLGzbfAE +EObjjvbdcTCkUEJa +EPDLKvbdVAbRTRRy +DoCjjvbdYqNEiMeR +DncKjvbdBvzchdpW +DnbkKvbdtSqryZdc +EPCjjvbdwygeeweS +DoCkKvbdqlzJyLhJ +EOcLKvbdtbbtvvOo +DoDKjvbdrSVKnLAm +DnbkKvbdfMevgNKL +EObjjvbdRacdkhyL +EPCkKvbdFpASvgGZ +EPDLKvbdZoOJFEyj +EPCjjvbdzjUpPcrt +EOcKjvbdcbSlrATm +EOcKjvbdqwPkbhxq +DnbjjvbdHELVibKK +EPDKjvbdZQldiMeR +DnbjjvbdpstGqrKt +DoDKjvbdGFjRmiUR +EPCkKvbdssRsZZdc +DnbkKvbdlqxuZsDi +DncKjvbdEXwlUTtM +DnbjjvbdyzdnRhIh +EPCjjvbdkCkkRGtg +EOcLKvbdLrWlytpz +EPCkKvbdCEQAvKNG +DncLKvbdVwIxWDeH +EObkKvbduMYXBTaX +DoCkKvbdRyihTDWA +DnbjjvbdkaMoNALA +DnbjjvbdaMjartlg +DoCkKvbdNVTSKmAX +DoDLKvbddwystRez +EPCjjvbdcImJjevx +DoCkKvbdeAUQlwjG +DoDKjvbdZxcjNblS +DncLKvbdkIGlFenL +DoCjjvbdfHjurNqH +DoCkKvbdiBoDFXRR +EPDLKvbdvBDyTPFI +DnbkKvbdUxhUZkPO +EObjjvbdqZOhHQdY +EOcKjvbdSCDeLiZL +DncKjvbdozmckYPA +DncKjvbdgGLymgHA +DncKjvbdILaznWpk +EPCjjvbdqUTgSSKt +DoCkKvbdrovOjCuf +EOcLKvbdKfGIBaQu +EPDKjvbdCIjajiFj +EPCkKvbdmoyxujyC +EObkKvbdySnJMrCH +EOcLKvbdHDjujBij +EObjjvbdrMyiyMHi +DoCkKvbdiifHimXr +DnbkKvbdbsCkTcia +DnbkKvbdMfbpNPtk +EOcLKvbddoErkUTr +DncLKvbdqZOhGqDx +DnbjjvbdDncKkXCd +DoCjjvbdSCEElIxk +EPCkKvbdbUbHXjsh +DnbkKvbdCTAcUGWr +EPDLKvbdZtIiZESn +DnbjjvbdrDeJPnVa +DoCkKvbdZisIQHCG +DncLKvbdgFkzOHHA +EPCkKvbdmfdxMmfy +DncLKvbdMIbMRYAS +EOcKjvbdaogGckzd +EOcLKvbdLAkHMawq +DncLKvbdxwiJbQZk +DncLKvbdauBgYLUI +DnbkKvbdnQZxvKyC +EOcKjvbdFkEsChNV +DoDLKvbdpstGrRjt +EPDLKvbdlYrrSxgU +DnbjjvbdZQmFIldq +DoCjjvbdbhmKLFvx +EObkKvbdsBellGjy +DncLKvbduCcUwWOo +EObkKvbdJuuGEEfi +DoCkKvbdIwtCHkqQ +EPCkKvbdaMkBruMg +DncLKvbdEARiMyvw +EObjjvbdmgExNOGy +DoCjjvbdpfDdsuaI +EPDLKvbdEzspdlCi +EPDKjvbdqdFJQNua +DnbkKvbdnBjWxOnV +EPDLKvbdZisHogBf +EPCkKvbdjcMKpftg +DnbkKvbdauCGwjsh +DoDKjvbdlYrrTZHU +EOcLKvbdzjVPpDrt +DoCkKvbdQdDApQdS +DoDKjvbdehLWRmpg +EPDLKvbduoTzpkPU +DoCkKvbdliDspuRa +DoDKjvbdEXxLsssl +EObjjvbdZsiJYcrn +DoCkKvbdaaWFGPpX +DoCkKvbdrafNMHLZ +DoCjjvbdmgEwlnHZ +EPCkKvbdFkEsCgmV +DncKjvbdqmZjYlHi +DoCkKvbdfILWSORH +DoDLKvbdnCKXYOnV +DnbkKvbdHgGyyYYH +DoDLKvbdEKHjVxKA +EPDKjvbdbAueGPow +DnbkKvbdFyUuBDwb +EPDKjvbduCcUvvOo +EObkKvbdauBfxKsh +EObjjvbdZjTIPgBf +EObkKvbdNGbolpVL +EOcKjvbdeFOqbWbj +DoCjjvbdvwMAvBVu +DnbkKvbdzRPMhjXA +DncKjvbdFkErcIMu +EPCjjvbdhlFEOUcZ +DoCkKvbdJbjCpicY +EPCkKvbdZGwEAOri +DnbkKvbdNQYQunHT +DoCkKvbdkIHMFfOL +EObkKvbdHELVjBij +DoDLKvbdZQldhleR +DoDLKvbdVTmTelVj +DnbjjvbdJTZArlwl +DnbkKvbdCDpAvKMf +DoCjjvbdDxYLtUTl +DoDLKvbdwkWcgzyf +EPDLKvbdLBKgNCYR +DoDLKvbdZMSEUNkm +EOcLKvbdxUmEpxkn +EOcKjvbdGLFTDHlu +EOcLKvbdyYJKCPyk +DoCjjvbdDnbjjvcE +DoDLKvbdatbHXjtI +EObjjvbdbiMjLGWx +EPDKjvbdTYKlNzjx +EOcKjvbduDDUvvPP +EObkKvbdliETpuSB +DnbjjvbdrWolDIxq +EObjjvbdqZOggQcx +EOcLKvbdyXiKBoyk +DnbjjvbdqmZiyMIJ +EPCjjvbdULuoAuoJ +DoDLKvbdYzcGRivZ +DnbjjvbdtkwwBTaX +DnbjjvbdJbicQicY +DoCkKvbdTukojTaR +EPCkKvbdHbLydzAD +EObjjvbdVTltGLvK +EPCjjvbdUsmUFkuj +EPDLKvbdTqROuVIN +DncLKvbdYkrETnLm +DoCkKvbdeFPSBwDK +DnbjjvbdNGcPmPtk +DnbjjvbdWHwuxHYz +DoDLKvbdNUsRjmAX +EOcKjvbdZjTHpHBf +DncKjvbdWXIwvDeH +EOcLKvbdrJAKEloF +DoCjjvbdFeirOJUR +EOcKjvbdWWhwvEEg +DncKjvbdKeehBaQu +DnbjjvbdZLrDsmlN +EOcLKvbdZnnIeFZj +DoCkKvbdjKGHjMwr +EObkKvbdmIctQtqa +DoCjjvbdkClKpfuH +DnbjjvbdcTDKscia +DnbjjvbdADSYKZiQ +EObkKvbdygZMANFX +EPCjjvbdaMkCTUlg +DoDKjvbdzjVPodTU +EPCkKvbdIxTagkpp +EPCjjvbdZjSgpHBf +EOcLKvbdiCOcEvpq +EOcLKvbdsQWOibvG +DoDKjvbdEuxoomJe +DoDKjvbdmuVZkKSG +DoCjjvbdSZjITDWA +DoCkKvbdCJLBkJGK +EPCkKvbdliDsqVSB +DoCjjvbduaDxrneI +EOcLKvbdtvNxJpsA +EOcKjvbdEuyPoljF +DnbjjvbdwWlAuaWV +DncLKvbduMXvaTaX +EObjjvbddxZstSFz +EPDLKvbdmttykKSG +EPCjjvbdfIKvRnRH +DoDLKvbdjgfkeemk +DoCkKvbdHELVjBjK +EObjjvbdaRecIUGL +DnbkKvbdmSYuZrci +DoDLKvbdKfGHaaQu +EOcLKvbdIwsahLpp +EOcLKvbdEuyPomKF +DoCkKvbdsQWPJcVf +DnbjjvbdbPgHDkzd +DoDKjvbdZMSETnMN +DoDKjvbdJSyBTMwl +EPCkKvbdSCDeMIxk +DoDLKvbdtkwwBTaX +DoCjjvbdtbcVWuoP +EPCjjvbdozmdKxPA +DoCjjvbdtkwwBUBX +DoDLKvbdQdDBPpcr +DoCjjvbdJbjCpjDY +EPCjjvbdCTBDTfWr +EPDKjvbdYNqAYUut +DoDKjvbdURRPVUgm +EOcLKvbdNPwqVmfs +DoDKjvbdsCGMkgLZ +DoDLKvbdZtIiYcsO +EObjjvbdhficZWJu +EPCjjvbdTqRPUuIN +EPCjjvbdyOShXsIc +EOcLKvbdliETqVRa +DncKjvbdYqMdhmEq +DoCkKvbdKfGHbBQu +DnbkKvbdqBIeAXIE +EPDLKvbdQZNAHTRj +EObkKvbdRosgJecw +EPCjjvbdKQzEnfOF +DoDKjvbdzRPMiKXA +DnbkKvbdGcjvJbJj +DoCjjvbdbAvEeoow +DncKjvbdFVyQPmKF +EPDLKvbdRzKIScWA +EPCkKvbdKkAhWAJy +EPCkKvbdJqZdnenF +DoCkKvbdVUMtGMWK +DncKjvbdBiLBjiGK +DnbkKvbdjvWnDbYX +DnbkKvbdwuNEqYkn +DoDKjvbdegjurORH +EObjjvbdpeceTvAh +DoCkKvbdAMgySwZx +EPCkKvbdlZSqsZGt +EPDLKvbdbrbkTdKB +EPDKjvbdhzUekpnG +DncLKvbddeOqbWbj +EPCjjvbdsPunibvG +EOcLKvbdVwIxVdEg +DoCjjvbdkIHLefNk +DnbkKvbdxmrhXrhc +EPCkKvbdziuPocrt +EOcLKvbdNUsSLNAX +DncKjvbdhkddNtcZ +DoCjjvbdMpYRWNgT +EObjjvbddZxoxYqC +EOcLKvbdNVTRjmAX +EPDKjvbdZjTIQHCG +DnbkKvbdHEKvJbKK +EOcKjvbdiGibxvJu +DnbjjvbdsCGNMGjy +DoCjjvbdBhkBjhfK +EPCkKvbdSCDdkhyL +DnbjjvbdNPwpvNfs +EOcLKvbdJTZBTNYM +DncKjvbdqGEFTvBI +EObkKvbddneSjtTr +DncLKvbdqdFJPmua +EPDKjvbdrbFmMGkZ +DoCjjvbdhXZAzzAJ +EOcKjvbdkxsSSxgU +EPDKjvbdrEEhonVa +DnbkKvbdYzcGSKVy +DoCjjvbdzROmJJwA +EPDLKvbdOEdUJJKd +EPCjjvbdqquKmkAm +EOcLKvbdZyEKODLr +DnbkKvbdIsZAsMxM +DnbjjvbdZjTHofaf +DoCjjvbdrSUkOLAm +EPCjjvbdBsAbsewS +EObkKvbdUsltGLuj +EPCkKvbdANHyTWyx +EObkKvbdsBemMGjy +EObjjvbdMoxRVmfs +EPCkKvbdNGbolouL +EPDLKvbdjKGHimXr +DncKjvbdUMWPAuni +EOcLKvbdOEdUIhkE +EPCkKvbdjKGHimXr +EPCkKvbdhuZdwSVC +DoCjjvbdCIkBjiFj +EPCkKvbdxZhGFxFS +EObjjvbdOFDtJJKd +DoCkKvbdfNGWgNKL +EPDLKvbdcarmSATm +DoDKjvbdkNCMZeHP +DoDLKvbdkMakyeGo +DnbjjvbdiHJcYvKV +DnbjjvbdWWhxVcdg +EPDKjvbdVUNTelVj +DoDKjvbdZGvdAPTJ +DoCjjvbdDncLLXCd +EPDKjvbduDCuWuno +DoCkKvbdPyNAHTSK +DncKjvbdqwPlDIyR +EOcKjvbdYzbfSJvZ +DnbkKvbdRotGifDw +DoDLKvbdRDcBQRDr +DoDKjvbdEARiNZvw +DncKjvbdJSxaTNYM +EPDKjvbdVwJXvDeH +EOcKjvbdQwOECkhD +DoCjjvbdEPCkLWbd +EPDKjvbdVBBpsRSZ +EOcKjvbdddoSBwCj +EOcKjvbdFkFScINV +EObjjvbdpstGrSLU +EPDLKvbdhaoDFXRR +EPDKjvbdKfGICApu +EObkKvbdBsAcTevr +EObkKvbdhkeDmtby +DoCkKvbdqYngfpdY +EOcKjvbdsPvPKCvG +DoDLKvbduVmwiqTA +EOcKjvbdidkGtoAO +EPCkKvbdyzeORgiI +DoCkKvbdmJDsqUqa +DncLKvbdiGibyVjV +DncKjvbdhtzEwSVC +EOcLKvbdZRMdiNFR +EOcKjvbdrafMkgKy +DoDKjvbdZGwEAOsJ +EOcLKvbdjmCMZeHP +DncLKvbdjKFgimYS +EPCjjvbddZxpYZRC +DncKjvbdjmBkzEgP +EObkKvbdkIHLeemk +EPDKjvbdjAQGaQGj +DncLKvbdSPtHJfDw +DoCkKvbdGKdsChNV +EPCjjvbdrouoJbuf +EPDKjvbdlhcsqUqa +DoCjjvbdwXMBWAvV +DnbkKvbdhkdcmtby +EOcLKvbdFkEsDHmV +EOcLKvbdCIkBjhej +DoCkKvbdiLeDnVDZ +DoDLKvbdDxXlTssl +DnbjjvbdNrtVfduQ +EPCkKvbdHDkWJajK +EPCjjvbdTulQKUBR +DoDKjvbdJYUBhLpp +DncKjvbdiCOcFXRR +DoCkKvbdxsNiMrBg +EObkKvbdQlxByNtz +EPCjjvbdBhkBjiFj +EPCjjvbdNeDsiIjd +DncLKvbdBsAcTfXS +DncLKvbdDwwlUTsl +EOcKjvbdUQqPVUgm +DncKjvbdmttzKirG +EPCjjvbdKWUfEFHJ +EPCjjvbdGKdrcINV +EPDLKvbdkxrrTYgU +DoCkKvbdQdCaQQcr +DnbkKvbdvAdYroFI +EObkKvbdFxttaDwb +DnbkKvbdQdDBPqES +DncKjvbdkVwODbXw +DoCkKvbdrounicVf +EPCjjvbdBcoaVjMf +DncKjvbdcImKKevx +DoCjjvbdxLWdHzyf +EOcLKvbdcbTNSATm +EPDKjvbdRacdlJZL +EPDLKvbdZQleIleR +EPCkKvbdTfznLwWF +EObkKvbdsCFmLgKy +DoDKjvbdyqOlhiwA +EOcKjvbdtcCtwVoP +DnbjjvbdRWmdCkgc +EOcKjvbdqUTfqrKt +DnbkKvbdRyjHsDWA +DoDLKvbdYqMdiNEq +EOcKjvbdhbPCeXRR +EOcKjvbdVrNwbFLc +EObkKvbdZLqcsmkm +DoDKjvbdRWmdDMID +EPCjjvbdkWXNcbYX +DncLKvbdZyDinClS +EOcLKvbdqUTfqqjt +DncLKvbdUtNTelWK +EPDKjvbdkWWmdCXw +DoDKjvbdezuxdhtX +DoCkKvbdaSGCgtGL +EPDKjvbdVwJYWDdg +DoDLKvbdWSOYCFMD +EObkKvbdxwiJaozL +DoCjjvbdTpqOuVIN +DoCkKvbdrzLpSaHn +DnbkKvbdJutecdfi +DnbkKvbdhgKDZVjV +DncKjvbdCJKajiGK +EPCkKvbdbrcLTcia +DncKjvbdxxIibPzL +DoDLKvbdNUsRkNAX +DoCkKvbdZRMeJMdq +DnbjjvbdxsOJMqbH +DncKjvbdqAheAWhE +DoCkKvbdZnnIddyj +DoCjjvbdrpWOibuf +DoCjjvbdDxXlUUTl +EPDKjvbdZirgofbG +DnbjjvbdDnbkKvbd +EOcLKvbdoznDkXoA +DnbjjvbdozmdKxPA +DnbkKvbdfHkVqmqH +DoDLKvbdkDMLRGtg +EPDKjvbdDxXlUTtM +DoDLKvbdZLrETmkm +DoCjjvbdLAkGlbYR +DncLKvbddndsLUUS +DoCjjvbdaRfDIUFk +DnbjjvbdjJfHjNXr +DncLKvbdeFPRbXDK +DoCkKvbdJYTbIMRQ +DnbkKvbdptUGrRjt +EOcKjvbdkMbLzEfo +DoCjjvbdezuxeJUX +DoCjjvbdZMRctOLm +DoDLKvbdWWiXudEg +DnbkKvbdiiehKNXr +DoCkKvbdXrkaNUOx +EPDLKvbdZjTIQGbG +EObjjvbdeOeTLTtS +EPDKjvbdBraCsewS +EPDLKvbdLBKflaxR +DncKjvbdRzJhScWA +EPDLKvbdGKdrbhMu +DoDKjvbdFeiqmiUR +DnbjjvbdFWYooljF +DnbkKvbdUWLoisaR +EPDKjvbdfRaWzkbo +EPDLKvbdKQzEnfNe +DoDLKvbdnUtyjiqf +DnbjjvbdyNrgxSiD +EOcKjvbdjlakzFHP +DoCkKvbdjvXODaxX +DnbkKvbdLFfHaaRV +EPCkKvbdwuMeRYlO +EPDLKvbdtSqrxzEc +DncKjvbddwytTqez +EOcKjvbdZLqcsnMN +DoCjjvbdkxsSTZHU +EPDKjvbdiZtekqNf +EObkKvbdnCKWwnmu +EObjjvbdauBgYKsh +EPDKjvbdrSVKmkBN +EObkKvbdxrnImSBg +DncKjvbdZnnJEeZj +DoDKjvbdZjTIQHBf +DncLKvbdmIctRVRa +DoCjjvbdziuQQDsU +EPDKjvbdZRNFJNEq +EOcKjvbdTqRPUthN +EPCkKvbdePFSjssr +EPDLKvbdfIKuqmqH +DoDKjvbddZyQYYpb +DoDLKvbdWRmwaeMD +DoDLKvbdOYOuzcmt +DoDLKvbdxsNiNRbH +EPCkKvbdNeEThiLE +EPCkKvbdNPxQunHT +EPCjjvbduCbtvuoP +EOcLKvbdjgfkeemk +EObjjvbdjlbLydfo +DoDLKvbdxmsIXrhc +DoCkKvbdlrZVZsDi +DoDKjvbdEztRElCi +EObjjvbdBsAbsfWr +DoDLKvbdZHWdAOsJ +DnbjjvbdSCDdkhxk +EObjjvbdeFOqbWcK +EPDLKvbdZtJJZESn +EPCkKvbdKfFhBaQu +DoCkKvbdMpYQvNfs +EObjjvbdrpWOjCvG +EPDLKvbdJSxaTMxM +EPCjjvbdOSsvGduQ +DoDLKvbdtumxKRTA +EPDKjvbdBcpBWKMf +DnbkKvbdtbbuWvPP +DoDLKvbdKWUfDdfi +EPDKjvbdOStVgFVQ +EObkKvbdZnmheFZj +DoDLKvbdQwODcMID +DoDKjvbdVrNxBeMD +DoCkKvbdaSFbgsek +DoCjjvbdTvMQKTaR +DoCkKvbdZsiIxdSn +EObkKvbdakMFnnDA +DoDLKvbdJutedFHJ +EOcLKvbdhzVFlQnG +EObjjvbdzjUpQDsU +EPCkKvbdzoQQeCkx +DncKjvbdZjShPgCG +DnbjjvbdMgCpMpVL +DnbkKvbdNGbpNPuL +EObkKvbdKfFhBaRV +DnbjjvbdKQzFPFnF +EPDKjvbdCIkBkJGK +EObkKvbdmajXXnnV +DoCkKvbdNwnuzcnU +EObjjvbdauCGwkTh +DnbkKvbdbiNKKfXY +DnbjjvbdQmYCYnUz +DoDKjvbdiLddNtcZ +EOcKjvbdeEoSBwDK +DoDKjvbdcTCkUDia +DnbkKvbdZRNEhmEq +EPCkKvbdHfgZxxXg +EObjjvbdbsDLUDjB +EPDKjvbdhbPDFWqR +DncLKvbdKNADyfuB +EObkKvbdEztREkcJ +DncLKvbdbLMFnnDA +EObkKvbdZjShPgBf +DncLKvbdbVCHXkTh +DnbkKvbdqTtHSRkU +EObkKvbdfSBWzlDP +DnbkKvbdGKeTDIMu +EOcLKvbdGcjvJbJj +EPCkKvbdMowqWOHT +DncKjvbdYpmFIleR +EPDKjvbdZxcjNblS +DncLKvbdNrtVgEuQ +EOcKjvbdqrVKnLBN +DnbkKvbdatbHXkUI +DoCkKvbdEPDKkWbd +EPDLKvbdmIdURVRa +DoCkKvbdMoxRWNgT +EObjjvbdLBKflbXq +DoCkKvbdSwjkmzkY +DoDKjvbdJbicQicY +EObkKvbdNQYQumgT +DoDKjvbdxxJKCPzL +DncLKvbdnGdxNNgZ +DoCkKvbddijSVtzn +EPDKjvbdrJAJdmOe +DnbjjvbdzoQQeDLx +DoCjjvbdZRMeIldq +DnbjjvbdkHgMGGOL +DoCjjvbdaSGChTfL +EOcLKvbdCJLCKiFj +DoCkKvbdVhXvYHYz +EPCjjvbdcSbjscia +EOcKjvbdxZgeewdr +EPDLKvbdYkqdUNlN +DnbkKvbdREDApQdS +DnbjjvbdmozZVkYb +EPDKjvbdaRecITfL +DncLKvbdZyEJmbkr +EOcKjvbdZnnIdeZj +DncLKvbdeXzTsrFz +DoCjjvbdZRMdhmEq +EOcLKvbdGGJqmhtR +EPDKjvbdIidAJpHE +DncKjvbdMRwNZtpz +DncLKvbdnBiwXoOV +DoDLKvbdqYnhGqEY +EOcKjvbdWexytAOs +EOcKjvbdiZuFlQnG +EObkKvbdVAaqTRRy +EPCkKvbdTAEhgaoE +DoDKjvbdMoxQvNfs +EPDKjvbddjJqvUzn +EObkKvbdBiKajhfK +EPDLKvbdZLqcsmlN +DoCjjvbdgPazwDwh +EPCkKvbdwkWcgzzG +EPDKjvbdlYsSSyGt +EObjjvbdZLrDsmkm +DncLKvbdbsCkUDia +EObkKvbdkxrrSyGt +DnbkKvbdnBivxOnV +DoDLKvbdZirhPgCG +EObjjvbdfMevfmKL +EPDKjvbdSQTgJecw +DoDLKvbdUWMPitAq +DoDKjvbdwtleRZMO +EObjjvbdKRZdoGNe +DoCjjvbdauBgYKsh +DoDKjvbdXrlAlsnx +DncKjvbdUMVnaVni +DncKjvbdiHKDYvKV +DnbkKvbdySnJNSCH +EPCjjvbdfNGWgNKL +EOcLKvbdnQZxujxb +EObjjvbdVgwvXgYz +EOcLKvbdjKGHimYS +DnbkKvbdhanbeXQq +DncLKvbdhzUfLpmf +DoDLKvbdczZPxZRC +EPDKjvbdRNYBxnUz +EOcLKvbdlrZVZrdJ +DncKjvbdtcDUwWOo +EPCkKvbdQvmdDLhD +EPCjjvbdfMfWfljL +DoCjjvbdZyEKNbkr +EOcKjvbdgPazvcxI +DncKjvbdfNGXHMjL +DncLKvbdEKHjWXjA +EObkKvbdZjSgogCG +EPCjjvbdxnSgxShc +EPCjjvbdqrVKmkBN +EPCjjvbdbBVdepQX +DoCkKvbdrXQLbhxq +DoCjjvbdbVBfxLTh +EPCkKvbdHlBznWqL +EPDKjvbdTAEhgaoE +DnbjjvbdCfkfHAzc +DnbkKvbdptTfqqjt +EPDLKvbdWIXuwgYz +EObjjvbdrJAJeNPF +DncLKvbdKDKDRJcY +DnbkKvbdrDeIpNvB +DncLKvbdVwIwudFH +DncKjvbdICMZdzAD +EPCkKvbdsQVnjDVf +EPDKjvbdiZuGMRNf +DoDLKvbdIGfyyXwg +EPDLKvbdYORAXtut +DoCjjvbdhzVGMQnG +EPDLKvbdQwNcbkgc +EObjjvbdsBemLgLZ +DoDLKvbdZtIiYdSn +DoCjjvbdelevfljL +DoCkKvbdcyxowxqC +EPDLKvbdZMRdUNlN +EOcLKvbddZyPwyRC +EPCjjvbdZLrDsnLm +EPCkKvbdgPazwEYI +DoDKjvbdqFdEsvBI +EOcKjvbdVviXvDdg +EPCjjvbdCWzdIdov +DncKjvbdrSVKnLBN +EObkKvbdiLddNtcZ +EPDLKvbdrDdiPmvB +EPDKjvbdKDKDRKCx +DoDKjvbdtSqsZZeD +DoDLKvbdwuNFRYlO +DoCjjvbduLwvaTaX +EObjjvbdtkxXBUBX +EOcLKvbdSQTgJfEX +EObjjvbddneTKtUS +DoDLKvbdAMhYsXZx +EOcLKvbdczZPwxqC +EPDLKvbdjbkjqGtg +EOcLKvbdFkEsChMu +EObjjvbdbsCkUDia +EObkKvbdEzsqElDJ +EPDLKvbdGZUuBEYC +DoCkKvbdzROmJJwA +EPDKjvbduMXwAsaX +EPCjjvbdqwQMDJZR +DoDKjvbdqUUHSRkU +DoCkKvbdwtleQxkn +DnbkKvbdQvnEClHc +EPDKjvbdjvXNcaww +DoCjjvbdjggMFenL +EPDLKvbdJYUBhLpp +DnbkKvbdkNCLyeGo +DoCjjvbdDoCkLWcE +EOcKjvbdYqMeJNFR +EPCjjvbdRDcApQdS +EObjjvbdjblKpgVH +EPDKjvbdqqtjnKaN +DoDLKvbdwtmFRYlO +DoCjjvbdnHEwmNgZ +DncLKvbdaMjasVNH +DncKjvbdnUtzLKSG +DoDLKvbdkySrSyGt +EPCjjvbdyNsIXriD +DoCkKvbdRadFMIyL +EOcKjvbdqvokbhxq +EPCjjvbdYkrEUOLm +EPDKjvbdrpWPKCvG +DncKjvbdxUldpyLn +EObjjvbdrbFmMHKy +DoCjjvbdZHWdAPTJ +DncKjvbdEPDLKwDE +DnbjjvbdZHWdAPTJ +DoDLKvbdNrsvHFUp +DncLKvbdCTBDUFvr +EPDLKvbduDDUvuno +DoDLKvbddwystSFz +DnbkKvbdmbJvwoNu +EPCjjvbdcbTNSAUN +DnbjjvbdnVUzKjRf +EOcLKvbdYlRdUOMN +DoCjjvbdTAFIgand +DnbkKvbdpeceUVaI +DoDLKvbdlZSrTYft +EPCjjvbddePRbXDK +EOcLKvbdJqZdnfNe +EPCkKvbdRaceLhyL +EPDKjvbdLAkGlaxR +EPCjjvbdqGDdsvAh +DnbjjvbdxZgefYEr +EObkKvbdKWVGEFGi +EPCjjvbdSQUHKFdX +EPDKjvbdDxYLsssl +EPCjjvbdfHjvSNqH +EPCkKvbdQwODbkhD +EOcKjvbdZnmiFEyj +EPCkKvbdqwQMChyR +EOcLKvbdZyDimcLr +EObjjvbdjAQGaQGj +EPCkKvbdZtJJYdTO +EObjjvbdjFKgUoAO +DnbkKvbdcScLUEKB +EPDKjvbdjcMLRGuH +EObjjvbdqlzKZLgi +EOcKjvbdFfJrNiUR +EObkKvbdKaKgNBxR +EOcKjvbdHDjujBij +EObkKvbdFejSOJUR +DncLKvbdMIalRYAS +EOcKjvbdVTlsekvK +DoCjjvbdUQqOtthN +DnbjjvbdVYgtZkOn +DnbkKvbdrovOicVf +DncKjvbdKfGIBaQu +DnbjjvbdjuvnDaxX +EPDLKvbdHakzEzAD +EPDLKvbdyzdnRhIh +DoCjjvbdZGvdAPTJ +DoDLKvbdqvolChyR +DncLKvbdjlbLyeHP +EPCkKvbdmIdTptrB +EPCkKvbdQcbaPqES +DoDLKvbdddoSBwCj +DnbjjvbdjvWnECXw +DnbjjvbdZisHofbG +EOcKjvbdZQldhldq +DnbkKvbdfekymfgA +DnbjjvbdLBKgMbYR +EPCjjvbdEARiMzWw +EObjjvbdtSrTYzEc +EPDKjvbdZoOIddyj +DnbkKvbdcSbjtEKB +EObjjvbddndsKssr +DoCjjvbdxnSgxShc +EPCjjvbdOTUVfdtp +DoCkKvbdUtMselWK +DnbjjvbdJpydoGNe +DoCkKvbdGQASwGey +DnbjjvbdnGdxMnGy +EPDKjvbdHDkVibKK +DoCjjvbdtbbuXWOo +EPDKjvbdKWVGEEgJ +EObkKvbdGLEsCgmV +DoCkKvbdbrbjtEKB +EPDLKvbdRzJgrcWA +EPCkKvbdaRecITfL +EObjjvbdrbGMlHKy +DnbkKvbdZdwfzgiC +EPDKjvbdVwJXudFH +DoCjjvbdiZtekqOG +EObkKvbdqrUkOKaN +EObkKvbdySnImRbH +EObjjvbddoFTKstS +EOcKjvbdyOTHxTJD +DncKjvbdFVxoolie +DoCkKvbdFejRnIsq +EPDLKvbdptUGrRkU +EOcKjvbdajlGOnDA +EPDKjvbdrRtkOKaN +EOcKjvbdzoQQeDLx +EPCjjvbdrafMlGkZ +EPCjjvbdmpZyWKyC +DoCkKvbddBrlrAUN +DnbkKvbdMgDPlpVL +DnbjjvbdUxhTzKoO +DoCkKvbdSCDdlIyL +EPDKjvbdmbJvxPOV +EPCkKvbdNGcQMpUk +EPCjjvbdVqmxCFLc +DoDKjvbdrDdhonWB +EOcLKvbdYTLaNToY +DoCkKvbdkIGlFemk +EPDKjvbdNrsvHFVQ +EPDLKvbdrzLoraHn +EObkKvbdraelkgLZ +DoDLKvbdBdQAujMf +DncKjvbdwzIGGYFS +EOcKjvbdZeXfzhIb +DoDKjvbdbAueGPpX +DoCjjvbdZtJJYcrn +DoDKjvbdyqPNJKXA +DoCkKvbdTAFIhCPE +DoDLKvbdjblLQgVH +DoCjjvbdZtJJZDsO +EOcLKvbdrNZixkhJ +DoCjjvbdzoPpdblY +DnbkKvbdqcdhpNvB +DncKjvbdYpldhleR +DoCjjvbdmRyUysEJ +DoCjjvbdJXtBgkqQ +EOcKjvbdVwJYWDeH +DoDLKvbdZLqdUOLm +EPDKjvbdEXwlUUTl +EObkKvbdoznDkYPA +EPCkKvbdEASJNZvw +EPCjjvbdFjdsCglu +DoCkKvbdTlWPBWOi +DnbjjvbdcTCjsdKB +EObkKvbdkySrTYft +EPCkKvbdLrXMytpz +DncKjvbdZQmEhleR +EOcLKvbdHkaznWpk +DnbkKvbdHfgZyXxH +EObkKvbdpecdtWAh +DnbkKvbdRadElJYk +EPCjjvbdTXkMNzjx +DoCjjvbdmSYtzTEJ +EPCkKvbdZsiJZDsO +DncKjvbddoErkTtS +DoCkKvbdZRMdiMeR +EObkKvbdTfzmkvvF +DncKjvbdpxnhHQcx +EPDLKvbdaMjbStlg +DoCjjvbdkHfkefOL +DoCjjvbdqqtkOLAm +DnbjjvbdyzeNqgiI +EOcKjvbdiLeDnUby +DncKjvbdyYIjCPyk +EOcKjvbdpfEFUVaI +EPCjjvbdZirgpHBf +DnbkKvbdKWUecdgJ +EOcLKvbdiHKCxvJu +EPDKjvbdcTCkUEKB +EOcLKvbdaMkBsVNH +EPDLKvbdJutfEFGi +EPCkKvbdFaOqZJzm +EObjjvbdhaoCdvqR +EPCkKvbddZxpXxqC +DnbjjvbdZxcinDLr +DoDLKvbdpssfqrKt +DoCjjvbdqTsgRrLU +EPDLKvbdEYXlUTtM +EObjjvbduVmwjQsA +EOcLKvbdNPxQunHT +DnbjjvbdBhjajiGK +DoCkKvbdUGznMXVe +EPDKjvbdVwIwvEFH +EObkKvbdRMwayNtz +DoDLKvbdQZNAGrrK +EObjjvbdKWUedFGi +DoDLKvbdaNKartlg +DncKjvbduWOXipsA +EObjjvbduVmxKRTA +DoDKjvbdygZMAMdw +DoDLKvbdqTsfrRkU +DoCjjvbdEvYpQMjF +EObkKvbdNPxQunGs +EObkKvbdsZlPsAgn +DnbkKvbdZnnIddzK +EPCkKvbdNQXqWOHT +DnbkKvbdGLFSbhMu +DoDKjvbdrzMPraIO +DnbkKvbdZirgofaf +EPDKjvbdijFhJlxS +DncKjvbdWRmxBeLc +DnbkKvbduDDUvuoP +DoDKjvbdiZuGMQmf +EObkKvbdelfXGljL +EPDLKvbdfNFvfljL +DncKjvbdGKdrcINV +EObjjvbdFfJqnIsq +EOcLKvbdILaznWqL +DncLKvbdJutedFHJ +EOcLKvbdIwtBhLpp +EPDLKvbdsrrSyZdc +EPDKjvbdczZQXxpb +DncLKvbdDoCjjvcE +EPCjjvbdpxoIHREY +DoCkKvbdxxJJbPzL +EPCkKvbdVZIUZkPO +EPDLKvbdULuoBWPJ +EPCkKvbdfMfWfmJk +DnbjjvbdZtIiZETO +DoCjjvbdiMEcnUby +DoCkKvbdcyyPxZQb +DoCkKvbdZirgofaf +EObkKvbdozmdLYPA +DoDKjvbdYkrEUNkm +DoCkKvbdLqwMzVQz +EObjjvbdLFfICBRV +EObjjvbdjJehKNYS +DoCjjvbdEJgiuwjA +EPCkKvbdyqPNIiwA +EPDKjvbdNdcsiIjd +EPCjjvbdauBgXjsh +DnbkKvbdyzeORgiI +EPCkKvbdsCGNLgLZ +EObkKvbdtbbtwVno +EObjjvbdwuMdqZLn +EObjjvbdSQTfiedX +EPCjjvbdmttyjjSG +DncLKvbdnHFYMnGy +DncKjvbdxmsIXrhc +EPDKjvbdQYmAGsRj +EObjjvbdfoazvdYI +DoDLKvbdhaoDEvpq +EObjjvbdDihKVwjA +DoCjjvbdZMSDtNlN +DnbjjvbdhlFDnVDZ +EPCjjvbdiCPCdwRR +DncLKvbdULuoBVoJ +DoDLKvbdyYJKBpZk +DoDLKvbdRbDdlIyL +EOcKjvbdYSlAlsoY +DoCkKvbdySmhlqbH +EOcKjvbduWNxKRTA +DnbkKvbdFjeTDIMu +DoDLKvbdzaAPGgCM +EPCkKvbdBhkCLJGK +DnbkKvbdYpmFJNFR +EPCjjvbdQccBQQdS +EOcKjvbdqGDdtVaI +EOcLKvbdILazmvqL +EPDLKvbdajkennDA +DoDKjvbdxVMdqZLn +EPDKjvbdNPxQunGs +EObjjvbdhytfMROG +EPDKjvbdEXxLtTtM +EPDKjvbdZnnIdeZj +DoDKjvbdGKeTChNV +DncLKvbdjmCMZeGo +DnbkKvbdQwNdClHc +DncKjvbdXrlBMtOx +DoCkKvbdzaAOgHBl +DncLKvbdcIlijewY +EObjjvbdrbFllHKy +EOcKjvbdmbJwXnmu +EObkKvbdssSSxydc +DoDKjvbdSQTgKGEX +DnbjjvbdUyHtZkPO +EPCjjvbdFyUuAdYC +DoCkKvbdqFcdsvBI +EOcLKvbdqwQLbhyR +DoCkKvbdbsCkUEKB +EPCjjvbdIjEAKQHE +DnbkKvbdaNKbTUmH +EObkKvbdnCKWxPOV +EOcLKvbdZxcinClS +EObjjvbdhlFDnVDZ +DncLKvbdpyPHfpdY +EOcKjvbdTlVoAuoJ +EOcKjvbdmbKXXoOV +DoCkKvbdxsOImSBg +DncKjvbdZHXEAPTJ +DoDLKvbdDjIKVwjA +DoDLKvbdnCJvwoNu +EPCjjvbdZeYGzghb +EPDKjvbdHffzYxXg +EObjjvbdirzhrkJz +DoCjjvbdZnnJFFZj +EPDKjvbdeATqMwif +DoDKjvbdbVCHXjsh +DoCjjvbdGckVjCKK +EOcLKvbdyYJJbPzL +DoCjjvbdiCPDFWpq +EOcLKvbdIwtCILqQ +DoDLKvbdKQzFOfOF +EOcKjvbdNPwqWNgT +EObjjvbdZLqcsmkm +EPDLKvbdnPyxvKxb +DoDLKvbdKjaHvAKZ +EObjjvbdjKFgjNYS +DnbkKvbdLAkGmCXq +DoDLKvbdeEoSBwCj +DnbjjvbdHlBznXRL +DnbjjvbdKfGHbBRV +DnbkKvbdZQldiMdq +EOcLKvbdnBivwnnV +DncKjvbdsQVoKDWG +EObkKvbdypnlhiwA +EObkKvbdrykpTAgn +DoCjjvbdaMkBsUmH +EPDLKvbdRDcBPqES +DoCjjvbdpxngfpdY +EOcKjvbdEztRFLbi +EOcLKvbdcbTNSAUN +DoCkKvbdjcLjpfuH +EPCkKvbdjSzhsKiz +EPCkKvbdoAKztIDn +EPCjjvbdMgDQNPuL +DoDLKvbdKNAEZgVB +EPCjjvbdZsiJZDsO +EOcLKvbdkCkkQfuH +DoCjjvbdnGeXmNfy +DnbjjvbdrpVoJbuf +DoCkKvbduCbuWuoP +EObjjvbdSwkMNzkY +DoCkKvbdrNZiyMHi +DnbjjvbduDCtvuoP +DoDLKvbdMuSqjmAX +EObkKvbdsQVnicVf +EPCjjvbdmfeYNNgZ +DncLKvbdmIdURUqa +EPCkKvbdGBPQyJzm +EPCjjvbdZRNFImEq +DncKjvbdNddUJJLE +EObkKvbdaSFbgsek +DncKjvbdDoCkKwDE +DoCjjvbdtkxWaUBX +DncLKvbdfNGXHMjL +EPCkKvbdqTtHSSKt +DnbkKvbdxmrhXsJD +DnbjjvbdmttykKSG +EObjjvbdqcdhomua +DoCkKvbdVTlsfMVj +DnbkKvbdRECaPpcr +DnbkKvbdijFhKNYS +EObkKvbdIwsbIMRQ +EPDLKvbdJbibqJbx +EPDKjvbdxxJKCPyk +EOcKjvbdjuvnECYX +DnbkKvbdKRZePFme +DnbkKvbdMpYRVnGs +EOcKjvbdfMevgNKL +DoCkKvbdmfeXmOHZ +DncLKvbdFpATXGey +DoDKjvbdJXtCIMQp +EObjjvbdZshiZDsO +EPDLKvbdaRfDHsfL +DncKjvbdMIakqYAS +EObjjvbdSLZGUfjs +DoDKjvbdBcoaWJmG +DoDKjvbdEuxpPlie +EObjjvbdJcJbqKCx +DoCjjvbdxwhiapZk +DnbkKvbdsBemLfkZ +DoDLKvbdHgGyxwxH +EOcKjvbdQdDApRDr +EPDLKvbdKWUfDeHJ +DnbjjvbdjvXODbYX +DoDLKvbdHELWJbKK +DncLKvbdgFkynHHA +EPCkKvbdPxmAHSqj +DoDLKvbdYkqdTnLm +EPCkKvbdJYUCILpp +EOcKjvbdxwhjBpZk +DoCjjvbdiMFENtcZ +DoCjjvbdnCJvwoOV +DoDKjvbdSKxetgKs +EOcKjvbdWRmxCFMD +EOcLKvbdpedFTvBI +EObkKvbdbAvEfPow +EObkKvbdZnmiEeZj +DnbkKvbdtTSSyZeD +EPCkKvbdPxmAGsRj +EPCkKvbdVTmUGLvK +EObkKvbdJmADyfta +EOcKjvbdwWlBVaWV +DoDLKvbdjcMKqGtg +EOcLKvbdGGJrNiTq +DnbkKvbdgPazvdYI +EPCkKvbdGLEsDHmV +DnbjjvbdqceIomua +DncLKvbdjbkjpgUg +DoCjjvbdSxLLmzkY +EPDLKvbdjKGHilxS +EPDKjvbdmbJvwoNu +EPDKjvbdjmBkyeHP +EPDLKvbdzROliJwA +DnbjjvbdUaBprprZ +DoDKjvbdtbbtwWPP +DnbjjvbdURQoVVHm +DoCjjvbdjbkjqGuH +DoCjjvbdRbEFLhyL +DncKjvbdBcpAujMf +DoCkKvbdPxmAGrqj +EPDLKvbdZRMeImFR +EOcLKvbdcScKscia +EObjjvbdeXytTrFz +EPCjjvbdKfGICBQu +DncKjvbdijGIKMwr +EObjjvbdZLqctOLm +EObkKvbdSLZFuGjs +DnbjjvbdZMRcsnMN +EPCkKvbdWSOYBeMD +EObjjvbdRacdlJYk +DnbjjvbdFyVUaEXb +EObjjvbdRbEFLiYk +EObjjvbdZjTIQGaf +EPCkKvbdNsTugEtp +DoCkKvbdEASIlyvw +DoCjjvbdsrrSxzFD +DoDLKvbdQwOEDMID +EPDKjvbdaaVeGQPw +DoCjjvbdFejRnItR +EObkKvbdRacdlIyL +DnbjjvbdGGJqnIsq +DoDLKvbdGYtuBDxC +DncKjvbdbLMGPODA +EObjjvbdqYoIGpcx +DncKjvbdrykosAgn +EPCjjvbdJbjDQjCx +EObjjvbdkySqsYft +EPDKjvbdxwhjBpZk +DncKjvbdauBfwkTh +EPCkKvbdtSrSxydc +DoDKjvbdMRvmZuQz +DncLKvbdnUtyjiqf +DoDKjvbdSLYetgKs +DoDLKvbdJbjCqJcY +EPDLKvbdShyiqAAl +EPDLKvbdSQUHJfDw +EOcLKvbdijFhJmYS +EPDLKvbdvwMBWAvV +EObjjvbdeXytUSFz +EObjjvbdWXJXuceH +EPCkKvbdrDeIomvB +DncKjvbdczZQXyRC +DnbjjvbdQlxCZOUz +EPCjjvbdQccApRDr +DoCkKvbdqiAJdloF +DoCjjvbdDwwktTtM +EPCjjvbdRpUGjGEX +DnbkKvbdWfYytAPT +EPCjjvbdUMVoBVni +EObkKvbdxnShYTIc +EObjjvbdVAaqSprZ +DncLKvbdKVtfDdgJ +DoCjjvbdliEUQtqa +DnbjjvbdiGjCyWKV +DnbjjvbdqrVLOLBN +EObkKvbdUaCRSqSZ +EObkKvbdTkvPAuni +DoCjjvbdIGgZyXwg +DoDLKvbdssRsYzEc +DnbjjvbdZLqdTmkm +EPCjjvbdUtNTfLvK +DncKjvbdfMewGmJk +EOcLKvbdCTBDTfWr +EPDKjvbdFpASwGey +EPCjjvbdZLrETmkm +EPDLKvbdyXhjCQZk +DnbkKvbdeATqMxJf +DoCjjvbdjJfHilwr +EPDKjvbdzitopESt +EPDKjvbdEuxopMjF +DoCkKvbdvBEYroFI +DnbkKvbdrNZiyMIJ +EPCjjvbdxVMdpyMO +DnbkKvbdQlxCZOUz +DnbkKvbdqmZiyLhJ +DncLKvbdXnRAXuWU +EObkKvbdRadElJYk +DncKjvbdLiBkqYAS +DnbjjvbdmRyUysDi +DoDKjvbdKCicQjDY +EOcLKvbdRkZGVGjs +DoDKjvbdtSrSyZdc +EOcKjvbdRyjISbvA +EPCjjvbdHffyyYYH +EOcKjvbdaogHDkzd +EPCjjvbdidkGuPAO +EOcKjvbdCDpAujMf +DoCkKvbduVnXjQsA +DnbjjvbdTulQJtAq +DncKjvbdqTsgRrLU +DoCkKvbdzdynzdyp +EObkKvbdemGXHNKL +EOcKjvbdJXtCHlRQ +EPDKjvbdegkWRnQg +DoCjjvbdyXiKCPyk +EPDLKvbdlZTRsZHU +DoCjjvbdfNFvgNKL +DnbjjvbdbVBgYLTh +DncKjvbdcJMikFvx +EPDLKvbdUMVnaVoJ +DoCkKvbdgQBzvcxI +DoCjjvbdZtIhxdSn +EPCjjvbdRWnEDMID +EObkKvbdjlakydfo +DncLKvbdrpWOicVf +EOcKjvbdhgKDYuiu +DoDKjvbdmIdTqUqa +EPCjjvbdwtleQxkn +EObkKvbdcJNKKfWx +DncLKvbdNsUWGdtp +DoDKjvbdWSOXbEkc +EPCkKvbdpyOhHREY +DoDKjvbdkyTSTYft +EPCjjvbdFjdrbgmV +DncLKvbdrounjDWG +DoDKjvbdVTmTfLvK +EPDLKvbdSCDeLiYk +DoCkKvbdrXPlDIxq +DncLKvbdKVuGDeHJ +DnbjjvbdrWokcIxq +EObjjvbdKVuGEEfi +EPDLKvbdrbGMlGjy +EPDKjvbdlqxtzSci +EOcLKvbdwygeeweS +EObjjvbdjKGIKNYS +EObkKvbdVrOXbElD +DnbjjvbdrMzKZLgi +EPCkKvbdMpXqWNfs +EPDLKvbdrSUkOLAm +EPDKjvbdZisIPfbG +EPDLKvbdRDbaQRES +DncKjvbdVTmUGLvK +EOcKjvbdYzcGRjWZ +EObjjvbdMuSrLNAX +DncKjvbdjgflGFnL +DncLKvbdWIXvXfxz +DoDLKvbdNHComPtk +EOcLKvbdSBceLhyL +DoCkKvbdZRMeImFR +EPDLKvbdiifIKMwr +DoCkKvbdvBDxsOeI +EPDLKvbdxmsHxShc +EOcKjvbdcyyPxZRC +DoCkKvbdsBfNMHKy +DoDLKvbdaRebhTfL +DncLKvbdypoNJKXA +EObkKvbdzRPNJKXA +DnbkKvbdTvLoitBR +EOcKjvbdWHwuxGxz +EObjjvbdZHWdAPTJ +DnbjjvbdySnJMqag +EPCkKvbdtTRsYzFD +EPDLKvbdhytelQnG +EPCkKvbdTppntuHm +DnbjjvbdZeYGzhIb +EPCjjvbdIwsaglQp +DoCkKvbdpstGrRkU +EObjjvbdCJLBjiFj +EOcLKvbdePErjstS +EPDKjvbdpxnhGqDx +DnbjjvbdZyEKOClS +DoCjjvbdpyOhHREY +DncLKvbdNGcPmPuL +DoDLKvbdQwNccLgc +EPDKjvbdmbJvxPNu +DnbkKvbdQwOEDMHc +DoDKjvbdXrlAltOx +EPCkKvbdGQASvgGZ +EOcLKvbdmttykKSG +EOcLKvbdGLFSbgmV +DncLKvbduCbuWvOo +EPDKjvbdSQTfiecw +DoCkKvbdYkqctNkm +DoDLKvbdlZSqsZHU +DoDLKvbdqGEEtVaI +EObjjvbdhytekpmf +DoDKjvbdmuUzKiqf +EObjjvbdrMyiyLhJ +DoDLKvbdEARhlzWw +EObjjvbdaRfCgsek +EPDKjvbdaNKaruNH +EOcLKvbdJqZeOenF +DnbjjvbdTfzmlXVe +DoCjjvbdzQoNIjXA +EObkKvbdMpYQvNfs +DncLKvbdVrOYCElD +DoCjjvbdijGIJlwr +DoDLKvbdrXQMDIyR +EPDLKvbdEYYMUTtM +DncKjvbdkHgMFenL +DnbjjvbdqdFIpOWB +EObkKvbdqFceTvAh +EObjjvbdyOSgxSiD +EOcKjvbdDnbkKvcE +DoDLKvbdYqMeImFR +EObkKvbdwtleRZMO +EPCkKvbdrWolCiYq +EObjjvbdrXPkcJYq +DoCkKvbdtlXvaUBX +EOcLKvbdeYZssrFz +DoDLKvbdnGeYMnHZ +EObkKvbdYTLaMtOx +DoDLKvbdJcJcRKDY +EPDKjvbdeKJrVtzn +DoCkKvbdrSUkNjaN +DncKjvbdeATqNXjG +EObkKvbdqlzJyLhJ +EObjjvbdDjIJvXjA +EObjjvbdzGyMAMdw +DoDLKvbdFfJrNiTq +EOcLKvbdBhkCKiGK +EObjjvbdpssgSRjt +DncKjvbdKaLGlbXq +EOcLKvbdlYrqrxgU +EPCjjvbdVqmxBeLc +EPDLKvbdZQmFJNFR +DoCkKvbdkCkkQfuH +DncKjvbdauCGwjsh +DoCjjvbdEASIlywX +DncKjvbdLAjgNBxR +DncKjvbdCDpBVimG +EOcLKvbdqlzJxkhJ +EPDLKvbdtvNxKRTA +DnbkKvbdGLFScINV +DoCkKvbdQvmdCkhD +EPDKjvbdFjdrbhNV +EPCkKvbdZLrETnLm +EPDLKvbdTvLoisaR +EPDLKvbdsrrTZZdc +EPCkKvbdZMRcsmlN +DncLKvbdxnTHxTIc +EOcKjvbdzROliJwA +EOcKjvbdsQVnjDVf +EObkKvbdqGDdsvBI +DncKjvbdwtleQxkn +EObjjvbdTqRPUuHm +DnbjjvbdVwIwvEFH +EPCjjvbdZshhxcsO +DoCkKvbdKCibqJbx +EOcKjvbdUVlQKTaR +EObkKvbdVTmUFlWK +EOcLKvbdmIctRVRa +DoDKjvbdPIAYZAYa +DoCkKvbdjvWnDbXw +DnbjjvbdtvNwjRTA +EObjjvbdNHComQUk +EOcKjvbdySnImRbH +DoCjjvbdDjIKVxKA +DncLKvbdKefHbApu +EObjjvbdehLWRmpg +EOcLKvbdJTZAsMwl +DoDKjvbdZirgpHCG +EObkKvbdozmcjxPA +EObkKvbdsZkosAgn +EPCjjvbdSxKlNzjx +DoCjjvbdfILVrNpg +EPCjjvbdGGKRnJTq +DnbjjvbdpssgSSLU +DoDKjvbdrDdiPmvB +EPCkKvbdZtJJYcsO +DoDLKvbdNdctIhkE +EPCjjvbdcImJkFvx +EOcLKvbdGLErbhNV +DoCkKvbdnQZxukYb +EPCkKvbdWSNxBeLc +EPCkKvbdsPvOjDWG +EOcLKvbdeFOqavbj +EPCjjvbdjAQHApHK +EPDKjvbdwXMBVaVu +DncLKvbdMowqWNfs +DoCkKvbdRbEFMJYk +DoCkKvbdrNZjZLhJ +DoCjjvbduDCtwWPP +EObjjvbdNeEUJIjd +DnbkKvbdlYsRsYgU +DoCjjvbdUxgsyjnn +EObkKvbdbLMGPODA +DoCkKvbddneTKtUS +EOcKjvbdvvkaWAuu +EPDKjvbdVUNUFkuj +EObjjvbdKDKDQjCx +EPDKjvbdnUuZjiqf +DoCkKvbdsCFmMGkZ +DncKjvbdrpVnjDWG +DnbjjvbdiZtfMQmf +DoCkKvbdwWkaVaVu +DoCjjvbdSCDeLiZL +DncKjvbdEYYLtTsl +EPDLKvbdOSsufeVQ +EOcLKvbdWSOXadlD +EPDLKvbdpaJFAXHd +DncKjvbdSCDdkhyL +DoCjjvbdIMBzmvqL +DnbkKvbdVUMsfLvK +DoCkKvbdlhctQuSB +DncKjvbdJuuGEFGi +EPCjjvbdJSyAsMwl +EOcKjvbdUtMtGMVj +EPCkKvbdHDkWKCKK +DncLKvbdySnImRag +EPCjjvbdwMvAMcdm +DnbkKvbdelevfmJk +EPDKjvbdYORAYUvU +EPCkKvbdVwIxWDeH +EObjjvbdtvOXipsA +DncLKvbdhlEdOUcZ +EOcLKvbdTlVoAuoJ +EPCkKvbdNQXpunHT +EOcLKvbdWXJXvDdg +DnbkKvbdZoOJFEzK +EObkKvbdmbKWwoOV +DnbjjvbdiHKDYvKV +DncKjvbdfSBWzlDP +DoCkKvbdLBKflawq +EObkKvbdUsmUFkvK +EObjjvbdLqwNZtpz +DoCkKvbdsBfNLfjy +DncLKvbdjvWmcbYX +EObkKvbdaMkBruMg +EPCkKvbdHkazmvqL +DnbjjvbdRyjHrbvA +EPCkKvbdNQXpvOHT +EObjjvbdOYPVzcnU +DoCjjvbdaSGCgtFk +DoDKjvbdxmsHxSiD +EObjjvbdZirgogCG +EOcLKvbdmuVZkKSG +DncLKvbdUyHszKnn +DnbkKvbdxmsHxTJD +EPCkKvbdVrOYBdkc +EOcLKvbdhkdcmuDZ +DncKjvbdwuMdpyLn +EObkKvbdxVMdpxlO +EPDKjvbdmbKWwoOV +DoCjjvbdhkeDmtby +DncLKvbdLFehCBQu +DoCkKvbdYSkaNUOx +DnbkKvbdmaivxPNu +EPDKjvbdfNFvgNKL +EPDKjvbdhlEdOUcZ +EPDLKvbdTukpKUAq +DncKjvbdUVlQKTaR +DnbkKvbdYgWdAPSi +DoDKjvbdIwsbHkpp +EOcKjvbdlZTSTYgU +DoCkKvbdNHColpVL +EPCjjvbdxrmhmRag +EObkKvbdUxgsyjnn +DoCjjvbdsQVoJbvG +DoCkKvbdBdQBVjMf +EObkKvbdIHHZxxXg +EOcKjvbdJuuFdEgJ +DoDLKvbdwyhGGXeS +DnbkKvbdSKyFuGkT +DoDKjvbdiGibxvKV +DncKjvbdnBjXXoNu +DnbkKvbdFpATWffZ +EPCjjvbduDCtvvOo +EObjjvbdIsZArlxM +DncKjvbdEvYopMjF +EObjjvbdwuMdqYkn +DoCjjvbdwyhFfYEr +EPCjjvbdqUTfrSLU +EOcLKvbdzGxlANEw +EPCjjvbdEOcKjwCd +EPCkKvbdOSsvGeUp +DncKjvbdhlEcnUcZ +EPCkKvbdUVkoitAq +DnbjjvbdOAJTTjSA +DncKjvbdqmZiyLhJ +EObjjvbdpstGqrLU +EPDLKvbdFxuVAcwb +DoCkKvbdauBgYKsh +DnbjjvbdZMRcsmkm +EOcLKvbdqrVLNkBN +DoDKjvbdNQYRWNgT +DoCjjvbdCTBCtFvr +DncKjvbdZyEKNcMS +EPCkKvbdVviYVdFH +DoDKjvbdePErjtUS +EObkKvbdwtmFRZLn +DncKjvbdpedEsvAh +EPCkKvbdzoQRFClY +DoDKjvbdIxTbIMQp +DoDLKvbdxsOImSCH +EPCjjvbdYfwEAOri +EOcKjvbdnPyyWLZC +EOcKjvbdhlFEOVCy +DoCjjvbdwyhFfXdr +DnbkKvbdZQmEhleR +DnbjjvbdbAudepPw +DnbjjvbdMpXqVmgT +DncLKvbdNeEUIhjd +EObkKvbdMfbomQUk +DoCkKvbdqvpMDJYq +DoDLKvbdfekzNfgA +EOcLKvbderAvzlCo +EOcLKvbdiZtelQnG +EPDLKvbdRXNdClHc +EPDKjvbdNrsufeUp +DncKjvbdZQldiMeR +EObkKvbdiLdcmtby +DncLKvbdZQmEhleR +DncLKvbdZRNEiMdq +DncLKvbdWRmwadlD +EPDLKvbdGLEsDHlu +DncLKvbdZjTIPgCG +EObjjvbdxnTIXsIc +EPCjjvbdliETptqa +EOcKjvbdlrZUyrci +DoDKjvbdbKlFnnDA +DnbjjvbdwXLaWBWV +DoCkKvbduaEZSoFI +EPCjjvbdRyjHrbvA +EPCjjvbdLhakpxAS +DoCkKvbdmaiwXoNu +EOcKjvbdyNrhYShc +EObjjvbdsCFllGjy +DnbkKvbdZshhxdTO +DoDKjvbdZjShPfaf +EOcKjvbdmajWwnmu +EObjjvbdJvUfEFHJ +EPCkKvbdOEcsiIkE +EPCkKvbdkNBlZeGo +DoCjjvbdVviXudFH +DnbkKvbdjJfHjMxS +DoDLKvbdGBPRZJzm +EOcKjvbdiCObdvqR +DnbjjvbdVwJYWDeH +DncKjvbdGAoQxizm +EObjjvbdxmsIYSiD +DncLKvbdqqtkOLAm +EObjjvbdvvlAvBWV +DncKjvbdvAdZTPFI +EOcKjvbdjAQHAogK +EObkKvbdpxoIHRDx +EPCkKvbdffLynGgA +EPDLKvbdTvLpKUAq +EOcKjvbdmttzKjSG +DoCkKvbdqwQMChyR +DoDKjvbdrzMPsAgn +DoDLKvbdyYJKCPyk +DoCkKvbdRbEEkhxk +EPCkKvbdBdQAuilf +EPDLKvbdRaceMIyL +EOcKjvbdraelkfjy +EOcLKvbdEASIlzWw +DnbkKvbdOSsvGeUp +DnbjjvbdmuVZkJrG +DnbkKvbdVwIwvDeH +DoDKjvbdwWlAvBVu +DncKjvbdSKyFuGjs +DoCkKvbdOXnuzcmt +DncKjvbdrXPlDJZR +EPDLKvbdsBfNMGjy +EPDLKvbdiifHilwr +DnbkKvbdjvWmcbYX +DoDLKvbdZnmhddyj +EPCkKvbdemFvfmKL +EPDLKvbdNxPVzcnU +DnbjjvbdRkYfUgLT +EPCkKvbdZRMdhldq +EObjjvbdYqMdhmFR +DncLKvbdJvVGDeGi +EPDKjvbdUtMsfLuj +DoDLKvbdZyEJnClS +DnbkKvbdjcMKqGtg +EPCjjvbdDnbjkXDE +DnbjjvbdLGGICAqV +EPDKjvbdWIXvYGxz +EOcLKvbdBiLCKhfK +DnbkKvbddwzUURez +EOcLKvbdZQldiMdq +DncLKvbdKVtfEFGi +DoCkKvbdvAcxsPEh +DncLKvbdjvWmcbXw +EObkKvbdqiAJeNOe +EOcLKvbdUMWPBWPJ +EPCjjvbdOFDshhjd +EOcLKvbdVrNxBeMD +EPDKjvbdiGicZWKV +EObkKvbdtTRrxzFD +DoCjjvbdjJfHilxS +DoCjjvbdelfXGmKL +EPCjjvbdIrxaTMwl +EOcLKvbdRECaPpcr +DnbkKvbdiLeDmtby +EPDLKvbdGcjvKCJj +EOcKjvbdWWiXuceH +DoCkKvbdpstHRrLU +EPDLKvbdkHgLeemk +EPCkKvbdzGxlANEw +EObkKvbdjKGHjMwr +EPCkKvbdiUzEvquC +EOcLKvbdwXMBWBVu +EObkKvbdeKKRvUzn +DncLKvbdSBceLhxk +DoDLKvbdJbibqJbx +DncKjvbdeAUQlxJf +EPDKjvbdbUafwkUI +DoCkKvbdxnTIXriD +EPDLKvbdRacdlJYk +EOcLKvbdmgFXlnGy +EOcKjvbdHELWJaij +EPDLKvbdLhbMQxAS +DnbkKvbdhbPDFXRR +EOcKjvbdqwQMDIxq +DncKjvbdeOdrkTsr +EObjjvbdyOSgwriD +EPCkKvbdjmCLyeHP +DnbjjvbdZisHpGbG +EOcKjvbdIHGzZXwg +DncLKvbdwWkaWAvV +DoDKjvbdffLzOHHA +EPCjjvbdqZPIHREY +DoCkKvbdDjHivYKA +DoDLKvbdYNqAYVWU +EPCkKvbdzjUpPcrt +DncLKvbdlqyVZrdJ +DncLKvbdDoDLLXDE +DoCjjvbdcSbjtDia +DoDKjvbdDxXlUTsl +DncLKvbdJYTahLpp +EObkKvbdNQXqVnHT +EObjjvbdijGIJlxS +EObjjvbdOStVfdtp +EPCkKvbderBWzlCo +EObjjvbdKQzEnenF +EPCjjvbdmtuZkKRf +EPCkKvbdEJhJuxKA +EPCjjvbdgGLymfgA +EObjjvbdRbDeLhxk +EOcKjvbdrSUkNkAm +DoDLKvbdEOcLLXDE +EObjjvbdBhjbKiFj +DoDLKvbdBdQAuimG +DnbjjvbdDwwkstTl +DoDLKvbdVwJYVdEg +EOcKjvbdACqwizJQ +EObjjvbdZsiIyETO +EObkKvbdGLFSbhMu +EOcLKvbdFkFTChNV +DnbjjvbdVBCRSprZ +DoCjjvbdssRsYydc +DoCkKvbdUMWOaWOi +DoDKjvbdYSlBMsnx +EObkKvbdNsTvHFVQ +EPDKjvbdZisIPfaf +EOcLKvbdpssfqqjt +EPCkKvbdNHCpMpVL +EPDKjvbdczZPwxpb +EPCjjvbdnBivxPOV +DoDKjvbdUtNTelVj +EPDKjvbdjhHMFfNk +EObjjvbdEuyPolie +EPDLKvbdKQydneme +EPCkKvbdQvnECkgc +EPDLKvbdatbGxLTh +DoDLKvbdNPxQvOGs +DoDLKvbdySnImSCH +EObkKvbdvBEZTOeI +DoCjjvbdatagXkUI +DnbjjvbdmbKXXnnV +EOcLKvbdmbKXXoNu +EPCkKvbdNsUWGduQ +DncLKvbdpssgSRjt +EPDLKvbdiUzFXSUb +EObkKvbdyzeORgiI +EOcLKvbdKDKDQibx +DoCjjvbdmJDtQuSB +DncLKvbdaNKaruMg +DnbkKvbdOEctJJKd +EObjjvbdkVvnECXw +EObkKvbdKaLHMbXq +DoCjjvbdYzcFqiuy +DoCkKvbdvwLaWAvV +EPDLKvbdnBiwXoNu +EOcLKvbdLBKgNBwq +EPCkKvbdCJLBjiFj +EObjjvbdptUGqrLU +DoCkKvbdWXJYWEFH +EOcLKvbdNeEThiLE +EPCjjvbdtAHQhAAr +EOcKjvbdUGzmlXVe +DnbkKvbdrylPsBIO +EPCjjvbdICLzEzAD +EPDKjvbdrpVoKCuf +EPCjjvbdRkZFuGjs +Dnbjjvbdznopdbkx +DoDLKvbdmgFYNNfy +EObjjvbdptUHRrKt +DoCkKvbdhfjDZWJu +DncLKvbdLGFgbBRV +EPCjjvbdZnnIeEyj +DoDKjvbdmtuZjirG +EPCkKvbdmbJvwoOV +DncLKvbdJpydoFme +EPDKjvbdFyUtaEXb +DnbkKvbdqFcdtWAh +DnbjjvbdWRnXaeMD +EOcKjvbdCIkBkJGK +EOcKjvbdJTZBSlxM +DnbjjvbdziuPocsU +DnbjjvbdhzUelQmf +EPCjjvbdUaBqSprZ +DncLKvbdxZgefXdr +EObjjvbdKVuFdEgJ +EPCjjvbdAMgyTWzY +DnbjjvbdiHJbxuiu +DoDLKvbdUtNTekuj +EPCjjvbdUQpnttgm +DoDLKvbdVAbRTRSZ +DncKjvbdkxsSTYgU +DnbkKvbdMfbomQUk +DoCjjvbdTAEiHbOd +DoCjjvbdczZPxYpb +DnbkKvbdUVkojUBR +DncKjvbdddnqavbj +DoDLKvbdxwhiapZk +DoDKjvbdZirhPfaf +DoDKjvbdTukoitAq +DoCjjvbdrJAKFMne +EObkKvbdZQmEhmFR +DoCjjvbdHgHZyXxH +DncLKvbdNHCpNPuL +DoCkKvbdfIKvRmpg +DoCjjvbdNsUWHEtp +DoCjjvbdpfDdtWAh +DoDLKvbdBhkCKiGK +EObjjvbdtSqsYydc +EPDLKvbdQccBPqES +EOcLKvbduMXvaUAw +EOcLKvbdZMRctNkm +EObjjvbdRadFMIxk +DncLKvbdjhGlFfOL +DoCjjvbdhtzEvqtb +DnbjjvbdUtNUGMWK +EPCjjvbdaaWEfQQX +DncKjvbdunszpkOt +DoDKjvbdEJgjWYKA +DoCkKvbdQYmAGsRj +DoCjjvbdmozYujyC +DnbkKvbduVnYKRTA +DnbkKvbdZxcjNblS +EPDKjvbdzRPNIiwA +EObkKvbdzitopESt +EObjjvbdfILVrNpg +DoCjjvbdNGcPmPuL +DnbjjvbdEYXlUUTl +DnbjjvbdraellHKy +DoDKjvbdZQmEhmFR +DoCkKvbdZnnIdeZj +DnbjjvbdjcMKpgVH +EObkKvbdTfznLvue +EOcKjvbdFkErcIMu +DncKjvbdGdKvKBjK +DoCjjvbdVvhwvEFH +EPCkKvbdmJEUQuSB +DncKjvbdIsZBSlxM +DnbkKvbdmbJvxPNu +DoDKjvbdTqRPVUhN +DoDLKvbdwygefXdr +DnbjjvbdLGGHbBRV +DncLKvbddijSVtzn +EObkKvbdZnnJFFZj +EOcKjvbdCTBCsfXS +DoDLKvbdmttzKjSG +EOcKjvbdyNsIXsIc +EOcKjvbdbVBgXjtI +EOcLKvbdGFjRnJUR +DnbkKvbdYTMBMtOx +EPCkKvbdNGcQMouL +DoDKjvbdJcKDQibx +DoDLKvbdrpWOicWG +EOcKjvbdRaceMIyL +EPDLKvbdWWiYWDeH +EPDLKvbdczZQXxqC +DoDKjvbdLBKgMaxR +DnbjjvbdZjShQHBf +DoCkKvbdKaLGlbXq +DnbkKvbdGdKujCJj +EObkKvbdIBkydzAD +DnbkKvbdqUTgSRkU +EOcLKvbdBiKbKhfK +DoDKjvbdVwIwvEEg +EPDKjvbdIjEAKQHE +DoCkKvbdEPCkLWcE +DoDLKvbdrDeJQNua +EOcLKvbdNddUIhjd +EPCkKvbdYNqAXtvU +EObkKvbdUaCRSqRy +EPCjjvbdqqtjmjaN +EPDLKvbdhbOcFWpq +DoDKjvbdULvPBVni +DoDKjvbdGGJrOJTq +DoCkKvbdqceIpNvB +EOcKjvbddePSCXCj +EPCjjvbdVUNTekuj +DnbjjvbdLGGHbApu +DoCkKvbdcTDLTcia +DnbkKvbdNsUWGeVQ +EObjjvbdZLqcsmlN +EObkKvbdxrnJMrCH +DnbjjvbdqvolChxq +EPCjjvbdaNKbSuNH +DnbkKvbdlYrrTYft +EPCjjvbdwtldpyMO +DnbkKvbdNddThiKd +EPCkKvbdjJfIJlwr +EPCjjvbdJpzEoFme +DnbkKvbdiMEcmuDZ +EOcKjvbdkVvmdBww +EOcLKvbdAMgxrwZx +EObjjvbdatbGwjtI +EOcKjvbdTAEhhCOd +DnbjjvbdfNFwHNJk +EObjjvbdVBBqSpqy +EPCjjvbduaEZSndh +EPDLKvbdpstGqqkU +DnbkKvbdIwtCHlQp +DncKjvbdrbGNMGkZ +EOcKjvbdILaznWqL +DoCjjvbdTXjkmzkY +DoCjjvbdIGfyyXxH +EOcKjvbdjKFhKNXr +EPDKjvbdRDcApRES +EObjjvbdmfdxNNfy +EObjjvbdDihKWYKA +DoCjjvbdzaAOffal +EPDLKvbdQccBQQcr +EPCjjvbdTlWPAvOi +DnbjjvbdqUTfrSLU +EObjjvbdVAbRTRRy +DoCkKvbdnCKWxPOV +EOcKjvbdFjdrbhNV +DnbjjvbdrzLpTAhO +DoCjjvbdDxYMUUUM +DnbjjvbdmoyxujyC +DnbjjvbdUVkoitAq +EObjjvbdrEEhpOWB +DncKjvbdRjyGVGjs +DoCkKvbdJJdAKPgE +DoDKjvbdKDJbqKCx +EPDLKvbdcTDLUDia +DoCkKvbdePEsKssr +EPCjjvbdJbjCqJbx +DoDLKvbddBrmSATm +EOcLKvbdlhcsqVRa +EOcLKvbdKfGICBRV +EPDLKvbdrovPJbvG +DoCjjvbdbAvFGQQX +EPDLKvbdlZTSSxft +DnbjjvbdLqvmZuQz +DncLKvbdZshiYdSn +EOcLKvbduMXvaTaX +EObjjvbdZtJJYcrn +EOcLKvbdczZPwxpb +EPDKjvbdatafwjtI +EObkKvbdsQVnicWG +DnbjjvbdrWokcIyR +DncLKvbdJuteceGi +EOcLKvbdADRwiyiQ +EPDKjvbdCIkBjiFj +EPDKjvbdrNZjYkgi +DnbkKvbdSLYeuHLT +DoDKjvbdkNBkzEfo +DnbkKvbdcyxowyQb +EPDKjvbdYkrETnMN +DoDKjvbdwWlAvAvV +EPCkKvbdczZPxZQb +EPCkKvbdKCibpjCx +EOcKjvbdhytfLqOG +DnbjjvbdxmsHwriD +EPDKjvbdmfeYMmgZ +DoCkKvbdNQXpvNfs +DncLKvbdirziSkJz +EOcKjvbdHffzYxYH +EOcKjvbdWXIxWDdg +DncLKvbdVvhwuceH +DoDLKvbdFxtuBDxC +DncLKvbdJcKCqJbx +DoCkKvbdxLWcgzyf +DnbjjvbdCJLBjiGK +EPCjjvbdcasMrATm +DoDLKvbdLFfICAqV +EPDKjvbdqmZjZMHi +DncKjvbdczZPwxqC +EObkKvbdrWpMDJYq +EPCjjvbdLFehCBQu +EPCkKvbdRzJgsDWA +DoDKjvbdIsZArlxM +DncLKvbdqFcdsuaI +DncLKvbdULvPBVni +EOcLKvbdWXJXuceH +EPDLKvbdaNLCTVMg +EObkKvbdUxhUZjnn +DncLKvbdeATplxKG +DoCjjvbdmSYtzSci +EOcLKvbdkMbLzEfo +EPCjjvbdrpVoJcWG +EPCjjvbdXrlAlsoY +DoDLKvbdUxhTzKnn +EPCjjvbdOEdUJJLE +EObjjvbdKDJcRKCx +EPDKjvbdcyxpXxqC +DnbkKvbdZxdKODMS +DncLKvbdcImJjfWx +DnbjjvbdpfEFTuaI +DnbkKvbdZoNheEyj +EOcKjvbdjFKfuPAO +DnbkKvbdFVyQQNKF +DnbkKvbdDjHiuwjA +EPCkKvbdMgDPlotk +EPDKjvbdxnShXsIc +DoDLKvbdOTUVfduQ +DncKjvbdFejRnIsq +DncKjvbdSQUHJfEX +DncLKvbdRXOEDMHc +DoCkKvbdsZkosAgn +DoDKjvbdUsmUGLuj +EPDKjvbdiifIJmYS +DoDLKvbdZQmEhmFR +EObjjvbdeUAUASlv +DoDLKvbdUsltFlVj +DoCjjvbdSiZjRABM +EOcLKvbdegkVrORH +DoDKjvbdYlRdTnLm +DncKjvbdzitopESt +DnbkKvbdhbPDEwQq +DncKjvbdSKxetgLT +DncKjvbdZQmEiNFR +EPDLKvbdUyITzLPO +DnbjjvbdznpQdblY +EObkKvbdbLMFoODA +EPDLKvbdBhjbLJFj +DoDKjvbdNwoVzdOU +DncKjvbdvBDxsPEh +DnbkKvbdSBceLiZL +EPCkKvbdOhAXyAZB +EObjjvbdZisIQGbG +EOcLKvbdAMgxrvyx +EPDKjvbdCDpAvKMf +DoDKjvbdxVMdpxlO +EOcKjvbdJbicRJbx +DoCkKvbdTppnuVIN +EObjjvbdZjTIPfbG +DoCkKvbdpyOhHQcx +DoCjjvbdfHjvSOQg +DoCjjvbdzoPpdcMY +EPDKjvbdmfeYNNfy +EPCjjvbdXGYzUAPT +DoDLKvbdypnmJKXA +DnbkKvbdBsAcUFwS +DoDLKvbdQYmAGsRj +EObjjvbdUxhTyjnn +DoCkKvbdrouoKCvG +DoDLKvbdhtydwSUb +EPCkKvbddwytUSFz +EOcKjvbdrbFmLgLZ +EObkKvbdbPffckzd +EObjjvbdDxXlTtUM +DnbkKvbdqGEFTvAh +EPCjjvbdDoCkKwDE +EOcLKvbdVviYWDeH +EPCjjvbdWSOYCFLc +DncKjvbdmbKWxPNu +DoCkKvbdZshhxdTO +DoDKjvbdwtldqYkn +DoDLKvbdYSlBMsoY +EPDKjvbdRkZFuHKs +DnbkKvbdeYZstRez +DoCjjvbdrNZixlIJ +DoCjjvbdmgFXlmgZ +EPCkKvbdYlRcsmlN +DoCjjvbdOFETiJKd +EPDLKvbdBhkCLJFj +EPCjjvbdmuVZkJrG +DnbkKvbdFjeTChMu +DoCjjvbdJTZBSlwl +DnbkKvbdozmdLYPA +EObjjvbdtbbtvuoP +DncKjvbdqUTfrSKt +DncKjvbdyTOImSBg +DnbjjvbdcTCkTdKB +EOcKjvbdKaKgNCXq +EPDKjvbdZoOIeEyj +DoDKjvbdYqMeIleR +DncKjvbdnPzZWLZC +EPDLKvbdZirhPfbG +DnbkKvbdGQATXGey +EOcKjvbdZsiJYcsO +DnbkKvbdrWpMDJYq +DoCkKvbdMuTSLNAX +EObjjvbdpxnhHRDx +EOcKjvbdzitpQESt +EPCjjvbdhuZeXSUb +DoCjjvbdNeDtJIkE +DoCkKvbdCEQBWKMf +EPCkKvbdHEKvKCJj +EPCjjvbdatbHYLTh +EObkKvbdLGGICBRV +DncKjvbdRjxeuGjs +DoDKjvbdnHFYNOHZ +EObkKvbdIryAsNYM +EObjjvbdmfdwlnGy +EOcLKvbdNeDsiIkE +DnbjjvbdJTYaSlxM +DoCkKvbdRadEkiYk +DncLKvbdjKFgjNYS +EObkKvbdZjShQGaf +EOcKjvbdKfFgaaQu +DoDKjvbdhgJbyVjV +DoCkKvbdwuNFRZMO +DncLKvbdfekzNfgA +DncKjvbduCcVWuno +EPDLKvbdVrNxBdkc +DnbkKvbdRkYeuHLT +DoDLKvbdwuNEpxlO +DoCjjvbdQccAoqDr +EOcKjvbdUGzmkvvF +DncKjvbdEJhKWYKA +EOcLKvbdssSSxyeD +DoCjjvbdVviXvEEg +DnbjjvbdEuxopNKF +EObkKvbdLAkGlbXq +DoCkKvbdZsiJZESn +DoCkKvbdhkeEOUby +DnbkKvbdbhlikGXY +EObkKvbdLBLGmCYR +EPCjjvbdxUleQyLn +DncLKvbdrbGNMGjy +DoCkKvbdddoSBwDK +EPDLKvbdkyTRsYgU +EPDKjvbdehLVqmqH +EPDLKvbdrbFmMHKy +DncLKvbdmbJvwoOV +EOcLKvbdVUNUFkvK +EPDLKvbdrpWPJbvG +DncKjvbdGAnpxizm +EOcKjvbdyzeNqghh +DoDLKvbdhbPDFWpq +DoDLKvbdfVzxQJzs +DoDLKvbdUMWPBVoJ +EOcLKvbdRpTfjFdX +EPCkKvbdpfDeUWBI +EObjjvbdmuUyjirG +EObjjvbdtbbtwWOo +EObkKvbdrylPsAgn +EOcLKvbdmSYtysEJ +DncKjvbdSCDeMJYk +DoCjjvbdTppoUthN +EPDKjvbdVTmUFkuj +EObjjvbdIsZAsNXl +EOcKjvbdSBcdlJYk +DnbkKvbdZQleIleR +DnbjjvbdddoSBvcK +EOcLKvbdNHComPuL +DncKjvbdiCPCdvqR +EOcKjvbdliDspuSB +EObkKvbdzoPpeCkx +DnbjjvbdcJMijevx +DoDKjvbddZxpYZQb +DoDKjvbdkySrSxft +DoDKjvbdyXhiapZk +EPCkKvbdOAIrsirA +EObkKvbdUaBqSqSZ +EPCkKvbdZtJIyESn +DnbkKvbdTvLoitAq +EPCjjvbdyzeNrIJI +EOcKjvbdiCPDEwRR +EPCkKvbdnCJvwoNu +EPCkKvbdIGfzZYXg +DoCkKvbdkySqrxft +DoCjjvbdZdxGzgiC +DncKjvbdzitpPcsU +DncLKvbdbVCHXjsh +EPCkKvbdlhcsqVSB +EPCjjvbdGYtuAcxC +EOcLKvbdjAQGaQHK +EObjjvbdjlakzFGo +EOcLKvbdvwMAvAuu +EPCjjvbdTqQoVUhN +EPCkKvbdeEnrBwCj +DoCkKvbdsCGMkgKy +DnbjjvbdhkeDnVDZ +EPCjjvbdOFDshiLE +DnbjjvbdDwwlUTsl +EPCkKvbdKWUedEgJ +EPDLKvbdsQVnicWG +EPCkKvbdjgflFfOL +EObkKvbdQYmAHTSK +EObkKvbdSPsgJecw +EObjjvbdjAQGaPgK +DoDLKvbdDxXlUUUM +DoCjjvbdegjuqnQg +DnbkKvbddwzTsqez +DncKjvbdxxJJbPyk +EOcKjvbdGKeTChMu +DoCkKvbdeFPSCWcK +EObkKvbddeOrBwDK +EPCkKvbdaNLBsUmH +DoDLKvbdRpTgJedX +EPCkKvbdkySrSxgU +EPCkKvbdVYhTzKoO +EPCjjvbdxxIjCPyk +EPDLKvbdVrOXadkc +EOcLKvbdEOcKjwDE +DncLKvbdmfeYMnGy +EPCkKvbdVAaprprZ +EPCjjvbdFWYpQMjF +DoCkKvbdqrUjmkAm +DoCjjvbdQvmdDLhD +EPDLKvbdeATqNYKG +DnbkKvbdLGGHaaQu +EObjjvbdezvZEhtX +DnbkKvbdjuwNdBww +DncKjvbdJTZAsMwl +EPDKjvbdkxrrTYgU +EPDKjvbdbAudfQQX +DoCkKvbdVUNUGMVj +EPDLKvbdaNLBsUlg +EPDLKvbdDwxLtUUM +EPCjjvbdMgColpUk +EPDLKvbdaogGdLzd +EPDKjvbdzGxlANFX +EPCkKvbdUQqOuUgm +DoDKjvbdEPDKkXCd +EPDKjvbdbsCkTcia +EObjjvbdTAEhhBnd +EPCkKvbdhzVFkpmf +DnbkKvbdaSFcHtGL +DoCjjvbdGBOpxizm +DncLKvbdGYttaEYC +DoDKjvbdqYoHfpdY +EOcKjvbdrouoKCuf +EOcKjvbdiCPDFWqR +DnbjjvbdVAaprqRy +EPCjjvbdePFSjtUS +DnbkKvbdLGGICBRV +EPDLKvbdkMalZeHP +DoDLKvbdJutfEFHJ +DoDKjvbdVBCRSqSZ +EObjjvbdvvlBWBWV +EOcLKvbdFVxpPmJe +DoDLKvbdKfGHaaRV +DnbjjvbdBvzdIdpW +DncKjvbdNsUWHFUp +EPDLKvbdrSVLNjaN +EPDKjvbdgGMZnGgA +DnbkKvbdSBceMIyL +EOcLKvbdSBdFLiYk +EOcLKvbdRyigrcWA +EPDKjvbdaMkBruNH +DncKjvbdUaCRSpqy +DnbjjvbdIMBzmvpk +DnbkKvbdbVCGxKtI +DncLKvbdliDtQuSB +EObkKvbdHDkVjBjK +DncKjvbdmSYtyrci +DnbkKvbdxVMdpxlO +EPCjjvbdRpTfjGDw +EPCkKvbdhancEvpq +EPDLKvbdNsTvHEuQ +DoDKjvbdfekymfgA +EObkKvbdUWLojUBR +EPCjjvbdJXtBgkpp +DoCjjvbdEPCkLXCd +EPCjjvbdZxcjNcLr +DoCjjvbdZsiJYcrn +EPCkKvbdZtIiZDrn +EObkKvbduLxWaUBX +EObkKvbdZdxGzghb +EOcKjvbdkClLRHVH +EOcLKvbdFjdsDINV +DncKjvbdNeEUIiKd +EPCkKvbdYpmFJNFR +EPDKjvbdlhcsptqa +DoDLKvbdnCKWwoOV +EObkKvbdDnbkLXCd +EObkKvbdQwOECkhD +EOcKjvbdUaCRSpqy +EPCjjvbdBcoaVjNG +DnbjjvbdxmrhXsJD +EObjjvbdcImKKewY +DnbkKvbdpyOgfpdY +DnbjjvbdpyOggRDx +EObjjvbdEOcKjwDE +DnbkKvbduCcUwVoP +EOcKjvbdhgKCxuiu +DoDKjvbdiZtelQmf +DoDKjvbdnBjXYOnV +EPDLKvbdczZPwxpb +EPCjjvbdADRwizJQ +EObjjvbdfVzwpJzs +DnbjjvbdxxIiapZk +EPCjjvbdjcLkQfuH +EPCjjvbdcyyQYYqC +DoCkKvbdEuyPpNJe +DncLKvbdcJNJkGWx +DoDKjvbdZoOIdeZj +DoCjjvbdWHxVwgYz +DnbjjvbdeEoRbWbj +DncKjvbdZMSDsnLm +EOcLKvbdbiNKLFvx +DnbkKvbdjcLjqHVH +DnbjjvbdEYXktTtM +EPCjjvbdCSaCsfWr +EOcLKvbdBdQAuimG +EObkKvbdqdFIpOWB +DncLKvbdelevgNKL +EObkKvbdZMRdUNkm +EPCkKvbdrDdiQOVa +DoDLKvbdCWzdJFQW +EObjjvbdxUleQyMO +DncKjvbdBsAcTfXS +EOcKjvbdRMxBxmtz +EOcKjvbdSKyFuGkT +EPCkKvbdEuxooljF +DncLKvbdYgWdAPSi +DoCkKvbdiHJcYvKV +EPCkKvbdZQldiNFR +DncKjvbdjAPgAofj +EObjjvbdkVvmdBxX +DoDLKvbdsBfMlHLZ +DoDLKvbduWNxKQsA +EObjjvbdOTTugEtp +DoCjjvbdIxUBgkqQ +EOcKjvbdqFceUWAh +DnbjjvbdTkunaVoJ +EPDKjvbdiZtfLqOG +DoCjjvbdcImJkGXY +DncLKvbdpstGrSLU +DncLKvbdRpTfjGDw +DnbkKvbdznpREblY +DnbjjvbdqdEhomvB +DncLKvbdIwtBhMRQ +DoDKjvbdhtzFWqtb +EOcKjvbdiBncEwQq +EPDKjvbdZQleJMdq +EOcLKvbdLAkGlaxR +DoCkKvbdZsiIyDsO +EObkKvbdeOdsKssr +DnbjjvbdJcKCpjDY +EPDLKvbdSBdElIyL +EPCkKvbdyOTHwrhc +EPDLKvbdGLEsDIMu +EPCjjvbdmJETqVRa +DncKjvbdKDJbqJbx +EOcKjvbdbsCkTdKB +EOcKjvbduDCuXVno +EOcKjvbdrXPlDIxq +EOcKjvbdqlyixkhJ +EObjjvbdRkYfUgLT +EPDLKvbdLAkGmCXq +DnbjjvbdHgGzYxXg +DncKjvbdpstHSSKt +DoCkKvbdqvolCiYq +DoCkKvbdmgFYNOHZ +DnbkKvbdqGDeTvBI +DoDLKvbdyzeNrHhh +DnbkKvbdwzHefXeS +DoDKjvbdbiMjLGXY +DnbkKvbdTulQKTaR +DnbjjvbdsPunicVf +DncKjvbdqvpLcIyR +DncLKvbdOFEThhkE +EOcKjvbdZshhxdSn +DncKjvbdpyPHfpdY +DoDLKvbdNGcPmQUk +DoCkKvbdVgwvXfxz +DoCjjvbdCgLegAzc +DnbjjvbdauCGxLTh +DoDKjvbdqFceTvBI +DoCjjvbduMYXAsaX +EPCkKvbdrSVKmkAm +EObkKvbdOYOuzcnU +DncKjvbdYkqctNlN +DncKjvbdSZjHrcWA +DoCjjvbdrEFJQNua +EPCjjvbdRosfjFcw +EObkKvbdZoNiFEyj +EPDKjvbdVgwvXfxz +DoDLKvbdhbPCdvqR +DncKjvbdqvokcIyR +DnbjjvbdpssfqqkU +DncLKvbdzoPpdbkx +DnbjjvbduaDySoFI +EOcKjvbdEASImZwX +DncKjvbdbrcKtDjB +DoCjjvbdQccBQQdS +DoCkKvbdDigjVwjA +DnbkKvbdbVBfwkUI +EOcKjvbdIsYaSlxM +DoDLKvbdKVtedEgJ +EPCjjvbdIryArlxM +DncKjvbdpeceTuaI +EObkKvbdZshiYdSn +DncLKvbdZtIhyESn +DnbjjvbdOYOuzcnU +DoDKjvbdUxhTyjoO +EObjjvbdTppoVVHm +DncKjvbdrWolCiYq +DoDLKvbdNVSrKmAX +EObkKvbdiGicZWKV +DoDKjvbduVmwipsA +EPCjjvbdNPwqVnHT +EObjjvbdelewGmJk +EOcLKvbdgGLzNgHA +DoDKjvbdcJNJjfWx +DoCkKvbdyOTHwriD +EObjjvbdEzspeLcJ +DnbjjvbdjhHLeenL +DncKjvbdOStWHFVQ +EOcLKvbdsZlPsBHn +EPDLKvbdtcCuWuno +DnbkKvbdULunaVni +EPDKjvbdJqZdnfNe +EOcKjvbdqwPkcIxq +EObjjvbdrJAJeNOe +DnbjjvbdRECaPpdS +EPCjjvbdpfEEsvBI +EPDLKvbdIsZArmYM +EPDLKvbdJYUCILpp +EOcLKvbdYlSDtNlN +EPCjjvbdJYTbHkpp +EPDKjvbdYzbfSJvZ +EPCjjvbdRaceMJYk +EObjjvbdZisHofaf +DnbkKvbdRbEElIyL +EOcLKvbdijFhKNXr +EOcKjvbdRXNdDMID +DncLKvbdbiNKLGXY +DoDLKvbdlZSrSyHU +EObkKvbdqZPIHRDx +DoDKjvbdnPzYujxb +EObkKvbdnHEwlmfy +EObkKvbdCWzdIePv +EObkKvbdqlyiyLgi +EPCjjvbdkySqryHU +EObkKvbdcImKKevx +DncKjvbdEASJMzWw +DncKjvbdRkYfUfkT +EPCjjvbdqYoIGpcx +DncKjvbdGckWKBjK +EPCjjvbdYTLaNUOx +EPDKjvbdwtleRZMO +EObkKvbdGFiqnJUR +DncLKvbdlhdURVRa +EObjjvbdqlzJxkhJ +DncLKvbdFaPQyJzm +EPCkKvbdpssgRrLU +EObjjvbdiCOcFXRR +DncKjvbdqTtGqrLU +EPCjjvbdsCFlkgLZ +EOcKjvbduWOXiqTA +EOcKjvbdkClKqGuH +EPCjjvbdMowpvOGs +EPCkKvbdxrmhmRag +DoCjjvbdiUzFXRuC +EOcLKvbdUMWPAvOi +DoDLKvbdmfdwlmgZ +EPCjjvbdehKurNpg +EOcLKvbdBsAcTevr +EPCjjvbdZjTIPgBf +EObjjvbdPIAXyAZB +EPCjjvbdCDoaVjNG +DncKjvbdrpVnicVf +DoDKjvbdlZTSSxgU +DncKjvbdGZVVAdYC +EPDLKvbdsCGMkfjy +EPCjjvbdSPsfjFdX +DoCjjvbdJXsbIMQp +DncKjvbdzeZnzdyp +DnbkKvbdlYsRsYft +DncKjvbdbiMjLFwY +EPDKjvbdyOShYSiD +DoCkKvbdOTTufduQ +EPDLKvbdVwJYVcdg +DoCkKvbdGFiqnJTq +EOcLKvbdUslselWK +EObjjvbdkxsSSyHU +EOcLKvbdxsNhmSBg +DnbjjvbdqqtkOLAm +DnbjjvbdeFPRawDK +DnbkKvbdLZQirzuG +EPCkKvbdFWYpPlie +EObkKvbdrWpMCiYq +EOcKjvbdiiehKNXr +EPDKjvbdEvYopNJe +EPCkKvbdxrmhmSCH +DoCkKvbdptUHSRkU +EOcKjvbdKCjDRJcY +DoDLKvbdrMzKYkgi +DoCjjvbdZLrDtNkm +DoCkKvbdqYnggQcx +DnbkKvbdrovOibvG +DncKjvbdADRwizIp +EOcLKvbdZisHpHCG +EPCjjvbdZRNFImFR +EPDKjvbdVwIxVceH +EOcKjvbdrDeJQNua +EPCkKvbdIxTaglQp +DncKjvbdGFiqmiUR +EPCjjvbdVwJXvEEg +DnbkKvbdwuMeRZMO +EPCkKvbdZRNFImFR +EPCkKvbdnHEwlmgZ +EPDKjvbdLYqKSzuG +DoDKjvbdZsiJYdTO +DoDLKvbdShyjRAAl +DoDKjvbdRadFLiYk +DnbkKvbdjbkjpgUg +EObkKvbdUaBpsRRy +EOcKjvbdehKuqnRH +EObkKvbdDwxMUTsl +EOcKjvbdptUHSSKt +EPDKjvbdHEKuibJj +EOcKjvbdxxIjBpZk +EObkKvbdelewGmJk +DncLKvbdTvLpKUAq +EPCjjvbdGLErbhNV +DncLKvbdfHjvRmqH +DnbjjvbdkMakyeHP +EPDKjvbdJcKCpjDY +DoCkKvbdRECaPpcr +EOcLKvbdmgFYMmgZ +EObjjvbdZRMdiMeR +DoCjjvbdYzcFqivZ +DoCkKvbdeOeTKtTr +EPCkKvbdXFxytAPT +DncLKvbdZnnJEdzK +DncLKvbdhtyeWrUb +EOcKjvbdEJgivXjA +EPDLKvbdssSTYyeD +EPDLKvbdLBLGmCXq +DnbkKvbdKeegbApu +DoDLKvbdJYUBhLqQ +EPDKjvbdwNWANDdm +DoCjjvbdKfGIBaRV +DoCjjvbdbhljLFwY +DncLKvbdmgFXmNgZ +DoDKjvbdZRMeJNFR +DoCkKvbdWeyZtAOs +DoCkKvbdbiNKLFvx +EPDKjvbdUsmTfMVj +EPCkKvbdijFgjMwr +DnbkKvbdbsCjtDia +DnbjjvbdZQleJNFR +DoDLKvbdNQXqWNfs +EOcLKvbdULunaVoJ +DncLKvbdrEEhpOVa +DncLKvbdRyigsCvA +DoCkKvbdVwJYWEEg +DncLKvbdjKGIKMwr +EObkKvbdrEFIpNvB +DoCjjvbdGLEsDINV +EOcLKvbdJSyArlxM +EPCjjvbdTJZiqABM +DncLKvbdCTAbsewS +DnbjjvbdZjTIPfaf +EPCjjvbdbPfgELzd +DnbjjvbdLBLHMbXq +EPCjjvbdqiAKFMoF +DnbkKvbdIBlZdzAD +EPDLKvbdyTNiNRag +DoDLKvbdZjSgogCG +EPCjjvbdjAPgAofj +EPCjjvbdxmrgxTJD +EObjjvbdSPsgKGEX +EObkKvbdRWnDblHc +DnbjjvbdZQmFImFR +DoCjjvbdjuwODaww +EOcLKvbdVviXvEFH +EPCjjvbdcImJkGXY +EPDKjvbdVAbQrqSZ +DoCjjvbdWWiXudFH +EPDKjvbdapGfdLzd +EObkKvbdQwOEDMID +EPCjjvbdKDKCqKCx +DncKjvbdJvUfEEgJ +EObkKvbdDoDLKvcE +EOcKjvbdqwPkbhyR +EObjjvbdyTOJNSCH +EObkKvbdZsiIxdTO +DoCjjvbdaSFbhTfL +EOcKjvbdUslsekvK +DoDKjvbdehLWSORH +EPCkKvbdBsBDTfWr +DoCkKvbdMfbpNQVL +DoCkKvbdezvZFJUX +EObjjvbdJYUBhMRQ +DncKjvbdlhcsptqa +DoCkKvbdiZtfMQnG +EObkKvbdZRMdhleR +EPDLKvbdkySrSxgU +DoCkKvbdYlSDsmkm +DnbkKvbdkNBkzEfo +EPDLKvbdyYJKCPzL +EOcKjvbdqwPkbiZR +DncLKvbdqdFJQOWB +DoDKjvbdFyUtaDxC +DnbjjvbdZyDinDMS +EOcKjvbdqrVKnKaN +DoCjjvbdMgDPlotk +EPCjjvbdUVlPitBR +DoDLKvbdbsCkTcjB +EPCjjvbdnGdwlnGy +DnbkKvbdapGfdLzd +EPDKjvbddndsKtTr +DncLKvbdsrrTZZeD +EObkKvbdqdFJQOWB +DncKjvbdRadFLhxk +DnbkKvbdfILWSORH +DnbkKvbdqZOggQcx +EPDKjvbdCDpAujMf +EObjjvbdxsOImSBg +DoDKjvbdrSUjmjaN +EObkKvbdrMyjYkhJ +EObkKvbdANHySvzY +EObkKvbdgGLynGgA +DoDLKvbdNdcshiKd +EObjjvbdePErkTtS +EPCkKvbdSCEFLhxk +DoDKjvbdIxUBhLqQ +EPCkKvbdVvhxWDdg +EOcLKvbdKfGHbBQu +DoCjjvbdajlFoNcA +DoCkKvbdQdDAopdS +DoDKjvbdSBceMJZL +DoDKjvbdOStWGdtp +DoCjjvbdGdLWKBij +DnbkKvbdvOszpjnt +DncLKvbdUVlPjTaR +DoDLKvbdliDsptrB +EOcKjvbdZisHpHCG +DoDKjvbdkVwODaxX +DoDLKvbdfVzwpJzs +DnbkKvbdDjIKWYKA +EObkKvbdrJAJdmPF +EObjjvbdeATpmYJf +DnbkKvbdQmYByOUz +EPDLKvbdxmrhXsJD +EPDLKvbdCJLBjiGK +DoCkKvbdYpmFJMeR +DoDKjvbdXnRAXuWU +DoDKjvbdiMFDmtby +DnbkKvbddZyQYZQb +DncLKvbdZtIiYdSn +EObjjvbdwMvANDdm +EPDLKvbdIwsbHkqQ +DncKjvbdURQntthN +EObkKvbdTqROttgm +EPCjjvbdTkvOaVni +EOcLKvbdfNFwHNKL +EObkKvbdjgflFfOL +EObjjvbdUQqOuUhN +DncLKvbdegjurNqH +EPDLKvbdxUmEqZMO +DoDKjvbdGcjvKBjK +DoDKjvbdVTltFkuj +DnbkKvbdLYqKSztf +DoDKjvbdUyHtZkOn +EPDLKvbdvAcyTOdh +DncKjvbdqFcdsvAh +DncLKvbdrbFmMHKy +EOcKjvbdYlRdTnLm +DoCjjvbdEASJMzXX +EObkKvbdMoxQvNfs +EOcKjvbdiHJcYujV +DnbjjvbdvAcyTPEh +DoDLKvbdGQASwGfZ +EObkKvbdMoxRVnHT +EObkKvbdhgJcYvJu +DnbjjvbduWOXipsA +DoDLKvbdQcbaQQdS +EObkKvbdUsltFkvK +EPDKjvbdKyQirzuG +EPCjjvbdmJDtQuSB +EObkKvbdXrkaMsoY +EOcKjvbdrEFIpOVa +EPDKjvbdVqmwadkc +EOcKjvbdqYoIGqDx +EObkKvbdtbbtwWOo +EPCkKvbdSKxfUfkT +EPCkKvbdmJDsqUrB +DncKjvbdhaoCeWpq +EObjjvbdFxuVAdYC +EPCkKvbdqFcdsvBI +EPDLKvbdOTUWGeVQ +EPCkKvbdlhdUQtrB +DoDKjvbdCJLCLJGK +EPDKjvbdMgCpMotk +DnbjjvbdrbFlkgLZ +DoDKjvbdqBJFAWhE +EPCjjvbdpyPHfqDx +EOcKjvbdTlVoBVni +EPCjjvbdrRtkNkBN +EPCkKvbdWWhwuceH +EPDKjvbdcImKKewY +EOcKjvbdYSlBNToY +EObkKvbdZRMeIldq +EPDLKvbdMoxRWNgT +EObjjvbdMIbMQxAS +EPCjjvbdQdDBQQdS +EObkKvbddZyPwxqC +EOcLKvbdACrXiyiQ +EPDLKvbdcSbkUEJa +DncLKvbdTkunaWPJ +DnbjjvbdvBEYrndh +EObjjvbdmIctQuRa +DncKjvbdiUydvqtb +DoCjjvbdhkdcnUby +EOcKjvbdePFTLTsr +EOcLKvbdiHJbxujV +EObjjvbdZsiJZESn +EOcKjvbdpxoHfqEY +EPDKjvbdFyUuBDwb +DoDLKvbdBiLBkJGK +EPCkKvbdliDtQuRa +DoDKjvbdhbOcEwQq +DncLKvbdRosgJfDw +EObjjvbdrzMQSaIO +EObkKvbdUsmTfMVj +EOcKjvbdWXIxWEFH +EPCjjvbdcTCjtDjB +EObkKvbdbBVeGQPw +EOcLKvbdaSGDHtFk +DoDLKvbdqFdFUVaI +EPCkKvbdxxIjBozL +DncLKvbdNddUIiLE +EObjjvbduMYWaUAw +EPCkKvbdWWiXvDdg +EObjjvbdJXsbILqQ +DnbkKvbdDnbjjwCd +DnbkKvbdxUldqZMO +DoCjjvbdKyRKSztf +DncLKvbdLFehBaQu +EPDLKvbdjvXNdBww +EOcLKvbduaEZTPFI +DoCkKvbdfMevfmKL +EPCkKvbdpxoIGqEY +EPCkKvbdKWUecdgJ +EObkKvbdmbJwYOmu +EPCkKvbdIsZArmYM +DnbjjvbdxLXDgzyf +DncLKvbdEvYopMjF +DncLKvbdmJETqVRa +DnbkKvbdrouoKDWG +EPDLKvbdbVCGwkTh +DoDKjvbdZirhPgCG +EPDKjvbdTvMQKUAq +DnbkKvbdLrWlzVQz +EOcLKvbdrEEiPmua +DnbjjvbdczZQXyRC +DncKjvbdnUtzKjSG +EPCjjvbdkNCLzFHP +DncKjvbdZyEKNbkr +EObkKvbdJuuFdEgJ +DncLKvbduCbuXWPP +EPCjjvbdyNrhXriD +DnbkKvbdIxTaglQp +EPCjjvbdJvVFceHJ +EPCkKvbdVBBprqSZ +EOcKjvbdkxrqsYgU +EPCjjvbdGLFSbhMu +EObjjvbdnPzZWLYb +EObkKvbdjblLRGuH +DoDLKvbduaDyTPFI +EPCjjvbdiifIJmXr +EObkKvbdYkqctOMN +EPCkKvbdelfXHMjL +EPDLKvbdeFOrCWbj +EObjjvbdeUAUATNW +EPCjjvbdWRmxBeMD +DoCjjvbdZxcinDMS +EOcLKvbdWRmwbElD +DoDLKvbdpssfrSLU +DncLKvbdQccApRES +DoDKjvbdGdKujBij +DoDKjvbdZLqdTmlN +DoCjjvbdbiNKLGXY +DoCjjvbdVZITzKoO +DoCkKvbdsPuoKCvG +EPDKjvbdNGbomQVL +DnbkKvbdkIHMGFnL +EPDKjvbdvPTzpjoU +EOcKjvbdczZPxZQb +DncKjvbdliEURUrB +DnbkKvbdGZUtaDxC +EPCjjvbdrMyjZLhJ +EPCjjvbdTulPjTaR +DoCkKvbdZeYGzhJC +DncLKvbdwygefYEr +DnbjjvbdehLVrOQg +DnbjjvbdZxcjNblS +DoCjjvbdSLYetgKs +EPCkKvbdVAbQrpqy +EPCjjvbdtTSTZZdc +DnbkKvbdSCEFMIyL +DoDKjvbdrDeJPmvB +EOcLKvbduDDVXVno +DoDLKvbdZdxGzhIb +EObkKvbdhgJbxujV +DncLKvbdlYsRsZHU +DoDLKvbdhzUelQmf +EObkKvbdWWhwvDeH +EPCjjvbdjgfkfFmk +EObkKvbdzaAPHGal +DoDLKvbdEPDLLXDE +DoCjjvbdTukpKTaR +EOcKjvbdhaoCeWpq +EPDKjvbdwjvdHzzG +EPDLKvbdJTZBTNYM +DoDLKvbdRECaPqDr +DncKjvbdjhGkfGNk +EObkKvbdjhGkfFmk +DncLKvbdqlyixkhJ +EObkKvbdjEkHUoAO +EPCkKvbdcasMrAUN +EObjjvbdhzUfLqOG +DoCkKvbdEvYopNKF +EPCjjvbdjuwODaxX +DncLKvbddiirWUzn +EObkKvbdOStVfduQ +DnbjjvbdypnmIjXA +DnbjjvbdRWnEClHc +EOcLKvbdbhljLFvx +EPDLKvbdJXsaglRQ +EObkKvbdhzUfLqOG +EObkKvbdnPyxujyC +DoDKjvbdBiKajiFj +DoDKjvbdZjTHpHBf +EPCjjvbdaSFcITek +EObjjvbdYzcFqiuy +DncLKvbdqdFIpNvB +DoDKjvbdLYqJrzuG +DoDLKvbdVwJXucdg +DnbjjvbdhbObdvqR +DoCkKvbdCEQBWJlf +DoDLKvbdSCDdlJYk +EPDLKvbdZyEJnCkr +DoDKjvbdvAcyTOeI +DoDKjvbdkIHLfFmk +EPCjjvbduaEYroFI +DnbkKvbdjblKpgUg +EOcKjvbdwygefYFS +EOcKjvbdliDsqUqa +DnbjjvbdjcMLRGtg +EObkKvbdRbEElJYk +EPCkKvbdqrUkNjaN +EOcLKvbdRotGifDw +DnbkKvbdUsmUGLuj +DoCjjvbdeKJqvUzn +EPDKjvbdQwNdClHc +EOcLKvbdcScLTcjB +DoCjjvbdvBDxroEh +DoDLKvbdIxUBglQp +EPDLKvbdfVzxQJzs +DncLKvbdqlzKYlIJ +DoDKjvbdaNLCSuMg +EOcKjvbdwjwDgzyf +EPDKjvbdIxTaglRQ +DoDKjvbdVTltGLuj +DoCkKvbdiMFENuDZ +EOcLKvbdZyEJnDMS +DnbkKvbdiBoCeXRR +EPCkKvbdbiMijewY +EOcKjvbdmttzLJqf +DncKjvbdYTLaMtOx +EPCjjvbdfIKuqmqH +DoCjjvbdBdQBVjNG +EObkKvbdieLGuPAO +EPDLKvbdsZlQSaIO +DnbkKvbdEztQeMDJ +EPCjjvbdIjEAJpHE +EOcLKvbdfILWRmpg +EPCjjvbdZyDinDLr +DncKjvbdLGGIBaRV +DncLKvbdmozZWLZC +DoCkKvbdlZSrSxft +EOcLKvbdFjdrcINV +EOcKjvbdQvnDblHc +DoCkKvbdqUUHRqkU +EPDKjvbdnBjWwnmu +DoCjjvbdZxcjNbkr +DncKjvbdZisIQHCG +DoCkKvbdJcJcRJbx +EPDLKvbdlhdUQtqa +DnbkKvbdrzLpSaHn +DoDKjvbdziuPpDrt +EPDKjvbdEYXlTtUM +EObkKvbdqdFIpOVa +DncKjvbdpxnhHQdY +DnbkKvbdLhakqYAS +EPCkKvbdrRtkNkBN +EObkKvbdqrVKmjaN +EOcKjvbdxUldqZMO +EOcKjvbdrbFllHKy +DoCkKvbdySmhlrBg +EPCkKvbdkxrqsYgU +EPCkKvbdZLqcsnMN +DncKjvbdFpATXHFy +EPDLKvbdZRMdiMeR +EPDLKvbdRNXbYmtz +DoCkKvbdpyPIGqEY +DoDLKvbdKaKfmCYR +EPDLKvbdrylPsBIO +EObjjvbdUQqOuVHm +EPCkKvbdezvZFItX +EOcKjvbdZirhQHCG +DoDKjvbdePFSjssr +EOcKjvbdCTAcTfXS +EOcKjvbdkxsRsYft +EPDLKvbdQwODcMHc +DoDKjvbdwuNFRZMO +EPCjjvbdEuyPomKF +DoCkKvbdpxnhGpcx +DncKjvbdiVZeWrUb +EOcKjvbdrEEiPmvB +EOcLKvbdZxdJnDLr +EObjjvbdUtNUFkvK +DoDLKvbdZQmFIldq +EObjjvbdnCJvwnmu +EPCkKvbdRWmccLgc +DnbkKvbdnUtykJqf +DnbkKvbdVBBqSpqy +EPCkKvbdZoOIddyj +DnbkKvbdZQldiNFR +DncLKvbdmRyVZsDi +DoCjjvbdcasMrATm +EOcLKvbdtbbtvuno +DoDLKvbdZtJJYdSn +DnbkKvbdGKeTDHlu +DoCkKvbdZjTHpGbG +EOcKjvbdHDjvKCKK +EObjjvbdddnqbXCj +EObkKvbdlZTSTYgU +EPCjjvbdqqtjmkBN +EObjjvbdtAGqIAAr +EObkKvbdrRtjmjaN +DnbjjvbdMRwMytpz +EPCkKvbdsQWPJbuf +DoDKjvbdqFceUWBI +DoCkKvbdnBjWxPNu +DoDLKvbdiUzFXRuC +EObkKvbdQccBPqES +DnbjjvbdOFDtIiLE +EPDKjvbdYlRcsnMN +DncKjvbdFfJrNhsq +DoCkKvbdsCFmMHKy +EPDLKvbdYkrETnMN +DoCjjvbdYNqAXuWU +EPDKjvbdrovPKDWG +DoDLKvbdbKlGOmcA +DoCkKvbdOStWHFVQ +EObjjvbdhbObeXQq +EPCjjvbdeEnrBwDK +DoDLKvbdrbFmMGkZ +DncKjvbdxZhGGYFS +EPDKjvbdbrbkTdKB +EPDKjvbdraellGkZ +EPCkKvbdssSTZZeD +EPDKjvbdDjHiuxKA +DoCjjvbdzoPqFDMY +EPCjjvbdlAlnmALA +DoDKjvbdmtuZjjRf +DoDKjvbdFpASvfey +DoCkKvbdjlakyeGo +DoDKjvbdxnSgxTIc +EPCjjvbdxZhFfXeS +EPCkKvbdqcdiPnVa +EOcLKvbdmfeYMnHZ +DoDLKvbduCbuWvOo +DoDKjvbdmIcsqUqa +EPDKjvbdzoQQdblY +DoDLKvbdRNXayOUz +DnbjjvbdrJAKFNOe +DnbjjvbdZLrEUOMN +EOcKjvbdwygeexEr +EPCkKvbdbVBfwjtI +EObkKvbdKDKDRJbx +DoCkKvbdGckWKBij +EOcKjvbdzjVQPdSt +EPDLKvbdqlzKYkhJ +DnbjjvbdajkennDA +DoDLKvbdRzJgsCvA +EObjjvbdehKuqmqH +DncKjvbdajlFnnDA +DnbjjvbdjEkHUoAO +DoCjjvbdFVyPomKF +DoCkKvbdJcJbpjCx +DnbkKvbdRaceLiZL +EPDKjvbdeEnrBwDK +DoDLKvbdxKvdHzyf +DoCkKvbdSPtHKFcw +EObkKvbdjhHMGGOL +EOcLKvbdGGJqnItR +DoCjjvbdnGdxNNgZ +DoDKjvbdbKkfOmcA +DnbjjvbdelewHNKL +EPCkKvbdcSbjsdJa +EPCkKvbdTAEhgbOd +DncLKvbdUslselVj +DnbjjvbdVrOYBeMD +EObjjvbdEzspeMDJ +EPCjjvbdcTDLTcjB +EPDLKvbdsPvPJbuf +EOcKjvbdqGEFUWBI +EPDKjvbdVgxWYGxz +EOcLKvbdSPtGjGDw +EObkKvbdGckVibJj +DoDLKvbdeEoSCWcK +EPCkKvbdQvmdClID +DncLKvbdhytelROG +EPCkKvbdeXzTtSFz +EPCkKvbdrXQMDIxq +EObkKvbdtlXvaUAw +DnbkKvbdiMFDmtcZ +EPDLKvbdJqZeOfNe +EPDLKvbdmIdUQtrB +DoDKjvbdVTltGLvK +DncLKvbdZRNEhleR +EPDKjvbdjlakydfo +DnbjjvbdFpASvfey +EPCkKvbdkySrTYft +EOcLKvbdVUMtGMVj +EPDLKvbdmRyUysDi +EPCkKvbdGKeScHlu +EObjjvbdczZPwyRC +EPDLKvbdVYhUZkOn +DncLKvbdJbibqKDY +EPDLKvbdfekzNfgA +EObkKvbdKQydoGOF +EObkKvbdVgwvXfxz +DncLKvbdQdDApQcr +DncLKvbdGFjRnJUR +DncKjvbdjgflFemk +DoDKjvbdlhctRVSB +DncLKvbdZLqctOLm +DncKjvbdfSAvzlCo +EPDKjvbdZRMeIleR +EObjjvbdZRMeJMdq +EOcKjvbdMuTSKmAX +DncKjvbdqYngfpdY +DnbkKvbdxrmiMqbH +EObjjvbdbPgGckzd +DoCkKvbdpstGqqkU +DncLKvbdmJDsqVSB +EPDLKvbdtunYKQsA +EObkKvbdDnbkKwCd +EPDLKvbdEXwkstUM +DoDKjvbdrRtkNkBN +DncLKvbdIwtCIMQp +EPDLKvbdZQmEhmEq +DnbkKvbdxmrhYTIc +DoCjjvbdCSaDUGWr +EPCkKvbdatagXkUI +DncLKvbdEPDKkWcE +DncKjvbdZjShPgBf +EPDKjvbdHDkVjCJj +DoCjjvbdsrrTYzEc +EObjjvbdhlEcnUby +DnbjjvbdemFvfmKL +EObkKvbdlhcsqUqa +DoCkKvbdZtIiYdTO +EObkKvbdEXwlTssl +DoDKjvbdhaoCdvqR +EObkKvbdliEURUrB +DoDLKvbdEYXkstTl +DncKjvbdFkEsDINV +DoDKjvbdFkErcHmV +DoDLKvbdKCjCpjDY +EPCjjvbdjJegjMxS +DnbkKvbdnCKWwnmu +DnbjjvbdqwQLbiYq +DoDLKvbdSZigsDWA +EObjjvbduVnYKRTA +EOcKjvbdTlWOaVoJ +DnbjjvbdSCDeMJYk +DnbkKvbdQvmdClID +EPCkKvbdziuQPdTU +EOcLKvbdhficZWJu +EOcKjvbdZLqdTmkm +DoDKjvbdcImKKevx +EOcLKvbdGFirOJUR +EObkKvbdREDApRES +DoDKjvbdHELWKBij +EOcKjvbdrSVLNkBN +EOcKjvbdBdQBWJlf +DoCjjvbdFpATXHGZ +DnbjjvbdqZOhGpdY +EPDLKvbdCSaDUGWr +DoDLKvbdrpWPJcWG +DnbjjvbdZsiJYdTO +EPDKjvbdJvVGEFGi +EPCkKvbdmIctRVSB +DncKjvbdBiLCKhfK +DoCkKvbdZisIQGbG +DoCjjvbduWNwjQsA +EOcLKvbdiHKCyVjV +EPCjjvbdlZSrTZGt +EObjjvbdNPxRWNgT +DncKjvbdeAURNXif +DncLKvbdOStWGeVQ +DoCjjvbdJvUeceGi +DoDKjvbdXsMBMsnx +EPDKjvbdGLFSbhMu +EPDLKvbdEvZPolie +EOcKjvbdrRtjnLBN +EPDKjvbdyOTHxTJD +EPDKjvbdmajWwnmu +EPCjjvbdrNZjZLhJ +DncKjvbdajlFoODA +DoDKjvbdrEFIpOVa +DnbkKvbdpedEtWBI +DncKjvbdqwQMChyR +DnbjjvbdnCKWwnnV +DoCjjvbdNUsRkNAX +EOcLKvbdULvPBWPJ +DncLKvbdjlalZdfo +EPDKjvbdjJfHjNYS +DoDKjvbdPxmAHTSK +DnbkKvbdmIctQtqa +EObjjvbdnHFXmNfy +EPCkKvbdqlzJyLhJ +DnbjjvbdVqnYCElD +EPDKjvbdqTsgRqkU +EPCjjvbdADSYKZhp +EPDLKvbdEvZPoljF +DoCkKvbdLFfICBRV +EOcLKvbdZRNFJNFR +EPDKjvbdpedFUWBI +EPDKjvbdVwJYVceH +DoCjjvbdGYtuBDwb +DoCjjvbdVYgtZjoO +DncKjvbdQccApQcr +EOcLKvbdWWiYWDdg +DncKjvbdyTOJNSBg +DnbjjvbdbAueFpQX +DnbkKvbdiUydwSUb +DoDKjvbdKVtfDeHJ +DoDKjvbdEObjkXCd +EOcKjvbdqlyjYlHi +EOcKjvbdfRaWzlCo +EObjjvbdRWmcblID +DoDLKvbdCDpAvKMf +DncLKvbdmuVZjjSG +EPDLKvbdkaMnmALA +EPCkKvbdcSbkTdKB +DnbjjvbdZtJIyESn +EPCkKvbdQvmccMHc +DncLKvbdfHjvRmpg +DoCjjvbdVvhwvEEg +EPCjjvbdXrkaNTnx +DnbkKvbdGFirNiUR +EObkKvbdZLrDsnLm +EObkKvbdySnJNRbH +DncKjvbdaMkBsUmH +EPCkKvbdqGEFUWBI +EObjjvbdmajXYOnV +DnbkKvbdHELWKBjK +EPDKjvbdWSOYCFLc +DncLKvbdehKurNqH +EPDLKvbdSZjIScWA +DncKjvbdZQldiNEq +DncLKvbdVwIwvEEg +DnbjjvbdauCGxKsh +DnbkKvbdKefHbApu +DoCkKvbdssSTYyeD +DnbjjvbdSPsgJfEX +DoCkKvbdeKKRvUzn +DoDLKvbdiMEcnVCy +DoDLKvbdoAKzsgcn +DoDKjvbdDoDKjvbd +DncKjvbdFWYopMie +EPDLKvbdRNXaxmtz +EOcLKvbdKefHaaRV +EPDKjvbderAvzkbo +EObjjvbdzoQREcMY +DnbkKvbdijFgjMwr +EObjjvbdhbObdvqR +EPCkKvbdySmiMqbH +EObkKvbdyzeOSIIh +DnbkKvbdjcLkRHUg +DoDLKvbdJpydoGNe +DoDKjvbdwXMBWBWV +EObkKvbdsBfMkgKy +DnbkKvbdYkqdTnMN +EPCjjvbdEPDLLWbd +EObkKvbdDwxLtUUM +DncKjvbdNrtVgFUp +EPDKjvbdZQleJNFR +EPDKjvbdJKEAKPfd +DnbjjvbdhgKCxvJu +EObkKvbdLAkHMbXq +EPDKjvbdhancEvqR +DoCjjvbdNsUWHEuQ +DnbkKvbdZjTHofaf +EPCjjvbdrDdiQOVa +EPDKjvbdkMbLzEgP +EPCkKvbdZoOJFEyj +EPCkKvbdADRxJyhp +EObjjvbdaSGCgsfL +DnbjjvbdJbjDQibx +EPCjjvbdpfEEtWBI +EOcLKvbdZxdJmblS +EPCkKvbdRpTgKGEX +DoCjjvbdzRPNIiwA +EObkKvbdzoPpeClY +EObjjvbdeFOrBwDK +DoCkKvbdOTTvHEtp +DnbjjvbdGQATWgFy +EPCjjvbdEvZQQNJe +EObkKvbdjvWnECYX +DoDLKvbdyTOIlqag +DnbkKvbdEASJNZvw +EOcKjvbdsZkosBHn +DoDLKvbdtSqsYyeD +DncKjvbdqlyixkgi +EPCjjvbdTppnuVHm +DncKjvbdatbHYKsh +DoCkKvbduVmwjQsA +EPCkKvbdvAcxsOeI +EObkKvbdRjyFuHLT +EObjjvbdTukoitAq +EOcLKvbdkySqrxft +EObjjvbdQccBPpdS +DoDKjvbdffLzNfgA +DoDKjvbdiCOcEvqR +DncKjvbdIBkzEzAD +EObjjvbdVZHsyjoO +EOcLKvbdZoNheEzK +DnbkKvbdsZkpTAhO +DnbjjvbdqFdEtVaI +DnbkKvbdIGfzZXwg +EPDLKvbdlrZVZsEJ +EObjjvbdBcpAvJmG +DnbjjvbdtSqsYzFD +EPDLKvbdJJdAJogE +DncKjvbdxVMdpyMO +EPCjjvbdQwOEDLhD +DoCjjvbdmgFXmNgZ +DoDLKvbdjEkGuPAO +EPCjjvbdACrXjZiQ +DoCjjvbdZMRdTmlN +DncLKvbdiLeDnVDZ +EObjjvbdVAaprpqy +DoDLKvbdRjyFuGjs +DnbjjvbdVAbQrprZ +EObkKvbdSZjHrcWA +EPDKjvbdVrOYBeMD +EPDLKvbdDwxMUTsl +EPDKjvbdRadElIxk +DnbjjvbdmozZWKyC +DoDLKvbdptTgRrKt +EPCjjvbdatagXkUI +DncLKvbdZLqcsnMN +DoDLKvbdfNFwGmJk +EObkKvbdqTsfrSKt +DncLKvbdZjTHpGbG +DoCjjvbduWNwipsA +EPDKjvbdauCGwkTh +DncLKvbdKVuGEFGi +EObjjvbdZirhPfaf +DoDKjvbdxKvcgzyf +DnbkKvbdxsNhlrCH +DoCkKvbdBsBDUGWr +DncKjvbdfMfXHNJk +DnbjjvbdOSsugFVQ +DncKjvbdZisIPfaf +DnbjjvbdZHXEAOsJ +DnbjjvbdLZRJrzuG +EObkKvbdwuNFQxlO +DncKjvbddxZtURez +EPCkKvbdxrmiNSCH +DoDKjvbdiUydwSVC +EObjjvbdiifIJlwr +DncLKvbdssSSxyeD +EPDKjvbdOEcsiJLE +EOcKjvbdySnIlrBg +EPCkKvbddZyQYZRC +DnbjjvbdWXJXudEg +DoDLKvbdKaLHNCXq +DoDKjvbdGGKRmiTq +DnbkKvbdlrYtyrdJ +EPDKjvbdhtzEvrVC +EObkKvbddZyQYYqC +DoDLKvbdhaoCdwRR +EPCkKvbdxLWdHzyf +DoDKjvbdySmhmRbH +DnbkKvbdZLqcsmlN +EObjjvbdZtJIxdTO +DoDKjvbdDwwksssl +EPDKjvbdFyVVAdXb +DoCkKvbdUtNUFkvK +EPDLKvbdxmsIXsIc +EPDLKvbdUsmUFkuj +EOcKjvbdGKdsDHlu +EOcKjvbdACqwjZiQ +EPDKjvbdFpASwHGZ +DoCkKvbdGZUtaDxC +DncKjvbdmSZVZsEJ +DoCjjvbdJbicRKCx +DncLKvbdTvMQJsaR +DoCjjvbdNeDtJJKd +EPCjjvbdnPzYvKxb +DoDLKvbdyTNhlrCH +EPDKjvbdRosgJecw +EObkKvbdTAEiICOd +EOcKjvbdapHHDkzd +DoCkKvbdjlakzFGo +DncLKvbdrpWPJbuf +DnbjjvbdNQXqVnHT +EOcLKvbdkNCLzFHP +EObjjvbdTukpKTaR +EOcLKvbdEuxpPlie +EPCkKvbdJuuFdFHJ +EPDKjvbdGGJqmiTq +DnbjjvbdOAIrtJrA +DnbjjvbdelfWgNKL +EObkKvbdhbOcEwRR +DncLKvbdqiAKFNPF +DncKjvbdVqnYCFMD +DoDLKvbdWHxWXgYz +EOcLKvbdNVTSKmAX +EPDKjvbduaDySndh +DnbkKvbdiifIJlxS +EPDKjvbdeATpmYJf +DncLKvbduCcVWuoP +EPCjjvbdhficYvJu +DncKjvbdehLVqnQg +EPCkKvbdrDeJPmua +DoCjjvbdTfzmlWue +DncKjvbdZoNiFEyj +DoDLKvbdxmsHxSiD +EObkKvbdVwJYVdFH +EPCjjvbduMXwBUBX +DnbkKvbdTqROuVIN +EPCjjvbdGKeTCglu +EPDLKvbdcyyPwxpb +EPDLKvbdQmXayOUz +EPDLKvbdZyDinCkr +EPDLKvbdZoNheEyj +DncLKvbdmfdxMnGy +DnbkKvbdkClLRGuH +DncLKvbdJXsbIMQp +DnbjjvbdjJegilxS +DoCkKvbdnPyxukZC +EPDKjvbdZMRcsnLm +DoCkKvbdHffzYxYH +DnbkKvbdbsDLTcjB +DoDLKvbdSwjlNzjx +DncKjvbdkaMnmALA +DncLKvbdqmZjZLhJ +DoDKjvbdqrUkNkBN +DncLKvbdmfeXmOGy +EPCjjvbdZMRdTmlN +DnbkKvbdypnlhjXA +EPDLKvbdyOTHxTJD +EObjjvbdMRwMzVQz +EPCjjvbdSCDeMIxk +EObjjvbdOXnuzdOU +EPDKjvbdOStWHFVQ +DoDLKvbdrzLpTAgn +DnbkKvbdULuoAvPJ +EPDKjvbdZxdKODMS +EOcKjvbdbAvEfPpX +DncKjvbdyOSgwriD +EPDLKvbdrJAJdmPF +EPDLKvbdauCGxKtI +DncLKvbdqrVLOLAm +EPDKjvbdkHgLfFmk +DncKjvbdUaCRSqSZ +DnbkKvbdbQGgELzd +EOcKjvbdcJMijfXY +EPCkKvbdeOeTLUTr +EOcKjvbdQmYByNtz +EPDLKvbdFxuVBDwb +EOcKjvbdGGJrNiUR +DoDKjvbddndsLTtS +EOcLKvbddZyPxYqC +EPCkKvbdSKxfVHLT +EOcKjvbdSCDdkiYk +DnbjjvbdtvNwjQsA +EOcKjvbdJXsbILqQ +EObjjvbdjcLkRHVH +EObjjvbdkCkkQgUg +DoCjjvbdTqQnttgm +EPCkKvbdEuyPoljF +DoCkKvbdTqQnuUgm +DoDLKvbdLrWlzVQz +EPCjjvbdRjyGVGkT +DoDLKvbdHEKvKBjK +DoCjjvbdnCJvxOnV +EObkKvbdptUGrRkU +EPDKjvbdQwNcblID +DoCjjvbdIidAKPgE +DoCjjvbdTYLMNzkY +DnbjjvbdEztRFMCi +EObkKvbdBhkCLJGK +EPDLKvbdZisHpGbG +EPDLKvbddePRbXDK +EObkKvbdUQpntuIN +EObjjvbdEPCjjvcE +DncKjvbdbiNJjewY +EPDLKvbdVrOYCElD +EPCkKvbdSBdElIyL +DoDLKvbdzjVQQETU +DoCjjvbdCDpAvKNG +EObkKvbdNHComPuL +EOcKjvbdGdKvJaij +DnbkKvbdqmZjYkgi +DncKjvbdQvnEClID +DncLKvbdWWiXudFH +DoDLKvbdCEQBWJlf +DncKjvbdMpXqWOGs +EPDKjvbdVBCRSqRy +EPDLKvbdqUTgSRjt +EOcLKvbdJXtCHkqQ +EObkKvbdBiLBkJFj +EOcLKvbdVvhwvEEg +EOcKjvbdCTBCsewS +EOcKjvbdyNsHwriD +DoDKjvbdwzHfFxEr +DnbjjvbdypoMiJwA +DoCjjvbdJbicQjCx +EOcLKvbdVUMsekuj +EOcKjvbdCEQBWJlf +EObjjvbdIjEAKQGd +DoCjjvbdDjIJvXjA +DoDLKvbdFyUuAdYC +DncLKvbdRotGiedX +DoCjjvbdBhkBjhej +EOcKjvbdBhkCKhfK +EPCkKvbdLFfHbBRV +DoCkKvbdNUrrLNAX +EOcKjvbdZoOIeEzK +EPCjjvbdkMbMZeHP +DoCjjvbdkVwNdBxX +EPCkKvbdNddThiKd +DnbjjvbdjcLkQftg +DnbkKvbdFkErcHmV +DnbjjvbdqGEEtWAh +DncKjvbdmSYuZsEJ +DoCjjvbdUsmTfMWK +DoCkKvbdVUMtFkvK +EOcKjvbdKfGICBRV +DnbkKvbdMSWlzUpz +EOcLKvbdVBBprpqy +EPCjjvbdnHEwmNgZ +DoCkKvbdeEoRawDK +DnbkKvbdpssgSSLU +DncKjvbdOSsugFUp +DnbkKvbdwzHfGYFS +DoCjjvbdTAEiHbPE +EObkKvbdKaLGmCXq +DnbkKvbdCWzciFQW +DncLKvbdnVVZjiqf +EPCjjvbdOStWHEtp +DoDKjvbdkIGkfFmk +DoDKjvbdZjTIPfbG +EOcKjvbdXsMAlsnx +DnbjjvbdILazmwRL +EOcKjvbdrDdiPmvB +EPDKjvbdiUzEwRuC +EOcKjvbdqAheAXHd +EPCjjvbdRyigsCvA +DoCjjvbdpyOggQcx +EPCkKvbdZyDjNblS +DncLKvbdFejSNiTq +EPDKjvbdzRPNIjXA +DncLKvbdaMkBsVMg +EObkKvbdLYqJrzuG +DncKjvbdsBfNMHLZ +EPDKjvbdjgflFfOL +DoDKjvbdCTAcUGWr +DnbjjvbdSLZGVGkT +DoCkKvbdZQmEhldq +EPDKjvbdUsmTfMWK +DoCjjvbdKefICBRV +EPCjjvbdZMSDsnMN +EObkKvbdwzIGGXdr +EObjjvbdrRtjnLAm +EPDKjvbdXrlAmTnx +EPCjjvbdZtJJZETO +DnbjjvbdieLGtoAO +DnbkKvbdnCJvxPOV +EPDKjvbdjKFgjNYS +DoCkKvbdlhcspuRa +EPDKjvbdbAvEfQPw +EOcLKvbdiGjDYuiu +DncKjvbdnQZxvLZC +DoDLKvbdaogHDkzd +DnbjjvbdMfcQMouL +DncKjvbdKaKgMbYR +DncKjvbdrbGNMHKy +DoCkKvbddoFSjtUS +EPDLKvbdNddTiIjd +EPDKjvbdhgKDZViu +EPDLKvbdkMbLzEfo +DoDKjvbdjmCMZdfo +DoDKjvbdSCDeLhyL +DoCkKvbdQwODcMID +DnbkKvbdgGLymgHA +EPDKjvbdWIYVwfxz +DnbkKvbdZLqdUNkm +DoCkKvbdYlSETmkm +DnbkKvbdLqvlyuQz +DnbkKvbdZRMdiMdq +EOcLKvbddePSCXCj +EPDLKvbdRacdkiYk +DnbjjvbdZisIQGbG +EObjjvbdrpVnibvG +DncLKvbdIxUCHlRQ +EPCkKvbdhuZeXRtb +DnbjjvbdQwODblID +DoDKjvbdezuyEhsw +DncKjvbdiLddNtcZ +EPCkKvbdiLeENtby +DnbjjvbdxKvcgzzG +EPDLKvbdRXNdClID +DncLKvbdEKHjVwjA +EOcLKvbdzoPqFCkx +DoDLKvbdliEURUqa +DoCjjvbdyOTIYTJD +DncLKvbdIHGyyXwg +EPCjjvbdShyjRABM +DoCkKvbdnPyyWLYb +EObjjvbdsPvPJcVf +EPDKjvbdTXjlNzjx +DoDKjvbddneTLUUS +EOcKjvbdmuUyjiqf +DncKjvbdZoOIddzK +DoCjjvbdpyOhGqEY +DoCkKvbdwjwDgzyf +DnbkKvbdxZgeexEr +EOcLKvbdHDjvKCKK +DoCkKvbdpxnhHQdY +DoDLKvbdLrWlzUpz +EPDKjvbdatbHXkTh +DoDLKvbdZyDinDLr +EPCjjvbdGGJqnJTq +DoDKjvbddneTLTsr +DncLKvbdyzdmqhJI +EObkKvbdRjxfVGkT +EPDKjvbdOAJTTirA +EPCjjvbdZoNiFEzK +DnbjjvbdOhAXyAYa +DnbjjvbdACqwizIp +DoDLKvbdcImJjevx +EPDLKvbdxmrhYTIc +DoDLKvbdjcLkRGuH +EPCkKvbdxVNEpxlO +EPCkKvbdKCibqJbx +DoCkKvbdjJfIKMxS +DoDLKvbdVYhUZjoO +EPDLKvbdrJAKEmPF +EOcLKvbdRDbaQRDr +DoCkKvbduWOXiqTA +DoCjjvbdZyDjNcLr +EObjjvbdbBWEeoow +EPDLKvbdUQpnttgm +EOcKjvbdlBNOmALA +DnbjjvbdSPsfiecw +DnbjjvbdwzIGGYFS +EOcKjvbdLGFgaaRV +EOcKjvbdrXQLcJYq +DnbkKvbdmbKXYPOV +DoCkKvbdZisHogCG +EPCkKvbdFVyPpMjF +EOcKjvbdYkrDsmkm +DoDKjvbdxUmEqYlO +EPDKjvbdKNAEZgUa +DoDLKvbdqZPIGpcx +DoCjjvbdMgComPtk +EObjjvbdUyHszKoO +DoCkKvbdeEnqavcK +EPDKjvbdqYoIGqEY +DoDLKvbdCDoaWJmG +EPDLKvbdlZSrTZHU +EPCkKvbdZxcinDMS +DoCkKvbdgFkzNfgA +EOcKjvbdYNqAXtvU +EObjjvbdwygefYEr +EPCkKvbdbBVdfQQX +DnbkKvbdqrVLOLAm +EOcKjvbdFjeTDINV +DnbjjvbdnHFYMnGy +EPCjjvbdrbFllHKy +EPCjjvbdZLrDtOMN +EPDLKvbdcJNKKfWx +DoCjjvbdraemMHLZ +DoDKjvbdeJjSWUzn +EPCkKvbdZnmiEdyj +DnbjjvbdwtleQxlO +DnbkKvbdDwwlUTtM +DoDKjvbdrWpMDJZR +EOcKjvbdegkVrORH +EPCkKvbdiCOcFWqR +DnbkKvbdBsBDTevr +DoCjjvbdjcLjpfuH +DnbjjvbdZxdKODLr +DoCjjvbdqceIpOVa +DoDLKvbdVvhxVceH +EObkKvbdsrqryZdc +DnbkKvbdMSWlytpz +DoDLKvbdqTsfqrKt +EPCjjvbdjKGIKNYS +EOcLKvbdiGibxvKV +EPCjjvbdKDKCpibx +EPDKjvbdQdDBPqDr +DncKjvbdozmdLYPA +DoCkKvbdTvLojUAq +DnbkKvbdbhmKLFwY +EPDKjvbdCIjbLIej +DncKjvbdkHfkeenL +DoDKjvbdtAGqIABS +EPCjjvbdRosfjFdX +EOcKjvbdraemLgLZ +DnbkKvbdxmrgxTIc +DoCkKvbdOAJStJrA +EPCjjvbdqYngfpdY +EPDLKvbdBvzdJEov +DoDKjvbdrDeIpOWB +EObjjvbdqUTfrSKt +EOcKjvbdxnShXsIc +DoDKjvbdEzsqFLcJ +EObjjvbdDxYMUUUM +EOcKjvbdjKFhKNYS +EOcKjvbdjgflGFmk +DoCkKvbdGGKRnItR +EPCkKvbdREDApRDr +EOcLKvbdNQYRWOHT +EPCjjvbdxmrgwriD +DncLKvbdbsCjsdJa +EOcKjvbdypoNIiwA +DncKjvbdZoOJFEyj +DoCjjvbdrbGMkgKy +EPDKjvbdyTNiNSBg +DoCjjvbdczZPwyQb +DoDKjvbdWfZZtAOs +EPDKjvbdznoqFClY +DncKjvbdTlVoBVoJ +EPCkKvbdIxUBhMRQ +DoCkKvbdZQmEiNEq +DoDKjvbdnVUykKRf +DnbjjvbdUtMtFlWK +EObjjvbdOTUVfeUp +DoCjjvbdZMSEUOMN +DoCjjvbdwjwDgzzG +DoDKjvbdYqNEiNFR +DoDLKvbdqiAKEmOe +EPDLKvbdfNGXHNJk +DnbjjvbdCEQBVjMf +EObkKvbdqUUGrRjt +DnbkKvbdjmCLyeHP +DnbjjvbdcJMikFwY +EPCjjvbdjuwNdBxX +DoCkKvbdeqaWzkbo +DncKjvbdTkvOaVoJ +DoDKjvbdZoOIeEzK +DoDLKvbdKDKDRKDY +DncLKvbdqwQMDJYq +EObkKvbdKeegbBRV +EPDKjvbdegjuqnRH +DoDKjvbdxwhjBpZk +EObjjvbdziuQPdSt +EPCjjvbdZyEKOCkr +EPCjjvbdRWmdCkhD +EOcLKvbdQcbaQRES +DncLKvbdIrxaTNYM +DnbjjvbdGFiqmiTq +DoCjjvbdZeXfzghb +DoCjjvbdSLZFuGkT +EPDKjvbdIryBSmYM +EOcLKvbdRyjHsCvA +EPDKjvbdzoPqFCkx +EPDLKvbdFeirOIsq +EObkKvbdLiBkpxAS +DoCjjvbdmuUyjirG +EOcKjvbdpfDeTuaI +DncLKvbdtSqsYyeD +EOcLKvbdAMhYrwZx +EOcKjvbdJSyAsNYM +DncLKvbddneTLTsr +EPDLKvbdANIYsWyx +EObkKvbdRXODblHc +DoCkKvbdYzcGRjWZ +DoDLKvbdkHgLfFnL +DoCkKvbdpyPIGqDx +EObkKvbdwuNEpxkn +DoDLKvbdJSxaTNYM +DoDLKvbdRNXbZOUz +DnbjjvbdNHDPlpUk +EObjjvbdKQzFPFnF +EOcKjvbdwkWdHzzG +EObkKvbdiCPCdvpq +EPCkKvbdwzHfFwdr +DoDLKvbdwuMeQxkn +DoDLKvbdmoyxujyC +DncLKvbdyYJKBoyk +EOcKjvbdhgJbxujV +EOcKjvbdvAcySndh +EPCjjvbdOYPVzcmt +DncKjvbderBWzlCo +DncLKvbdEuxoolie +DoDLKvbdUsmTelVj +DoCkKvbdcImKKfXY +EPCkKvbdKDJcRJcY +DoDLKvbdfILWSOQg +DoDLKvbdtcDVWuno +DoDKjvbdegjvSNpg +DncKjvbdjvXOEBxX +DncKjvbdvOszpjoU +EOcLKvbdkIGkfFnL +EPDKjvbdZxcinCkr +EOcKjvbdNxPVzcnU +DnbkKvbdNrsvHEtp +DnbjjvbdwygefXeS +EObkKvbdnHEwmOGy +EObkKvbdZRNFIleR +DoCjjvbdNHColotk +EPDKjvbdTkuoBVni +EObkKvbdkHgLfGNk +DoCkKvbdVvhxWEEg +EOcLKvbdtbcVWvOo +DoDKjvbdULvOaWOi +EObkKvbdNdcsiJLE +DoDLKvbdOYPVzdNt +DoCkKvbdNeDsiJLE +EOcLKvbdXGYytAOs +EOcKjvbdcIljLGWx +DoDKjvbdIMBzmwQk +EPDKjvbdbrcKscjB +DoCjjvbdqdEhpOWB +DnbjjvbdzoPqFClY +DnbjjvbdKDKCqJcY +EPDLKvbdZRNEhldq +DncLKvbddZyQXyRC +DncLKvbdRzKHrcWA +EObkKvbdTAFIgbPE +EObjjvbdwtmFRYkn +DoDLKvbdCTAbtFwS +EObjjvbdJzpFwdAN +DoCjjvbdCTAbsevr +EObjjvbdyzdmrIIh +DnbkKvbdANIZTXZx +EPCkKvbdVwJXvDeH +DncKjvbdmfdwlnHZ +DoCjjvbdZirhPfaf +EPCkKvbdiHJcYvJu +DnbjjvbdRMxCYmtz +EPDLKvbdZHWdAPSi +DnbjjvbdWSNxBdkc +DoDKjvbdNxPVzdNt +EObjjvbddePRawDK +DncKjvbdaSGCgtGL +DncKjvbddoFSjstS +DnbjjvbdOFETiJLE +DoDLKvbdeAUQmYJf +EObjjvbdZshiZESn +EPCjjvbdVwIwvEFH +DnbkKvbdKDKDQjDY +EPDLKvbdRbEFMJZL +DoDKjvbdiZuGLpnG +DoCjjvbdqGEEtWAh +DnbjjvbdnBiwYPNu +DnbjjvbdtlXwBTaX +DoCjjvbdqYoHfqEY +EPCkKvbdIsZArmXl +DoDLKvbdmfeYNNgZ +DoCkKvbdrafNLgKy +DnbkKvbdYfwEAOsJ +DoDLKvbdrEFIonWB +EPCjjvbdRXODcMID +EPCjjvbdZisIPfbG +DncKjvbdoAKzshEO +EOcLKvbdNQXqVmfs +DnbkKvbddoEsKssr +EPDKjvbdNeETiJLE +EPCkKvbdVgwvXfxz +EOcKjvbdIsZBTNXl +EObkKvbdFeirOJUR +EPCjjvbdVAbRSpqy +DnbjjvbdeXyssqez +EPDLKvbdZGwEAOri +DoCkKvbdVAaqSqRy +DoDLKvbdiVZeWrVC +EPDKjvbdGYuUaDwb +DncLKvbdLrXMyuQz +EPDKjvbdGZUtaEXb +EOcLKvbdzoQRFDLx +EPCkKvbdTAFJICOd +EPDKjvbdNPxRVmfs +DoCjjvbdauBfxKsh +DncLKvbdMIbLpxAS +DoCkKvbdmgEwmNfy +DoDLKvbdhanbdvqR +DoCkKvbdSLYfUfjs +DoCjjvbdTvMQJsaR +DnbkKvbdlhcspuRa +DnbjjvbdJSyBSlxM +EPCjjvbdSLZFuHLT +DoCkKvbdYTLaNUPY +EObjjvbdFeiqnJUR +EPDKjvbdYlRctNkm +EOcKjvbdHDjvJaij +DnbkKvbdnCJvwnnV +DoCjjvbdNHDPlouL +DncLKvbdWXIxWDdg +DoCkKvbdJSyAsMwl +EObkKvbdxmrhXriD +DnbkKvbdJzpGYEAN +EOcLKvbdddnqawDK +EOcLKvbdhyuFkpnG +DnbkKvbdtAHQhABS +DoCjjvbdjhGlFemk +DncLKvbdjJehJmXr +EPDLKvbdHffyyXwg +DoCkKvbdRbEFLiZL +DoCjjvbddePSBwCj +EPDKjvbdeOeTKtUS +DnbjjvbdrDeIomvB +DnbjjvbdVZIUZjoO +EPDKjvbdxmsIYTIc +EPCjjvbdDnbkLXDE +DnbkKvbdYlSDtNlN +EObkKvbdeFPSBvbj +EPCkKvbdkDMKpgUg +DoCkKvbdbKlGPODA +EObjjvbdGdLVjCKK +EPCkKvbdkCkjqGuH +EOcLKvbdqYngfpcx +EPDLKvbdeKJqvUzn +DoCkKvbdkIHMGGOL +DncKjvbdDoDKkXDE +EPCkKvbdsCGNMHLZ +EOcKjvbdyzeNqhJI +DnbjjvbdqwQLbhxq +EObjjvbdaaWEepPw +EObjjvbdDxXktUTl +DnbjjvbddwzTtRez +DnbjjvbdKQyeOfNe +EPDKjvbdbBVdepPw +DncLKvbdfSAvzkbo +DoDKjvbdqYoIHQcx +DoCkKvbdeEnrBwCj +DncKjvbdehLVqnRH +EPDLKvbdhfjDYuiu +EPCkKvbdvmWANEEm +EPCkKvbdZRNEiNFR +EOcLKvbdCSaCtGXS +DoDKjvbdbhljKevx +DoDKjvbdbBVdepQX +DncLKvbdqTsfrSKt +EPDKjvbdjEjgVPAO +DoCjjvbdFeiqmiTq +EObjjvbdcImJkGXY +EObjjvbdJbjCqJcY +DnbkKvbdjcLjpftg +EPDLKvbdWXJYWEEg +DoDKjvbdznpREbkx +EObjjvbdfILVqmqH +DnbkKvbdxwiKCQZk +EPDLKvbdOEdUJIjd +DnbkKvbdsCFmLgKy +DncKjvbdijFhKMxS +EPCjjvbdzitpQDrt +EPCkKvbdZQleImEq +DoDKjvbdZxdKNcLr +DncKjvbdGdLVjCKK +EOcKjvbdhzUfLpnG +DncLKvbdwzHfGYEr +EObjjvbdEObjjvcE +EOcLKvbdfHkVqmpg +DnbjjvbdXnRAXuVt +EOcLKvbdeFOrBwDK +EPCjjvbdzitoocsU +EPDKjvbdZxdJmblS +EObjjvbdFjeScHlu +DoDKjvbdjhGkfFmk +EOcLKvbduDDVXWPP +EPDLKvbdJYUCHkpp +EPCkKvbdkClKpgVH +EObkKvbdJcKCqJbx +DncKjvbdEXwlUTsl +EObkKvbdxwiJbPzL +DncLKvbdHDjujCKK +DnbkKvbdEuyQQMie +EPCkKvbdUaBpsRSZ +EPCkKvbddoFTKstS +EPCjjvbduaEYsOeI +DoDLKvbdcTDKscjB +DncLKvbdNdcshiKd +DnbjjvbdWSOYCEkc +EOcKjvbdZnmiEdzK +EPDKjvbdUQpnttgm +DoCjjvbdnGdwmOGy +DoCkKvbdZyDjNblS +EOcKjvbdShyjRAAl +DncKjvbdTkvOaWPJ +DoDKjvbdOEcsiJKd +DncKjvbdbVBfxKtI +EPCkKvbdrafNLfjy +DoDKjvbduaEZTOeI +DncLKvbdGGKSNhtR +EPCjjvbdnBjWxOmu +EObkKvbdKefICBRV +DncKjvbdZoNheFZj +DnbkKvbdEOcKkWbd +EPDKjvbdNGcPmQUk +EObkKvbdaMjbStlg +DnbkKvbdJYTbIMRQ +DncLKvbdJXsahLpp +DncKjvbddeOrBvbj +DoDLKvbdJSyAsMwl +EPCkKvbdZdwfzhJC +DoCjjvbduDDVWuno +DnbjjvbdEztQdkbi +EOcLKvbdUyHsykOn +EObjjvbdDjHivYKA +DoDLKvbdnUtzLKSG +DncLKvbdSLZFuGkT +DoDKjvbdlYrrTZGt +EOcLKvbdqUUGqrKt +EPDLKvbdEPCjjvcE +EPDKjvbddxZtTrFz +EObkKvbdlYrqrxgU +DoCjjvbdauCGwjtI +DnbjjvbdQZNAHTRj +DoDKjvbdMoxRVmfs +DncLKvbdOTTvGeUp +DncKjvbdcJNKKewY +DoDKjvbdmuVZjjSG +EPDKjvbdUWLpKUAq +EOcLKvbdSLZGVGjs +EObjjvbdCIjakJGK +EPDLKvbdZnmhddyj +EOcKjvbdLBKgMaxR +EOcLKvbdDjHjVwjA +DnbkKvbdYlRcsnLm +DoCjjvbdrRuKnKaN +EPCkKvbdptUHSSLU +DncLKvbdYpmEiNFR +EObkKvbdMIalQxAS +DnbjjvbdJuteceHJ +DncLKvbdFWYpPlie +EPCkKvbdmgFYMmgZ +DoCjjvbdmbJvxOnV +DncKjvbdIGfzZYXg +EPDLKvbdqTtGqrLU +EPCjjvbdWRmwbElD +EPDLKvbdGLErcIMu +EPDLKvbdwygefYEr +EPDKjvbdrSUkOLBN +DoCkKvbdNQYQumfs +DoCkKvbdRjyGVGjs +EPDKjvbdmajXXoOV +DncKjvbdIGgZxwwg +DnbkKvbdxwiJapZk +DoDKjvbdYqMdhleR +EOcLKvbdZtJIxdSn +EPDLKvbdTIzKRABM +EPDKjvbdCEPaWJlf +EOcLKvbdjgflFfOL +EPCjjvbdZjShQGbG +DoDLKvbdHDjvJbKK +EOcLKvbdBiKbLIfK +DncLKvbdiHJbxujV +EObkKvbdKeehBaQu +EPDLKvbdYSlBMsnx +EObkKvbdmJDsptrB +DoDKjvbdTkuoAvPJ +EPDKjvbdZyEJnDLr +EPCkKvbdZoNhddyj +EPDKjvbdVZHsykOn +DnbkKvbdjJegjNYS +DoDLKvbdtcCtwVno +EOcKjvbdkIHLefOL +EOcKjvbdYkqdTnLm +DnbkKvbdiZuGMQmf +DoCjjvbdZLrDsnLm +DoCjjvbdDwwktTsl +EObjjvbdRzKHrbvA +DoDKjvbdQlwaxnUz +EObkKvbdyTOImRag +EPCjjvbdQmYByOUz +EObjjvbdbrbkUDjB +DoDLKvbdGYtuAcwb +DncLKvbdePFSjssr +DoDKjvbdRbDdlIxk +DoDKjvbdwzIGGXeS +EPCjjvbdOTUVgEuQ +EPCkKvbdemGWfmJk +EOcLKvbdZQmEhmEq +DoCjjvbdZRMeJNFR +DoCjjvbdvBEZSoEh +DncLKvbdhlFDnVDZ +DoCjjvbdJJdAKPfd +EObjjvbdyYJKCQZk +EObjjvbdRzKITCvA +EPCjjvbdUMVnaWPJ +DoCjjvbdNddThhjd +EOcKjvbdNPwpvOHT +DnbjjvbdZisHpHCG +EObkKvbdGLFScINV +EOcLKvbdbsDLTdJa +EObjjvbdbhlijfWx +DoDLKvbdVZHszLPO +EObjjvbdZnnJFEyj +DoDKjvbdeOeSkTtS +DoDLKvbdkCkjpgUg +EPCjjvbdFejRnJUR +DoCjjvbdZsiIyDrn +DoDLKvbdtunYJqTA +DnbkKvbdoznELXoA +DoCjjvbdZtIiYcsO +EOcLKvbdGGKSOJUR +DoCjjvbdUMWPAuni +DnbkKvbdEPDKkWbd +EPCkKvbdUxhTzLPO +DoDKjvbdGdKvKBij +DncKjvbdmSZUzSci +EPCjjvbdZjShQGaf +DncLKvbdWRmxCElD +EPDLKvbdqvpMDIyR +DncKjvbdCJKakIfK +EPDKjvbdHELWJbKK +DoDKjvbdjlbLzFGo +EPCjjvbdTkvPBWOi +DoCkKvbdJvVGEFGi +EOcLKvbdUyHszLPO +EObjjvbdVBBpsQqy +DnbkKvbdZdxGzhIb +DnbjjvbdsPvOicVf +DoDKjvbdtcCtwWPP +EOcLKvbdwtmFRYkn +EPDKjvbdegjvSNqH +DoDKjvbdIxUBglQp +EOcLKvbdBcpAvKNG +DnbjjvbdwXMAvAvV +DnbkKvbddoEsLUUS +DncKjvbdCIkCKiGK +DoDKjvbdlZTSTYft +EPCjjvbddoEsKtTr +EObjjvbdFfJrOJTq +EPDLKvbdliDsqVSB +DncLKvbdbUagXjtI +EObkKvbdIsYaSlxM +EPCjjvbdHkaznXRL +DnbkKvbdxUmFQyMO +DoCjjvbdWWiXvDdg +EPCjjvbdSQUHKFcw +EPDLKvbdjKGIJlwr +EOcKjvbdXFxytAOs +DncKjvbdmbKWwoNu +EObjjvbdiZuFkpmf +DoCjjvbdFyVVBDwb +DnbjjvbdeqaWzlDP +EPCjjvbdRyjHsDWA +DnbkKvbdqlzJyMHi +DnbkKvbdZRNFImFR +DoCkKvbdYfwEAPSi +DoCjjvbdOAIrsjSA +EPCkKvbdaNLCTVMg +DnbjjvbdqceIomvB +DnbjjvbdsCFlkgLZ +DoDLKvbdmIdURUqa +EOcKjvbdZshhxcrn +DoDKjvbdZjTIPgCG +DncKjvbdemGWfmJk +DnbjjvbdACqxKZiQ +EObkKvbdkVvnEBxX +DncLKvbdUtNTfMWK +EPDLKvbduaDxsPFI +EObkKvbdgQBzvcxI +EObkKvbdSZihTDWA +EOcLKvbdqYnggREY +EPDKjvbdqiAJdmPF +EOcLKvbdiGjDZVjV +EOcLKvbdGZVVAdXb +DoDKjvbdhfjCxuiu +DnbkKvbduMYXBTaX +DoCkKvbdjSziTKiz +DoDKjvbdqlzKZMIJ +DnbjjvbdkVwOEBxX +DoCjjvbddtAUASmW +DoDLKvbdzjVQQESt +EOcLKvbdkySrSyHU +DncLKvbdNGbolotk +DnbjjvbddeOrBwCj +DoDLKvbdiLdcmuDZ +DoDKjvbdSPsfjFdX +DoCkKvbdbUafxKtI +DnbkKvbdcJNJkFvx +EObjjvbdFejSNiUR +EPDKjvbdQmYCYmtz +DncKjvbdfVzwpJzs +EPDKjvbdWRmwbEkc +DncLKvbdFkEsDIMu +DoCjjvbdQccBPqES +EObkKvbdKCibpjCx +EOcKjvbdLBLHNBwq +DoCkKvbdUMWOaVoJ +DoCjjvbdrbFmMGjy +EOcLKvbdJvVFdEgJ +EPCkKvbdjhHMGFnL +DncKjvbdNxOuzcmt +EPDKjvbdEXxLstUM +DoDKjvbdwygfGXeS +EObkKvbdyTNiMrBg +DncKjvbdlZSrSxgU +EPDKjvbdJXtCHlQp +EPCkKvbddndsLTsr +EObjjvbdNdcshhkE +DncLKvbdSCDeLhyL +DncLKvbdNsTvHEuQ +EOcKjvbdACqxKZiQ +DoCjjvbdptTgRqjt +EPDKjvbdOEdTiJLE +DoDKjvbdrpVoKCvG +DnbjjvbdFjeSbhNV +EPCjjvbdNGbolouL +EPDLKvbdrEFIonVa +DnbkKvbdOFDsiIjd +DoCkKvbdTqQoUuIN +EPDKjvbdeOdsKtTr +DncKjvbdyNrhXsIc +EPDKjvbdnQZxujyC +EPCkKvbdYqMdhmFR +DncLKvbddeOrBvbj +DoCjjvbdLGFgbApu +DoCjjvbdemFwHMik +DoCkKvbdRXOEClHc +DoCkKvbdZQmEiNFR +EPCjjvbdEASIlzXX +DnbkKvbdrWokbiZR +EObkKvbdHELWKBij +DnbkKvbdbUagXkUI +EOcKjvbdbsDLUDia +EOcLKvbdUWLojUAq +DnbjjvbdQvmccMID +DoDKjvbdZxcjODMS +EPDKjvbdTulPjUBR +DncLKvbdjSzhsKiz +EOcKjvbdTAFJICOd +DnbkKvbdKNADzHVB +DoCjjvbdliDtRVSB +EObjjvbdWXIxVceH +EPCjjvbdfHkWRnQg +EObkKvbdjAQGaPgK +EObkKvbdkClLRGuH +DncLKvbdZnnIdeZj +EObjjvbdlYsRsYgU +DoDLKvbdpyPHgQcx +DnbjjvbdnPyyWKyC +EObjjvbdQwNcblID +DnbjjvbdCJKajhfK +EPDKjvbdiHKCyWKV +EObjjvbdeEoRavbj +EOcKjvbdmaivwnnV +EOcKjvbdwNWANDeN +EPDKjvbdTAFIhCPE +DoCjjvbdZQleJMeR +EPDKjvbdmtuZjiqf +DnbkKvbdEPCkLXCd +EObkKvbdqGEEsvBI +EOcKjvbdmIdTqVSB +EObjjvbdJTZBSlwl +EPCjjvbdqlzKZMIJ +EPDKjvbduCbtwWOo +EPDLKvbdnPzYukYb +EPDKjvbdeFPSBvbj +EPDLKvbdHEKvKCJj +EPDKjvbdVUNUGLuj +EOcLKvbdJuuGEEgJ +EOcKjvbdzQnmJKXA +EOcLKvbdrbGMkfjy +DnbjjvbdUsltFkuj +DnbkKvbdDxYMUUUM +DnbjjvbdUQpoUuHm +EPDKjvbdRbDdlJZL +DncLKvbdmgFXlmfy +EPCjjvbdJbibqJcY +DoCjjvbdEPDLLWcE +DoDLKvbdMJCMRYAS +DoCkKvbdQZNAGsSK +EObjjvbdiCPDFXQq +EOcLKvbdVwJXvEEg +DoDLKvbdsrqsYzFD +DncLKvbdjuvnDbXw +EPDKjvbdhgKCyWKV +DoDLKvbdNdctIiKd +EObkKvbduaEYrneI +DoCkKvbdNVSrKmAX +DncKjvbdXnRAXtvU +DoDKjvbdhkddNtcZ +DoCkKvbdiBnbdwQq +DnbkKvbdLBLGlawq +DoDKjvbdygZMANEw +DnbkKvbdZsiIxcsO +EObjjvbdiBoDEwRR +DoCjjvbdHbLzEzAD +EPCkKvbdjbkkQgVH +EOcLKvbdsBemLgLZ +EOcLKvbdptUGrRkU +EPCjjvbdznpQdbkx +DoDKjvbdGYtuAdXb +EOcKjvbdzjUpQETU +EOcLKvbdypoNIjXA +DnbkKvbdSQUHJfDw +EPCkKvbdbsCjtEKB +DoDLKvbdajlFoODA +DoDKjvbdelevfmKL +DnbkKvbdCTAbsfWr +DoDKjvbdjhGlGGNk +DoCkKvbddCTMrATm +EPDLKvbdaMjbSuMg +DoCkKvbdKaLHNCYR +DncLKvbdGGKSNiTq +DoCjjvbdLZRJrztf +EPDLKvbdjlakyeGo +EObkKvbdwuMdpyLn +DnbkKvbdegjuqnQg +EPDKjvbdtTSTYydc +EObkKvbdZyDjOClS +DnbkKvbdqGEEtWAh +EOcLKvbdKQydoFnF +EPDLKvbdqUTgSSKt +DnbjjvbdMJCMQxAS +EPCkKvbdiMFDnUby +EOcKjvbdfpBzwEXh +DoCkKvbdSBceMIxk +EObjjvbdfMevgMik +EPCjjvbdjAQHAofj +EPCjjvbdZLrETnMN +EObkKvbdDoDLLXCd +DncLKvbdSZjHsDWA +DnbjjvbdOStVgFVQ +EObkKvbdbhlijfXY +DnbkKvbdjEjftoAO +DoCjjvbdeEnrCXDK +EOcLKvbdZyEKNcMS +EPDKjvbdWSNwadkc +EPCjjvbdkDLjqHUg +DoCkKvbdSCEFLiYk +DncKjvbdtkwwBTaX +EPDKjvbdCTAbsevr +DncLKvbdmfdwlnGy +DncLKvbdTukpJtBR +DoCjjvbdlYrrTZGt +EOcKjvbdnCKWwoOV +DncKjvbdMgColpVL +EPDLKvbddwytURez +DoCkKvbdakLenmcA +EPCkKvbdQvmdCkhD +DncLKvbdEARhlzWw +EOcLKvbdrXQMDJYq +EObkKvbdmJETptrB +EOcKjvbdAMgxsXZx +EPDKjvbdULvPBVni +DoDKjvbdqGEFTvAh +DoDKjvbdGLFTChMu +DoCjjvbdLBKgNCXq +DoCjjvbdOEcsiJLE +EObjjvbdSLZFuHKs +DoCjjvbdtkxXAsaX +DnbjjvbdNGbpNQVL +EOcLKvbdiLeEOUby +EObjjvbdDoCjjwDE +EPCkKvbdxrnJMrCH +EPDKjvbdJTZBTMwl +DncKjvbdBcpBWJlf +DncLKvbdGKdsDHmV +DncLKvbdDwwlUUTl +EPDLKvbdbQHHELzd +EPDLKvbdYlSEUOLm +EObjjvbdhtyeXSUb +EPCjjvbdACqxKZiQ +EObjjvbdrDdiPmua +EPCkKvbdcyxpYYqC +EPDKjvbdrXQLbiZR +DncKjvbdjmBlZeHP +DncKjvbdlYrrTYft +EObkKvbdaaWFFpPw +DncKjvbdwyhGFwdr +EPCkKvbduLxXAtBX +EObjjvbdhancEvpq +DncLKvbdbiMjKevx +DncKjvbdTIyjRABM +DoCkKvbdcImKLFvx +DnbkKvbdZjSgpHBf +EPCkKvbdGdKvJbJj +EOcLKvbdSCDeMIyL +EOcKjvbdZxdJnClS +EOcLKvbdHDkVibJj +DoDKjvbdezuxeJTw +EOcKjvbdqFceUVaI +EPDKjvbdWIYWXfxz +DoDKjvbdNQXqWOHT +DnbkKvbdOStWHEtp +EPDKjvbdLAkGmBxR +EPDKjvbdDxXksssl +EPCkKvbdTqRPVUgm +DoDLKvbdrDdhomvB +DncLKvbdptUGrSKt +EOcKjvbdiBnbeWqR +DoDKjvbdezvYeJUX +DnbkKvbdOAJStJrA +DnbjjvbdtcCuWvPP +DnbjjvbdIjEAKPgE +EObkKvbdWWiXvEEg +DnbkKvbdSBdFMJYk +EOcKjvbdQdCaQQcr +EPDLKvbdLZRKSzuG +DoCkKvbdpfEFTuaI +DnbkKvbdVBBqSqRy +DncLKvbdMoxRVnGs +EOcLKvbduoTzqKnt +DoCjjvbdxxJKCPyk +DncLKvbdVvhwvEFH +EPDLKvbdOYPVzcnU +EOcLKvbdBdPaWJlf +DnbkKvbdJSyAsMwl +DoCkKvbdYTLaMsnx +EOcKjvbdUWLpJsaR +DoCjjvbdhbOcEwRR +DncKjvbdKfGHbAqV +DoCjjvbdlZTSSyGt +DncLKvbdatbGxLTh +EPDLKvbdiGicYvKV +EOcLKvbdTIyjRAAl +EPDKjvbdZsiIyDsO +DnbjjvbdZLqcsmlN +EOcLKvbdeOeTLTtS +DncKjvbdQdCaPqDr +EPCjjvbdUGznLvvF +EObkKvbdrDdhpNvB +EPDLKvbdRadFLhxk +DnbjjvbdhytelQmf +EPDKjvbdFkFSbhNV +DoDKjvbdaSGDHsek +EObkKvbdzHYlAMdw +DnbjjvbdliDsptrB +EPCkKvbdYlSDtNlN +DoDKjvbdnPyxujxb +EObjjvbdRkYfVGjs +EPCjjvbdRaceMJZL +EOcLKvbdnUuZkJrG +DncKjvbdOYOuzdNt +DoCkKvbdJbjDQicY +DnbjjvbdRyjHsCvA +EOcLKvbdUGzmlXVe +EPCjjvbdMoxRWOGs +DncKjvbdlrZUzTEJ +DoCjjvbdJYUBgkpp +EOcLKvbdACrXizJQ +EPDKjvbdsCGMkfkZ +DncKjvbdqYnhGqEY +DncLKvbdjgflFemk +DncKjvbdrzMQTAgn +DoCjjvbdlZTSSxgU +EPDLKvbdKCibqKCx +EOcLKvbdmJDtQuSB +DncLKvbdQcbaPqES +DoCjjvbdOXoVzdNt +EObkKvbdbsCjsdKB +EPDKjvbdySmiMqbH +DoCjjvbdrMzKZLhJ +DncKjvbdtAGqIAAr +EPCjjvbdEXxMTtUM +EOcKjvbdVrOYBdkc +DoDKjvbdzROlhiwA +DncKjvbdqTtHRrLU +DnbkKvbdiUzEwSUb +DoCkKvbdZLqcsnMN +DnbjjvbdUaBqTRRy +DoDKjvbdRosgKGEX +EObkKvbdShzKRABM +DoDLKvbdqZOhHRDx +EPDLKvbdiUzFWqtb +DoCkKvbdZyEJmbkr +DncKjvbdREDBPpdS +EPCjjvbdMSWmZtpz +EPDLKvbdTAEiHaoE +DoDKjvbdNeETiIjd +EOcLKvbdqdFJPmua +DoCkKvbdRpTfjFcw +DncLKvbdznoqEcMY +DoCkKvbdFfJqmiUR +EOcLKvbdSPsfifEX +DnbjjvbdtunYJpsA +EPDKjvbdqcdiQOVa +DnbkKvbdeXyssrFz +EPDLKvbdQYmAGrqj +EObjjvbdegjuqmpg +EOcLKvbdbLLenmcA +EOcLKvbdpyPHgREY +DoDKjvbdZRMdhmEq +DncLKvbddZxoxZRC +EOcKjvbdKxpjSztf +EPDKjvbdKkBHvAJy +EObkKvbdnBiwYOnV +EObkKvbdrWolDJYq +DoCkKvbdZyEJmbkr +DoDKjvbdkDMLRHUg +EPCjjvbdQwNccMID +DncKjvbdSZihSbvA +DncLKvbdnHFXmNgZ +DncKjvbdGKeSbhMu +DncLKvbdULvPAuoJ +EOcLKvbdYqNFJMeR +DoDLKvbdMfcPmQVL +EPDKjvbdFpATWgGZ +EObjjvbdeqaWzkbo +EOcKjvbdZoNhddzK +EObjjvbdFeiqmiTq +DoDKjvbdauBfwjsh +EOcLKvbdBraDUFvr +DoDLKvbdyYIjCPzL +DnbjjvbdmRxuZsEJ +EObjjvbdMfcQMpUk +EOcKjvbdyNsIXrhc +EPDKjvbdREDBPpcr +EPCjjvbdRkYeuGkT +EPCkKvbdtAHRIAAr +DnbkKvbdxUmFQxkn +EObkKvbdtTSTZZdc +EOcKjvbdmIdUQtqa +EOcKjvbdXrkaNUPY +DoDKjvbdCWzdIePv +DoDKjvbdbBVdfQPw +EPCjjvbdZyEJmblS +DncKjvbdlZTRrxft +EPDLKvbdIxUCIMQp +DnbjjvbdKyRKSztf +EOcKjvbdNeEUIhjd +EOcLKvbdjKGIJmXr +DoDLKvbdCEPaVimG +EPCkKvbdOFDsiIkE +EOcLKvbdehKvSORH +DoDKjvbdwWkaWAuu +EPDKjvbdpxoHfpcx +EPDKjvbdJbjCqJbx +DncKjvbdZtJJZETO +EPDLKvbdsZkpTBHn +EPCkKvbdTlWPAuoJ +DoCjjvbdjggMFfOL +DoDKjvbdfMewGlik +EPDLKvbdnBivwoOV +DoCjjvbdwuNEpxkn +DnbkKvbdiifIKNYS +EOcKjvbdKVuFdFGi +EPCjjvbdZdxGzgiC +EOcLKvbduaDxsPEh +EPCkKvbdRotHJfEX +DncLKvbdCIjajhej +DoCkKvbdcImJjfWx +EOcLKvbdKVtecdgJ +DoCjjvbdeFOrBwCj +EPDKjvbdqvpLcIxq +EObjjvbdEARiMyvw +DncKjvbdbUafxLTh +DncLKvbdLAkGmCYR +DoDKjvbdxVMdqYkn +EPDKjvbdWWiYWDdg +EObkKvbdKDJbpjCx +DoCkKvbdnPyxvKyC +DoCkKvbdZsiJYcsO +EObkKvbdJpzFOeme +EOcLKvbdOSsufeUp +DoDLKvbdTfznMWvF +EPDLKvbdfNFwGlik +EPDLKvbdCDpAuilf +EPDKjvbdbiMikGWx +DoCkKvbdrbGMkfjy +DoCjjvbdWIXuxHYz +EPDKjvbdGFiqnIsq +EPDLKvbdNGbpMpVL +EOcLKvbdtSrTYyeD +DoDKjvbdjJfHjNXr +EPCkKvbdzitpPcrt +DoDLKvbdxmrgxSiD +EPDLKvbdcJNKLFvx +EPDLKvbdsrrSxydc +DnbkKvbdqceIonWB +EPCkKvbdZnnIddzK +DoCjjvbdLYpirztf +EPCjjvbdLrWlzUpz +DnbjjvbdRkZGVGjs +EObjjvbdnBivxOmu +DoCjjvbdmIdUQuSB +EObkKvbdtcCtvuoP +DnbjjvbdANIYrvzY +DncKjvbdmaivwoNu +EOcLKvbdrouoJcWG +DoDLKvbdTppoVVIN +DoDLKvbdVUMtFkuj +DncLKvbdznpQdblY +DncKjvbdEPCkLXDE +EOcLKvbdfHkVqmqH +EPDKjvbdapGgDkzd +EPCjjvbdSPsfifDw +DoDLKvbdGKeTDINV +EObjjvbdyqPNIjXA +EPCjjvbdatbGwkUI +DoCjjvbdCTAcTewS +DnbjjvbdxnTIXsJD +EOcKjvbdbKlFnnDA +DncKjvbdjJegjNXr +EObjjvbdMuTRkNAX +EObkKvbdUxgsykOn +DoCkKvbdRaceMIxk +EPDLKvbdJbibpibx +DoDKjvbdEztQdlCi +EPDKjvbdcyyPwyRC +DncKjvbdjlbMZdfo +EPCkKvbdRXNdClID +DncLKvbdtbbuXVoP +DoDKjvbdieLHVPAO +DoDKjvbdFVxopMie +EObjjvbdzoPpdblY +EPCjjvbdmIdUQuSB +EPCkKvbdYkrEUNkm +DoCkKvbdVwIxVdEg +DoCjjvbdOSsvGdtp +EPCjjvbdmSYtysDi +EObkKvbdWWiYVceH +DoDKjvbdrNZixkgi +EPDKjvbdbVCHYKsh +DnbkKvbdjKFgimXr +EPDKjvbdNsUWHFUp +EObkKvbdeAUQlwjG +EOcKjvbdTAEiICPE +DoCkKvbdZLqdUNkm +EOcKjvbdZisHogCG +EPCkKvbdKVtfEEgJ +EObjjvbdaSGDIUGL +EPDKjvbdZRNFIleR +DoDKjvbdyXiJaoyk +EObkKvbdRkYfVHKs +DnbkKvbdLAkHNCXq +DncKjvbdJpyePFnF +EPCkKvbdkHgMFenL +DoDLKvbdOFDtIhkE +DoCkKvbdtTSTZZdc +EOcLKvbdkClKpfuH +DoCjjvbdBcpBVjNG +DnbkKvbdfMfXHNJk +DoDKjvbdBsBCtFvr +DoCjjvbdHgGzYwwg +DncLKvbdSwjkmzkY +DoCkKvbdDihJuwjA +EPDKjvbdQccBPpdS +EPDKjvbdehLVqnQg +DoCjjvbdmozZVkZC +DoDLKvbdaNKasVNH +EObkKvbdrRtkOLBN +DoDKjvbdehLWRnRH +EObkKvbdSCEEkiYk +DoCjjvbdRXOEDMID +EOcKjvbdFejRmiUR +EOcLKvbdFkEsChNV +DncKjvbdWWhwuceH +EPCkKvbdNwoVzdOU +EOcKjvbdePFSkUTr +DoDKjvbdMRwMzUpz +EObjjvbdLrXMzUpz +EPDKjvbdZxdJnDLr +EOcLKvbdrRtkNjaN +EPCkKvbdTvLoitBR +DncKjvbdKeehCApu +EPDLKvbdemFvfljL +DncLKvbdeFOqawCj +DoDKjvbdZyEJnCkr +DoCjjvbdlZTRsZHU +DnbkKvbdRbDdlJZL +DnbjjvbdYqMdiNFR +EObjjvbdSQTfjFdX +DoCjjvbdgFlZnGgA +DoDLKvbdwtldqYkn +EObkKvbdjggLfFmk +DncLKvbdMgCpNPtk +DncKjvbdmpZyWKxb +EPDKjvbdVqnYBeMD +DoDKjvbdULuoBWOi +DncLKvbdezvZEiTw +EPCkKvbdjblLRHUg +EPCjjvbdBiKakJGK +DncKjvbdTukpJtAq +DoCkKvbdkWWnEBxX +EPCjjvbdnPzYvLZC +EOcLKvbdWHxVxGxz +DncLKvbdNsUWHEtp +EObkKvbdHDkWKBij +EObkKvbdVAbQsQrZ +DnbkKvbdKCibqKDY +EObjjvbdLYqKSztf +DoCkKvbdZLrDtOMN +EOcKjvbdemFvgNJk +DncLKvbdiCOcEvpq +DnbkKvbdEXxLtTtM +EObkKvbdFjdrbglu +EObkKvbdmttykJrG +DoCjjvbdePFTLUTr +DoCkKvbdWRmwadlD +DoDLKvbdVqmxCElD +EPCkKvbdnBiwXoOV +DnbjjvbdEvZQPmKF +EObkKvbdSKyGVGkT +EPCjjvbdauBgXkTh +EPCjjvbdVrNxBeLc +EObjjvbdOEcshiLE +DoDLKvbdbLMGPNcA +DnbkKvbddZxpYYqC +DoCkKvbdlZTSTZHU +EObkKvbdtlXwBTaX +EObkKvbdHffyxwxH +EPDKjvbdrpWOicVf +DncKjvbdkVvmdBww +EPDKjvbduaDySoFI +EObkKvbdsZkosBHn +DoDLKvbdTAFJICOd +DnbjjvbdpstHRrLU +DncKjvbdUQqOtuIN +EPDKjvbdVUMtFlWK +DoDLKvbdrouoKDVf +DoCjjvbdmRyUysDi +EPDKjvbdgFkzNgHA +DnbjjvbdZshiZDsO +DnbjjvbdIMBzmwRL +EObjjvbdZshhxdTO +EOcLKvbdZGwEAOri +EPCkKvbdkHflFfOL +DoCkKvbdKDJcQibx +EOcLKvbdFkEsCgmV +EPCjjvbdJutfEEgJ +DoCkKvbdOXnuzdNt +EPDLKvbduLwwAtAw +DoDKjvbdqvpLbiZR +EPCjjvbdGYuVBEXb +EOcLKvbdCJKajhfK +DnbjjvbdkMbLyeGo +EPCkKvbdijGIKMwr +DoDLKvbdJzpGXdAN +DoDKjvbdNwnuzdOU +EOcLKvbdtSqsYyeD +EOcLKvbdmRxuZrdJ +EPDKjvbdhlEcmtcZ +DoCkKvbdbiNJjevx +DoDKjvbdGckVibJj +DoDLKvbdGLFSbhMu +EPDKjvbdEObjkWbd +EObkKvbdBhkBjiGK +EPDKjvbdtAGqIAAr +DoCkKvbdWRmwadkc +EObjjvbdQdDAoqDr +EOcLKvbdwNWANDeN +EPCjjvbdMowqVmgT +EPDLKvbdegkWSNpg +EPDLKvbdjAQHAogK +DoDLKvbdvwLaVaWV +EPCjjvbdLGFgbBQu +DoCjjvbdxsOJMrCH +EObkKvbdFkFTChMu +EObjjvbdbLLenmcA +EPDLKvbdiCObeXRR +EPCjjvbdhbObdvpq +EObkKvbdVZIUZkOn +EPDLKvbdfVzxPizs +EPDKjvbdnPyyVjyC +DncLKvbdRzKITCvA +EOcLKvbdUtMsfLuj +DncKjvbdVBBpsRRy +DnbkKvbdzeZnzdzQ +EOcLKvbdUtNTfMVj +EObjjvbdqcdiQOWB +DoCkKvbdNddTiIjd +DncLKvbdrykosBHn +EPDKjvbdWRnYBeLc +DncLKvbdrXQLcIxq +EPCkKvbdUWLpKTaR +DoCkKvbdZRNFJMeR +EPDLKvbdunszpjoU +DoDKjvbdzitpPdSt +EObkKvbdvBDxrneI +DoDLKvbdVviXvDeH +EPCkKvbdDihJuxKA +EPCkKvbdNPxQunGs +DoCjjvbdmuUzKjRf +DnbkKvbdbPffdLzd +DoDLKvbdXrlBNTnx +DoDKjvbdZQmEhmFR +EObjjvbdmttzLKRf +DoCkKvbddijRvUzn +EPDLKvbdHffyyYXg +EPCkKvbdcTDKtEJa +EPCkKvbdpecdtWAh +DncKjvbdRjxeuGkT +EPCjjvbdqdEhpOVa +EPCjjvbdelfXGmJk +EObkKvbdWWhwudFH +EPDKjvbdhbObeXQq +DoCkKvbdffLynHHA +DnbjjvbdpaJFAXIE +DoDKjvbdqZPIGpcx +DoDLKvbdmaivxPOV +DncKjvbdqFdEsvAh +EPCjjvbdrpWOibvG +EPCkKvbdyfyMAMdw +DoDLKvbdhuZdvqtb +DncLKvbdWRnYBeMD +DncLKvbdDncLKvbd +EObkKvbdhzUfLpnG +EOcLKvbddoFSkTtS +EPDKjvbdbKlFoODA +DoCkKvbdRWmccLhD +EObjjvbdeAUQlxJf +DncLKvbdKVuGEEfi +EObkKvbdVvhwvEEg +EPDLKvbdhaoDEvqR +EPDKjvbdpfEFTvBI +EPCkKvbdyzeNrIJI +DoDLKvbdGckViaij +EObjjvbdnHExNNfy +EObkKvbdZLqdUOLm +DoDLKvbdDxXktTsl +EObkKvbdFVxpPmKF +DoDKjvbdNdctJJLE +DnbkKvbdTXkMNzjx +DncKjvbdbrbkUEKB +DoCkKvbdGKeSbhNV +EPDKjvbdYSkaMtOx +EPCjjvbdiGicYujV +EObjjvbdnHFXmOGy +DoDKjvbdZyDjNblS +EOcLKvbdGYtuBEXb +DnbjjvbdqGDeUWAh +DnbkKvbdTppnuVHm +EOcLKvbdPyNAGsRj +EPCkKvbdIrxaSlxM +DncKjvbdCfkfHAzc +DnbkKvbdIHHZxxXg +EPCjjvbdjKFhKMxS +EOcKjvbdehKvRnRH +EObjjvbdxVMdpyMO +DnbjjvbdSLYetgKs +EObkKvbdRjyGUfkT +DoCjjvbdwyhFeweS +DncLKvbdrJAKElne +EPCjjvbdiGjCxvKV +EPCjjvbdCIjajiFj +DoDLKvbdunszqLPU +DnbjjvbdySmhlrCH +DnbkKvbdnBjWxPNu +DoDKjvbdlhdTqUrB +DoCjjvbdGdKvJajK +EObjjvbdkySqryHU +EPCjjvbdYkqdTmkm +EObkKvbdDnbjkXDE +EPDKjvbdKDKCqKDY +EOcLKvbdeYZstSFz +EPDKjvbdZyDjNbkr +DncLKvbdPyNAGrrK +DoCkKvbdTlVoAuni +DncKjvbdEPCkKvbd +EPCkKvbdcTCkTcjB +DnbkKvbdcJNKLGXY +DnbjjvbdRkYfVHKs +DoDLKvbdaaWEfQQX +EPDKjvbdmbJvwnmu +EOcLKvbdZyDimcMS +DoDLKvbdYkrEUNkm +DoDKjvbdmaivwnmu +DoDLKvbdqYoIHQcx +EPDKjvbdLrWlyuQz +DncLKvbdkCkkQgVH +EObjjvbdrXPlChyR +DoCjjvbdJTYaTMwl +EPCkKvbdNsTvHFVQ +DnbjjvbdeEnqavcK +EPCjjvbdVvhwuceH +EPCkKvbdbLMFoODA +EPDLKvbdCIkCLIfK +DoDLKvbdbLLennDA +DncLKvbdyNrhYTIc +EPDLKvbdNHCpNQUk +DnbkKvbddndsLUTr +DncKjvbdaogHDkzd +EPDLKvbdZjSgpGbG +DnbjjvbdaSGDIUGL +EPCkKvbdjhGlFfNk +EPDLKvbdbKkenmcA +EOcKjvbdIHHZyXxH +DoCjjvbdiUydwRtb +EPDLKvbdauBgYKtI +EPDLKvbdZMSDsmlN +DoDKjvbddneSjtTr +EPCjjvbdJbibqJbx +DnbjjvbdGYtuAcwb +DoDLKvbdsQVoJbvG +DoCkKvbdxmrhXsIc +DoCjjvbdyNsHwsJD +DoCkKvbdKWVFceGi +DoDLKvbdsBfNMGkZ +DnbkKvbdJzoewdAN +EPDKjvbdwzHefYFS +DnbjjvbdBiKbKhej +EOcKjvbdjuvmdCXw +EOcKjvbdbhmKKevx +DoCjjvbdehLWRmpg +EPCjjvbdACrYJzJQ +EOcKjvbdhuZeXSUb +DoCkKvbdJcJbqJcY +EPDKjvbdYqMeJNEq +DncLKvbdmJDtRUqa +EPDKjvbdnBjWxOnV +DoDLKvbdOEctJIkE +DoCjjvbdDxYLtTtM +EOcLKvbdZnnJFFZj +EOcKjvbdKRZeOfNe +DoCjjvbdTukpJtAq +DoDKjvbdhyuGLpnG +DoDKjvbdhtzFWrUb +DnbkKvbdQccBQRDr +EPCjjvbdTukojUBR +EPDKjvbdeKKRvUzn +EOcLKvbdeXzTtSFz +DncKjvbdyTOJNSCH +EObkKvbdjmBkydfo +EPCjjvbdelevflik +DoDKjvbdZtJIxcrn +DoDKjvbdqiAJeNOe +DoCjjvbdddnqavbj +DoCjjvbdZLrDtOMN +EPDKjvbdZyEKNcLr +EObkKvbdMgDPmQVL +EPCjjvbdxrmiMrBg +EObjjvbdZGvdAPSi +EPCkKvbdvvkaWBWV +DncKjvbdfMewHNJk +DoCjjvbdlrYtyrdJ +DncLKvbdiLeDnVCy +DnbjjvbdvwLaWBWV +EOcLKvbdVBCRSprZ +DoDLKvbdYzbfSKVy +DnbkKvbdXrlBNUPY +EObjjvbdKfFhCAqV +DoCkKvbdVTmTekvK +EPDLKvbdaSGChTfL +DncLKvbdauCGwjsh +EObjjvbdBcpBWJlf +DnbjjvbdZjTIQHCG +DoCkKvbdDjHiuxKA +EObkKvbdZxdKNblS +DoDLKvbdptTfrRjt +DoDLKvbdJbjCqKDY +EOcKjvbdEJhKWYKA +DnbkKvbdssSSyZeD +EOcLKvbdZshhyESn +EPDKjvbdRjxfUgKs +DncKjvbdwygefYEr +EPCkKvbdiLeEOVCy +DnbkKvbdTvLojTaR +DoCkKvbdzdzOzdyp +EPDKjvbdVUNUGMWK +EObjjvbdqdEhonVa +EPDKjvbdKefHbAqV +DncKjvbdtSqsYzFD +DoDLKvbdZjTIPgBf +EPCkKvbdRjyFuHLT +EOcKjvbdUtMsfLvK +DoCjjvbdnHEwlnGy +DnbjjvbdURQnttgm +DoCkKvbdFfJrOIsq +DoDLKvbdjKGIKMwr +EOcKjvbdTAEiIBnd +EPDLKvbdFxttaEXb +DoDKjvbdJTZAsNYM +EPCkKvbdFejSNhtR +EPDKjvbdwkXEHzyf +DnbjjvbdbUafxLTh +DoCkKvbdZQleJNEq +EPCjjvbdmpZyVkZC +DnbjjvbdmJEUQuRa +EObkKvbdrEFIpNua +EOcLKvbdJpzEnfNe +DnbjjvbdyTNiMqag +EObjjvbdNQYQvOHT +EPDKjvbdGKdrbgmV +EOcLKvbdCJKakIej +DncLKvbdlhcsptrB +DnbjjvbdZirhPfaf +DncKjvbdZoNiFFZj +EOcLKvbdjuwNcaww +EOcKjvbdUyITzLPO +DnbjjvbdxVMdpyLn +EObjjvbdnCJwXnnV +EPCjjvbdIMBznWqL +EObkKvbdJpzFOenF +EObjjvbdlhdTpuRa +DncLKvbdSCDdkiZL +EObjjvbdZxcimcMS +EOcKjvbdxVMdqZLn +DoCkKvbdrJAKFMne +EObjjvbdXsMAmUPY +EObjjvbdeFOqbWbj +DncKjvbdCTBCsfWr +DoCjjvbdRyjHsCvA +EPDKjvbdziuQQDrt +EOcLKvbdziuPocrt +EPCkKvbdWWhwvEEg +EPCkKvbdeEoRavcK +EPCjjvbdSKyFuGkT +EPCjjvbdrEFIonWB +EObjjvbdrEFIpOVa +DncKjvbdzGyMANEw +EPDKjvbdrRtjmjaN +DoCkKvbdJbjDRKDY +EObkKvbdfNFvgNKL +DnbkKvbdZHWdAPTJ +EPCjjvbdCDoaWKMf +DncLKvbdJKEAKPgE +DnbjjvbdssSTYydc +EOcKjvbdIsYaTNYM +EPCkKvbdgPazvcxI +DoCjjvbdmozYvLYb +DnbkKvbdeATqNYKG +EObjjvbdIwsbIMQp +EPDLKvbdpssfrSKt +EPCkKvbdhzUfLpmf +EOcKjvbdNGcPlpUk +DncLKvbdhkeEOVDZ +EPDKjvbdLFfIBaRV +EPCkKvbdJuuGEFGi +EOcKjvbdRacdlJYk +EPCjjvbdmbKWxOmu +EPDLKvbdwtmFQxkn +DnbjjvbdgvyAzzAJ +EPDKjvbdNrsugFVQ +DncKjvbdmttzLKRf +DnbkKvbdZyEKNcLr +EObkKvbdxrmiNRag +DoDLKvbdiMFDnVCy +EObjjvbdWSNxBdlD +DnbkKvbdCTBDUFwS +DoDKjvbdYTLaMtPY +EOcLKvbdZtIiZDrn +EObjjvbdYzcGSJvZ +EObkKvbdCSaDUFvr +DoCjjvbdTppnuUgm +DoCkKvbdOTUVfduQ +EOcLKvbdfpBzwDwh +DncKjvbdGBPQyJzm +EPCjjvbdVZITyjnn +EObkKvbdVhXuxGxz +EObjjvbdiifHimXr +EPDKjvbdvwMAvAvV +EOcKjvbdkWXODbYX +DoDKjvbdmbKXXnnV +DoDLKvbdZsiJZDrn +DoCkKvbdlrZUzTDi +DoDKjvbdSQTfjGEX +EOcKjvbdqcdiPnWB +EOcLKvbdpssgSSKt +EPDLKvbdhkeENuCy +EPDKjvbdZQmEhmEq +DoDKjvbdZtJIxcrn +DncLKvbdhgJbxujV +DoCkKvbdDoDKkXCd +EObkKvbdZGvdAOsJ +EObkKvbdwjvdHzyf +EPCjjvbdUQpoUuHm +EPDKjvbdUGznMXVe +DnbjjvbduaEYroFI +DoDLKvbdehLWRnRH +DoDLKvbdgQBzwEYI +EObkKvbdbUagYKsh +EObjjvbdyqPMhiwA +EPDKjvbdvvkaWBWV +DnbkKvbdJTYaTNYM +DoDKjvbdZtIhxdSn +EOcLKvbduaEZTOdh +EObjjvbdkNCMZeGo +EPCjjvbdZLqdTnLm +DoCkKvbdUsltFkuj +DncKjvbdnPyyVkZC +DoDLKvbdwjvdHzzG +EPCkKvbdGKdsCgmV +DnbjjvbdiMFDmtby +EObjjvbddneSjtUS +DncLKvbdezvZFJUX +EPCjjvbdhbOcFWqR +DoCkKvbdaMjbTVMg +DoDLKvbdHDjvKCJj +EOcLKvbdpxoIHRDx +DoDKjvbdZshhxcrn +EOcLKvbdcJNKKewY +EObjjvbdTppntuHm +EPCjjvbdemGWfmJk +DoCkKvbdjcLkQftg +EObkKvbdQwODbkgc +EPDLKvbdCTAcUFwS +DnbjjvbdvOszpkPU +EOcKjvbdkClLRHUg +EOcLKvbdNHCpMpVL +EObjjvbdZMRcsnMN +DoCjjvbdpxnggQcx +EOcKjvbdyTOJNRbH +EPDKjvbdeKKRutzn +DncKjvbdrzLosAgn +EPDKjvbdYzcGRjWZ +EPDKjvbdQcbaPpdS +DnbkKvbdtkxXAsaX +DncKjvbdCDpAvKMf +EPDKjvbdHEKvKBjK +EOcKjvbdfpBzvdYI +DncLKvbdiifIJmYS +EPDLKvbddeOqbWbj +DnbkKvbdZyDinDMS +DoDLKvbdkNCLydgP +EOcLKvbddePSCWbj +DnbkKvbdZxcjNcMS +DoCjjvbdQwNccMID +EPDLKvbdiiehKMwr +EOcLKvbdCTBDUFwS +EPDLKvbdbLMGOnDA +EOcLKvbdUMWOaVni +DnbjjvbdyqPMhjXA +DncKjvbdCTAbsewS +DncKjvbdMpYQvOHT +EPDKjvbdTqRPVVIN +DoCjjvbdZxdJnClS +DoCjjvbdWSNwbElD +DnbkKvbdrWokcIxq +EObkKvbdWIYWXgYz +EPDKjvbdzitopDsU +EObjjvbdUVkojUBR +EPDLKvbdEObkLXCd +EOcKjvbdrbFmMHKy +DnbjjvbdehKuqmpg +EOcLKvbdZshiYcrn +DoCjjvbdZnnIdeZj +EOcLKvbdmttzLKRf +EObjjvbdGZUuBDwb +DoCjjvbdHDjvJaij +DnbjjvbdKQzFPGNe +DncKjvbdRbDeMJYk +DoCjjvbdezuyEhsw +DoDKjvbdwkWdHzzG +DncKjvbdEASJMyvw +DncLKvbdyfyMANEw +EPCjjvbdCSaDTfXS +EOcKjvbdCJKajiGK +EObjjvbdrJAKFNOe +DnbjjvbdFWZPoljF +DnbjjvbdmpZyVjyC +EPDKjvbdiifIKNYS +DncKjvbdGAnqYizm +EOcKjvbdiMFEOVDZ +DnbjjvbdJXtBglRQ +DoCkKvbdijGHilwr +DoCjjvbdDwxMUUUM +DoDLKvbdUMWPBVni +EPCjjvbdDwwksssl +DnbkKvbdNeDshhkE +EObkKvbdbAudfQQX +DnbkKvbdwuMdqZLn +DnbjjvbdijGHjNXr +EPCjjvbdOFETiIkE +DoCjjvbdxsOImSCH +DoCkKvbdLiBkqYAS +DncKjvbdFkFTDHmV +DoCjjvbddoErjstS +EObjjvbdyOTIXsIc +DncKjvbdeXzTtSFz +DoCjjvbdqdFIonWB +EPDLKvbdMpYRWNgT +DoDLKvbdfNGXHNJk +EPCjjvbdePErkTsr +DoCjjvbdNHCpNQVL +EObjjvbdsQVnjCuf +DnbjjvbdtcDUwWPP +DoCjjvbduaDySndh +EPDKjvbdqZPIGqDx +EObjjvbdijFgimYS +DncKjvbdZyEJmblS +DoDKjvbdirziSkJz +DncLKvbdeOeTKtTr +EOcKjvbdfpBzwEYI +DnbkKvbdezvZFItX +EPCjjvbdrRuLOKaN +DncLKvbdbrbjscjB +EObkKvbddBrlrAUN +EPDKjvbdZoOIdeZj +EOcKjvbdGYuUaEYC +EPCkKvbdNxPVzdNt +EOcLKvbdhlFDmuDZ +DncKjvbdKVtecdgJ +EPDLKvbdqlzJxkhJ +EOcKjvbdySmhlqbH +EPCkKvbdxsNiNRag +EPDKjvbdTYKkmzjx +EObkKvbdIryBTMxM +EPDLKvbdxnShXsIc +EPCjjvbdaSFbhUGL +EObjjvbdRDbaQQdS +EObkKvbdrbFmMGkZ +EPCkKvbdWXJXudEg +EOcLKvbdcJNKKfXY +DncKjvbdEuxpPljF +DncKjvbddCTNSATm +EOcLKvbdFVyQPmKF +EPCkKvbdpeceUWBI +DoDLKvbdVTmUGMWK +DoCjjvbdFyVVBEXb +EOcLKvbdTukpKTaR +DncLKvbdDHLegAzc +EPCjjvbddxZtTrFz +DncKjvbdssRsZZeD +DoDKjvbdeOeSjstS +DoDKjvbdQdDApQcr +DncLKvbdURQoUuIN +DnbkKvbdezuxdiUX +EPCjjvbdbPgHDkzd +EOcKjvbdFWZQQMjF +DoDKjvbdMfcQMotk +EPCjjvbdrWokbiYq +DoDKjvbdnGdwmOGy +EOcKjvbdnBjXYOmu +EOcLKvbdDoCjjvbd +DoDLKvbdsQVoJbuf +EObkKvbdZirhQHBf +EPCkKvbdIGgZxwwg +DncLKvbdrMzKZMIJ +DnbkKvbdkHflFemk +EObkKvbdfHkWSORH +DnbkKvbdwygfGYEr +EOcKjvbdxmrgxTJD +DnbjjvbdGdLViaij +DoDKjvbdmSYtysEJ +EObkKvbdfILVqmpg +DncLKvbdADSXizIp +DoCjjvbdznpQdbkx +DncLKvbdmbKWxOnV +EPCkKvbdJvUfEEfi +EOcLKvbdcScLTdJa +DnbjjvbdQcbaPpdS +EPDKjvbdDoDKjvcE +DncKjvbdhzUfMROG +DncKjvbdbrcKtDia +EOcLKvbdJpydoFme +DnbjjvbdxLWdHzyf +EPCjjvbdwuMeQyMO +EOcLKvbdiifHimXr +EOcLKvbdySmiNSCH +EPCjjvbdznopeCkx +EPDLKvbdZshhyESn +DoDLKvbdrDeJQNvB +DoDLKvbdILaznXQk +DoCjjvbdnUtzKiqf +DnbkKvbdjJehKMwr +EOcLKvbdDxXlUUUM +DoCkKvbdtSqsYyeD +DoDKjvbdxVMeQxlO +EPDLKvbdZjTHofaf +EObkKvbdZisHogBf +DnbkKvbdnBiwXoOV +DoCkKvbdYSkaMtPY +DncLKvbdHELVibKK +EPCkKvbdhlEcnVCy +EPCkKvbdZLqdTnMN +DoDKjvbdbsCkUEKB +EPCkKvbdMpYRVnHT +EOcLKvbdFWZQPljF +DoDLKvbdznoqEcLx +DnbkKvbdcImJjewY +EPCkKvbdvvlBVaWV +DoCkKvbdmIdTqUrB +DncKjvbdxZgeexFS +EOcLKvbdrouoJbvG +DoCkKvbdWRnYBdlD +DoCkKvbdBhjbLJFj +DnbjjvbdrouoKDWG +DoDKjvbdUxgsyjnn +DoDLKvbdakMFnnDA +EOcLKvbdZtJJYcsO +DncLKvbdrbFllHKy +EPCjjvbdmajXXnmu +DncLKvbdpyPHgQdY +EObjjvbdyNrgwsJD +EPCjjvbdaMjaruMg +DncLKvbdYfwEAPTJ +DoDKjvbdbiNKLFvx +DoCjjvbdajkfOnDA +EObjjvbdZoOJEeZj +EOcKjvbdqZOhGqEY +EOcKjvbdziuPodTU +DoDKjvbduLxWaUBX +EObkKvbdyXhjBoyk +DoDKjvbdTkunaWPJ +EObkKvbdBraCsfXS +DoDLKvbdTAEiICPE +DnbkKvbdDjHjVwjA +EOcKjvbdqlzKZLhJ +EObkKvbddneTLTsr +EObkKvbdWRmwaeMD +DoDLKvbdLBLHNBwq +DoDLKvbdUxhUZkPO +DncKjvbdYlSDsmkm +DoCkKvbdxZhGFwdr +EObjjvbdbsDKsdJa +EPCkKvbdGYuVAdYC +EObkKvbdRXNccLhD +DnbjjvbdFVxpQMjF +DoDLKvbdMgDQNPtk +EObkKvbdQvmccMHc +DncKjvbdMpXqVnHT +DoCjjvbddZxoxYqC +DncKjvbdnVUzKjRf +DoCjjvbdEuyQPmKF +DoDKjvbdLYqKSzuG +EPDLKvbdTAFJICOd +DoCjjvbdCJLCKiFj +EOcLKvbdFyVVAcwb +DoCjjvbdbQHHDkzd +DoCkKvbdNrsvGduQ +DnbjjvbdRWmcblID +DnbkKvbdQvnEDLgc +DnbjjvbdVZITzKnn +EPDLKvbdxxJJaoyk +EObkKvbddoEsLUTr +DncLKvbdZQldhldq +DoDLKvbddCSmSAUN +DoDLKvbdYpldhldq +DoDLKvbdDxXlUTsl +EPCkKvbdnGdxMmfy +DncKjvbdwWlBWAuu +EOcLKvbdkDMKpgUg +DoDLKvbdZshiYdSn +EPDLKvbdhfjCyWKV +EObjjvbdKRZeOeme +DoCkKvbdznopdcLx +EPCkKvbdZMSDsnMN +DnbkKvbdkWWmcbXw +EObjjvbdpxoHfqEY +DnbkKvbdtlYXAsaX +EPDLKvbdjvXNcaww +EPDLKvbduDDVXVoP +DoDKjvbdLGFgbBQu +EObjjvbdmuUzLKRf +EObjjvbdRaceMIyL +EPDLKvbdiHKCyVjV +DoCkKvbdxnTHwriD +EOcLKvbdZjTIPgCG +DncLKvbdBcpBVjNG +EPDLKvbdVwIxVceH +DoCkKvbdkIGkeemk +DnbkKvbdozmdKxPA +DoDKjvbdjuwNdCXw +DoCkKvbdeEoSCXCj +EPCkKvbdcScKtEJa +EPDLKvbdySnIlrBg +EPCjjvbdnQZyVkYb +DoDLKvbdqYnggREY +EObkKvbdBsBDUGXS +DnbkKvbdUWLoitAq +DoCkKvbdIGgZxxYH +DoDLKvbdvwLaWBVu +EObjjvbdmfeXlnHZ +EPDLKvbdRXNdDMID +EPCjjvbdZLrDsmkm +EOcKjvbdUQpoUuHm +DnbkKvbdEzsqFMDJ +EOcLKvbdQlwayOUz +EPDKjvbdyzdnRhJI +DoDLKvbdwzHfGXeS +EOcKjvbdTvMPitBR +EOcKjvbdJbicRJcY +DoDLKvbdFVxpQNJe +DoDLKvbduLxXBTaX +DoCjjvbdLYpirzuG +DnbjjvbdvwMAvBWV +EPCkKvbdBiKbKiFj +DncLKvbdIryArmYM +DncKjvbdySmiNRag +DncKjvbdeEoRbWbj +DoDLKvbdjuwOECXw +EPDLKvbdFWZPomJe +EObkKvbdjcMLRGtg +DncLKvbdQwNccMHc +EPDLKvbdzQoMiJwA +DoDKjvbdmSYtzSdJ +EOcLKvbdelfWgMjL +EOcLKvbdiMFENuCy +EPCkKvbdezvZEhsw +EPDLKvbdUVlPisaR +EPDKjvbdbKlGOmcA +EObkKvbdzGyMANEw +DoDKjvbdXFxzUAPT +EPDLKvbdqrUkNkAm +EOcKjvbdPxmAGsSK +EOcLKvbdyfyMAMeX +EObjjvbduDDUwVoP +DncLKvbdyYJJbQZk +DoDLKvbdxVNEqYkn +EPCjjvbdNPxRWOHT +EObkKvbdYqNEiNEq +EPDKjvbdXrlAlsoY +EPDLKvbdbrcKtEJa +EObjjvbdGdKvJbJj +DoCjjvbdrDeJPnVa +DoDKjvbdZLrETnMN +DoDKjvbdKVuGDeGi +DoCkKvbdZtJIyETO +EObjjvbdYSlAlsoY +DoDLKvbdCSaDUGWr +EObjjvbdmfeYNNgZ +DoDKjvbdtumwiqTA +DncKjvbdqFdEtWAh +EPCkKvbdauCHXjtI +DnbjjvbdvOszqKoU +EOcKjvbdxrnImSBg +DoCkKvbdjvWmdBww +EPCjjvbdmuUzKiqf +EObjjvbdNdcsiIjd +EOcLKvbdNPxRVnGs +EObkKvbdSPsgKFdX +EPDLKvbdVAbQsQqy +EPDKjvbdVZHsyjoO +DncKjvbdJzofXdAN +EObkKvbdFjeTChNV +DnbjjvbdjJegjNXr +DnbkKvbdZLrDsnLm +DnbjjvbdbAueGQQX +DncLKvbdQcbaQQdS +DnbjjvbdFjdrbglu +DncLKvbdAMgxsWyx +DnbjjvbdRpUHKGDw +DncLKvbdMfcPlpVL +EObjjvbdIwtBhMRQ +EPCkKvbdelfXGmKL +DoDLKvbdFkErbhMu +EPCjjvbdHffyyYXg +DoDKjvbdOEctJIkE +DoCkKvbdKkAgvAKZ +EObjjvbdzitopDsU +EPCjjvbdRpUHJfEX +DoCkKvbdZLrDtNkm +EPCkKvbdijGIKNXr +DoCjjvbdxUmEpxlO +DnbjjvbdIxTbIMRQ +EPCkKvbdMfbpMotk +DncLKvbdjlbLzFGo +EObkKvbdrRtkNjaN +DnbkKvbdRosgKFcw +EPDLKvbdpfDeUWAh +DnbkKvbdkxsRryHU +EPCkKvbdkVvmcbXw +EOcKjvbdhficZWJu +EPDKjvbdCEQBWKMf +DoCjjvbdUyITzKoO +DnbjjvbdaNKbStmH +EPDLKvbdFWYpQMie +EObjjvbdhytekqNf +EObjjvbdeXyssqez +DnbkKvbdLAjgNCYR +DncKjvbdSBdFLiZL +EPDKjvbdBhkBjiGK +DoDKjvbdmajWxOmu +DoCjjvbdrMzJyMHi +DoDKjvbdZLqctOMN +EOcKjvbdnPzYujxb +DncKjvbddoFTKstS +DncLKvbdjcMLRGuH +DoCkKvbdbUagYKtI +DncLKvbdVAaqTRSZ +EPCjjvbdOEdTiJLE +EPCjjvbdJvUfEFHJ +DnbjjvbdIryBTNYM +EPDKjvbdYpleJNEq +DncKjvbdZGwEAOri +DncLKvbdBdQAvJmG +DoCkKvbdmIdTqUqa +EPCkKvbdtcCuWuno +EPCjjvbdmuUyjjSG +DncLKvbdjAQHApHK +EPCjjvbdGdKujBjK +EPDKjvbdYkrETmlN +DncKjvbdYORAYUut +DnbkKvbdiHKCxvJu +EPCjjvbdkHgLfGOL +DoCjjvbdpssfqqkU +EPDKjvbdZnmheEzK +EPDLKvbdySmhlrCH +EPCkKvbdjJegilxS +DoCkKvbdqcdhpNua +EPDKjvbdIHHZyXxH +DnbjjvbdjmBkydgP +DoCjjvbdYkqcsnLm +EPCkKvbdZnmhdeZj +EPDLKvbdDjIJuwjA +EOcLKvbdnQZxvKyC +EPCkKvbdBhkCKiGK +DnbjjvbdYkrDsnMN +DncLKvbdyzeNqghh +DncLKvbdrRuKmjaN +EPCjjvbdssRsYzEc +DoDLKvbdZQleJNFR +EObjjvbdZQleJMeR +EPDKjvbdtvNxJqTA +EObjjvbdbBWFGPpX +EPDLKvbdajkeoODA +EPDLKvbdSZihTCvA +EObkKvbdZMRdTnMN +EPCkKvbdsCFmLgKy +EObjjvbdVvhxVceH +EPCkKvbdaaVeFpQX +DoCjjvbdZQmEhleR +EOcKjvbdhzUfLpmf +EPCkKvbdREDBQRDr +DncLKvbdemFwHNJk +EOcKjvbdGAnqYizm +DncLKvbdtTRsZZdc +DoDLKvbdGGKRmhtR +DoDLKvbdIidAJogE +DoCkKvbdxZhGFxEr +DncLKvbdpxoHgREY +DnbjjvbdQcbaQRES +EPDKjvbdjAPfaPgK +EPCkKvbdvwMAuaWV +EOcKjvbdZLrDsnMN +DncKjvbdyqOlhiwA +EObkKvbdRacdkiYk +DoDKjvbdUWMQJsaR +EPDKjvbdUGzmkvvF +DoCjjvbdhbPDFXRR +EObjjvbdXGZZtAPT +EPCjjvbdMoxRWNgT +EOcKjvbdGFiqmhtR +DoCkKvbdNPxRWNgT +EObkKvbdyNrgxTJD +EPDKjvbdrXPkcJYq +EOcLKvbdFjeTChMu +DncKjvbdjvXNcaww +DncKjvbdkMbMZdgP +EOcKjvbdDnbkLXDE +EObjjvbdbBWFGPow +DoCjjvbdAMhZSwZx +EPDLKvbdZRNEiMeR +DoDKjvbdqdEiQNvB +DoCkKvbddePRavbj +EPDKjvbdaMjbStlg +EObkKvbdHgGyxxYH +EOcKjvbdtkxXBUAw +DnbjjvbdmSZUysEJ +EObkKvbdrXQLbhxq +EObkKvbdVTlsfMWK +DoDKjvbdSLZGUfjs +DoCkKvbdFVyPpMjF +DoCjjvbdhgKCyViu +EPCkKvbdZMSDtOLm +EPCjjvbdySmhlqag +EPDKjvbdWRmwadlD +EPCjjvbdqZPHfpdY +DoDLKvbdXsMBMsoY +DncLKvbdelewHMjL +EObjjvbdYpleImEq +DoDKjvbdZirgogBf +EOcLKvbdrXPlChxq +EPCkKvbdFVxpQMie +DoCkKvbdrNZjZMHi +EOcKjvbdDjIJuxKA +DncLKvbdeOeSkTsr +DoCjjvbdZoNhddyj +DoDKjvbdkWXNcaxX +DoDLKvbdTpqOtthN +DnbjjvbdehKuqnQg +EPCjjvbdmgFXlmfy +DncLKvbdShyiqAAl +EOcKjvbdKaKgNBwq +EPDKjvbdEztREkbi +EOcKjvbdVviXvEFH +EPDKjvbdcIlikGWx +EPCkKvbdUWLojUAq +EPDLKvbdOStWHEtp +DoCjjvbdHlBzmwRL +DnbjjvbdWIYVxHYz +EPDLKvbdADSXjZhp +EPDKjvbdRzJgrcWA +EObkKvbdxrnIlqag +EObjjvbdRosgKFcw +DoDKjvbdkySrTYgU +DncKjvbdsrqrxydc +EPDLKvbdZyEKODLr +EPCjjvbdEXxMUUTl +EOcKjvbdtcCtwWOo +DncLKvbddndrkTtS +EPDKjvbdrafMkfjy +EPCjjvbdJcJbpibx +EObkKvbdFfJqnIsq +EPCkKvbdyNsHwriD +DoCjjvbdaRebgsfL +DnbjjvbduoTzpjnt +EPCjjvbdZGvdAOsJ +DoDKjvbdmozYujyC +EPDKjvbdZGvdAPSi +DnbjjvbdmSYtzTDi +DoCjjvbdRotGjFdX +EObkKvbdSBceLhxk +DoCjjvbddijRvUzn +EObkKvbdMgDQNPtk +DoCkKvbdFVxoomKF +DncKjvbdGcjujBjK +EPDKjvbdBcpAvJlf +DncLKvbdLBLHNCYR +EObkKvbdmIctQtrB +DoDLKvbdFpATXGey +EPCkKvbdbrbkUDjB +DncLKvbdcTCjtEJa +DncLKvbdBsAbsfXS +EPDKjvbdFpATXGfZ +DoDKjvbdwuMeQxlO +EObkKvbdqUUGqrKt +DncKjvbdZyEKODLr +EPDKjvbdjhHLefNk +EPCkKvbdrbFmMGjy +DoCkKvbdsQWOjCvG +DoCjjvbdLBLHMbXq +EObjjvbdrpVnicVf +EPCjjvbdVqmwaeMD +DncLKvbdRNYCYnUz +EObjjvbdRXNdCkhD +DncKjvbdIHHZyYXg +DnbjjvbdyTOJMrCH +DoDLKvbdUsmUFkuj +DncKjvbdQcbaPqES +DnbkKvbdmgFYNNgZ +EOcKjvbdkySrTYgU +DoCjjvbdHlBzmwQk +DnbjjvbdaSFcITek +EObjjvbdQdCaPqDr +DncKjvbdxVMdpyLn +EOcKjvbdiMEdOVCy +DoCjjvbdRosgJecw +DncLKvbdkDMLQftg +EPCkKvbdKDKCqKDY +DoCjjvbdjvWnDaww +EOcLKvbduVnYJpsA +DoDLKvbdWRnYBdlD +DoDKjvbdssSSxzFD +EPDLKvbdJYTaglRQ +EOcLKvbdhzUfLpmf +DoDLKvbdJutfDdgJ +EOcKjvbdxmrgwrhc +EObkKvbdwWkaVaVu +EOcKjvbdxrmiMrBg +DoDKjvbdRDcApRES +DoCjjvbddjJrVtzn +EOcKjvbdxVNEqYlO +DoCjjvbdJJdAJofd +DoDLKvbdemGWfmJk +EOcKjvbdnPyyWKyC +DoCjjvbdbrcLTcia +DoDKjvbdjuvmdCXw +DncLKvbdtkwvaUAw +EOcKjvbdHDkViaij +EObkKvbdRDbaPpcr +EOcLKvbdtSqryZeD +EOcKjvbdrRuLOKaN +EOcKjvbdczYowyRC +DnbkKvbdjcMLQfuH +DncKjvbdmbJwYOnV +EPDLKvbdZnmiFEzK +EPDKjvbdjbkkQgVH +EObkKvbdJTZArmYM +DncKjvbdSPsgJfEX +DncLKvbduMYXBUBX +EObkKvbdkIHMFfOL +EOcKjvbdYORAYVWU +DoCjjvbdyzdmqghh +DncLKvbdtumwiqTA +EPDKjvbdQmYCZOUz +DoCjjvbdtcCtvvPP +EObjjvbdVTmUGMVj +EObkKvbdBsAcUGXS +DoCjjvbdqYngfqDx +EPCkKvbdtkxXBTaX +DoDLKvbdACqwiyhp +DncKjvbdraelkgKy +EPDKjvbduLwvaUBX +DncKjvbdpssgSSLU +EPCjjvbdIxTbHlRQ +EPDKjvbdPyNAGrqj +DoDLKvbdnCJvxOnV +EObkKvbdZRNFJNEq +DoCjjvbdFxuVBEYC +EOcKjvbdVAbRSpqy +DnbjjvbdJbibqKDY +DoDLKvbdKCicQjCx +EPCjjvbdNrtVgFUp +EOcLKvbdZQleJNEq +DoDLKvbdaRebgsfL +DoCkKvbdCIjakIej +EOcLKvbdBraDUGWr +EPDLKvbdADRxKZiQ +DoCjjvbdHkazmvpk +EPDKjvbdUsltGLvK +EOcKjvbdTkvOaVoJ +DncLKvbdZnmiEdyj +DoDKjvbdZtJJYdSn +DoDLKvbdbiNJjfWx +DnbjjvbdIsZBTNYM +EPCkKvbdhbPDEvpq +DncKjvbdqlyjYlIJ +DoCkKvbdbsDLTcia +DoDKjvbdKCjCqKCx +DoDLKvbdnBiwYOmu +DnbkKvbdjKGIKMwr +EPCjjvbdHgGyxxYH +EOcLKvbdcyxpXxqC +DncLKvbdlZSrSyGt +EPCjjvbdTAFIhCPE +EObkKvbdZdwfzgiC +DoDLKvbdSLYfUgLT +DoCjjvbdRMwayNtz +DnbjjvbdCflGHAzc +DoCjjvbdrJAKFNOe +EPCjjvbdjblKpgUg +EPDLKvbdQccAoqDr +DnbjjvbdCJKbKhfK +EPDLKvbdiGibyWJu +EOcLKvbdyNsHxShc +EPDLKvbdmIcspuSB +DnbjjvbdnGdxNOHZ +DoCkKvbdhzVGMRNf +DoDLKvbdeFPRawDK +EObjjvbdsQWOjCvG +EObkKvbdhzUelQmf +EObkKvbdeJirWUzn +DncLKvbdxxIibPzL +EObkKvbdSBceMIxk +DoCkKvbdehKvRmqH +EObjjvbdRbDeLiZL +EObjjvbdGYtuAdYC +DnbjjvbdHDkVibKK +DoCjjvbdKQyeOfNe +DoCkKvbdmbJvxOmu +DoCkKvbdULvOaWPJ +DncLKvbdrWpMCiZR +EObjjvbdhytfLqNf +DoCjjvbdgPazvdXh +DoCjjvbdiHKDYuiu +EPDKjvbdRWnDbkhD +DncLKvbdrMzKZLhJ +EObkKvbdyXhiaoyk +EPCkKvbdjmCLydfo +DnbkKvbdDxYMUTsl +EPDKjvbdxmrgxSiD +DnbkKvbdmSYtyrci +EPCjjvbdqvokcIxq +DoDLKvbdXsMAmUPY +DncKjvbdDoDKkWcE +EPCkKvbdMgDPmQUk +DoDLKvbdKyQirztf +EPCjjvbdmajWwnmu +EOcLKvbddCSlrATm +EPDLKvbdrJAKElne +DoCkKvbdIsZBTMxM +DnbkKvbdffMZnGgA +EOcKjvbdJcKDQjDY +EObjjvbdxsOJMrCH +EObkKvbdEKHiuwjA +DncKjvbdunszpjnt +DoDLKvbdZjTIQHCG +DnbjjvbdsQVnibvG +DnbkKvbdGQATXHGZ +DnbkKvbdBsBDTfXS +DoCkKvbdBsAbsevr +DoCkKvbdRXNdDLhD +EPCjjvbdRadElJZL +DnbkKvbdxwhibPzL +EOcKjvbdCJLBjiFj +DncLKvbdZMSDsmkm +DoDKjvbduaEZSoFI +EPCjjvbdhgJbxujV +EOcLKvbdCJLBjhfK +DoCkKvbdZisHpHBf +DoCkKvbdqFdFUWBI +EPCkKvbdDGlFgAzc +DncKjvbdZxcjNblS +EPDLKvbdLqvmZuQz +DoDKjvbdxZhGFxFS +EObkKvbdZdxGzhIb +DoDLKvbdqwQMChyR +DoCkKvbdjlalZeGo +DncKjvbdZRNEhldq +EPCkKvbdZHXEAPSi +DoDKjvbdDoDLKwCd +DnbkKvbdmbJwYPNu +DncKjvbdMfcPlouL +DoCkKvbdQwODblHc +DoCjjvbdNQYQunGs +DnbjjvbdlqxtzSci +EOcLKvbdrDdhpNua +DncLKvbdKefICApu +EPDKjvbdatagXkUI +DoCjjvbdaofgDkzd +EObkKvbdIrxaTMwl +DncLKvbdSLYfVGkT +EPCkKvbdelevfmKL +DncKjvbdFfKSOIsq +EObjjvbdfILVqnQg +DncLKvbdZjShPgCG +DoCjjvbdrNZixlHi +DnbkKvbddoFTKstS +EOcKjvbdWSNwbFMD +EPDLKvbdpxngfqDx +EOcKjvbdIHGyxxYH +EOcLKvbdvwMAuaVu +EOcKjvbdkxrqryGt +DncLKvbdZjShQHBf +DnbjjvbdiUzEvquC +EObkKvbdpxoHfpcx +DoCkKvbdGAoRZJzm +EOcKjvbdehLVrOQg +EPDKjvbdkDMLRGuH +DnbkKvbdKCjDRKDY +EPCjjvbdLGFhBaRV +EPDLKvbdaMjbSuNH +DncKjvbdWfYzUAOs +DoCjjvbdsBelkfjy +DncLKvbdZnmheFZj +EOcLKvbdatagYLUI +EObkKvbdWXJXvEEg +DoDKjvbdZMRdTmlN +EPCjjvbdWXIwvEEg +DoCjjvbdkCkjqHUg +EPCjjvbdijFhJlxS +EPDKjvbdmSZUysEJ +DoDKjvbdMgDQMouL +EPCkKvbdrDdhomvB +EPCjjvbdRNXbYmtz +EPCkKvbdUtMtFlWK +DnbjjvbdGcjvJajK +EPDKjvbduaDyTOeI +DncLKvbdziuPocrt +DoCjjvbdcScKscjB +DncKjvbdmgExMmfy +EObjjvbdJcJcQibx +EPDKjvbdMpXpvNfs +EObkKvbdyqPNIjXA +EPCjjvbdCSaDUGWr +EOcKjvbdZnnJFEyj +EObkKvbdyOSgwriD +EPCjjvbdtkwwAtBX +DnbkKvbdDncLLXDE +EOcKjvbdZshhxcsO +DoCjjvbdxVMdpxlO +DncKjvbdLGGHaaQu +DoCkKvbdxUmFQyMO +EPDKjvbdpfEEsvAh +DoCkKvbdZRMdhldq +EPDLKvbdYzberJuy +EObjjvbdfHkWSOQg +EPDLKvbdRMxByNtz +DncLKvbdmoyyWLZC +EObkKvbdhtydvrVC +DoCkKvbdVhYWYGxz +EPDKjvbdbVCHXjsh +EPCkKvbdTlWPBVni +DncLKvbdFkEsCgmV +DnbkKvbdIsYaSlxM +DncKjvbdzaAOffbM +DncLKvbdaSFcHtGL +DoDLKvbdiGjDYuiu +EObjjvbdDigjVwjA +DncKjvbdqmZixlIJ +DnbkKvbdRjxfUgLT +EObkKvbdeAURNYKG +EPCjjvbdjvWnECXw +EPCjjvbdNQXqVmgT +DoDLKvbdxmsHxShc +EPCkKvbdqwPlChxq +DnbjjvbduLwwAsaX +DncKjvbduCbuWuno +DnbkKvbdJpydnenF +EPDLKvbdRXOEClID +DncKjvbdSKyFuGkT +DncKjvbdczZQYZRC +EPCkKvbdGZUtaDxC +EPCjjvbdOAJTUKSA +DnbkKvbdsZlQSaHn +DncKjvbduWNwiqTA +DoDLKvbdRNYCZOUz +DoCkKvbdVTmTfMVj +EOcLKvbdeATpmYJf +DncKjvbdbUbGxKsh +DnbkKvbdLZRKSztf +DncKjvbdcJMjLFwY +DnbkKvbdRadEkhyL +EPCkKvbdauBgXkTh +EObkKvbdrJAKFNOe +EOcKjvbdDnbjkXDE +DoDKjvbdrafMlGjy +EOcLKvbdliDtRVRa +EObjjvbdZjShQHCG +DnbjjvbdZnmiFEyj +EPDKjvbdbAueFpQX +EPCjjvbdVwJYVcdg +EObkKvbdijGIJmYS +DoCjjvbdJpyeOenF +DoDKjvbdYlSDsnMN +DncLKvbdehLVqmqH +DnbjjvbdTppnuVHm +EOcKjvbdSLYetgLT +EPCkKvbdZyEKOClS +DoDKjvbdHDjujBij +EPCkKvbdHkazmvpk +EObkKvbdkxrrTYft +EPCjjvbdOTUVfeVQ +DoCjjvbdYzbfSKWZ +DncKjvbdkxrrSxgU +EObjjvbdEOcKkXCd +EPDKjvbdcTCkTcia +DoDKjvbdatagXkTh +DoDLKvbdNHCpMpUk +DoDKjvbdhtzEvquC +EPCjjvbddePSBvbj +DoDLKvbddneTLUUS +DncLKvbdijFhKMwr +EPDLKvbdpxoIHRDx +DncLKvbdqquLOKaN +EPCkKvbdSCEEkiZL +DoDLKvbdvAdYroEh +DncLKvbdDwwksstM +EOcKjvbdKWVFcdgJ +EPDKjvbdZnmhdeZj +DoCjjvbdJSyBTMxM +DoDLKvbdtcDVXVoP +EOcLKvbdbAudfPow +EPCjjvbdpfDdtWAh +DncKjvbduCcUwWOo +DnbjjvbdGFirOItR +DnbjjvbdLBKgNBxR +DnbjjvbduVnYJpsA +DnbjjvbdjuvnDbXw +DoDKjvbdFkFTDINV +EOcKjvbdEvZQQMie +DoCkKvbdMfbolpUk +EPCjjvbdhbPCdwQq +DoDKjvbdZyEKNblS +EPCjjvbduCbtwWPP +DnbjjvbdgLGzbfAE +EObjjvbdqGDdsvAh +EPDLKvbdNGbolotk +DoCkKvbdSPsfifEX +DncLKvbdbVCGwjsh +EObkKvbdijGHjMwr +DnbjjvbdRosfifDw +DoCjjvbdQccApRDr +DoDKjvbdqTtHSSKt +EOcLKvbdsQWPJcVf +EObkKvbdeOdsLTsr +DncLKvbdcTDLUDjB +DoDKjvbdVgwvXfxz +EOcKjvbduoTzqKnt +EPCjjvbdYNqAYVWU +EObjjvbdemGXGmJk +DoCkKvbdVgxWXfxz +DoCjjvbdqlzKZLgi +EPDLKvbdLFfHaaQu +DnbkKvbdcSbkTcjB +EObjjvbdgGLzNgHA +EObjjvbdZjSgpGbG +DnbjjvbdGckVjBij +EOcLKvbdUMVnaWOi +EObkKvbdrylQSaHn +EPDLKvbdZHWdAOri +DoDKjvbdyfxlAMdw +DnbjjvbdZMSDsnLm +DoDKjvbdOTUVgEtp +DnbkKvbdJSxaSlwl +DncKjvbdkNCLzFGo +DoDKjvbdfMevgMik +DnbjjvbdMgDPlpVL +DncKjvbdqquLOLAm +DoCkKvbdfNFwGlik +DncLKvbdpxnhHRDx +DoDLKvbdZMRdTmlN +EPCkKvbdURRPVVHm +EPCkKvbdmgEwmOHZ +EOcLKvbdVAapsRSZ +DoCjjvbdczZPwxpb +EPDLKvbdWXIxWDdg +EPCkKvbdUVlQJtBR +EOcKjvbdelfWgNJk +EPDKjvbdUtMtFkuj +DnbjjvbdRkZFtfjs +EObkKvbdCJLCLJGK +DoDLKvbdKVuGEEgJ +DncKjvbdIxTbHkqQ +DncLKvbdMSWlzUpz +EPCkKvbdKefICAqV +EOcKjvbdtunXjRTA +DoDLKvbdZMSETmlN +EObkKvbdapHHELzd +EObkKvbdmRxtyrdJ +DoCjjvbdtTSSxzEc +EObjjvbddeOrBvbj +DncLKvbdJYUBgkpp +EPCjjvbduLxXBUAw +DnbjjvbdSLYetfjs +DncKjvbdzQnmIiwA +EPCjjvbdRpUGjFdX +EOcLKvbdddnqbWcK +EOcKjvbdWWhwucdg +EOcLKvbdCWzdJEov +EPDKjvbdTkuoAuni +DncLKvbdqUTgSSLU +DoDLKvbdNHDQMotk +DncLKvbdWXJXvEEg +EPCjjvbdaNKaruNH +EPDLKvbdraelkfjy +DncLKvbdLqvmZtpz +DnbjjvbdNddThhkE +DoDKjvbdzoQQdcLx +EPDKjvbdYpldiNFR +EObjjvbdZtJIyDsO +DoCkKvbdWWiYWDeH +DoCkKvbdeEoSBwDK +DoCjjvbdBsAcTevr +EObjjvbdqvpMChyR +EPCjjvbdsCGMlHKy +DnbkKvbduLwwAtAw +EObkKvbdMRwMyuQz +DncLKvbdwWlAuaWV +DncLKvbdHgHZxwxH +DncKjvbdBsAcTewS +DoDLKvbdJpyePFme +DncKjvbdVUNUFlWK +DncKjvbdEYXktTtM +DncLKvbdwMvANDeN +DnbkKvbdtSrTZZeD +EOcLKvbdJYUBhMRQ +DncKjvbdlYrrTZGt +DoDLKvbdliDsqUrB +EObjjvbdegjuqnQg +EObjjvbdlZSrTZHU +DncLKvbdfNGWfljL +DoDLKvbdLFegbBQu +DncLKvbdemGXGmKL +EPDKjvbdDwwksssl +DnbjjvbdxmsIYTJD +DoDLKvbdBsBCtGWr +DoCjjvbdIsYaTNYM +DncKjvbdJuuGEEgJ +EObkKvbdkySqsYgU +DnbkKvbdNPwqWNfs +EPDLKvbdmIdTptrB +DoDLKvbdyqOmIjXA +EPCjjvbdhkeEOUcZ +DoDKjvbdJqZePFme +EPDLKvbdfSAvzlCo +EObjjvbdbhljLFvx +EOcLKvbdaMkBsUmH +DoCjjvbdKyRKSzuG +EObjjvbdcSbjtEJa +EOcLKvbdkHflGFmk +DoDLKvbdemFwHMjL +EObjjvbdSLZGVHLT +DoCjjvbdJXtCILpp +EOcLKvbdaaVdfPow +EOcLKvbdFpATWgGZ +DoCjjvbdxZgeewdr +EObkKvbdeEnqawCj +EObjjvbdhytfMQmf +DnbjjvbdoznEKxPA +DnbjjvbdoAKzsgdO +DoCkKvbdYzbfRivZ +DoDLKvbdqqtkOKaN +DncLKvbdqvokcJYq +EPDKjvbdOStVfeUp +DoDKjvbdZxcinDLr +DoCkKvbdcyyQYYqC +EObkKvbdcIlikGWx +EOcLKvbdffLzNgHA +EPCjjvbdMtsRkNAX +EOcKjvbdpeceTvBI +EOcKjvbdZsiIxcsO +DncLKvbdJvVGDdgJ +DnbkKvbdZMRdTmlN +EPDLKvbdnCJwXnnV +EObkKvbdxUldqZLn +EPCjjvbdNddUJIkE +DoCjjvbdyYJJapZk +DnbjjvbdpxoHgQcx +EObjjvbdHDjvKBij +DncKjvbdUtNUFlWK +EPCkKvbdkVvmdBww +DnbjjvbdgGMZmgHA +DoDLKvbdmIdTqVSB +EOcLKvbdzitpPdTU +DncLKvbdkxrqrxgU +DoCjjvbdVBBpsRSZ +EOcLKvbdGFiqmiTq +EOcKjvbdxsOJMqag +DoCkKvbdHDkVjCJj +EPDKjvbdjSziTKiz +EOcKjvbdCTAbsewS +EPCkKvbdkWWnDbYX +DoDLKvbdJSxaTMxM +DoDLKvbdMoxRWNgT +DoDLKvbdmuVZkJrG +EPDKjvbdbUbHXjtI +DnbjjvbdkWWnEBxX +EOcLKvbdnPyxukZC +DnbjjvbdXrlBMtOx +DoDLKvbdJuuGEFGi +EPDKjvbdUaBprprZ +EObjjvbdsrqrxydc +EObjjvbduCbtwWOo +DoCkKvbdSLYeuHLT +DoDKjvbdKQyePFme +EOcKjvbdeYZssrFz +DoDKjvbdpxoHfpdY +EPCkKvbdcIljKfXY +EPDKjvbdDwwksstM +DnbkKvbdsQWOicVf +EPDLKvbdIidAKQHE +DoDLKvbdrDeJPnWB +EOcLKvbdZoNiEeZj +EObjjvbdptTgRrLU +EPDKjvbdmRyUzTEJ +DoDLKvbdFxtuBEYC +DnbkKvbdehLVqmqH +EPCjjvbdUtNUGLuj +DoDLKvbdxVNEqZLn +DncKjvbdySnImRbH +DoCjjvbdbLMGPNcA +EPCkKvbdzQoMiKXA +DnbkKvbdbiMijevx +EOcKjvbdSQTfiedX +DnbjjvbdZisIQHBf +EObkKvbdYpleIldq +DncLKvbdjmBlZeHP +DncKjvbdSCDdkhxk +DnbkKvbdrykpTAgn +EObkKvbdZQldiMeR +DnbjjvbdeYZssqez +EPDLKvbdlYrrSyHU +EOcLKvbdTpqOttgm +EOcKjvbdCJLCLIej +EPDKjvbdUQqOttgm +EObkKvbdGBOqZJzm +DncKjvbdqwQMDIyR +EPDKjvbdbBWFFoow +EOcLKvbdZMRctOLm +EPCkKvbdHEKuibKK +DnbjjvbdNddThiKd +DncKjvbdJuuFdEgJ +DncLKvbdRzJgsDWA +DncLKvbdRWmdCkhD +EPCjjvbdZRNFImEq +EOcLKvbdUaBqTRSZ +EObkKvbdWIXvYGxz +DoDKjvbdrRuKnKaN +DoCjjvbdYgXEAPTJ +DoCkKvbdwuMeQyMO +EPDLKvbdkHfkfFmk +DoDKjvbdTqQnuUhN +DoCkKvbdbKlFoODA +EObkKvbdrzLoraIO +DncLKvbdFxuVAdYC +DoCjjvbdZQldiMeR +EOcKjvbdJTZBTNXl +EPDKjvbdsQWPKCvG +EOcLKvbdeEoRawDK +EPDLKvbdtTSSxzEc +DncLKvbdliDsqUqa +DnbjjvbdZQleImEq +EPCjjvbdaSGDITek +DoDLKvbdRWnDbkhD +EPDLKvbdpedEsvAh +EPCkKvbdYpldhldq +DoCjjvbdZoOJEdyj +EOcLKvbdmoyxvKyC +EObjjvbdmSZVZsEJ +DoDLKvbdqUUGrSLU +EPDLKvbdmpZxujyC +EPCjjvbdCDpBVilf +EPCjjvbdFfJrNhsq +DoDKjvbdsZkosBIO +DnbjjvbdiBnbdvpq +DncKjvbdkDMKpftg +EPCkKvbdatbGxLTh +DoCjjvbdJTYaTNXl +DnbjjvbdhkdcnVCy +DncLKvbdyNrgxTIc +EPDLKvbdyNsHwriD +EPDLKvbdBdQBVilf +DoDLKvbdIsYaTNXl +DnbkKvbdkxsSTZHU +EPCjjvbdBsBDUGWr +EOcLKvbdgQBzwDxI +DnbjjvbdjblLQfuH +DnbkKvbdbVBgYKsh +DncLKvbdMgComPuL +EPDLKvbdqceIpOVa +DnbjjvbdqFceTvAh +EPCjjvbdFWYpQNJe +DoDLKvbdHDjujBjK +DncLKvbdIHGyyXxH +DnbjjvbdeFOqawCj +DoDKjvbdGQASwGfZ +DncLKvbdrWokbhyR +DncKjvbdSKyFtfkT +DoCkKvbdemFvfmKL +EPDKjvbdxsNhmRbH +EOcKjvbdsPunicVf +EObjjvbdrbGNMGjy +EPDLKvbdOXoVzcnU +EOcLKvbddZxpYYpb +DoDKjvbdVBBpsRRy +EPDKjvbdHDkWKCKK +DoCkKvbdSiZjRAAl +EPDKjvbdURQoVVHm +DoCkKvbdpyPHgQdY +EOcKjvbdGAoQxizm +DnbjjvbdMpXpvNfs +DncKjvbddndrjtUS +DnbkKvbdlhcsptqa +DoCkKvbdfNFvfmKL +EPCkKvbdHffyxxXg +DoCkKvbdYpleImFR +DoCkKvbdbBVdfPpX +DncLKvbdWSNxBdlD +EPDKjvbdSQTfjFcw +EPCjjvbdkxrqsYgU +EPDKjvbdrovOjCvG +DoCjjvbdaSGCgsek +DncLKvbdZGwEAOri +DoDLKvbdJmADzHUa +DoCjjvbdNdcshiKd +DoCkKvbddneTLTtS +EObkKvbdMoxQumfs +DncKjvbdVgxVwfxz +DoDKjvbdGcjuibKK +EObkKvbdTqQnuUhN +DncKjvbdURRPUuIN +EObkKvbdbrbjtEJa +DnbkKvbdKQyeOenF +EObjjvbdbKkfOnDA +EPDLKvbdlhdTptrB +EObjjvbdxnTHxTJD +EObjjvbdKCjCpjDY +DoDLKvbdMSWmZtpz +DoCkKvbdBsBCsfXS +DnbkKvbdfRaWzkcP +EPDKjvbdbAvFGQQX +DoCjjvbddoFSjtUS +DnbjjvbdypoNJJwA +EPDKjvbdzdzOzdyp +EObjjvbdJpzEoFme +DoCkKvbduCbuXWPP +EPCkKvbdFfJrOItR +DoDLKvbdkIGlFfOL +DnbjjvbdbAudfPpX +DoDLKvbdtAHRIABS +EOcLKvbduDCuWuno +DoDKjvbdkHgLfGNk +EOcLKvbdxZhFeweS +EObkKvbdUxgszKoO +EOcKjvbdiBoCeXRR +DnbkKvbdZeXfzhJC +EObkKvbdtcDUvvPP +EOcKjvbdMtrrLNAX +DnbkKvbdWXJYVceH +DnbkKvbdJbjCpibx +EPCkKvbdajlFnnDA +DnbjjvbduaEZTPEh +EOcKjvbdGcjuibJj +DncLKvbdKefHbAqV +DoDKjvbdUxgtZjnn +EPCjjvbdVZITzKnn +EPDKjvbdHkaznXRL +DnbkKvbdOEdTiIkE +DnbjjvbdiGjDYvJu +DoDKjvbdnUtykJrG +EPCkKvbdBdQBWKNG +EPDKjvbdsBemLfkZ +EPCjjvbdtumwiqTA +EOcKjvbdnCKXYPOV +DncLKvbdVwIxVdFH +DnbjjvbdWIYWYGxz +EObkKvbdFpATXHFy +DoCjjvbdauBgXjtI +DnbkKvbdTqROuVHm +DnbjjvbdlhcsqUqa +EPDLKvbdxZhGGXeS +DoDLKvbdZjTHogCG +EOcKjvbdbKlGOnDA +EObjjvbdLiBlRYAS +DncKjvbdxrnJMrCH +EOcLKvbdMJBlRYAS +EOcKjvbdUsmTekuj +DnbjjvbdEYYMTssl +EObkKvbdZMSEUNkm +DncLKvbdGGKSNhsq +DoDKjvbdGZVVAdXb +EPDKjvbdKRZdoFnF +EOcLKvbdEXwlUTtM +DoDKjvbdEztQeLcJ +DoCkKvbdJYUBglQp +DoCkKvbdJTZAsNXl +EObjjvbdvmWAMdEm +EPCjjvbdxZgefYFS +DncKjvbdtTRrxzEc +EOcLKvbdiGjDZWJu +DoCkKvbdYlRctOLm +DncKjvbdDxXlTtUM +EPCjjvbdcyxpYYqC +EOcLKvbdqGDeUWBI +DnbjjvbdnPyxvLZC +DoDLKvbdKefHbApu +DoCkKvbdjblKqHVH +EObkKvbdTfzmkvue +EOcKjvbdZnmiEdzK +EOcKjvbdDxXkstTl +EPDLKvbdBdQAujMf +DoDKjvbdGZVVBDwb +DoDLKvbdEvZPpMie +EPCjjvbdVwJXuceH +DoDLKvbdRjyFtgLT +DoCkKvbdXsLaNTnx +DnbjjvbdDHLfHAzc +DoCkKvbdVBCQrprZ +DoCkKvbdyNsIYShc +EPDKjvbdyXiJbPzL +DoCjjvbdUsltFlWK +EPCkKvbdcyyQYZRC +DnbkKvbdddnqbWbj +EPCkKvbdmuUyjjSG +EObkKvbdZyDinDLr +DnbjjvbdZtIiZESn +EPCjjvbdVBCRTRRy +EOcLKvbdCWzciFPv +EObkKvbdrEFJPnWB +DnbkKvbdqUUHSRkU +EPDLKvbdlqyUyrci +DoCjjvbdIMBznXQk +DoCjjvbdUxgsykOn +EPCjjvbdXsMBMsnx +DncKjvbdjuvmdBxX +EOcLKvbdkIGkeemk +DoCjjvbdjKGIKNYS +EPDLKvbdSLZGVGjs +EOcKjvbdMfcPmQUk +DoCjjvbdrNZjYlIJ +EOcLKvbdkyTSTZHU +EObjjvbdjAQGaQHK +EPDKjvbdMoxRVnHT +EObkKvbdeATpmXif +EObkKvbdFjdsDHmV +DncLKvbdbLLfOmcA +EPCkKvbdunszqLOt +DnbkKvbdnQZxvLZC +DncLKvbdZyDjNblS +DnbkKvbdptTfrSKt +DoDLKvbdzaAOgHCM +EPCjjvbdhbPCeXRR +DnbkKvbdmuVZkKSG +DoCkKvbdziuQQESt +DnbkKvbdhgKDZWKV +DnbjjvbdULuoBWPJ +DncLKvbdWXJXucdg +DoCjjvbdRacdlJYk +DoDLKvbdegjvSNqH +EOcLKvbdnUtzLKRf +EOcKjvbdFxtuBEXb +DoCkKvbdmIcsqUrB +EObjjvbdULvPAvPJ +EOcLKvbdSwkLmzkY +EPCkKvbdSZjITCvA +EPCkKvbdeOdrjtUS +EPCjjvbdIxUBhLpp +EObkKvbdqiAJeMoF +DnbkKvbdhlEcmtcZ +EOcLKvbdFejRnJTq +EOcKjvbdwXMAvBWV +DoDKjvbdmpZyWLZC +DoCjjvbdGLErbhNV +DoDLKvbdmaivwnmu +EOcLKvbdOXoVzcnU +DncLKvbdBhjbLJGK +EPDKjvbdZjTIQGaf +DoCkKvbdgPazwEYI +DncLKvbdGGKRmiUR +EObjjvbdfHkWRmpg +DnbkKvbdXrkaNUPY +EPCkKvbdzQoMhiwA +EOcKjvbdrpWOjDVf +DncKjvbdZtJJZDrn +EPDKjvbdqZOggRDx +DnbjjvbdhgJbyWKV +DoDKjvbdiVZdwRuC +DoDKjvbdIwtCHkpp +DoDKjvbdVAapsRRy +EPDLKvbdwjvcgzzG +DoDLKvbdRyihScWA +DoDLKvbdrRuKmkAm +DnbkKvbdqGDdsuaI +EPCkKvbdAMhYrwZx +DncKjvbdSPsfjGEX +DncKjvbdczYpXxpb +DoDLKvbdkIHMGFmk +EPCjjvbdkClKqHUg +EObkKvbdxVMdqZMO +DoDKjvbdBdQBVjMf +EObkKvbdZjTHpGbG +EPDKjvbdTfzmkvue +EPCkKvbdLAjfmCXq +DoCjjvbdLGGHbApu +EPDKjvbdEzsqEkcJ +DoDKjvbdwygfGYFS +DoDLKvbdhgJbyWKV +EPDLKvbdZshiZETO +EPDLKvbdKWUfDdfi +DnbkKvbdqYoHgQcx +DncKjvbdnGeYMmgZ +EPDKjvbdKCjDRKDY +DoCkKvbdJcKDQibx +EObkKvbdZoNiFFZj +EPCkKvbdUyHsykPO +EOcKjvbdtvNxKQsA +EObjjvbdatafwjtI +DoDLKvbdhzVFkpmf +EObkKvbdMgComQVL +EPCkKvbdSCEEkhxk +DoDLKvbdgFlZnGgA +EObjjvbdZMSETnLm +EObkKvbdtumxKQsA +EObjjvbdZoOIddyj +EOcLKvbdqZOggQcx +EOcLKvbdKfFhBaQu +DncLKvbdzGxlANEw +EObjjvbdehLWRnQg +EObkKvbdEPCjkWbd +EObkKvbdqYnhHRDx +EObkKvbdjvXODaww +DnbjjvbdqTsgSRkU +EOcKjvbdTqQoVVHm +DnbjjvbdQmYBxnUz +DnbjjvbdpyOhGqEY +EOcLKvbdLGGHbAqV +EObkKvbdZirgpHCG +EObkKvbdqYnhGpcx +DncLKvbdrbGNLgKy +EObkKvbdkySrSxgU +EOcLKvbdeAUQlwjG +DncKjvbdkVwNdCYX +DoCjjvbdJvVGDeHJ +EPCkKvbdEuyPpNKF +EOcKjvbdDjHivXjA +DnbjjvbdkNCLydfo +EPCjjvbdZjTHogBf +DoDKjvbdGKeTDINV +DnbkKvbdJXtBglQp +DnbjjvbdFejSOIsq +EOcKjvbdhytelRNf +DnbjjvbdbBVdeopX +DoCkKvbdFjdsDINV +DoDLKvbdjvXNcbXw +DnbkKvbdZdxGzhJC +EPDLKvbdjAPgBQGj +EObjjvbdJXsbHkqQ +EPDKjvbdiVZdwRtb +EObjjvbdGFjSNiTq +EPDKjvbdznpQdbkx +EPCjjvbdemFvgNKL +EPDKjvbdWXIxWEEg +DncLKvbdEObkKvcE +DnbjjvbdLAjfmCYR +EPDLKvbdEXwkstTl +EObjjvbdFfKSNhsq +DncKjvbdygZMANFX +EPCkKvbdYqNFIleR +DoCkKvbdSKyGUgLT +DncKjvbdBdQBVjNG +DnbkKvbdbUagYLTh +EOcKjvbdsPunjDWG +DncLKvbdrEFIonVa +DncKjvbdaSGChTfL +DoCkKvbdcJNKKfXY +EObkKvbdULuoBWOi +DncLKvbdKWVGEEgJ +EPCkKvbdqFdEsuaI +EPDKjvbdAMgySvyx +DncLKvbdiUzEwRuC +EObjjvbdZoNheEzK +DnbkKvbdZLrETnMN +EObjjvbdKWVFcdfi +DoDLKvbdcScLUEJa +EPCkKvbdIwsbIMRQ +EOcKjvbdsBemMHKy +EOcLKvbdzitoodSt +EPDKjvbdrMyjZLhJ +DnbjjvbdaRfCgsfL +DoCkKvbdKQzEnenF +EOcLKvbdUGznLvue +DncLKvbdZxcinCkr +DnbjjvbdEuyPpNKF +DncKjvbdGFirOIsq +EOcLKvbdVqmxBeMD +EOcLKvbdwuMeRZLn +DnbkKvbdBhkBkIej +EOcKjvbdNQXpumfs +EObkKvbdVBCRTRSZ +DoDLKvbdZeYGzhJC +DncLKvbdREDBPqES +DnbjjvbdvBEZSoFI +EPCjjvbdakLeoNcA +EPDLKvbdeFOqbWbj +EPDLKvbdiGicZWJu +EPCkKvbdEKHiuwjA +EPCjjvbdwkWcgzyf +DoDKjvbdmpZyVkZC +EPCkKvbdSZihSbvA +EPDKjvbdelevfmKL +DnbjjvbdeATplwif +DoCjjvbdGAnpxizm +EPDKjvbdTlWPBWOi +EOcKjvbdmSYtzTEJ +DncLKvbdnGeXmNfy +DoDKjvbdTIzJqAAl +EOcKjvbdqdEiPnVa +EOcKjvbdcTCkUEKB +DoCjjvbdEvYopMjF +DoDLKvbdwuMdpyMO +EPDKjvbdEuyQPlie +EOcLKvbdVUMsfMVj +EObjjvbdijFgilxS +DoDKjvbdnPyxujyC +EOcKjvbdTAFIgbPE +DnbkKvbdZxdJnDLr +DncLKvbdqdEiPmua +EOcKjvbdhgJcZVjV +DnbkKvbdRbEFLhxk +DoDKjvbdmaivwoNu +DoCkKvbdZQmFJMdq +DncLKvbdeYZtTqez +EObkKvbdqYoIGpdY +DnbjjvbdEASJMyvw +DoDKjvbdwzHfGYFS +DncKjvbdjvXOECYX +DncLKvbdbBVdepQX +DoDLKvbdrEFIomua +DnbjjvbdYgWdAOsJ +EOcKjvbdkMakydfo +EPCjjvbdegkWSNqH +EPDLKvbdYlSEUNkm +EPDLKvbdzRPMhjXA +DnbjjvbdmSZUyrci +EPDKjvbdiiehKNXr +EPDLKvbdwzIGGXdr +DncKjvbdSLYetfkT +EOcLKvbdURROtuHm +EPDLKvbdEYYLtUUM +EOcLKvbdaSGDIUFk +DnbkKvbdhfibyViu +DncKjvbdeFOqavcK +EPDLKvbdZtIhyETO +EOcKjvbdsPuoKDVf +DoDLKvbdBhkBjiGK +EPDLKvbdnQZyVkYb +DncLKvbdNsTugEtp +EPCjjvbdCDpBWJmG +DoCkKvbdmIdTqVRa +EOcKjvbdptUHRqjt +DnbjjvbdRpTfifDw +DncKjvbdaRebgtFk +EPDLKvbdEARiMyvw +EOcKjvbdyNsHxShc +DoCkKvbdxKwDgzyf +DncKjvbdwuNFQyLn +DncLKvbdegjvSORH +DncLKvbdOStWGdtp +EOcLKvbdcTCkTdKB +DncKjvbdRECaQRES +DoDLKvbdkIHMFemk +EPCkKvbdfjfzcGAE +DncKjvbdZLqdTnLm +EOcKjvbdIMBzmwRL +EOcKjvbdwzHeexFS +EPCjjvbdKVuFdFHJ +EPCjjvbdRXODcLgc +DoDLKvbdlrZVZrdJ +EPDKjvbdjKGIJmYS +EObkKvbdHEKujCJj +DncKjvbdNddTiIjd +DoDKjvbdZjSgpGaf +DoCjjvbdmfeXlnHZ +EPCjjvbdRosfifDw +DoCjjvbdZxcinDLr +DoCjjvbdNeDsiIjd +EPDKjvbdVgxVwgYz +DnbkKvbdqTtGrRjt +DnbkKvbdTqQntuIN +DncKjvbdBvzdJEpW +EPCjjvbdqUUHRrLU +DnbjjvbdqcdhonWB +DncKjvbdHDkWKBjK +DnbkKvbdxVMeQxlO +EObjjvbdkClKpgVH +EOcLKvbdCSaDUGXS +DncLKvbdUQqOttgm +DoCkKvbdZxcjOClS +EPDKjvbdVqmxCFMD +DnbjjvbdqmZixlHi +DnbjjvbdiUydvquC +DoCkKvbdOTTugFVQ +EOcKjvbdUQpoVVIN +DoCkKvbdNHDPlpVL +EOcLKvbdDncLKwCd +EOcLKvbddeOrCXCj +EObjjvbdqvolChyR +EOcLKvbdaofgELzd +DoDLKvbdrpVoKDWG +DncKjvbdaMjasUmH +EObjjvbdliETqUrB +DncLKvbdXsLaMtOx +EObkKvbdrykpTAhO +EPDKjvbdehKvRmpg +EObjjvbdUxhTzKnn +DncLKvbdTfznMXVe +EPDLKvbdqUTfqqkU +DoCjjvbdHELWKCKK +DoDLKvbdwuNFQyMO +DoCjjvbdffLynGgA +EOcLKvbdSLYetfkT +EPDKjvbdtTRryZeD +EPDKjvbdddoRbXDK +DoDKjvbdFVxooljF +DoDLKvbdxsNiNSCH +DoDLKvbdsCGNMGkZ +EOcLKvbdkHfkfFnL +EPCkKvbdqrUjnLAm +DnbkKvbdHELViajK +EOcKjvbdNHDQMouL +EPCkKvbdWWhxVdFH +DnbkKvbdUWMPitBR +DncLKvbdZoOJFFZj +DncKjvbdcIljKewY +DoDLKvbdVUNUGLvK +EObkKvbdNsTufdtp +DnbjjvbdGKdsCgmV +EObkKvbduDCtwWPP +EObjjvbdkMbMZeGo +EPCkKvbdJSyAsNXl +DnbjjvbdmbJwXnmu +EPCkKvbdRjxeuGkT +EObkKvbdaSFcITek +EPDLKvbdGYtuAdYC +DoDKjvbdFeirNiUR +EPCjjvbdhyuGMQmf +EObjjvbdDxYLstUM +EObkKvbdFfKRmhtR +DnbkKvbdyTNhmSCH +EPCjjvbdJSyAsNYM +EPCkKvbdEuxpQMie +DoDLKvbdkClLQgUg +DnbkKvbdssRrxzEc +EPDLKvbdRMwbZNtz +EPCkKvbdssSTYyeD +DoCkKvbdYqMeImEq +EOcLKvbdjuwOECXw +EOcKjvbdOTUWHFUp +EPCjjvbdliDtQtrB +EPDKjvbdZxdJmblS +DoDKjvbdbVCHXkTh +DoDKjvbdpstHSRjt +EOcLKvbdNPwpunGs +DoCkKvbdLAjgNCXq +DoCjjvbdDoDKjvbd +DoCkKvbdZirgpHBf +EPDLKvbdezuxdiTw +DoCkKvbdLrXMyuQz +DncLKvbdqlyjYkgi +DnbkKvbdLrWlzUpz +DoCjjvbdhytfLpnG +EObjjvbdxrmiNSBg +EPDLKvbdqquLNjaN +EObjjvbdiHKCyVjV +DncKjvbdjSziTKiz +EPCjjvbdCflGHAzc +EPCjjvbdZtJJZDrn +EPCjjvbdJKEAKQHE +EPDKjvbdIxTbHlRQ +EOcKjvbdZRMdhmEq +EOcLKvbdmttykJqf +DncLKvbdEzsqFMDJ +EPDKjvbdJuteceGi +EOcKjvbdemFvfmJk +DoCkKvbdkySqsZGt +EOcLKvbdlrZVZsDi +EOcLKvbdEXxLstTl +DnbkKvbdkNBlZeHP +DncLKvbdauCHYKsh +EPCkKvbdhuZeXSVC +EPCjjvbdOTTufdtp +DoDKjvbdDoCkKwCd +DoDLKvbdOAIrsirA +EPCjjvbdlAmPNALA +EOcLKvbdiBoCdwQq +DoCkKvbdnCJwYOnV +EOcLKvbdqwQLbhxq +DncLKvbdGYuVBEYC +EPCjjvbdcyyQXxqC +EPDKjvbdrEEiPmvB +DnbkKvbdJbibqJbx +DncLKvbdiGjCxuiu +EObjjvbdjKGIJmXr +EPCjjvbdFkEsDIMu +EPDKjvbdCWzchePv +EObjjvbdEObjjwDE +EPCkKvbdQdDApRDr +DoDLKvbdbAvEfQPw +DoDLKvbddtAUATNW +DnbjjvbdUxhUZkOn +DnbjjvbdwNWANEEm +EPCjjvbduDCuWuoP +DnbjjvbdjAQHApHK +DncLKvbdJzpFxEAN +DncKjvbdwtldpxlO +EObjjvbdBraCtGWr +EPDKjvbdJmADzGuB +DoDLKvbdRadEkiZL +DoCkKvbdAMhZTXZx +DoCjjvbdqGDeUVaI +DoCjjvbdVvhxWDdg +EOcKjvbdSBceMIyL +DnbkKvbdRkYfUfjs +EOcLKvbdFWYpQMjF +DoDLKvbdhlFENuCy +EObkKvbdiCObeWpq +DnbkKvbdHELWJaij +EObkKvbdCTAcTfWr +EPDKjvbdbrcLTdJa +DoDLKvbdDncKkXDE +DoCkKvbdmSYtzSdJ +EOcLKvbdVZHszLPO +DnbjjvbdhkdcmuCy +DnbkKvbdLrXNZuQz +EPDKjvbdZnmiFEzK +EPCkKvbdlrZVZsEJ +DnbjjvbdqmZixkhJ +DoDLKvbdcTCjsdKB +DoCkKvbdcyyPxYqC +DoDKjvbdssRrxydc +DoDKjvbdvPTzpjnt +EObjjvbdZLqctOMN +DoDLKvbdRNXbYnUz +DncKjvbdJYUBglRQ +EObkKvbdkIGlGFnL +DoDLKvbdiUzEwSUb +EPDKjvbdeEnrCWbj +DoDLKvbdRbDdkhxk +EObjjvbdYzcFqjWZ +EOcLKvbdjggLfFnL +DncLKvbdgQBzwEXh +DoCjjvbdQlxByNtz +DnbkKvbdoznDjwoA +DnbkKvbdVgwuxHYz +DoDLKvbdaaVdepQX +DoDKjvbdLZRKSztf +EPDKjvbdbUbHXkUI +EOcLKvbdjhGkfFmk +EObkKvbdeEoSBvcK +DncKjvbdUtMtGMVj +EPDLKvbdJTZAsMxM +DnbkKvbdOEdUJJKd +DoDKjvbdZHXEAPSi +EObkKvbduaDyTPFI +DnbjjvbdqAiFAWhE +EObjjvbdelevgNKL +DnbjjvbdTAEhgbPE +DoDKjvbdnPzZVkZC +DoDKjvbdQwNdDLhD +DnbjjvbdnBjWwoNu +EObkKvbdfMewGljL +DncKjvbdrpVnjCuf +EPDLKvbdLGFgbBRV +EObkKvbdkCkkRHUg +EObkKvbdTlVoAuoJ +EPDLKvbdrMyjZMHi +EOcLKvbdWHwuxHYz +EOcKjvbdLrXNZtpz +EObjjvbdbQHHDkzd +EOcLKvbdfILWRnRH +EPCjjvbdyfyMAMeX +DncLKvbdNHCpNQVL +EPCjjvbdFkEsDHlu +DncKjvbdGGJqmhtR +DnbkKvbdvAcxrndh +DoCjjvbdqGDeTvBI +DoCjjvbdJvUfDdgJ +DoCjjvbdUVlPisaR +DoCkKvbdqTsgSRkU +EObjjvbdjblKpftg +EObkKvbdtcDVXWPP +DnbkKvbdfHkVqnRH +DncLKvbdmoyxvLZC +EObjjvbdkHfkfFnL +EPDKjvbdwNWAMcdm +EPCjjvbdJpzFOfNe +DncKjvbdmbJvxOnV +DncKjvbdTqQnuUgm +EOcLKvbdTpqOuVHm +DoCjjvbdYlSETmkm +DoDKjvbdjEkGuPAO +DoCkKvbdwygefXdr +EObkKvbdrXPkcJYq +DoCjjvbdxUleQyMO +EOcLKvbdBsAcTfXS +EPDLKvbdLBLGlbXq +EObjjvbdmbJvwnnV +DnbjjvbdbVCGwjsh +DnbkKvbdxUmEpyMO +EPCkKvbdYSlBNTnx +DoDKjvbdeOeSkUTr +DncLKvbdqmZixlHi +EPCkKvbdNHCpNQVL +DoCkKvbdDigjWXjA +EObjjvbdrDeJQNvB +EOcLKvbdJuuGDeHJ +DoCkKvbdddnrCXCj +DoDKjvbdqTtGqrKt +DoDKjvbdeOeTKstS +EObjjvbdySmiNRbH +DnbjjvbdZshiYdTO +EObjjvbdnCKXXnmu +EPDKjvbdqiAKFMne +DoDKjvbdNeEUIiKd +DnbjjvbdzitpPdTU +EPCkKvbdzaAOffal +EOcKjvbdZtIiZDrn +DoCjjvbdtSrTYyeD +DoDLKvbdFVxopNJe +DoDLKvbdJJdAJpHE +DoDLKvbdHDjuiaij +EObkKvbdUWMQKUAq +EPDKjvbdTpqOuVIN +EOcLKvbdqvpMChyR +DoCkKvbdVviXudEg +DoCkKvbdGLErbgmV +EPCkKvbdZirhPfbG +DoCkKvbdWXJYVceH +DnbjjvbdhkeEOUcZ +DncKjvbdSPtHJedX +DncKjvbdFfKRnIsq +DncKjvbdWWhxVdEg +DoCkKvbdOStWHEuQ +DoDLKvbdEuyQPmKF +DncKjvbdrpVoKDWG +DoCjjvbdKVtfEEfi +DoCjjvbdWXIwudEg +EPDKjvbdSCDeMIyL +EPDKjvbdDoDKkXCd +DoCkKvbdJpzEnenF +EPDKjvbdaaWEfPow +DoCjjvbdVwJXucdg +EPCjjvbdauCHYKtI +EOcLKvbdNeDshhkE +DncLKvbdNGcQMpVL +EOcLKvbdIryBSmXl +DnbkKvbdTAFJICPE +EOcLKvbdrMzKYlHi +EOcKjvbdznopeDMY +EOcLKvbdMRvmZuQz +DncKjvbdeFOqbXCj +DncLKvbdbhlijfWx +EOcKjvbdqdEhpOWB +DoDLKvbdUWMQJsaR +DoDLKvbdptUGqrLU +EObjjvbdaSGChUFk +EPCjjvbdYTMAltOx +DncKjvbdEPCkLWbd +EOcKjvbdKCjDRKCx +EPDKjvbdZyDjNcMS +DncLKvbdFfKRnJUR +EPDKjvbdrNZiyLhJ +EOcKjvbdZeXfzgiC +EOcKjvbdbUbGwkTh +EPDLKvbdHfgZxwxH +DncLKvbdrovOjCuf +DnbjjvbdfNGWflik +DnbkKvbdZoNiFEyj +EPCjjvbddneTKtUS +EObjjvbdRbDdlIxk +EOcKjvbdKfFgbBRV +EPDKjvbdFyUuBDxC +EPCkKvbdiUzFXRtb +EPCjjvbdrJAJeNPF +DncLKvbdVAbRSqSZ +EObjjvbdaNKbTVMg +DoCkKvbdlhctQtqa +DoDKjvbdZshiZDrn +EPDLKvbdFkFSbglu +EPCjjvbdHffyxwxH +DncKjvbdTvLojTaR +DnbkKvbdauCHXkUI +DoDKjvbdGdKuiajK +EOcKjvbdkClKqHVH +EPDLKvbdnUtykKSG +DnbkKvbdBiKbKhej +DoDLKvbdHffzZXwg +EPCjjvbdbrbkTcjB +DoCkKvbdVwJYWDdg +DncLKvbdJJdAJogE +EPCkKvbdJvUfDdfi +DoDKjvbdZeYGzgiC +EObjjvbdZyEJnDMS +EOcLKvbdmSZVZsEJ +EPCkKvbdDnbjjvbd +EPCkKvbdJvVGDeGi +DoCjjvbdTXkLmzkY +DnbkKvbdLqwNZuQz +DncKjvbdZtIiYcsO +DoDKjvbdLYqKSztf +DnbkKvbdULuoBVni +EObkKvbdiBnbeWqR +EObjjvbdfILWRmqH +DncKjvbdezvYdhsw +DnbjjvbdJvUfEEfi +EPCkKvbdRpUHKGDw +EObkKvbdZGwEAPTJ +EOcLKvbdcTCkUEKB +EObjjvbdGAoQxizm +DnbjjvbdNwoVzcmt +DncLKvbdJbicRKDY +DnbkKvbdGZVVAcxC +EPCkKvbdRadFMJYk +DnbjjvbdxsNiNRag +DnbjjvbdiBncFXRR +EPCjjvbdySmiNRbH +DoDKjvbdeATqMxKG +DnbjjvbdtSrSyZdc +EOcKjvbdwtldpyLn +EPDKjvbdqwPkbiYq +EPDLKvbdzitpPcsU +DoDKjvbdDjHiuwjA +EPCkKvbdfMewGmKL +DncKjvbdlrYtyrci +EPCjjvbdZQldiMdq +EPDKjvbdJbjDQjCx +DncKjvbdqTsgRrKt +EPCkKvbdEvZQPljF +DoCkKvbdUsltGMWK +EOcLKvbdEJgivXjA +DnbkKvbdePFTLTtS +EPDKjvbdEYYLstTl +EPDKjvbdMfcPmPuL +DoDKjvbdBsAcTevr +EPDLKvbdwtleRZMO +EObjjvbdRotHJfDw +EOcKjvbdJuuFdFHJ +DnbjjvbdZoOIeFZj +DoDLKvbdsZlQSaHn +EPCjjvbddoFTLTtS +DncKjvbdbVBgXjsh +EPCkKvbdaMkBrtlg +EPDKjvbddiiqutzn +EObkKvbdiZuFkpnG +EPCkKvbdIxTaglRQ +EOcKjvbduaEYrndh +DnbjjvbdzQoMiJwA +DoCkKvbdsCGNMHKy +EObjjvbdMoxQunHT +DnbkKvbdxwiJbPzL +EOcLKvbdJbibpjCx +DncKjvbdIxTbHkpp +DoCkKvbdwuMeQxlO +EOcKjvbdKeehCBRV +EPCkKvbdZxdKNblS +EPCjjvbdLFegbBQu +DoCkKvbduLwwBUBX +DoDKjvbdjlbMZeHP +DoDLKvbdjAPfaPfj +EObjjvbdqGEFTvBI +EObjjvbdeAURNXif +EObjjvbdxmrgxTJD +EPCkKvbdqGDeUWAh +DncKjvbdqTsfqrKt +EObjjvbdjEjftoAO +EOcKjvbdNrtWHFUp +EObkKvbduCcUvvOo +EPCkKvbdvwMAvBWV +DncLKvbdtkwwBUBX +DoCjjvbdVZHsyjnn +EPDKjvbdQccBQQdS +DnbkKvbdjgfkeemk +EPDLKvbdFyVVBDxC +DncLKvbdrNZiyMIJ +EObjjvbdHfgZxwwg +DoDKjvbdqceIomvB +EPCkKvbdNGcPlouL +DoCkKvbdCIkBkIej +DoCjjvbdjKFhJmYS +EObkKvbdBsBDUGWr +EObkKvbdnQZxvKyC +DnbjjvbdhzVFkqOG +EPCjjvbdGLFScHlu +DoCjjvbdtlXwAtBX +DoDLKvbdUtMtFkvK +DoCkKvbdBvzchdov +DncLKvbdlZSrTZHU +EOcKjvbdZnnJEdyj +DncKjvbdYpleJMdq +EPDKjvbdiMEcmtcZ +EPCjjvbdfelZmgHA +DnbkKvbdLhalRYAS +DncKjvbdehLWRnRH +DnbjjvbdeKJqvUzn +EPCjjvbdqqtkOLBN +EOcLKvbdfRaWzlDP +DncLKvbdhtzFWquC +EObkKvbdJvVFdFGi +EObkKvbdMfcPlotk +DoCjjvbdtcCuWvPP +DnbjjvbdwtmFRZMO +DoDKjvbdsPvPKCvG +EPCjjvbdmfdwmOHZ +EPDLKvbdMgDPlouL +DoDKjvbdnGdwlnHZ +DoCkKvbdVwJXudFH +EObjjvbdQdCaQQcr +DnbkKvbdYSkaNUPY +DoCjjvbdULvPAuni +EPCjjvbdSZihScWA +DoCkKvbdBiLCKhej +DnbkKvbdhXZAzzAJ +EOcLKvbdQYmAGsRj +EOcLKvbdZtJIyDrn +DnbkKvbdNsTufduQ +EOcKjvbdEXxMUTsl +DoDLKvbdKyRJrzuG +DoDKjvbdrWpLbhxq +DnbjjvbdrDeIonWB +EPDKjvbdHELViaij +DoDLKvbdBdQBWJmG +DncLKvbdRjyGUfkT +EPDLKvbdYNqAYUut +EPDKjvbdRXNdClID +EPCkKvbdNwnuzdOU +EOcLKvbdjmBkydfo +DoCjjvbdrpWPKDVf +EPCkKvbdZyEKNbkr +EOcKjvbdQZNAHTRj +EOcKjvbdwtmEpxkn +DncLKvbdLhbMRYAS +DoCjjvbdsrrTZZdc +DncKjvbdxmrgxShc +EPCkKvbdmozZVkZC +EPCjjvbdbsDLTcia +DoDKjvbdGKeScIMu +EPCjjvbdrEFIpOWB +EOcKjvbdmpZxukZC +DoCkKvbdTkunaVni +DoCjjvbddneSkUUS +EPCjjvbdTlVoBWPJ +DoDKjvbdxsNhmSCH +EPCkKvbdVviXvDdg +DnbjjvbdwzHfFwdr +EPDKjvbdfMewHMjL +DoCjjvbdbsDKtDjB +EPDLKvbdUQpoVVIN +EObkKvbdrEFJPmua +EObkKvbdhlEcnUcZ +DoDKjvbdZRMeIleR +DnbjjvbdmajXYOnV +DoDKjvbdaRfDHtGL +DoCjjvbdbhljKewY +DoDLKvbdDwwksssl +DncLKvbdUMWOaVoJ +DncKjvbdWWiYWDdg +DoCjjvbdyXiJbQZk +DnbkKvbdHDkVibKK +EPCjjvbdtSrSxzEc +EOcLKvbdaSGChUFk +DnbkKvbdYSlBNUOx +EPDLKvbdJTZBSmYM +DoCjjvbdTkvOaWOi +DncKjvbdMowpvNfs +EPDKjvbdeEnqavcK +EOcLKvbdiifIJlxS +DnbkKvbdqceIpNua +EPDKjvbdrNZixkhJ +DncKjvbdiHKDZViu +DnbkKvbdrDdiPnWB +DncLKvbdLGFhCAqV +DoCjjvbdwuMdqYlO +EPCjjvbdePFTKssr +EObjjvbdVBCQrpqy +EObjjvbdbrcKsdKB +DnbkKvbdBvzciEpW +DoCjjvbdIHGyyXxH +EObjjvbdrzLpTAhO +EOcKjvbdemGWgNJk +EObkKvbdVZHtZjnn +EOcKjvbdiCObeXRR +EPCkKvbduoTzpkPU +DoCkKvbdrNZjYkgi +DnbkKvbdTAEhgand +EOcKjvbdhuZdwRuC +DoDLKvbdWWiXuceH +EPDKjvbdZoOIddzK +DncLKvbdVAbRSprZ +DnbjjvbdhgKDZWJu +DoCkKvbdVZITykOn +DoCkKvbdiGibyWKV +EPDLKvbdwyhGGYFS +DoDKjvbdiHKCxvJu +EPDLKvbdhyuGLpnG +EPDKjvbdOAJStKSA +EOcKjvbdzitpPdSt +DoCkKvbdzROlhjXA +DoDLKvbdtTSSxzEc +DoDKjvbdzoQRFCkx +DnbkKvbdxnSgxShc +DnbjjvbdiBoDFWqR +DoCjjvbdnBjWwoNu +DncLKvbdVYhTzKnn +DncLKvbdkIGkefNk +DnbkKvbdlqxuZsEJ +EOcLKvbdACrYJzIp +EPDKjvbdmaiwYOnV +EOcKjvbdYkrEUNlN +DoCjjvbdVUNTfLuj +DoDLKvbdfHkWSOQg +DnbkKvbdBraCsfXS +EOcKjvbdMJBkpxAS +DoDKjvbdcyyQXyQb +EObkKvbdeEnrCXDK +EObkKvbdFejSNiTq +DoCjjvbdEYXkstTl +EPDKjvbdyYIjBpZk +DncKjvbdiHJcZWKV +DncKjvbdQdDAoqDr +EObkKvbduDDUvvOo +EPCkKvbdzGyMANEw +DoDKjvbdQvnECkgc +DncKjvbdVviXudEg +DoDLKvbdQZNAHTSK +EPDKjvbdkCkjqHUg +EObjjvbdwyhFeweS +DoCjjvbdxwiJbQZk +EOcLKvbdEPDLLXDE +DncLKvbdVrNwbFLc +DoCkKvbdjAPgBPgK +EOcKjvbdpstGqqjt +EPDLKvbdHDkVjCKK +DncKjvbdirzhrjiz +DnbjjvbdxrnJNSBg +EPCkKvbdraelkgLZ +DncLKvbdptTgRqjt +DoCkKvbdIsYaTMxM +DoCjjvbdMpXqVnGs +DoDLKvbdUVkoitBR +DoCkKvbdjmCLyeHP +DoCjjvbdiVZeWquC +DoCjjvbdVUMtFlWK +EPDLKvbdxKvdHzzG +DoDKjvbdiMEdNuCy +EPDKjvbdwzIFfYEr +EObjjvbdJXsagkpp +EPCkKvbdxrmhmSBg +DoDKjvbdlqxuZsDi +EPDKjvbdsQVoJcVf +DnbjjvbdEYYLstUM +DncLKvbdkHgLfGNk +EPCjjvbdbsDKtDjB +DnbjjvbdJcKDQibx +DoCjjvbdyzdnSIIh +DnbkKvbdrpWOjCuf +EObjjvbdbAudeopX +DnbkKvbdYkqctNlN +EPDLKvbdfHkWRnRH +EPDLKvbdXmqAYUut +DncKjvbdFyVVBEXb +DnbkKvbdrDdhpNua +DncKjvbdeAURNXjG +DoCkKvbdOTUVgEuQ +EPCjjvbddwyssrFz +DoCjjvbdMpYRWNfs +DoCkKvbdjuvnDaww +DnbkKvbdVhXvXgYz +EObjjvbdTulQKTaR +EObjjvbdOAJTUJrA +EPDLKvbdsZkosBIO +DoCkKvbdhgJbxvKV +EPCjjvbdnBivxOnV +DncKjvbdxrnIlrCH +DncLKvbdzaAPHGbM +EPCkKvbduMXvaUBX +DnbkKvbdSBceMJZL +EObjjvbdJpzEoGOF +DnbkKvbdWexytAPT +DnbkKvbdkVwNcaxX +EOcLKvbdEYYLsstM +DoCkKvbdRosfiedX +EOcKjvbdwuMdpyMO +EObjjvbdUsmUFlWK +EObjjvbdjuwOECXw +DncKjvbdqlzJxkgi +DoCkKvbdiHJbxujV +EPDLKvbdakMFoNcA +EOcLKvbdmIcsqUqa +EPCkKvbdeKKSVtzn +EPCkKvbdvBEZTOeI +DncKjvbdpstHSRjt +EOcKjvbdKVuGEEfi +DoDLKvbdZQldiNFR +EPCjjvbdxnTIYShc +EOcKjvbdtunXjQsA +EPDKjvbdjcLkRHVH +DncKjvbdDoDLLXCd +DnbjjvbdZyEJnDMS +DoDLKvbdFkFTCgmV +EOcKjvbdhkddOUby +EPDLKvbdNeEUJIkE +DnbkKvbdyzeNqghh +EPDKjvbdFVxopMjF +EOcKjvbdGdLVibKK +DncKjvbdBdQAvJlf +DoDKjvbdbiNKLFwY +EPCkKvbdnGeYNNgZ +EPDLKvbdEYXlUTsl +DncLKvbdOEcsiIjd +DncKjvbdKaLHMbYR +DncKjvbdyTOIlrCH +EPCkKvbdMpXpumgT +EPCjjvbdtbbtwVno +DoDKjvbdrRtkOLAm +EObjjvbdbLLfPNcA +DncKjvbdjmCLydgP +DnbkKvbdTkuoBVoJ +DnbkKvbdSCDdlJYk +EObkKvbdCEPaVjNG +DoDLKvbdFaOpxizm +EPCjjvbdfMevgMjL +DoCkKvbdYzcGRjVy +DnbjjvbdKRZdoGNe +EPDLKvbdZisIQHCG +EOcLKvbdZMSEUOMN +DoCjjvbdiGibxuiu +EPDLKvbdZQmFJMeR +DoCkKvbdsBemLfjy +DncLKvbdzoPqEcMY +DncLKvbdMoxRWOGs +EOcLKvbdFeirOJUR +DoDLKvbdpyOgfpdY +DncLKvbdyzeOSIJI +DoDLKvbdRkZFuHKs +DnbkKvbdxVNEqZLn +DoCjjvbdMgDPmPuL +EPDKjvbdZQmEhmFR +DncKjvbdBraDUFwS +DoCkKvbdqqtjmkAm +EPDLKvbdLZQirzuG +DoDLKvbdlYsRryGt +EOcKjvbdKaLHNBxR +EOcKjvbdTqQoUthN +EObkKvbdhbObeXRR +EPDKjvbdJutfDeGi +DoDLKvbdRkZFuGkT +EOcKjvbdrbGNLgKy +DnbjjvbdmpZyWKyC +EPDKjvbdHELVjBij +EPCjjvbduDDUvuoP +EOcKjvbdrDeIonWB +DoCjjvbdnPyyWLZC +EPDKjvbddndrjtUS +EObjjvbdjuvnDbYX +EPDLKvbdCIkBjhfK +EObkKvbdZjTHogCG +EOcKjvbdjJehKNYS +DnbkKvbdSxLMNzkY +DoDLKvbdKDKDRJcY +EPCkKvbdmpZxvKxb +DnbjjvbdssSTYyeD +EObjjvbdHDkVibJj +DnbkKvbdSLZFtgLT +DoCjjvbdxnTIXriD +DnbkKvbdcSbjsdJa +DoCkKvbduoTzpjoU +DoCjjvbdXsLaNUOx +DoDLKvbdcScKtEJa +DnbkKvbdfpBzwDwh +EPDKjvbdjlakyeGo +DnbjjvbdYzcFqivZ +DncLKvbdCIkBjiGK +EPDLKvbdxZhFfYFS +EObjjvbdrEFJQNvB +DoDLKvbdjAPgBQHK +EOcLKvbdkDLjqHUg +DoCkKvbdiUzFWqtb +DoCkKvbdKVtfDdfi +DoDLKvbdwkXEHzyf +EObjjvbdqcdhpOWB +EPCkKvbdeEnrBvbj +DoCkKvbdCTAbsewS +DnbjjvbdNHCpMouL +DoDKjvbdSQUGiecw +DoDLKvbdelevfmKL +DoCkKvbdySnImSCH +DncKjvbdANIZSvzY +DncKjvbdrJAJeNPF +EPCjjvbdqTtGqqjt +EObjjvbdaRfDHsfL +EPCkKvbdrJAJeMne +EPDKjvbdiGjDYvJu +DoDKjvbdMgCpMpVL +DncKjvbdZjTIQHCG +EOcLKvbdJYTbILqQ +DoCkKvbdzoPqEbkx +EPDLKvbdvlvANDeN +DncLKvbdatafwjsh +DncLKvbdJuuFcdgJ +DncLKvbdwXMAvBWV +DoDLKvbdaMjbStmH +DoCkKvbdeOdsLTtS +DoDKjvbdbLLeoNcA +EPDKjvbdJKEAJpGd +DnbjjvbdZnnIeEyj +EOcLKvbdunszpjnt +EObkKvbdmoyyWKxb +EObkKvbdILazmvpk +EPDKjvbdQlwbYmtz +EPCjjvbderAvzkcP +EObkKvbdegjvSORH +EOcKjvbdsrqsYydc +EOcKjvbdfIKvSORH +DnbkKvbdFjdsDIMu +EPDKjvbdpstHRqjt +EOcLKvbdWRmxCElD +EOcLKvbdkHflGFnL +DoCjjvbdZjTHofbG +EObjjvbdeEoSBwCj +EPCkKvbdJSyBTNXl +DnbkKvbdUaCRTQqy +EPDKjvbdSLZFtfkT +DncKjvbdyNrgwsJD +DoDKjvbdezuxdiUX +DoDLKvbdACrXiyhp +DoDLKvbdxwiJaoyk +EOcKjvbdUxhTzLOn +DnbjjvbdnHFYNNfy +EOcLKvbdhanbeWqR +DoDKjvbdzHYlAMdw +DoCjjvbdKyRJrzuG +DncLKvbdliETpuRa +EObkKvbdczYpXyRC +DoDKjvbdFfKRnIsq +EPDKjvbdVAbQsRSZ +DncKjvbdezvZEiUX +DoCkKvbdZisHofbG +EPDKjvbdjKFgilxS +EOcLKvbduVmxKQsA +DnbjjvbdhuZeWrUb +EObkKvbdGYuUaDxC +DoDLKvbdaaWFGPpX +DnbkKvbdUQpoVUhN +EPCjjvbdZxdJmcMS +DncKjvbdhbPCdwRR +EObkKvbdZRMeJNFR +DnbjjvbdTlVoBWOi +DoCkKvbdatbHYKtI +EObkKvbdiHJbxvJu +DncKjvbdsQWOjCvG +DncLKvbdRosfjGEX +EObkKvbdREDBQRDr +EOcLKvbdeEnqawCj +EPDLKvbdGZVUaEXb +EPDLKvbdIryArmXl +EObjjvbdiiehJlwr +DoCkKvbdMJCMRYAS +DnbkKvbdlrYtzTDi +DoDLKvbdnGeXlmfy +DoCkKvbdSCDeMJZL +EObkKvbdLFegaaRV +DoDKjvbdGGKRmhsq +EObkKvbdiLdcnVDZ +DnbjjvbdGBOqZJzm +DnbjjvbdhfjCxvKV +EPCjjvbdlBNPNALA +EOcKjvbdtbbuXWPP +DncLKvbdEPCjjwDE +DoDLKvbdLqwNZtpz +EPDLKvbdbVCGwkUI +DncLKvbdZyDimcLr +DncLKvbdfILWSNpg +DoDKjvbdFVyPpNJe +DncKjvbdqiAJeMoF +EOcKjvbdqrVLOLAm +DoCjjvbdehKuqnQg +DoDLKvbdGLFTCglu +DoCjjvbdXrlBMtPY +DncKjvbdlYrrTYgU +EPCkKvbdWSNxCFMD +DncKjvbdUVkoitAq +DncLKvbdfHjvSORH +DoCkKvbdCEPaWKMf +EObkKvbdmbJvxPOV +EPDKjvbdwzHefXeS +EOcKjvbdvvlAvAuu +DncLKvbdpxngfqDx +DnbjjvbdIwtCIMQp +DncKjvbdHDjvKBjK +EOcKjvbdjmCLzFGo +DnbkKvbdZMRdTnMN +EObjjvbdEOcLLWbd +DoDLKvbdkNBlZdfo +EPCjjvbdemGXHNKL +EOcLKvbdkxrqryGt +EOcKjvbdsPvPKDWG +EOcKjvbdXsMAlsoY +DnbkKvbdmIcspuSB +DoCjjvbdUaBpsRRy +EOcLKvbdSPsfiedX +EOcKjvbdSCEEkiYk +DncKjvbdWXJXudEg +DncLKvbdRyigrbvA +DoDLKvbdUMVoAvOi +DnbjjvbdZtIhxcsO +EOcLKvbdJXsbHkpp +DnbkKvbdZtIhyETO +DncLKvbdHlBzmvpk +EObkKvbdzHZMAMeX +EPDKjvbdKCjCpjDY +EOcKjvbdjblKqHUg +DoDKjvbdGGJrNiUR +DoDLKvbdrEFIomvB +EPCkKvbdrovPKDVf +DoDKjvbdpxnhGpdY +EPDKjvbdemGWgNKL +EPDLKvbdTlWPAuoJ +EOcLKvbdhuZeWqtb +DnbkKvbdhyuGLpnG +EObjjvbdSBcdlJZL +DnbkKvbdeEnqbWcK +DnbjjvbdJKEAJofd +EObjjvbdbQGfckzd +EPCjjvbdRkYeuHLT +DoDLKvbdXrlBMtOx +EObkKvbdznoqFCkx +EPDLKvbdjggLfFnL +EPDKjvbdhuZdwSVC +EPCkKvbdeEoRbXDK +EPCkKvbdKaKgNCYR +DoDLKvbdWWhxWDdg +EPCjjvbdqUTfqqjt +EOcKjvbdcSbkTdJa +DncKjvbdauCHXjtI +DoCkKvbdQlwbZNtz +DnbjjvbdqvolCiYq +EOcLKvbdePFSjstS +EOcKjvbdhgKDZWKV +EObkKvbdCgLfHAzc +DncKjvbdnUuZkKSG +DnbjjvbdlhctRUrB +DoDKjvbdpyPHgREY +DoCkKvbdjJegimXr +EPDKjvbdfHkVrORH +EPDKjvbdyTOIlqbH +EPDKjvbdjKFhKNYS +EPDKjvbdFWZPpMie +EPCjjvbdIwsahLpp +EObkKvbdKfGIBaQu +DncKjvbdGFirOJTq +DnbjjvbdpedFUWBI +EPCkKvbdNeDshiKd +EObjjvbdBiLBjhej +EObjjvbdCJKbLJFj +DncKjvbdvwMAuaWV +DnbjjvbdZRMdhleR +DncKjvbdhgKCyViu +DoCkKvbdhficZWKV +DnbjjvbdwkWdHzyf +DncLKvbdVBBqSprZ +EOcLKvbdUsmTelVj +EOcLKvbdFxuVBEYC +DoDKjvbdKaLHMbYR +EPCkKvbdGdKuiaij +EPDKjvbdfIKvRnQg +DncKjvbdfekzNfgA +DoCkKvbdJbicRJbx +EOcKjvbdIwsagkpp +DncKjvbdOEctIiKd +DncKjvbdOTUVfduQ +EPCkKvbdFWZPomKF +EObjjvbdezvZFJUX +DoCjjvbdtSrTYzFD +DoCkKvbdbVCHYLTh +EPDLKvbdZMRdUOLm +DoDLKvbdNwoVzdNt +EPDLKvbdFaPRZJzm +DoCjjvbdxZhGFweS +EPCjjvbdZQmFImFR +DnbjjvbdsQWOibvG +DoCjjvbdSBdFMIxk +EPCkKvbdEObkKvcE +DoDKjvbdqFcdsvAh +EOcKjvbdezuyEhsw +DnbkKvbdVqnXaeMD +EObjjvbdnGeXlmgZ +DncLKvbdCIkBkIfK +EPDLKvbdpecdtWAh +EPDKjvbdsQVnjCvG +DoDKjvbdkDMLQfuH +EObjjvbdAMhZTWzY +EPCjjvbdiCObdvqR +DoDKjvbdUWLoisaR +DncLKvbdSPtHKGDw +EObjjvbdaNLBrtmH +EPDKjvbdUyHszKoO +DoDKjvbdQwNccLhD +EPDLKvbdnVUzKjRf +DoCkKvbdRyigrcWA +EOcLKvbdbiNKLGXY +DncKjvbdlhctRVSB +DoCkKvbdNPxRWNfs +EObjjvbdANHxsXZx +DnbjjvbdNrsvHEuQ +EPCjjvbdmbJvxPNu +EOcKjvbdJvVGEFGi +EPDKjvbdUWLoitAq +DoCkKvbdkDMKpfuH +EOcLKvbdfjfzbfAE +EOcLKvbdczZQYZRC +DoDLKvbdQwNcblHc +EObkKvbdOTTugEtp +DncKjvbdbUagYLTh +EPCjjvbdfNGWfmKL +EObjjvbdiVZdvrUb +DncLKvbdZyDinDMS +EPCkKvbdmaiwYOmu +EOcLKvbdqUUHSRkU +DncLKvbdDncKjvbd +DoCkKvbdVqmxCElD +EPCkKvbdaRfDIUFk +EOcKjvbdjKGIJlxS +DncLKvbdkxrrTZHU +DncKjvbdypnmIjXA +DoDLKvbdJpyeOfOF +DoDLKvbdwXMBVaVu +DoDKjvbdKfFhCAqV +DoCjjvbdIxTahLqQ +EOcLKvbdADSYKZiQ +DoCkKvbdMowpunHT +EOcKjvbdgKfzbfAE +EPDKjvbdhkddOVDZ +EPDLKvbdemFwHMik +EPCjjvbdUVlQKTaR +DncLKvbdRWnECkhD +DnbjjvbdkWXODbYX +DoCjjvbdZeYGzghb +DoCkKvbdSKyFtfkT +DoDLKvbdBhkCLJFj +DncKjvbdlhdTqVRa +EPDKjvbdqqtjmjaN +DoDLKvbdZjTHofbG +EPDLKvbdJmADzHVB +DoDLKvbdSBceLhyL +EObjjvbdqwPlCiYq +DncLKvbdYORAXtvU +EPDLKvbdZnnJEdyj +DoCjjvbduWNxKQsA +EPDKjvbdWSNxCElD +DoCkKvbdRjyFtgLT +DoCkKvbdeOeSkUUS +EOcKjvbdDihKVxKA +EObjjvbdffLymgHA +DoDLKvbdcScKsdKB +EPDLKvbdlYsSSyGt +DnbjjvbdGKeTDINV +DoDLKvbdCTBCtGXS +EObjjvbdEASIlyvw +EPDLKvbdfMfWfmKL +DoCkKvbdpstGqrLU +DncLKvbdtlXwAsaX +DoDKjvbdNrsvHEuQ +EObjjvbdCTBDTfXS +DoDKjvbdkMalZeHP +DoDLKvbdQccBPqDr +DnbkKvbdYqNEiNEq +DnbkKvbdvBDyTOeI +DnbjjvbdLAkGmBxR +EObkKvbdLiBlRYAS +EPCjjvbdTukpKUBR +EObkKvbdhuZeWqtb +DoDLKvbdZyEJmbkr +DnbjjvbdxrmiNSCH +EPCjjvbdKWVFdFHJ +EPCjjvbdRWmcblID +EPCkKvbdsQVoJcVf +EPCkKvbdGcjuibJj +DoCjjvbdJuteceHJ +DnbjjvbdLLAhWAJy +DncKjvbdULunaWOi +EOcLKvbdHlBznXQk +DoDKjvbdvBDxroEh +DoDKjvbdzaAPHGbM +DoDLKvbdUyITyjoO +DnbkKvbduaDxroFI +EObkKvbdAMhZSvzY +EObjjvbdDoDKkWbd +EObkKvbdGKdrbhNV +EPCkKvbdmgFXlnGy +EOcKjvbdzdzOzdzQ +EPCkKvbdKkBHvAJy +EOcKjvbdqAiFAWhE +DoCjjvbdQvmdClID +DncKjvbdMtsSKmAX +EObjjvbdziuPpETU +DoDKjvbddZyQYZQb +EPDLKvbdauBgXkTh +DnbkKvbdnCJvwnmu +DoCjjvbdxUmFQyMO +DncKjvbdXGYzUAPT +EPDLKvbdOAJTUKSA +DncKjvbddZyPwxqC +EOcKjvbdqlzKYlIJ +DnbjjvbdkVvnDaww +DnbjjvbdZdxGzhIb +DnbkKvbdDwxLtTsl +EObkKvbdGKdrcHmV +DncKjvbdTAFJHbOd +DoDKjvbdEObkKvcE +DnbkKvbdaNLCSuNH +DoDLKvbdDxYLtTtM +EObjjvbdVZIUZjnn +DoCkKvbdNsUVfduQ +EOcLKvbdGGKRmhtR +EPDKjvbdbKlFnmcA +DncKjvbdvvlAvBWV +DoCjjvbdliEUQtrB +DnbjjvbdjgfkfGNk +EPDKjvbdlYsSTYft +DoDLKvbdbKlGOnDA +EPDKjvbdjAPfaPfj +DnbkKvbdzGyMAMeX +DoCjjvbdZnmhddzK +EPCkKvbdIMBzmwQk +EObkKvbdjEkHVPAO +EPCkKvbdQccBPpdS +EPCjjvbdhgKCxvJu +DncLKvbdVgxVxHYz +EOcKjvbdxVNFQxkn +DoDKjvbdbLMGPNcA +DncLKvbdGckWJajK +DnbkKvbdrMyiyLgi +EOcLKvbdKefICApu +DoCjjvbdqFdEtWBI +EPCkKvbdYSlBNUPY +DoCjjvbdIwsbILpp +EPCjjvbdmgFYMnHZ +EObjjvbdQvmccMID +DncLKvbdURQntthN +EOcLKvbddxZtUSFz +EPCkKvbdhtzFWqtb +EOcKjvbdVBCRSpqy +DncKjvbdtbbtvvOo +EPCkKvbdczZQYZQb +DnbjjvbdQwODcLgc +EPDLKvbdtunXipsA +DncLKvbdBhjajhej +DoDKjvbdNrtVfduQ +EOcLKvbdKWUfDdfi +EObjjvbdpstHRrLU +DnbjjvbdznpRFClY +EPCjjvbdfNFvgMik +DoCjjvbdUsltGLvK +DnbjjvbdlqyVZsDi +DoCkKvbdNPwqWOHT +EOcLKvbdakLeoNcA +DoDKjvbdsCGNMGkZ +EPDKjvbdaRfDHsfL +DoDKjvbdZtIhyDrn +EPDLKvbdOStVgFUp +EPCkKvbdeATplxKG +DncLKvbdySmhlrBg +DoDKjvbdnCKWwoOV +DnbjjvbdDncKjvcE +EOcLKvbdwzIGGXdr +EObjjvbdmIdTqVSB +DnbjjvbdUGznLwVe +DncLKvbdTkvOaWPJ +DncKjvbdyOSgwsIc +DncKjvbdjmCLzFGo +DoDLKvbdpssfqqkU +EPDKjvbdmtuZjirG +EOcKjvbdOFEThhkE +DoDKjvbdIMBznWqL +EPCkKvbdJvVFcdfi +EPDKjvbdnBivxOmu +EObkKvbdTvLojTaR +DoCkKvbdMRwNZtpz +EObjjvbdEARhlzXX +DnbjjvbdcScLTcjB +DncKjvbdxmrhXrhc +DoDKjvbdEvZQQNKF +DncLKvbdGLErcHmV +DoDLKvbdFkFTChMu +DoCkKvbdOFETiIkE +EPDKjvbdnVUzLKRf +EPDKjvbdmuUzKjSG +EPCjjvbdwuNFQxkn +DncLKvbdeATpmXjG +EObjjvbdxUmEpxkn +EPDKjvbdcSbkTcjB +EPCjjvbdmbKXXoNu +EPDKjvbdSQUHKFdX +DoDKjvbdCTAbsewS +EOcLKvbdVwJYVdFH +DoDKjvbdZtIiYcsO +EPDKjvbdhkeENtcZ +EObkKvbdGBOpyJzm +EPCkKvbdRMxCYmtz +DoCjjvbdzjVPocsU +DoDLKvbdrDdiPnWB +EPCjjvbdFjdsDIMu +DoDLKvbdSLZGUgLT +EPDLKvbdKefHaaQu +DoDKjvbdKCibpicY +EOcLKvbdijGIJmYS +EObjjvbdelfWgNKL +DnbkKvbdbhmKKfWx +DoDKjvbdSQUHKGEX +EPCkKvbdnGdxMmgZ +DncLKvbdJJdAKPgE +EPDLKvbdmRyUyrdJ +EOcLKvbdhzUfLqOG +DoDKjvbdLAjgMaxR +DoDKjvbdRosfjGEX +EObkKvbdpssfqqjt +DnbkKvbdjAQHAofj +DncLKvbdidkHUoAO +DoCkKvbdCIjbLIej +DncLKvbdelfWfmKL +DoDLKvbdxUleQxkn +EPDLKvbdEvZQPljF +DncLKvbdJbjDQjCx +DncLKvbdyOTIXriD +DoDKjvbdTulPjUAq +DnbjjvbdJSyAsNYM +EOcLKvbdbBVeGQQX +EPCjjvbdbKkenmcA +EPCjjvbdiGjDZWJu +DncLKvbdcSbjsdJa +EObkKvbdZtJIyDsO +DoDLKvbdrafMkgLZ +DoCjjvbdiMFDmuDZ +DnbkKvbdnUtyjirG +EPDKjvbdfNFvflik +DoDLKvbdrWokcJZR +DncKjvbdWWhxWDdg +EPDLKvbdNeDtJJKd +EOcLKvbdqlzKYkhJ +DncKjvbdSQUHKGDw +DoCkKvbdkHflFfOL +EPCkKvbdRXNdDMID +DncLKvbdSLZFtfkT +EOcLKvbdZQldiMeR +DnbjjvbdSBdElJYk +DncLKvbdwWlBVaWV +DoCjjvbdhzUfLqOG +DoDLKvbdmJEUQuSB +DnbjjvbdULvPBVoJ +EPDLKvbdYkrDtOMN +EPDKjvbdHEKujBij +EObjjvbdJuuGDdfi +EObjjvbdzaAOgGbM +DncLKvbdkClLRHUg +EObkKvbdYTMAmToY +EObjjvbdxVMeQyLn +DoDKjvbdrEFJQNua +DncKjvbdYSlBNTnx +DnbjjvbdrSUkOLAm +EOcLKvbdrylQTBIO +DnbjjvbdrouoKDVf +DoDLKvbdwWkaVaVu +DoCkKvbdZQmFIleR +EPCjjvbdiLeENtby +DoCjjvbdrDeJQNua +EObjjvbdIGfzYxXg +DoCkKvbdySmiMqag +EOcKjvbdbVBgYLTh +DoDKjvbdLFehCApu +EPCkKvbdCDpAvJmG +EObkKvbdZLrDtOLm +EPCkKvbdZnnJEdyj +EPCjjvbdZjSgpGbG +EOcKjvbdWSOYBdkc +EPDKjvbdwtleQyLn +DnbkKvbdmJDtQuSB +EObkKvbdkWXODbXw +DncKjvbdezuyEiTw +EObjjvbdnBjWwnmu +EPDKjvbdZxdJmcMS +EPDKjvbdrbGNMHLZ +EObkKvbdEYXlTssl +DnbjjvbdyTOJNRag +DnbkKvbdGZVVAdYC +EPCjjvbdTYLMNzkY +DncLKvbdJcJcRKDY +EOcLKvbdYpmEhldq +DoCkKvbdjKFgjNYS +EPDLKvbdJbibqKCx +EPCjjvbdyTNiNSCH +DoDLKvbdGGKRmhsq +EPDLKvbdLAkGmCYR +EPDLKvbdCEPaWKMf +DoCkKvbdZsiIyDsO +EPCjjvbdjbkkRGuH +DnbkKvbdqYoHgREY +DoDLKvbdZMRctNkm +EObjjvbdDjIJvYKA +DncKjvbdVqnXbEkc +EPCkKvbdiHKCyViu +EOcKjvbdkHflGFmk +DoDKjvbdOFDsiIjd +EOcLKvbdVrOYCEkc +EPCjjvbdhtydvrUb +DoDLKvbdrNZjYlHi +EPDKjvbdVwIxWDeH +EObkKvbdhyuFlRNf +EPDLKvbdSKyFuHKs +DoCkKvbdBhjajiFj +DoDKjvbdhanbeWpq +DncKjvbdGGJqnJTq +EPDKjvbdZtJIyETO +EOcLKvbdANIZSvzY +DnbkKvbdptUHSSLU +DoDLKvbdRDcBPpdS +DoDKjvbdBcpAujNG +DnbjjvbdaaVdeopX +DnbjjvbdhtydvrUb +DoCkKvbdkWXNcaxX +DncLKvbdrNZjYkgi +EPCjjvbdBiKajiGK +EObkKvbdwkWcgzzG +EPCkKvbdRDcApQcr +DncLKvbdfekzNgHA +DoDKjvbdiBoCdwRR +EOcLKvbdIBlZdzAD +DnbkKvbdZLqcsnMN +DoDKjvbdatbGwkUI +EObjjvbdmgFXlmfy +EPDLKvbdxUmEqYkn +EPDLKvbdauBfxKsh +EObjjvbdsPvOjDVf +DnbkKvbdkVwNdBww +EPCkKvbdzaAPGfbM +EOcLKvbdRotGjGDw +EPCkKvbdqceJPmua +EPDLKvbdZyDinCkr +EObkKvbdCDoaWKMf +EOcKjvbdjmCLzEgP +EPDKjvbdHlBznXRL +DncKjvbdeOeTLTtS +EPCjjvbdGZUuBEXb +DnbkKvbdqTtHRqjt +EOcLKvbdFyUuAdXb +EPDLKvbdEARiMzWw +EOcKjvbdFeirNiUR +DoCkKvbdzjUoocsU +EOcLKvbdEztQdlCi +DncLKvbdKCjCpibx +EPCjjvbdxZhGFxFS +EObjjvbdwWkaWAvV +DnbkKvbdaaWFFoow +EOcKjvbdBsBDUGXS +EPDLKvbdmIdUQuRa +DncKjvbdVAbRTRRy +DoCkKvbdHffyxxYH +EObjjvbdDGkfHAzc +DoCkKvbdiCPDFXRR +EPCkKvbdVrNwbEkc +EPCkKvbdiGjDYvKV +DnbkKvbdIMBzmvpk +EPCkKvbdKxqJrztf +DncLKvbdmIctQuSB +EOcKjvbdaSFbhUGL +DoCjjvbdmbKWwnmu +DoCkKvbdiUyeWrVC +DncKjvbdGGKRmhsq +DoCjjvbdehLVqnQg +DncLKvbdTkunaVoJ +DnbjjvbdGZUtaDxC +EPCjjvbdtSrSyZeD +DoDLKvbdjbkkQfuH +EOcLKvbdOFDtJJLE +DnbjjvbdBdQAvJlf +DoCkKvbduDDVWvPP +EOcKjvbdZtJIyDsO +DncLKvbdQccBPpdS +DncLKvbdiUzEvquC +EPCjjvbdvvkaWAuu +DoDLKvbdZoOIeEzK +DnbkKvbdkCkkRGuH +EOcKjvbdRkZGVHLT +EObkKvbdtcCuXVno +EPCjjvbdMpYRVnGs +DoDKjvbdFfJrNiTq +DnbkKvbdZnmiFFZj +EPDLKvbdbhmKKfWx +DoDLKvbdDjHivXjA +DoDLKvbdiLeDnVDZ +EOcLKvbdUQqOtthN +EPDKjvbdZHXEAOri +EObkKvbdvAdYrndh +EObkKvbdQlwaxnUz +DoCjjvbdQwOEDLhD +EPDLKvbdqrVKnLBN +EObjjvbdwtmFQxkn +EPDLKvbdTfznMWvF +DnbkKvbdaMjasVNH +EPCjjvbdcyyQXxpb +DncKjvbdMfcQMpUk +DnbjjvbdZnmheEzK +DncLKvbdbrbkUDia +DncLKvbdiCOcFXRR +DoCjjvbdZxcimblS +EPDLKvbdRkYfVHKs +DncKjvbdDoDKjvbd +EOcKjvbdGAnpxizm +EOcKjvbdYpldhldq +DnbkKvbdQwOEDMID +DnbjjvbdcyxoxYpb +DoCjjvbdakMGOnDA +EPCjjvbdLAkGlawq +DncKjvbdJJdAKPfd +EOcLKvbdxrnImSBg +DoDLKvbdNddUJIjd +DncLKvbdfIKvRmpg +DoCjjvbdiZuGLqOG +EOcLKvbdeAURMwif +DncLKvbdiCPCeWpq +DoCjjvbdGcjvKBij +EPDKjvbdRDcBQQdS +EPCjjvbdUtMtGLvK +EPDKjvbdyXhjBoyk +DoDKjvbdqZOgfpcx +EObjjvbdYTMAmUPY +DoDLKvbdiCObeXQq +DncKjvbdmJDtRUqa +EObkKvbdSCEElIyL +EObkKvbdNGbpMouL +DoCkKvbdEzsqElCi +EObjjvbdOStWHFVQ +EPCjjvbdjmBlZdfo +EPDKjvbdiUyeWqtb +DnbjjvbdYSkaNUPY +DoCkKvbdTAEhhCPE +DoCjjvbdmttyjjSG +EOcKjvbdrMyjZMIJ +EPDKjvbdUsmTelVj +EPCkKvbdNsTugFUp +DnbkKvbdWRnYBeMD +DncLKvbdHgGzZXxH +EPDLKvbdZLrDsmlN +DncLKvbdcSbkUDjB +EObkKvbdziuPpDrt +DoCjjvbdZyEJmblS +EObkKvbdjggMFenL +DnbkKvbdmfeXmNfy +EObkKvbdiBncFXRR +EPDKjvbdADSXiyiQ +EObjjvbdLFfHbApu +EOcLKvbdRMwbZOUz +EPCkKvbdFVxoomJe +EOcLKvbdZnmiEdyj +DncLKvbdULunaVoJ +DncLKvbddndsKtTr +EPDKjvbdEztQeMDJ +EObkKvbdcScKscjB +EOcKjvbdFkErbglu +DoCkKvbdsBfMlGkZ +EPDLKvbdCSaCsfWr +EPCjjvbdVAapsRSZ +EOcLKvbdgFkzNfgA +EPDLKvbdjhHLefNk +EObjjvbdyNsIXsIc +DoCjjvbdqcdiPmvB +EOcKjvbdeXyssrFz +DnbjjvbdEOcKjwCd +DoDLKvbdGKdrbgmV +DncLKvbdKQzEoFnF +DoCkKvbdqvpMDJZR +EObkKvbdZyEKODMS +DncKjvbdBhjbKiFj +DncKjvbdfHkVrNqH +DncLKvbdeXyssrFz +EObjjvbdxmsHwriD +EPDKjvbdRyigsCvA +DoCkKvbdZoNiEeZj +EPCkKvbdhzUfLpnG +DncKjvbdVUNUFkuj +EPDKjvbdRXNdDMID +EObkKvbdlBMnmALA +EPDKjvbdffMZnHHA +EPCjjvbdEARhlyvw +EOcKjvbdVTltGLvK +EOcKjvbdJqZdoFme +EObkKvbdyOTHwsIc +DoDLKvbdCfkegAzc +DnbkKvbdZMRdTmkm +DnbkKvbdhkeEOUcZ +DoDKjvbdZnnIeEyj +DnbjjvbdrafNMGkZ +DoDLKvbdZtJIyESn +EOcLKvbdaRecITek +EPCjjvbdZoOJEdyj +DoDLKvbdxsNhlrBg +EPCjjvbdZxdKNcMS +DoCjjvbdCWzdJEov +EObkKvbdTppnttgm +DnbkKvbdjmCLydfo +EObkKvbdBsAbsewS +EObjjvbdjgflFemk +DnbjjvbdpstGrSKt +EOcLKvbdOTTvHFUp +DoCkKvbdczYowyRC +EObkKvbdTvMPjUAq +EOcKjvbdezvYeJUX +EPCkKvbdzHYlANEw +EPCkKvbdqcdiQOVa +DoCkKvbdsrrSxyeD +EObkKvbdOTUWGeUp +DoDKjvbdbUbHYLTh +DoCkKvbdHakydzAD +DoDKjvbddjJrWUzn +EPDKjvbdmaiwYPOV +DoCjjvbdtbcUwVno +EPDLKvbdrMyjYkgi +DoCjjvbdUQpoUtgm +DncKjvbdddoSBwDK +EPCkKvbdatbGwkTh +DncKjvbdmbJvxPNu +DnbjjvbdwzHeewdr +DncLKvbdzitpPcrt +EOcLKvbdrMyjYkgi +EOcLKvbdrEFIomvB +DoDLKvbdiifIJlxS +EOcLKvbdtvOYKQsA +DoCkKvbdxsNhlqag +DnbjjvbdyTOIlqag +DncLKvbdIGgZyYXg +EOcKjvbdUsmUGMWK +EObkKvbdhzUfMQnG +EPDLKvbdZxdJnCkr +DncKjvbdKWUeceGi +EOcLKvbdmbJvwnnV +DoDLKvbdDncKjvbd +EPCkKvbdZoNheEyj +DncLKvbdVqnXadlD +DncLKvbdtunXipsA +DncLKvbdjAPgBPfj +DoCkKvbdyqPNJKXA +DncKjvbdrpWPJbuf +EOcKjvbdqvpMDJYq +DnbjjvbdcTDLUDia +DnbkKvbdiGjCxvKV +EPDKjvbdauBfxKtI +DoCkKvbdLFfHbApu +DoDLKvbdHffyyXwg +EOcKjvbdIxUCHkqQ +DoDKjvbdzQoMiJwA +DoDKjvbdyYIjBoyk +EObkKvbdxnSgwriD +EObkKvbdIMBznWpk +EPDKjvbdYlSDtOMN +DoDKjvbdijGHjMxS +EOcKjvbdYkqcsnMN +DoCjjvbdmaiwYOmu +EPDKjvbdHELWKBjK +DoCjjvbdwtmFRYlO +EOcLKvbdFeiqnJTq +EPDKjvbdiBncEvqR +DoCkKvbdJXsbILpp +EObjjvbdULunaVni +DncKjvbdDwxLstUM +DoDKjvbdrWpMChyR +EObkKvbdYzcFqivZ +DncKjvbdEzspdlDJ +EPDKjvbdfMfXGmKL +DoCkKvbdCTAbtGWr +DoDLKvbdRkZGUgKs +EPCkKvbdFWZQQMie +DnbjjvbdxVNEqYkn +DoCjjvbdeFPRbWbj +EPCkKvbdZshhyESn +EObjjvbdqrVKnLAm +EPCjjvbdptUGqqjt +EOcLKvbdrEEhpOVa +DncKjvbdzQoNIjXA +DncLKvbdmgFXlnGy +DoDKjvbdZjShQHBf +DnbjjvbdjKGHjNXr +DoDLKvbdqFcdsvAh +EPCkKvbdOEdUIiLE +EPDLKvbdNeEUJJKd +EPCjjvbdzHZMANEw +DnbkKvbdqlzJyMIJ +DnbjjvbdelfXHMjL +EPCkKvbdANHyTWzY +DnbjjvbdREDBPpcr +DncLKvbdQmYCZOUz +EOcKjvbduoTzpjoU +DoCjjvbdqrUjmkBN +DnbjjvbdyfxlANFX +EOcLKvbdJmADygUa +EPDLKvbdyNrhYTIc +DoCjjvbdCTAbtFwS +DncLKvbdSwkLmzkY +DnbjjvbdjhHMFfNk +DoCkKvbdZeXfzhIb +DnbjjvbdbrbjtEJa +DoCkKvbdxrmhmRbH +DoDLKvbdrXQLbhxq +EObjjvbdTulQKUBR +EPCkKvbdMpYQumgT +DncKjvbderBWzlDP +DoCjjvbdiGjCxvJu +DoCjjvbdlZSqsZGt +EOcLKvbdZisIPfaf +DnbkKvbdHEKvKBij +DncLKvbdjSziSjiz +EPDKjvbdCEQBWJmG +EObkKvbdGGKRmiUR +EPDKjvbdMuTRkNAX +DnbjjvbdrXQLbiYq +EPCjjvbdOTUWGduQ +EPCjjvbdnBjXXoNu +DoDLKvbdcarmSAUN +DoCjjvbdNPwqWOGs +EObkKvbdUslsekvK +DnbjjvbdzaAPGfbM +DoCkKvbdGdLVjCJj +DoDLKvbdRjyFtfkT +DoDLKvbdGLFTDHlu +DnbkKvbdGFirOJUR +EPDLKvbddoFTLUUS +EObkKvbdkxrrTZGt +DncKjvbdxrnJMqag +EOcLKvbdCDpBWJmG +DoCjjvbdlqyUysDi +EPDKjvbdTfzmlXVe +DncKjvbdEuxpQMie +EOcKjvbdbLLfPNcA +DncKjvbdVgxWXgYz +DoDKjvbdrbFmLgKy +DoCjjvbdzaAPGfbM +DncLKvbdYSlAlsoY +DoDLKvbdZyEJnClS +EPDLKvbdEvYopMjF +DncKjvbdmtuZjiqf +DoCjjvbdCJKbLIfK +EOcLKvbdcIljLFvx +EObkKvbdrJAKFNPF +DoDKjvbdBiKbKhfK +EPDKjvbdWIYWYGxz +DoCkKvbdjAQGaQHK +DnbjjvbdjblLQftg +DncLKvbdbhlikGXY +EPDKjvbdZLrDsmkm +DoDLKvbdVTlsfMWK +DoCjjvbdliDsptqa +DnbkKvbdjuvmcbXw +DoCjjvbdbVCHXjtI +DoCkKvbdQvmdClID +DnbjjvbdLAkHNCXq +EPDKjvbdZtIhyETO +DnbkKvbdYkqdTmlN +DoDKjvbdMtrrKmAX +DncLKvbdJXtCIMQp +EPCkKvbdlhdTqUqa +EObjjvbdnHFYNNfy +EPDKjvbdxrmhlrBg +DncLKvbdiLeDmtcZ +DncKjvbdNrsufdtp +EObkKvbdlhcsptqa +EObjjvbdNeETiIkE +DnbkKvbdxsNhmRbH +DnbkKvbdADRxKZhp +DnbjjvbdTqROuUgm +EOcKjvbdpxoIGqDx +EOcLKvbdqBIeAWhE +DnbjjvbdCIkBjiFj +DncLKvbdTlWPBWPJ +DoCjjvbdEKHjVxKA +DnbkKvbdZRNFImEq +EObkKvbdJbicQjCx +DoDKjvbdNsTufeVQ +EObjjvbdDxYMUTsl +DoDLKvbdaSFcITfL +EPDKjvbdcTDLTcia +DoCkKvbdlhdTpuRa +EObjjvbdCJKbKiFj +DncKjvbdqAiFAWhE +EPDKjvbdUslsfLuj +EObjjvbdWWiXuceH +EPCjjvbdOEcshiLE +EPDLKvbdEJhJuxKA +DoCkKvbdKyRKSzuG +DncKjvbdHffzZXxH +EOcLKvbdSLZGUfkT +EObkKvbdHgHZxwxH +DnbkKvbdcSbjtEJa +EPDKjvbdZGwEAPTJ +DoDLKvbdeAURNXif +EPDLKvbdMpYQunGs +EObkKvbdNeDshiKd +DoDLKvbdzoQQdbkx +EPDKjvbdWHxWXfxz +EPCjjvbdCEPaVjNG +DoCjjvbdbhlikFvx +EOcLKvbdBvzdIdpW +DoCkKvbdNPwqWNfs +EPCjjvbdbhlijfWx +DncKjvbdqwQLbiZR +EObjjvbdkClLRGuH +DncKjvbdNHDQNQVL +DncKjvbdhkdcmuDZ +EOcKjvbdKWVFdFHJ +EPDLKvbdYTMBMtOx +EObkKvbdSKxfVGjs +DncKjvbdZoOJEdzK +EObjjvbdMpXqVmgT +EPDKjvbdhaoDFXRR +EPCjjvbdrpWPJcVf +EOcKjvbdczYpYZRC +DoDLKvbdLLAhWAJy +DoDKjvbdEObkLXDE +EPDKjvbdnVUykKRf +DnbkKvbdBvzdIdov +EOcKjvbdGFirOJUR +DoCjjvbdGGJrNiTq +EPDKjvbdqAheAWgd +DncKjvbdxmsIXriD +EObkKvbdVAbQsRRy +EPDKjvbdRXODbkhD +EObjjvbdVZHtZjoO +EOcKjvbdffMZmfgA +EOcLKvbdbiMjLGXY +DoDKjvbdUQpoVUhN +EPCkKvbdhfjCxuiu +DoCkKvbdziuPocsU +EObjjvbdBhkBkJFj +DnbjjvbdeAURNXif +DncKjvbdQlxByOUz +EPDLKvbdRbEEkhxk +EPCjjvbdrbFlkgKy +DoCjjvbdaSFbhUGL +EOcKjvbdsCGMkfkZ +DoCkKvbdJbicRJcY +DnbkKvbdqlzKYlHi +DoCjjvbdZyDimblS +EOcLKvbdsrqsZZdc +DoDKjvbdjggMGGNk +DnbkKvbdADSXiyiQ +DoCkKvbdehKurORH +EOcLKvbdrylPsAgn +EPCjjvbdRWmdClID +EPCjjvbdbsCjsdKB +EObjjvbdUQpoVVHm +DnbkKvbdiCObeXQq +DncLKvbdUQpoVUhN +DoCkKvbdKCicRKDY +DncKjvbdjlakzFGo +DnbkKvbdMgDQMpVL +DoDLKvbdWSNxBeMD +DnbkKvbdvBEZTOdh +EPCjjvbdsQWPKCuf +EObjjvbdZeYGzghb +DnbkKvbdxsNhmSCH +EPDLKvbdkySrTZGt +EObkKvbdrDdiQNvB +DncLKvbdHDjuiajK +DoCjjvbdURROtuIN +DncKjvbdKyRJrztf +EObjjvbdIGfyyYXg +DncLKvbdXsMBMtPY +EPCkKvbdaaVdfPpX +DncKjvbdiHJbyWJu +EOcKjvbdSKxfVGjs +DoDKjvbdxZgfFwdr +DnbkKvbdRNYCZNtz +EPCkKvbdCDoaWKNG +DoDKjvbdDjHjWYKA +EPDKjvbdyNsHwsIc +DoDKjvbdUtNTfLuj +DoDLKvbdGGKRnJTq +EPCkKvbdsBemMGjy +EPDKjvbdSQUHKFcw +DnbjjvbdkClKpfuH +EObjjvbdRyjHrcWA +EOcLKvbdSPsfjGEX +DoCjjvbdGckWKBij +EPCkKvbdGdKujBij +DnbjjvbdcJMijewY +EPDKjvbdkIGkefOL +EPCkKvbdrSVLNkBN +DnbkKvbdrpWPJbvG +DoDLKvbdZirgpHBf +EPCkKvbdHDjujBij +EPCkKvbdvBDySoEh +DoDLKvbdePEsKssr +DoDLKvbdZRMdhldq +EObjjvbdUQqPUtgm +DoDLKvbdMSXNZtpz +EObjjvbdVYhTzKnn +EOcKjvbdrNZixlIJ +DoDLKvbdTpqPVVIN +DnbkKvbdkCkjqHVH +DnbkKvbdkWWmcaxX +EOcLKvbdJSyBSlwl +EObkKvbdmRxtzTEJ +DncKjvbdptTgRqjt +EOcLKvbdqYoHfqEY +DoDKjvbdGZUtaDxC +EOcKjvbdKQydoGNe +EPDLKvbdssSTZZeD +EObjjvbdhkddOUcZ +DoDKjvbdGdKvJbKK +EOcKjvbdULvPAuoJ +DoCkKvbdrEFJPnWB +DnbjjvbdfNGWfmJk +EPCkKvbdkWXODaww +EOcKjvbdMtrrKmAX +DnbjjvbdEuyPpMie +EObjjvbdrSVKmkAm +EPDLKvbdhanbdvqR +DoCkKvbdkWWmdBww +DnbjjvbdxUleQyLn +EOcLKvbdpyPHfpdY +DncKjvbdpfDeTvBI +DoCkKvbdnVVZjirG +DnbkKvbdzjVPocsU +EPDLKvbdmfdwlmfy +DnbkKvbdSKyFuGjs +EObkKvbdVAaprpqy +EPCjjvbdUaBqTRRy +EObkKvbdZoNhddzK +DncKjvbdrNZiyLhJ +DncKjvbdaMkBruNH +DoDKjvbdZyDjNcMS +EPCjjvbdZjTIQHCG +EObkKvbdjJegilwr +EPDKjvbdHffzYxYH +EPDKjvbdaSGChTfL +DoDLKvbdcJMjLGWx +EOcLKvbdtlXvaTaX +DoCjjvbdGYuVAcxC +EOcLKvbdUsltGLvK +EPDLKvbdRNXayOUz +DoDLKvbdRadFLiYk +EOcKjvbdCTAbsfXS +EPCjjvbdGZVVAdYC +EPDLKvbdypnliJwA +EPCjjvbdSBdFLhxk +EOcLKvbdGLFSbhNV +DncKjvbdTppnuUhN +EObkKvbdezvYdiTw +DoCkKvbdIsZBSlxM +DncLKvbdRNYBxmtz +EPCkKvbdeFOqawCj +DnbjjvbdtSrTYzEc +DncKjvbdkDLkQgUg +DnbjjvbdEARhlzXX +EOcKjvbdWRmxBeMD +DoDLKvbdzQnliKXA +EPDKjvbdpfDdtWAh +DncLKvbdMgCpMpVL +DnbkKvbdiZtfLpmf +EPDLKvbdzQoNJJwA +EPCkKvbdaNKasUmH +EPDLKvbdRbDeLhyL +DoDLKvbdKRZeOeme +EOcKjvbdZxdJmcMS +DncLKvbdeKKSVtzn +EPDLKvbdRjxeuHLT +EObkKvbdNGcPmPtk +DoCkKvbdtcDVWvPP +EPCjjvbdcTDKscjB +DoDLKvbdbrcLTcia +EObjjvbdvlvAMcdm +EObjjvbdFxuVBDwb +EPCjjvbdhkdcmtby +EOcKjvbdRotHKFcw +DncLKvbdelfWgNKL +EObkKvbduCbuXVno +EPDKjvbdEYXlUUUM +EOcKjvbdbUbHXjsh +EOcLKvbdmgEwmOHZ +DoCjjvbdEXxLsssl +EPDLKvbdZLqdTmlN +EOcLKvbdbsCkUEJa +EOcKjvbdqvpLbhxq +EOcKjvbdfIKvRmpg +DncLKvbdGBOpxizm +DoDLKvbdnBiwXnmu +DoCjjvbdKWVFceGi +EOcLKvbdRbEEkiZL +EObjjvbdffMZmgHA +DoCjjvbdUMWPBWPJ +EObkKvbdkClKpftg +DoDLKvbdBhkBkIej +DoDKjvbdhgJbyWJu +DoCjjvbdEASIlzXX +EPDKjvbdGZUtaDxC +DnbjjvbdlYsRryHU +EOcKjvbdhgKCyWJu +EPCkKvbdsQWOibuf +DoCjjvbdRMwbYmtz +DoDKjvbdZxdJnClS +EPCjjvbdJTZBTNYM +DnbjjvbdiLeEOUby +EOcLKvbdjEjgUoAO +EPCkKvbdzitopDrt +EPCjjvbdtcCuWvPP +DncKjvbdZMRdUNlN +DoDLKvbddZxoxZRC +DoDKjvbdFVxoomKF +DoCkKvbdSLYeuGkT +DncLKvbdYSlBNTnx +EObkKvbdeuzwoizs +EPDKjvbdUQpoUuIN +DoDKjvbdmpZxujyC +EPCjjvbdDGlFgAzc +EPCjjvbdkCkkRGuH +DnbkKvbdvlvAMdFN +DoDLKvbdatbHXkUI +EPCjjvbdFWYoolie +DnbjjvbdrEFJPnWB +EObkKvbdpyOggQcx +EOcKjvbdqwQMChxq +EOcKjvbdqrVLNkAm +EOcKjvbderBWzlCo +DoDLKvbdRWmdDMHc +EOcLKvbdZoNhdeZj +DnbkKvbdunszpkPU +EPDKjvbdGAnpxizm +DoCkKvbdKCjCqKCx +EOcKjvbdZshhyDrn +DoDKjvbdddoSBvcK +DncKjvbdcScKtEJa +EOcLKvbdZjShQGbG +DncLKvbdDncKkXDE +EPDLKvbdrzMQTBHn +EPDLKvbdIxUBglRQ +EPDKjvbdcyxpXxpb +EObkKvbdMSXMytpz +EObkKvbdijGIKMwr +EObkKvbdzdzOzdyp +DnbjjvbdeATplwjG +DnbkKvbdcIlikFwY +DoDLKvbdsPunicVf +EPDKjvbdmozYvLZC +DoCkKvbdkyTSSxgU +DncLKvbdRWnDcLhD +DncKjvbdHELWJaij +DncKjvbdZQmFIleR +EOcKjvbdiCOcEvpq +EOcKjvbdbrbkUEKB +EOcLKvbdOFEThhjd +EObkKvbdbBVdepPw +EObkKvbdUxhTzKnn +EObkKvbdzoPpdblY +EOcLKvbdrbFllHLZ +DoDKjvbdjggMGGOL +DncLKvbdqceJQNua +DoDKjvbdiHJbxvJu +DoDLKvbdySnImSBg +EPCkKvbdtTRrxzFD +EOcLKvbdkVvnEBxX +DnbjjvbdtcCtvvOo +EPCkKvbdyzdmrHiI +DoDKjvbdFjdrbhMu +DoDLKvbdZyEKODLr +DoDKjvbdURQnuVHm +EPCkKvbdZyDimcMS +EOcLKvbdNQXpunHT +DnbjjvbdQlxCYmtz +DnbjjvbdCDoaVimG +EObjjvbdsPvOibvG +DnbjjvbdgGLynGgA +DncLKvbdCDoaWJmG +EObkKvbdnCKXXnnV +EOcLKvbdUxgtZkPO +DnbkKvbdiMFDmuDZ +DncKjvbdiGicZWKV +DoDKjvbdcScKtEJa +DoDKjvbdpssgRqkU +DncKjvbdsBfNLgKy +DoDLKvbdGYttaDwb +DncKjvbdjvWnDaxX +EPCjjvbdhgJcYuiu +DnbjjvbdxUldpxlO +DoDKjvbdUaCRSqSZ +DnbkKvbdNwoVzdNt +DoCkKvbdZnnIeEzK +EPDKjvbdNeEUJIkE +DnbjjvbdJbjDQjDY +EPDLKvbdKVuFceGi +EPCkKvbdKkBIWAJy +EObjjvbdrafMlHLZ +EOcLKvbdZLqctNkm +EObjjvbdMgComPtk +DncKjvbdjhHMGGOL +DnbkKvbdJYUCIMQp +DoCjjvbdhlEcnVCy +DoDLKvbdxsOJNSBg +EOcLKvbdRMxBxmtz +EOcLKvbdHDjujCJj +EObjjvbdZRMdhmFR +EPDLKvbdUQpoUthN +EPCkKvbdvlvANEFN +EObkKvbdSCEEkhxk +EPCjjvbdLBKfmCXq +EPDKjvbdOStVfduQ +EPCjjvbdGcjvJbKK +DnbjjvbdVBBprpqy +DoCjjvbdirziTLJz +DncLKvbdFWYpQNKF +DoDLKvbdjKGHjNYS +DncKjvbdZnmiEdzK +DoDKjvbdySmiMrBg +DncLKvbdeAURNYKG +EPDLKvbdemGWflik +DoDKjvbdaMkBrtmH +DoDKjvbdIxUBglRQ +DoDKjvbdOEcshhjd +EPCjjvbdpxnhGqDx +DncKjvbdYSlBNToY +DnbjjvbdGGKSOJUR +EOcLKvbdZjTHpGbG +EPCjjvbdIHGzZYXg +DncKjvbddndsLTsr +DnbjjvbdqAheAXIE +EOcKjvbdVhXvXfxz +DncKjvbdFyVVAdYC +DnbjjvbdJvVFceGi +EPCkKvbdoznDjwoA +EPDKjvbdvPTzqLPU +EObjjvbdiifIKMwr +EOcLKvbdlZTSSxgU +EObjjvbdQvnECkgc +DncLKvbdjgfkfGNk +DnbkKvbdCDoaWJmG +DnbkKvbdxnTHwriD +DncKjvbdoAKzshDn +DoDKjvbdvAdZSndh +DnbjjvbdRpTgKFcw +EOcLKvbdiiegilwr +EOcKjvbdGdLVjBjK +EObkKvbdGFjRmhtR +EPCjjvbdZsiJYdTO +EPCjjvbdJJdAKPfd +EPDLKvbdKfGHbBRV +DncLKvbdjhHMFenL +EObkKvbdbLMFnnDA +DoCjjvbdUWMPisaR +DnbkKvbdZjTHpHCG +EObkKvbdbsCkTcjB +EPCkKvbdSLYfUfkT +DoDKjvbdZeYGzhIb +DncKjvbdrovPJcVf +EPCjjvbdePFSjtTr +DncKjvbdJbibqJbx +EPDLKvbdDxYMUUTl +DnbkKvbdZHXEAPSi +DncKjvbdVTmUFlVj +EPDKjvbdzoQREcLx +EPDKjvbdKfFhCAqV +DoDKjvbduDDUwVoP +DoDKjvbdgFlZmfgA +EObjjvbdTAEiHbOd +DoCkKvbdMowqVmgT +DncKjvbduMXwBTaX +DncKjvbdeYZssrFz +DncLKvbdmfdxNNgZ +DncLKvbdxLXDgzzG +DoCjjvbdNsTvGduQ +EPDLKvbdTpqOtuHm +EObkKvbdZMRctOMN +EPCjjvbdHEKuibJj +EPCjjvbdBiKbLJGK +DoCjjvbdUtNUFkvK +EOcKjvbdVTltFkuj +DnbjjvbdczYpXxqC +EPDLKvbduWNxKQsA +EOcKjvbddZyQYYqC +DnbkKvbdyfyMAMdw +DncLKvbdDihKWXjA +EPCjjvbdoAKztIDn +DoCjjvbdcTDLUDjB +EPDKjvbdJcJcRKCx +DncKjvbdIxTahLqQ +DoDLKvbdTqROttgm +DoDKjvbdjblLQgUg +EOcLKvbdTppnuUhN +EPCjjvbdrMyjZLgi +EObjjvbdypnmIjXA +DoCkKvbdczYoxZRC +EObkKvbdFjeTDHmV +EPCjjvbdZxcimbkr +DoDKjvbdatbHXkUI +EPDKjvbdvmWAMdEm +DoCjjvbdqwQMCiYq +DoDKjvbduWNwjQsA +DncKjvbdACqwjZiQ +DoCjjvbdOTTvGduQ +EObkKvbdirzhsKiz +EObjjvbdOTTugFUp +EOcLKvbdKDJbqJcY +DoCjjvbdiUyeXRtb +EObjjvbdfMfXHNKL +EOcKjvbdjhHMFfNk +DncKjvbdRpUGjFcw +EPCjjvbdfILVqnRH +EOcKjvbdiHKCyWJu +DoDLKvbdnPzYvLYb +DnbkKvbdnGeYNOHZ +DoDKjvbdtvOXjQsA +EPCjjvbdmIctRVRa +EOcKjvbdpyOhGpcx +DnbkKvbdKQydoFnF +DoDKjvbdkVvnDaww +EObjjvbdbUbHXjsh +EOcKjvbdCJLCLIfK +EPDKjvbdZeYGzhJC +DncKjvbdcScLUDia +DoCkKvbdQmXbZOUz +EOcLKvbdRadFMIxk +DnbkKvbdziuPodSt +EOcKjvbdEXxMUUTl +DnbjjvbdegjvSOQg +EObkKvbdZtJJYdTO +EPDKjvbdVAbQsQrZ +DnbkKvbdkHflFfOL +EObkKvbdtcCuXWOo +DnbjjvbdcTDLUEJa +EPCjjvbdZjTIQHBf +EObjjvbdTAEhhCPE +EOcLKvbdbhlikFwY +DoDLKvbdEPDKkWbd +EOcKjvbdZtJJZESn +EPDKjvbdZMRdUNlN +EPCkKvbdhgJcZWJu +DncKjvbdUaBqSprZ +EOcLKvbdEJgiuxKA +EObjjvbdSPtHKFcw +DoCjjvbdFfKSOJUR +EObjjvbdVrOXaeMD +DoCjjvbdrXPkcIxq +DoDKjvbdZjTHofaf +EOcLKvbdVYgszLOn +DncKjvbdIwsagkpp +DncLKvbdTkvPBVni +EOcLKvbdUtNUFkuj +EObjjvbdZnmheEyj +EPDKjvbdyYIjBoyk +EPCkKvbdqlyiyMIJ +EPCjjvbdYzbeqjVy +EOcLKvbdUQqOuVIN +EObkKvbdZMSDtOMN +DncKjvbdVvhxWDdg +EOcLKvbdiZuFlRNf +EObjjvbdZtJJYcrn +EPCjjvbdmuUzKirG +DoDLKvbdVUMtGMVj +EPDLKvbdhWyAzzAJ +DoDLKvbdfIKvRmqH +DnbjjvbdqdFIpOVa +DnbkKvbdIwtCHkpp +EOcKjvbdeEnrBvcK +DnbkKvbdJuuFdFGi +DoDKjvbdeOeTKtUS +EObjjvbdKWUfDeGi +EPCjjvbdiHJbyViu +EOcKjvbdBraCsfWr +DoCjjvbdGYuVBEYC +DoCkKvbdnHEwmOHZ +EPDKjvbdZisIQGaf +EPCkKvbdmpZxvKyC +DoDLKvbdmSYuZrdJ +EObkKvbdKDJbqKCx +EOcLKvbdZsiJZETO +EPDKjvbdnCJvxOmu +DoCkKvbdjgflGGOL +DnbkKvbdRosfjFdX +EPCjjvbdRECaQQcr +DnbkKvbdNHComQVL +EPCjjvbdrJAKEmOe +DoDLKvbdqBJFAXIE +DncLKvbdGLFTDINV +EOcLKvbdhgJbxujV +DnbkKvbdjSzhsKiz +EOcKjvbdKWVGDdfi +DoDKjvbdZnnIeFZj +DnbjjvbdxxIiaoyk +EObkKvbdczYpYZQb +EPCjjvbdZxcjODMS +EObkKvbdiHJbxvKV +DoCjjvbdJzoexEAN +DoCjjvbdaRfChTek +DoDLKvbdxwhjCPyk +DoDLKvbdVqnYBeLc +DnbkKvbdRDcBPpdS +EObkKvbdYqNFImFR +EPDKjvbdsrrTYzFD +EOcKjvbdqcdhpOWB +EOcKjvbdaNLCTUmH +DoDKjvbdnPzYukZC +DncLKvbdKCjDRKCx +EObjjvbdFkEsDINV +EPDKjvbdMgDQMouL +DncLKvbdOXnuzdNt +EPCjjvbdpstGqrLU +EPCkKvbdRbDdkhyL +DnbkKvbdaogGdLzd +DncKjvbdjlbLydgP +DnbjjvbdUMVoAvPJ +EPCjjvbdJqZeOfOF +DoDLKvbdUsmTekvK +DoCjjvbdpyOgfpcx +DnbkKvbdJYUCIMRQ +DncLKvbdjJfHjMwr +DoCjjvbdRosgKGDw +DoCkKvbddZxpYYqC +DncKjvbdddnrBwCj +EPDKjvbdijGIJlxS +DoCjjvbdkWWnECYX +EObkKvbdqlzJxlIJ +EOcLKvbdzaAPHHBl +DoDKjvbdlZTSSyGt +DnbjjvbdatbHXkUI +EOcLKvbdNdcshiKd +DncKjvbdGdKujBjK +DnbjjvbdRWnDcMID +DoCjjvbdSxKlNzkY +EPDKjvbdHDkWJbJj +EPDLKvbdZxcjNcLr +EOcKjvbdLYqKSzuG +EPDLKvbdjuvmcaww +EPDKjvbdxmrhYTJD +EOcKjvbdZirhPfaf +DnbjjvbdfIKurNqH +EPCkKvbdYTLaNTnx +DoDLKvbddtAUASlv +EPCkKvbdZLrDtOLm +DnbjjvbdnGdxMnHZ +DoCjjvbdeFPSCXCj +DncLKvbdYORAYUvU +EPCjjvbdrXQMDJZR +EPCkKvbdRpTfjGDw +DoCjjvbdpssfrSKt +EPCkKvbdKWUedFHJ +DnbjjvbdVvhwvDdg +DncKjvbdLrWlzUpz +DncKjvbdwtmFQxkn +EObkKvbdmIdTqUqa +DnbkKvbdJutedFHJ +EOcKjvbdVZITykPO +DoDLKvbdhbPDFXQq +DnbjjvbdmuVZjirG +DncLKvbdieKgVPAO +DncKjvbdEuyPpNJe +DoDKjvbdiHJcYuiu +EPDKjvbdmgFYNNfy +DnbkKvbdOTUWGeUp +DoCjjvbdZRNFJNFR +EPDLKvbdYpmFJNEq +EObkKvbdRMxBxnUz +DncKjvbdNQYQvOHT +EOcLKvbdMoxRVnHT +DoDKjvbdpyOhGpcx +EObjjvbdRyjITDWA +EObjjvbdrykosAhO +EOcLKvbdhaoDFXRR +DoDLKvbdIryBSmYM +DnbjjvbdlZSrTYft +DncLKvbdegjurORH +EOcKjvbdJYUCHlRQ +EOcLKvbdREDApRES +EObjjvbdmgFYMnHZ +EPCkKvbdZyDimblS +DoCkKvbdiCPCdwQq +EObkKvbdbVBgYKtI +DoDLKvbdNddUJJLE +DoCjjvbdrpVnibuf +EPDLKvbdKaLGlbYR +DnbjjvbdTpqPVUhN +DoCjjvbdcyxoxYpb +EPDKjvbdhfibxvJu +EPCjjvbdJpydnfNe +DncLKvbduWOXipsA +DoDKjvbdrRtkNkAm +EObkKvbdNQXqVmgT +EObkKvbdCIkBkJFj +EPDLKvbdqUUHSRjt +EOcLKvbdeYZtTqez +EPCjjvbdqUUHRqkU +DncKjvbdkWXODaxX +EPCkKvbdaNKbTVNH +EPCjjvbdvAcxroEh +EOcKjvbdlZTSTZGt +EOcLKvbdLAkHNCYR +DoDLKvbdUtMselWK +EPCjjvbdnVUzKjRf +DoDLKvbdypoMiJwA +EObjjvbdKDKCqKDY +DoCjjvbdrWolDIxq +DoDKjvbdwyhFfXeS +EOcKjvbdnGeYMmgZ +DoDLKvbdREDAopcr +EPCjjvbdiUzFXRuC +DoDLKvbdZQldhmEq +EPCjjvbdtvNwipsA +EPDKjvbdbrcLUDia +DoDLKvbdegkVqnQg +DoCjjvbdznopdcMY +DoCjjvbdmfeXlmgZ +DncLKvbdXrlBMsnx +DoCjjvbdmgEwmOGy +DoCkKvbdjmCLydgP +DncLKvbdmJEUQuSB +DnbjjvbdRbDeLiYk +DnbkKvbdQdDBPqDr +EObkKvbdjKGHjMxS +DoCkKvbdyOTHxSiD +EPCjjvbdQwNdCkhD +EObjjvbdfNFwGljL +EObjjvbdVqmxCElD +EOcKjvbdeOeTKtTr +DoDKjvbdUaBqSpqy +DnbjjvbdmIdURUqa +DoCkKvbdUWMQJtBR +DnbjjvbdxnSgxSiD +DncKjvbdwXMBVaVu +DnbjjvbdvvkaVaWV +EObkKvbdmaiwXnmu +DoCjjvbdgQBzwEYI +EOcKjvbdFVxpPmJe +EObjjvbdKDJcQjCx +DoCkKvbdYlRdUOMN +EOcLKvbdZoOIddzK +DoCjjvbdffMZnHHA +DncKjvbdnQZxujxb +EPDLKvbdwXMBWBVu +DoCjjvbdLFfIBaQu +DncKjvbdGQASwHFy +DnbkKvbdauBfxKsh +EOcLKvbdraelkgKy +EObkKvbdnVUzLKSG +DoDKjvbdANHxrwZx +DncLKvbdqZPHfqEY +EObjjvbdvPTzpjoU +EObjjvbdrWpMDIyR +DnbkKvbdCDpBWKNG +DnbkKvbdyOSgwrhc +DnbkKvbdeKKSVtzn +DncKjvbdMowpumgT +EOcLKvbdOFDtIhjd +EPDKjvbdkDMLRGtg +EPDKjvbdiiehJlwr +EPDLKvbdBdQAvJlf +DoDLKvbdZyEKODMS +EObjjvbdJqZePFme +DnbkKvbdKxqKSztf +EObkKvbdmJEUQuSB +DnbkKvbdREDAopdS +EPDKjvbdwzHefYEr +EPDKjvbdnHExMnGy +EOcKjvbdmozZVjyC +EPDKjvbdZHWdAPTJ +DoDKjvbdjgfkfFnL +DncKjvbdczZPxYqC +DoDKjvbdEXwlUUTl +DncKjvbdhuZdvrVC +DnbkKvbdxKwDgzzG +EPCkKvbdsZlQSaIO +EOcKjvbdzRPMiKXA +DoDKjvbdqvolDIxq +DoDKjvbdQdCaPpcr +EPCjjvbdJmADyfuB +DnbjjvbdsCGNLgLZ +DoDKjvbdKfGICAqV +DoCkKvbdbiNJkGXY +DncKjvbdiGicYvKV +EPCjjvbdSxLLmzjx +DncKjvbdLAjflaxR +EPCkKvbdUyHsyjoO +DnbjjvbdcyxoxYqC +EObkKvbdxZgfGYFS +EPDLKvbdZoNiEeZj +DncLKvbdZtIhxcrn +EPDLKvbdIwtCILqQ +DncLKvbdQmXbYmtz +EOcLKvbdmuUzKiqf +EPDKjvbdsQVnibuf +EObjjvbdOSsugEtp +EOcLKvbdYlSETnLm +EObkKvbdUtNUGMWK +DoDLKvbdzeZnzeZp +DoDKjvbdqTtHRqkU +EObjjvbdmbJvxPNu +DoDLKvbdliDsqUqa +EPCjjvbdhanbdvpq +DoDKjvbdiifHilxS +DoDKjvbdmJDsptqa +DnbkKvbdDncKkWcE +EPCkKvbdaofgELzd +DncKjvbdijGIJmXr +EPCkKvbdRkYfUgLT +EObkKvbdHEKuibKK +DnbjjvbdVhXuwfxz +DoDLKvbdiMEcmuCy +DnbkKvbdJcJcQibx +DnbkKvbdmfeYNOGy +DoDKjvbdqUTgSSKt +EPDLKvbdePErjtUS +EObkKvbdaNKasUmH +EObkKvbdiifIJmYS +EOcKjvbdsPunjCvG +EObkKvbdbrcKtDjB +EPDKjvbdbhlikFwY +EPCjjvbdrpVnjDWG +EPCjjvbdaMkCStlg +DncKjvbdMpXqVnGs +EPDLKvbdZjShPfbG +EPDLKvbdfHkVrOQg +DoCkKvbdDnbjjvbd +DoCkKvbdkySqsYft +DoDLKvbdZRMeImEq +DoDLKvbdYpleIleR +DncKjvbdiHJbyViu +EObkKvbdrMyixkgi +EPDKjvbdqvokbiYq +EOcKjvbdzitoodTU +DnbjjvbdVYhTyjnn +EPDLKvbdyYJJbPzL +EObkKvbdeFPSCWcK +EPDKjvbdIsZArlxM +DnbjjvbdkIHLfGNk +DoDLKvbdehLVqmqH +EOcLKvbdvBEZTPFI +DncKjvbdnUuZjirG +EPCjjvbdakLfOnDA +DnbkKvbdEzsqEkcJ +DnbjjvbdVhXvXgYz +DoCjjvbdIryBTNYM +DncKjvbdZirgpHBf +DoDKjvbdEYYLsstM +DnbjjvbdZshhyETO +DoCjjvbdOTUVgFVQ +EObjjvbdZisHpGbG +DoDLKvbdkDLkRGtg +EObkKvbdegjvSNpg +DncLKvbdfIKvRnQg +DncLKvbdJKEAJpGd +DncKjvbdrRtkNkBN +EPCkKvbdjvWnDaxX +DoCjjvbdmfdwmNgZ +DnbjjvbdbrcLUEJa +DncLKvbdnQZxujxb +DoDKjvbdNsTugEuQ +EOcKjvbdUVlPisaR +EObkKvbdHDjujBij +EPDLKvbdSBdFMJYk +EPCkKvbdVvhxVdFH +DncKjvbdIsYaTNXl +EPDLKvbdIrxaSlxM +EPDKjvbdfoazwDwh +EPCkKvbddeOqbXDK +DoCjjvbdJpzEnfNe +DncKjvbdqiAKFNOe +EPDLKvbduDCtwWOo +DnbjjvbdZjShQGbG +EObjjvbdVAbQsRSZ +DncLKvbdtcCuWuoP +DoDKjvbdTvLoitAq +EOcLKvbdZQleIleR +DoCkKvbduLxXAtAw +DnbjjvbdqYoHfqDx +DoDKjvbdJYTbHkqQ +DncLKvbdGZUtaDxC +EObjjvbdqFdEtWAh +EPCkKvbdILaznWqL +EObkKvbdQwNdCkhD +EPCkKvbdmJDsqUqa +EOcKjvbdvBEYrneI +DoDKjvbdapGgELzd +DoCjjvbdwWlAvAvV +DoDLKvbdJbicQicY +EPDKjvbdaaVdepPw +DoCkKvbdsZkosAhO +DoCkKvbdNeETiJKd +EObkKvbdEObkLXCd +EPCjjvbduCbuXVno +DoCkKvbdrykpTBHn +DnbkKvbdrEFIpNua +DoCjjvbdlYrrSxft +DoDLKvbdqdFIpOVa +EObjjvbdrbFmMGjy +DnbkKvbdRpUHKGDw +EOcLKvbdzoPpdcMY +DoDLKvbdfILVqnQg +DoCkKvbdlZSqsZHU +DncKjvbdrzMQSaIO +DoCkKvbdhuZeWrUb +EObjjvbdfSAvzkbo +DoCkKvbdVZIUZjnn +EOcLKvbdhlEdOUcZ +DoDKjvbdbUagXkUI +DoCjjvbdqUTgRqjt +DoDLKvbdqTsfrRjt +DnbkKvbdrouoKCuf +EPDKjvbdmbKXXoNu +DoDLKvbdhbPDEwRR +DncLKvbduVnYKRTA +DoCjjvbdcJNKKfXY +EPCjjvbdeFOrCXDK +EPCkKvbdczYoxYpb +DnbkKvbdKfGHaaRV +DoCjjvbdMuTRjmAX +DoDKjvbdkMalZeGo +DnbkKvbdbhmKLFvx +EPDLKvbdjuwODbXw +DoDLKvbdUMVoBVoJ +DoCkKvbdRpTgJfDw +EOcLKvbdajlFoNcA +EPCjjvbdRMwaxnUz +EOcLKvbdJcJbpjDY +DoCjjvbdjhHLefNk +EOcLKvbdcasNSATm +DoDKjvbdyOTHwriD +EObjjvbdKQydnenF +EObjjvbdZirhPgBf +EPCjjvbdBiKbLIfK +EOcKjvbdNeDtIiKd +EOcKjvbdkDLjqGtg +DoDKjvbduDDVWuoP +DncLKvbdePErjtTr +EOcKjvbdJbicQjDY +EPDKjvbdrylQTBHn +DnbjjvbdkMbMZeGo +DncLKvbdtlYWaUAw +DoCjjvbdDwxMUTtM +EObkKvbdjblKqGtg +DoDKjvbdRMxCZNtz +EObkKvbdqYoIGqDx +EPDKjvbdmfeYNNgZ +EObjjvbdTAFIhCPE +DoCjjvbdjKGIKMxS +EOcLKvbdMpYRWOHT +EOcLKvbdMoxRVnGs +DncKjvbdhaoDEwQq +DnbkKvbdEXxMTtTl +EPCkKvbdMgCpMpVL +EObjjvbdRzKITDWA +EOcLKvbdrzLosBHn +EPCkKvbdBraCsfWr +DoCkKvbdaaVeGPow +EOcLKvbdIGgZyXxH +EPDKjvbdliETptqa +EOcLKvbdbKlGPODA +DnbjjvbdRadElJZL +EPDLKvbdjFLHVPAO +DnbkKvbdiBnbdwRR +EObkKvbdvBDyTOeI +DnbjjvbdUyHtZjnn +DnbkKvbdmgFYNOGy +DnbkKvbdGKdsDHlu +EPDLKvbdZRNEiMeR +DoCkKvbdbLLeoODA +EObkKvbdANIZSvzY +DoCkKvbdziuPpDrt +DnbjjvbdWHwvXgYz +EPDKjvbdsBfNLgLZ +DoCkKvbdWWiXudFH +EPDLKvbdwzIGGYEr +EOcLKvbdVTmUGMWK +EObjjvbdMSXMytpz +DncKjvbdZirhQGaf +EObjjvbdCJLBjiGK +EPCjjvbdZLrETnLm +EObjjvbdelevfljL +DncKjvbdGYuVBEYC +EPCkKvbdkCkjpgUg +DoCkKvbdbhljLFwY +DnbjjvbdeEoSBvbj +DncLKvbdvAcyTPFI +DnbkKvbdjblLQgVH +EPCjjvbdeEoSBvbj +DnbkKvbdaMjbStlg +EObjjvbdrDdhpOWB +EOcKjvbdbKlFoODA +EPDLKvbdZjTIQGaf +EObjjvbdEzsqEkcJ +DnbjjvbdZRNEiNEq +EObjjvbdqlzJxlIJ +DnbkKvbdkIHLfFmk +EObkKvbdMtrrKmAX +EPCkKvbdNQXpvNgT +EPCkKvbdbrcKtEKB +EObjjvbdSPtGjGEX +DoDKjvbdxwiJaoyk +DnbjjvbdVYhUZkPO +DoDLKvbdXrlBNUPY +DoDKjvbdZnmiEdzK +DoCjjvbdWWiXvDeH +DoDLKvbdyNsHwsIc +DoDKjvbdwyhFfYEr +EPDLKvbdNeDshhkE +EPDKjvbdBiLBkJFj +EOcKjvbdJqZdoGNe +EOcKjvbdbAvEepQX +DoCjjvbdaNLBsUlg +EPDLKvbdvBDxsOdh +DncKjvbdGFirNiTq +EPDLKvbdZnmiEeZj +DncLKvbdePFSjtTr +EOcKjvbdnGdwlnHZ +EOcLKvbduDDUvuno +EObjjvbdZQmFIldq +DoCkKvbdcyxpYYqC +EOcLKvbdMRvlzVQz +DoCjjvbdtcDUwVoP +EPCkKvbdrXQLbhxq +DoDKjvbdkVwODbXw +DnbjjvbdnCJwYOmu +DnbkKvbdqvpLbhxq +DoDKjvbdKDJcQjDY +DnbkKvbdvwMAvAuu +EPDKjvbdtvNxKRTA +DoDKjvbdYkqctOMN +DoDKjvbdtcCuWvOo +DoCjjvbdEObkLXDE +DoCkKvbdbrbjtDia +EObkKvbdDncKkXDE +DnbjjvbdxxJKBozL +EPCjjvbdbhlikGWx +DncKjvbdJXtCIMRQ +EOcLKvbdkVvmcaxX +DoCjjvbdqwPkbhyR +EObjjvbdySnImRbH +EObjjvbdZQleImFR +EObkKvbdmpZxujyC +EPCjjvbdhbPDEvpq +EObkKvbdpyPHgREY +DoDLKvbdwzIGGXeS +EObjjvbdaSGChUGL +DoDKjvbdrbFmMGkZ +EPCkKvbdxKwEHzyf +DnbkKvbdJXtBgkpp +EPCkKvbdlZTRrxft +EOcKjvbdFVyPpNKF +DoCkKvbdaRecHsek +DoDKjvbdFfKRnJUR +DoCjjvbdyOTIXrhc +DoDLKvbdyOSgxShc +DoDKjvbdEOcKjwCd +DoCjjvbdzoPpeClY +DoCkKvbdURRPVUhN +DoDLKvbdVqmxCFMD +EOcKjvbdNVSrKmAX +EOcKjvbdTvLpKTaR +EPDLKvbdCTAbtFwS +EPDLKvbdZyEKNblS +EOcLKvbdsCFllHLZ +EObkKvbdjlbMZeHP +EPDKjvbdMpXpunGs +EObjjvbdaNLCSuNH +DoDLKvbdkCkjqHUg +EPCjjvbdTYKlNzjx +DnbjjvbdNxOuzdOU +DoCkKvbdegjvRmpg +DoCjjvbdhfjCyWKV +DncLKvbdjggMFfNk +EOcKjvbduVmwjRTA +DnbkKvbdDjHiuxKA +EOcLKvbddePRavcK +DnbkKvbdwkWcgzyf +DnbkKvbdHlBznXQk +EPCkKvbdatafxKsh +EPCjjvbdcJMjKfXY +DoDKjvbdrDdiQOWB +DoDLKvbdVvhwvEEg +EObjjvbdwjvdHzzG +DncLKvbduMYXAtAw +DoDLKvbdZQmFJNEq +EPCjjvbdyOTIXriD +DoCkKvbdbiNKLGWx +DncKjvbdHEKvKBij +EPDLKvbdYlSDtNkm +DoDKjvbdTqROuVIN +EPCkKvbddeOqbXCj +EOcLKvbdCTBCsewS +EPCjjvbdnUtykJrG +DnbjjvbdlZTSSyGt +EPCjjvbdjmBkyeGo +DnbkKvbdVhXuwfxz +DncLKvbdePFTLTsr +EOcKjvbdemGWgMik +EObkKvbdhuZeWquC +EPCjjvbdEvYpQNKF +EOcKjvbdpaJFAXHd +DoDKjvbdJSyBSmYM +EOcLKvbdSCDdlIxk +DncKjvbdSLZGVGkT +DnbkKvbdrbFlkgKy +EObjjvbdJSyAsMwl +EOcKjvbdEOcKkXDE +EPCjjvbdMoxQumfs +EPDKjvbdUQpnuUgm +DncKjvbdaaWFFoow +DnbkKvbdakMGPODA +EObkKvbdrEEhomua +EOcKjvbdmozZWLYb +EObjjvbdVgwuxGxz +EOcLKvbdCJLCKhej +EPDLKvbdVUNUGLvK +EOcLKvbdLGGHbBRV +DoCkKvbdlqxtysEJ +EOcLKvbdcScLTdKB +DncKjvbdhtydwRtb +DoCjjvbdcTCjscia +DncLKvbdUslsekuj +DoDKjvbdwuNFRYkn +EOcLKvbdijGHjNYS +DoCjjvbdJSyBSmYM +DoDKjvbdEYXlUTtM +EPDKjvbdUyITzKoO +DnbkKvbdvBDyTPFI +DoDKjvbdYlRcsmkm +DoDKjvbddePRbXCj +EPCkKvbdVZHtZjoO +EPDLKvbdWXIxVceH +EPCjjvbduDDUwVoP +DncKjvbdQlxBxnUz +DoDLKvbdfpBzvdYI +DoCjjvbdMJBlRYAS +EPCkKvbdZisHofaf +DnbkKvbdkWXNdCXw +EOcKjvbdEYXkstTl +EOcKjvbdfekymgHA +EPDKjvbdelfWflik +EPCjjvbddCTNSAUN +EPDKjvbdpfDeUVaI +DncLKvbdiBnbeWqR +EObjjvbdEuyPoljF +EPCkKvbdRDcBQRES +DncKjvbdhfibxujV +EObkKvbdVqnYBeMD +EPDKjvbdJKEAKQGd +EOcLKvbdsQVoJbuf +EOcKjvbdqcdhonVa +EObjjvbdJcKCqJcY +EOcKjvbdpfEEsuaI +EPDLKvbdxnTIYShc +EOcLKvbdxVMdqYlO +EObjjvbdZyDimcMS +DncKjvbdiGjCxvKV +DoCkKvbdRbEEkiYk +DoCjjvbdWIYVxHYz +EPDLKvbdYzcFqjVy +DncLKvbdTYLLmzjx +DoDLKvbdwXLaVaWV +DoDLKvbdMRvlyuQz +DoCjjvbdajkeoNcA +EPCjjvbdjEkHUoAO +DoCjjvbdZoNiFFZj +DncLKvbdlZTRryHU +DoCjjvbdcTDLTdJa +EOcLKvbdlhctRVSB +EObjjvbduaEYroFI +DncKjvbdzjUpQDsU +DoDLKvbdyqPNIiwA +DnbjjvbdhkdcnUby +EObjjvbdVYgtZjoO +DnbjjvbdCJLCLJFj +EPCjjvbdzeZnzdyp +DnbjjvbdqlyjZMIJ +EOcLKvbdGAnpyJzm +DoDLKvbdNGcQMpVL +DncKjvbdADSXiyiQ +DoCjjvbdLBLHNCYR +DoCkKvbduVnXjRTA +DncKjvbdtSqsZZeD +EPDKjvbdpyOhGqEY +EObjjvbdEuyPomKF +EPDKjvbdyOSgxTIc +EPDKjvbdGFiqnJTq +EOcKjvbdyYJJbPzL +DncLKvbdADRwjZiQ +DncLKvbdCSaDUFwS +DoDLKvbdEzsqEkbi +EOcLKvbdssSTYyeD +DnbkKvbdSBdEkiZL +EObjjvbdFWZQPlie +EObkKvbdbBVeFpPw +DoDLKvbdBdQBVjMf +EPDLKvbdptUHRqjt +EPCkKvbdQwODcMID +DoDLKvbdelevgMik +DnbjjvbdVTmUFkuj +DnbkKvbdLYqJrzuG +DoCkKvbdCTAbsevr +DoCjjvbdJpyeOfOF +EPCkKvbdOStWHEtp +EOcLKvbdKVtfEEfi +DoCkKvbdmuUykJqf +DnbjjvbdQZNAHSrK +DnbjjvbdMgDPlpUk +DnbkKvbdCIkBjhfK +EObjjvbdBsBCsewS +EOcLKvbdYzbfRivZ +EOcLKvbdrzMQSaHn +EOcKjvbdRosfjFcw +EPDKjvbdANHyTXZx +EPCkKvbdliDsptqa +EOcLKvbdACrXizIp +EPCjjvbdLFfICApu +DoCjjvbdbAvEepPw +EOcKjvbdTpqPVVHm +DoCjjvbdsBemMGjy +EPCkKvbduaEZTPEh +DoCkKvbdOStWHEtp +EPCjjvbdbBVeGQPw +EObjjvbdOSsufeUp +DoCkKvbdjAQHBPgK +EPCjjvbdbBWEfPow +EPDKjvbdtSqsZZdc +EPCkKvbdegjuqmpg +DoDLKvbdRotGifDw +DoDKjvbdmJEUQtrB +DoCjjvbdcIljKewY +EObkKvbdbiMjKewY +EObjjvbdcScKsdJa +EPDKjvbdtSqsYyeD +DnbkKvbdrpWOjCvG +EPDLKvbdBiKbLIej +EPCkKvbdBdPaWJmG +EObjjvbdZRNEhmEq +EOcLKvbdiUzFWrUb +EPCkKvbdmIdUQtrB +EPCkKvbdbUafxLTh +EOcKjvbdnCKWxOmu +DoCkKvbdsZkosBIO +DnbkKvbdHDjujCJj +DoCjjvbdWSOYCFLc +EPDKjvbdmJETqVSB +DnbjjvbdrXPkcJYq +EObkKvbdMgDPlpVL +DnbjjvbdZisHpGaf +DoCjjvbdGGJqmiTq +EObkKvbdIHGyyYXg +EObkKvbdqTsgRrKt +EObjjvbdmJDtRVSB +DnbjjvbdddoSBvbj +EPDKjvbddePSBvbj +DnbjjvbdBcpAvJlf +DncKjvbdezvYeItX +DoDKjvbdmgEwmNfy +EObjjvbdDigivXjA +EOcLKvbdmJEURUrB +EOcLKvbdePFTLTtS +EPDKjvbdVTmUGMVj +EPDKjvbdnBivwnnV +EPCjjvbdZnmhddzK +DncKjvbdZeXfzgiC +DoDLKvbdEuyPpNJe +DoDLKvbdqdEhpNua +DoDKjvbdFWYpQMie +DoCkKvbdMfcQMpVL +EOcKjvbdmttykKSG +DnbjjvbdlhcspuSB +EPCjjvbdWSNwbFMD +EPDKjvbdRbEElIyL +EOcKjvbdyNsHwsIc +EPCjjvbdrylQTAgn +DncLKvbdADSYJyiQ +EOcKjvbdZjTIPgBf +EObjjvbdKDKDQibx +EObkKvbdKDJcRJcY +DoCkKvbdmSZUzSdJ +EPCjjvbdaNKartlg +DoDKjvbdIGgZyXwg +EObjjvbdauCHXjsh +EObkKvbdxUmEpyLn +EPCjjvbdNsTugEtp +EPDLKvbdZyDimblS +DoDKjvbdbUagYKtI +DncKjvbdliETpuSB +EOcKjvbdDihKWXjA +DncKjvbdZtIiZETO +EObjjvbdygZMAMeX +DoDKjvbdfNGWgMik +DoCjjvbdZMSEUNkm +EOcKjvbdsrqsZZdc +EPCkKvbdACqxJzJQ +EPDLKvbdNdcshiKd +DoDKjvbdyqOmIiwA +EOcKjvbdRMwbYmtz +EOcKjvbdYpmEhleR +DoDKjvbdjJfHimYS +DoCjjvbdrbFmMHLZ +DoCkKvbdBcpBWKNG +DoDKjvbdIxTbHkqQ +DoDKjvbdhuZdwSUb +EPDLKvbdJYUBglQp +EPCkKvbduCcUwVno +DnbkKvbdwuNEpyMO +DncKjvbdssSSxzEc +DoDLKvbdGdLWJbKK +EObjjvbdFjdsDIMu +DncLKvbdfkGzbfAE +EOcLKvbdrRtkOLBN +EPDLKvbdajkfOmcA +EPCjjvbdrMzJxkhJ +DncLKvbdqZOhHREY +DoDKjvbdmJEUQuSB +DnbkKvbdRDbaQRES +EPCjjvbdpyPHgREY +DnbjjvbdMIalQxAS +DncLKvbdiZuGMROG +DoDKjvbdgFkymfgA +DncLKvbdsCGMkgLZ +EObkKvbdRotHJecw +EPDKjvbdkClKpftg +EPCkKvbdRjyGUgLT +EOcKjvbdhuZdvqtb +EOcLKvbdmttzKjSG +EObjjvbdhlEdOVDZ +DoDLKvbdZisHpGaf +DnbkKvbdTqQntuHm +EPDLKvbdNdctIiLE +EObkKvbdWRnXbFLc +EPDLKvbdKVtfDdgJ +EPCkKvbdJSyBTMwl +DnbkKvbduWNxKQsA +DoCkKvbdqGEFUVaI +EPDKjvbdhkdcnVDZ +EPCjjvbdySnIlrBg +EOcLKvbdYlRctNlN +EObkKvbdvBDxroFI +DoDLKvbdxwiJbPzL +EPCjjvbdyNsHxTJD +DoCjjvbdhfjDYujV +DoDLKvbdcImKLFwY +DnbjjvbdqwQMChxq +DncLKvbdaaWEfQPw +DnbkKvbdUQqOuUhN +EOcLKvbdUaCRSqSZ +DnbjjvbdRMxByOUz +EPDKjvbdKCjCpjCx +DncLKvbdrMzJyMIJ +EPCjjvbdOEdThhjd +EPDKjvbdrSUkOKaN +EObkKvbdMowpunGs +DoCjjvbdhzVGLpmf +EOcLKvbdaMkBsVMg +DoCjjvbdkIGkfFnL +DnbkKvbdYpldiNFR +EPDLKvbdZxcjNcMS +EPDKjvbdGGKRnJUR +EPCjjvbdbiNKKfWx +EObjjvbdmRyUyrci +DncKjvbdLrXNZtpz +DncKjvbdZjTIPgCG +DnbkKvbdypoNIiwA +EPCjjvbdDihKVxKA +DncKjvbdyfxlANFX +DoDKjvbdiMFEOVCy +EPCkKvbdtcDUvvPP +DoCkKvbdEvYpQMie +DnbjjvbdZLrDtOLm +EPCjjvbdKQzFPGNe +EPDKjvbdGdLVjCJj +DoDKjvbdqYoHfqDx +DoDLKvbdFVxoomJe +DnbkKvbdKRZePFnF +DoCjjvbdFVyQQMjF +DnbkKvbdTulQJsaR +EObkKvbdkHgMFenL +DoDKjvbdVUMselVj +EPDLKvbdrDdhonVa +DncKjvbdkVvmcaxX +DoDLKvbdrRuKnLAm +EOcKjvbdJbibpjDY +EPDKjvbdXrlAmToY +DnbkKvbdZirhQGbG +DnbjjvbdjgfkfFnL +EOcKjvbdGFjSOJTq +DoDKjvbdSCDeMJYk +DoCkKvbdpecdtWAh +EObjjvbdzeZnzdyp +DoCjjvbdMJBlQxAS +EPDKjvbdnBivwnmu +DoDKjvbdRadElIyL +DoDLKvbdsZlPsBHn +EObjjvbdznopeDLx +EOcLKvbdCJKbKiFj +DncLKvbdmgExNNfy +DnbkKvbdnPzYvKxb +DncKjvbdrDdiPnVa +DoCjjvbdAMgxrwZx +DncLKvbdTfzmkwWF +DncKjvbdqiAJdloF +EPCkKvbdwuMeRZLn +DoCjjvbdVUNUFkuj +DoDLKvbdKQyePGNe +DncKjvbdLqvlzVQz +DoDKjvbdmgFYNNgZ +DnbjjvbddxZtTrFz +EObkKvbdqTsgSSKt +DnbkKvbdZxcimcMS +DoCjjvbdANHySvyx +DoDLKvbdZQmFJMdq +DoCkKvbdHDjujBij +EPDLKvbdsPuoJbuf +EPCjjvbdYpmEhmFR +DncLKvbdZjTHpGaf +EPDKjvbdEuyQQNKF +DoCkKvbdmbKWxPNu +DoCkKvbdRjyFtfjs +DoCkKvbdiifHjNYS +EPDKjvbdpyOhGpdY +DoDKjvbdUVlPitBR +DoCjjvbdEKIJuwjA +EPCjjvbdFkFTDHmV +EOcLKvbdySnJNSCH +DncLKvbdRpUHJedX +EPDKjvbdtvOYJpsA +DoDKjvbdKDKDQjCx +DoDLKvbdaMkCTUmH +EOcKjvbdMpYRVnGs +EOcKjvbdtSqsYzFD +DncLKvbdKaKgNCXq +DoCkKvbdsCFllGkZ +EObkKvbdNrsvGeUp +DoDKjvbdmaivxOnV +EOcLKvbdOEctIhjd +DoCkKvbdemGXGljL +DoDLKvbdjvWmdBxX +EPCkKvbdCIjbLIej +EPCjjvbdkHfkfFmk +DoDLKvbdwzIGFwdr +EOcKjvbddBrlrAUN +EPCkKvbdJutecdgJ +DoCjjvbdWRmwaeLc +DnbkKvbdiVZdwRuC +DnbjjvbdGLEsDHmV +EPCkKvbdxsOJNSCH +EPCjjvbdIwtBgkqQ +DncKjvbdbrbjtDjB +EPCkKvbdjhGkeemk +DncKjvbdWWiXvDeH +EPCjjvbdnUtzKiqf +DncKjvbdTukoitAq +DncLKvbdCIkBjhfK +DoCkKvbdhgKDZWJu +EPDKjvbdBhkBjiFj +DnbjjvbdMfbpNPtk +DoDKjvbdnBjWxPOV +DoCjjvbdEJhKWYKA +EOcKjvbdTpqOtuHm +DoCjjvbdwzIFfXdr +EOcKjvbdrpVoKDVf +EOcLKvbdEYYLtTsl +DoCkKvbdLFfICBQu +EOcKjvbdeXzTsrFz +EOcLKvbdSQUHKFdX +EOcLKvbdraemMHLZ +EPDKjvbdkIGlFemk +DncKjvbdOYOuzcnU +DoCkKvbdIwtCILpp +DncLKvbdZoNiEdzK +DoDKjvbdsrqsZZeD +EPDLKvbdzGyMANEw +DncLKvbdBraCsewS +EObkKvbdpyOgfpcx +DnbjjvbdxmrgxTIc +EOcLKvbdZjSgpHCG +EPCjjvbdrWpMDIxq +DncKjvbdZtJIyESn +EPCjjvbdJSxaSmXl +DoCjjvbdiMFEOVCy +DoCjjvbdDwwlTstM +DncLKvbdJYUCHkpp +EPDLKvbdsrrSxzFD +EObjjvbdkHgMFfNk +EPDKjvbdOStVgFUp +DnbjjvbdjhHMGGOL +DnbjjvbdZyEJmcLr +EPDKjvbdDihKWYKA +DncLKvbdRosfiecw +DoCjjvbdyTNhmSCH +DnbkKvbdFeirNhsq +DoDKjvbdrDeIpNvB +EObkKvbdVAaqTRSZ +EPDLKvbdLAkGlbXq +EOcKjvbdVAaprqRy +EPDLKvbdfIKvRnQg +EPCjjvbdUQpoVUgm +EObjjvbdxVNEpyMO +EOcKjvbdsCFllGkZ +DncKjvbdsBelkgLZ +DoDLKvbdvlvANDeN +DoCjjvbdnBivwoNu +EObjjvbdsCGMkgLZ +EObjjvbdsPvPJbvG +EPDLKvbdxrnImRbH +EPDLKvbdNPxRVnHT +DoDLKvbdMtrqkNAX +DoDKjvbdiGicZWJu +EPDKjvbdOFEUJJLE +EPDLKvbdoAKzshDn +DoDKjvbdehKvRnQg +EObjjvbdLLBIWAKZ +EPDKjvbdeOdsLUUS +DncKjvbdjvWmdBxX +DncLKvbdezuyFJTw +EPCkKvbdNPwpumgT +EPCjjvbdkxsRrxgU +EPDLKvbdptUHSSLU +EPDKjvbdeATqNXif +EPCkKvbdjlakzEgP +EObjjvbdyXiKCPzL +DoCjjvbdhlFDmuDZ +DncKjvbdauCGxLUI +EObjjvbdySmiNSBg +EOcLKvbdfNGWfljL +DncLKvbdVviYWDdg +EPCkKvbdkIHLefOL +EPDLKvbdRNYCZNtz +DoDLKvbdmfdxNOGy +DoDLKvbdcScKtDjB +EOcLKvbdEPDLKvcE +EPCjjvbdUaBprqSZ +EObkKvbdddnqbXDK +EPCkKvbdaaVeGQQX +DoDLKvbduoTzqKnt +DnbjjvbdqwPkbhxq +EObkKvbduaEZTOdh +EOcLKvbdKfFhBaRV +EOcKjvbdVYgtZjoO +EOcLKvbdrSVKnKaN +DnbkKvbdsCFmMGjy +DnbkKvbdSLYeuGkT +DoCkKvbdwWlAvAuu +EPCjjvbdRXOEClID +EPCkKvbdCIkCKiFj +EOcKjvbdGckViajK +DoCkKvbdznpRFCkx +DnbjjvbdxKwDgzyf +DncKjvbdVAaprprZ +DoDKjvbdOEctIhjd +EObjjvbdmIdTptqa +DnbjjvbdvwMAuaWV +EObkKvbdEYXksssl +EPCkKvbdiZtelQnG +EOcKjvbdqdEhpOVa +DnbjjvbdidjfuPAO +DnbkKvbdnBivxPNu +EObkKvbdrSVKmkBN +DnbkKvbdiCPDFWqR +DncKjvbdZisHofaf +DoCjjvbdJvVFcdfi +DoDLKvbdcyxpYYpb +DoCjjvbdrykpTBHn +EPDLKvbdqrUkOKaN +DoCkKvbdGQATWgFy +DncKjvbduaDxsPFI +EPCkKvbdYkqdTnLm +EObjjvbdQYmAGsRj +DnbkKvbdZyEKOCkr +DnbkKvbdOEdThhjd +EPDKjvbdiCOcFWpq +EOcKjvbdMfcQNPtk +EPDLKvbdLGFhBaRV +EPDLKvbdssSSyZeD +EPCkKvbdTAFJIBoE +EObkKvbdeFPRavbj +DnbkKvbdjKFhKNYS +DncLKvbdCJLBjiGK +DncLKvbdqlzJyLhJ +EOcLKvbdRyigsCvA +DoDKjvbdYqMdhldq +DnbjjvbdehKvSOQg +EObjjvbdMgColouL +DoCkKvbdehKuqnRH +DoDKjvbdQvmdCkhD +DoDKjvbdMSWlzVQz +EObkKvbdbhlikGXY +DoCjjvbdeAUQmYJf +EPCjjvbdZyEJmcMS +DoDKjvbdIGfzYxYH +DoDLKvbdHDjvJbJj +EOcKjvbdQwNdCkgc +EPCkKvbdRWnDcMHc +DnbjjvbdrMzJyMIJ +DncKjvbdlhctQuSB +DoDKjvbdbPgGdLzd +EObkKvbdijFhJmXr +DoCjjvbdbQGgDkzd +EPDLKvbdDihJvXjA +EObjjvbdaNKasUmH +DncKjvbdZyEKOClS +DnbjjvbdSLYfVHLT +DoDLKvbdwzHfFweS +EPCjjvbdfNFwHNJk +DoDLKvbdelewHNJk +EPCjjvbduaDxroEh +DoDKjvbddwytURez +DncKjvbdwtmEpyLn +EOcLKvbdCIkBkIej +EOcLKvbdiLddOUcZ +EPDKjvbdiUydwSVC +DncKjvbdrEEiQOVa +DnbkKvbdYzbeqivZ +DoCjjvbdkVwOECYX +DoDLKvbdZLqcsmkm +EObjjvbdVYgtZkPO +EOcLKvbdHffyxwwg +EPDKjvbdcIljLGWx +DnbkKvbdMpXpvNfs +EOcLKvbdFeirOJTq +DncLKvbdWWhxWEFH +DoCjjvbdZRMdhmEq +DnbkKvbdULvPBWPJ +EPDLKvbdZRMdiMdq +DnbjjvbdTYLMNzkY +DoCkKvbdZxcjNblS +DoCkKvbdKCibpicY +EPDLKvbddoFTKtUS +DncLKvbdcImKLGXY +EOcKjvbdKaLGmBwq +EPCkKvbdnHFYMnGy +EPDKjvbdUQqPUuIN +EPDKjvbdeAURNYJf +DoCkKvbdxwiKCQZk +DnbkKvbdKVuGDeGi +EPDKjvbdrovOicVf +DoDLKvbdrylQSaHn +EOcLKvbdySmhlrBg +EOcLKvbdNrsufeVQ +EOcKjvbdzoQREblY +EPCkKvbdzaAOgHCM +DoCjjvbdZLqdTmkm +EObkKvbdNGbpNQUk +EOcKjvbdZshiYdSn +EPDLKvbdDncLKvbd +EOcKjvbdqlzJyMHi +DoCkKvbdBhkCKiFj +EOcLKvbdRaceLhyL +EPDLKvbdxsNiNRbH +DoDKjvbdtcCtwWOo +DnbjjvbdmfdwlnGy +DncKjvbdREDBQQdS +DncLKvbdnPzYvKxb +EPCjjvbdjgfkefNk +DnbkKvbdnUtykJrG +EPDKjvbdSCEFLiYk +EOcLKvbdGcjuiajK +EPCjjvbdJYUCHlRQ +EPDLKvbdYpleIldq +EObkKvbdfMfWflik +DncLKvbdwuMdpyLn +DoDLKvbdEPDLLWcE +DoDLKvbdZLrDtOLm +DoCkKvbddZxoxYqC +DncLKvbdTulQKUAq +DncKjvbdqrUjnKaN +DoCkKvbdGFjRmiTq +EPCjjvbdpssfrRkU +EPDKjvbdrXQLbiYq +DoCkKvbdNQYQunHT +DoCkKvbdNrtWHEuQ +DncLKvbdjgflGGNk +DncKjvbdBsBCsewS +DoCkKvbdMpYRVmfs +DnbkKvbdKfFhBaQu +EObkKvbdGcjuiaij +EObkKvbdakMGOnDA +DnbkKvbdFyUuAcxC +DnbkKvbdtSrTZZdc +EPCjjvbdatafxLTh +EPCkKvbdUGzmlXVe +EObkKvbdZyDinClS +DncKjvbdyzdnSIJI +DnbkKvbdnPyxukZC +DoDKjvbdkDMLQgVH +EObjjvbdbVBfwjtI +EPDLKvbdzRPMhiwA +EObkKvbdhkeDmuCy +DnbkKvbdZQleImEq +EObjjvbdrDeJPnVa +EPDLKvbdaNLBsVMg +DnbkKvbdOEctIhjd +EOcKjvbdatagXkUI +DncKjvbdMowpunGs +EObkKvbdtvNwiqTA +DnbjjvbdyzdnSHiI +EObkKvbdbhlikFvx +EOcKjvbdaNKaruNH +DnbkKvbdiVZdvqtb +EObkKvbdVYgszKoO +DoCkKvbdjJfIKMwr +DncLKvbdezvZFJTw +EObkKvbdcyxoxYqC +EPDLKvbdFejSNiTq +DncKjvbdIwsbIMQp +DnbjjvbdTukpJsaR +EPDLKvbdIsZArlxM +EPDKjvbdTAEhgand +EOcLKvbdfNGXHMik +DoDKjvbdjcMLQgUg +DncKjvbdSLYfVHKs +DoCjjvbdnBjWwoOV +EPCjjvbdnBjWwnnV +EObkKvbdQvmccLgc +EPDKjvbdwuMeRYlO +DoDKjvbdNddUJIjd +DoCkKvbdqUTgSRkU +DoDLKvbdehLVqmpg +DoDLKvbdrovOjCvG +EObjjvbdzoPpdcMY +EPDLKvbdZRNFIleR +DnbkKvbdSLZGVGjs +DoCkKvbdySmiMrBg +DnbkKvbdwyhFfXeS +DoDLKvbdWHwvYHYz +DoCjjvbdIHHZyYYH +EObjjvbdJSyArmXl +DncKjvbdACqxJyiQ +DncLKvbdmpZxujyC +DoCjjvbdFkFScINV +EPDLKvbdCDpAujNG +DnbkKvbdhkeDnUby +DncLKvbdFWYopNJe +DoCjjvbdLAjfmCYR +EPCjjvbdxrmiMrCH +EObjjvbdcImJkGWx +DoCjjvbdFejRnJTq +EObkKvbdYTMAlsnx +EPCjjvbdsPvOibuf +EObjjvbdNeDshhjd +EOcLKvbdBiKbLIej +EObkKvbdauCGxLTh +EPDKjvbdbBWEepQX +EPCkKvbdVrNxBdlD +EObjjvbdMIalRYAS +EOcKjvbdJcKCpjCx +EOcLKvbdLqwNZtpz +DoCkKvbdZisHogBf +DnbjjvbdEPDKjvbd +DoDLKvbdFWZQQNJe +EObkKvbdHgGzYwxH +EOcKjvbdjbkkQfuH +DnbjjvbdtkxXAtBX +EPDLKvbdLAkHNCXq +EOcLKvbdWWhxVdFH +DncLKvbdCWzdIeQW +DoDLKvbdVvhwvDdg +EObjjvbdpfDeUWAh +EOcLKvbdqmZixkhJ +DncKjvbdyzdmrIJI +DncLKvbdRpTgJecw +DoDLKvbdGFjSOIsq +EOcKjvbdwuNFQyLn +DnbjjvbdIsZAsMwl +DncKjvbdptTgRqkU +DncKjvbdZQmEiNEq +DnbkKvbdauCHYLTh +EPDLKvbdyzdmrHhh +EPCjjvbdZoOJFEyj +EOcLKvbdUQqOttgm +DoCjjvbdRNYCZNtz +EPDKjvbdrRtkOLBN +DncLKvbdmajWxOmu +EPDLKvbdLBLHMbXq +DoDLKvbdCIjajhfK +EObjjvbdYkrDtOMN +EOcLKvbdUtNUGMVj +EObjjvbdaSFcHsek +DnbkKvbdXrkaMtPY +DoCkKvbdZQmFImFR +EOcLKvbdcJMijewY +EPDLKvbdGLErbhNV +DnbkKvbdiUydwSVC +EPDLKvbddndsKssr +DoDLKvbdxwhjCPzL +DoCkKvbdxVMeQxkn +DncKjvbdiBoCdwRR +EPDLKvbdnPyyVkZC +EPCjjvbdmuUzLKRf +DoDLKvbdSQUGiecw +DoDKjvbdRbDdlJZL +DncKjvbdqrVKnLAm +DoDKjvbdVBCQsQrZ +DoDKjvbdmbKWxPNu +EObjjvbdFVyQPmKF +DnbjjvbdiiehJlxS +EOcKjvbdIrxaSmYM +EOcKjvbdsZkosAgn +EOcLKvbdnCKWxPOV +EPDLKvbdKWUecdfi +DncLKvbdhgKDZWKV +EPDLKvbdySnImSCH +EObkKvbdJKEAKQGd +EOcLKvbdZMSETmkm +DoCjjvbdhgJcYujV +EOcLKvbdehLVqmpg +DoCkKvbdezuyFItX +DncLKvbdvBDxsOeI +EObkKvbdTulPisaR +DnbkKvbdajkfPODA +DoDKjvbdYkrEUOLm +EPCkKvbdfIKvSNpg +EPCkKvbdiBncEwQq +EOcKjvbdKWUecdgJ +EObkKvbdYlRcsmkm +EPCjjvbddwzUTqez +DnbjjvbdeYZstRez +EPDLKvbdxVNEqZLn +DncLKvbdFjeScINV +EObjjvbdxUleQxkn +DncKjvbdKWUfDdfi +DoDLKvbdssRrxzEc +EObjjvbdRpUGiedX +EOcLKvbdZQleJMdq +DnbkKvbdqdFIpNua +EPCjjvbdYzberKWZ +DoDKjvbdxxIjBoyk +EOcLKvbdEObkKwDE +DoDLKvbdqquLNjaN +DncKjvbdwuNFRZLn +DoCjjvbdqUTgRrKt +EObkKvbdVwIwvDeH +DnbkKvbdVwJYWEEg +DnbjjvbdYlSETnMN +DnbkKvbdqTsgRqjt +DoDKjvbdiGicZVjV +DnbjjvbdxnTHxTJD +EObkKvbdqUTfrSKt +DoCkKvbdFyVVBEXb +EOcKjvbdqGDdsvAh +EPCkKvbdTkunaVni +EObkKvbdMRvlzVQz +EPDKjvbdDncKkWbd +EObjjvbdqqtkNkBN +DncLKvbdfHkWRnRH +DnbjjvbdiLdcnUby +EOcKjvbdVYgsyjnn +EPCjjvbdUtNTfMWK +EPDKjvbdqYoHgREY +DncKjvbdGZUuAdYC +DnbjjvbdDnbjjwDE +EOcKjvbdTqQntthN +EOcLKvbdUyITzLPO +EOcLKvbdjblLRHVH +DoCkKvbdLGFhCBQu +DncLKvbdliEUQuSB +EObkKvbdRacdkiZL +EOcLKvbdaSFcHtFk +DoDKjvbdJYTahLpp +EPDLKvbdUQqOuVIN +EPCjjvbdqmZjYkhJ +DoCkKvbdRjyGUgKs +EObjjvbdyNrhYSiD +EPCkKvbdBhkCKiFj +EObjjvbdYlSDtOLm +DoCjjvbdTAFIhBoE +DncKjvbdNdctJIjd +DoDLKvbdGdKvJaij +EObjjvbdJpydnfNe +EPDLKvbdCDpAvKNG +DoDLKvbdeEoRavbj +DoCkKvbddoFSjssr +EPCjjvbdqYoHfqEY +EPCkKvbdFkFScHmV +EObjjvbdcyyQYZRC +DoDKjvbdyzdmrHhh +DoDKjvbdUWLojUAq +EObkKvbdiCPCdwRR +DoCkKvbdCTBDTevr +EOcKjvbdLAkGlbXq +EPDKjvbdcyyQXyRC +EPDLKvbdyNsHxSiD +EPDKjvbdqUTgRrKt +DoDKjvbdJuuFdEfi +DoDLKvbdEXwktTtM +EObkKvbdeJirVtzn +EObjjvbdYTMBMsnx +DnbkKvbdNQXpumfs +EPDLKvbdzitopDrt +DncLKvbdDxXlUUUM +EOcKjvbdADSXiyhp +DoCjjvbdqTsgSSKt +DoCkKvbdZtIhxdTO +EOcKjvbdUyHtZjnn +EPDLKvbdcSbkTdKB +DncLKvbdxZgfGYEr +DncKjvbdeATplxJf +DoDLKvbdnCJwXnmu +DnbkKvbdbKlFnnDA +DoCkKvbdrDeIpNua +EPCjjvbdmttzKirG +DoDKjvbdbrbkUDjB +DnbkKvbddZxoxZRC +EObkKvbdhgKDZWKV +DnbjjvbdGFiqmhtR +EPDKjvbdULvOaWPJ +EOcLKvbdygYlANFX +DnbjjvbdIHGzZYYH +EOcKjvbdhkeENuCy +EOcLKvbdNddTiJLE +EObjjvbdGFiqnJUR +EOcLKvbdjvWnEBxX +EPCjjvbdVBCRTRSZ +DncKjvbdVBCRTRSZ +EObkKvbdBdQAvJlf +EObkKvbdJYUCHkpp +EOcKjvbdGckVjCJj +EObkKvbdBsAcUGWr +DoDLKvbdIxUBhMQp +DoDKjvbdMgDQNPtk +EOcLKvbdHEKujCKK +DoCjjvbdLhalQxAS +EObkKvbdULuoBVoJ +EPDKjvbdhfjDZVjV +DoCkKvbdKDJbqJbx +DoCkKvbdbKlGPNcA +DncKjvbdrpVnicWG +EPDKjvbdvAdZSneI +DnbkKvbdFyVUaEYC +EOcKjvbdHDjuibJj +DnbjjvbdbiMjLFvx +EPCjjvbdUsltGLvK +DoCjjvbdkNBkzEgP +DncLKvbdFxtuBEYC +EOcKjvbdnBjWxPNu +DnbkKvbdqUTfrRjt +EPCjjvbdZHXEAPSi +DoCjjvbdxxJJapZk +DncKjvbdZyDimcLr +DnbjjvbdiBnbeWpq +EObjjvbdjbkkQftg +EObjjvbdqvokbhyR +EOcLKvbdeYZtTrFz +EPCkKvbdLqvmZtpz +DoDKjvbdNeDsiIjd +EPCkKvbdeXystRez +EOcKjvbdAMhZSvzY +EPCjjvbdSwkMNzkY +DoDKjvbdtlYXAtBX +EPCjjvbdBvzdIdov +DoDLKvbdVBBqSqRy +EOcLKvbdTvMQKUAq +EOcLKvbdxVMeQyMO +EPDLKvbdBsAbtGWr +DoCkKvbdKefHaaRV +DncLKvbdCTBDTewS +EPCjjvbdTIyjRAAl +DoDKjvbdkxsSSxft +EObjjvbdjvXOECXw +EPDKjvbdVTlsfLvK +EOcKjvbdjJfHjNXr +EObjjvbdfMfWflik +DnbkKvbdYqNFImEq +DoDLKvbdcJMikFvx +DoCkKvbdrXPlDIyR +EObjjvbdeOdsLTtS +DncLKvbdJSyArmXl +EObjjvbdkNBlZeHP +EObkKvbdfHkVqnRH +DncLKvbdKCjCqKDY +DoDLKvbdUyHsykOn +DncKjvbdWWiYWEEg +EPCkKvbdKWVFdEfi +EObkKvbdFpATWgFy +EOcKjvbdrzLpTAgn +EPCjjvbdhuZeWrVC +EPCkKvbdraellGjy +DncLKvbdGKeTCgmV +DoDLKvbdCEQAvJlf +DoDLKvbdJvUfEFGi +EOcKjvbdHDkVjCJj +EPCjjvbdZxdJnClS +DoCjjvbdcImJjewY +DoDLKvbdkDMLRHUg +DoDLKvbdqZOggREY +DoCkKvbdkMakyeHP +DoCkKvbdEvYpPmJe +DncLKvbdJJdAJpHE +DoDKjvbdEPCjkXCd +DnbjjvbdlAmOmALA +DoDLKvbdsBfNLgLZ +DncLKvbdKyQjSzuG +EPDLKvbdeAURMxJf +EPCjjvbdkHflGGOL +EOcKjvbdEuxpPlie +DncKjvbdcyyPxYqC +DoCkKvbdRDbaPqES +DncLKvbdaaVeFpQX +EOcLKvbdMuTSLNAX +EPCkKvbdbiMjKfWx +EOcKjvbdSCEEkiZL +DncKjvbdbhmJkGWx +DncKjvbdWXJYVcdg +EOcLKvbdvBDxrndh +DoCkKvbdCEQBVjNG +EPDLKvbdxUmFQyMO +DnbkKvbdznpRFCkx +DoCjjvbdKDJbpjDY +EOcLKvbdREDBQRDr +DoDLKvbdZtIhyETO +EObjjvbdKfGHbBQu +DnbjjvbdnUtzKirG +EPDLKvbdyNsHwsIc +DoCjjvbdIrxaSlxM +DoCkKvbdRjyFuHLT +EPCkKvbdJvUfDdgJ +DnbkKvbdgQBzvcwh +DnbkKvbdpyOgfqEY +DnbkKvbdmRxuZsEJ +EObkKvbdmRyUysDi +DnbjjvbdrzMPraIO +EPDLKvbdDxXksssl +EPDLKvbdqUUGrSKt +EPCjjvbdZisIPfbG +EPDLKvbdiGicZVjV +DnbjjvbdqcdiPnVa +DoDLKvbdGKdsCglu +EPCkKvbdYSlBNUOx +DoCkKvbdjmBkyeHP +EObjjvbdKDJcRKDY +EPDKjvbdiLdcmuCy +DoCjjvbdbAvEfQQX +EPDKjvbdegjvRmqH +EOcLKvbdrounibvG +DoCkKvbdliEUQtrB +DoCkKvbdrXPlChyR +DnbkKvbdcyxoxZRC +DoCkKvbdWIYWYHYz +DnbkKvbdmJETptrB +EObjjvbdbBVeGPpX +DoCkKvbdypnliKXA +EOcLKvbdatagXkTh +EPDKjvbdrounjDWG +EPDKjvbdUyHsyjnn +EPDKjvbddZxoxZRC +DnbjjvbdKCjCpjDY +DoCjjvbdKkBHvAJy +DnbjjvbdjbkkRGuH +DoCjjvbdrafNMGjy +DncKjvbdxnTHwsJD +DncKjvbdemFvfmJk +DnbjjvbdIwsbILqQ +EObjjvbdUMWPAvOi +EOcLKvbdGKdsChMu +DoCjjvbdWXIxWEEg +DoCjjvbdvPTzqKnt +DoDKjvbdILazmwRL +EPCkKvbdjlakzFHP +EPDLKvbdKDJbqKCx +EOcLKvbdHELWKBjK +DoCkKvbdOFDshhkE +EPDKjvbdBhkCKhej +DoDKjvbdNddTiJKd +EPCkKvbdVqmwadkc +EPCkKvbdFfKSOItR +EPCjjvbdZshiYcrn +DncLKvbdvAcxsOeI +EObkKvbdKVtfEFHJ +DncLKvbdXsMBNUPY +DoDLKvbdCTAbtGXS +DoDKjvbdRyjHsDWA +DoCjjvbdJcKDRJcY +EOcKjvbdEuxpPljF +DncLKvbduWNxKQsA +EOcLKvbdhuZeXSUb +EObjjvbdjvWnDaxX +EObjjvbdwWlAvAuu +EObkKvbdqquKnLBN +DoDLKvbddCSmSATm +DoCjjvbdwtmEpxlO +DnbjjvbdDoCkLWcE +DncLKvbdwyhGFxEr +EOcKjvbdrykosAgn +DnbjjvbdNeEUJJLE +DoDKjvbdjuwNdCYX +EPDKjvbdiGibyVjV +DnbjjvbdYqNEhmEq +EPDLKvbdxVNEpyLn +DoCjjvbdZeYGzgiC +DoCjjvbdZjTIQGbG +DnbkKvbdSPsfjGEX +EObjjvbdBsBDUGXS +DoCkKvbdsBfNMGkZ +EOcLKvbdLBLGmCXq +EPDKjvbdJTZBTNYM +DnbjjvbdJTZBSmYM +DoDLKvbdjKFgjNYS +DoDKjvbdqlzKYkhJ +EPCkKvbdkWXOECYX +EObkKvbdFkEsDINV +EObjjvbddndsKstS +DoCjjvbdauBfwjsh +DnbjjvbdFjeTCglu +EOcLKvbdfMfWflik +EObjjvbdlYsRryGt +EPCjjvbdtbcVWuoP +DnbjjvbdMgDPmQVL +DoDLKvbdjhHLefNk +EOcLKvbdUsmTfMWK +DoCkKvbdptTfqqjt +EObkKvbdrRuKmjaN +EPCjjvbdzoQQdcMY +DoDKjvbdrpVoKDVf +DoCkKvbdlZSrTYft +DoCjjvbdBhjajiFj +EOcLKvbdzoQQdbkx +EObkKvbdOhAYZAYa +EOcKjvbdjvXNdBww +DnbjjvbdEXwlTtTl +DoCkKvbdzjVPocsU +DoDLKvbdZQldiMeR +DncKjvbdYNqAYVVt +DnbjjvbdtvNxKRTA +EPCjjvbdqceIonWB +EOcKjvbdyXiKCPzL +DoCkKvbdfIKurNpg +DoDKjvbdFxuVAdYC +EOcLKvbdeOdrjssr +DncLKvbdxnShYTIc +EPDLKvbdoznEKwoA +DoDLKvbdptTfrRkU +DncLKvbdkWWnDaxX +EPCjjvbdKWVGDeHJ +EPCjjvbdtumwipsA +DoCkKvbdZxcinDMS +EObjjvbdCWzdIeQW +EPDKjvbdHgGzYwwg +EOcKjvbduDCtvvOo +DnbjjvbdqvokbiZR +DnbjjvbdmIcsptqa +DncLKvbdrJAJdmPF +EPCkKvbdKjaHvAJy +DoCkKvbdhuZdwSUb +EOcKjvbdnPzZVjyC +DoDKjvbdYSlAmUPY +EOcKjvbdffLzNgHA +DncLKvbdptUHRqjt +EPCjjvbdyTNiMqag +DoCjjvbdauBgXkTh +EPCjjvbdbiMikGXY +EOcLKvbdIHGzZXwg +DncKjvbdrXPkcIxq +DnbjjvbdOTTugEuQ +DnbkKvbdjcMKqHUg +DoDKjvbdffMZnHHA +DoCjjvbddijSWUzn +DncKjvbdBhkCKiGK +DncKjvbdJYTbHkqQ +DnbkKvbdqwPlCiZR +DoCkKvbdxUmFRYkn +DoDKjvbdmSZUzTDi +EPDLKvbdkyTSSxft +DoCjjvbdmajXYPOV +EPCkKvbdMowqVnHT +DncLKvbdTppoUuHm +EPDLKvbdgFkymfgA +EObjjvbdhgJcYujV +DncKjvbdtAGqIABS +DoDLKvbdqZOhGpdY +EObkKvbdjbkkRGuH +DoCjjvbdGLEsChNV +DnbjjvbdZoOIeEyj +DncLKvbdbrbjsdJa +EPCjjvbdGGJqmiTq +EPCkKvbdNPxRWNgT +EPCjjvbdJpydnfOF +EOcKjvbdcyxoxYpb +EPDKjvbdmozZWLYb +EObjjvbdVTmUFlVj +DoCjjvbdNrtWGduQ +DncKjvbdqUTfqqkU +DoDKjvbdTfznMWue +EOcLKvbdNsTugEuQ +DoDLKvbdjhHLfGOL +EObjjvbdZtJJYdSn +DoDKjvbdZjTHofbG +DncKjvbduCbtwVno +EPCkKvbdZtIhxcsO +EOcLKvbdnUuZkJqf +EObkKvbdiCPCeXQq +EOcKjvbdZtJIxcsO +EOcLKvbdZRNEhmFR +DnbkKvbdFjdsDINV +DncKjvbdsZlQSaIO +EObjjvbduLxXAtAw +DncKjvbddoFSjtTr +DoCkKvbdmbKXXoOV +DoDKjvbdOAIsTirA +DncLKvbdMfcQMpVL +EPDKjvbdsrqrxzFD +EOcLKvbdZRMdiMdq +EObkKvbdCTAbsfXS +EPDLKvbdtunYJpsA +EObkKvbdYSkaNToY +DoCkKvbdZMRdUOMN +EPCkKvbdIsYaSmYM +DncLKvbdVYgtZkPO +EObjjvbdaNLBsUmH +EOcLKvbdZyEKOCkr +DoDLKvbdOSsufdtp +DoDKjvbdhbPCdvqR +DnbkKvbdiZuFkpnG +DoDKjvbdHDjujCJj +EPDKjvbdCDpBVjMf +EObkKvbdeFOrBwDK +DoDLKvbdhgJbxvJu +EObjjvbdiZuFlQmf +EPDKjvbdeuzwpJzs +EPDKjvbdezuyEhsw +EPCkKvbdJYTbIMQp +DnbkKvbdkIHLeenL +DoCkKvbdAMgyTXZx +DnbkKvbdfIKvRnQg +EPDLKvbdJqZePFnF +DoCjjvbdRjxfVGkT +EOcLKvbdySmhlqbH +DnbjjvbdEYYMUTtM +DoDLKvbdhtydvquC +EObjjvbdZRMdiMdq +EPCjjvbdVZITzLOn +DoCkKvbdmuVZjjRf +DoCjjvbdzoQREbkx +DnbkKvbdkyTSSxgU +DoCjjvbdzRPNIjXA +EPDKjvbdnPyxvLZC +EOcKjvbdSZjHrbvA +EPCkKvbdShyjRABM +EObjjvbdYpmEiMeR +DoCjjvbdFaOqYizm +DncLKvbdEvZQQMjF +DncKjvbdNrtWGeVQ +DoDKjvbdqdFJPmvB +DnbjjvbdRXODblID +DoDLKvbdyzdnRhIh +EPCkKvbdcTCjsdKB +DncLKvbdJcKCqKCx +EObjjvbdmfdwmNgZ +EPDLKvbdqUTgSSLU +EObjjvbdZyEKODLr +EPDKjvbdTppoVVIN +DnbjjvbdFVyPpNJe +EPDKjvbdJYUBhLqQ +EPDLKvbdqceIpOWB +EPDLKvbdiBnbeXQq +DnbkKvbdGZVVBEYC +DncKjvbdGLFTDINV +EObjjvbdUGzmlXWF +EOcLKvbdxrmiMqbH +DoDLKvbdJpzEnenF +EObjjvbdEvYoomJe +DoDKjvbdJqZdoFme +EObjjvbdEuyPpMie +EOcKjvbdmtuZjjRf +EPDKjvbdjKGHilwr +EPCkKvbdpaIeAWgd +DoDKjvbdGZVUaDxC +DoCjjvbdFkErcHlu +EOcKjvbdrbFllGjy +DnbkKvbdMRwMzUpz +DoCkKvbdDxYLtTsl +EOcLKvbdLBKfmBxR +DoCjjvbdVwJYWDeH +DoCkKvbdZoOIdeZj +EPDLKvbdpfEFUWAh +EOcLKvbdKWVGDdfi +EObkKvbdtvNwipsA +DoCjjvbdwuNEqZMO +EObkKvbdfSBWzkbo +EPDLKvbdFxuVAdXb +DnbkKvbdRWnEClHc +EOcKjvbdkCkjqHUg +DoCjjvbdbsDKscia +EPDLKvbdzQoMiKXA +DnbkKvbdRDcApQcr +DoDKjvbdZtIiYcrn +DoDLKvbdqZPHgQdY +EObjjvbdyfxlAMeX +EObjjvbddjJrWUzn +EPDKjvbdjcMLQgVH +EOcLKvbdozmckXoA +EPDKjvbdcJMjLGWx +EPCkKvbdbhlijewY +EObjjvbdrEFJPnWB +EOcKjvbdmuVZjirG +DncKjvbdnBjXYOmu +DncLKvbdjcLjqHUg +EPDLKvbdlhdUQuRa +DoDKjvbdVwIwvEFH +EObkKvbdZMSDsnLm +DoDLKvbdzHZMAMdw +EOcKjvbdZMSDsnLm +DncKjvbdZshhyDsO +DncKjvbdCEPaWJlf +EOcKjvbdxxJKCQZk +EPCkKvbdezvZEiTw +EPDLKvbdypoMiKXA +EPCkKvbdnUuZjjRf +DnbkKvbdFfJqnJUR +DoCjjvbdTpqPUthN +DncKjvbdcyxoxYpb +EObkKvbdCSaCsfXS +DnbkKvbdRacdlIyL +DoCjjvbdTIzKRABM +EPCkKvbdatbGwjsh +EObjjvbdUsltGMWK +DoDLKvbdtvOXjQsA +DnbjjvbdYSlAmUPY +EOcKjvbdwuNEpxkn +EObkKvbdYqMdiMdq +EOcKjvbdnGeXlmgZ +DnbkKvbdqwQLcJYq +EObkKvbduVmxJqTA +EObjjvbdmoyyVkYb +DoDKjvbdBdPaWKMf +DncKjvbdVvhwvEFH +EObkKvbdauBfxLUI +EOcLKvbdMgDQNQUk +EOcKjvbdsQVnjCuf +EObkKvbdjuvnEBww +DoCkKvbdkWXODbXw +EPCkKvbdZyDjNblS +DoDKjvbdZLqdUNlN +DoDKjvbdbLMFoNcA +DoCkKvbdFVyQPmJe +EOcKjvbdhkdcmuCy +EPCkKvbdmtuZjiqf +DnbjjvbdRbEFLiYk +EPCkKvbdySnJMqag +EPDLKvbdhlFDnVCy +DoCjjvbdzoQREblY +EPCjjvbdvBEYroFI +EPCjjvbdJbjCqJcY +DnbkKvbdliEURUrB +DoDKjvbdOTUWGdtp +EOcLKvbdZnmhddzK +EPDKjvbdSBcdkiZL +DoCjjvbdZMRctOLm +DoDLKvbduCcUwVno +DoDLKvbdEzspeMDJ +EPCjjvbdULunaWOi +DoDLKvbdIwsaglQp +EObkKvbdJuuFdFGi +EPCkKvbdQccBQRDr +EPDKjvbdNrsugEtp +EPDLKvbdEXxLtUUM +DoDKjvbdVBCQsRRy +DncKjvbdeFPSCWcK +DoDLKvbdhficYvJu +DncKjvbdkClLRHVH +EOcLKvbduWNxKRTA +EObjjvbdNPwpumgT +DoCjjvbdjmCLzFGo +DncKjvbdZtIhxdSn +EObkKvbdKQyePFme +EPCjjvbdEuxpPljF +DoCkKvbdZtIhyDrn +EPDLKvbdJpzFOfNe +EPDKjvbduaEZTPFI +EPDLKvbdSQTgKFcw +EOcLKvbdBcpAujMf +EPCjjvbdfHkVrOQg +EPCjjvbdKaKflaxR +EObkKvbdZjTIQGaf +EOcLKvbdijGIKMwr +EPDLKvbdvBEZTOdh +DnbkKvbdZRNEhleR +DnbkKvbdijFgimXr +EObjjvbdEASIlywX +DoCjjvbdKaKgNCXq +EPDLKvbdTppoUuHm +EPCkKvbdwzHefYEr +EPCkKvbdhtyeWrUb +DnbkKvbdPyNAGsRj +EPDKjvbdmttzKiqf +DnbjjvbdRacdkhyL +EOcLKvbdeJjRvUzn +EObjjvbdNHCpNQVL +EPCjjvbdgLGzcGAE +DoCkKvbdidkGtoAO +DnbkKvbdKDJcRKCx +DnbjjvbdSQTgKGEX +EPDLKvbdyqPMiJwA +DnbkKvbdLrWlytpz +DnbjjvbdmgExNNgZ +EPCkKvbdlYsRrxgU +DnbjjvbdTkuoAvPJ +EOcKjvbdgFkymgHA +EPDLKvbdmaivxOnV +DnbjjvbdEztQeMDJ +EObjjvbdWfYzUAPT +DnbkKvbdiMEdNuDZ +DoDKjvbdgQBzwEXh +EOcLKvbdSBcdlIyL +DnbjjvbdrMzJxkhJ +DnbjjvbdddnrCXDK +DncLKvbdmbKXXnnV +DnbjjvbdYzbfSKWZ +EPCjjvbdUMWPBVoJ +EPDKjvbdBraDUGWr +DoCkKvbdFkFTDINV +DncKjvbdYkqdTmkm +DncKjvbdmpZyVjyC +DoCjjvbdZisIQHCG +DncLKvbdYqMeJMeR +EPDKjvbdZjTHpHBf +EOcLKvbdcJMikFwY +DoCkKvbdFpATXHGZ +DnbjjvbdVBBqSpqy +DoCkKvbddZyQXxpb +EOcLKvbdqlyiyMHi +EPDLKvbdfMfWgNJk +DoCjjvbdrNZjZLgi +EPCkKvbdeOdsKtTr +EPDKjvbdLrXMytpz +DncLKvbdQvnDcMHc +DoDLKvbdyYJJbPyk +DnbjjvbdrylPsBIO +DnbkKvbdTqROuUgm +DoCjjvbdcyyQYZRC +EObjjvbdbLMFnmcA +EObjjvbdbVCGxKsh +EObjjvbdelfWgMjL +EPDLKvbdnGdwmOGy +EPCkKvbdcTDLTdKB +DncLKvbdUxhTyjoO +EPCjjvbdwzHfFxEr +EPCjjvbdkxrqryHU +DncLKvbdDihJvYKA +EPCkKvbdRzJhScWA +EObjjvbdZHWdAOri +DoDLKvbdjbkkRGuH +DncKjvbdNVSrLNAX +DncKjvbdVqnYCElD +DnbjjvbdFWZPpMjF +DoCjjvbdZMRctNkm +EPCjjvbdRNXaxmtz +EOcLKvbdLZQjSztf +EObjjvbdePFSjssr +EOcKjvbdjbkkRHUg +EPDKjvbdcSbjtEJa +EObkKvbdKQzFPFme +DoCkKvbdnUtzKjRf +DncLKvbdeOeTKtUS +DoCjjvbdpstGqqjt +EOcKjvbdrpWPJcWG +EPCkKvbdwkXDgzyf +DncKjvbdnPyxvLYb +DoCkKvbdpxoIHRDx +DnbjjvbdLFegaaRV +EPCjjvbdrXQLcJYq +DncKjvbdWXJXvDdg +DnbjjvbdQdCaQRDr +EOcLKvbdWWiXuceH +DoCjjvbdbiNJkGXY +EPDKjvbdijGHjMxS +DoDLKvbdTfzmkwVe +EObkKvbdmSZUzTEJ +DnbjjvbdKefHaaRV +DncLKvbddoFSjstS +DncLKvbdSLYfUgKs +EPCkKvbdCIjbLJGK +DncKjvbdKNADzGuB +DoDKjvbdBcpBVjMf +DnbjjvbdpxoHfqEY +DoCjjvbdANHyTWyx +DoDKjvbdFjeSbgmV +DnbkKvbdxwiKCPzL +DncKjvbdqceIpNvB +DnbjjvbdLFfHbAqV +EPDLKvbdtTSTYydc +EPCjjvbdezvYdiTw +EObjjvbdWWiYVdFH +EOcLKvbdZyDjNbkr +EObkKvbdwzIFeweS +EPCjjvbdjmBkzFGo +EObjjvbdGAoRYizm +EObjjvbdjcMLQgVH +DoCjjvbddePRavbj +EOcKjvbdlhcspuSB +EPCjjvbdSCEFMJZL +EObkKvbdEYYLsssl +EObkKvbdpstGrSLU +DoDLKvbdIGgZxwwg +EObkKvbdWIYWYGxz +EPCjjvbdfILWSNqH +DnbkKvbdFWYpPljF +DoCjjvbdVAbRSqRy +EOcKjvbdeEoSCWcK +EOcKjvbdSBceMIxk +DoCjjvbdgFkzOGgA +EObkKvbdbPfgELzd +DnbjjvbdmtuZkJqf +EPCkKvbdYgWdAPSi +EObkKvbdmaiwXoOV +EOcKjvbdjuvnDbXw +DncLKvbdiBoCdvpq +DnbkKvbdZxcjNbkr +EPDKjvbdKfFgaaRV +DoDKjvbdNGcPlouL +EOcKjvbdHlBznXQk +EPCjjvbdKQydoFme +EPCjjvbdDxYLsssl +DoCjjvbdHbLydzAD +DnbkKvbdZisHofbG +DnbkKvbdvvkaWBWV +DncLKvbddxZtUSFz +EPCjjvbdBcpBWJlf +EObkKvbdVBBprpqy +DoCkKvbdaSFcITfL +DoCkKvbdZLqctOMN +EPDKjvbdFWYpQMie +DncKjvbdOEctJIjd +DoCkKvbdEuyQPmJe +DncLKvbdZGwEAOsJ +DncKjvbdlqyUzSci +EOcKjvbdKCibqKCx +DnbjjvbdEOcLKvbd +DncKjvbddneTLUUS +EPCjjvbdhbPDFWpq +DoCjjvbdeAUQmXjG +EPDKjvbdVwJYWDeH +DncKjvbdePFTKstS +DoCjjvbdjggMFemk +EPCjjvbdcScLUDjB +DoDKjvbdZjTIQGbG +EObjjvbdehKurNpg +DncLKvbdbsDLUEJa +EOcLKvbdEJgjWXjA +EPCkKvbdqquKnKaN +DnbjjvbdZjShQHCG +DoCjjvbdCEPaVilf +EObjjvbdzjUpQDrt +EOcLKvbdUVlPjUBR +DnbjjvbdeFPSCWbj +DoCkKvbdKxpirzuG +DncLKvbdrykpTAgn +DoDKjvbdemGXGljL +DncLKvbdTYKlNzkY +DncKjvbduaDyTOeI +EObkKvbdnBjWwoOV +EPCkKvbdGdLWKCJj +EPDKjvbdKeegaaQu +EObkKvbdxnShXrhc +DoCkKvbdsBemLgKy +EPCjjvbdrzLoraHn +EPDLKvbdrRuKmjaN +DncLKvbdmajWxPOV +DncKjvbdKVuGDeGi +EObjjvbdziuQPdTU +DnbkKvbdZxcinCkr +EPCkKvbdlqxtzTDi +EPCkKvbdyzeOSHiI +DnbkKvbdqmZiyMIJ +EOcLKvbdIwtBgkqQ +DncLKvbdfekzOHHA +EPCkKvbdKNADzGuB +EOcLKvbdUaBqSqRy +EPDKjvbdddnrBvbj +DncLKvbdmuVZjirG +EOcKjvbdbBWEepPw +DncLKvbdwjvdHzyf +EPDKjvbdmgFXlmgZ +EPCkKvbdtSqryZeD +EObkKvbdOFEUIhkE +EOcKjvbdiBncFXRR +DncLKvbdxZgeeweS +EPDLKvbdxwiKCPyk +EPDKjvbdHEKvJajK +DncKjvbdrafMlGjy +EOcLKvbdwWlBWBWV +DncLKvbdegjvRmqH +EObkKvbdehKvRmqH +DoDLKvbdUaBpsQrZ +EPDKjvbdRaceMJYk +DnbkKvbdZRNEhldq +DnbjjvbdKCibpjDY +DoDLKvbdKaLGmCXq +DncLKvbdKaKflbYR +DoCjjvbdZQleJNFR +EPCjjvbdZHWdAOsJ +EObkKvbdpxnggRDx +EPDKjvbdiUzFXSVC +DncKjvbdhfjDZWJu +DoCjjvbdYkrDtNlN +EOcLKvbdkVvmdBxX +DnbjjvbdFkFScHlu +DoCjjvbdlrYuZrci +EOcKjvbdrDdiPnWB +DoCjjvbdfoazvcwh +EPCkKvbdtkxWaUAw +EObjjvbdVYgsyjoO +EPCjjvbdssSTZZeD +DoCjjvbdbVBfwjsh +EPCjjvbdVgwuxGxz +EOcKjvbdZoNhdeZj +EPCkKvbdGYttaDwb +DncLKvbdvAcySoEh +DoDKjvbdIGfzZYYH +DoDKjvbdtcCtvvPP +EObjjvbdkxsRryHU +DnbkKvbdJSyBTMwl +DoCjjvbdsPuoJbuf +DnbjjvbdZxcimcMS +DoDKjvbdNGbpMouL +DnbjjvbdSZjHrbvA +DoCkKvbdmRxtysDi +EOcLKvbdZQmEiMeR +EPCjjvbdpfEEtVaI +EPCjjvbdtTRrxzEc +DoCkKvbdZdxGzghb +DncKjvbdrykpTBIO +EPCkKvbdxxIjCPyk +DncLKvbdCEQAujNG +EOcLKvbdrWokbhyR +EPDKjvbdjJehKMwr +DncLKvbdSxLMNzjx +DnbjjvbdZyDinDMS +EObjjvbdZirhQGaf +DncLKvbdkClKqHVH +EObkKvbdfIKvRmqH +DoDLKvbdQvmcblID +EPDKjvbdNsTufdtp +EObkKvbdZRMeIleR +DnbkKvbddwytTrFz +EObjjvbdZxdKODMS +EPCkKvbdSLZFtgKs +EPDKjvbdrovPJbuf +EPCjjvbdHgHZxxYH +EPCjjvbdddoSBvbj +DoDKjvbdegkVqmpg +DoDKjvbdCfkfHAzc +EObjjvbdtvNxJqTA +EPDKjvbdhtyeXSVC +EPDLKvbdUtMtGLvK +EPCjjvbdFaPRYizm +EPCkKvbdVZIUZkOn +EPDKjvbdFeiqnIsq +EObkKvbdddoRbWcK +EOcLKvbdaNLCSuMg +EObjjvbdFpATXGfZ +DncLKvbdrXPkcJYq +EPCjjvbdFjdrcHlu +EObkKvbdUQqPVUhN +DoDLKvbdpxoHfqDx +DncLKvbdypoNIjXA +EPCjjvbdmRxuZrdJ +EPDKjvbdqZPHgREY +EOcLKvbdZGwEAPTJ +DncLKvbdjuwNcbXw +DoCkKvbdTlWPBVoJ +DoCjjvbdRzKIScWA +EPDLKvbdZnnJFEzK +EPDLKvbdqvokbhyR +DnbkKvbdAMhZTWyx +EPCkKvbdqYoHgRDx +EPDKjvbdZtJJZETO +EObkKvbdWRmxBdlD +DnbkKvbdwWkaWBWV +DncKjvbdgKfzcGAE +DncLKvbdtbcUwVno +EOcLKvbdcImJjfWx +DncLKvbdSwjlNzjx +EObkKvbdjblLQftg +DncLKvbdQmYByNtz +DnbjjvbdhlFDmtby +DnbjjvbdcTDKsdJa +EPCkKvbdqUTgSRkU +EOcKjvbdZQleImEq +EOcLKvbdtTRrxzFD +EPCkKvbdUVkpKUAq +DncLKvbdmbJvwoNu +EPDKjvbdrJAKFMne +DncKjvbdpyOhGqEY +EOcLKvbdLrWlzVQz +DnbjjvbdvAdYsPFI +EPCkKvbdDoDKjvbd +DoDLKvbdelfWgMjL +EObkKvbdaMjbTUlg +EObjjvbduVmwjRTA +EPCjjvbdHffyxwwg +DnbkKvbdXrkaNToY +DoCjjvbdZshhyDrn +DoDKjvbdunszqKoU +EPCkKvbdmJDtRVSB +DnbkKvbdcImKLFwY +DoCjjvbdpedEtVaI +DnbjjvbduMXwAtBX +EPDLKvbdhbPDFWpq +EPCjjvbdrDdiQNua +DnbkKvbdKxpirzuG +EObkKvbdcTCjtEJa +DncLKvbdZQmFIldq +DoCkKvbdqUUGrRkU +DnbkKvbddZyQXyRC +DncLKvbdIryBTNXl +EPDKjvbduaDxrneI +DoCkKvbdZMSDsmlN +DoDKjvbdrovOjCvG +EOcLKvbdhyuFkpmf +DoDLKvbdddnrBwDK +DncKjvbdDwxLstTl +EPDLKvbddZxpXxpb +DoDKjvbdCSaDTewS +EPCkKvbdVqmxBeLc +DoCkKvbdZMSEUNkm +DnbkKvbdznopdcMY +EPCjjvbdqYoHgQcx +EPCkKvbdlhdUQuRa +EObjjvbdauBgYLUI +EObjjvbdySnJMrCH +EObjjvbdkIGlGGOL +DoCkKvbdwXMAvBWV +DnbjjvbdiCOcFXRR +EPCkKvbdIHGzZYXg +EPDKjvbdiMFDmuCy +EOcKjvbdtlXvaUBX +DoDLKvbdhfibxuiu +EPCkKvbdqwQMChxq +EObkKvbdRkYeuGjs +DoDKjvbdYkrEUNlN +EPDKjvbdZshiYcsO +DnbkKvbdQlxBxnUz +DncKjvbdSPtGifEX +DoDLKvbdmajXXoNu +EObjjvbdHbMZdzAD +EPCkKvbdZyEKNblS +EObkKvbdKfFgbBRV +EOcLKvbdOTUVgFVQ +DoCkKvbdfMevgMik +EPDKjvbdptTfrSKt +DnbkKvbdxZhFexFS +DncLKvbdUaBqTQrZ +DoCjjvbduDDUwWPP +DoDKjvbdNsUVfduQ +EObkKvbdvOszpjoU +EObkKvbdNsTvGdtp +EPDKjvbdxwhiapZk +DoDKjvbdiGjCxvJu +DoDLKvbdxxIibPyk +DncKjvbdvAdYroFI +EOcLKvbdLAkGmBwq +DncLKvbdIsYaTMxM +EPDLKvbdFejRmiUR +DoCkKvbdbrbjscia +DoDLKvbdiHJbyWJu +EOcKjvbdIwtBhMQp +EObkKvbdpfDdtVaI +EObjjvbdfMevfmJk +EObjjvbdptUHRrLU +EPDLKvbdYgXEAOri +EObkKvbdZoOJEeZj +DoDKjvbdqUUGqqjt +DnbjjvbdxnTHwriD +EPDKjvbdfHkWRmpg +EPDLKvbdePEsLUUS +EPCjjvbdEPCkLXDE +DoCjjvbdgQBzvdYI +DoCkKvbdZjSgogBf +EObkKvbdtunYKQsA +EPDKjvbdezvYdiTw +EPDLKvbdLBLGmCYR +EObkKvbdSLYfVHKs +EPDKjvbdfILWSNqH +EObjjvbdqlyixkhJ +DoCkKvbdjKFgjNXr +DoDLKvbdyzdmrHhh +DoDLKvbdYpleImEq +DoDKjvbdUxgtZkPO +EPDLKvbdJKEAKPgE +DoDKjvbdRXODblHc +DoCkKvbdmozYujxb +EOcKjvbdMgCpMouL +DncKjvbdZsiJZESn +EPCkKvbdzROmIiwA +DnbkKvbdEOcLKvbd +EPCjjvbdpxoIHRDx +DnbkKvbdEJgivXjA +DoDKjvbdfHjurOQg +EObjjvbdyYIjCPzL +DoCjjvbdvlvANEEm +DncLKvbdOXoVzdOU +EObkKvbdatagYKtI +DnbkKvbdGYtuAcwb +EObkKvbdegjuqnRH +DnbkKvbdtumxKQsA +DnbkKvbdIxTbILqQ +DncKjvbdIsZBTMxM +EPCjjvbdRjyFuHLT +EOcKjvbdJXtCIMQp +DoDKjvbdYkqdUOLm +EObjjvbdZsiIyESn +DnbkKvbdhtyeWrUb +EPCjjvbdEuyQPmKF +EOcLKvbdeFOrCWcK +DoDLKvbdEvYpPlie +DoCjjvbdZtJIyETO +EPCjjvbdrWokcJYq +DoDLKvbduaDySneI +DncLKvbdsPunjCuf +EObkKvbdpyOhGpcx +EObkKvbdliDsqUqa +DoDLKvbdhaoCeXQq +DncLKvbdaRfChUFk +EOcKjvbdYTMAlsoY +EPCkKvbdfkGzbfAE +EOcKjvbdURQnttgm +DoDLKvbdDoCjjvcE +DncLKvbdCJKbLJGK +EPDKjvbdhlFEOVDZ +DnbkKvbduCcVWvOo +EPCjjvbdQdDBPpcr +EObkKvbdbBVdeopX +DnbkKvbdWHwuwfxz +DoDLKvbdsrqrxzFD +DoDKjvbdCSaCsfXS +DoCkKvbdNPxQunGs +EPDLKvbdyzeNrHhh +EObjjvbdWXIwudFH +EPCjjvbdKWVFceHJ +EOcLKvbdqwPlCiZR +DncLKvbdyOTHwsJD +DncLKvbdxUleRZMO +DnbjjvbdZHWdAPTJ +DoDLKvbdePEsKstS +EPDKjvbdHDkVjBij +EObjjvbdSPtHJecw +EObjjvbdyTOJNRag +EOcKjvbdhfibxuiu +EOcKjvbdRDbaPqES +DnbjjvbdemGWflik +DoDKjvbdwjwEHzzG +EObjjvbdsCGNMGjy +DnbjjvbdssRsYyeD +DoDKjvbdJvVFceGi +EPCkKvbdLZQjSzuG +DoDLKvbdqUUHSSLU +EPCjjvbdaaWEeoow +EPCjjvbdDjHiuxKA +EPDKjvbdZQmFIleR +DoDKjvbdRDbaPpdS +EPCjjvbdZoOJFFZj +EObjjvbdQmYBxnUz +EPDKjvbdKCibqKDY +DoDLKvbdsCFmMGjy +DncKjvbdKaKgMaxR +DoCjjvbdrMzJxkhJ +EObkKvbdeKKRutzn +EPCkKvbdcTCjscjB +EPCkKvbdZsiIyDrn +EObjjvbdnBjXXoOV +DoDKjvbdBiKakIfK +EOcKjvbdRpTfjGEX +DoCkKvbdtSqrxydc +EObkKvbdHDkVjBij +DncLKvbdqTsgSSLU +DncLKvbdzdzOzdzQ +DoDLKvbdVrNwadlD +DncLKvbdSQUGifEX +DncLKvbdxxJKBoyk +EPCjjvbdrzLpSaIO +DnbkKvbdhtyeXRuC +DoDKjvbdyTOImSBg +EPDLKvbddZxpXxqC +DoCkKvbdZMSDsnLm +DncLKvbdEARhlzXX +EPDKjvbdkWXOECYX +EObkKvbdSLYetgLT +EPDKjvbdTfznLvvF +DoCjjvbdSZjHrcWA +DncKjvbdmJDsptqa +EOcLKvbdZxdJmblS +DnbjjvbdKWUfDeHJ +EPCkKvbdLiBkpxAS +EObkKvbdePFSkTtS +DoDKjvbdYzbfSKWZ +EPCjjvbdvAdYsPFI +EObkKvbdTAFJIBnd +DnbkKvbdsZkpSaHn +DoDLKvbdczZQYZRC +EPDKjvbdTvMQKTaR +DnbkKvbdyYJKCQZk +EPCkKvbdVAaqTQqy +EOcLKvbdbPfgDkzd +EObkKvbdePErjssr +EPDLKvbdyTOJNRag +EPDLKvbdyTNiNSBg +DoCjjvbdqvpMCiYq +DoDKjvbdRpUHKGEX +DoCjjvbdDoCkLWbd +DncLKvbddCTNSATm +DoCkKvbdcSbkUEJa +EPDLKvbdzjVPocrt +DnbkKvbdxVNFQyLn +DnbkKvbdSKyFtfkT +DoCkKvbdmpZxukZC +DncLKvbdGFjSOJTq +EOcKjvbdhkdcmtcZ +DoCjjvbdyzeORghh +EPCkKvbdRbDeMJZL +DoDLKvbdZMRctOMN +EObjjvbdAMgySvyx +EOcLKvbdTYLMNzkY +DnbjjvbdmuVZjjSG +DnbkKvbdZsiIyDrn +EPDLKvbdjEjfuPAO +DoCjjvbdkxrrSxgU +DncKjvbdSLYfUfkT +DnbjjvbdBcpAvJmG +DoDLKvbdSPsgKFcw +DoCkKvbdrXQMDIyR +EObkKvbdKVuFdEfi +DnbkKvbdrSVLOLBN +DoDKjvbdZnmhdeZj +DoDKjvbdNHDQNPuL +DoDKjvbdpyOggREY +DoCkKvbdQvmcblID +EPCkKvbdMfbomQVL +EPCjjvbdNVTRjmAX +EOcKjvbdbhlijevx +EObkKvbdWWiXvEFH +DncKjvbdlqyVZrdJ +DnbjjvbdrSUkNjaN +DncLKvbdmSZUzTDi +EObjjvbdZQmEhmEq +EOcKjvbdiLdcnVDZ +EObkKvbdySmhlqag +DnbjjvbdbUagYLTh +DncKjvbdBdQAvKNG +DncLKvbdyzdnRghh +EObkKvbdLZRKSztf +DoDLKvbdRXOEDMHc +DncKjvbdFkFSbgmV +EPCjjvbdZQldiMeR +EPDLKvbdFfJqmiTq +EOcLKvbdpssgRrKt +DnbjjvbdKRZeOeme +DnbkKvbdnPzYvLZC +DoDLKvbdUVlQJsaR +EPCjjvbdqFceTvAh +EPDKjvbdEARhlyvw +EPCjjvbdNGbolotk +DoCjjvbdVhYWXgYz +DoCjjvbdUtMtFkvK +DncKjvbdZQldhleR +DnbjjvbdCEPaWKMf +EObjjvbduWOXjQsA +EOcKjvbdIjEAKPfd +DoCjjvbdURRPUuIN +EObkKvbdbhmKKfWx +DoDKjvbdxrnJMrCH +EObjjvbdGFirNiTq +DoDLKvbdtSqsZZeD +EPDLKvbdKkAhWAJy +EPCkKvbdbVBgYKsh +DoCjjvbdKWVFdFGi +EPDKjvbdwXMAuaWV +DoCkKvbdRXNdCkhD +EPCjjvbdZRMdhmEq +DncLKvbdcJMijfWx +DnbkKvbdZRNEiNFR +EObjjvbdAMhYrvyx +EPDLKvbdijGIJmXr +DoCkKvbdbhmJjfXY +EOcLKvbdrzMQTBHn +DnbkKvbdKVtfEEfi +EPCkKvbdxVNFRZMO +EPDLKvbdjcMLQgUg +EObjjvbdjuwODbXw +EObkKvbdZeXfzhJC +EPCkKvbdUyITyjoO +EPCkKvbdGFjRnIsq +DnbjjvbdIwsbHlRQ +DncKjvbdtTSTYzEc +EPDKjvbdhfjCyWKV +DoCjjvbdhytelQnG +DoDKjvbdxnTHxTIc +EOcKjvbdUQqPUtgm +EPDLKvbdkNCMZdgP +DnbkKvbdGKeTDINV +EOcLKvbdZMRcsmlN +DnbjjvbdRXNdCkgc +DoCjjvbdRXNccMHc +EObkKvbdRjyFuGjs +EPDLKvbdmJDtRUrB +DoDLKvbdpyPIGpdY +EPCjjvbdkNCLzEgP +DoDLKvbdZoNiFEzK +DoDKjvbdKVuFcdfi +DoDKjvbdqZOggQdY +EPCkKvbdSQTgJecw +EOcKjvbdrRuKnLAm +EObkKvbdbUbHYLUI +EOcLKvbdyNrgwsJD +DoDKjvbdegkVqnQg +DnbkKvbdGBOpxizm +EObkKvbdJbjDQicY +DncLKvbdSLZFuGjs +DoCkKvbdGckVibJj +DoCkKvbdzeZnzdyp +EObjjvbdxxJKCQZk +EObjjvbdJpzFPGNe +EPCkKvbdUsltGLvK +DoDLKvbdziuQQDsU +DncLKvbdRzKIScWA +DoCkKvbdSLYfVGjs +EPCjjvbdhgKDYujV +DoDKjvbdtunXjQsA +EPDKjvbdqceJPnWB +DncKjvbdUQqOuUhN +EOcKjvbdJvVFceHJ +EPCkKvbdMfcPmQVL +EObkKvbdNrsufdtp +DncLKvbdUQpnuUhN +DncKjvbdYkqdUOMN +EObkKvbdqceJQNvB +EPDLKvbdCWzdJFPv +DncKjvbdauBfxLTh +DncKjvbdZnnJEdyj +DncLKvbdEvYpPlie +DoDLKvbdhaoCdvpq +EObkKvbdCEQBVimG +EOcKjvbdBiKbKhfK +DnbkKvbdeuzwpJzs +DncLKvbdhlEcnVDZ +EObkKvbdkCkjpftg +DncKjvbdZQldhmEq +DoDKjvbdFyVVBEXb +DncKjvbdZirgogCG +EPCkKvbdWXJXvEFH +DnbkKvbdOStVfduQ +DnbkKvbdNGbpMouL +EObkKvbdcIljKfXY +DoDLKvbdXrlBMsnx +EOcLKvbdfNFwGmJk +EObjjvbdUQqPUuHm +DnbjjvbdEXxLtUTl +EPDKjvbdLGFhCBQu +DncKjvbdTYLLmzkY +DoCkKvbdkaNPNALA +DoCjjvbdFxtuBDwb +EPDLKvbdGGJrNhsq +DoCkKvbdZyEJnDLr +EObkKvbdDxXlTssl +EPCkKvbdGKdrbglu +EOcLKvbdmoyyVjxb +DnbkKvbdRNYByNtz +EObjjvbdGFirOItR +DoCjjvbdxUmFRZLn +EPCkKvbdsQWPJcWG +EPCjjvbdegkWSORH +DncLKvbdYzcGRjVy +DoCkKvbdRXNcblHc +EObkKvbdwtldqYkn +DnbkKvbdZisHpGaf +EPCkKvbdGQASvfey +DnbjjvbdeFPRavbj +EOcLKvbdGZVVBEYC +EPCkKvbdKDKDQicY +EPCkKvbdUsmUFkuj +DoCkKvbdatbHXjtI +EObkKvbdlrYtyrdJ +DnbjjvbdjKGHilwr +EOcKjvbdjlakyeGo +DoDLKvbdnPzZVkZC +DnbjjvbdCIjbLJFj +DoCkKvbdegkWSORH +DoDLKvbdjvXODbYX +EPDKjvbdaaVeFoow +DncKjvbdwtmFRZLn +EObkKvbdkNCLzEfo +DncLKvbdrbGMlGkZ +EObjjvbdczZQXxqC +DoCkKvbduaEZTOdh +EObjjvbdZxcjNbkr +EOcKjvbdCJKbKiFj +DnbjjvbdjEkGuPAO +DnbjjvbdZshhyDsO +DoDLKvbdbsCkUDjB +DoCkKvbdNddUIhkE +EPDLKvbduVnYJpsA +DnbjjvbdQvmccMHc +DoDKjvbdDjIKWXjA +DoDLKvbdxZhGGYEr +EObkKvbdqquKmkBN +EObjjvbdLBLHMawq +DoDLKvbdrbFmLgLZ +EPDLKvbdddnrBwCj +DoCkKvbdbrcLUEKB +DoDKjvbdqlyjYlHi +DncKjvbdQwNdDMID +EObkKvbdBiLCKhej +EPCkKvbdSZigsDWA +DnbkKvbdwuNFRYlO +EPDLKvbduCbtvvOo +DnbjjvbdaaWFFpPw +EObkKvbdRECaQQdS +DncKjvbdyOShXsJD +EPCkKvbdFVyPomJe +DoDLKvbdcJMijevx +EObkKvbdSZigsCvA +EObjjvbdrNZjYlHi +DnbkKvbdKfFhBaRV +EPDLKvbdSLZFtgKs +EPDLKvbdrbGNMGjy +EPCjjvbddwzTtSFz +DoDLKvbdnGdxNNgZ +DncLKvbdTfzmlWue +EOcKjvbdbLLfOmcA +DoDLKvbdNGcQNPuL +DncLKvbdUaCQsQqy +EPCjjvbdCfkfHAzc +EPDKjvbdlrYuZsDi +EPDLKvbdmajXYPOV +EObjjvbduCcUvvOo +DoDLKvbdJXsahLqQ +EPCkKvbdOSsugEuQ +DnbkKvbduaDyTOeI +DncLKvbdYqNEhldq +EOcLKvbdeOdsKtUS +EOcKjvbdkHgLefOL +EPCkKvbdrpVoKCuf +EObjjvbdShzJqAAl +DnbjjvbdgPazwDxI +EPDLKvbdEztQdlDJ +DoDKjvbdYpmFImFR +DncLKvbdsBellHLZ +DoCjjvbdatbHYKsh +DoCjjvbdptTgRrLU +EOcLKvbdznpRFCkx +EPCjjvbdWWiYWEFH +EPCjjvbdRosgJedX +DnbjjvbdkIGkefOL +DnbjjvbdiZuGLqNf +EPCkKvbdANIZTWyx +EObjjvbdZQmFJMdq +EObkKvbdjvWmcbYX +DncLKvbdRbEFMJYk +EOcKjvbdpfDdtVaI +EPDKjvbdJqZePFnF +DnbjjvbdeFOqavcK +DoCjjvbdnHFXlnHZ +EPCjjvbdTvLpKTaR +EPDLKvbdVgxVxHYz +EObkKvbdZRNFJMdq +EPDLKvbdbUafwkUI +EObjjvbdKCjDQibx +EPDLKvbdrXPlChyR +DoCjjvbdxsNhlqbH +DoDKjvbdNGbomPtk +EPDLKvbdLBLGmBwq +DncLKvbdIsZBTNYM +EPDLKvbdOXnuzcmt +EPDKjvbdKDJcRJcY +EObkKvbdiBncFWqR +DncLKvbdlhcsqUrB +DncKjvbdrylQTAgn +DoDLKvbdTlWOaWOi +EPCkKvbdegjurNpg +EObjjvbdyTNhmSBg +EPCjjvbdQccBPpcr +EPDKjvbdeOeSkTtS +DoCjjvbdGYuVAdXb +EObjjvbdrzMPsAhO +DncLKvbdrEFJQOVa +EPCjjvbdbhmKKfWx +EPCkKvbdeYZssqez +DnbkKvbdURQntuHm +EPDLKvbdkDLkRHVH +EOcKjvbdlZSrSxft +EObkKvbdijGHimXr +EOcLKvbdpxnggQdY +DncKjvbdJKEAJpGd +EPCjjvbdMowpumfs +DoCkKvbdmSYtysDi +DoDLKvbdBsBDTfWr +EPDLKvbdrMzKZMHi +DnbkKvbdBraDUGWr +DnbjjvbdDxYMTtTl +DncKjvbdFyUuBEYC +EPCkKvbdVZITzKnn +DnbkKvbdTkvPBWPJ +EObkKvbdSQTfjFdX +DoCjjvbdZisIPgBf +EPCkKvbdLGFhCAqV +DoCjjvbdNGcQNPuL +DoCkKvbdqlzJyMIJ +EObjjvbdZtIiZDrn +DnbjjvbdeEoRawCj +DoDKjvbdUaBqSqRy +EOcLKvbdmfdwmOGy +DoDKjvbdptTfqrKt +DoDLKvbdvAcxsPEh +DoCkKvbdySmhmRbH +EOcLKvbdhfjDZWKV +EOcKjvbdHffzZXxH +DoDKjvbdLFfHaaQu +EPCjjvbdgFlZmfgA +EOcKjvbdtcCuXVno +DoDLKvbdZirgpGbG +EObjjvbdNsUWHEuQ +DoDLKvbdsBfNLgKy +DoDKjvbdGGKRnJUR +DoDLKvbdKkAhWAKZ +DnbjjvbdOFDtJJKd +EPCjjvbdMuSrKmAX +DnbjjvbdyXiKBpZk +DncLKvbdOFDtIhjd +DoDKjvbdNPxQumgT +DnbjjvbdrSVLOKaN +EPCjjvbdmJDtRVRa +EPCkKvbdZeXfzgiC +DoDKjvbdhaoCdwRR +DncKjvbdiBncFXRR +EPDLKvbdvBEYrndh +DnbjjvbdBiLBkIfK +EPDLKvbdhgJbyVjV +DncKjvbdzRPNIiwA +DnbjjvbdegjvRmpg +DncLKvbdyYIibQZk +EPCkKvbdxnTIXrhc +EPCkKvbdhkeEOUby +DnbkKvbdjJehKMxS +DoDKjvbdkVwODbYX +EPCkKvbdFWYpQNKF +EPCjjvbdXrkaMsnx +EPDKjvbdRjxetgLT +DoDKjvbdEztRFLbi +DnbkKvbdqdFJQNua +EPDLKvbdTqQntthN +DoDLKvbdYORAXtvU +DnbjjvbdEYXksstM +EPDKjvbdkMbMZdfo +DncLKvbdJKEAKQGd +EOcKjvbdFejSOJUR +DoCjjvbdYlRdTmkm +DoDKjvbdlYrqrxgU +EPDKjvbdKVuFdFGi +EOcLKvbdJqZeOfNe +DnbkKvbdzoPpdcLx +DoDKjvbddePSCXCj +DoDKjvbdEASIlywX +DoCjjvbdrEEiPmua +EPCkKvbdidkGuPAO +EObjjvbdKRZdnfNe +DncKjvbdhgJcZWJu +EPDLKvbdZxcimbkr +EPDKjvbdNeEUIiKd +EOcKjvbdvAdZSndh +DncLKvbdjggMGGNk +EObkKvbdOStVgFUp +EPCkKvbdRaceMIxk +DncKjvbdDwxMUUUM +DncKjvbdWeyZtAPT +EPCjjvbdEYXkstTl +EOcKjvbdxsOJNSBg +EPCkKvbdKQzFPFnF +EOcLKvbdJXtCHkpp +DoCjjvbdtlYXBUBX +EPCjjvbdwuNFRYkn +DoDLKvbdkDLjpfuH +EPDKjvbdxrmhlqbH +EOcLKvbdjmCLzEgP +DoCjjvbduaEYsPFI +EPCkKvbdCEPaWJmG +DncKjvbdwtmEpxlO +EPCkKvbdJbjCpjCx +DnbjjvbdhzVGMRNf +EPCkKvbdZxcinDMS +DoCkKvbdrNZiyLgi +EOcLKvbdIHGyyYYH +EObkKvbdYNqAXuWU +EPDKjvbdtvNwjRTA +EPCkKvbdcJMjLFvx +EPCjjvbdNrsvHEuQ +DoCjjvbdnGeYMmgZ +DoDLKvbdSLZGUfjs +EPDKjvbdtvOYKRTA +DoDKjvbdziuPpESt +DoCkKvbdMgDPlotk +DoCkKvbdeFOrCXDK +DnbkKvbdMgColpUk +EPCkKvbdKVuFdFGi +DoDLKvbduCcUvuoP +DoCkKvbdRDcAopdS +EPDLKvbdehKvSNpg +EOcKjvbdDoCjjvbd +DoCjjvbdOSsufdtp +EObjjvbdGQASwGfZ +DncLKvbdiHJcYujV +DncKjvbdRadFMJZL +EPDLKvbdZxcinDLr +EPDLKvbdhaoDFXQq +DoDKjvbdcJNJkGXY +DoDLKvbduaDySoEh +EOcKjvbdUxhUZkPO +DncLKvbdVYhTzKoO +DnbjjvbdehKvRnQg +DnbkKvbdOhAXyAYa +DncLKvbdxsNiNRag +DoDLKvbdTppoVUgm +EObkKvbdURROuVIN +EOcLKvbdNsTugFVQ +DoCkKvbdrXPlChxq +EPDKjvbdHDkWJajK +DoCkKvbdxnTHxTIc +EPDKjvbdEvZPoljF +EPDKjvbdrzMQTBIO +EPCjjvbdqZPHgQcx +DoCkKvbdVqmxCFMD +DncLKvbdSPsgKGEX +DoCkKvbdzjVPodSt +DoDKjvbdnUtyjiqf +DnbjjvbdIBkydzAD +DoDKjvbdcTDKscjB +EOcKjvbdiHKDYuiu +DncKjvbdBraDUFvr +DoCjjvbdQmYCZOUz +EPCkKvbdySnIlqbH +DnbkKvbdkDLjqGuH +DnbjjvbdVqnYCFMD +DncLKvbdGKeTCglu +DncKjvbdlZSqrxft +DncLKvbdrEEhpNvB +EOcLKvbdrDeJQNvB +EPCkKvbdQmXbYmtz +DoCkKvbdQlxCYnUz +EPCjjvbdEObkLWbd +EPDLKvbdehKuqmqH +EPCkKvbdkCkjpfuH +DncKjvbdRXNcblHc +EPCjjvbdsrqrxydc +EPDKjvbdddoSBvcK +EPCjjvbdADRxJzIp +EPDLKvbdvAcxsPEh +EPDKjvbdSLYfUgLT +DoCkKvbdsrrTYyeD +DoCkKvbdLFegbApu +EPCjjvbdyqOliJwA +EPDKjvbdqTtGrRjt +EPCkKvbdhbObdvqR +EPCjjvbdcScLUEJa +DoDLKvbdRWnDblID +EObkKvbdZLrETnLm +DoDKjvbdiBoDEvpq +DoDKjvbdMpXqVmfs +EPCjjvbdpxngfpcx +DncKjvbdsCGNLfjy +DncKjvbdRjyGVHLT +EPDKjvbdkHflGFmk +DoDKjvbdlhdUQuSB +EPCjjvbdKaLGlbXq +EPCkKvbdVhXvXgYz +EOcLKvbdKyQirztf +EOcLKvbdliDsqVRa +DncKjvbdJutfDdfi +DoDKjvbdEXwksssl +DncLKvbdxxIjCPyk +EObkKvbdKaKgMaxR +EPDKjvbdkCkjpgUg +EOcLKvbdZLqctNlN +EPDKjvbdNddThhjd +EOcKjvbdYlSDsmlN +EPDLKvbdmgExNOGy +DoDKjvbdePErjstS +DnbkKvbdZQleIldq +DncKjvbdpssfrRkU +EOcKjvbdDxYMTtTl +EPCjjvbdySmhmSBg +EPDKjvbdiiehJlxS +EOcLKvbdFkFTDINV +EPCjjvbdVqmxCFMD +DncLKvbdIsZAsMwl +DncKjvbdBraDTfXS +EPDKjvbdmuUykJqf +DnbkKvbdFyVUaEXb +EObjjvbdzROmJJwA +DncKjvbdEYXlUUTl +EPDKjvbdBhjbKhfK +DoCjjvbdJpzEneme +DncLKvbdVwIwuceH +EPDKjvbdhfjDYuiu +EOcLKvbdFpASwHGZ +EPDKjvbdZoOJEdyj +DoDKjvbdqdEiPnWB +DoDKjvbdnBjXYPNu +DoCjjvbdiHKCxuiu +EOcKjvbdGLFTChMu +EOcKjvbdiMEdNtby +DnbkKvbdGdKujBij +DncKjvbdKQydneme +DnbkKvbdziuPocsU +DoDKjvbdmfdxNNgZ +EObjjvbdDxXlUTtM +EObjjvbddePSBwCj +EOcKjvbdNPxQvOHT +DnbkKvbdZHWdAOsJ +EPDLKvbdyqPNIiwA +DoCkKvbdpyPHfqDx +EPDLKvbdUslsekuj +EPCjjvbdiZtfLpnG +DoCkKvbdmSZVZsDi +EPCjjvbdpyOhGpcx +EPDLKvbdzitoodSt +DoDKjvbdVYhUZkOn +EObkKvbdBsAbtGWr +EPDKjvbdvBEYsOdh +EObkKvbdGcjuibKK +DncKjvbdeATqNYKG +DoCjjvbdKNAEZgVB +DncLKvbdqUUHSRjt +EOcLKvbdGcjuibJj +DoDLKvbdnBivxPOV +DnbkKvbdKCjDRKCx +DnbkKvbdrykosAgn +EOcKjvbdUaBqTRRy +EPCjjvbdcSbkTcjB +DoDLKvbdIxTbILpp +DoCjjvbdHDjuibJj +DncKjvbduaDxroFI +DoDKjvbdpedEtWBI +EOcKjvbdXsLaNTnx +EPCjjvbdYORAYVWU +DoCjjvbdYpleIleR +DoDKjvbdCDpAujMf +EPCkKvbdpxoHfpcx +DoCkKvbdUWMPisaR +EPCjjvbdmuUzKjSG +EPDKjvbdkxsRsYgU +EPCkKvbdZxcjNblS +DnbkKvbdbPffckzd +EPDKjvbdUVkpJtBR +DoCkKvbdvlvANEFN +EObkKvbdShyjRAAl +EPDKjvbdxrmhmSCH +DoDKjvbdjvXNcaww +EPDKjvbdkDLjqGuH +EObkKvbdhfibxuiu +EPCjjvbdlqyUyrci +EPDLKvbdFVxopMjF +EOcKjvbdqdEiPnWB +DncKjvbdrXPlChxq +DoCkKvbdxVMeRYkn +EPCjjvbdlhdUQtqa +EObjjvbdRotHKFcw +EObkKvbdwjvcgzzG +EPDLKvbdBhkBjiFj +EObjjvbdlZTSTZGt +DoCkKvbdkIHMFemk +EObjjvbddndrkTsr +DoDLKvbdFVxpQNKF +EPCjjvbdZsiJZETO +EObjjvbdiMFEOUby +DoCkKvbdhlFEOUby +EPCkKvbdrWolDIyR +EObjjvbdmajWwoOV +DoCkKvbdypoMiJwA +DoDKjvbdCDpAvKMf +EPDLKvbdzjVQQDrt +EObjjvbdjlakydfo +EObkKvbdJpyeOeme +DoDLKvbdiHJcYvJu +EOcLKvbdbsDKtEKB +EOcLKvbdrpWOjDVf +EObjjvbdelfWfmKL +EObjjvbdxnSgwriD +DnbkKvbdqlyjZLhJ +EPCkKvbdQdDBPqDr +EPCkKvbdRkYfUfjs +EObjjvbdhtydwSVC +DnbjjvbdWWhwvDdg +DoDLKvbdypnliKXA +DncLKvbdhfibxvKV +DncLKvbdxrmiNSCH +DncKjvbdUaBqSqRy +DoDKjvbdZMSDsmkm +DncLKvbdFjeScHmV +EPDLKvbdQYmAHSrK +DoCkKvbdUVlQJsaR +DoDKjvbdGKdsDHmV +EPCkKvbdkHgLfGNk +EPDKjvbdCIkCLJFj +DoCkKvbdrpWOicVf +DncLKvbdqmZiyMIJ +EObkKvbdNGcQMpUk +EOcLKvbdhfibxuiu +DoCjjvbdjcLjqHVH +EPDLKvbdZxdJnDMS +DncLKvbdHDkViajK +EPDKjvbdhytelRNf +EPDKjvbdZRNFIleR +EObjjvbdNQYRWNgT +EPCjjvbdNdcsiIkE +DoCkKvbdajkfOnDA +EPCjjvbdRNYCZOUz +EPCkKvbdBcpAvKNG +DncKjvbdqTsfqrLU +EPCjjvbdsZlQSaHn +EOcKjvbdqdFIpNvB +DoCjjvbdtbcUwWPP +EObjjvbdEYYMTtTl +EOcLKvbdgGLzNfgA +DoDLKvbdzdynzeZp +DnbjjvbdajlGPNcA +EPCjjvbdEJhJuxKA +EPCjjvbdLLBIWAJy +DnbkKvbdwzIFewdr +DoCkKvbdBvzciEpW +DoDKjvbdaNKasVNH +EPDLKvbdVviXudEg +EPDKjvbdcbSmSAUN +EPDKjvbdqcdiQNua +EPCkKvbdbBVdfPpX +EOcLKvbdrEFIpOVa +DoDKjvbdDigivXjA +DoDKjvbdYSlBMtPY +DoDKjvbdrRtjnLAm +DoDKjvbdKeegbApu +DnbkKvbdHgHZyXxH +EPCkKvbddwzUTrFz +DnbjjvbduDCtwWPP +EOcLKvbdaRfDHsfL +EPCjjvbddeOqbWbj +DncLKvbdOFDsiJLE +EObkKvbdSBceMIyL +EOcLKvbdrylQSaIO +DncLKvbdJcJcQjCx +EPCkKvbdaRfCgsek +EOcKjvbdzitoocsU +DoDKjvbdyzdnSIJI +EObkKvbddndsLTsr +DoDLKvbdcTDKtEKB +EPCkKvbddZyQYYpb +EPDLKvbdCIjakJFj +DncLKvbdLrWlzVQz +EOcKjvbdxrnIlqag +DncLKvbddeOrCWcK +DoCkKvbdRaceLiZL +EPCkKvbddePSCXCj +DoDKjvbdJpzFOeme +DoCkKvbdiMFEOUby +DncKjvbdUQqPVVHm +EOcLKvbdcSbjscjB +DnbjjvbdvPTzpjoU +EPDKjvbdEPDLKvbd +DncKjvbdvBEYsPEh +DnbjjvbdIxTbIMQp +DoDLKvbdZLrETnMN +EPCkKvbdZxdJmbkr +EPCjjvbdIidAKQHE +DncKjvbdrSUjmjaN +DnbkKvbdkaNOmALA +DnbkKvbdiGjCyViu +EPCjjvbdYkrDsmlN +EOcKjvbdypoMhjXA +DoCkKvbdiGjDZViu +DoDLKvbdZxcinClS +DoCjjvbdqUUGrSLU +DnbkKvbdYTLaNUPY +EObkKvbdehKurNpg +EOcKjvbdmRyVZrdJ +EObkKvbdZirhPgBf +EOcKjvbdpyOggQcx +DnbkKvbdfoazwEXh +DnbkKvbdmuUzLJqf +EPDLKvbdYlRdUOLm +DncKjvbdRjyFuGjs +DoDLKvbdQdDAopdS +DoCkKvbdmSYtysEJ +EObjjvbdQdDApRDr +DoDKjvbdyOTHxShc +EPDKjvbdptUHSRkU +EOcKjvbdLGGHaaRV +EOcLKvbdaaWFFopX +DoCjjvbdlBMnmALA +DnbjjvbdZnnIdeZj +DoCjjvbdZMRdUNkm +DoDLKvbdRMxByNtz +EPCkKvbdJYTahMRQ +DncLKvbdpyPIHQdY +DoCkKvbdVBCRTRRy +EOcLKvbdZyEKODLr +EObkKvbdRadEkiYk +EOcKjvbdcyyQXyRC +DnbkKvbdVqnXadkc +EPCkKvbdGKeTDIMu +DnbkKvbdrRtjnKaN +EObkKvbdFVxooljF +DoDKjvbdDoCjjvcE +DnbkKvbddneTLTsr +EPDKjvbdGcjvKCKK +EObjjvbdgPazvdYI +DoDKjvbdSLYfVHKs +DoCkKvbdEPCjkWbd +DnbjjvbdmaivxPOV +EObjjvbdJJdAJogE +DoDKjvbdhkddNtby +DoCkKvbdiCPDEwQq +EOcKjvbdmajXYOmu +DnbkKvbdqYngfqEY +EOcKjvbdTppoUuIN +EPDKjvbdNddThhkE +DncKjvbdDnbkKvbd +DnbjjvbdZRNEiNFR +EPCjjvbdaaWFFopX +EPDLKvbdBhjbKhej +DoCkKvbdfpBzvcwh +DoDKjvbdmSZVZrdJ +EObkKvbdbAueGQQX +EOcKjvbdNQXqWOGs +EPCjjvbdvAcySndh +EOcLKvbdySnImRag +EObkKvbdSxLLmzkY +DnbjjvbdcJMjLGXY +EObkKvbdBsBDUFwS +DoCjjvbdqlyjZLhJ +EPCjjvbdliEURVRa +DoDKjvbdptTgRrLU +DncKjvbdiBoCdwQq +EOcKjvbdEOcLLXDE +EObjjvbdEYYLtTsl +EPDKjvbdVTmTekuj +DncLKvbdLFegbBQu +EPCjjvbdmttzLKRf +EPDLKvbdpfEFTuaI +DncKjvbdiiegjMwr +EObkKvbdxVNEqYlO +DoCjjvbdRWnDblHc +EPCjjvbdaSFbgtGL +DnbkKvbdozmcjwoA +DoDKjvbdPyNAHSrK +DncLKvbdVqnXbEkc +EPCkKvbdFWYpQNJe +EOcLKvbdlYsRsZHU +EOcLKvbdQvmcblID +EObjjvbdRkYetfkT +DoCjjvbdFjdsDINV +EPCjjvbdrafNMGkZ +EPDKjvbdczZQXxqC +EPDLKvbdDwxLtTsl +DoCjjvbdFpASvffZ +DoCjjvbdiMEdOVCy +DoCkKvbdelevfljL +DnbjjvbdaSFcHtFk +DncKjvbdBhkBkIfK +EObjjvbdGKdsDHmV +DncLKvbdhzUekqOG +EOcLKvbdZshiZDrn +DncLKvbdDjIJuwjA +EPCjjvbdpxoHfqEY +EPCjjvbdOAIrsjSA +EPDLKvbdEuyPolie +EPDKjvbdssRrxydc +EPDKjvbdjlakzEgP +DncKjvbdiUydwRuC +DoCkKvbdZMSDtNkm +EPDLKvbdbBVeGQPw +EObkKvbdNHDPlpVL +DoDLKvbdDjHiuxKA +EPDKjvbdatbGwkUI +DnbjjvbdeqaWzkbo +DoDKjvbdvvlBWAuu +EObjjvbdZirhQHBf +EPCkKvbdDncLKvcE +DnbjjvbdehKvSNpg +DncKjvbdVwIwudFH +DoCjjvbdNQYRVmgT +EOcKjvbdNrtWGeUp +DncKjvbdvvlAvAuu +DnbkKvbdjKGHimXr +EObjjvbdhkddNuDZ +EPCkKvbdNddThhkE +EPCjjvbdsPunjDVf +EPDKjvbdxZgfFwdr +DncKjvbdZyDjNblS +EPDKjvbdjcMLQfuH +DncKjvbdwtmFRZMO +DncKjvbdVhXuwgYz +DoCkKvbdVZITyjnn +EPCkKvbdNrtWHEtp +EPCjjvbdMfbomQUk +EObkKvbddwyssqez +EPCkKvbdhfjCyVjV +DoDKjvbdtvOYJpsA +DoDKjvbdiLdcnVCy +EObkKvbdLrWlzUpz +DoCkKvbdSPsgKFdX +EPCjjvbdkNCLyeGo +DncKjvbdCSaCtGWr +DnbjjvbdRkZFtgLT +DoCkKvbdVAaprprZ +DnbjjvbdyXhibQZk +DoCkKvbdsQVnibvG +EPCjjvbduaDyTPFI +DncLKvbdUaCRSpqy +DoDLKvbdnPzYukZC +DoDKjvbdRWnDcMHc +EOcKjvbdxVNFRZLn +EOcKjvbdRkZGUfkT +DnbkKvbdvmWAMdEm +EOcKjvbdmbKXYOmu +EPCkKvbdyXiKCPyk +DnbkKvbdkHgMFfOL +DncKjvbdVYgtZkPO +EPCkKvbdDnbkKwCd +EObkKvbdKfGHaaRV +EPCkKvbdqZOggQdY +EOcLKvbdTlVnaVoJ +DoCkKvbdhanbeWqR +DnbkKvbdypoMiJwA +DnbkKvbduMXvaUBX +DoDKjvbddiirWUzn +EObkKvbdqYoHgQcx +DnbjjvbdFyUuBDwb +DoCkKvbdKCicQjDY +EPDLKvbdezvYeJTw +EPCjjvbdSxKlNzkY +DoDKjvbdQmYByOUz +DnbjjvbdIGgZxxXg +EPDKjvbdqmZjZLgi +DncKjvbdmfeYMmgZ +DncLKvbdGdLVibKK +DoCkKvbdZGvdAOsJ +EObkKvbdjSzhrkJz +EPDLKvbddePRbWcK +EObjjvbdDxXkstUM +DoCjjvbdvlvANDeN +EOcKjvbdrDdiQOWB +DoCkKvbdmajXXoOV +DncKjvbdUtMsekvK +EOcLKvbdxxJKBoyk +EPDKjvbdqYnhGpcx +EObjjvbdatafwkTh +DncLKvbdajkenmcA +DnbjjvbdZQleImEq +EPCjjvbdDncLKwCd +EObjjvbdHELWKBij +EPDLKvbdxrmhmRag +DoCjjvbdwXMBWBVu +EObjjvbdsPvOjCvG +EOcLKvbdssSTZZdc +EPCkKvbddndrkUUS +EOcLKvbdNGbolotk +EObjjvbdZMSDtNlN +EObkKvbdZshiYcsO +DncKjvbdDwxLsstM +EOcLKvbdqZPIGqEY +EOcKjvbdZRNFImFR +EOcKjvbdrDeIonVa +DnbjjvbdYzberKWZ +EObjjvbdegjvRnQg +DoCkKvbduDDUwWOo +EPDKjvbdRotGjGEX +EOcKjvbdKQyeOeme +EPCjjvbdDwxMTtUM +EObjjvbdpedFTvAh +EPDLKvbdFxtuBDxC +DoCjjvbdlqxtzSdJ +DncKjvbdZLrDtOMN +EPCkKvbdGdKujBjK +DoCkKvbdezvYdiTw +DnbjjvbdrEEiQOVa +DncKjvbdOYPVzdOU +DnbjjvbdxwiKCPzL +EObkKvbdRpTgJecw +DoCkKvbdwtmEpxlO +EPDKjvbdqFceTuaI +DncKjvbdsPuoJcWG +DncLKvbdRyjHsCvA +EPCkKvbdyXiJaoyk +EPDLKvbdJvVFcdgJ +DncLKvbdrXPlChxq +EObjjvbdvBEZTOdh +DoDKjvbdqvokcJYq +EOcKjvbdlqxtzSci +EPDKjvbdFkErbglu +DoDKjvbdEPDLKvcE +EObkKvbdijFhJlxS +DoCjjvbdOFDtJJKd +DnbkKvbdyXhiapZk +DncKjvbdEXwlTtTl +DncLKvbdZyEKOCkr +DnbkKvbdqlyjYlIJ +EObkKvbdIGfyxwxH +DnbjjvbdyNrgxTIc +DnbkKvbdeOeSkTsr +EPCjjvbddZyPxZRC +DncLKvbdkDMKpgUg +EPDKjvbdfIKuqnQg +EPCkKvbdhlFENuDZ +DoDLKvbdiBoCdvqR +EPCkKvbdySnImRag +DnbjjvbdIxTahLqQ +DoDKjvbdZnmhddyj +EOcKjvbdgQBzwEXh +EPDLKvbdfILWSNqH +DncKjvbdjcMKqGtg +EObkKvbdKQzEnfNe +EPDKjvbdUQqPVVHm +EObjjvbdREDBPpcr +EObjjvbdnHExMnGy +DnbkKvbdvBDxrndh +DncKjvbdCEPaVimG +DnbkKvbdGBPQxizm +EPDKjvbdLqwMzVQz +DnbkKvbdEPDLLXDE +EPDKjvbdwWkaWBVu +EObkKvbdxrnImSCH +DncKjvbdsrqrxzEc +DnbkKvbdpfDeUWAh +EPDKjvbdjAQHApGj +DoCkKvbdaSGChTfL +DoDKjvbdiHJbxvKV +EPDLKvbdlhdURUqa +EPCjjvbdIwsahMRQ +EObjjvbdGYtuBEYC +DncLKvbdNeEThhkE +EObkKvbdBvzdIePv +EPCjjvbdbAueFpQX +EOcLKvbdjAQGaQGj +EPCjjvbdNHDQNPuL +DncLKvbddoFSkUUS +DncKjvbdACqxJzIp +DnbkKvbdxLWcgzyf +EPCkKvbdTlVnaWPJ +DoCkKvbdCJKbLIfK +DoCkKvbdDwxMUTtM +EPCkKvbdEPDLKwDE +EOcLKvbdTvMQKTaR +EOcLKvbdeXytTrFz +EPDKjvbdNUrrLNAX +DnbkKvbdZjShPgBf +EObjjvbdjAPfaQGj +EPCkKvbdYlRdUNlN +EPDKjvbdzjUoocsU +DoDLKvbdKDKCqJbx +EPCjjvbdQvnECkhD +DnbkKvbdGckVjBij +EObjjvbdXmqAXuVt +EPCjjvbdeFPRavcK +DoDKjvbdEYXlUTsl +DoCjjvbdXrlBNToY +DoDLKvbdrRuLNkAm +DncLKvbdDxXlUTtM +EOcKjvbdwuNEqZLn +EPDKjvbdEOcLLWbd +DoCkKvbdpfDdtVaI +EOcKjvbdmpZyVjyC +EOcKjvbdtSrSxzFD +EObkKvbdsBemLfjy +DoCjjvbdUGznMWue +DncLKvbdbAvEfPpX +DnbjjvbduCcUwVno +DoDLKvbdTppoUuIN +DncKjvbdYqMeImEq +DoCkKvbdrDdhomvB +EObjjvbdgFkzOGgA +EPDKjvbdSwjkmzjx +DoCjjvbdREDBPpcr +EObjjvbdYkrDtNlN +EObjjvbdZisHogCG +DncKjvbdUtMselWK +DoDKjvbdkHfkeemk +DncLKvbdSLYeuHLT +EOcLKvbdeFOrBwCj +EObjjvbdHDjvKCJj +DnbkKvbdkIGkeemk +DoCkKvbdZQmFJMeR +DoCkKvbdqTtGrSKt +DncLKvbdcIljKfWx +DnbjjvbdRjxfUgKs +DnbkKvbdhyuFlROG +EObkKvbdpxoHfpdY +DoDKjvbdhuZdwRtb +DnbkKvbdBdQAvKMf +DoCkKvbdVTlsekuj +EObkKvbdCJLBkIfK +EOcKjvbdmgFYNNgZ +EPDLKvbdxrnImRag +DoCjjvbdbKlGPODA +DoCjjvbdMoxRVmgT +EPDLKvbdKfGIBaRV +DoDKjvbdSCEElJZL +EPCkKvbdmRxtzSdJ +EPDKjvbdjKGIKNXr +DnbkKvbdlhdTptrB +EPDKjvbdBcoaVilf +EPDKjvbdRzKIScWA +EOcKjvbdnHFXmOGy +EPCjjvbdFfJrNhtR +DnbkKvbdzaAPHHCM +DnbkKvbdwXLaWBWV +DoDKjvbdKeegaaQu +EPCjjvbdRotHKFcw +EOcKjvbdnGeXmOGy +DoCjjvbdmIdTqVRa +DncLKvbdfNGWgMik +EPCkKvbdrovPJbuf +EObkKvbdEvYpPljF +DncLKvbdOYPVzdOU +EObjjvbdrzLosAhO +DnbjjvbdyzdnSIJI +EOcLKvbdIsZArmYM +DoDLKvbdvAdZTPEh +DoCkKvbdQvnDcMHc +EObjjvbduMYWaUBX +DncKjvbdUyHszLOn +EPCkKvbdbrbjscia +EObjjvbdTkunaVni +EObkKvbdeATpmYKG +EOcKjvbdqUTfqrLU +EPDLKvbdGYttaDxC +EPDKjvbdRNYByNtz +DncLKvbdADRwizJQ +DncLKvbdKfFgaaQu +EPDKjvbdxZhGGYFS +DncLKvbdwtmFRYlO +EOcLKvbdehLVrNqH +DnbkKvbdKxpirztf +DoCjjvbdZxdKNcLr +DoDLKvbdrbFmMGjy +DoDLKvbdqYnhHQcx +EPCjjvbdGKeTDIMu +EPCjjvbdZRNEhleR +DnbkKvbdfMfXGmJk +DnbjjvbdRjyGVHKs +EPDKjvbdZHXEAOri +EObjjvbdxnTIYTIc +DnbjjvbdTpqOttgm +EOcLKvbdWXIwuceH +EOcLKvbdzROmJKXA +EPCkKvbduCbtwWOo +DncLKvbdJTZBTMwl +EObkKvbdlqyUysDi +DnbjjvbdrpVoJcWG +DoCjjvbdHDjvKCKK +EObkKvbdVwJXvDeH +EPDKjvbdZsiJZDrn +DoCkKvbdhfjDYvJu +DoDLKvbdZyEJmcLr +DnbjjvbdmajXXoOV +DoCkKvbdelewGmKL +DoDLKvbdUtMsfMVj +EOcKjvbdegjuqmpg +DnbkKvbdZMRctNkm +DncKjvbdhlEdOUcZ +DoDLKvbdqAiFAXIE +EObjjvbddBsMrAUN +EPDKjvbdaSGDHtGL +DnbjjvbdbVCGwjtI +DncLKvbdzdzOzeZp +EPDKjvbdKQyePFnF +EPDLKvbdauBgXjtI +EPDLKvbdCSaCtGWr +DnbkKvbdbsCjtEKB +DoDKjvbdCWzdIeQW +EPCkKvbdRbDeLhxk +EObjjvbdOEctJIkE +DoCkKvbdSPtGiedX +DncKjvbddZyPxZRC +DnbjjvbdTukpKUBR +DoCjjvbdpstHRqkU +DncKjvbdNdctIhjd +EOcKjvbdUWMPjTaR +DoCkKvbdLGGHbApu +EObjjvbdmozZWLZC +EObjjvbdULvPAvOi +EPDLKvbdcJMikFvx +DncLKvbdjJfHjMxS +EPCjjvbdqYoIHREY +DoCjjvbdiifHjNXr +EObkKvbdZLrETnMN +DnbkKvbdtSqsYydc +EPDLKvbdCIkCLJFj +DoCkKvbdliDsqUrB +DnbkKvbdNPxQumgT +EPDKjvbdACrYJyiQ +EOcLKvbdYTMBMtOx +DoDLKvbdNGcQNPtk +DncKjvbdtbbtvuno +DncKjvbdZLrEUNlN +DoCkKvbdaogHELzd +DoCjjvbdgFlZmfgA +EPCjjvbdvPTzpkOt +DoCjjvbdjKGHjMxS +EPDLKvbdauBgXjsh +EOcLKvbdiBoCeWpq +EObkKvbdSPsfjGEX +DnbkKvbdzGxlAMeX +DoDLKvbdqFcdtWAh +EPCkKvbdOYOuzcmt +DoCjjvbdDwxLtUTl +DnbkKvbdOTUVgFUp +DnbkKvbdiGibyWJu +EPCjjvbdUyITzLOn +DoCkKvbdbLMFnnDA +DoCjjvbdDwxLsssl +DncLKvbdBiLBjhfK +EPDKjvbdNPwpvOGs +EObkKvbdzQnliKXA +DoCjjvbdeYZssqez +DoCjjvbdeATplxKG +EOcLKvbdRyjIScWA +EPDKjvbddeOqbWcK +EPDLKvbdACrXjZhp +DnbjjvbdmuVZkKSG +EPDKjvbdVqmwbFLc +EPCkKvbdCSaCtFwS +DnbjjvbdVZHszLPO +DoDKjvbdVrNxCFLc +EOcKjvbdegjuqnQg +EPCjjvbdZMSETmlN +EOcKjvbdHDjvKBjK +EPCkKvbdyOTIXsJD +DoDKjvbdnQZyWKxb +DncLKvbdxwhiaozL +DncLKvbdNdcshhkE +EPCjjvbdXnRAYUut +DoDLKvbdNsUWGeUp +DncKjvbdWHwuwfxz +DnbkKvbdRpUGifEX +DnbjjvbdEOcLKwCd +EPDKjvbduaEYsOeI +DnbkKvbdjhHLfFnL +DncLKvbdZoOJEeZj +EPCkKvbdEPCjjvcE +EObjjvbdxUldqYkn +EObkKvbdOEdThiLE +DnbkKvbdjcMKpgVH +EObjjvbdkIGkeenL +DncKjvbdZsiJZDrn +EPCkKvbdxnShXsIc +DoDKjvbdZnmiEdzK +DoCkKvbdVTmUGLvK +EOcLKvbduCcVXVno +EObjjvbdZQleJNFR +EObjjvbdFejRmhsq +EPDLKvbdaMkBruNH +DoCkKvbdNQXqWNgT +DoDKjvbdjuwNcbXw +EPCjjvbdSBceLiYk +DoCjjvbdMgColpVL +DoDLKvbdVZHtZkPO +DoDKjvbduMYXBUAw +EPDKjvbdNeDshiKd +DoDKjvbdTAFJICPE +EObjjvbdJvVFceGi +EObjjvbdNHCpMpUk +DnbkKvbdijGIKNYS +DoDLKvbdDncKkXCd +DncKjvbdkMakyeGo +EObkKvbdjKFgilwr +DoCkKvbdOhAXyAZB +DoCkKvbdUGznMWvF +EOcKjvbdRosfifEX +EPDLKvbdfNFvgMjL +EObkKvbdxxJJbPzL +EPCjjvbdQlxCYmtz +EOcLKvbdgPazwEXh +DoDLKvbdkySrTYft +DoDLKvbdhgKDYuiu +DoDKjvbdYkrETmkm +EObjjvbdNPwpunHT +EOcLKvbdYlRdUNlN +DnbkKvbdZLrDtOLm +EObjjvbdxrnJMrCH +EObjjvbdZnnIeFZj +DoCjjvbdzRPMhiwA +DncKjvbdssSSxyeD +EOcLKvbdjAPgAofj +DncKjvbdRosfifEX +DoDKjvbdEXwktUTl +DnbjjvbdWRmwadkc +EPDLKvbdeEoRavbj +DoDKjvbdXsMBNToY +DnbkKvbdVqmxCFLc +EOcKjvbdkVwOEBww +DoCjjvbdfNGXGmJk +EOcLKvbdmtuZjiqf +DoCkKvbdnPyyWKyC +EObjjvbdJpydoGNe +DnbkKvbdjJfHimYS +DoCkKvbdyXhjBozL +DoCjjvbdkIHLeenL +EOcLKvbdTAEiIBoE +DnbkKvbdvBDxsPFI +DncKjvbdlhdTpuRa +EObjjvbdFfJqmiUR +EPCjjvbderAvzkbo +DncLKvbdwygeexEr +EObjjvbdSBdElJZL +EOcKjvbdySmiMrBg +EPDKjvbdatbGwkTh +DncKjvbdnBivwnmu +EPDKjvbdFxuVAdYC +EPDLKvbdqlzJyMHi +EPDKjvbdZRMdhldq +DoCjjvbdNeDtIhkE +DoCkKvbdfMewGlik +EOcLKvbdhaoDEwQq +DnbjjvbdIwsagkqQ +DncKjvbdkIHMGFnL +DoDLKvbdGdKuibKK +DnbjjvbdTAEiICOd +DncLKvbdNeEThiKd +EObkKvbdYpmEiNFR +EPDLKvbdFkFTDHlu +DoCkKvbdkDLkRHUg +DnbkKvbdyYIjCPyk +DncLKvbdFVyQPmKF +DnbjjvbdZQldhldq +DoDKjvbdVqnYBdkc +EPDKjvbdSKxeuGkT +EPCjjvbdiZuGLqNf +DnbjjvbdJTZArmXl +DnbkKvbdyNrgwrhc +EOcLKvbdrNZiyLgi +DncKjvbdSBdFMJZL +EPCkKvbdfMfWfmKL +EPDLKvbdfMevfljL +DoCjjvbdmIcsqVRa +DoDLKvbdrEEhpOVa +EPDLKvbdZRMeImEq +DoDLKvbdyTNiMrBg +EPCjjvbdsQVnibvG +EOcKjvbdvBDxsPFI +DoDKjvbdqquKnKaN +DncLKvbdqGDeTuaI +EPCkKvbdZdxGzgiC +DoDKjvbdkDLkQftg +DoDKjvbdePEsKtUS +DoDKjvbdUxgtZjoO +DncLKvbdxUmFRYlO +DnbjjvbdwuMeRYkn +DoCkKvbdRWmdClID +EPDLKvbdCDpBWJlf +DncKjvbduaEYrneI +DnbjjvbdfHkVqmpg +EPDKjvbdKxpirzuG +DoDLKvbdZLqdUNkm +DoDLKvbdDwxMTstM +EOcKjvbdrzLosAhO +DnbjjvbdqZPHgQdY +EObkKvbdjggMFfNk +EPCjjvbdZMRcsmkm +EObjjvbdEJgiuxKA +DncLKvbdZtJJZDsO +EObkKvbdRjxeuGkT +DncKjvbdqdFJPmua +DoCkKvbdGYtuAcxC +DoCjjvbdZnmheEzK +DoCkKvbdKWUfEFGi +DoCkKvbdfMfXGmKL +DnbjjvbdjvWmcbXw +DnbkKvbdyzeORhJI +EPDLKvbdpstHRqjt +DoDKjvbdTukpKUAq +DoDKjvbdSPtGjFcw +DncKjvbdWSNxCFMD +DnbkKvbdjlalZdgP +EOcLKvbdkxsRsYgU +EObjjvbdLFfICApu +DoDKjvbdCEQBWKMf +DoDKjvbdbAvFFpQX +DoCkKvbdhgKCxvKV +DncLKvbdjcMLQgVH +EPCkKvbdzitpQDrt +EOcKjvbdNVTRjmAX +EPDKjvbdkxsRsZHU +DoDKjvbdKDJcRKCx +EPDKjvbdFjeScHmV +EPCkKvbdZjTIQHBf +DnbkKvbdlqyUyrdJ +DoDKjvbdehKurORH +EObjjvbdbKlFoODA +DoCkKvbdwtmFQyMO +DoCjjvbdXnRAYUut +DoDKjvbdxsOIlqbH +DncLKvbdyNsIXrhc +DoDLKvbdCEQAvKNG +DncKjvbdRotHJedX +EPDLKvbdVZHsyjoO +DnbjjvbdkCkkRHVH +DoDKjvbdRWmcblHc +DncLKvbdqvokbiYq +DoDLKvbdRkZGVHLT +EObjjvbduCbuXVno +DoCkKvbdEJgivYKA +DoDKjvbdkWWnDbYX +EPDKjvbdnGdxMmfy +DoDLKvbdIHGzYxYH +DoDKjvbduCbtwVno +EObkKvbdqlyjYkgi +EObjjvbdVwIwudEg +DnbjjvbdfRaWzkcP +EPCkKvbdEARhlzXX +DnbkKvbdfMevfmJk +DncLKvbdZyDjNcLr +EOcKjvbdtAHQhABS +DncKjvbdkClKqGtg +DoCkKvbdEObkLXCd +EObjjvbdFkFTDINV +EOcKjvbdEztQdkcJ +DoCkKvbdKaLHNBxR +EPDLKvbdhaoCdvqR +EObkKvbdrJAJdmOe +EObjjvbdrpVnjCuf +EPCkKvbdFjeTCglu +DoCjjvbdqdEiPnWB +EPDKjvbdGFirOJUR +EPCkKvbdJmADzHUa +EPCjjvbdWWhwucdg +DncLKvbdBhkBjiFj +DoCkKvbdSZihSbvA +DncKjvbdZtIiZETO +EPDLKvbdCTAcUGXS +DoDKjvbdVqmxCFLc +DncLKvbdmajWwoOV +EPDKjvbdVhYVxHYz +DoDLKvbddoFSjtTr +DoDLKvbdrzMQTAgn +DoCjjvbdUVlPjUBR +EPDLKvbdtvOXipsA +DoCjjvbdrouoKCvG +EObkKvbdOSsufdtp +EPDLKvbdIGfzZXxH +EObkKvbdbQGgDkzd +DoCkKvbdOFDtJIkE +EPCjjvbdiHJbyWJu +DnbjjvbdLAkHMaxR +EPCkKvbdJTZBTMwl +DncLKvbdSQTfjGEX +EOcLKvbdlrZVZrci +EObjjvbdkyTSTZHU +EPCjjvbdxUleQxkn +EPDLKvbdEKIKWYKA +DoCkKvbdZHWdAPSi +EPDLKvbdxVNFRZMO +EPDLKvbdcSbkTcjB +DoCkKvbdlYsSTZGt +EPDKjvbduaDxroFI +EObkKvbdNHDQMouL +DoDLKvbdxrnJMqbH +DnbjjvbdmfeXmOGy +DoDKjvbdidkGtoAO +DnbjjvbdGYtuBEXb +DnbjjvbdRECaQQdS +DoCkKvbdmajXXnnV +DncKjvbdZMSEUNlN +EPCkKvbdZtJIxcrn +DncLKvbdJpydneme +DncKjvbdVviYWEEg +DoDLKvbdyXhjBoyk +DoCjjvbdbhlikGXY +DnbkKvbdVviXudFH +EPCkKvbdYTMAlsnx +EPCjjvbdxZhFeweS +DoCjjvbdyNsIXriD +DoDKjvbdznoqEcMY +DnbjjvbdauCHXjtI +DncKjvbdIsZAsMwl +EPCkKvbdZMSDtOLm +DnbkKvbdJqZePFme +EPDKjvbdkHfkeenL +DoDLKvbdaNLCStmH +DncLKvbdIwsbHkqQ +EObkKvbdfHjvRnRH +EPCjjvbdlqyVZsDi +EObkKvbdEuxoolie +DoDKjvbdjAPgAofj +EOcLKvbdjcMLRHVH +DncKjvbdjKFgjNXr +EPCkKvbdmIctQuRa +DncLKvbdJpyePGOF +DncLKvbdNGbpMouL +EObkKvbdpfDdsuaI +EPCjjvbdyzeORhIh +DoDKjvbdrDdhpNua +DoCjjvbdFfKRmhtR +EPDLKvbdpfEEsuaI +EPDLKvbdqcdhpOVa +EPCjjvbdVYgsykPO +DoDLKvbdDncLLXCd +EObkKvbduaEYroEh +EOcLKvbdkNBlZeHP +EObjjvbdGcjvJajK +DncLKvbdrpVoJbuf +EObjjvbdEKIJuxKA +DncKjvbdZxcjODMS +DncLKvbdmgFXmOGy +DoCkKvbdUMVoAuoJ +DoDKjvbdqcdiQNua +DnbkKvbdbrcKtDia +DnbkKvbdKfFgbApu +DncKjvbdezvZEiTw +DnbkKvbdlqxtzSdJ +DoCjjvbdOTUWGeUp +EPCkKvbdJXtBhMQp +EOcLKvbdOAJTTjSA +EOcKjvbdfILVrNpg +EOcLKvbdnQZxvLZC +EPDKjvbdyYJJaoyk +DnbjjvbdkMakzFHP +DnbjjvbdjbkjpfuH +DoCkKvbdgGLymfgA +DoDLKvbdJYUBhLpp +EPCjjvbdJSyBTMxM +DnbjjvbdyTNiMrBg +DnbkKvbdqYoHfpdY +EOcKjvbdZyEKNcLr +DoCkKvbdZtIiYcsO +EPCkKvbdZQmFJNFR +DncKjvbdSPsgKFdX +DoCjjvbdvwMAuaWV +EPDKjvbdHfgZxxYH +EObkKvbdrSUjnKaN +DnbjjvbdKWVGEFGi +DncKjvbdsPvOjDWG +EPDKjvbdhzVFkqOG +DoDKjvbdssSSyZdc +DoDKjvbdYkqcsmlN +EPCjjvbdYpldiNFR +DncLKvbdemFwGlik +DoDLKvbdjuvmdBxX +DoDKjvbdCTBDTewS +DoCkKvbdKeehBaQu +EObkKvbdwyhFexEr +DoDKjvbdQvmccMID +DoDKjvbdVviYVceH +EPCkKvbdmRxtyrdJ +EPDLKvbdYqMeJNFR +EPCkKvbdRbDeMIxk +EPCkKvbdcJMjKfXY +DnbkKvbdVwIwvDdg +DnbjjvbdIwtCHkpp +DncLKvbdczYpYYqC +EPCkKvbdKaLGmBxR +DncKjvbduLwwAsaX +DncLKvbdssRrxzEc +EObjjvbdrXQMCiZR +DnbkKvbdZRNFImFR +EOcKjvbdACqwjZhp +DnbjjvbdbKlGOmcA +EObjjvbdGFirOJUR +EPDLKvbdqvokbiYq +EOcKjvbdJmAEZgUa +DoCkKvbdbhljKevx +EPCjjvbdbKlGPNcA +EOcKjvbdRMxByOUz +EOcKjvbdbsDLUEJa +EPCkKvbdRacdlJZL +EObkKvbdmuUyjjSG +EObkKvbdjKFgjNXr +DoDLKvbdlhctQuRa +DoCkKvbdjKFhKMxS +EObjjvbdpedEtVaI +EOcKjvbdIwtBhLpp +DnbjjvbdZHWdAPSi +EOcLKvbdiLdcmuCy +EOcLKvbdjcMLRGuH +EPCjjvbdRbDdkiZL +EOcKjvbdiHJbxvKV +EOcLKvbdaSGDHsfL +DoCkKvbdjKFhJlwr +DncKjvbdiBoCeWqR +EOcLKvbdegjvSNpg +EOcLKvbdrbGMlHLZ +DnbjjvbdBraDUGXS +DncLKvbdFeirOIsq +EPDLKvbdhytekpmf +EOcKjvbdIsYaTMwl +DnbkKvbdrSVLOKaN +DoCkKvbdTIyjRABM +EOcLKvbdsBfNMGkZ +EPDLKvbdUtNTfMWK +EObkKvbdRjxeuGjs +EObkKvbdTqQnuVIN +EObjjvbdhuZdwRuC +EOcLKvbdqTtHSSKt +DncKjvbdmpZxvLZC +DoDLKvbdlAloNALA +EPDKjvbdiLddOUby +EPDLKvbdwuMdpxlO +DncKjvbdNrsvHEuQ +EPCkKvbdyOSgxTJD +EOcLKvbdIryArlxM +EPDLKvbdZHXEAPSi +EPCjjvbdSCDdlIxk +EOcKjvbdySnJNSCH +DnbjjvbdijGIKNXr +EPDKjvbdVAaqTRSZ +EObjjvbdkxsSSxft +EPCkKvbdnUtzKiqf +EPCkKvbdlqxuZsEJ +EObjjvbdEXxMUUUM +EPCkKvbdLFfIBaQu +DnbjjvbdrRtkNjaN +DoCjjvbdNHCpMpUk +EPDKjvbdZjTIQGaf +EPCkKvbdHELWJbKK +DoDKjvbdJbibpjCx +DnbjjvbdJSyArmYM +EPCjjvbdfNFwGmJk +EOcLKvbdYTMBMsnx +DoDLKvbdyTOJMqbH +EObjjvbdEPDLLXDE +DncLKvbdkyTSTZGt +EObjjvbdGBPRYizm +DoCkKvbdVviXvDeH +DncKjvbdsQWOicVf +DoCkKvbdfHjvSNqH +DncKjvbdlZTSSxft +DncKjvbdFVyPolie +EPCjjvbdRXODblID +DoCjjvbdlhcsqVSB +DncLKvbdqYnhGqDx +EObjjvbdFeiqmiUR +DnbjjvbdKefHaaQu +DoDKjvbdRNXbYmtz +EOcKjvbdNwnuzcmt +DoDLKvbdXFxytAPT +EPDLKvbdOTUVfdtp +DoCjjvbdraelkfkZ +DncKjvbdXsMAltPY +DoDKjvbdVUMsfLuj +EPDLKvbdZisIPfbG +EPDKjvbddZxpYYqC +DnbkKvbdzjUopESt +DnbkKvbdVUMtGMVj +DncLKvbduCbtwWOo +EObkKvbdaaVeFpPw +DncKjvbdKNADzGta +DncKjvbdeEoSCXCj +EObjjvbdhancEvqR +EObkKvbdKCicQibx +DncLKvbdijGHjMwr +DoCkKvbdziuPpETU +DoCjjvbdiBnbeXRR +DoCkKvbdZQmEiMdq +EObkKvbdrMyjZMHi +EOcKjvbddoErkTtS +DoCkKvbdtkwvaUAw +EPDLKvbdTlVnaVoJ +DncKjvbdfHjurOQg +DoDLKvbdWWiXvEEg +EPCkKvbdqdEhpNua +EOcLKvbdYSkaMtPY +EPCkKvbdxmsHxTIc +DnbjjvbdJqZdnenF +EPDKjvbdWexzUAOs +EOcLKvbdrovPKCuf +DoDKjvbdkxsSSyGt +Dnbjjvbdzdynzdyp +EOcLKvbdHEKvJbJj +EObjjvbdOStWHEuQ +DnbjjvbdkyTRsZGt +DoCkKvbdcJNKKevx +DoDKjvbdSPtGifDw +EObkKvbdGdLVibKK +DnbjjvbdbBVdfPow +DncKjvbdhtyeXSVC +EPDLKvbdptTfrSLU +DncKjvbdjvXODaww +DncKjvbdqZOgfqDx +DncLKvbdTJZjRABM +EOcLKvbdTpqPVUhN +EOcKjvbdRWmdClID +DoCjjvbdqquLOLAm +DoCjjvbdFfJqmiUR +EOcKjvbddBsMrATm +EOcKjvbdYzcFrKVy +EPCjjvbdsZlQSaIO +EPCkKvbdkHfkeenL +EOcKjvbdiHJcYuiu +DoDKjvbdCEPaVilf +DoCjjvbddBrmSAUN +EPDLKvbdSPtGifDw +EOcLKvbdAMhYrvyx +DncLKvbdTIyjRAAl +EOcLKvbdZtIhyESn +DnbjjvbdVUNUFlWK +EOcKjvbdyXiJaoyk +EPCkKvbdDncLKvbd +EOcLKvbdKWVFcdgJ +EPDKjvbdnQZxvKyC +DncKjvbdjJehJlxS +DoDKjvbdRkYfVHKs +EPDLKvbdirzhsLJz +EObkKvbdVUMtFkuj +DnbjjvbdqwPkbiYq +EPCjjvbdIGfzZYXg +DoCkKvbdlYsRryGt +EObjjvbdpfDeUWBI +EOcKjvbdwtldpxkn +DoCkKvbdzitopETU +DoDKjvbdJuuGEEfi +DnbkKvbdnPzZVkZC +EOcKjvbdmfeYMnGy +EPDKjvbdkIGlGGNk +DncKjvbdezvZEhtX +EPDKjvbdqqtjmkAm +EPDLKvbdzRPNIiwA +DoCkKvbdGKeSbgmV +EPDLKvbdmJETqVSB +EPDKjvbdbVCGwkTh +DoCjjvbdBhkBkIej +EOcLKvbdbBWFFopX +DncLKvbdjggLfGOL +EPCkKvbdzQnmIiwA +EOcLKvbdhbPDFWpq +EPDLKvbdkClLQgVH +EObkKvbdrWpMChyR +DncKjvbdMfbpNPuL +DnbjjvbdNsUVfeVQ +EOcKjvbdaRfDHtFk +DoDKjvbdRbEFLhyL +EOcKjvbdmIcsqUqa +DncKjvbdFVyPpNJe +DoCjjvbdLAjgMaxR +EOcLKvbdypoNJKXA +DncLKvbdEztRFMCi +DoCkKvbduVmwiqTA +EObkKvbdUyHsykPO +DoCkKvbdhzUfLqNf +EPCjjvbdiUzEvqtb +EPDKjvbdpfDeTuaI +EPCkKvbdSwjkmzjx +DncLKvbdjKFgjMwr +EOcLKvbdRWnECkhD +EOcKjvbdZoOJFEyj +DnbkKvbdvvlAvAvV +DncKjvbdZLqcsmlN +DncKjvbdyqOliJwA +EPCkKvbdKWUedEfi +DoCkKvbdePEsLTtS +DnbkKvbdtcDVXVoP +EPCjjvbdKCjCpicY +EObkKvbdZdwfzhJC +EPDLKvbdBhjajiGK +EOcKjvbdJXsahMRQ +DoCkKvbdZxdKNcLr +EPDKjvbdnBjWwoOV +DncLKvbdapGgDkzd +EPDKjvbdjmCLzEgP +EPCkKvbdWRmwbFMD +DnbjjvbdBdQAujMf +EObkKvbdzjUpPcsU +DoDLKvbdwtmFQyMO +DoCkKvbdiMEcmtby +DncKjvbdSBcdkiYk +EPCkKvbdfSBWzkbo +EOcLKvbdxVMeRZLn +DnbjjvbdCSaDUGXS +DncKjvbdZtJIyETO +EPCkKvbdTkvOaVni +DnbkKvbdkySqsYft +EPCjjvbdxsOJMrCH +EPCjjvbdCWzdJEov +EPCjjvbdEARiMywX +EObkKvbdxsNiNSCH +DncLKvbdhbPDFWqR +EObkKvbdVUNUFlVj +EObjjvbdXrlBNToY +EOcLKvbdfHjvSOQg +EPCjjvbdwWkaWAuu +DncKjvbdbKlFnnDA +EPCkKvbdRkZFuGkT +EPCjjvbdMowpvNfs +DncLKvbdmtuZjjSG +DnbkKvbdiCPDEvqR +DncLKvbdbAudfPow +DnbjjvbdFjeSbhMu +DncKjvbdSQTfjGEX +EPDKjvbdbAueGQQX +DnbkKvbdjKGIJmXr +EOcKjvbdIryBTNYM +EPDLKvbdmgEwlnGy +EObjjvbdSBdEkhxk +DoCjjvbdfMfWgMjL +EPDLKvbdEObjjwCd +EObjjvbdhzUekqOG +EObjjvbdWSNwbElD +DoDKjvbdrNZjYkhJ +DoCkKvbdRkYfUgKs +EObjjvbdczYpYZRC +DoCkKvbdzoQQeDMY +DncKjvbdFxuVBEXb +DoDKjvbdSiZjRABM +DoDLKvbdYzbfRivZ +EPDLKvbdlqyUyrdJ +EOcLKvbdtbbuWvOo +DncKjvbdSKxfVGkT +DoCjjvbdEXxLtUTl +EOcLKvbdEPCjkWbd +EPDLKvbdEObkLXDE +EPCkKvbdxKvdHzzG +EPDKjvbdpfDdtVaI +DoCjjvbdbAueGPpX +DoCjjvbdZMRdUOLm +DoDLKvbdwtmFRYkn +DoCjjvbdNPwpumgT +DoCkKvbddijSWUzn +DoDKjvbdJXsbHkqQ +DnbjjvbdxZhFexEr +DoCjjvbdSQUHJedX +EPDLKvbdjmCMZdgP +DncLKvbdMfbomPtk +EOcLKvbdqTtHRqjt +EPCkKvbdqceIpNvB +DncLKvbdFxtuBDxC +EPCkKvbdxVNEpyLn +EOcKjvbdYzbeqivZ +DoCjjvbdNdcsiJLE +DoDKjvbdzjVQQDsU +EObjjvbdvBDySneI +DoDKjvbdBhjbKhej +EPDLKvbdWSOYBdlD +EOcKjvbdOYOuzcnU +EPCkKvbdkCkkQgVH +DnbkKvbdtlXwBTaX +DnbkKvbdTppoVUgm +DoCjjvbdQmXaxnUz +DncKjvbdkHfkfFmk +EPCjjvbdmgEwlnHZ +EPDLKvbdZdxGzhJC +EPCkKvbdmIdTqUqa +DoDKjvbdzGyMAMeX +DnbkKvbdTppnuUhN +DoCjjvbdSLYfUgLT +DnbkKvbdZsiJZETO +EObkKvbdNUrqjmAX +EObjjvbdZyDimcLr +DoCkKvbdRDbaQRDr +DnbjjvbdbAudfPow +EPDKjvbdZjTHpGaf +DoDKjvbdqwQLcIxq +DnbjjvbdZLqdTmkm +DoDKjvbdyXiKCPzL +EObjjvbdssSTYyeD +DoCjjvbdddoRawCj +DoCjjvbdkMbLydfo +DoCjjvbdVTmUFkvK +DoCjjvbdhyuFkpmf +EObkKvbdlYsSSyGt +EPCjjvbdtvNxKQsA +DoDKjvbdRpTgKFdX +EObjjvbdjbkkQgVH +DnbjjvbdaNLCStlg +EOcKjvbdDxYLsssl +DoCjjvbdfNFvgMjL +DncLKvbdrovPJcWG +DnbkKvbddoFSjssr +DnbjjvbdSQTgKGDw +DoCjjvbdQvnEDLhD +EOcKjvbdUxhUZkOn +EPCjjvbdEzsqFMDJ +DoDKjvbdGdKuiaij +EOcKjvbdxrnJMrCH +DnbjjvbdUWMQJtBR +EObkKvbdEKHivYKA +EPDLKvbdYSlAltOx +DnbjjvbdbVCHXjtI +DnbkKvbdtkwwAtBX +DoCjjvbdZQleJNEq +EPDKjvbdEPCjjvcE +EPCjjvbdCSaDUFwS +EPDKjvbdHELViajK +DoDLKvbdijFgjNXr +DncLKvbdjmCLydfo +EObkKvbddZyQXxqC +DnbkKvbdySnImSCH +EPCjjvbdqmZjYkgi +EPCjjvbdGFirNiTq +DoDKjvbdRXNdDMID +DncLKvbdMfcQNQUk +EOcLKvbdZdwfzghb +EPDLKvbdULuoBWOi +EObjjvbdFyVUaDwb +DoCjjvbdNQXpumfs +DnbkKvbdrWolDIxq +EPCkKvbdBvzdIeQW +DnbkKvbdfIKuqmpg +EOcKjvbdnBiwXoNu +EObjjvbdiHKDZWKV +EPCjjvbdZLqdTnLm +DoCjjvbdlYsSTYgU +EPDLKvbdsBfNMHKy +DnbkKvbdjuvmdCXw +EPDLKvbdRDcBQQdS +EOcKjvbdySmhmRbH +EPDLKvbdbrbjscia +EPDLKvbdkxrrTZGt +DoDKjvbdcJMjLGWx +EPDKjvbdKeegbBQu +DnbjjvbdvPTzqKoU +EOcLKvbdIidAKPgE +DoDLKvbdVrOYBdkc +EObjjvbdeFOqawDK +EOcLKvbdZRNEhmFR +EObjjvbdKfFgbBRV +DoCjjvbdiLeEOVCy +EPCkKvbdqmZjYkgi +EPDKjvbdHffyxxXg +EPDKjvbdZLrDsmlN +DnbjjvbdTkuoBVoJ +EOcKjvbduDDUvvOo +DoDKjvbdZdwfzhJC +EPCkKvbdfMfWgNKL +EPCjjvbdRXOECkgc +EOcKjvbdMowpvNfs +DoDLKvbdiBoCeWpq +EObkKvbdNwoVzdOU +EPDLKvbdDoDKjvbd +EObjjvbdLFehCBRV +EOcLKvbduCcVWuno +EOcKjvbdXsMBMtOx +DnbkKvbdcIljKewY +DoDLKvbdEzspdkcJ +DncKjvbdqcdhomua +EPDKjvbdiifHjNXr +EObkKvbdVqnXbFLc +EPCkKvbddwyssrFz +DncKjvbdrSVKmkAm +EPCjjvbdTlVoBVni +EObjjvbdOhAYZAYa +EPCjjvbdRadEkiZL +DoCkKvbdSCEEkiYk +EObjjvbdGZVVAcxC +DnbjjvbdZyEJnDMS +EOcKjvbdzitoodSt +EPDKjvbdXFxzUAPT +DnbjjvbdziuQQESt +EPCjjvbdEARhmZvw +DncLKvbdatbHXkTh +DncKjvbdbsCjtDjB +EPCjjvbdKWVGDdgJ +EPDKjvbdrafNLfkZ +EObkKvbdFkEsChMu +DnbkKvbdVgxWXfxz +EObjjvbdJbjDRJbx +EObkKvbdwyhFfYFS +EPCjjvbdMfbpNPtk +EObkKvbdbsDKtDia +EPCkKvbdkxsRsZHU +DnbkKvbdvAdZTOdh +DncKjvbdptUHRrLU +DncKjvbdvPTzqKnt +DncLKvbdTppoUthN +DnbkKvbdrbFlkgLZ +EPCjjvbdGdKvJajK +EPDLKvbdACqxKZiQ +DoCkKvbdbPffckzd +DoCkKvbdhbOcEvqR +DnbjjvbduCcVWvOo +DoCkKvbdmuUzLKRf +EPCjjvbdbUbHYLUI +DoDKjvbdbKkeoNcA +DoCjjvbdcScKtEJa +DoCjjvbdyzdnRgiI +EPCjjvbdkIGlFfOL +EOcLKvbdzjUpPcsU +DoDLKvbdJuuGEEgJ +DncLKvbdTqROtthN +EOcLKvbdpstGqqkU +EPCkKvbdtSrTYzEc +EPDKjvbdezvYdiUX +DoDKjvbdtTRrxzFD +DoCjjvbdrovOjDWG +DoDKjvbdUQpoUthN +EOcKjvbdKDJbpicY +DnbjjvbdaSGCgtFk +DoDKjvbdGZVVAcwb +DnbjjvbdEvYopNJe +EObjjvbdSQTgKFdX +EPDLKvbdrXPkbhyR +DoDLKvbdhyuGMROG +DoDKjvbdzoQRFClY +EPCkKvbdKWUeceHJ +EObkKvbdZnmiFFZj +DnbjjvbdtcDUwVoP +DoCkKvbdjlakyeHP +EPCkKvbdBvzdIdpW +EPCjjvbddePRawCj +DoDKjvbdmfeYNNfy +DnbkKvbdSLYetgKs +DncKjvbdFejRnJTq +EPDLKvbdIGfzZXwg +DncKjvbdJvVFdFHJ +EOcLKvbdIHHZyYYH +EPDLKvbdyXhiaoyk +DoCjjvbdADSYJzIp +EObjjvbdNPxQunHT +EPCkKvbdxnTHwrhc +DncKjvbdTppnuVHm +EObkKvbdjlbLydfo +DoDLKvbdVBBpsRRy +DnbjjvbdACqwiyhp +DoCkKvbdZRNFJNEq +EOcLKvbdaRfDHtFk +DoCkKvbdKfFgbBQu +DnbjjvbddCTNSAUN +EPDLKvbdTfznMXVe +EOcKjvbdeOeSkUTr +DnbkKvbdqdEiPnVa +EOcLKvbdsBemMHLZ +DoCkKvbdNPxQvOGs +EPDLKvbdOTTufeUp +DncKjvbdraelkfjy +DoDLKvbdZoOIeFZj +DnbkKvbdptTgRrLU +DncKjvbdACrXiyhp +EPDLKvbdIGgZxwxH +DnbjjvbdZnmiEeZj +DnbkKvbdWRmxCFLc +DoDLKvbdyYIiaozL +EPCjjvbdOTTvGeUp +EPCkKvbdNUsSKmAX +EPCjjvbdDigiuwjA +DoDKjvbdIrxaTMxM +DoDKjvbdZyDimcLr +EPCjjvbdjbkkRHVH +DoCjjvbdWXJYVceH +EOcLKvbdlZTSSyHU +DncLKvbdwuNEqYlO +EPCkKvbdrpWPJbuf +DncKjvbdtbcUwWPP +EOcKjvbdGKeScINV +DncKjvbdZeXfzhJC +DncKjvbdUQqPVVIN +DoDKjvbdxsNhmSBg +DoDKjvbdURROuVHm +DncKjvbdRMwbYmtz +DoDKjvbdZRMeImEq +EOcLKvbdWHwvXgYz +EPDLKvbdIwsahMQp +EOcKjvbdfHkVrNqH +EObjjvbddjKSWUzn +DncKjvbdxwiJbQZk +EPCkKvbdMSWlzVQz +DoDLKvbdUQpnuUhN +DncLKvbdiCPCdvqR +DoCjjvbdapHHELzd +DncKjvbdyOSgwrhc +DoCkKvbdDxYLtUTl +EObjjvbdyfyMAMdw +EObjjvbdHffzYxYH +DoDKjvbdYzcFrKWZ +EPDLKvbddZyPwyRC +EPCkKvbdLhalRYAS +DoCkKvbdGYtuBEXb +DoCjjvbdrylQTAgn +DoCjjvbdbBVeGPpX +EPDLKvbdYpmFImFR +DnbkKvbdJcKCpjDY +DncLKvbdYTLaNUPY +DnbkKvbdeOeSjtTr +DoCkKvbdEYYLtTtM +EPCkKvbdrzLoraIO +DoCjjvbdKWVGDdfi +DoDKjvbdBhjbLIfK +EPCkKvbdNQYQvOGs +EOcLKvbduLxXBTaX +EPDKjvbdANHySwZx +DnbkKvbdeOdsLTtS +DnbkKvbdUsmTfMWK +DoDLKvbdcImJkGXY +DncKjvbdsPunibuf +DnbjjvbdIGfyxxYH +DoDLKvbdvBDyTOeI +EPDLKvbdGKeScHmV +EOcLKvbdqFceUVaI +DncLKvbdqdEhpOWB +DoDLKvbdTulPitAq +DnbjjvbdWXIwudEg +EPDLKvbdcTDKtDjB +DoCjjvbdgFlZnHHA +DnbkKvbdwuNEqZLn +EObkKvbdmRxtzSci +EObjjvbdjvXNdCYX +DnbkKvbdqGDdsvBI +DncKjvbdqdEhomvB +DoCjjvbdrpVoKCvG +EObkKvbdWHwvYHYz +EOcKjvbdrykoraHn +EPCkKvbdsPuoKCuf +DncKjvbdZjSgofaf +DncKjvbdNeETiIjd +DoDLKvbddoFSkTsr +EPCkKvbdkWWnECXw +DnbkKvbdZRNFIldq +EObjjvbdzjVQPdTU +DnbjjvbdhytelRNf +EOcKjvbdNPxQunHT +DoCkKvbdmuVZkJrG +EPCjjvbdUVlQJtBR +DoDKjvbdzitpQESt +DoCjjvbdraemLfkZ +DoDLKvbdkNBlZeHP +EObkKvbdrbGNMHLZ +EPDLKvbdkIHLeemk +DoDKjvbdbAvEeopX +DoDKjvbdiGjCxujV +EPCkKvbdqlzJxkgi +DncLKvbdVZITzLPO +EOcLKvbdVZITykOn +EPCjjvbdjuvnDaww +DoDKjvbdkVwOECYX +EObjjvbdcyxpXyRC +DnbjjvbdULvPAuni +DnbkKvbdOTUWGdtp +EOcLKvbdKDJcRKCx +EPCkKvbdBsBDUFwS +DncLKvbdQdDAopcr +EObjjvbdcSbjtEKB +DnbjjvbdlAloNALA +DoCjjvbdADSXizJQ +EOcKjvbdrpWOibvG +EObjjvbdIGfzZXwg +EPDKjvbdptUHRrKt +DncLKvbdZdwfzhIb +DoCkKvbdQZNAGrrK +DoDKjvbduCbtvuoP +EPCjjvbdJuuFceGi +EPCkKvbdgGLymgHA +DnbjjvbdcyyPxYpb +EPCkKvbdhuZeWquC +EObkKvbdyTNiNRbH +DoCjjvbdVAaqSprZ +DncLKvbdoznDkYPA +EPCkKvbdiUydvquC +DncLKvbdhytfMROG +DoCkKvbdmbKXYPNu +DnbkKvbdMpYQunHT +EOcLKvbdHkaznXQk +DoDLKvbdTvMPisaR +DoCkKvbdIryBTNXl +DoDLKvbdZLrDsmkm +DncLKvbdlhctRVRa +EPCjjvbdYkqcsmkm +EPCjjvbdEXwlUTtM +EObkKvbdEvZPoljF +EPDLKvbdZRNEiNFR +DoCkKvbdANIZTXZx +DncKjvbdZoOIeFZj +DoDLKvbdeJirWUzn +DoCjjvbdRWmdDLgc +DoDKjvbdACrYKZhp +EPDKjvbdMowpunHT +EOcKjvbdYTLaNTnx +DnbjjvbdQvnEClHc +DnbkKvbdSBceLhyL +DoDKjvbdjgflGGOL +EOcKjvbdYpldiMdq +DoCjjvbdrovPKDWG +DoDKjvbdZisHofbG +DoDKjvbdEOcLKwDE +EPCjjvbdhfjDZWJu +DncKjvbdhfjCyWJu +EOcLKvbdtSqsYzEc +DoDLKvbdbQHHELzd +DoDKjvbdySnImRbH +EOcLKvbdVqmxCElD +DnbjjvbdNdcsiJKd +EPCkKvbdkNBkzEfo +DnbkKvbdJKEAKPfd +DncLKvbdiifIJlwr +DnbjjvbdhtzEvqtb +EObjjvbdwWlAvBWV +EPDLKvbdlhctQuSB +EOcLKvbdNddUIiKd +EPDKjvbdJSxaTMxM +EPDLKvbdVrOXaeMD +DoDLKvbdGcjvKBjK +DncLKvbdqvpLbiZR +EPCkKvbdjKFgilxS +DncLKvbdDoCjjvbd +DoCjjvbdqqtjnKaN +EOcKjvbdBvzdJEpW +DoCkKvbdcarlrATm +DoDLKvbdQdCaQQdS +DncKjvbdVqnXadkc +DoCjjvbdJvUecdgJ +DnbkKvbdVYhUZkPO +EPDKjvbdxZgfFxEr +EPCjjvbdsPunicWG +DnbkKvbdmSYtyrdJ +DnbjjvbdTulQJsaR +DncKjvbdsrrSxyeD +DnbkKvbdzQnmJJwA +DncKjvbdatafxLTh +EOcLKvbdmfeYNNgZ +EObkKvbdNxOuzcnU +EPDLKvbdDwwksstM +EPDLKvbdxnTIYTIc +EPDKjvbdHgGyyXxH +EOcKjvbdGAnpyJzm +DoCkKvbdUQqPVUhN +DncLKvbdYgWdAOri +DoDLKvbdygZMANFX +EPCkKvbdrJAJdlne +EPDLKvbdZnmheEyj +DnbjjvbdIxUCHkpp +DnbkKvbdjJehJlwr +DoDKjvbdhlEdNuDZ +EOcKjvbdeOeSkTsr +EOcLKvbdVqnYBdlD +DoDKjvbdeATqMwif +EPCjjvbdrXQLbhyR +DnbjjvbdFkErbhMu +DoCjjvbdpxnhHQcx +EOcLKvbdrWpMDIxq +EPDKjvbdVhYWYGxz +DoCkKvbdwzIGFxFS +DoCjjvbdEztQeLbi +DnbjjvbdlZTRrxgU +DncLKvbdSZihSbvA +DnbjjvbdrzLpTAgn +EPCjjvbdNrsugFVQ +DnbjjvbdxUleQxlO +DncKjvbdtkwwBUAw +DoCjjvbdbBVdeoow +EPDKjvbdEObjkXDE +DnbjjvbdhgJbxvKV +EPCkKvbdIwtCHlQp +DoCkKvbdxmsIXrhc +EObkKvbddePSCXDK +EOcKjvbdVrOXbEkc +EOcLKvbdFVyPomJe +DoDLKvbdREDBPqDr +DncLKvbdaNLCStmH +DncLKvbdbAudfQPw +DoDKjvbdRaceLiZL +DoCkKvbdJYUCIMRQ +DnbkKvbdYkrDtOMN +DnbjjvbdFkFTChNV +EOcLKvbdZRMeImFR +EObkKvbdUxgszLOn +EOcKjvbdFjdsChMu +EObkKvbdrafNLgLZ +EPDKjvbdelewGmJk +EOcKjvbdZMRctNlN +DoDLKvbdliEUQtqa +DncKjvbdqUUHSRjt +EPDKjvbduCbtwVno +DoCkKvbdaaVeFoow +EPDLKvbdkClKqGuH +DoDLKvbdCflFgAzc +DoDLKvbdTAEhgbPE +EObkKvbdmtuZjjRf +EObjjvbdKDKCqJbx +DncKjvbdrovOjDVf +DoCkKvbdhtzFWqtb +DncLKvbdEvYpQNKF +EOcLKvbdeFPRavcK +DoDLKvbdhlEcnUby +DoCkKvbdegjvSOQg +DncKjvbdhbPCeWpq +DnbjjvbdsrrTYyeD +DncLKvbdTlWPAvOi +EPCjjvbdwzHeexEr +DncLKvbdmJEUQuRa +DnbkKvbdkIHLeemk +EObkKvbdhtyeXSUb +EOcLKvbdHDkWKCJj +EOcLKvbdRbDdkhyL +EObkKvbdRosfifDw +EPCjjvbdOStVfduQ +DnbkKvbdiHJbxujV +DoCjjvbdsPuoJcWG +EPCkKvbdDxXktTtM +DoCjjvbdHDjujCJj +EObjjvbdUWLoisaR +EPDKjvbdqiAKEmOe +DoDLKvbdxmsIYShc +EPCkKvbdCJKbKiGK +DoDLKvbdRECaQRDr +EPDLKvbdYqNEiNEq +DnbkKvbdiMEcnVCy +DoCkKvbduCbtwVno +DoDKjvbdHbMZdzAD +DnbkKvbdemGXGmKL +DoDLKvbdgQBzwDwh +DoDKjvbdKQzEoGOF +DoDKjvbdWSNwaeMD +EPDKjvbdySmhlqbH +EObkKvbdDxYLtTtM +DnbjjvbdFxuVBEXb +EObjjvbdiBoCdwRR +EPCjjvbdGQATWgGZ +EPCkKvbdYpleJNEq +EOcLKvbdvPTzqKoU +DnbkKvbdZQmEhldq +DncKjvbdLBKgMawq +EPCkKvbdqFceTvAh +EPCjjvbdkIHMFenL +DoDKjvbdehLVqnRH +DoDKjvbdxwhibPyk +DnbkKvbdkMbMZeHP +EOcKjvbdsrrSyZeD +EOcLKvbdMowpunHT +EObjjvbdJqZdnfOF +DoCkKvbdezuxdhtX +DnbjjvbdaaWFFopX +DoCjjvbdqdFJQOVa +EPCjjvbdWWhwudFH +EPDKjvbdhtzFWrUb +EPCkKvbdWSNwaeMD +EObkKvbdcIlikFvx +EPCkKvbdauCGwkTh +EPCkKvbdbhmJkGWx +EPDKjvbdRosgJfEX +DnbkKvbdTvMQJtAq +DnbkKvbdsBfMlGkZ +DnbkKvbdVrNxCElD +DoDLKvbdmpZxukZC +EObkKvbdhlEcnVCy +EOcLKvbdwzIFfYFS +DnbkKvbdZtIhxdSn +DoDLKvbdjgfkfFmk +DoDLKvbdqTtHSRkU +EObjjvbdSCDeLiZL +DoDKjvbdeATplxJf +DnbkKvbdIBkzEzAD +EOcKjvbdFWZQPljF +DoCjjvbdRbDeMJYk +EPDLKvbdDoCkKvcE +DoCkKvbdZjShPfbG +DnbjjvbdNPxQvOGs +EPDLKvbdKyQirztf +DoDLKvbdJutecdfi +DoCjjvbdTppoUuHm +EPDLKvbdjEkGuPAO +DnbkKvbdVTmTekuj +DnbkKvbdZyEJmcMS +EOcKjvbdNddThhjd +DncLKvbdrDdhpNua +EOcKjvbdBiLBkJGK +DoCkKvbdrXPkbhxq +DnbjjvbdZQmEiMdq +DncLKvbdhzUfMROG +EPDKjvbduaEYroEh +DoCjjvbdJYUCHkqQ +DoCjjvbdwzHfFxEr +EPCjjvbdLiBkqYAS +DoDLKvbdxZgfFxEr +DoCkKvbdraemLgLZ +DoDLKvbdxxJJaozL +EPDLKvbdKeehBaRV +DoCkKvbdPIAYZAZB +EObjjvbdBvzdIdov +DoDKjvbdjblKqGuH +DoDKjvbdlhdURVSB +EPDKjvbdqvpMDJZR +DncKjvbdajkeoODA +EOcKjvbdkySqsZHU +DnbjjvbdJqZdnfOF +DncKjvbdZHWdAOsJ +DoCkKvbdaNLCStlg +DoDLKvbdVZHszKnn +DoCjjvbdtvOYJpsA +DoCjjvbdNPxQvNfs +DoDLKvbdZLqctOMN +EObjjvbdvwMAvAvV +DnbkKvbdEuxpPlie +DnbkKvbdAMhYsWyx +DoCkKvbdtumwjQsA +EPCjjvbdVAaprqRy +EObkKvbdlZSqsYgU +EObkKvbdBvzdIdov +DnbjjvbdyOShYTJD +EOcLKvbdZshhxdSn +EPDKjvbdUtMselWK +DoDLKvbdYqNEiMeR +DncLKvbddePSBwDK +DncLKvbdqYnggQcx +DnbkKvbdqceJQOVa +DoDLKvbdtSrTZZeD +EPCjjvbdANHyTWzY +DoDLKvbdcIlikFvx +DoDKjvbdxmsHwsIc +EObkKvbdYzbfRiuy +EPDKjvbdWHwuwfxz +EOcLKvbddndsLTsr +EObkKvbdwXMAuaVu +EPDLKvbdbVBfwjtI +EObjjvbdfMfXHMik +DoCkKvbdOXoVzdOU +DnbkKvbdnGeXlnHZ +EPCjjvbdGGJrOJTq +EPCkKvbdhanbeWqR +EOcLKvbdLhbLpxAS +EPDLKvbdbBVdepPw +EOcKjvbdWSNwadlD +DoCkKvbdaRfChTek +EPCkKvbdmbJvxOmu +DoCkKvbdCSaCsfXS +EObkKvbdbhljKewY +DncLKvbddZxowxpb +DnbjjvbdRDcBQQdS +DnbjjvbdKDJbqKDY +EObkKvbdWRmxCFLc +EPDLKvbdYlSETmkm +EOcLKvbdMIalRYAS +DoDKjvbdCEQAuimG +EPDKjvbdCTAcTewS +EPCjjvbdrRtkOKaN +DnbkKvbdtTRryZeD +DnbjjvbdMgColpVL +EOcKjvbdrDdhomua +EPDKjvbdRbDeMJZL +DnbkKvbdxnSgwrhc +DoDKjvbdVvhxVdFH +DncKjvbdLYqJrzuG +DncLKvbdZsiIyETO +EPDLKvbdieLHUoAO +EPDLKvbdNsUVgEuQ +EPDLKvbdoAKztHcn +DncKjvbdfNFvgNJk +DoCkKvbdqYoHgQcx +DncLKvbddwzUUSFz +DoCkKvbdIHGzZYXg +DncLKvbddZxpXxpb +DnbjjvbdhlFDnUcZ +EPCjjvbdSKxfUfjs +DoCkKvbdbAvFGPpX +EOcLKvbdVhXuwfxz +EPCkKvbddoEsKtTr +DncKjvbdhkeEOVDZ +EObjjvbdNUrqjmAX +EPDLKvbdUWLojTaR +DoDLKvbdWIYVwfxz +DnbkKvbdUtMsekvK +EOcKjvbdRpUHJecw +DoDKjvbdCJKbKiFj +EObjjvbdEuxoomJe +EPCjjvbdLrWlytpz +EObjjvbdMgDPlotk +DncLKvbdNrtWHFVQ +DoCjjvbdZeYGzgiC +EPCkKvbdKaKfmCYR +DoCjjvbdjlakzEfo +EPDKjvbdpeceTvBI +DnbkKvbdKDKCqJcY +DoDKjvbdMowqWNgT +EPDKjvbdRMxCYmtz +EObjjvbdrXQLbiYq +DncLKvbdZnmheFZj +EOcLKvbdiLeENtcZ +DncKjvbdzaAPGfal +EPCkKvbdeATqNYKG +EObjjvbdSCDdlIyL +DoCkKvbdVZHtZjnn +EPCjjvbdZtIhxdTO +EPDKjvbdTlVoAuoJ +EObjjvbdZRNFIleR +DoDLKvbdEPDLKwCd +DnbjjvbdfRaWzkbo +EPDLKvbddneSjstS +EObkKvbduCbtwWOo +EPCkKvbdmoyyWKyC +EPCjjvbdehLVrORH +DoDLKvbduCcUvuno +EObkKvbddZxowxqC +EObkKvbdKQydoFme +EPCkKvbdqqtkOKaN +DoDKjvbduaEYsOeI +EObkKvbdePEsLUTr +DoDLKvbdbsDLTcia +DncLKvbdDwwlTtUM +EOcKjvbdOEdUIhkE +DoDLKvbdtvOXjRTA +EObkKvbdeFPSCXCj +EPCkKvbdqlzJxlIJ +EOcKjvbdUMVoBVni +EPCkKvbdqqtkNkBN +DoDLKvbdiVZeWquC +DncKjvbdZLrDsmlN +EPCkKvbdzitopESt +EOcKjvbdnBjXYPOV +EObkKvbdehKurOQg +DoCjjvbdmJDsptrB +DnbkKvbdaNKbTVNH +DncLKvbdGQASvfey +EOcLKvbdtbcUwVno +EOcKjvbdqUUHSSLU +EOcLKvbdvwLaWBWV +EPCkKvbdRacdlIxk +DnbkKvbdxZgfGXeS +EOcLKvbdVAapsQqy +EOcLKvbdQvnECkhD +EPDKjvbdCWzchdpW +DoCjjvbdpedFUWBI +EPDKjvbdqvpMCiYq +EPDLKvbdEPDKjwCd +DncLKvbdGckWJaij +EObjjvbdgPazwEXh +DoCkKvbdUVlPitBR +DoCjjvbdMSXMzVQz +DnbkKvbdliEUQuRa +DoCkKvbdOStVgFUp +EPCjjvbdUtMtGMVj +DoCkKvbdKWVFdFHJ +EPCkKvbdUxhUZkOn +DnbkKvbdLBKflbYR +EPCkKvbdFkEsCglu +DnbkKvbdKCibpjCx +DnbkKvbdGLEsChNV +DoCjjvbdLGFhCApu +DncLKvbdeXzTsqez +DoCkKvbdxrmhlqbH +EPDLKvbdYlRdTmlN +EPCjjvbdqYnhHRDx +EPDKjvbdWfYzUAOs +EPCkKvbdMJCLpxAS +EObkKvbduCbtwVoP +DoCkKvbdmfdwlmfy +EPCjjvbdVBBprpqy +DoDLKvbdEKHivXjA +DoDLKvbdkWWnECYX +EOcKjvbdqUUHSRkU +DncKjvbdYlRcsnLm +EOcKjvbdelfWfmJk +EPDLKvbdZtIhxcsO +EOcLKvbdGKdrcINV +EPDLKvbdOAIsUKSA +DoCjjvbdXFxytAOs +EPCjjvbdUQpntuIN +EPDLKvbdTvLpJtBR +EPDKjvbdRyihSbvA +DnbjjvbdhyuFlROG +EObkKvbdZxcinClS +EOcKjvbdptTfqrKt +DoDLKvbdURRPUtgm +EObkKvbdaNKbTVNH +EOcLKvbdiZuFlQmf +EPDKjvbdePEsLUTr +EPCjjvbdFxuUaEYC +EPDLKvbdliETpuRa +EObjjvbdjKFhKNYS +DoCkKvbdwzHefXeS +DoDLKvbdFfJqmiUR +EObjjvbdcJMjKewY +EObjjvbdqdFIomua +DnbkKvbdFejRnJTq +DnbjjvbdEzsqFMCi +EPDLKvbdhzUelROG +EPDKjvbdLKaIWAKZ +DoCkKvbdGGJrOIsq +EOcKjvbdVUMtGMWK +EObkKvbdmpZyVkZC +DoDLKvbdJTYaSmXl +EObjjvbdmSZUyrci +EObkKvbdxnSgwsIc +EOcLKvbdhgJcYujV +DoDKjvbdUQpoVVHm +EPDKjvbdKWVFdEgJ +DoCkKvbdWXJXudEg +EObkKvbddxZtURez +DnbkKvbdZRMeJNEq +EOcKjvbdpxoIHRDx +EObkKvbdGGKSOJTq +EOcKjvbdkIHMFenL +EPDLKvbdTqQoUtgm +DnbjjvbdtvNxJpsA +DnbkKvbdFyUtaDxC +DnbkKvbdSLYeuHKs +DncLKvbdxrmhlrBg +DncLKvbdGdLWJajK +EPCkKvbdSPtHJfEX +EPCkKvbdeKJrVtzn +DoCjjvbdWRnXadlD +DncKjvbdhkdcmtby +DoDLKvbdVviYWEFH +EOcKjvbdTAFJICPE +EPCjjvbdCJKbLIej +DoDLKvbdyYJJaoyk +EPDKjvbdNsUVgFUp +EPCjjvbdrDdhomua +DoDKjvbdySnJNRag +EPCjjvbdyNrgxShc +DnbjjvbdADRxKZhp +DnbkKvbdaMkCStmH +EPDKjvbdfIKvRnRH +DnbkKvbdoAKztIEO +DnbjjvbdDjHjVwjA +EObkKvbdjuwODbYX +DoDLKvbdbhmKKfWx +EPDLKvbdKaLGlaxR +DoDLKvbdwzIGFxFS +EPCkKvbdGBOpxizm +EPDKjvbdRXODcMHc +EOcLKvbdYqNFJMdq +EOcKjvbdxUleQxkn +EPDKjvbdZirgpHCG +DncLKvbderAvzkbo +EPCkKvbdTvMPisaR +EPCkKvbdZtJIxdTO +EOcKjvbddePRavcK +DncLKvbdCDpAuimG +EPDLKvbdQdCaPqES +EObjjvbdZyEJmbkr +DoDLKvbdOEcsiIkE +EOcKjvbdrbFlkgLZ +EOcKjvbdRacdlJZL +EPCkKvbdKDKCqKCx +EPDKjvbdrDeIonVa +DncKjvbdOFEThhjd +DncLKvbdLAkHMbXq +EObkKvbdhytekpnG +DncLKvbdrSUkOLAm +DncLKvbdiCOcFWpq +DoCjjvbdrylPsAhO +EOcKjvbdxVNEpyLn +DnbkKvbdmbJvwnnV +DnbkKvbdVAbQsQrZ +EPCkKvbdCTBCtGXS +DncKjvbdTAEiHbPE +EObjjvbdFeiqnJTq +EPDLKvbdDxYMTtTl +DncLKvbdHDkVibKK +DnbkKvbddePSBvcK +DoCjjvbdauCGwkTh +EPDLKvbdWIYWYGxz +DoDLKvbdjcLjqHVH +DoDLKvbdTfznMXWF +DnbkKvbdkVwNcaww +EObjjvbdlYrrSxgU +DncKjvbdaNLCTUmH +EOcKjvbdznoqEblY +DncLKvbdjuwOEBww +DncKjvbdGQATXHGZ +EOcKjvbdiZuFkpmf +EPCjjvbdajlGOnDA +EPDKjvbdJcJbpjCx +DncKjvbdauBgXjtI +EPCkKvbdsZkpTAhO +EPCkKvbdOEdUIhjd +EOcKjvbdNsUWGduQ +DnbkKvbdVTltFlVj +EObjjvbdaNKasVNH +DnbjjvbdhancEvpq +EPDLKvbdZtIiZETO +DoDKjvbdFxuUaEYC +DoDLKvbdLGGHbAqV +DoDKjvbdqceIpOWB +DoDKjvbdvBEZTPEh +DoDKjvbdKefHbBQu +EPDLKvbdlZTSSyHU +DncKjvbdnPyyWKyC +EObjjvbdsZkpTBHn +DoCjjvbdaaVdepPw +EPDKjvbdtkwvaUAw +EObjjvbdEPCkKvbd +EPCjjvbdtkwvaUBX +DncKjvbdRbDeMIyL +EOcKjvbdxwhjBoyk +DoDLKvbdFxuVAcxC +DnbkKvbdxZgfFxFS +EOcKjvbdjhGkefNk +EOcKjvbdEPDKkWcE +EPDLKvbdQvnEDMID +EOcLKvbdqquKmjaN +DoCkKvbdZtJJZESn +EPDLKvbdTkvOaWPJ +DnbjjvbdcSbkUEJa +EObjjvbdQlxBxmtz +EOcLKvbdehKuqmpg +EObjjvbdpyOggQcx +DncLKvbdnVVZjjSG +EPCjjvbdyqOmIiwA +EPDLKvbddZxpXyRC +EObkKvbdRXODcMID +EOcKjvbdnHFXlmfy +EPDKjvbdznpQdcLx +EOcLKvbdqGDdtWBI +EPCjjvbdZoNhddzK +EOcKjvbdqTsgSSLU +EOcLKvbdRzJhTCvA +EOcKjvbdCIjbLIfK +DncKjvbdKQzEoGNe +EOcKjvbdACrXizJQ +EObjjvbdEzspdkcJ +EObkKvbdsZlQTAhO +EPDKjvbdfoazwEYI +DoDLKvbdjAQGaQGj +DoDLKvbdEzsqFMCi +EPDKjvbdyYJJapZk +DnbkKvbdIxUBglRQ +DoCjjvbdtTRsYyeD +EPDKjvbdGKdsDIMu +EOcLKvbdFyVVAcxC +DnbkKvbdZLrDtNkm +EPDLKvbdsrqrxydc +EPDKjvbdrpVnjCvG +DoDLKvbdmSYtzTEJ +EPDKjvbdajkfOmcA +EPDLKvbdssSSxzEc +EObjjvbdDxYMTssl +DnbkKvbdiMFEOVDZ +EOcLKvbdULvOaVni +EPDLKvbdlqyUzSdJ +EObjjvbdZoNheFZj +DncKjvbdcScLTdKB +EObkKvbdGLFTDINV +DncKjvbdcyyQYZRC +EOcKjvbdYqMeIldq +DoCkKvbdOEcshhkE +EObkKvbdirzhrjiz +EOcLKvbdxUmFRYlO +DoDKjvbdkyTRsZGt +DncKjvbdIryAsNYM +EObkKvbduWNxJpsA +DncKjvbdYkqcsnLm +DoDLKvbddZxpXyQb +DncKjvbdRotGiedX +DnbkKvbdKVtedEgJ +EOcKjvbdjvWnEBww +EObkKvbdFyVVAdXb +DoCkKvbdYlSEUNkm +EOcKjvbdcTDLTcia +EPCkKvbdzjUpQESt +DnbkKvbdqUTfqrLU +EPDKjvbdSQUHJfEX +DnbjjvbdiGjDYvKV +EObkKvbdhkdcnVCy +EPCjjvbdJuuFdFHJ +EObjjvbdYkqdTnMN +DoCkKvbdpssgSRkU +EObkKvbdUWLpKUBR +DoDKjvbdZsiJZESn +DnbkKvbdYqMdhmEq +DoCkKvbdjcLkRHVH +DnbkKvbdSPsgKGDw +DoDLKvbdKVtfEEfi +EPCjjvbdiGibyWKV +EPCjjvbdEYYLtUTl +EPCjjvbdFejSOIsq +DncLKvbdRECaQRES +EPCkKvbdEuyQQNKF +EObkKvbdxwhjCPzL +DncLKvbdiLeDnUby +EOcKjvbdEuxpQMie +EOcKjvbdIidAJogE +DoDKjvbdxsNhlqag +EOcKjvbdEzsqFLcJ +EObjjvbdYTMAmToY +DoDLKvbdwuNFQyLn +DoCkKvbdzitpQDrt +EOcLKvbdZtJIxdSn +DncLKvbdqZPHgRDx +EPDLKvbdMoxQvNfs +DncKjvbdmIctQuSB +DoCkKvbdFfKSNiUR +EPDLKvbdhtydvqtb +EObjjvbdxrnJNRag +DnbjjvbddoFTKssr +EPDKjvbdqlyjZLgi +DnbkKvbdyNsHwsJD +EOcLKvbdxnTHwsJD +EObjjvbdUQqOtuIN +DnbkKvbdwtleQyMO +DoDLKvbdrovPKDVf +EOcLKvbdFaPQxizm +EObjjvbdVAapsQqy +EOcKjvbdJvVFdFGi +DnbkKvbduDDVXVno +EObkKvbdZjTHpGbG +EObjjvbdZirgofaf +DncKjvbdAMgySvzY +DoDKjvbdGdLVibKK +DoDKjvbdWRmwbEkc +DncKjvbdXsMAlsnx +DoDLKvbdtcCuXVoP +DoDLKvbdqlyjYlIJ +EPCjjvbdHELVjCKK +DncLKvbdBdQAuilf +DoCjjvbdeFOrCXDK +DoCjjvbdRpTgJfDw +DoCkKvbdLAkHMbXq +EOcLKvbdaRebhUGL +DncLKvbdnQZyWLYb +EObjjvbdXsMBNUOx +DncKjvbdrSVKnKaN +EPCjjvbdAMhZSwZx +EOcLKvbdcScKtEKB +DncKjvbdKaLGlaxR +EOcKjvbdZRMeJNFR +EPCkKvbdwygeewdr +DnbkKvbdhancFXRR +EOcKjvbdOTUVfdtp +EPDLKvbdmbKXYOnV +DoDKjvbdGLFSbhNV +EPDLKvbdMfbomPtk +DnbkKvbdmIcsqVRa +DoDKjvbdwtmFRZLn +DoCkKvbddtAUATMv +DncKjvbdiBoDEvqR +EObkKvbdiHJcYujV +DnbjjvbdiCPDFWqR +EOcKjvbdyTNhlrCH +DoDKjvbdNQYRVmfs +EOcLKvbdFjdrbhMu +DoCjjvbdsrrSyZeD +EPCkKvbdXsMBMsoY +DoDKjvbdjhHLfFmk +EPCkKvbdyOTIYTIc +EOcLKvbdbhmKLGWx +DnbjjvbdxnTHwsIc +EOcLKvbdZoOJEeZj +EOcKjvbdjmBkzEfo +EPDKjvbdYORAXuWU +EPDKjvbdtkxXAsaX +DoDLKvbduaEYsPFI +EPCjjvbdypoNIiwA +DoDKjvbdVBCRTQrZ +DnbjjvbdlrYtyrdJ +DoCjjvbdhzUekpnG +EOcKjvbdcTCjsdJa +EObkKvbdbhlijfWx +EOcLKvbdYTLaMsoY +DnbjjvbdKVtedFGi +EOcLKvbdsPvPJbuf +DncLKvbdNrsvHEuQ +EObkKvbdmfeYMmfy +EPCjjvbdZjTHpHCG +DoDLKvbdpyOhGqDx +DoDKjvbdRkZGVGjs +DnbjjvbdRWnEDMHc +EPCkKvbdjlbMZdfo +DoCkKvbdyqOmIiwA +DoCkKvbddxZstSFz +DnbjjvbdKCibqJbx +DoCjjvbdqqtjnLBN +DnbjjvbdBhjbLJGK +DoDLKvbdrWokbhxq +EOcLKvbdJzpGXdAN +EPDKjvbdRMxCZNtz +DncKjvbdkClLRGuH +DncLKvbdIHHZxxXg +EPDKjvbdZshiYdSn +EPCkKvbdqcdhomvB +DoDKjvbdVTmUFkvK +EObkKvbdZisHogBf +DoCjjvbdRbDdkiYk +DnbkKvbdGGJrOJTq +DncLKvbdeFPRavcK +DnbjjvbdSPtHKGDw +DoDLKvbdJmADyfuB +EPCjjvbdKCibpicY +DoDLKvbdiGicZVjV +DoCkKvbdZLqdUNkm +EPDKjvbdVUNUFkvK +EPCjjvbdemFvflik +EPCkKvbdkxrqrxft +DnbkKvbdRbEElIxk +EPCjjvbdaaVdfQQX +DoDLKvbdySmhlqag +EPCjjvbdrRuKnKaN +DncLKvbdezuyEhtX +DnbkKvbdtbbuWuoP +DnbkKvbdZtIhxcrn +EObkKvbdcyxoxZQb +EOcKjvbdDxYLtTtM +EObjjvbdjggMFfOL +EPCkKvbdGckWJbKK +DnbjjvbdddnqavcK +EPDKjvbdYgWdAPTJ +DnbjjvbdbhlikGXY +DncKjvbdNPxRVmgT +EObkKvbdRpUHKGDw +EObkKvbdmfdwlmgZ +DoDLKvbdBvzdJFPv +DnbjjvbdZHXEAPSi +EPDKjvbdbQHGdLzd +EOcKjvbdCIjbLIej +DnbjjvbdOXnuzdNt +EObkKvbdrSUkNkBN +DoDLKvbdNeDsiJLE +EPCkKvbdiUyeXRtb +EObkKvbdbsDKsdJa +DncLKvbdbrcLTdJa +DncLKvbdSPsgJecw +EObjjvbdKNADzGta +EPDLKvbdFWZPomKF +EPCjjvbdRzKISbvA +EOcKjvbdvmWAMcdm +DncKjvbdwyhGGYEr +EPDLKvbdfHjuqnRH +EPCjjvbdRXOEDLhD +EPCkKvbdyOSgwsJD +DoDLKvbdnCKXYOmu +DnbjjvbdjmCLyeGo +DnbjjvbdTYKlNzjx +DoCjjvbdZisHpGbG +EObjjvbdUWMPisaR +EObjjvbdqFcdtWAh +EOcLKvbdYqNEhleR +DnbjjvbdlZSrSyGt +EPDLKvbdePEsLTsr +DncKjvbdSBcdlJYk +EPDKjvbdePEsLTsr +EPDKjvbdypnmIjXA +DnbjjvbdsQWPKCuf +EOcKjvbdZRNEhldq +EPCjjvbdYpmFImEq +EPCkKvbdKfFhBaRV +DncLKvbdezvZEhtX +DncKjvbdiCObdvpq +DnbjjvbdmJETqUrB +EOcLKvbdfpBzvcxI +DncKjvbdRbDdkhxk +EPCkKvbdmpZyVkZC +EPDLKvbdyNsIXrhc +DnbkKvbdyYJJaoyk +DncKjvbdwWlBVaWV +DoDKjvbdqwPlCiYq +DncLKvbdvvkaVaWV +DncKjvbdcJMjKewY +EObkKvbdbBWFFpPw +EPCjjvbdpyOhGqEY +EPDKjvbdCDpAujNG +EPDLKvbdCSaCtFvr +DoCjjvbdwygfFxEr +EOcLKvbdLFehBaQu +EPCjjvbdssSSxydc +EPCjjvbdHfgZyYYH +DnbkKvbdnBjWxOmu +DnbkKvbdcJNJjewY +EObjjvbdrzLoraIO +EOcKjvbdADRwjZiQ +EPCkKvbdOAJStJrA +DncLKvbdajkennDA +DoCjjvbdmbKWxPNu +EObkKvbdmbKXYPOV +DoCkKvbdKCjCpjDY +EPCkKvbdIjEAJogE +DoCkKvbdkHgLfGOL +DoCkKvbdJcJbqKCx +EPCkKvbdVUMtGMWK +DoDKjvbdNxOuzcmt +EPDLKvbdNQYRVnGs +DnbkKvbdzjUoocrt +DoDKjvbdDnbjjvcE +DoCkKvbdGBPRZJzm +DoCjjvbdtvNwjRTA +EPDLKvbdZQldhleR +DoDLKvbdUtMsfMWK +DnbkKvbdDxYLtTsl +DoCjjvbdmbJwYPOV +DoCjjvbdaNLCTVMg +DoCjjvbdWXIwvEFH +DoDKjvbddZxoxYpb +DncLKvbdijGHimXr +EPDKjvbdZQmEiMdq +DncKjvbdTulPisaR +DncLKvbdnGdxMnGy +EPCkKvbdlYsSSyHU +DoDKjvbdKRZePFme +DoCkKvbdZRNFJNEq +DncLKvbdkMbMZeGo +DoCkKvbdBiLBkIej +EObjjvbdWXIwvEFH +EOcLKvbdGGJqnJTq +DoDLKvbdRWmcblID +EObjjvbdxUleQxlO +DnbkKvbdREDBPpdS +DnbjjvbdiifHjMwr +EObjjvbdZLqctOMN +EPCjjvbdmRxtyrci +DoDLKvbdDxXlTtUM +DoDKjvbdxrmiNSBg +DoDKjvbdTppntthN +EObjjvbdnUtykKRf +DoCkKvbdRNYBxmtz +EOcLKvbdQYmAHTSK +EPCjjvbdZtIhxcsO +DoCjjvbdbsCjsdJa +EPDKjvbdsZkoraIO +DoDKjvbdEJhJvYKA +EOcLKvbdJSxaTMwl +DoDLKvbdANHxrvzY +EObkKvbdcTDKtDia +EPDKjvbdrWolDJZR +DoDKjvbdsQVnicVf +EPCjjvbdYSlAlsoY +EPCkKvbdJYUBhMRQ +DncLKvbdtlXwBUBX +EObjjvbdVrOYBeMD +EPCjjvbdcJNJkGWx +DncLKvbdjKGHjNXr +DncKjvbdRMwayOUz +EObjjvbdzdzOzdyp +DnbjjvbdNHColpVL +DoDLKvbdNddThiLE +EPDKjvbdFjdsCgmV +DnbjjvbdTJZjRABM +DncKjvbdOTTugFVQ +DncLKvbdVYgszLPO +DncKjvbdEARhlzWw +EPDLKvbdUGzmkvvF +DoDLKvbdmRyVZsEJ +EObjjvbdptUHRqjt +EOcKjvbdJpzFOeme +DnbkKvbdMgDPmPtk +EOcKjvbdhzUfMRNf +DoDLKvbdpyPHgQdY +DoCjjvbdZjShQHCG +EOcKjvbdOTTvGeVQ +EPCjjvbdRacdkiZL +DnbjjvbdzitoodTU +EOcKjvbdxxIjCPyk +EObjjvbdunszqLPU +EObjjvbdwjwDgzzG +DnbkKvbdUyHtZkOn +DnbjjvbdqvpMChyR +DnbjjvbdmIctRUrB +EObkKvbdNHCpMpUk +DoDKjvbdeFPSCXCj +EOcKjvbdtvOXjRTA +DncLKvbdZGvdAPSi +DoCjjvbdQcbaPpcr +DoDLKvbdVUMselVj +DnbjjvbdVgxWXgYz +DoDLKvbdjAQHBQHK +EOcKjvbdxxJKCPyk +DnbkKvbdQdDApQcr +DnbjjvbdqrUjmjaN +EOcKjvbdJzofYEAN +DoDLKvbdJvVGEFHJ +EObkKvbdJcJbpjDY +EPDLKvbdhanbdwRR +EObkKvbdiZtfLqOG +DoCjjvbdeOdsLTsr +DoCjjvbdSLZFuGjs +DoCjjvbdqTsfrRjt +EObjjvbdACqxKZhp +EPCjjvbdxZhFexEr +EPDKjvbdiBoCeXRR +DoDKjvbdqFcdtVaI +DnbkKvbdkClLQgVH +DnbkKvbdZQmEhldq +DnbjjvbdQYmAGrqj +DnbjjvbdiLddNuDZ +DoDLKvbdsQWOjDWG +EPDKjvbdVqnXaeLc +DnbjjvbdwNWANEFN +EPCkKvbdsBfNMHKy +EOcLKvbdKQzFOfOF +DoDKjvbdHELVibJj +EPDKjvbdcImJkFwY +DncKjvbdIwtBgkqQ +EObkKvbdANHySvyx +DoDLKvbdpxnhGqEY +EPCjjvbdrafNMHKy +DoDLKvbdSQTfiecw +DnbkKvbdiMEdOUcZ +EObjjvbdQmYCYnUz +EPDLKvbdWIYWXfxz +EPCjjvbdNeEThiLE +EObjjvbdHDkWJaij +DncKjvbdMgDQNPuL +DncKjvbdKWUedFGi +EPDLKvbdJYUCIMRQ +EOcLKvbdRacdkhyL +EPCkKvbdSBdEkhyL +EPCkKvbdMRwMzUpz +EPDLKvbdkxrqsYft +EObkKvbdRkYetgLT +EPCkKvbdNrsvHFVQ +DoCjjvbdqiAKFNOe +DoDKjvbddwystRez +EOcKjvbdrylQTBHn +EPDKjvbdDjHjWXjA +EObjjvbdCIkCLJGK +DnbjjvbdqwPlDJYq +EPCjjvbdnVUzLKRf +EOcLKvbdUxhUZjnn +DnbjjvbdRpUHJecw +DnbjjvbdjhGlFfNk +EObkKvbdJKEAKPgE +DoDLKvbdIidAKPgE +DncKjvbdCSaCtGXS +DoCjjvbdIidAKQHE +DnbkKvbdFjdsCgmV +DoCkKvbdGKeTCglu +EOcKjvbdEzspeMDJ +EOcLKvbdqUTgSSKt +DoCkKvbdnBivwnmu +DncLKvbdJcJcRKCx +EPCjjvbdVwJXucdg +DnbjjvbdKVuGEFHJ +DncLKvbdnVUzKjSG +DoCkKvbdqGDeTuaI +DnbkKvbdLFfICBQu +DnbkKvbdZjTIQGbG +DoDLKvbddBrlrATm +DncKjvbdYNqAXtut +DnbjjvbdURROtuHm +EObjjvbdxmrgxSiD +DoCkKvbdjJfHjMwr +DncLKvbdNwoVzdOU +EPDLKvbdyTNhlqbH +EObkKvbdiMEcnUby +DoDKjvbdJcKCqJbx +EPDLKvbdNrtVgEtp +DncKjvbdjEkGtoAO +DoDKjvbdNVSrKmAX +EOcLKvbdxmsIYTIc +EObkKvbdcTDKtDjB +EPDLKvbdxsOIlrCH +DnbkKvbdbrbjsdKB +DoCjjvbdpfEEtWAh +DoCkKvbdMowqVmfs +EPCkKvbdeATqMxJf +EObkKvbdjJehJmYS +EPDKjvbdxmrhYSiD +EObjjvbdjbkkQgUg +DoCjjvbdYlRdUNlN +DoDLKvbdiHKDZWJu +DoDKjvbdpedEsvAh +DoCkKvbdEuyPomJe +EPCkKvbdhtyeWrVC +DncLKvbdbAvEfQQX +DnbjjvbdTkvPBWPJ +DncKjvbdYlRdUOLm +DncLKvbdCIjajiGK +EPDKjvbdUtNTfLuj +DnbkKvbdKVuFdEgJ +DoDKjvbdfVzwoizs +EPCjjvbdySmiMrBg +EPCkKvbdrpWPJcVf +DoDKjvbdcImJjewY +DoCkKvbdkVvnECYX +DncKjvbdWRnYCEkc +DoDKjvbdCIkBjhfK +EObkKvbdmIdURVSB +DoCkKvbdTppoUuHm +EPDLKvbdUQqOtuHm +DnbkKvbdhgKDYvJu +DnbkKvbdkHgLfFmk +EPDLKvbdCDoaVjMf +EPCkKvbdehKvSNqH +DncKjvbdNeEUJJLE +DncKjvbdlhdTqVSB +EOcKjvbdEuxpPmJe +DncLKvbdqceIpNua +DnbjjvbdnVVZjjRf +DnbkKvbdKDJcRJbx +EObkKvbdnHEwlmgZ +EOcLKvbdFWZQQMjF +DoDKjvbdKWUedEgJ +DoDLKvbdmozZVkZC +DoCkKvbdZdxGzhJC +EObkKvbdGQATWffZ +EPCkKvbdJuuGDeHJ +DoCkKvbdiGibxvJu +DnbkKvbdBraDUGXS +EPDLKvbdiHKDYvKV +DnbjjvbdZxcjODMS +DnbkKvbdnGdwlmgZ +DoDKjvbdkxsRrxgU +EOcKjvbdrzMQTAgn +DncLKvbdjhHLfGOL +DnbjjvbdQvnEClID +DoDKjvbdqdEhomvB +DoDLKvbdGdKvKCJj +DnbjjvbdqvpLbiYq +EObjjvbdsPvOjCuf +DoDLKvbdVqnXbElD +EPDLKvbdeEoRbXCj +DoCkKvbdyYJKBoyk +DoDLKvbdlhdURUqa +EPDLKvbdYkqdTnMN +DoCkKvbdnGdwmNgZ +EObkKvbdGGKSOIsq +EObjjvbdLLAgvAJy +DnbjjvbdajlFnmcA +DoDLKvbdiifHimYS +EPCjjvbdnPzYukYb +EPDLKvbdVYhTyjnn +EOcLKvbdfNFwHNJk +DoCjjvbdbrbkTcia +DncLKvbdRkZGVHLT +EObkKvbdSQUHKFdX +EOcKjvbdSKxeuHKs +DncKjvbdFxuUaDwb +DoCkKvbdaSGDHtFk +EPDKjvbdZyDimcLr +EObjjvbdiGibxvJu +EPCkKvbdDwwktTsl +EPDKjvbdRadEkiZL +EPDKjvbdmgEwlmfy +DncLKvbdaogHDkzd +EOcLKvbdjuvmdCXw +EPDKjvbdqwPlCiYq +DoDKjvbdLBLHNBxR +EObjjvbdeFOrBvbj +EPDKjvbdFyVVAdYC +EPDLKvbdKNADygUa +DncKjvbdbVCGxLUI +DoCkKvbdJSyArmXl +EObkKvbdQvnDbkgc +EObjjvbdrEEiQOWB +EOcKjvbdZMSDtOLm +DoDKjvbdQvmccLhD +EPCkKvbdrzMQTBHn +EPDKjvbdMgCpNQUk +DoDKjvbdmbJwYPOV +EOcKjvbdgGLymgHA +EObjjvbdsrqsYzFD +EPDLKvbdrNZiyLgi +DnbkKvbdiiegimYS +DoDKjvbdqwQLcJYq +EObkKvbdaNLCSuNH +EPCkKvbdnUuZkJqf +EPCjjvbdSCEEkiZL +DncLKvbdVZHszKnn +DnbjjvbdUtMsfLuj +DoDKjvbdxmrgwriD +DoCkKvbdxxJKBpZk +EObkKvbdZMRdUNlN +EObkKvbdbPgHDkzd +EObkKvbdqqtjnLAm +EPDKjvbdURROuUhN +DoDKjvbdCWzdJFPv +DoDLKvbdMSXMytpz +DnbjjvbdqlyjZMHi +DoDKjvbdbsDLUDia +EOcLKvbduVnXiqTA +DoCjjvbdDxYLsssl +DoDLKvbdyqPMiJwA +EObkKvbdeOdsLUUS +EOcKjvbdEuyQQMjF +DoDKjvbdEztQeMDJ +EPCkKvbdGZVVBDxC +DnbkKvbdnGdxNNgZ +DoCkKvbdcIljLFvx +DoCjjvbdYqMdhmEq +EPDLKvbdgKfzbfAE +EPCjjvbdJcKDRJcY +EOcKjvbdOFDtJJLE +DncKjvbdiLdcmuDZ +EObkKvbdrWpLcJZR +DnbkKvbdVAaqTQrZ +DnbjjvbdFkFTChMu +DncKjvbdaaWEepQX +EPCkKvbdpedEsvAh +DncKjvbdjAQGaPfj +DoDKjvbdbUbHXkTh +DoDKjvbdRjyFtfkT +EOcLKvbdOTTvHEtp +DoCjjvbdRkYfVGjs +DncLKvbdzoQRFCkx +DncKjvbdrMzJyMHi +EOcKjvbdULvPBWOi +EOcLKvbdzdynzdzQ +EPCjjvbdtumxJpsA +DoDLKvbdwMvAMcdm +EOcLKvbdqceIonVa +EObjjvbdOEdUIiKd +EObjjvbdHELVjBij +EObjjvbdqcdiPmvB +DoCjjvbdJvVFdFGi +EPDKjvbdWRmwaeLc +EPDKjvbdZxdJnDMS +DoDKjvbdZxdJnDMS +EObjjvbdxUldpxkn +DnbkKvbdSLYetfjs +EPDLKvbdYqMeIldq +DoCjjvbdrMyjYlIJ +EObkKvbddxZtTqez +EPCkKvbdWSNxCElD +DoDKjvbdWWiYVcdg +DoDLKvbdqGDdsvAh +EOcLKvbdhzVFlRNf +EOcKjvbdaNLCSuNH +DnbkKvbdkHgMFfNk +DnbkKvbddePRbXDK +DncKjvbdNVTSKmAX +EObkKvbdhzUfLpmf +EOcKjvbdZMSDtNkm +EPDKjvbdTqROtuHm +DoCkKvbdddnqbXCj +DoDKjvbdliEURVSB +DncKjvbdtvNxKQsA +DnbjjvbdqceJQOVa +EPDKjvbdpyOggQcx +EOcKjvbdtcDUvuoP +EObjjvbdrWpMChxq +EPDKjvbdGYttaEYC +EObjjvbdiifIKNYS +DoCjjvbdZyEJmcMS +EPDLKvbdKQzFOfNe +DoCkKvbdqYoIGpdY +EPDLKvbdxwhibPzL +EPDKjvbdRadElJYk +DoDLKvbdtkwwAtAw +EPCjjvbdDjHjVxKA +EPDKjvbdrzLosBIO +EPCkKvbdBdPaVimG +DoCjjvbdrafMkfjy +EPDKjvbdNGcPmQVL +DoDLKvbdVviYVdFH +EPCjjvbdkVwODaxX +DncKjvbdkMbMZeGo +EOcLKvbdfkGzbfAE +DnbkKvbdpyOhHQdY +DoDKjvbdQdCaPqES +EObjjvbdEKHiuxKA +DnbjjvbdpxnhGpcx +DnbkKvbdkxsSSxgU +DnbjjvbdURQnuUgm +DoDLKvbdTukpJtBR +EPCkKvbdqAiFAWgd +DnbjjvbdgGLymfgA +EOcLKvbdyYIibQZk +DoDLKvbdWHxVxGxz +EPDLKvbdFyVVAdXb +DnbkKvbdrRuKnKaN +DoDLKvbdTpqOttgm +EPDKjvbdLhbLqYAS +DoCjjvbdHELVjCKK +DncLKvbdfSBWzlDP +DoCkKvbdRDcBPpdS +DoDLKvbdsQWPJcVf +EPCkKvbdySmiMrCH +EPCkKvbdbUbHXjtI +DoDLKvbdUtMsfLuj +EPCjjvbdEvZQPmKF +EObjjvbddeOqbXDK +EPDKjvbdkClKqGtg +DncKjvbdqiAJdmPF +EOcLKvbdlrZUyrci +EOcKjvbdbBVeFpPw +EOcLKvbdULvPBWOi +EPCkKvbdcJMjLFwY +DnbjjvbdZtIhxcsO +EPDLKvbdSPtHJfDw +EObkKvbdaNLBsUlg +DoDLKvbdqvpLcIxq +DoCkKvbdpxoIHQcx +EPCkKvbdlZTRsZGt +DoCjjvbderBWzkcP +EPDLKvbdZtJIxdSn +EOcLKvbdmoyyWKxb +DoDLKvbduaDxroEh +EPDLKvbddoErkTtS +DncKjvbdnPzYvKxb +EObjjvbdsZlPsAhO +EPDLKvbdjJfHjMxS +EOcLKvbdbsDLUDia +DncLKvbdMuTSLNAX +EPDLKvbdemGWfmKL +EObkKvbdKefHbBQu +EOcLKvbduVnXjRTA +DnbjjvbdGZVUaEYC +EOcKjvbdkNCMZeGo +EPCkKvbdGKeSbgmV +DoDKjvbdqrVLNjaN +DnbjjvbdEASIlzWw +DnbjjvbdeOdrkUUS +DncKjvbdDjIJvXjA +DoCjjvbdqGEFUWAh +EPCjjvbdQcbaQRES +DnbkKvbdhtydwSUb +DoCkKvbdMuTRjmAX +DnbjjvbdJutfEEfi +EPCjjvbdzGxlAMeX +DncLKvbdIHGyyYYH +DoDLKvbdxUmEqZLn +DnbkKvbdNHCpMotk +DnbjjvbdFyVVAcwb +EPCjjvbdShzJqABM +DnbjjvbdcyxoxZRC +EPCjjvbdqquKnLBN +DncLKvbdcIlikFwY +DoCkKvbdeOeSkTsr +EOcLKvbdYpldhldq +EPDLKvbdQYmAGsRj +DoCkKvbdzGyMAMeX +EPCkKvbdqrVKnLBN +EObkKvbdxUldpxlO +EPCjjvbdfIKuqnRH +EPDKjvbdFWYpQMjF +EPDLKvbdOFEUJJKd +EOcLKvbdHEKvKBij +DoDKjvbdjcMLRHUg +EPCkKvbdWXIwudEg +DncLKvbdgPazvcwh +DnbjjvbdnVUykJrG +EPCjjvbdxxJJbPyk +DncLKvbdjJehKMxS +DncKjvbdEzspdkbi +EPDKjvbdrpVnjDWG +DnbjjvbdVrOYCFLc +DoDLKvbdMfbpMotk +DncKjvbdbhljLGWx +DncKjvbdxrmhlrBg +EOcKjvbdbKlGPODA +DoDKjvbdJvUfEFHJ +EPCkKvbdySnIlqag +EPDKjvbdVAbQrpqy +DnbjjvbdrykosAhO +DnbkKvbdKfFhCBQu +DnbjjvbdEXwktTsl +DoDKjvbdDoDLLXCd +EObkKvbdvwMAvAvV +EObkKvbdXsLaNUOx +DnbkKvbdRDcBQRES +EOcLKvbdZisIPgCG +DoDKjvbdpfEEtWBI +DoDKjvbdfoazwDwh +EPCkKvbdFpASvffZ +EObjjvbdRWnDblHc +DoCkKvbdNxOuzdOU +DncLKvbdYlSDtOLm +EPCjjvbdjbkjqHVH +EPCkKvbdrMzJxkgi +EPDKjvbdCIkBjhfK +EPCkKvbdUslsekvK +EOcKjvbdFejRnJUR +EPDLKvbdNHColotk +EPCjjvbdUxgtZjnn +DoDKjvbdEOcLLXCd +EPCkKvbdkHflGFnL +EPCjjvbdwygfFxEr +DncKjvbdeOdrjtTr +DoDLKvbdqTtHRqjt +EPDLKvbdQwNdCkgc +EPCkKvbdhzVGLpnG +DoDKjvbdxwiKCPzL +EPCkKvbdZirhQGbG +DoCjjvbdqrUkOKaN +DoDLKvbdlrZUysEJ +DoCjjvbdqFdFUWAh +DnbjjvbdyYJKCPzL +DncKjvbdxUldpyMO +EPCjjvbdvAcyTOeI +EObjjvbdLFegaaRV +DncKjvbdemFvgNKL +EOcLKvbdjcLjqHVH +DoDKjvbdRMxCYnUz +EPDLKvbdRjxfUfkT +DoDLKvbdiMEdNuDZ +DoDLKvbdZRMdhmEq +DoDLKvbdqlyiyLgi +EObjjvbdiiehJmYS +DoCjjvbdwuMeRYlO +EPDKjvbdqquKmkAm +EOcKjvbdlrYtysDi +EPDLKvbdliETqUrB +EObjjvbdePErkTsr +DoDLKvbdfHjvRnQg +EObjjvbdRXOECkgc +EObkKvbdMpXqWOGs +DncKjvbdEJhJvYKA +DoCkKvbdVrOYBeMD +EPDKjvbdTkvPBWOi +EOcLKvbdjuvmcbYX +DncKjvbdMfcQMouL +EOcLKvbdMpXpvOHT +DoCjjvbdiLdcmtcZ +DnbkKvbdiHJcZWJu +EPDLKvbdTqQnuUgm +DncKjvbdLGFgbBQu +EPDKjvbdNdctIiLE +EPDKjvbdZxdKODLr +DoDKjvbdSZjITCvA +EPCjjvbdDwxMUTsl +EPCkKvbdySmhmRag +EOcLKvbdSPtHKGDw +DoDKjvbdmIctRUqa +DoDKjvbdaRfChTek +DncLKvbdyNrhXsIc +DncLKvbdJTZBSlxM +DoDKjvbdFeirOIsq +DnbjjvbdJutedFHJ +DnbkKvbdUsltGMWK +DnbkKvbdbhljLGWx +EPCjjvbdirziTLJz +EOcKjvbdnPzYvKyC +DoDKjvbdkDMLRGtg +DncLKvbdyzeNqhIh +EPCjjvbdYTMAmUPY +DoCkKvbdgGMZnHHA +DncLKvbdlZSqsYft +EOcLKvbdZjShQHCG +DnbjjvbdjhGlGGNk +DoDLKvbdkxsRryGt +DoCjjvbdZyDjNbkr +DnbkKvbdNeEUJIjd +EOcKjvbdxxJJbPyk +DoDLKvbdRbDeMIxk +EObjjvbdrDeJPnWB +EPCkKvbdrXPkbiYq +EPCjjvbdeFPRbWbj +DncLKvbdHffyxxYH +EPDKjvbdcyyQYZQb +DoCkKvbdNsTvGeUp +EPCkKvbdfpBzwDxI +EPCjjvbdqTtHRrLU +EPCkKvbdhgJbxvJu +EOcKjvbdkxsRryGt +EPCkKvbdZshhyETO +DnbkKvbdrWpLbiZR +EObkKvbdnHExMmfy +DnbkKvbdbUbGwkTh +DnbkKvbdnHExMnHZ +EObjjvbdZnmiFEyj +EObkKvbdSQUGjGDw +EPCkKvbdqTtGrRkU +EObjjvbdcImKLGXY +EObkKvbdShzJqAAl +DncLKvbdGGJqnIsq +DnbkKvbdehKuqmpg +DncLKvbddeOrCXDK +EOcLKvbdRMwbYmtz +DnbjjvbdgFlZmgHA +DnbkKvbdyOSgxTJD +EOcLKvbdQZNAGsSK +DoCkKvbdRMwayNtz +DncLKvbdezvYeItX +EOcLKvbdVAapsQrZ +DoCjjvbdcImKLFwY +DoDKjvbdTqQnttgm +DnbjjvbdOEdUJIkE +DoDKjvbdeYZssqez +DnbjjvbdZjSgpHCG +DoCkKvbdTvMPisaR +EOcKjvbdZjSgofaf +EPDLKvbdfVzwoizs +DnbjjvbdCSaCsewS +EPDLKvbdFVyPpMjF +EObkKvbddjJrVtzn +DnbjjvbdyOSgxTIc +EOcLKvbdrovPKDVf +DnbjjvbdxZhGGXeS +DncLKvbdbLLeoNcA +EOcKjvbdMfbomQUk +EPDLKvbdaRebhTfL +DoDLKvbdoAKztHcn +EOcLKvbdGckWJbJj +DncLKvbdqmZjYlHi +DncKjvbdZyDinDLr +DoCkKvbdxwhibPzL +DnbkKvbdZoOJFFZj +EPDLKvbdYpmEiMdq +DoCkKvbdiUzFWquC +DnbjjvbdsPvPJcVf +DncKjvbdDwxMTssl +EObkKvbdZQleJNEq +DoDLKvbdWSNxBdkc +DoCjjvbdcSbkTcia +EOcKjvbdqvolChyR +DnbjjvbdqlzJxlHi +DoCjjvbdlrZUzTEJ +EPCkKvbdGdLWJbJj +EObkKvbdzoPqFDLx +DncLKvbdANIYrwZx +EObjjvbdSPsgJfEX +DoCjjvbdbiNJjfWx +DnbkKvbdMfbpNQVL +EObkKvbddePRbXCj +EPDKjvbdShzKRAAl +DoDKjvbdnPyxukYb +EObjjvbdVZITzKoO +EPDLKvbdZyDinDMS +EPCjjvbdYpldhmFR +DoCkKvbdZjTIPfaf +EObjjvbdqdEiPmua +DnbkKvbdRadEkhxk +EPDLKvbdzjVPpDrt +DnbkKvbdaMkBsUlg +DncLKvbdMpXpunGs +DoDKjvbdUxgszLPO +EPCkKvbdiiegilxS +DoCjjvbdEOcKkWbd +EOcLKvbdcTDLUEJa +EPDLKvbdZtIiYcrn +DoDLKvbdmttyjirG +EPDLKvbdGdLVjBjK +DncLKvbdDigjVxKA +EPCkKvbdelfWflik +DoDKjvbdOTUVfdtp +DncKjvbdTlWOaVni +EPDKjvbdrpWOibvG +EPDKjvbdfRaWzlCo +DncKjvbdlrYuZrdJ +DoDKjvbdIsZBSlwl +EPDLKvbdqquLOKaN +DnbjjvbdJmAEZgUa +EPCkKvbdcImJkFvx +DncLKvbdkxrqsYft +EPCkKvbdUWLojTaR +DoDKjvbdnGeXlmfy +DoCkKvbdiMFDmuCy +EPDKjvbdauCHXjtI +DoCjjvbdBsAcUGXS +DoDKjvbdACrYJyhp +DoDKjvbdsZlPsBHn +DoDLKvbdjJegimXr +DoDKjvbdWXIwvDdg +DncKjvbdelewHNJk +EObkKvbdyTOJMrCH +DoCkKvbdNddUIiKd +DoCkKvbdRyjHrbvA +DoCjjvbdiGjCyWKV +DoDLKvbdhlFEOVDZ +EPCkKvbdQdDAoqDr +DoDKjvbdBiLBjhej +EOcKjvbdqlyjZLgi +DncLKvbdtSrTYzFD +DoCkKvbdrMyjYlHi +EObjjvbdhficYuiu +DoDKjvbdfekymgHA +EOcLKvbdiifHjNXr +EObjjvbdIwsaglQp +DoCjjvbdCIkBkIfK +EPDKjvbdaSFcHsfL +DoDLKvbdMgDPlpUk +EPDKjvbdqYnggQdY +DoDKjvbdaSFbgsek +DoCjjvbdiZtekqNf +EPDLKvbdkClKpftg +DoCkKvbduMYWaUAw +EObkKvbdtTSTYydc +DnbjjvbdptUGqrKt +EObjjvbdYlRctNlN +DncKjvbdMgDQNPtk +DncLKvbdILaznXQk +DoDLKvbdiCPDFWpq +DoCkKvbdiGicZWKV +DncKjvbdFjdrbglu +DncLKvbdKWUfDeGi +DoCjjvbdVhXuwgYz +DoDKjvbdhtzFWquC +EPCjjvbdRpTfiedX +DoCkKvbdKVuFdEfi +DoDLKvbdbBWEfPow +DoCkKvbdZyDjODLr +DncLKvbdeAUQmXif +DoCkKvbdIidAKQHE +EPCkKvbdTqROuVIN +DncKjvbdRXODcMID +DoDKjvbdkyTRsZHU +EPCjjvbdxnTIXrhc +EObjjvbdJzofXdAN +EOcKjvbdiBncFWpq +EObkKvbdYORAXuVt +DnbjjvbdiMEdNtby +EPDKjvbdVrOXbFMD +EPCkKvbdAMgxrwZx +DoCkKvbdtbbuXVoP +EPCjjvbdDoCkKwCd +DncLKvbdVBBpsRRy +DoDKjvbdemGWgMik +EObkKvbdeEnqbXDK +EPCjjvbdhanbdvqR +DnbkKvbdmaiwYOnV +DoCjjvbdcJMjLGXY +DnbkKvbdIryArlxM +EPCjjvbdtkwvaUAw +DnbkKvbdxZgefYFS +EPCkKvbderBWzlDP +EPCjjvbdNxPVzdOU +EPDKjvbdaSGDHsek +EOcKjvbdqcdhpOVa +EPCkKvbdxmsHxShc +DoDKjvbdDncKjwDE +DoCjjvbdYpmEhmFR +DncKjvbdaRfCgsfL +EObjjvbdegjurNpg +DnbkKvbdjhHMFenL +EPCjjvbdMfcPmQUk +EOcLKvbdACrYKZhp +DoDKjvbdffMZmgHA +DoCjjvbdaaVeGQQX +EOcKjvbdSCDdkiZL +EOcKjvbdqwPlCiYq +DoDKjvbdajlGPODA +DncLKvbdJYTbHkpp +DncLKvbdtcDVXWOo +EPCjjvbdEXxLtTsl +EPCjjvbdJuteceGi +DnbjjvbdDoCkLWbd +DoCkKvbduCbtwWOo +EPDLKvbdauBgYLTh +EPCjjvbdOXoVzcmt +DoCkKvbdRMxByOUz +DoCjjvbdqYoIGqDx +EPCjjvbdNGbpMpVL +DoCjjvbdJpzFOfNe +EOcKjvbdVAapsQrZ +DncKjvbdpxoIHQcx +EOcKjvbdRaceLiZL +DncLKvbdtcCuWvOo +EObjjvbdbBVeGPow +DnbjjvbdKyRKSzuG +EOcLKvbdFyVUaEYC +EPDKjvbdkCkkRHUg +EObkKvbdKaKfmBxR +DoDLKvbdbUbGwjsh +DnbjjvbdrovOjDVf +EPCjjvbdZsiIyDsO +EObjjvbdRDbaPqDr +EOcKjvbdnBivwnmu +EPCjjvbdYTMBMsoY +DoDLKvbdxKwEHzzG +EPCkKvbdqTsgRqkU +EPDKjvbdfMfWgNKL +DnbkKvbdznpREbkx +DncKjvbdJXtCHlRQ +EPDLKvbdGYuVBEXb +EPDKjvbdZLrEUOMN +EPDKjvbdtcCtvuoP +EObjjvbdXsLaNUPY +EPDLKvbdyOTIYSiD +EObjjvbdsrrTYyeD +EObjjvbdZisHpGaf +DoDLKvbdvOszqLOt +DncLKvbdaMjbSuNH +DncLKvbdYTMBMsoY +EPDKjvbdwzIGFxFS +EPDLKvbdmRyUyrci +DncLKvbdTkvPBWOi +EPCjjvbdNdcsiIjd +EPCkKvbdEzspdkbi +EObkKvbdrovOicVf +DoDKjvbdhbObeXQq +DncKjvbdZnnIeFZj +EObkKvbdRECaPpdS +EOcKjvbdnGeXlnHZ +EPCjjvbdauCGwjsh +EPCjjvbdczYpXyRC +EOcLKvbdDihJuxKA +EOcKjvbdkVwNcbXw +EObjjvbdbsCkTcia +DoCkKvbdfMewHNKL +DoCjjvbdxZgeexEr +EOcLKvbdiBoDEwQq +DnbkKvbdpstHSSKt +EOcKjvbdQvmdClHc +EPDKjvbdIxUBhLqQ +EObkKvbdZtJIyESn +EPCjjvbdtumwjQsA +DoCjjvbdNPxQunHT +EOcLKvbddndrkUTr +EObjjvbdCTBCsevr +EOcKjvbdiUzEwRuC +EPDKjvbdRyigrbvA +DoCjjvbdezvYeJTw +EOcLKvbdVgxVxGxz +DnbjjvbdZeXfzhIb +DncKjvbdxZgfFweS +DoCkKvbdKxqKSztf +DncLKvbdpyOggREY +EPDLKvbdXrlBNUOx +EPCkKvbdqwPkbiZR +EPDLKvbdbsCjscia +DoDKjvbdnGeYMmgZ +EOcLKvbdUsmTfLvK +DnbkKvbdjuwOEBxX +DnbjjvbdTAFJICPE +DncKjvbdEuxoomKF +EPDKjvbdeOdsLTsr +EObkKvbdZshiYdSn +DncKjvbdcTDKscjB +DncLKvbdvwMBWAvV +EOcKjvbdVwIwudFH +EPDLKvbdlZTSSxgU +EOcKjvbdMgColotk +EOcLKvbdZdxGzgiC +DnbjjvbdULuoBWOi +EObjjvbdiCObeXQq +EPDKjvbdNUsRkNAX +DoCjjvbdZxcjOClS +DncLKvbdiUzEwSVC +DoDLKvbdvlvAMceN +DoDLKvbdqcdhpOWB +EObkKvbdCSaDUGWr +DoCkKvbdssSTYydc +DoCkKvbdnGdxMmgZ +DoCkKvbdHELWJbKK +DoDKjvbdKefHbApu +EObkKvbdVqmwbFLc +DoCkKvbdUtNTekuj +EPDLKvbdTlWOaVni +DoCjjvbdDxXkstUM +EPCkKvbdpxoHfqEY +EPDKjvbdmSYtzTEJ +DoCjjvbdddnrCXDK +EPCkKvbdZjTHpGbG +DncLKvbdhzVGLqOG +EPCjjvbdZjSgogBf +EPDLKvbdkDLjqGuH +DncLKvbdxUmFRZLn +EPDLKvbdjhHMFfNk +EPCkKvbdZjTHpHBf +EObkKvbdegkVqnQg +EPDLKvbdGYttaEXb +EObjjvbdZdwfzhJC +DoCkKvbdGQASwHFy +EPDKjvbdkVvnDbXw +EObkKvbdJYTagkqQ +DoCjjvbdMSWlzVQz +DoCjjvbdnGeYMmfy +DoDLKvbdADRxKZiQ +EObkKvbdZLqdTmkm +EPCkKvbdFeirOItR +EPCkKvbdRjyGVGjs +DncLKvbdiMFDnUcZ +EObkKvbdVAaqSpqy +EPCkKvbdULunaVni +DnbkKvbdcImKKevx +DoCjjvbduaDyTPFI +EPDKjvbdKQydoFnF +EPCjjvbdozmcjwoA +DoDLKvbdZLqdUNlN +DoDKjvbdJXsbHkpp +DoCkKvbdelfXHNJk +EObjjvbdeFOqavcK +EPDLKvbdqlyjZMIJ +DoCjjvbdUtMsekvK +DoCkKvbdIxUBhMQp +EOcKjvbdemGWgMjL +DoCkKvbdwuMeQyLn +DncKjvbdkClKpgVH +DoDKjvbdfNFvflik +DncKjvbdhkdcmuCy +DoDLKvbdCJKakIfK +DnbkKvbdSQTgJfEX +DnbkKvbdkIGlGFmk +DoDKjvbdySmhlqbH +DoCjjvbdGdLVibJj +EPCjjvbdSLZGUfkT +EPDLKvbdSKxfVHKs +DoDKjvbdGLFSbhMu +DoCkKvbdqFcdtWAh +EOcLKvbdbVBfxLUI +DoDKjvbdcScKsdKB +DnbkKvbdVwJYWEFH +EPCjjvbdGQASwHFy +DnbjjvbdqUTfrRjt +EPDLKvbdEYYMTtUM +DoDLKvbdfNFwHNKL +EObkKvbdsQWPJbvG +EOcKjvbdIsYaSmYM +EPDKjvbdBdQAuilf +DnbkKvbdrounibvG +EObkKvbdiCPCdvqR +EOcLKvbdBsAbsfXS +DoCjjvbduDDVWuoP +EPCkKvbdbsCjtEJa +EOcKjvbdcTDLTdKB +DoCjjvbdXGYytAPT +DnbjjvbdePFTLTsr +EObkKvbddoErjssr +EPCkKvbdcTDKsdJa +EPDKjvbdjgflGFnL +EObjjvbddeOqbWcK +EObkKvbdACqwizJQ +EObjjvbdHgGyyXxH +DoCjjvbdqlzKZMHi +DnbjjvbdhfibxvJu +DoDKjvbdSCEFLiZL +EPCjjvbdSCEFLiYk +EObkKvbdiLdcmuDZ +EObkKvbdzGyMAMeX +EPDKjvbdVYhTzKoO +EPCkKvbdxrmiNRag +DoDLKvbdjKGHilxS +EOcKjvbdhWyAzzAJ +EPDLKvbdMfcQNQVL +DncKjvbdYkqdTmlN +DoDLKvbdjJfIJlwr +EOcLKvbdZeYGzghb +DncLKvbdJuuFceGi +EPCkKvbdhzUelRNf +DnbkKvbdBhkCKhej +DoDLKvbdhbObeXRR +DnbkKvbdzHZMAMdw +DoDKjvbdZxcjNblS +DoCjjvbdDwwksstM +DoCkKvbdUVkpJtAq +DoDLKvbdaaWEepPw +DncLKvbdGdKvJbKK +DoDLKvbdTulQJtBR +DoDKjvbdqceJPnVa +DnbkKvbdvAdZTOeI +EOcKjvbdVAbRSqRy +EPCkKvbdTqQnuVHm +DoCjjvbdwNWANDeN +DnbkKvbdZtIiYdSn +EPCjjvbdPIAXyAZB +EPCjjvbdZoOIeEzK +DoDLKvbdmJETqUrB +DoCjjvbdOFDtIiKd +DnbkKvbdqvolDIxq +DnbjjvbdmgFYNNfy +DncLKvbdieLHUoAO +EPCkKvbdDnbkLWcE +DoCjjvbdmJETpuSB +DncLKvbdiiegjNXr +EPDKjvbdZQldiMeR +EOcKjvbdZHXEAPTJ +EObkKvbdWHwvXfxz +DnbkKvbdxUleRZLn +DnbkKvbdtvNxKQsA +DoDKjvbdOStWHEuQ +DnbkKvbdsBellHLZ +DoDKjvbdsCFllGkZ +EPDKjvbdjhGlGGOL +DncKjvbdxxJKBoyk +DncKjvbdrXPkcJYq +DoCkKvbduVnXipsA +DoDKjvbdjKGHjMwr +DoDKjvbdbBWEfPpX +EOcKjvbdznoqEcMY +DoCkKvbdySnJMqbH +DoCjjvbdlrZVZsDi +EPDLKvbdKfFgbApu +DoDLKvbdZRMdiNFR +EObjjvbdpeceUWAh +EObkKvbdRotHKFcw +DncKjvbdiZuFkpmf +DoDKjvbdnGdwmNgZ +DoDKjvbdMoxRVnGs +DoDLKvbdiVZeXRtb +EOcKjvbdGAoRYizm +DoDKjvbdJJdAJpGd +DoDKjvbdwMvANEFN +DnbjjvbdaaWFFpQX +DnbjjvbdqlzKZMIJ +EPDLKvbdxnShXsJD +DncLKvbdMfcPlotk +DncLKvbdURRPVUhN +DnbkKvbdHgGzZXxH +EOcLKvbdYlRctOMN +DncKjvbdnHEwlnGy +DoDKjvbdlYsSTZGt +EOcKjvbdZxcjNcLr +EObjjvbdmttyjjSG +EObkKvbdffLynHHA +DnbkKvbdmpZxvLZC +DncLKvbdBhjakJGK +DoCkKvbdpstHSRkU +EPDLKvbdiLddOVCy +EOcKjvbdxUleQyLn +EPCkKvbdTukpKTaR +EOcLKvbdjvXOECYX +EObjjvbdRWnEDLgc +EObkKvbdbhljLGWx +EPCkKvbdZoOJEdyj +DnbkKvbdqrVKnLAm +DoDKjvbdVAbRTRRy +DnbkKvbdhfjDZWKV +EOcLKvbdkWXOECYX +DnbkKvbdYTLaMsnx +EObjjvbdZRNFImFR +DncLKvbdCWzdIdpW +EOcLKvbdpyPIGqDx +DoDLKvbdiCOcFWpq +EPCjjvbdhtzFXSUb +Dnbjjvbdlqxtyrci +DoCkKvbdiZtelROG +EPCkKvbdVUNUFkvK +DnbkKvbdNddUJJLE +DoCkKvbdNdctIhjd +DnbkKvbdcyyQYZQb +EObkKvbdQmYByNtz +DoDLKvbdVrNxBeMD +EPCjjvbdCTBCsevr +DncLKvbdtSrTYyeD +DnbjjvbdRyigsDWA +DncLKvbdJYUBglQp +DoDKjvbdSPsfiedX +DoCkKvbdADRxKZiQ +EPDLKvbdrEFJPmvB +DnbjjvbdvAcyTOdh +EOcKjvbdaMjasUmH +DoDKjvbdZjSgogBf +DnbkKvbdnGeXmOGy +DnbjjvbdMgComPuL +EPCkKvbdxKvcgzzG +DncKjvbdwtldpyMO +DoDKjvbdbhlikGXY +EPCkKvbdpyPIHREY +DoDLKvbdkClLRHUg +EPDKjvbdqFdFUWBI +EOcLKvbdkxrqrxgU +DoDLKvbdTvLoitAq +DoCjjvbdJuuFcdfi +EPCjjvbdrykpTAhO +EPCjjvbdiZuFkqNf +EObjjvbdEuxpQNKF +EPCjjvbdGGKSOJUR +EPCkKvbdcyxowxqC +DnbjjvbdjhGkeemk +EPDKjvbdijGIJmYS +DnbkKvbdypnliKXA +EOcKjvbdRadFLhyL +EPCjjvbdxwiKCPyk +DoCkKvbdfILVqnQg +DoDLKvbdkNCLzEgP +DoCkKvbdGKdrbglu +DnbkKvbdJcJcRJcY +DoDLKvbdIwsahMRQ +DnbkKvbdNddUIhjd +EPCkKvbdJuuGDdgJ +EPDLKvbdjKGHjMwr +EObkKvbdGdKvKCJj +DncKjvbdNUrqkNAX +DoDLKvbdTqQoVVHm +DoDKjvbdNddTiIkE +EPCkKvbduaEZTPFI +DnbjjvbdFWYopMie +EObjjvbdyXhiaozL +EPCjjvbdhaoDFWpq +DncKjvbdJJdAKQHE +DoDKjvbdegkVrOQg +DnbjjvbdwuMdqYlO +EPCkKvbdLKaHvAJy +DoDKjvbdRbEFLiYk +DoDKjvbdSxLMNzjx +DnbkKvbdGKdsChMu +DncKjvbdACrYJzJQ +DoCjjvbdbUafwkUI +DncKjvbdzjVPpDrt +DnbjjvbdFfKSOJTq +EPDKjvbdHffyyXxH +EOcLKvbdRkZFtgLT +EOcKjvbdXsMAmToY +EOcLKvbdNPwqWNfs +DoCjjvbdEuxpPljF +DncLKvbdjJfIJlxS +DoCjjvbdhgJbxuiu +EPCkKvbdrDdhpOWB +DnbkKvbdwWlBWAuu +EObjjvbdySmiMrCH +EPCjjvbduWOXjRTA +DncLKvbdRDbaPqES +EPCkKvbdjEkHVPAO +EPDLKvbddiiqvUzn +EPDKjvbdyYJKCPyk +DncKjvbdNeEThiKd +DncKjvbdrbGMlGkZ +EOcKjvbdOTTvHEuQ +EObjjvbdFyVUaEYC +EPCkKvbdbiMikFwY +EPDKjvbduaDxsPFI +DncLKvbdozmckYPA +DoDLKvbdVYgsykPO +DoCjjvbdQvnDbkgc +DncKjvbdZLrDtNkm +DoDKjvbdHfgZyYXg +DoDKjvbdauCGwkUI +DoDKjvbdmJDsqVSB +EOcKjvbdhgJbyWKV +EPCjjvbdrouoKDWG +DoDKjvbdQmYCYnUz +DoDLKvbdfHkVqmpg +DoCjjvbdZjShPfaf +DoCkKvbdIGfzYxYH +EPDKjvbdZRMeJNFR +EPCjjvbdRpTgKFdX +EPCkKvbdEYYMUUUM +DncLKvbdwuMdqZLn +EOcKjvbdmuVZkJqf +DncKjvbdhgJbyWJu +DnbjjvbdKVuFcdfi +EPCkKvbdRadElIxk +EPCkKvbdYlSDsmkm +DoDKjvbdhlFEOVDZ +DoCjjvbdIsZBSlwl +DoDKjvbdLAkGmCXq +DoDLKvbdqwQMCiYq +EPDKjvbdURROtuIN +DoCjjvbdpxoHgREY +DncKjvbdwXLaWAuu +EObjjvbdrpWPJcWG +EPDLKvbdmozYvLYb +EPCkKvbdMowpunGs +DnbkKvbdANHySvzY +DncLKvbdZyDinDLr +DoCjjvbdziuPpESt +EPDKjvbdiVZeXRuC +EPDLKvbdDncKkWbd +EOcLKvbdFVxopNJe +DncLKvbdACqxJzIp +DncKjvbdaMkCTUlg +DoCkKvbdhyuGMQnG +EObjjvbdbBWFFpPw +EObkKvbdTAEiICPE +DoDKjvbdbUagXjtI +DoDLKvbdGZUuAcwb +DoDKjvbdnGdwlmgZ +DoDLKvbdVBCRSpqy +DnbjjvbdfIKvRnRH +EObkKvbdaRebgsek +DnbjjvbdNVSrLNAX +EPDKjvbdrJAKEmPF +DnbkKvbdBdQBWKNG +DoCjjvbdePFTLUUS +EPCkKvbdRDcAoqDr +DncLKvbdrNZiyLhJ +DoCkKvbdLqwNZtpz +EPDLKvbdlqxtzTEJ +DnbkKvbdrRtjmkBN +EPCkKvbdZRMeJNEq +DnbkKvbdZsiJYdTO +EObjjvbdUtMtGLvK +EOcLKvbdnCJwYOnV +DncLKvbdUMWPAuni +EOcKjvbdJcJbpjDY +DoCkKvbdcImKLGXY +EObkKvbdYSlAmTnx +DncLKvbdCTBCtFvr +EObjjvbdqlyjYlIJ +DoCkKvbdmSZUzSci +DoDKjvbdjEjfuPAO +EPCjjvbdWfYzUAPT +DnbjjvbdzROmJJwA +EObjjvbdnQZyVjyC +DncKjvbdjAQGaPgK +EObkKvbdtTSTZZeD +DoDLKvbdZLrETnLm +DncKjvbdCDpAujNG +DncKjvbdUyHsykOn +EPDLKvbdeXystRez +EPCjjvbdlrZUyrci +EPDKjvbdwjvcgzzG +EPDKjvbdnHExNOGy +EOcKjvbdZLqdTmlN +EPCkKvbdEuxopMjF +EObjjvbdJYTaglRQ +EPCjjvbdrWpLbiZR +EPCjjvbdNxOuzcnU +DoDLKvbdijFhKNXr +DnbkKvbdKWVGEFHJ +DnbkKvbdKCicQjCx +DoCkKvbdcScLTdKB +EOcKjvbdKWUecdfi +DoCjjvbdiLeDmuDZ +DncKjvbdySnJNSCH +EPDLKvbdZshhyDrn +DnbkKvbdssSSxydc +EOcLKvbdqrUjnLBN +EPDKjvbdGdLWKCKK +EObjjvbdsQWPJbuf +DoDLKvbdJcKDRJcY +DoCjjvbdZoNiEeZj +DnbkKvbdGFjSOJTq +EPDLKvbdxxJKBozL +DoDKjvbdBraDUGXS +EPDKjvbdJbjCpicY +DoCjjvbdVqmwbEkc +EPDKjvbdijFhKMwr +EPDLKvbdrSVLNkBN +DoCkKvbdiUzEvquC +EPCjjvbdWIYVxGxz +DnbkKvbdZoOIdeZj +DncLKvbdZRMeJNEq +EObjjvbdZMSDtOMN +DnbjjvbdRWnDcLgc +DoDLKvbdmRxtzTDi +EOcKjvbdJmADygUa +EOcKjvbdxUmFQyMO +EOcLKvbdOTUWHEtp +DoDLKvbdZRNFJMeR +EOcLKvbdxmsHxShc +EPCkKvbdUxhTykPO +DoCkKvbdelfWfljL +EPDLKvbdFejSOJTq +EPCkKvbdKefIBaRV +DncKjvbddeOqbXDK +EOcKjvbdhlEcnUcZ +DoCkKvbdZtJJZETO +DnbjjvbdSPtHJfDw +DncLKvbdOFDtIhkE +EPDLKvbdFyVVAcwb +DoCjjvbdqTtGqqjt +EOcLKvbdyTOIlrCH +DnbjjvbdACrYKZiQ +DoDLKvbdvmWAMceN +DoDKjvbdLBLHNCYR +EPCkKvbdIxUCHlQp +EPDLKvbdQmXayNtz +DoCjjvbdKRZdoFme +DncLKvbdZoNiEdyj +DoDKjvbdqqtkOLBN +EPCkKvbdiZuFkpmf +DncKjvbdEPCjkXCd +DoDKjvbdbVBgXjsh +DoCjjvbdmRyUzSdJ +EObjjvbdMJCLpxAS +DoCjjvbdwWlBWAvV +EPDKjvbdNHCpMouL +DncKjvbdEOcLKwDE +DoCjjvbdwjvcgzzG +DnbkKvbdNGbpNPtk +DoDLKvbdZGwEAOri +EObjjvbdaRfDITfL +DoDKjvbdVvhwudEg +EPCjjvbdHgGyxwwg +DncKjvbdcJMikFwY +EObjjvbdwMvAMdEm +EOcKjvbduMYXBUAw +EPDLKvbdpfDeTuaI +DoDKjvbdssSSxzEc +DnbjjvbdjblLRHUg +EOcLKvbdVwIxWDeH +EPCkKvbdLGFgaaQu +EPDKjvbdBiKakIfK +DoDLKvbdEOcKjwDE +EOcKjvbddijRvUzn +DoCjjvbdmaivxPOV +DnbkKvbdMfcQNPuL +DncLKvbdZtIiZDsO +DoDLKvbdhlEcmuDZ +EOcKjvbdIGfzYxYH +DncLKvbdICLydzAD +EPDLKvbdMfcPmPuL +DnbjjvbdrRuKmjaN +DnbkKvbdbsDKscjB +DoCkKvbdhkddNtcZ +EOcLKvbdNQXqVnGs +DoDLKvbdrEFIonVa +DoCjjvbdQvnDcMID +EPCjjvbdjlalZeGo +EPCkKvbdjJfIKNYS +EObjjvbdREDBPqES +EPCjjvbdiZtfMRNf +DoDKjvbdADRxJyiQ +DncLKvbdYkqcsnMN +DncLKvbdZshiZDsO +DoDLKvbdRNXayNtz +DncLKvbdqcdiPmvB +EPCkKvbdrNZixlHi +EPCjjvbdwtmFRYlO +EObkKvbdJTZBTNXl +EOcLKvbdWRnXadkc +DoDLKvbdvwMBVaVu +DoDKjvbdlZSrTYgU +EPDLKvbdQcbaQRDr +DoCjjvbdhuZdvrUb +DnbkKvbdZxdKOClS +DncKjvbdJzoexEAN +EOcLKvbdQvmdDLhD +DncLKvbdunszpkPU +EOcKjvbdiZuGMQnG +DncKjvbdVZIUZkOn +DoDLKvbdkxsRsYgU +EPCjjvbdGQASwGey +DncKjvbdnBivwoNu +EPDLKvbdsBelkfjy +DoDLKvbdddoRbWbj +EPCjjvbdhancFXQq +EObkKvbdJvUfEEfi +EPDLKvbdIidAKPfd +DoDLKvbdxVMdpxkn +DoCjjvbdaNLCTVNH +DnbkKvbdZyDinDMS +DoDLKvbdrMzJyLhJ +EPDLKvbdyXhiaozL +DoCjjvbdGKeTDHlu +DncKjvbdwzIGFxFS +EObjjvbdJvUedEfi +DncLKvbdIjEAJpGd +DncKjvbdyTNiNRbH +EOcKjvbdidkGuPAO +DoDLKvbdkVvmcbXw +DoCjjvbdJYTbHkpp +DoDLKvbdFyVVBEYC +EPDLKvbdmoyyVjyC +EOcKjvbdcTDKtDjB +EPCjjvbdEvYpPmJe +DoCjjvbdCJLCKhej +DoCjjvbdSKxfUgLT +DoDLKvbdFjeTDINV +DncLKvbdEXxMUTtM +EOcKjvbdWRnXaeMD +DoCjjvbdrMzJyLgi +DoCkKvbdcSbkUEKB +DnbkKvbdyzeOSIIh +DncLKvbdpstGqrKt +EPDKjvbdCJLBkJGK +EOcLKvbdJcJcQjDY +EPDLKvbdbLLfPNcA +DnbjjvbdEASImZwX +DnbjjvbdtumwiqTA +DnbkKvbdxKvdHzyf +DoCjjvbdVwIxWDeH +DncLKvbdYzcFqjVy +EPDKjvbdqiAJeMoF +DoDLKvbdNQXqVmfs +EPDLKvbdFjdsChNV +DoCkKvbdOTUWGdtp +EOcKjvbdOEdUIiKd +EOcLKvbduaEZSoFI +EOcLKvbdxsNhlrBg +EObkKvbdcIlijfXY +DoDLKvbdLqvlytpz +DoDKjvbdIryBTNXl +EObjjvbdQwOECkhD +DoCjjvbdLFegaaQu +EObkKvbdFkFTChNV +DnbjjvbdyzeOSHiI +EObjjvbdLAkHNCYR +DnbkKvbdZyDimcMS +DncKjvbdkMbLzEgP +DnbjjvbdRbEEkhyL +EOcKjvbdLrXMzVQz +EOcKjvbdVBBqTRRy +EObjjvbdyNsHxTIc +EPCjjvbdMuTRkNAX +DoCkKvbdUaCQrprZ +EPCjjvbdjmCLydfo +DoCjjvbdFyVVAcxC +EPCjjvbdQvnDblID +DnbjjvbdLhbLqYAS +DncLKvbdFxuVBEYC +DncKjvbdGLFScIMu +DncKjvbdBvzcheQW +EPDLKvbdSPsfjFcw +DnbkKvbdsQWOibvG +DnbkKvbdaSGChTfL +EPDLKvbdjmBkzFGo +DoDLKvbdqAiFAWhE +EPDLKvbdkVwNcaww +DoCkKvbdKRZePGOF +EOcLKvbdJXtCIMRQ +EPCkKvbdaNLCTUmH +EPDLKvbdliDtRUrB +EOcLKvbdKfGHbApu +EObkKvbdDwwlTstM +DoDLKvbdmgExMmfy +EOcLKvbdKWUfEFHJ +EPCjjvbdkxrqrxft +DncLKvbdkClKqHUg +DoDKjvbdVqnXadlD +DoDLKvbdULvPBWPJ +DoDKjvbdUslsfMWK +EOcLKvbdJvVFdFGi +DncKjvbdiifHilxS +EPCkKvbdRaceMJYk +DoCkKvbddwytTrFz +EPDLKvbdYkrETnLm +DoCjjvbdiMEdOUby +DoCkKvbdxVMeQyLn +EPCkKvbdwuMdpxlO +EPDLKvbdNPxQumfs +DncKjvbdYpleJNEq +DncKjvbdTAEhhCPE +EOcLKvbdUGznLwVe +EOcKjvbdNPwpunHT +EPDLKvbdKaLHNBwq +EOcLKvbdFfKRmhtR +EObkKvbdYlRcsmlN +DoDLKvbdWSOXadlD +EOcLKvbdWWiXucdg +DoCkKvbdZsiIxcsO +DoDLKvbdbhlikFvx +EOcKjvbdtlYXAsaX +EOcLKvbdUtNTelVj +DoDKjvbdhaoDFXRR +DoDLKvbdEuxoomJe +DoDLKvbdEYYLtTsl +DncLKvbdbhmJkGWx +EPDLKvbdqwPkbhxq +DnbjjvbdlrYuZsEJ +DncLKvbdeKKSWUzn +DnbkKvbdyTNiNSCH +DncKjvbddwzTsqez +DncLKvbdTXkMNzjx +DoDKjvbdJmAEZgUa +DncKjvbdeEnqavbj +EPDLKvbdcJNJjfWx +DncLKvbdPyNAGsRj +DoCjjvbdLGGHbAqV +DncKjvbdddoRbWcK +DoDLKvbdZjTHogBf +EPDLKvbdRkZFuHKs +EOcLKvbdEuyPoljF +EPDKjvbdEYYMTtUM +DncKjvbdDxXlTssl +DnbkKvbdQvmcblID +EObkKvbdjmBkydgP +DoCkKvbdOAJTUKSA +DncKjvbdhgJbxvJu +DoDKjvbdVvhxVceH +DoCkKvbdjvXODaww +EPDKjvbdemFvflik +DoDKjvbdkCkkRGtg +DoCjjvbdDigjVxKA +DncLKvbdLAjgNCYR +EPDKjvbdbUbGwkTh +EObjjvbdmuUzLJrG +DnbjjvbdmgFXlnGy +DoCkKvbdFxttaDwb +EPCjjvbdJcKDRKCx +DoCkKvbdpfDeUWAh +EPDLKvbdADSYJyhp +DoCjjvbdHkazmvqL +DnbkKvbduLxWaUBX +EPCkKvbdQdCaPpdS +EOcLKvbdZdwfzhIb +EPDKjvbdKWUeceGi +EPDKjvbdSCDeMJZL +DoDKjvbdyOShYShc +EObjjvbdliEURVSB +DncLKvbdmgEwlnGy +DnbkKvbdsBemMHKy +DoDKjvbdYzcGSJvZ +EObkKvbdGcjvKBjK +EOcLKvbdJuuGDdgJ +EPCjjvbdOStWGeUp +EOcLKvbdGLEsChMu +EOcLKvbdeATqNYJf +DncLKvbdxxIjCQZk +EObkKvbddZyQXyQb +DoDKjvbdVBCRTRRy +EPCjjvbduDDVWuoP +EOcKjvbdVZHtZkOn +EPCjjvbdZQmEhmFR +DnbkKvbdZyDimcLr +EPDLKvbdjblKqHVH +EOcLKvbdZtIiZDsO +DnbkKvbdRWmcbkhD +EPCjjvbddneSjtTr +DoCkKvbdZQmFJMdq +DoDLKvbdLFegbBRV +EOcKjvbdSwkMNzjx +DoCjjvbdFjeTDHlu +EPCjjvbdtSqrxydc +DncLKvbdSPtHKFcw +DncLKvbdyYJJapZk +EOcKjvbddxZssrFz +EObjjvbdfekzOGgA +EPDKjvbdrylQSaHn +DnbjjvbdZisHofbG +EObjjvbdrbGNMHKy +DnbkKvbdLBKfmBxR +DncKjvbdACqxJyhp +DncLKvbddijRutzn +EPDLKvbdMpYRVmfs +DncLKvbdmttzKiqf +DnbkKvbdZnmhdeZj +EPCkKvbdjKFgjNYS +DnbjjvbdxnTHxShc +EPCjjvbdlZTSTYgU +DoCjjvbdqlyjYkgi +EObkKvbdxVMeQyMO +EPDLKvbdSPtHJecw +EPDLKvbdrpWOibvG +EObkKvbdRbEFLhyL +DoCkKvbdYNqAYUvU +DoCkKvbdnCKXXnnV +EObkKvbdddoSBvbj +DncKjvbdNGcPlpUk +DnbkKvbdmajXXnmu +DoCjjvbdJXsbHlQp +DncLKvbdNGcPlouL +DoCkKvbdTAFJHaoE +EPCjjvbdnPyxvKyC +EPCkKvbdRyihTDWA +DncLKvbdQlxCZNtz +EObkKvbdJSyAsMwl +DoCjjvbdmttykJrG +EPCkKvbdfpBzwEXh +DoCjjvbdrzMQTBIO +EPDKjvbddZxowyRC +DncKjvbdaNKaruNH +DnbjjvbdaNKasVMg +DncKjvbdcbTNSATm +EPCkKvbdiLdcnVDZ +EObjjvbdYTLaMtOx +EOcKjvbdEASIlzWw +DnbjjvbdziuPodTU +EOcLKvbdqUUHRqkU +DnbkKvbdyNsHxSiD +EObjjvbdhkeDnUcZ +EOcKjvbdNHCpNQUk +EPDLKvbdIryBSmYM +DnbkKvbdfekynGgA +EOcLKvbdiHKCyWJu +EObkKvbdrMzKYlIJ +DoCjjvbdsZkoraIO +EOcKjvbdQccAoqES +DoCjjvbdtTRrxzFD +EPCjjvbdJXtBhMRQ +DnbjjvbdsBfNMHKy +DnbkKvbdeEnrBwCj +DoDLKvbdTfzmkvvF +DoCjjvbdCJLCLIej +DnbjjvbdNUrrLNAX +DoCkKvbdxsNiNRag +EPCjjvbdtbcUwVoP +DoDKjvbdaogHDkzd +DncKjvbdpedFTuaI +DnbjjvbdqYngfpdY +DncKjvbdbiNJkGWx +DoCjjvbdGckVjBij +EObkKvbdqceIomvB +EPDLKvbdFWZQQNJe +EObkKvbdrRtkOLAm +DncKjvbdDwwktUTl +EObkKvbdwNWAMceN +DncKjvbdZMSDtOLm +EObjjvbdTkvPAuni +DoDLKvbdUxhTykPO +EOcLKvbdVBCQsQqy +EPDKjvbdZshhxcrn +DnbjjvbdqdEiQOWB +DoDKjvbdkWWmdBww +DoDLKvbdzQoMhiwA +DnbjjvbdUGzmlXWF +DncKjvbdJTYaTMwl +DoDKjvbdGLFScHmV +DoDKjvbdrWpLcJZR +EOcKjvbdwNWAMcdm +EObkKvbdmfeYNOGy +EObkKvbdtcDUwVoP +DnbjjvbdiZuGMQmf +EObjjvbdfMewGmJk +DnbjjvbdANIZTWyx +DncKjvbdtTSSxydc +DnbkKvbdsBfMkfjy +DoDKjvbdSLYfUgKs +DoDLKvbdZisHogCG +EObkKvbdVTlsfMVj +DncKjvbddZyPwxpb +DncLKvbdAMhYsXZx +DncLKvbdxwhjCPzL +EOcKjvbdKRZeOeme +DoCkKvbdunszqLOt +EPDKjvbdZRMdiMdq +DnbjjvbdEuxpPljF +EPDLKvbdGGJrOJUR +EPDKjvbdVviXudEg +DnbjjvbdpfDeTvBI +DncLKvbdRadElJYk +EPDKjvbdaMjbSuMg +EPDLKvbdTAEhhCOd +DncLKvbdTIyiqABM +EPCkKvbdBsBDUFvr +DoCjjvbdcSbkUEJa +EObjjvbdCIjbKhfK +DoDKjvbdauCHXjsh +DoCkKvbdpyPHfqEY +EOcLKvbdDwxMUUUM +DnbjjvbdGFjRmiUR +DoDLKvbdbQGgELzd +EOcKjvbdGGJqnItR +EPCjjvbdxrnJNRag +DoDLKvbdbhmJkFwY +EPDKjvbddoFSkTtS +DncKjvbdNUsSKmAX +EPCjjvbdfelZmfgA +DoCkKvbdjKGIJlwr +EPDLKvbdJYTaglQp +EPCkKvbdVrOXbFMD +EPDKjvbdTpqPUuIN +EPCjjvbdGckViaij +DnbjjvbdczZQYYqC +DoDKjvbdMtrqkNAX +EObkKvbdaNKartmH +EPDKjvbdmSZUysDi +EOcLKvbdlhdURVSB +DncKjvbdWRnXbEkc +DncLKvbdLBKfmBwq +EPDKjvbdZdwfzhIb +EPCkKvbdhancFXRR +EObkKvbdaSFbgtGL +DncLKvbdJXsaglQp +DncLKvbdUsltFlVj +DoDKjvbdLBKfmBwq +EPCkKvbdnVVZjirG +EObjjvbdiZuFlROG +EObkKvbdwygeeweS +EPCkKvbdwjvcgzyf +DnbkKvbdssRsYzFD +DnbjjvbdxwiJaoyk +EPCjjvbdVhYWYHYz +DncKjvbdhzVFkpnG +DncLKvbdeJjSVtzn +DncLKvbdyYIjCPyk +EPDLKvbdJpzEoGNe +DncKjvbdnBiwXoNu +EOcKjvbdVrOYCElD +EObkKvbdLBKgNCXq +EPDKjvbdTlWPBVni +EPDKjvbdFxuVBDxC +DncKjvbdnHFXlnGy +EPCjjvbdYkrDtOMN +DoCkKvbdUWMPjTaR +DoCjjvbdjSziSjiz +DnbjjvbdeOdsKtUS +EPCkKvbdmfdwmOHZ +EObjjvbdtSrTYydc +DnbkKvbdRjxeuGkT +EObkKvbdKeehCApu +EOcLKvbdpxoIGqEY +DncKjvbdbLMGOnDA +EPCkKvbdEXwktUUM +EObkKvbdiUzFWqtb +DoCjjvbdiHKCyViu +EObkKvbdvwLaWAuu +DoDLKvbdiCPDEvqR +EOcKjvbdWXJXvEEg +DoCkKvbdqTtGrSLU +DnbkKvbdtbbuXWOo +EObjjvbdgGLzOGgA +DncKjvbdTlVoBWPJ +DoCkKvbdeEoRbWcK +DoCkKvbdkWWmdCXw +DncKjvbdehLWRmpg +EPCkKvbdjFLGtoAO +DoDKjvbdGLFScIMu +EObjjvbdrRtkOKaN +EPCkKvbdczZQYYqC +DnbjjvbdfHkVqnRH +EOcLKvbdtvNxKRTA +EPCkKvbdADSYJyiQ +EOcKjvbdmJETptrB +EOcLKvbdURQoUtgm +DoDLKvbdZMSDtOMN +EPCjjvbdFfJqnIsq +EOcKjvbdcJNKKfWx +DnbjjvbdkySqrxft +DncLKvbdJpyePFme +DncKjvbduCcVXWPP +EOcLKvbdxKvcgzzG +DoDLKvbdpfEEsvAh +EObkKvbdZyDjNblS +EPCjjvbdhbPDEwRR +EPDLKvbdTqQoUthN +DoDKjvbdxnSgxShc +DoCkKvbdcTCjscjB +DoCkKvbdOTUVfeVQ +DncKjvbdkMbMZeHP +DncLKvbdEvYpPmKF +DncLKvbdJTZBTNYM +EObjjvbdIHGyxxYH +EOcKjvbdraemLfkZ +EOcKjvbdMpYRVmgT +DncKjvbdxZgfFxEr +DnbkKvbdpxoIGpcx +EPCkKvbdkIGlGFnL +DoDKjvbdUslselVj +DnbjjvbdZnnJEdzK +DncLKvbdehLVrORH +DoCjjvbdySmhlqbH +DoDLKvbdADSXiyhp +DoDKjvbdZtJJZDrn +DoCjjvbdezvZEiUX +EOcLKvbdqTtHSRkU +EPDKjvbdVgxWXgYz +DoCjjvbdGZUuBDwb +DncLKvbdhzUekpnG +EPCjjvbdZxcinDMS +EPCkKvbdOFEThiLE +DoDLKvbdhzVGLqOG +EObjjvbdkySqryGt +DoDKjvbdmpZyVkYb +DoCjjvbdnHFYMnGy +EObkKvbdRotGjFcw +EPDKjvbdjblKpgUg +EOcLKvbdWWiYVdFH +DoDLKvbdtbcVXVoP +EPDLKvbdqqtkOLAm +EPDLKvbdmRyUysEJ +DnbkKvbdxnShYTJD +DoDLKvbdGKeSbhMu +DoCkKvbdjuwODbXw +DncLKvbdaMkCSuMg +DncKjvbdtbcUvuno +DnbjjvbdiVZeWqtb +DoCjjvbdLBKgNBxR +EObkKvbdlZSqrxgU +EPCkKvbdULunaWOi +DoCkKvbdwzIGGYEr +EPCkKvbdnHExNOHZ +EObjjvbdpyOgfqEY +DnbjjvbdpedFUWAh +DoCkKvbdhaoDFXQq +DnbkKvbdYqMdhleR +DnbjjvbdsZkpSaIO +EPDKjvbdJcJbqJbx +EObjjvbdehKvRmqH +EOcLKvbdmIdURVSB +EPDLKvbdvOszqKoU +EOcLKvbdZisIQGbG +DnbjjvbdFyVUaDwb +EPCjjvbdTAEiIBoE +DncLKvbdRkZFtgKs +EOcLKvbdzdynzdyp +EOcLKvbdnUtykKSG +DoDKjvbdZQmEhldq +EOcKjvbdnBjWxOnV +EPCkKvbdqvpLbiZR +DoDKjvbdrykosBIO +EOcLKvbdBiKbLJGK +EPDLKvbdBvzciFPv +DoCjjvbdemFwGlik +EPDLKvbdqTsfqqjt +DncLKvbdptUHRrLU +EObkKvbdbUbGwjsh +DoCkKvbdHffyyXwg +EPCjjvbdgGMZnHHA +EPDKjvbdFejRmhsq +DoCkKvbdQvmdCkgc +DncLKvbdyNsHxShc +DoCkKvbdrDeIpOWB +EObkKvbdYzcGRiuy +DncKjvbdMowqWNfs +DoDLKvbdbsDLTcjB +EPCkKvbdZQmEiNEq +EObjjvbdNPwqWNfs +DoDLKvbddeOrBwDK +EObkKvbdrNZixkgi +DoDKjvbdtlXvaUBX +DncKjvbdtunYKRTA +EOcLKvbdfSBWzkcP +EObjjvbdVAbRTQrZ +DnbjjvbdcJNKLFvx +DncKjvbdssRsYyeD +DoDLKvbdqTsgSSLU +EPCkKvbdMowqVmgT +DoCjjvbdDnbjjvbd +EPCkKvbdlhdURUqa +DncKjvbdqrVLOLAm +DoDKjvbdNHDQNQUk +EPCkKvbdXsLaMtOx +EPCkKvbdRosgJfDw +DncLKvbdKVuFcdgJ +DoCjjvbdGGKRnItR +DnbkKvbdeEnrCWcK +EPDLKvbdlZSrTYgU +EPCjjvbdtSrTYyeD +DoCkKvbdZisHpHCG +DnbjjvbdbrbkUDia +DnbkKvbdhficYvKV +EOcKjvbdsBfMlHLZ +DoDKjvbdBdQBVjNG +DnbkKvbdTvLpKUAq +DoCjjvbdzaAPGgCM +EObjjvbdiVZeWrVC +EPCjjvbdZshiYcrn +EObjjvbdRNXbYnUz +EObkKvbdBcpBWJlf +DncKjvbdtbcUvuoP +DoCkKvbdmfeXmNgZ +DncLKvbdbPfgELzd +DncKjvbdZshiYdSn +EObkKvbdDjHiuwjA +DoDLKvbdfIKvRnRH +DnbjjvbdiLeDmtcZ +DoDLKvbdQwNcblID +EObkKvbdmRyUzSdJ +DnbkKvbdnHFYMnHZ +EOcLKvbdfHjvSORH +DncLKvbdlZSrSyHU +EObkKvbdtSrSxzFD +EObjjvbdZyEKNcLr +EObkKvbdRkYeuHLT +EOcKjvbdTkuoAuoJ +DnbjjvbdEPDKkXCd +EPCkKvbdnCJwXoOV +EObjjvbdxrmiMqbH +DoDLKvbdRaceMIyL +EPDKjvbdRosgKFdX +DoCjjvbdzoQQeDMY +DncKjvbdZyEJmcMS +DoDLKvbdOFDshiLE +EPDKjvbdSQUGiedX +EPCkKvbdTIyjRAAl +EObjjvbdxUmFRYkn +DncKjvbdmpZyWLYb +DoCkKvbdygZMANEw +DoDLKvbdhuZeWquC +EObkKvbdFyUuAcxC +DoCkKvbdiCPCeXQq +DncKjvbdsCFlkfkZ +EPCjjvbdNPwpvOHT +DoCjjvbdSPtGjGDw +DncLKvbdAMhZSvyx +EPCkKvbdWXJYWDdg +EPDKjvbdaogHDkzd +DoDLKvbdRosgKFcw +EPDLKvbdrRtjnKaN +DncKjvbdvBEZSoEh +DoDLKvbdmajXYOmu +DnbjjvbdfNFwHMjL +EPCkKvbdezuyEhtX +DoCkKvbdHffzZYYH +EPCkKvbdvAdYsOdh +EPCjjvbdhlFDnVDZ +DncKjvbdbiNKLFvx +DoDLKvbdMIalQxAS +EPDLKvbdGckWKBjK +EOcKjvbdvOszqKnt +DoCkKvbdraelkgKy +EOcKjvbdMgComPtk +DoDKjvbdOSsugFVQ +DoCkKvbdyNrhYTJD +EPCjjvbduDDVXWOo +DncLKvbdiCPDFXRR +DncLKvbdiGibyWKV +EOcLKvbdfNGXHNJk +EObkKvbdBhjakIej +EPCjjvbdxmrhXriD +DnbkKvbdJbibqKDY +DnbkKvbdSCDdkhyL +EPCjjvbdGFirOIsq +DnbkKvbdKVtfDeHJ +DoDKjvbdGKdrbhMu +DncLKvbdZLrETmlN +EObjjvbdjuvmcbXw +DncKjvbdQdDApRDr +EObkKvbdeATplwjG +DoCjjvbdZMRdUNkm +DoDKjvbdTqQoVVIN +EPCkKvbdOTTufeVQ +EPDKjvbdWRnXadlD +DncKjvbdZsiJYdSn +DoCkKvbdZLrDsnMN +DoDKjvbdEKHiuwjA +EPDLKvbdnBivxPOV +EPCjjvbdddnrCWbj +EOcLKvbdpssgSRkU +EPCjjvbdzdzOzdyp +EPCjjvbdZxcinClS +DoDKjvbdvAcySoEh +DnbjjvbdWHxWXfxz +DoDLKvbdCWzdJEpW +DoCjjvbdehLVqnRH +EObjjvbdEXxLstTl +EObjjvbdkMakzEfo +EPCkKvbdKaKflbXq +EPDLKvbdijFgjNYS +DoCjjvbdZsiIxdSn +DncKjvbdeATqNXif +DncLKvbdzoPqEblY +EObkKvbdLAjgNBwq +DncKjvbdUxgsykPO +DoDKjvbdaogGckzd +DncKjvbdFVxpPmJe +EOcLKvbdZLrDtNlN +EObjjvbdYNqAXuWU +DoCkKvbdEYYLstUM +EObjjvbdeFPSBwDK +DncKjvbdePEsKssr +DncKjvbdZjTHogCG +EPCkKvbdjKGHjNXr +DoCkKvbdNrtVgFVQ +DncLKvbdaMjaruNH +DoDLKvbdwjwEHzzG +EOcLKvbdTIzJqABM +DoDLKvbdliETqVSB +DoDLKvbdNrtVfdtp +DnbjjvbdZxdKNcMS +EPDLKvbdbUafxKsh +DoCkKvbdVrNxCFMD +DoCkKvbdxZgefYEr +DoDKjvbdYTLaMsoY +DncKjvbdeAURMwif +EOcLKvbdNGcPmQVL +EPDKjvbdqceJQOVa +DncKjvbdRotHKGEX +DoCjjvbdwNWAMdFN +EPCkKvbdFyVVAcwb +DoDKjvbdmozYvKyC +DncKjvbdSPsgJecw +EPDKjvbdZtJJYcrn +EOcLKvbdGckWKCJj +DoDKjvbdkxrrSxft +DnbjjvbdRbDdlIxk +DncKjvbdyYJJbPyk +DnbjjvbdhgJcYvKV +EObkKvbdjcLjqHUg +EObkKvbdhgJbyWKV +EObjjvbdrovPKCvG +DoCkKvbdbBVdepQX +DnbjjvbdUVkojTaR +EPCkKvbdbUagYLUI +DoDLKvbdptUGqqkU +DoCjjvbdyTNhlqag +DncKjvbdEYXlTssl +EPCkKvbdXFxytAOs +EOcLKvbdNdctIhkE +EPDLKvbdkDMLRGuH +EPDLKvbdDihJuxKA +EOcLKvbdrafNMHLZ +EPDLKvbdbKlFoODA +DncLKvbdZLqcsnMN +DnbjjvbdznpRFDLx +DncLKvbdziuQPdSt +EPCkKvbdbrcKsdKB +DncLKvbdaMkCTUmH +EPDLKvbdYkqdUOLm +DoDKjvbdjhHLfGNk +DoDLKvbdZMSDtNlN +DnbjjvbdZjTHpHCG +DoCkKvbdemFvgNKL +DncKjvbdrRtkOLAm +EPCjjvbdyNrhXsIc +EObjjvbdgPazwDwh +DoDKjvbdRDcAoqDr +DoDKjvbdvvkaWBWV +EOcKjvbdZRMdiNFR +EPCkKvbddePRawCj +DoCkKvbdHDjvKBij +DnbkKvbdZirgpGbG +EOcKjvbdhbPCeWqR +DnbkKvbdNPwpvNfs +EPCjjvbdZirhPfbG +EOcLKvbdIGgZxwxH +EPCkKvbdrykosBHn +DoDKjvbdxnTIYShc +DnbjjvbdNsTvGduQ +DncLKvbdBcpAvJlf +DnbjjvbdlqxtysDi +DoCkKvbdOEdTiIjd +DncKjvbdfHkVrOQg +DoCkKvbdiHKDYvKV +DoDKjvbdOTUVgFUp +EObkKvbdaaVdfPow +DncLKvbdZHXEAPTJ +DnbkKvbdkIHLefNk +DnbkKvbdjEjfuPAO +EObjjvbdhtzFWqtb +DoDLKvbdSQTfjFdX +DncLKvbdHEKvKBjK +DncLKvbdHDkVjBij +EPDKjvbdRpTfiecw +DnbkKvbdiBncEwQq +EObkKvbdRadEkhyL +EPCkKvbdezvYdiTw +EOcKjvbdaMjasUlg +EObkKvbdczZPwyQb +EPCjjvbdTvMQJtAq +EPCjjvbdJXtCIMRQ +DoDLKvbdkDMKpftg +EPCjjvbdiVZdvqtb +DnbkKvbdtunXipsA +DoCjjvbdjJehKNYS +DnbjjvbdJvUeceHJ +DoDKjvbdKRZdoFme +DncLKvbdJcKCpjCx +EPDKjvbdmbKXYPNu +DnbjjvbdkIHLeenL +EPDLKvbdNPxQunHT +DnbjjvbdUtMtFkvK +EPDLKvbdsPvPJcWG +EObjjvbdMRvlzVQz +DoCkKvbdsQWOjDWG +DnbjjvbdXGZZtAPT +DnbjjvbdunszpkOt +DncKjvbdxZhFfXdr +DnbjjvbdRzJgsCvA +EPCkKvbdSCDdlIxk +EPDKjvbdREDBPqES +DnbjjvbdBvzdIdov +DoDLKvbdSLYetfkT +EObjjvbdKWVGDeHJ +DoCjjvbduDDUvuoP +EOcLKvbdWIYWXgYz +DoCjjvbdbhmJjfWx +EPDKjvbdIxUCILpp +EOcLKvbdeXzTsrFz +EPDLKvbdsBemLgKy +EPCkKvbdzjVPpDrt +DncLKvbdZyDimbkr +DnbjjvbdRNYBxmtz +EPCkKvbdvOszpkPU +EObkKvbdSQTfiedX +DncKjvbdZRNFIldq +DoDKjvbdbhlijfXY +EObkKvbdEzspeLcJ +EPCjjvbdKCicRJbx +EOcLKvbdOYOuzcnU +DoCkKvbdhkddOVDZ +DncKjvbdIxTahMQp +EOcLKvbdwygeexFS +EPCjjvbdKRZeOeme +EPDLKvbdgPazvcxI +DncKjvbdfNFwHMik +EOcLKvbdtkwvaTaX +EObjjvbdURQnuVIN +DnbkKvbdiBncFWqR +DncLKvbdaMkCStmH +EPCjjvbdZjSgogBf +DoDKjvbdMowpvOGs +EPCkKvbdsrqsZZdc +DnbkKvbdRpTfjFdX +EOcKjvbdaMjbTVMg +EOcLKvbdmgExMmfy +DncKjvbdCJLCLJGK +DoCkKvbdNeDshiKd +DnbkKvbdGLFSbgmV +EObjjvbdMtrrLNAX +EOcKjvbdpedEsvAh +DoDKjvbdcyxpXyQb +EObkKvbdxZhGGXdr +DoCkKvbdEztQdlCi +EObkKvbdijFgilxS +EPDLKvbdkHgMFenL +EOcLKvbdlrYtysDi +DncLKvbdjcLjpgVH +DoCjjvbdnVVZkKRf +EPDKjvbdFeirNhsq +DnbkKvbdjblLRGuH +EPDLKvbdtTSTZZeD +DoDKjvbdVBCRTRSZ +DncKjvbdTYLMNzjx +DoCkKvbdEztQdkcJ +EObjjvbdpfEFTuaI +DncLKvbdYSlAmUPY +DncKjvbdYpldiNFR +DncLKvbdWXIwvDdg +DoDLKvbdeXyssrFz +DncLKvbdqdEhonVa +EOcLKvbdNQYRVnGs +EObjjvbdRpTgKGDw +DoDKjvbdauCHXkUI +DoDLKvbdhficZViu +DnbjjvbdzoPpeCkx +DoCkKvbdJYTaglQp +DoDKjvbdnBiwYPNu +EOcLKvbdMJCLqYAS +EPCjjvbdYkrDsnMN +EPCkKvbdehKvRmqH +EObkKvbdVqmxCFMD +DncKjvbdrDeJPmvB +EPDLKvbdzaAOgHCM +EOcLKvbdNPxQvNfs +DncLKvbdFVxopMie +EPDKjvbdgQBzwDwh +EObjjvbdTfzmkvvF +EPDLKvbdUaBprpqy +DoCkKvbdnGdxNOGy +DncLKvbdfIKurOQg +EPCkKvbdKDJcRKCx +EPCjjvbdmJEUQuSB +DncLKvbdrafNMGjy +EOcKjvbdZxdKNbkr +DnbkKvbdJmADzGuB +EPCjjvbdQvmdDMID +DnbkKvbdemGWgNJk +DncKjvbdyfxlAMdw +EPCkKvbddtAUATNW +DncKjvbdcasMrATm +DoDKjvbdVhYVxHYz +EPCjjvbdhyuFkpmf +DoDLKvbdcbTMrATm +EPCkKvbdILaznXRL +DoDKjvbdRDbaQQcr +DncKjvbdijFgjNYS +EObkKvbdIMBznXRL +EPCjjvbdxVNEpyLn +DncLKvbdYkqctOMN +EOcKjvbdxrmiNSBg +EPDLKvbdtTRsYzFD +EOcKjvbdzjVQQDsU +EPCjjvbdZMRctNlN +DncKjvbdXrlAmTnx +EOcLKvbdbPgGdLzd +EPDLKvbdFfJqmhsq +EOcLKvbdyzdmqgiI +DoCjjvbduCbtvuoP +DncLKvbdNGcPlpVL +EPCjjvbdGBOpyJzm +EPCkKvbdRDcBPpcr +EOcLKvbdRbEFLhyL +EOcLKvbdePFTLTsr +EObkKvbdcTCkUDjB +DnbkKvbdrWokbhxq +DncLKvbdqUTfrRjt +EOcLKvbdRyihTDWA +EObkKvbdpxnhHQdY +DnbkKvbdrSUkOKaN +DoCjjvbdIGgZyYXg +DoDLKvbdMowqWNfs +DoDKjvbdUxgtZkOn +EObjjvbdUtNTelVj +EObjjvbdlqxtyrdJ +DncKjvbdkVvnDbYX +EObjjvbdePFTKssr +DoCkKvbdMuSrLNAX +EOcLKvbdnQZyWLZC +DoDKjvbdhgJcYujV +DoDLKvbdaMjasVMg +EPCjjvbdcScLUDia +DnbjjvbdbKkeoNcA +DnbkKvbdfpBzwEYI +DoCkKvbdBhkBjhej +DnbjjvbdkDMLRGtg +EObkKvbdeATqNXjG +EOcKjvbdFkFSbglu +DnbjjvbdznpQdcMY +DncLKvbdIidAJpHE +DoCjjvbdLZQirzuG +DnbjjvbdzjUopDrt +EOcLKvbdnUuZjiqf +DoDLKvbdwyhFeweS +DoCkKvbdaoffckzd +EObkKvbdzaAPGgCM +EObkKvbdEzspdkcJ +DnbjjvbdDjHiuxKA +DnbkKvbdVqmxBdlD +EOcLKvbdrJAKFMne +EOcKjvbdZjSgofbG +EPCjjvbdfMfWgNJk +DoCkKvbdTukpJsaR +DoCjjvbdySmiNSBg +DnbkKvbdzGyMANFX +EObkKvbduWNxKQsA +DoDKjvbdRkZFuHLT +DncLKvbdbKlGOmcA +DncLKvbdyNsIXsJD +DnbkKvbdMpXqWNfs +DoCkKvbdHEKujBjK +DncLKvbdDxXktTsl +EPCkKvbdACrYJyiQ +EOcKjvbdqUUHSRjt +DoDLKvbdOFDsiJLE +EObkKvbdrbGMlGjy +DoCjjvbdjblKpgUg +EPCkKvbdiHJcYujV +EPDKjvbdrDeJQNvB +EPDLKvbdbrbkTdJa +DnbkKvbdNeDtIhkE +DnbkKvbdcJNKKevx +EPCjjvbdxVNFQxkn +EObjjvbdhyuGLqOG +EOcKjvbdrafMkfkZ +EObkKvbdRkYetgKs +DnbjjvbdUWLoitBR +DoCjjvbdQvmcblID +EOcLKvbdDoDLLXCd +DncLKvbdzRPMiJwA +DoCkKvbdsZkoraHn +DoDKjvbdkHgMGFnL +EObkKvbdrbFmMGjy +DnbkKvbdRWnDbkhD +EPDKjvbdJbicRJbx +DncKjvbdGZUuAcwb +DoCjjvbdmfdwmNfy +DoDKjvbdBdQAujNG +EPDLKvbdwWlAuaVu +DncLKvbdxmrgxSiD +DoCkKvbdUsmUFkuj +EOcKjvbdcTDKsdKB +DnbjjvbdjcLkRHVH +DoDKjvbdbiMijewY +EPCjjvbdPyNAHSrK +DnbjjvbdFkErcINV +EPDKjvbdZQldhmFR +EPDKjvbdTJZjRABM +EOcKjvbdKaKgMaxR +DoCjjvbdwzHefYEr +DoDLKvbdDwxLtUUM +DoCkKvbdfILWRmpg +DoCkKvbdRyihTCvA +DoDKjvbdSQUGjFcw +DoCjjvbdEYXktUTl +EPCjjvbdoznEKxPA +EPDLKvbdSiZiqABM +EObkKvbdVUNUFkuj +DncKjvbdMfbpNQUk +DncLKvbdEvYopMie +DnbjjvbdMowpvNgT +DncLKvbdKjaHvAKZ +DoDKjvbdqmZjZMIJ +EObjjvbdGcjuibJj +DoDLKvbduLwvaTaX +DoCkKvbdHgHZyYYH +EObjjvbdEOcKjwCd +EPCjjvbdGckWKCKK +EObkKvbdEuyQQMie +DnbjjvbdHgGzZYYH +EObjjvbdVUMsekuj +EObkKvbdWWiXucdg +EPDKjvbdRWnECkgc +EPDKjvbdxZgefYFS +DnbkKvbdEuyPomKF +EPCjjvbddePSCXCj +DoDKjvbdUsltFlWK +DnbkKvbdbsDKtEJa +EObkKvbdmoyyWLZC +DoDKjvbdSCDeMJZL +DnbkKvbdwtleRYkn +EPDLKvbdJpzEnfNe +DncKjvbdZisIQGbG +DoCjjvbdiUzEwRtb +DncKjvbdrounicVf +DncLKvbdmIdURVRa +DoDKjvbdYSlBNUPY +DnbjjvbdKDKDQibx +DoDLKvbdnCJvwoOV +EPDKjvbdgFlZmfgA +DoDKjvbdTukojTaR +DnbjjvbdVAbQsQqy +EOcLKvbdtAHRIABS +DnbjjvbdmbJvwnnV +EOcKjvbdvBDxrneI +DnbjjvbdeJirWUzn +DnbjjvbdKeegaaQu +DnbjjvbdzQoMiKXA +DnbjjvbdxwiJbPyk +EPDLKvbdKNADzHUa +DoCkKvbdANHyTXZx +EObkKvbdxLXDgzyf +EOcKjvbdpxoHgQcx +DncKjvbdLBKflawq +EPDKjvbdhanbdwQq +DnbkKvbdEASIlyvw +EPCkKvbdwzHfGYEr +EOcLKvbdqZPHgQdY +EPDKjvbdqTtGqqjt +DoCjjvbdDxXksssl +DoDKjvbdQlwayNtz +EOcKjvbdTvLoitAq +DnbkKvbdirzhsKiz +EPDKjvbdyzeORghh +DncLKvbdmJDsqVRa +DncLKvbdKefICAqV +EOcLKvbdZnmheFZj +DoDKjvbdIxUCILpp +DncLKvbdxsOIlrBg +DoCkKvbdiVZdvqtb +EPDLKvbdbBWEfQPw +EObkKvbdsCFllGkZ +EObkKvbdNdctIiKd +EObjjvbdozmcjwoA +EPDLKvbdlhdTqUqa +EOcKjvbdbUagYKsh +DnbkKvbdJpydoGOF +DnbkKvbdnGeYMmfy +DncKjvbdtlXwBUAw +DncKjvbdqiAJdlne +EPCkKvbdMIakqYAS +DnbkKvbdCWzchdov +EObkKvbdelewHNJk +EPCjjvbdFpASvgFy +DoDLKvbdVrNxCFMD +DnbkKvbdMpYQvNfs +EPCkKvbdEObkKwDE +EPDLKvbdHDjuibJj +EPCjjvbdKaLHMaxR +DoDKjvbdakLfOmcA +EPDLKvbdMgDQNQVL +DoCjjvbdEvYpQNKF +EPDKjvbdrEEhpOVa +EOcLKvbdOFDsiIjd +DncKjvbdtTSTYyeD +EObjjvbdQvnDblHc +DoDKjvbdVrNwbElD +EPCjjvbdZMRdUNkm +DoCjjvbdhfibxujV +DnbjjvbdYpmFJMeR +DncLKvbdDihKVxKA +DoCjjvbdrNZjYkgi +EOcLKvbdYqNFImEq +DoDLKvbdJbjDQjCx +DoDKjvbdwygefXeS +DncLKvbdUyHsykPO +DncLKvbdJSyBTMxM +EPDKjvbdcImKKfXY +EPCjjvbddndsLTtS +DoDLKvbdEASIlzWw +EObjjvbdrylQTAgn +DoDKjvbdFkFTChMu +DncLKvbdUaCQrprZ +DnbjjvbdOFEThhjd +EObjjvbdlYsRrxgU +EPCkKvbdnGeYNOGy +DoDKjvbdwygefYEr +DoCjjvbdGckViajK +DoDKjvbdSZjITDWA +EObjjvbdkWXNdCXw +EPCkKvbdKjaIWAJy +EObkKvbdKkBIWAKZ +DoDLKvbdptTfqrLU +DoDKjvbdPxmAGsRj +EObkKvbdTvMPitBR +EPCkKvbdegjvSOQg +DoDKjvbdwNWANEEm +EOcLKvbdRNXbYmtz +DoDKjvbdEOcKjwDE +EPDLKvbdfMfXHMik +DoCkKvbdWHwvXfxz +EPCjjvbdelfWgNKL +EPCjjvbdqcdiQOVa +DncKjvbdkyTSTZGt +DoCkKvbdbAueFpPw +EOcKjvbdQwNdClHc +DnbjjvbdxmsIYSiD +EPDKjvbdCTAbtFwS +DncLKvbdJpzFOeme +EOcKjvbdiZuGLqOG +DncKjvbdKaLHMaxR +EPDLKvbdbiMjLFvx +EPCkKvbdjvXODaxX +EOcLKvbdOAJSsirA +EPDKjvbdqYnhHQdY +DoCkKvbdDwwlTtUM +DnbkKvbdRjxfVHKs +EObjjvbdzjUpPcrt +EOcLKvbdeUAUATNW +EObkKvbdQlwaxmtz +EObkKvbdEXxLtUUM +EObkKvbdYkrETmkm +DoCkKvbdxmsHwsIc +DoDKjvbdzjUoocrt +EPDKjvbdqGEFTuaI +EPCjjvbdbiMjLGXY +EPDKjvbdfpBzwEXh +DncKjvbdZeYGzhJC +DoCjjvbdFkEsCglu +DncKjvbdOFDshhjd +DncKjvbdZMRcsnMN +EPCkKvbdrEFJPnVa +DoCkKvbdcyyPxYpb +EPDLKvbdijGIKMwr +DoCjjvbdbAudepQX +DncLKvbdFejSOItR +EOcKjvbdSLZGVHLT +EPDKjvbdMJBkpxAS +DncKjvbdJXsaglQp +DnbkKvbdjcMLRHVH +DoCkKvbdFjeTCgmV +DnbjjvbdqUTfrRkU +DnbjjvbdznoqFCkx +EObkKvbdVqnYBeLc +DoDLKvbdaMjbTVMg +DoCkKvbdSQUHKFdX +DoCjjvbdrDdhomua +DncLKvbdcTCjsdJa +DoCkKvbdsCFlkgKy +EPCkKvbdmbKWwnmu +DoCjjvbdZQmFImEq +EPCkKvbdyXiKCPzL +EOcLKvbdKQzEnenF +EPCjjvbdrbGNMGjy +EPDKjvbdgGMZnHHA +EOcLKvbdfHjuqnRH +EOcLKvbdFeirNiUR +DoCjjvbduaEZSoFI +DncKjvbdbAudfPow +DoCkKvbdbiMikFwY +DoDLKvbdcyxpYYqC +DnbjjvbdpxoHfpdY +DncKjvbdqUTgRqjt +DoDKjvbdcImKKfWx +DnbjjvbdmfeYNNfy +EPCjjvbdIjEAJofd +EObjjvbdLBKgNCXq +EObjjvbduLxWaUAw +DnbjjvbdJTZBTNXl +DoCkKvbduaDyTOeI +EOcLKvbdUyIUZkPO +EOcLKvbddePRawCj +EPDKjvbdhbObeWqR +EOcKjvbdBdQAvJmG +EOcKjvbdkVwODaww +DnbkKvbdUVkoisaR +DnbkKvbdMoxQvNfs +EObjjvbdCJKbLIfK +DncKjvbdYpmFJNEq +DoCjjvbdjKFhKMxS +DnbjjvbdZLrEUNlN +EPDKjvbdwuNFRZMO +EObjjvbdjuvnECXw +EPCkKvbdlZTSTZGt +DoCjjvbdsQVoJcWG +DncLKvbdmJETqVSB +DnbjjvbdjggLfGOL +EObjjvbdxwiKBpZk +DoDLKvbdKDKCpjDY +EPCjjvbdzRPNIjXA +DoCkKvbdkaMoNALA +EPCkKvbdjvWnDaww +EPCkKvbdSBcdkiZL +DnbkKvbdbUbHXkUI +EOcKjvbdURROtuHm +DncLKvbdJmAEZgVB +DoDLKvbdDxYLsssl +DncKjvbdWRnXadlD +EPCjjvbdADSXiyhp +DnbkKvbdNGcPlouL +DnbjjvbdBsAcTevr +EObjjvbdWWhwvDeH +EOcLKvbdbUafxKsh +DoCkKvbdtcCuXWOo +EOcKjvbdbKkennDA +EPDLKvbdGcjujBjK +DoDKjvbdRWmdDMHc +EPCkKvbdmSZUyrdJ +DoCkKvbdLZRKSztf +DncKjvbdZQmFJNFR +EPDLKvbdjhGkefNk +DncKjvbdeATpmYJf +EPCkKvbdDjHivXjA +EObjjvbdFyVVBEXb +DncKjvbdIHHZxxXg +DnbjjvbdMoxQvNfs +EObjjvbdlYsRsZGt +EOcLKvbdZHWdAPTJ +DoCkKvbdoznDjwoA +EOcLKvbdYpmEiNEq +EOcLKvbdfMfWgNJk +DnbjjvbdjlalZeGo +EPDLKvbdVgxVxGxz +DoDKjvbdZRMdiMeR +DnbkKvbdNsUVgFUp +EObjjvbdNGcPmPuL +EPDLKvbdrSUjnKaN +DncKjvbdMgDPmQUk +DoDLKvbdRkZGUfkT +EOcLKvbdpxoIGqDx +DoCkKvbdVwIxVcdg +DoDKjvbdZQmFIleR +EPDKjvbdZshiZDrn +EPCkKvbdFWZPpNJe +DnbkKvbdcImKKfXY +DoCkKvbdiVZeWqtb +EPCkKvbdkxsSSyHU +EObkKvbdcSbkTdKB +EOcKjvbdFxttaEYC +EPCkKvbdhtzEwSVC +EOcKjvbdLAjgNBwq +DoCkKvbdZisHofbG +DoDLKvbdIsYaTNYM +EPDLKvbdADRxJzIp +DoDKjvbdTkuoAvOi +EOcLKvbdZRMeJMdq +EPDLKvbdWWiXvDdg +DnbjjvbdbsDKscjB +DnbkKvbdtlXwBUBX +EPCjjvbdmgFXlmgZ +EObkKvbdjmBlZeGo +EObkKvbdmgEwmOGy +DoCjjvbdtlXwBTaX +EPDKjvbdSiZiqABM +EPDLKvbdEXxMTssl +EPCkKvbdRWmccLhD +DncLKvbdrWpMDJZR +EPDLKvbdelfXGlik +EOcLKvbdFjdsChNV +EPCkKvbdVUMtFkuj +DoDLKvbdtkxXBUBX +DncLKvbdMgDQNPtk +DnbkKvbdMJCMQxAS +EOcLKvbduWOYJpsA +EPCjjvbdZxcimcMS +DoDKjvbdqrUjmkAm +EObjjvbdRzJgsCvA +EOcLKvbdiBoDFXRR +EPCjjvbdSPtHKFcw +DncKjvbdbBVeGPpX +DnbjjvbdRotGiedX +DoDKjvbdIHGzZYXg +DnbjjvbdiGjCyViu +EPCjjvbdSxKkmzjx +EPCjjvbdmajWwoOV +DnbjjvbdmbKWxPNu +EObkKvbdCTBCsfXS +DoCjjvbdKQzEnfOF +EPCkKvbddijRutzn +EObkKvbdFjeTCgmV +DnbjjvbdURQnuUhN +DnbkKvbdiCOcFXRR +EObkKvbdJutfEEfi +DncLKvbdhtydwRuC +DoCjjvbdcTCjsdJa +DnbjjvbdzoPqEcMY +DoDLKvbdSCDdlJZL +EOcKjvbdlhctQuSB +EPDKjvbdOFETiJKd +EObkKvbddZyQYZQb +EOcLKvbdrMyjYlHi +DoDLKvbdqrVLOLBN +DncKjvbdyNsHwriD +EObkKvbdQvnECkgc +DnbkKvbdznopeClY +DoCkKvbdCJLBjiGK +EOcLKvbdauCGxKtI +EPCjjvbdeFOrCWcK +DncLKvbdcSbjtDia +DnbkKvbdKWVGDdgJ +EPDKjvbdrDdiQNua +DncLKvbdqTtGqrKt +DoDKjvbdjJfIKMwr +DoCkKvbdkxsSTZHU +EObkKvbdFejSNhtR +DoDKjvbdnCKWxOmu +DoDLKvbdvBDySneI +DncKjvbddZxpXyRC +EPDKjvbddwzTsqez +DoDLKvbdLFfIBaQu +DncLKvbdwzHeewdr +DncLKvbdOFEUJJKd +DoDLKvbdEvZQQMie +EPDLKvbdWHxVwgYz +DoCjjvbdiGjCxujV +EPDKjvbdrovPJcWG +DoDLKvbdZxcjOCkr +DnbjjvbdRzJgsDWA +DoDLKvbdiZuGLpnG +DncLKvbdTukoitBR +DnbkKvbdnBiwXnnV +DoDKjvbdBvzdIdov +EObkKvbdRWnECkhD +DoCkKvbdRbDeMJZL +DncKjvbdiGjDYujV +EPCkKvbdNdctIiLE +EPCjjvbdKWUfDdfi +EOcKjvbdkIGlGGNk +EPDKjvbdGZVVBDxC +EObkKvbdXsMBNUOx +EObjjvbdANHxrvyx +EPDKjvbdZtIhyDrn +DoCkKvbdRWmdCkgc +EObkKvbdffLynGgA +DoDKjvbdIxTahMQp +DncKjvbdKQzFPGOF +DoDKjvbduDCtwWOo +EOcKjvbdnCJvxOmu +DoCjjvbdEJgivXjA +DncKjvbdemGWgMjL +DncKjvbdCDpBVjMf +DncLKvbdmoyxukZC +EOcLKvbdtkwwBTaX +DoCkKvbdLqwMzUpz +DncLKvbdqFdFUWBI +EPDLKvbdZyEJmblS +EOcKjvbdEzsqFMCi +DoCkKvbdcarmSATm +DncLKvbdFfJqmiTq +DncLKvbdKQzEoGNe +DoCjjvbdUaCRTRSZ +EOcLKvbdqZOhGqEY +DoCkKvbdZisIQGaf +DoCkKvbdeFOrBwCj +DoDLKvbdmIctQtqa +EObkKvbdxVMdqYkn +DncKjvbdwygfFxFS +DoCkKvbdRWnEDLhD +EOcKjvbdmRyUyrci +DoCkKvbdWXIwvDeH +EPDLKvbdRXODcLgc +DoDLKvbdBsBDUGWr +EOcKjvbdEvYopNJe +DoCjjvbdBvzdIdov +DoCkKvbdyzeNrIJI +EObkKvbdCJKbKhej +EObjjvbdQccBQQcr +DnbkKvbdxZgeewdr +DoDKjvbdqcdhpNua +DoCjjvbdeJjSVtzn +DncKjvbddneTKssr +DnbjjvbdZxcjNbkr +EPCjjvbdZisIPfaf +EPCkKvbdkyTRrxft +DncKjvbdVwIxVcdg +DncLKvbdIxTagkpp +EPCjjvbdbrbjtEJa +DncKjvbdkCkjqHUg +DoCkKvbdUxgsyjnn +EObjjvbdUaCRSprZ +DnbjjvbdMJCLpxAS +DncLKvbdliEUQuRa +EPCkKvbdANHxrvzY +EPCjjvbdeAURMwjG +EPDKjvbdZoOIeEzK +DoDKjvbdmuVZkJqf +DncLKvbdaNLCTUlg +DoCkKvbdnQZxvLYb +DncLKvbdhficZWJu +DncKjvbdatbHYLUI +DoCjjvbddndrjtUS +EOcLKvbdsBfMkgKy +DnbjjvbdBiKakIfK +DnbjjvbdSQTfjFcw +DoCjjvbdmoyxvKyC +DoCkKvbdGcjuibKK +DnbkKvbdZQldiMeR +EObkKvbdqquKnKaN +DoCjjvbdZRNEhldq +EPCjjvbdBiKbLJFj +EPCjjvbdyXhjCPyk +DncLKvbdtTSSxzEc +EPCjjvbdnCJwXnmu +DoDLKvbdbBWEfQPw +EOcLKvbdemGXHNKL +DoDLKvbdmfdxMnGy +EOcLKvbdTqQntthN +EOcLKvbdrMyixlIJ +EOcLKvbdVUMselWK +EOcLKvbdBvzchePv +DoCjjvbdbVCHXjsh +EPCjjvbdZRMdhleR +EOcLKvbdhbObeXRR +EPCkKvbdFWZPpMie +DncLKvbdXFyZtAOs +DnbkKvbdTqQoUuHm +EPCjjvbdCSaDUFvr +DoDKjvbdQZNAHTSK +EOcLKvbdmoyyVkZC +DoCkKvbdGLErbhMu +EOcLKvbdtvNwjRTA +EObkKvbdFjdsDINV +EOcKjvbdeOdsLUUS +DncKjvbdMtrrKmAX +EObkKvbdBsBCtGWr +EOcLKvbdVBCRTRSZ +DoDKjvbdKQydoFme +DncLKvbdnHFXmOGy +DnbkKvbdGAnqYizm +EOcLKvbdjlakzEfo +EOcKjvbdegkWSOQg +DoCjjvbdtkwwAsaX +EPCkKvbdeKKSWUzn +EObjjvbdrRtjnLBN +EPCkKvbdeATqMxKG +DnbkKvbdZMRdTmlN +DoDKjvbdNsUWGeVQ +EObjjvbdyXiKBpZk +EOcLKvbdJKEAJpHE +DoDKjvbdzQoNJJwA +DoCkKvbdwygeewdr +EObkKvbdsCGNMHKy +EOcLKvbdlhdUQuRa +EObjjvbdyNsHwsIc +DoDLKvbdWRnXbFLc +EObjjvbduCcUvvPP +EOcLKvbdrEEhonWB +EPCjjvbdRjyFtgKs +EPCjjvbdkNCLzFGo +DoCkKvbdRDbaPpcr +DoDKjvbdQdCaQQdS +DncKjvbdwyhFexFS +EPDLKvbdBhjakJGK +EPDKjvbdaNKaruMg +EObkKvbdzQnliJwA +DnbjjvbdptTfrSLU +DoDKjvbdFWZPpNJe +EObkKvbdZxcjOCkr +DoDKjvbdehLWRnQg +EOcLKvbdcSbkUEKB +EObjjvbdbUafxLTh +EObkKvbdBcpAvKNG +DoDLKvbdySmiNSBg +DncLKvbdmIdUQuRa +EPCkKvbduDDUvuoP +DoDLKvbdMtrqjmAX +DoDLKvbdVZHtZkOn +EOcLKvbdiZuGLpnG +EOcKjvbdxmrgxShc +DoCjjvbdMpYQvNfs +EOcKjvbdCIkCKiFj +EPDLKvbdaaVdepPw +EObkKvbdXFyZtAOs +EPDLKvbdbKlFnnDA +DncLKvbdqGEFTuaI +EOcKjvbdqFcdsvAh +EPCkKvbdcSbkUDjB +DncKjvbdrJAJeMoF +EObjjvbdZMRdUNkm +DncKjvbdCEPaVjNG +DnbjjvbdptUHSSLU +EPCkKvbdUtNTekuj +DoCkKvbdVqmwadlD +EObjjvbdCIkBjiFj +EOcLKvbdbVCGwkUI +EObjjvbdFfKSNiTq +EPDKjvbdJXtCHlRQ +EPDKjvbdTvMQJtBR +EPCjjvbdZMRdTnLm +EPCjjvbdemGXGljL +EPDKjvbdxmsHxTJD +EOcKjvbdiVZdvrVC +DnbkKvbdmSZUzSdJ +EPCkKvbdUaCRTRSZ +DncLKvbdoAKztIDn +EObjjvbdHffyyXxH +EPCkKvbdaMjbStmH +EObjjvbdZyDinDMS +DoDKjvbdjlbMZdgP +DncKjvbdQwOEDMHc +DncLKvbdGLFSbgmV +EPCkKvbdjvXOECXw +DoCkKvbdSBceLhyL +DoDLKvbdEvYpPmKF +EOcKjvbdrbFlkfkZ +EPDKjvbdTvMQJsaR +DncLKvbdjvXNcaxX +DnbkKvbdijGIKNXr +EOcLKvbdiHJcZViu +DoCjjvbdlqxuZsDi +DnbkKvbdhuZeXRtb +DncLKvbdACqxJzJQ +EObjjvbdjlbLydgP +EPDKjvbdxZgefXdr +EOcKjvbdSCEFLiYk +EObjjvbdKefICApu +EPDKjvbdjlbLyeGo +DncLKvbdbAvEepQX +EPCkKvbdrSVKnLAm +DncLKvbdZjTHpHBf +DnbkKvbdCWzdIdov +DoDLKvbdxUmFQyLn +DnbkKvbdxVNFRYkn +DoCkKvbdZisHpHCG +DoDKjvbdwkXEHzzG +DoCjjvbdSPtHJedX +EOcLKvbdBiLBkIej +DoCkKvbdiLdcnVCy +DnbkKvbdlhcsqUqa +EPCjjvbdwzIGFxEr +EPCkKvbdySmiNRag +DncLKvbdHEKujCKK +EPDLKvbddeOrCXDK +DoDLKvbdNGbolpUk +EOcLKvbdtlYXBTaX +EOcLKvbdqwQLcIyR +EObjjvbdIrxaSlxM +EObjjvbdbrcKtEKB +EOcKjvbdpxngfqDx +DoDLKvbdKfFhCApu +DoDLKvbdJvUfEEfi +DncKjvbdsQWOibuf +DoCjjvbdHgGyxxXg +DoCkKvbdZHWdAPTJ +DncKjvbdauBgYLTh +DoDLKvbdJYUCIMRQ +DncKjvbdbrbjtEJa +DnbjjvbdemFwHNJk +DnbkKvbdBvzcheQW +EPCkKvbdJqZePGNe +EPCkKvbdSKxeuGkT +EPDLKvbdIryBTMxM +EPCjjvbdwWlAuaVu +EOcLKvbdyTOJNRbH +EPCjjvbdQvmdClID +DnbjjvbdyTOJMqag +DncKjvbdrXQMDJYq +EPCkKvbdGdLVjBij +EOcLKvbdjJehJmXr +DnbkKvbdCJKakJGK +DoCjjvbdLrWlzUpz +EPCkKvbdhzVFlRNf +DoCjjvbdRDcApRES +EObkKvbdzROmJKXA +DncKjvbdxUmFRYlO +EPCkKvbdURQoVVIN +EPDLKvbdVZHtZkPO +DnbkKvbdatafwjsh +EObjjvbdNrtWGdtp +DoDLKvbdBiLCLJFj +EOcKjvbdmgFXmOHZ +EObjjvbdZRMeImEq +DoCjjvbdiMEdNtcZ +DnbjjvbdgFkzNfgA +DnbjjvbdGKdsDHmV +DncLKvbdIxUBhMRQ +DoDLKvbdjSzhrjiz +DoDLKvbdpyPHgRDx +DoDLKvbdqYoIGpdY +DoCkKvbdUQqPUuHm +EPCkKvbdBraDTfXS +DncKjvbdNrtWGeUp +DncKjvbdJqZdnenF +EPCjjvbdCWzdIePv +DoDKjvbdrXPlDIxq +EPDKjvbdauBgYLUI +EPCjjvbdQmXbYnUz +DoCjjvbdGGJqnJUR +EPDLKvbdkVvnEBww +EPCjjvbdTukoitBR +DoCjjvbdRkZFtgLT +DoDKjvbdEuyPpMie +EPCkKvbdSLYfUgLT +DnbjjvbdIwtBglQp +DnbkKvbdznpQeDMY +EOcKjvbdznpRFCkx +EPDLKvbdtumwjQsA +DoDLKvbdBhjajiGK +DoDKjvbdhlFDmuDZ +DnbkKvbdqquKnKaN +DncLKvbdMowqVmfs +EOcKjvbdqrUjnLAm +EObjjvbdqwQMDIyR +EPDKjvbdnCKXYPOV +DnbkKvbdHffyyXxH +DoCjjvbdlZSrTZGt +DoDLKvbdznpRFDMY +EPDKjvbdWWiXvDdg +DoDKjvbdRWnEClID +DnbjjvbdJcKCqKDY +EPDKjvbdJbjDQicY +DncLKvbdhaoDEwRR +DncLKvbdvAdZSoEh +DncLKvbdeEnrCWbj +DoDKjvbdVvhwvDeH +EOcKjvbdVAapsQqy +EPCkKvbdxnTIYSiD +EPCkKvbdrouoJbuf +EObjjvbdePEsKtUS +EPDLKvbdirziSkJz +DnbjjvbdhaoCdvqR +EPCkKvbdGZVVAdYC +DncKjvbdtbbuWuoP +DoCkKvbdLFehCBRV +DoDKjvbdLZRJrztf +EObkKvbdkHflGFmk +EOcKjvbdJYUCIMQp +EPDLKvbduCcVXWOo +EPCkKvbdptTfqqkU +DoDKjvbdGQATWgGZ +DncKjvbdEztQeMCi +EObkKvbdZtJJZETO +DoCjjvbdZsiIyETO +EObkKvbddndrjstS +EOcLKvbddeOqbXDK +DnbkKvbdCTBDUGXS +EPDKjvbdQlwayOUz +EPCjjvbdlqyUzTEJ +DoDLKvbdhtydvrUb +EOcKjvbdlZTSSyGt +EOcKjvbdmJDtQuSB +DnbjjvbdtSqsZZeD +DoDLKvbdUaBpsRSZ +EPDKjvbdLGFhBaRV +DnbkKvbdSBcdkhxk +DoCjjvbdDoDKkXDE +DoDKjvbdwyhFfYFS +EPDKjvbdOEctJIjd +EPCjjvbdEObjkWcE +EPDLKvbdhtzEvquC +EObkKvbdZjShQHCG +EPCjjvbdmIctQuRa +EPCkKvbdVwIwucdg +EOcLKvbdADRxJzJQ +EOcLKvbdWWiXvEEg +EPCjjvbdTAFIhBoE +EPDLKvbdZLqdTnMN +EPDLKvbdZQldhmEq +EOcKjvbdLLBIWAJy +DncLKvbdrMzKYlIJ +EPCjjvbdzitoodSt +EPDLKvbdLFehCAqV +DoCkKvbdrMyiyMHi +EPDKjvbdkVvmcaxX +EOcKjvbdmpZxvKxb +EPCkKvbdliDtRUrB +DncLKvbdkxsRsYft +EPDKjvbdTqROuVHm +EPCjjvbdSQTgJedX +EPDLKvbdHlBznXRL +DncKjvbdQdDBQRDr +EPDLKvbdliDsqVRa +DoDKjvbdjgflFfOL +EPDKjvbdeEoSCWbj +DnbkKvbdfSBWzkcP +EObkKvbdmIcspuSB +EPCjjvbdvAdZTPEh +DoCkKvbdIGfyxwxH +DnbjjvbdWWiYWDeH +EObkKvbdZQleImFR +DncLKvbdQwNdCkgc +EOcLKvbdQdDBPqES +DnbjjvbdrpWPJbuf +DoCkKvbdTulQKTaR +DoDLKvbdeUAUASlv +EPCjjvbdZQmFJNEq +DncLKvbdVBBqSqSZ +EOcKjvbdqceJPmvB +DncLKvbdZtIiYcrn +EOcLKvbdJSxaSmYM +DoCkKvbdqqtkOLBN +EObkKvbdgFkymfgA +DnbjjvbdVqmwadlD +DncLKvbdsBfNMGkZ +EPDKjvbdEPDKjwCd +EObjjvbdHDjvKBjK +DncLKvbdCTAbsevr +EObkKvbdFxuUaEXb +DoCjjvbdcyyQYZQb +EObjjvbdZsiIxdSn +EPDLKvbdZQmEhmEq +DnbkKvbdxnTIXriD +DncKjvbdfHkVrORH +EOcKjvbdddoSCXDK +EPCkKvbdhanbdvpq +EOcKjvbdRyihTDWA +DnbjjvbdajkeoODA +EOcLKvbdlhdTpuSB +EPDLKvbdhgJbxuiu +EPCjjvbdnHFXmNgZ +EPCkKvbdpecdsvAh +DnbkKvbdVZIUZjnn +DncKjvbdbAvFGPpX +DnbjjvbdkMalZeHP +EOcLKvbdYSlAmUOx +DoCjjvbdHDkWKCKK +EPDLKvbdaRecHsek +EPCjjvbdJXsagkqQ +EObjjvbdRMwbZNtz +EPCkKvbdrbGMlHKy +DncLKvbdKfGICApu +EPDLKvbdUtNTfLvK +EPCkKvbdMJCMRYAS +EOcLKvbdCJKbLJFj +DoDKjvbdfpBzvcxI +EObkKvbdYpldhmFR +EOcLKvbdSPsfiecw +DoCjjvbdHEKvKCKK +DnbjjvbdUGzmkwVe +DnbjjvbdfMfXGmJk +DnbkKvbdZoOIeEyj +EObkKvbdZnmhdeZj +EOcKjvbdTkuoBVoJ +EPCjjvbdGKdsChMu +DoDLKvbdJYTahLpp +EPCjjvbdbhmJkFwY +DoDLKvbdkIHMGGOL +EPDKjvbdZsiIxdSn +EPCjjvbdMgCpNQUk +DncLKvbdjblKqGtg +DncLKvbdOYOuzdNt +DncKjvbdTvMPjTaR +EPDLKvbdiiehKNXr +DoCjjvbdZdxGzghb +DoDLKvbdeOdsKssr +DoDLKvbddBsMrAUN +DoCkKvbdxxIjBozL +DoDKjvbddoErkUTr +EOcLKvbdwzIFeweS +DoDLKvbdREDBQRES +EObkKvbdhlEdOUby +DoCjjvbdNPxRWNgT +DoDLKvbdZLqctNlN +EObjjvbdbUbHXkUI +DnbkKvbdhtydwSVC +EPDKjvbdeUAUASmW +EObjjvbdhgKDYvJu +EOcLKvbdZnmhddyj +DoDLKvbdUVlQKUAq +DoDKjvbdDihJvXjA +DnbkKvbdZLrETmlN +EPCjjvbdxxJJbQZk +EPCkKvbdrounjDVf +DoCjjvbddiirVtzn +DoDLKvbdmttyjiqf +DncKjvbdfHjvSNpg +DoCjjvbdmRxuZsEJ +DoCkKvbdjAQGaQGj +DncLKvbdnVUzLJrG +EPCjjvbdLAjgNCXq +DoDLKvbdqmZixlHi +EPDLKvbdVUMsekvK +EPDKjvbdrMzKZMIJ +EPCkKvbdKDKCpicY +EOcLKvbdwtmEqZMO +EPDLKvbdmgFXlnGy +DncKjvbdyTNhlqbH +DncKjvbdnHFXlnHZ +DoDLKvbdTqROuUgm +DoDKjvbdRMwbZOUz +EPDKjvbdRMwbYmtz +DoDKjvbdZnmheEyj +EPCkKvbdbBWEfPow +DoDKjvbdQwNccLgc +DoCjjvbdhtzFWqtb +DoDKjvbdRotHKGEX +DncKjvbdZsiJZETO +EObjjvbdaNKbStlg +DoCkKvbdsZlQTAhO +EObjjvbdjhGlGGNk +EObkKvbdQdDBQQcr +DoDKjvbdMtrrLNAX +EPCjjvbdRotHKGDw +EPCjjvbdqZPIGqDx +EOcLKvbdiGicZViu +DnbjjvbdJvVGEFGi +DoCkKvbdKNAEZfuB +EPDLKvbdLZRJrzuG +DnbkKvbdhytfLpnG +EPDKjvbdRbEEkiYk +EOcLKvbdcJMjLFvx +DncKjvbdFfKRnItR +DoDLKvbdegjurORH +DnbjjvbdEPDKjvcE +EPCjjvbdkHgLeenL +DncLKvbdZnmheEzK +DncKjvbdZjSgpHCG +DoCkKvbdbBVdeoow +DoDLKvbdZQmEhleR +EPDLKvbdpxoHfpcx +EPCkKvbdSPtGjGEX +DncKjvbdRbDeLhxk +EObkKvbdrpWOibvG +DnbjjvbdfIKurNpg +EPDLKvbdZyEKNbkr +DoDLKvbdwXMAvBWV +EOcLKvbdWWiXvDdg +EOcKjvbdelfWfljL +DncLKvbdjuvnEBxX +DncLKvbdliDspuRa +EObjjvbdVTlsekuj +DoCjjvbderAvzlDP +EPDKjvbdNeDtIhkE +Dnbjjvbddwyssqez +EObkKvbdGGKRnItR +DoCkKvbdHbLzEzAD +EPCkKvbdTvMPjUBR +EObjjvbdTAEiIBoE +DoCjjvbdRjxfUgLT +DnbkKvbdnUuZkKRf +EPDLKvbdjmBkydgP +EObkKvbdNeDsiIjd +DncKjvbdrounjDWG +DnbjjvbdrWokbhxq +DoDLKvbdsPvPKDWG +DncKjvbdZdwfzgiC +EOcLKvbdZLqdUNlN +DoCjjvbdkDMLRHVH +EPDKjvbdirziSjiz +EObkKvbduDDUvuno +DoDLKvbdkHgMGGOL +DncLKvbdhkdcmuCy +EObkKvbdCJLCLIej +DnbkKvbdeFPRawCj +DncKjvbdsQVoKDVf +EPDLKvbdRXNccLhD +EObkKvbdFxttaDxC +EObkKvbdqrVKnKaN +EPCjjvbddoEsKtUS +EObjjvbdzaAOffbM +DoCjjvbdWSNxBdlD +EPCjjvbdqlzKYlIJ +EOcLKvbdQdDApRDr +DncKjvbdczZPwyRC +EOcLKvbdtlXwBUBX +EOcKjvbdmgFYNOGy +DoCjjvbdKVtfEFGi +EObkKvbdrNZjZLgi +EOcKjvbdliETqVSB +EOcKjvbdbVBgXkUI +DncLKvbdNHDPmPtk +DnbjjvbdjlakzEfo +EOcKjvbdVUNTfLvK +EPDKjvbdTXjkmzjx +DncLKvbdrylQTBIO +EPCkKvbdJpzEoGOF +DncKjvbdFeiqmhtR +DncLKvbdZnnJFFZj +EPDLKvbdlrZUzTEJ +EPDKjvbdLFfICBRV +EPCjjvbdcyxpXyRC +DoDLKvbdQdCaQQcr +DncLKvbdZsiJZDsO +EObjjvbdzQoNIjXA +DncLKvbdVqmxBdlD +DoDKjvbdRjxfUgLT +EObjjvbdWIYVxHYz +DoCkKvbdIGfzZXxH +DncKjvbdxsNhlqag +DoDKjvbdFWYopNJe +EPDKjvbdVBCRTRSZ +EPDKjvbdwyhFfXeS +DoCjjvbdziuPocsU +EPDKjvbdYSkaNUPY +EObjjvbdznopdcLx +EOcLKvbduMYWaUBX +EPDKjvbdnPzZWKyC +EObkKvbdZxcimbkr +EObkKvbdBhjbKiFj +EOcLKvbdjuwNdBww +EPDKjvbdmbKWxOnV +DoCkKvbdnHFYNNgZ +DoDLKvbdrMzKYkhJ +EOcLKvbdqdFIpNvB +EPDKjvbdcScKtDjB +EOcLKvbdygZMAMdw +EOcLKvbdsCGNLgLZ +DoDLKvbdaMkBsUlg +DncKjvbdlZSqsYft +DnbkKvbdnVUzLKRf +DoCkKvbdnHFXlmgZ +EPDKjvbdxZgfGYFS +DoCkKvbdxwiKCPzL +DnbkKvbdBcpAvKMf +DoCjjvbddZyQXxpb +DncLKvbdzQnmIjXA +EPDKjvbdFWZQQMjF +DnbjjvbdMgDQMpUk +DncLKvbdOFDtIiKd +DoDKjvbdKNAEZfta +EOcKjvbdhyuGMQmf +DnbjjvbdZnmhdeZj +DncLKvbdhbOcFXRR +EOcLKvbdvBEZSoEh +EOcKjvbdYkrEUOLm +EPCkKvbdNrtWGduQ +EPDKjvbdZjSgpHCG +EObkKvbdyzdmrHhh +DoDLKvbdznpQdblY +DncLKvbdZshhyDrn +DnbkKvbdjvWmdCYX +EOcLKvbdAMgxsWzY +DnbjjvbdwzIGGXdr +EPDKjvbdrNZixlIJ +DoDKjvbdsQWOicVf +DoDKjvbdjuvmdBxX +EObkKvbdzHZMANFX +DoDLKvbddjJqutzn +EOcKjvbdwNWAMdFN +DnbkKvbdTqRPUtgm +EOcKjvbdVYgtZkOn +EPDKjvbdNGcPlotk +DnbjjvbdJbjDRJcY +EPDLKvbdZtJIyESn +DoDKjvbdtcCuXVoP +DoCjjvbdZMSETmlN +DoCjjvbdgGLzNfgA +EPDKjvbdxKvcgzyf +EObjjvbdrMzKZMIJ +DncLKvbdMoxQumfs +EPCjjvbdbhlikFvx +DoDLKvbdRadFMJYk +DnbjjvbdHgGzYxYH +EObjjvbdVZHtZkOn +DnbkKvbdakLfPNcA +DoCjjvbdmfeXmOGy +DoDLKvbdrRtjmjaN +DnbjjvbdUxgsyjoO +DnbjjvbdbhlikFvx +EPDLKvbdRbEFMJYk +EOcKjvbdRXNcblHc +DnbkKvbdqmZixlHi +DoCjjvbdrzLpTBIO +DoCjjvbdILaznXRL +EPDLKvbdRjyGVGkT +EOcLKvbdehKurOQg +DncLKvbdYkrDsnLm +DoDKjvbdZisHpGaf +DncLKvbdpyPIGpcx +EOcLKvbdijFhKNYS +EOcKjvbdMuSqkNAX +EObjjvbdajlFnnDA +EOcKjvbduLxXAsaX +DnbjjvbdiiegjMwr +EPCkKvbdiMEdNuCy +EPCkKvbdqTtHSRkU +EPCkKvbdIryBTNXl +DncLKvbdFjdrcHlu +EPDKjvbdZoOIeFZj +DncLKvbdcbTNSATm +DoDKjvbddePSCWcK +DoDKjvbdZsiJYcsO +DoDKjvbdpeceTuaI +EOcKjvbdjhHMGFnL +EOcLKvbdjcLkRGtg +DnbjjvbdCJLCKiFj +EPDLKvbdZsiIxdSn +EObkKvbdVTlsekvK +EObkKvbdCTAcTewS +DoDLKvbdOYOuzcnU +EPCkKvbdiUydwRuC +DncLKvbdGQATXGey +EPDLKvbdDjIJvXjA +DncKjvbdpxoIHQdY +EObkKvbdZMSDsmkm +EOcLKvbdBvzchdov +EOcLKvbdKRZeOenF +DnbkKvbdwzIFfYEr +DnbkKvbdSKyFuHKs +EPDKjvbddCSlrATm +EObkKvbdSCDeMIyL +EPCjjvbdsCFllGjy +DnbjjvbdHgGyyYYH +DncKjvbdjKFgilwr +DncLKvbdEvYoomJe +EObkKvbdlhdTpuSB +DoDKjvbdWWiYVceH +DnbjjvbdLGGHbBQu +EObkKvbdOXoVzcnU +DnbjjvbdbsCjtDjB +DnbjjvbdQwOECkhD +DnbjjvbdMgComQVL +DoCjjvbdRotGjFcw +DnbjjvbdmajWxOmu +EPCkKvbdbPfgDkzd +Dnbjjvbdpxngfpcx +DoCkKvbdBraCtGWr +DncKjvbduDCtwWPP +EPDLKvbdYzcFrKVy +EObjjvbdbVBgXkTh +DnbkKvbdyYIibPyk +DncLKvbdUVlPitAq +EObkKvbdbKlGOnDA +DnbjjvbdrJAKFNPF +EPDLKvbdLAjgMbYR +DoCjjvbdSxLLmzjx +DncKjvbdeEnqawCj +EObkKvbdFWZQPmKF +EOcKjvbdGdKvJbJj +DnbkKvbdjcLjqHUg +EPCjjvbdQvnDcLgc +EPCkKvbddoFTLTtS +DnbkKvbdZtIhyDrn +EPDKjvbdBvzdIdpW +EObjjvbdEYYLstUM +EPCkKvbdyzdnSHiI +EObjjvbdZLqdTmlN +EPDLKvbdIHHZyXwg +DoCkKvbdbVBfxKtI +DnbkKvbdMpYRWOGs +EOcKjvbdczYoxYqC +EPCjjvbddwytTqez +EPCjjvbduaDySoEh +EObkKvbdTJZiqAAl +EObjjvbdmoyyWLYb +EPDKjvbdnPyxukZC +EObjjvbdrWolDJZR +DoCkKvbduCbtvvPP +EPDLKvbdJbicQibx +DncLKvbdHELVibJj +DnbjjvbdKefHbAqV +DncLKvbdsZkpTBHn +DoDKjvbduCcVXWOo +DnbkKvbdidkGtoAO +DnbjjvbdrEFIonWB +EPCkKvbdfpBzwEYI +DncLKvbdwuNFRZMO +EPDLKvbdrounjCvG +DncLKvbdxxJJaoyk +EPCjjvbdJmADzHUa +EPDLKvbdqGEFTvBI +EPDLKvbdyOShYTJD +EPCjjvbdJutecdfi +EPDLKvbdIMBznXQk +DncKjvbdmoyxvKyC +EPDLKvbdrXQMChyR +DoCkKvbddwytUSFz +DncKjvbdZjTHofbG +EPDKjvbdGcjujCJj +EPCkKvbdvBEYsOeI +DncKjvbdCTAcUGWr +EPCkKvbdmbKWwnnV +DnbjjvbdpxnhHREY +EObjjvbdlZTRsYft +DoCjjvbdhkdcmtcZ +EObjjvbdMfcPmPtk +EPCkKvbdJXtCHkpp +DnbjjvbdrSUjmkBN +EOcLKvbdYSlBMtOx +EObjjvbdznopdbkx +DncLKvbdddoSCXDK +DoCjjvbdOXnuzcnU +EPCkKvbdZGwEAOsJ +EOcKjvbdauCGwjtI +EPDLKvbdNHDPmPuL +EOcLKvbdNHCpMpUk +DoCjjvbdmSYtysDi +DncKjvbdFjeTDINV +DncKjvbdNrtWHFUp +EPCjjvbdmJETqUqa +DncKjvbdEzsqEkcJ +EOcLKvbdmoyyVjyC +EOcLKvbdZMSETnMN +EOcLKvbdBsAbtFvr +EPCjjvbdJutfEFHJ +DoCkKvbdiBoDEwRR +EPDLKvbdZQmFImFR +EPDLKvbdpfDdsuaI +DnbkKvbdmbKXYPNu +EObjjvbdjKGHjNXr +EOcLKvbdpssgSRjt +DoDLKvbdKRZePGOF +DnbkKvbdfekymgHA +DoDLKvbdiCOcFWqR +DnbjjvbdiHJbyWKV +DoDKjvbdsCGNMHKy +DoCjjvbdGKeSbgmV +DoDLKvbdkIGkfFnL +DncKjvbdfILWRnRH +DoDKjvbdGLEsChNV +EPCjjvbdVrNxBeMD +EPDKjvbdSLZGVHKs +EPDLKvbdQlxByOUz +EOcLKvbdMgDQNQVL +DoDLKvbdrRtjnLAm +EObjjvbdCIkBjhfK +DncKjvbdDwwlTssl +DoDLKvbdANIYsWzY +DnbjjvbdxVMdqYkn +DoCkKvbdzdynzdzQ +DnbjjvbdxsNhmRag +EObjjvbdzjVQPcrt +DoCkKvbdbBWFFopX +EPDKjvbdhfibxvKV +DnbkKvbdegjvRmqH +EPCjjvbdkNCMZdgP +EOcLKvbdmtuZkJqf +EObjjvbdemFvfljL +DncLKvbdyYIibPyk +EObjjvbdieKftoAO +DncKjvbdvOszqKoU +DncLKvbdVUNTelWK +EOcKjvbdCDoaWKMf +EPCkKvbdbsDKtDjB +EPDLKvbdmSYuZsDi +DncLKvbdwWlBWBWV +EObjjvbdkVwOEBww +EObkKvbdWSNwbFLc +DnbjjvbdZRNFImEq +DoDKjvbdrounjDVf +EPDKjvbdCJKbKhej +DncKjvbdsrrTYyeD +DoCjjvbdQvnEDMHc +DoCkKvbdGQASwGfZ +EOcLKvbdfSBWzkbo +DoDLKvbdRkZGVGkT +EOcKjvbdyXhjCPzL +EPCkKvbdbrbkTdJa +EPDLKvbdsQVnibvG +DnbjjvbdpyOgfpdY +DoDLKvbdtunXiqTA +EPDKjvbdqGDdsvAh +DncKjvbdjEkHUoAO +EPCjjvbdGQATXGfZ +EOcKjvbdKDJcRKCx +DncKjvbdhyuGMQnG +DoCkKvbdYkrDsnMN +DoCjjvbdaNKbSuMg +EOcLKvbdrykpTAhO +DnbkKvbdrSUkNkAm +EPCjjvbdwzHeeweS +DoDLKvbdSBdFMJYk +DnbjjvbdqUUGrRjt +DoDKjvbdzitoocrt +EPDKjvbdxnShXriD +DoCkKvbdVviXvEEg +EObkKvbdFxuUaDxC +EObkKvbdygZMAMeX +DnbjjvbdiifHilxS +EPDKjvbdZxcjODMS +DoDLKvbdWWhxWEFH +EPCjjvbdzoQQeClY +EOcLKvbdptUHRqjt +DoDKjvbdVviXudEg +EPDLKvbdUQpnuVHm +EPCjjvbdwzHfFweS +EOcLKvbdZxcjNbkr +EObkKvbdZnmhddyj +DoDLKvbdvlvANDdm +EOcKjvbdMfbolpVL +EObjjvbdbAvFFpQX +EOcKjvbdBdPaWJlf +DncKjvbdqceIonWB +DoCkKvbdtcDVWvOo +DoCkKvbddoFTKssr +DoDKjvbdaMkBruMg +EPCjjvbdEuyPolie +DnbkKvbdOEcsiJLE +DncKjvbdHlBznWqL +EPDKjvbdbhlijewY +EObjjvbdfoazwDwh +EOcLKvbdaNKbStlg +DoCkKvbdqdEiQOWB +DoCkKvbdTvLpKUBR +DncKjvbdkNBkzFHP +EObkKvbdFkErcHlu +DoCkKvbdZshiYcrn +EObjjvbdEJhJvYKA +DnbkKvbdOTUWHFUp +DoDLKvbdVhXvXfxz +EPDLKvbdBdPaWKMf +EObjjvbdFejRnJTq +EPDLKvbdULvPBVoJ +EPDKjvbdJzpFwdAN +EPDKjvbdqwPkbiZR +EPDLKvbdrEFIomua +EOcLKvbdijFhJlxS +DnbkKvbdYkrEUOLm +DnbkKvbdIMBznXQk +DncKjvbdZisHpHCG +EPDLKvbdzjUopESt +DnbjjvbdzjUpPcrt +EPDKjvbdqZOgfpdY +DoDKjvbduLxXAsaX +EObkKvbdrMyiyMHi +EPCkKvbdqTsfqrKt +DoDKjvbdTfznMXVe +EObkKvbddoErkUTr +EOcLKvbdHELWKCJj +DncLKvbdUVkpJtAq +EPCjjvbdRMxBxmtz +EPDKjvbdjEjftoAO +EOcLKvbdYkrDsmkm +DoDLKvbdajlFoNcA +DoCjjvbdmJDtRUqa +EPDKjvbdTqQoUuIN +DnbkKvbdtcDUvvPP +DncLKvbdrbGMlHLZ +DnbkKvbdKfGHbApu +DncLKvbdGFjRnIsq +EPDLKvbdJzpGYEAN +DoCjjvbdkySrSyHU +EObjjvbdKVtfDdfi +EPDKjvbdNrsugFUp +DoCkKvbdNxOuzcmt +DoDLKvbdDihJuxKA +DnbkKvbdzdzOzdzQ +DncKjvbdmSYuZrci +EOcLKvbdptTfqqkU +EPCkKvbdVUNTfLvK +DoCkKvbdGdKujBjK +DoCjjvbdzitopETU +DoDKjvbdqvokbiYq +EPDLKvbdGFjSOJTq +DoDKjvbdliETqUrB +DoDKjvbdZisIQGbG +DoCjjvbdnQZyWLZC +EOcLKvbdGdKujCJj +EPCkKvbdaRfDIUGL +EOcKjvbdauCHXjtI +DnbkKvbdbQHHDkzd +DoCjjvbddZxpYYpb +EObkKvbdbBWEepPw +DncKjvbdSLYfVGkT +EObkKvbdVgxVxHYz +DoCjjvbdfpBzwEYI +DoDKjvbdmfdxMmfy +DncKjvbdhancEwRR +DnbkKvbdEASJMzXX +EObjjvbdmfdwmNfy +DnbjjvbdhbOcFXQq +DoCjjvbdVgxVxGxz +EPCkKvbdQcbaQQdS +EPCjjvbdhbObeXRR +EPDKjvbdePFSkUTr +EPDLKvbdMoxQumgT +DoCkKvbdIBkydzAD +EOcLKvbdcasMrAUN +DoCkKvbdUQqOttgm +DnbkKvbdelevfljL +EObjjvbdZeXfzgiC +EPCjjvbdQYmAGrrK +EObjjvbdxZhGFxFS +EObjjvbdJuuGEEgJ +DoDLKvbdEARhlyvw +EPDKjvbdZdxGzhJC +DoCkKvbdzRPMhiwA +DoCkKvbdZxcinClS +EOcKjvbdFyVVBEYC +EOcLKvbdtbcUwVoP +DncLKvbdlZSrTYft +EObkKvbdaaVeGPow +DncLKvbdEKIJvXjA +DncLKvbdbhljKfWx +EObkKvbdVhYVxGxz +EPDKjvbdmpZxukZC +DoDLKvbdnBivxOnV +EObjjvbdRbEEkiZL +EPCkKvbdZRNFIleR +DoDLKvbdZyEJmblS +DncKjvbdkIGkefNk +EPDKjvbdRkZGVGjs +DnbkKvbdiHJbyVjV +EPDLKvbdFjeSbglu +DncLKvbdqFcdtVaI +EOcKjvbdGYuVAdYC +DoCjjvbduaEZSneI +DnbjjvbdKWVFdFHJ +EObjjvbdGdLVjCJj +DnbkKvbdpssgSSKt +DoCjjvbdssRryZdc +EPDKjvbdZisIQHCG +EOcKjvbdCIjajhfK +DoDKjvbdrafNMGjy +EObkKvbdgQBzwEXh +DnbjjvbdgQBzwDwh +DncKjvbdCEQAvKMf +EPCkKvbdiCOcFWpq +EPDLKvbdLFfHbBQu +EPCjjvbdJTYaSmXl +EPCjjvbdRjyFuGkT +DoCkKvbdjFKftoAO +DncKjvbdmaiwXoNu +DoCjjvbdVZITyjnn +DoDLKvbdDxYLtUTl +DnbjjvbdqvpLcJYq +EOcLKvbdlqxuZsDi +DoDKjvbdZshhyDsO +DoCjjvbdGFjSOIsq +DnbkKvbdcScKtEKB +EPCjjvbdMpXqVmfs +EPCjjvbduoTzpjoU +DoDLKvbdYkqctNkm +EObkKvbddoErjstS +DnbjjvbduLxWaUAw +DoCkKvbdRXODbkgc +DoCjjvbdwzIGFweS +DoCkKvbdZyEKOClS +EObjjvbdiGjCxvJu +EObkKvbdbiMijewY +DoDKjvbdqrVKmkBN +DoCkKvbdFyUuBEYC +DoDLKvbdNsTufduQ +DoDLKvbdEPCkKvcE +DoDLKvbdNQYRWNgT +DnbjjvbdNrtWGeUp +DoCjjvbdPxmAGrqj +EPDKjvbdKNAEZgVB +EPDKjvbdmttzKjSG +EPDKjvbdssSSxydc +DoCjjvbdTlWPAuni +EObjjvbdDHLegAzc +EObjjvbdXnRAXtvU +EObkKvbdKfFgaaQu +EOcKjvbdhtzFXSUb +EPCkKvbdJTZAsMwl +EOcKjvbdQYmAGsSK +DoCkKvbdjhHLeemk +EOcLKvbdiifIJmYS +EPDKjvbdLrWlzVQz +DoCjjvbdxsOIlrBg +EPDLKvbdNPxQvNfs +DnbkKvbdIGfyxwxH +DoCjjvbdjKFhKMwr +DnbjjvbddjKSVtzn +DoCjjvbdZoNiFEzK +EPCjjvbdeFOqavcK +DoDLKvbdEuxpQMie +EObjjvbdZjShQHCG +DoDLKvbdZMSDsmkm +DoDLKvbdGYtuBEYC +EPCjjvbdUaBprqRy +EOcLKvbdmozZWLZC +DncLKvbdUWLpKUBR +EPCjjvbdqYnhHQcx +DoDLKvbdUaBprpqy +EPDKjvbdrzMQSaHn +DnbjjvbdGdLWKCJj +EObkKvbdfILVrNqH +EPCjjvbdehKvRmqH +EPDKjvbdOSsvGeVQ +DncLKvbdxxJJaozL +EPCjjvbdZLqctNkm +EOcLKvbdZxcinCkr +DncLKvbdkWWmcbXw +DoDLKvbduCcVXWPP +DncLKvbdyTNhlqbH +DncKjvbdYTMAlsoY +DoCkKvbdRosfjFcw +EPDLKvbdDwxLsstM +EOcKjvbdlZTRryHU +DoCjjvbdNGbpMpVL +EOcLKvbdYgWdAOri +DoCjjvbdDxYLstTl +EObjjvbdIwtBglRQ +EOcKjvbdvPTzpkPU +DoCjjvbduLxXAtBX +DoCjjvbdiLeENuCy +DnbjjvbdUaCRSqRy +DnbjjvbdYpmEhleR +EObjjvbdsPvOjDWG +DoCkKvbdLFfICApu +DncKjvbddxZstRez +EPCkKvbdFyVVAdXb +DoCjjvbdFyVVBDxC +DoDLKvbdFeirNiTq +EPCjjvbdxnSgxTIc +EOcKjvbdAMgySwZx +EObkKvbdkyTRryHU +DoCkKvbdMRwMzUpz +DnbjjvbdCWzdJEov +DoCkKvbdUyITzLPO +EPCkKvbdcSbjsdKB +DoCkKvbdqceIonVa +DoCkKvbdjmCMZeGo +DncKjvbdfMewGljL +EObkKvbdpfEEtVaI +DoDLKvbdczZQYYqC +DoDLKvbdRNXbYmtz +EObjjvbdTvLojUBR +EPCkKvbdtbcVXWPP +DncLKvbdmSYuZrdJ +DoDLKvbdTukpKUBR +EPDLKvbdsQVoKCvG +EPDLKvbdBraCtFvr +EPDLKvbdZQmEiNEq +EPCjjvbdrzLosAgn +EPCjjvbdssRsZZdc +DncKjvbdbAudepQX +DncKjvbdcTDKscia +DncLKvbdlqyVZsEJ +EOcLKvbdbVCHXkTh +EObkKvbdYTMBMsnx +DnbjjvbdULvPAuoJ +DoCjjvbddtAUASlv +DoDKjvbdxUmEpxkn +DncKjvbdQwOEDLgc +DoCkKvbdSPsgKGDw +DncKjvbdiCOcFXQq +EPDKjvbdRkYfUfkT +EObkKvbdKCjDRJcY +DoCjjvbdZLqctOMN +EPCjjvbdUWLpKTaR +EPCjjvbdLqwMzVQz +DnbjjvbdnBivxPNu +EObkKvbdRpUHKFdX +EPCjjvbdeATqNXif +DoCjjvbdfILVrOQg +DoDKjvbdNrtVfeUp +EOcLKvbdNUrrKmAX +EPCjjvbdrbFllHLZ +DncKjvbdkDMLQgUg +DoCkKvbdVvhwvDeH +DnbjjvbdKeegaaRV +DoDKjvbdcJMjKfXY +DnbjjvbdZtJJYcrn +DoDLKvbdyqOliJwA +DoDLKvbdMgDPmPuL +DoCkKvbdHffzZXxH +DoCjjvbdZxdKNblS +EPDKjvbdkDLjqGtg +EPDKjvbdYzbeqjVy +DncLKvbdTppnttgm +EObkKvbdVYgtZjnn +EPCjjvbdzaAOgHCM +EOcKjvbdcyxoxZRC +EPDLKvbdxnSgxTJD +EObkKvbdfMfXHNJk +EPDKjvbdunszpjoU +EObkKvbdFfKRmhsq +EOcLKvbdhtydwRtb +DoDLKvbdYkrDsnLm +EPDLKvbdGGKSOItR +EPCkKvbduDCuXVno +EPDLKvbdrEFJQOVa +EPDLKvbdIjEAKQGd +EObjjvbdIryArmYM +DoDLKvbdYkqctOMN +EPCkKvbdiZtekqOG +DncKjvbdzdzOzeZp +DoDLKvbdbiNKLFwY +DnbkKvbdlhcsqUrB +DnbkKvbdKyRJrzuG +DoDKjvbdOFDtIiKd +DnbjjvbdvvlBWBVu +DnbkKvbdlrZUyrdJ +EObkKvbdxZgeewdr +DncKjvbdegkVrNpg +DoCjjvbdrJAJeNPF +EObjjvbdmfeXmOHZ +DoCjjvbdNPwqVmfs +DnbjjvbdnPzYvLZC +EPDKjvbdZshiYcrn +EOcLKvbdhgJcYvJu +DoDLKvbdXrlAmToY +DnbkKvbdwWlAvBVu +DnbkKvbdjvWnEBww +DoDLKvbdTYLLmzjx +EOcKjvbdDihJuxKA +DncLKvbdTfznLvue +DoCjjvbdVgwvXgYz +EObjjvbdsBfMkgKy +EPCjjvbdUaBqTQrZ +DnbjjvbdbhmJkGWx +EPCjjvbdLBLGmCYR +DoDKjvbdwjwEHzyf +EPDLKvbdegkVrNpg +DoCkKvbdJpzEnfOF +EPCkKvbdFejSOItR +DnbjjvbdTqQnuUhN +EOcLKvbdUMVoAvOi +EPCkKvbdSCEFLiZL +EPCkKvbdnCKXYPNu +EPDLKvbdZyEKNbkr +DncLKvbdZisIQGaf +EObjjvbdGLEsDHmV +DoCjjvbdBcpAujNG +EObjjvbdZRNFIleR +DnbjjvbdVrOXaeLc +EPCjjvbdHELViaij +EOcLKvbdqcdhpNvB +EPCkKvbdiZuFkqOG +DoCkKvbdOSsufeVQ +DoDLKvbduoTzpjnt +EOcLKvbdTqRPUuHm +DoDLKvbdCDpAuilf +EOcKjvbdZMSDsnMN +DoDLKvbdYqNFJMeR +DnbkKvbdbAvFFpPw +EOcKjvbdVqmwaeMD +EPCkKvbdUyHsyjnn +EPCjjvbdKeehBaQu +DoCjjvbdZshiYdTO +EObkKvbdTvMQJsaR +EPCjjvbdjblKqHUg +DnbkKvbdYlSDtOMN +EObkKvbdrWpMCiZR +EOcKjvbdUGzmlWue +DncKjvbdFyUuAcwb +EPCkKvbdLZQjSztf +EPCjjvbdfjfzbfAE +DncKjvbdFWZQQMie +DoCjjvbdVgxVxHYz +EOcKjvbdWWhxWEFH +DoDLKvbdUWLoitAq +DoDLKvbdzaAOffbM +EOcLKvbdrXPkbiYq +DoCkKvbdYzberKVy +DncLKvbdIMBznWpk +EPCkKvbdEPCkKwDE +DnbkKvbdWWiYVcdg +DoCkKvbdCWzchdpW +EOcLKvbdjvXNcbYX +EPDLKvbdSxLMNzjx +DnbjjvbdhficYuiu +DncLKvbdvmWAMdEm +EObjjvbduaDyTOdh +DncKjvbdwWlAvBWV +DoDKjvbdVviYWDeH +EOcKjvbdNsUWGdtp +DoCjjvbdzjVPodTU +EPCkKvbdmIcsptqa +EPDLKvbdIHHZxxYH +EPDLKvbdUyIUZkPO +EObkKvbdCDpBWJlf +EPDKjvbdWSNwaeMD +DoCjjvbdACrXjZhp +EPDLKvbdwuMdqYlO +DnbjjvbdHlBznWpk +DnbjjvbduaDyTPEh +DnbjjvbdwuNFRZLn +EObjjvbdajkfOnDA +DnbkKvbdWWiYWEEg +EPDLKvbdffLymgHA +EOcLKvbdkDMKpfuH +EPDLKvbdMoxQvOHT +DnbkKvbdbKkenmcA +DoCjjvbdhytfMRNf +DoCjjvbdIsZAsNXl +DoDKjvbdLiBkqYAS +DncLKvbdyzdmrHiI +DnbjjvbdemFvfmJk +EOcLKvbdSCEEkiYk +DoDKjvbdbiNKKevx +DoDLKvbdaaVdeoow +DnbjjvbdNGcQNPuL +DncLKvbdQYmAGrrK +EPDKjvbdrbGMkfjy +EPCjjvbdZjShPfbG +DnbjjvbdJmADyfuB +DnbjjvbdhtzFWquC +DnbjjvbdQvmdDMID +DncLKvbdjvWnEBww +EPCjjvbdxZgfGXdr +EObkKvbdDihKWXjA +EPCkKvbdZMSETnLm +EPDKjvbdZLqcsnMN +EObkKvbdqwPlDJZR +DoDKjvbdZisIQGaf +EObjjvbdjlalZeGo +DncKjvbdxsOJMqag +DoDKjvbdOFEUIhkE +DoCkKvbdzitoodSt +DncLKvbdVrNwaeMD +DoCjjvbdezuyEiTw +EPDKjvbdiCOcEvpq +DoCjjvbdvvlAvAvV +DnbjjvbdJuuFceHJ +DoCjjvbdlYrrSyGt +EPCkKvbdfILVrNqH +DoDLKvbdxsOJNRbH +DncKjvbdIwtBgkpp +DnbkKvbdOTUWHEtp +EPDKjvbdFejRnIsq +DnbjjvbdVBCRTQrZ +EPCjjvbdiMEcnUcZ +EObkKvbdiZuGMRNf +EOcKjvbdatbHYLTh +DoCkKvbdmSZVZrdJ +DoDKjvbdqTsgRqjt +DoDLKvbdCEQBWKNG +DnbjjvbdZtJJZESn +DncLKvbdIHGzZXwg +EPDLKvbdwtmFRZMO +DoCjjvbdKDJbqJcY +EObkKvbdatbHXkUI +DnbkKvbdYqNEhleR +EObjjvbdNHColotk +EPDKjvbdegkWSNpg +DoDLKvbdRjyFtfjs +DoCjjvbddoEsKtUS +EOcLKvbdsQWOjCvG +DoCkKvbdvAcxsOeI +EObjjvbdbAueGQQX +EOcLKvbdxKwEHzzG +DoDKjvbdqTtHSRkU +EOcKjvbdOAIsUKSA +EPCjjvbdWSNxCElD +EPDLKvbdnCKWwoNu +DncLKvbdEARiMzXX +DoCkKvbdbAvEeoow +EOcKjvbdhgJcYvJu +DnbjjvbdTulPisaR +DnbjjvbdIidAKQGd +EPDKjvbdyOTIXrhc +EPCkKvbdrbFmLgLZ +EPCjjvbddeOqbXDK +DncKjvbdRacdlJZL +EOcLKvbdbsDKtDjB +EPCjjvbdUyHtZkOn +EObkKvbdyTOImSBg +DncKjvbdtbbtwWPP +EPDKjvbdKDKDRJcY +EObjjvbdhanbeXQq +EOcLKvbdvvlAuaWV +EPDLKvbdVYgsyjoO +EPDLKvbdKaKflawq +EOcLKvbdCIjajiFj +EObkKvbdUsmUGMWK +EPDLKvbdIjEAJofd +EOcLKvbdqBJFAWhE +EPCkKvbdEJgivXjA +DnbkKvbdYkqdTmkm +EPCkKvbdliDsqUrB +EObjjvbdKVtfEEfi +EObkKvbdmgFYMmgZ +EObjjvbdEARhlyvw +DncKjvbdaRecHtGL +DnbjjvbdNQYRVmfs +EOcLKvbdFfKRnJTq +DncLKvbdMgDQNQUk +EObkKvbdHgGyyXwg +EPCkKvbdCJKbKiFj +EPCkKvbdBraDUGXS +EPDLKvbdiMEcnVCy +DoDLKvbdkCkkQfuH +EOcLKvbdwtmFRZLn +EPDKjvbdKefHbApu +DnbkKvbdkxrqsZGt +EPCkKvbdfIKvRmqH +EOcKjvbdDnbkLWbd +EPDLKvbdaRebhTek +DoDLKvbdjuwODaxX +DnbjjvbdREDBPpdS +DncLKvbdjuwNcaww +EOcKjvbdbiMjKevx +EPDKjvbdqvpLcIyR +EPCjjvbdijGIKMxS +EPDLKvbdQmYCZNtz +EObjjvbdCDpAvKMf +EOcLKvbdJJdAKPgE +DoDKjvbdUxgszLOn +DnbjjvbdOEcshhjd +DoCjjvbdUaCRSprZ +EPCkKvbdxmrhYTJD +EPDKjvbdICLydzAD +EPCjjvbdKRZdoFme +EObkKvbdNdctJIjd +EPCjjvbdKVuFdEgJ +EObjjvbdrXPlDIyR +DoCkKvbdfMewGmKL +DnbkKvbdIwsahMQp +EOcLKvbdRaceMIxk +EPCkKvbdcyxoxZQb +EObjjvbdRkYeuGkT +DncLKvbdbVBfwkTh +EObjjvbdTppoVUhN +EPCjjvbdhytfMROG +EOcKjvbdUxgszKoO +DoCjjvbdGLEsDHlu +EObkKvbdegkVqmqH +DncKjvbdkMbLyeGo +DncKjvbdyzdmqghh +EPCkKvbdGFiqnIsq +EPDKjvbdpstGqqjt +EPDKjvbdYkrDsmkm +EPCkKvbdKaLGlbXq +DoCkKvbdxwiJbPyk +EPCkKvbdJcKDQibx +EPCkKvbduDCuXWPP +DnbjjvbdiGicZWKV +DoCkKvbdsPunicWG +DnbjjvbdKNAEZgVB +EPDLKvbdnPyxujyC +EObkKvbdJXsagkpp +EObkKvbdNddUIiKd +DnbjjvbdQwOEClID +DnbkKvbdFVxpQMie +EPCkKvbdVrNxBeLc +EPCjjvbdUsmUGLuj +EPDLKvbdGZVVBDwb +DoCjjvbdmRyUyrdJ +DncKjvbddZxoxZQb +DnbjjvbdGKdsDINV +EObjjvbdrafNLgKy +DoCjjvbdJbjCqJbx +DnbjjvbdlYsSTYgU +DoCkKvbdQvnDblID +DoDKjvbdssSTYzFD +DncKjvbdmozZVkZC +EPDKjvbdjbkkRGuH +DoDLKvbdxmrgwriD +DoDKjvbdfHkVrORH +EPCkKvbdJuuFceHJ +DoDKjvbdcbSlrATm +EPCkKvbdeATpmXif +DncLKvbdBiKajhej +EPCkKvbdrNZixlIJ +EPDLKvbdKVteceGi +EObkKvbdzjVPodTU +DoDLKvbdWSNxCEkc +EOcKjvbdZxcimcLr +EOcKjvbdZnnIeEyj +DnbkKvbdmbKWxPOV +EPCkKvbdZLrETmkm +EPDKjvbdnUtyjiqf +DoCkKvbdrWpLcJZR +DoCkKvbdaMkCStmH +DncLKvbdFVxpQMie +EPCjjvbdrpWOicWG +EOcKjvbdyOTIYShc +EObkKvbdqrVLNkBN +EOcLKvbdQvnDbkhD +EOcLKvbdDigiuxKA +DncLKvbddoErkTtS +DoDKjvbdRWmdDLgc +EPCjjvbdiHKDZVjV +DnbkKvbdADSYKZiQ +DnbkKvbdsPunibuf +DoCjjvbdSPsfiedX +EPDKjvbdJmAEZfta +EOcKjvbdZMRcsnLm +DoCkKvbdiLddOUcZ +EObkKvbdqqtkOLAm +DoDLKvbdYpmFImFR +EObjjvbdVhYWXfxz +DnbjjvbdMowqWNfs +EObkKvbdVgwuwgYz +DoDKjvbdDxYLsssl +DnbjjvbdZtIiYcsO +DnbkKvbdxwiKBpZk +DoDKjvbdEuxpPmKF +EOcKjvbdJcKDRKCx +EObkKvbdUtNUFlWK +EOcKjvbdjhHLfFnL +DoCkKvbdSQTgKGDw +DncLKvbdQccBQRDr +DncLKvbdILazmwRL +DoDKjvbdYTMBNUPY +DoDLKvbdKaKfmCXq +EPCjjvbdkIHMGGOL +DnbjjvbdCIjbKhfK +DnbkKvbdVgwuwfxz +EPCjjvbdwtmFQxkn +EPDLKvbdcyyQYZRC +DoDKjvbdPyNAGsRj +EObjjvbdSLYetgLT +DoDLKvbdMRwNZuQz +DncKjvbdFjdrcHlu +DoCjjvbdZyDimbkr +DnbkKvbdRXNdClID +EObjjvbdEYYLtUTl +EObkKvbdVqmxBdlD +DoDLKvbdptTgRqkU +EOcLKvbdBdPaWKMf +EPCjjvbdiBncEvpq +DoDLKvbdzQoNJKXA +DoDKjvbdUQpoUtgm +DnbkKvbdrzLpTBHn +DoCjjvbdunszpkPU +EPDLKvbdSZjHsCvA +DncKjvbdRotHJfDw +DnbkKvbdFejSOItR +EOcKjvbdeFOrBwCj +DoDLKvbdkVwNdCXw +EPCkKvbdeOdrjtTr +EPCjjvbdhuZdwRuC +DnbkKvbdfILVqmqH +DncKjvbdnPzYvLYb +DncKjvbdHgGzZYXg +DncKjvbdkVwNcaxX +DoDLKvbdOAJSsjSA +DncKjvbdOFDtJIjd +EOcLKvbdVgwvYGxz +EObkKvbdsQVnjDWG +DoCjjvbdZjShQHCG +DncKjvbdzoPpeCkx +DoDLKvbdSLZFtfjs +DnbkKvbdBsBCtFvr +EOcLKvbdFyUuAcwb +DnbjjvbdqUTfqrKt +DoCjjvbdZxdJmcLr +DncLKvbdmbJwYPOV +EObjjvbdEObjkXDE +EOcKjvbdaSFcIUGL +EPCkKvbdqYoIHQcx +EOcKjvbdfNGWgMjL +DoCjjvbdbrcKtEKB +EPCkKvbdvBDxsOdh +DnbjjvbdtcCuXVoP +DnbjjvbdrpWPKDVf +EOcKjvbdwyhFfYFS +EPCjjvbdnPyyWLZC +EPDLKvbduMYXBUAw +DoDKjvbduaDySoFI +DoCjjvbdyXiKCPzL +DncLKvbdGFjSOIsq +DoDLKvbdeEoRbXDK +DncLKvbdcTCjtDia +DnbjjvbdnUuZjiqf +DnbjjvbdjlakzFHP +EOcLKvbdwWlBWAvV +DnbkKvbdWWiXuceH +EObkKvbdemGWfmKL +EObkKvbdmuUykJrG +DoCkKvbdmozYvKxb +DncKjvbdQZNAGsSK +EObjjvbdjblKpgUg +DncKjvbdSZigsDWA +EOcLKvbdZyEJmblS +DoCjjvbdnCJwYOmu +EPDKjvbdtkxWaTaX +EPDKjvbdGZUuAcwb +DoCkKvbdyfxlANEw +EPCkKvbdTAFJIBnd +DncKjvbdZLqctOMN +DncKjvbdUMWPBWPJ +EPCkKvbdDwwksstM +EPDKjvbdEObjjvbd +EObjjvbdWXJYWEEg +DnbjjvbdpaIeAXIE +DoCjjvbdqYoIHREY +DnbjjvbdvmWAMceN +EObkKvbdLFfHaaQu +EOcLKvbdpaIeAWgd +EPDLKvbdkCkkQgUg +DnbjjvbdePErkTtS +DnbkKvbdNGbomQVL +DoDLKvbdEPCjkWcE +DoCkKvbdehLWRnRH +EOcKjvbdyXhibQZk +EOcLKvbdZyEKOCkr +DoCjjvbdkDLkRGtg +DoDLKvbdkaNPNALA +EObkKvbdrWpLbiYq +DoDLKvbdfHkVqmqH +DoDLKvbdEOcLKwCd +DoDKjvbdrykpTBHn +DncKjvbdxZgefYFS +DnbkKvbdJpzFPFnF +DoCkKvbdNGcPmPtk +EPCjjvbdhzUelRNf +EObkKvbdVTltFlWK +DoCkKvbduaDxrneI +EObkKvbdSQTgJfEX +EOcKjvbdVhYVxHYz +EOcKjvbdkCkkQgUg +EObkKvbdqUUHSSLU +EOcLKvbduLwwAtAw +EPDKjvbdZLrETnMN +EObkKvbdmttyjjRf +DoDKjvbdYqMdiMdq +DoCkKvbdkNBkzEfo +DncKjvbdiLeDnUcZ +DoDKjvbdZLrDsnLm +EPCkKvbduVnYKRTA +EPCjjvbdCIkCLJFj +EPDKjvbdssRrxyeD +DncKjvbdQwOEClHc +EPCkKvbdwXLaWAuu +EPCkKvbdUyHszKoO +EPCkKvbdJYTagkqQ +DoCkKvbdwuNFRYlO +EPCjjvbdfHkWRmqH +EOcKjvbddeOqbXCj +EObkKvbdhficYujV +EPCkKvbdmSYtzTEJ +EPCjjvbdtkxWaTaX +EPDLKvbdwygfGYEr +EPDKjvbdmpZxvKyC +DoCjjvbdpstGrSLU +EPDKjvbdUtMtGLuj +EOcKjvbdjlbLzFGo +EObkKvbdkyTSTZGt +EOcLKvbdLYpjSzuG +EPDLKvbdyXhibQZk +DncKjvbdptUHSRkU +DnbjjvbdFfKRmhtR +DoCjjvbdtbcUwVoP +EPDKjvbdhyuFkpnG +EPDLKvbdFpASwHFy +EPCjjvbdRbDeLiYk +DncLKvbdXmqAYUut +EObjjvbdqlyjZLgi +DoCjjvbdssSTYydc +DnbkKvbdTIzJqABM +EPCkKvbdxsOJNRag +EPCjjvbdlhcspuSB +EObkKvbdqUTgSRjt +EOcKjvbdOEcshhkE +EObjjvbdzjUpPdTU +DnbkKvbdvwLaVaWV +EPCjjvbdmoyyVkYb +DoCkKvbdOFETiJKd +EPCjjvbdeEnqawCj +EObjjvbdmuUzKjRf +EPDLKvbdVvhxVdFH +EPCkKvbdaSGDHsek +EPCjjvbdkySrTZHU +EObjjvbdtAGqIABS +EObkKvbdZyEJmblS +DncKjvbdyTOJMrCH +DncLKvbdFWYoolie +DoDLKvbdTvMPjUAq +EObjjvbdZLqctOLm +DnbkKvbdmIctQuSB +DoCkKvbdZGvdAPTJ +DoCjjvbdkDMLRGuH +DoDLKvbdnVUykKSG +DoDKjvbdLGFhBaRV +DncLKvbdxwiKBozL +DncLKvbdWIYWXgYz +DncLKvbdFkFSbglu +DoDKjvbdIGgZxxXg +DnbjjvbdEztRFMDJ +DoDLKvbdZQldiNEq +EOcLKvbdwWkaWAvV +DoDKjvbdLBLHMawq +DoDLKvbdkMbLzFGo +EPDKjvbdREDAopcr +DoCkKvbdZoNiEdyj +EPDLKvbddneSkUUS +DnbkKvbdSQUHJecw +DoCjjvbdZshhxcrn +DnbjjvbdRkZFuHLT +EPDKjvbdwuNEqYkn +DoDLKvbdemGXGmJk +EOcLKvbdKWVGDeGi +DoCkKvbdWSOXadkc +EObjjvbdVTmTelWK +DncKjvbdhkeDmuDZ +EPCkKvbdRWnEDMID +DnbjjvbdNQYRVnGs +DnbkKvbdTfzmlWvF +DoCkKvbdFpASvgGZ +DoCjjvbdqTsfqqkU +EObkKvbdUVkpKUAq +DoDLKvbdrRtkNjaN +EPCkKvbdrJAKEmOe +DncKjvbdIGfyyYXg +DnbjjvbdZLrDtNkm +EObjjvbdiMEcmuCy +DncKjvbdkyTSTZHU +DncLKvbdBsAbtFvr +DnbkKvbdrpWPKDWG +DncKjvbdbBWFFoow +DoDLKvbdxmsIXsJD +DnbkKvbdehLWRnRH +EObkKvbdiVZeXRuC +DnbkKvbdOTUVfduQ +DncLKvbdZjTIQHCG +DoDLKvbdOSsugFVQ +DoCjjvbdrafNLgKy +EPDLKvbdNPxRVmgT +EPDKjvbdHlBznXQk +EPCkKvbdCEQBWKMf +EObjjvbdtcDUwWOo +DoCjjvbdZMSDtNlN +DoDLKvbdvAcxrneI +EObjjvbdIxUCILpp +EOcKjvbdfSBWzkbo +EObkKvbdShzKRAAl +DnbjjvbdGZUuBDxC +EObkKvbdqlzKYkhJ +EPDKjvbdZyEKNbkr +DoDLKvbdsrrTYzFD +DoCkKvbdfSAvzkcP +DnbjjvbdqlzKYlHi +EPDKjvbdYTLaNToY +EPCjjvbdjEjgUoAO +EOcKjvbdTJZjRABM +EObkKvbdYORAXtvU +DoDLKvbdGKdrcHmV +DoDLKvbdbrcLUEJa +DncLKvbdqvpLcJZR +DnbkKvbdFeiqnIsq +EPDKjvbdZnnIeEzK +EPCjjvbdnUtzLKRf +DoDLKvbdDxXlUUTl +DoDKjvbdiMEcnUby +EObkKvbdYzbeqjWZ +DncKjvbdTvLojUAq +EOcLKvbdjuvmdBxX +DnbjjvbdzoPpdcMY +DoDKjvbdrovOibuf +DoDKjvbdFWZPomJe +DoDKjvbdqGDeUWBI +DoCkKvbdWWiYVdEg +EObkKvbdtvOXiqTA +DnbjjvbdqZPIGpdY +EObkKvbdLBKgNCYR +DoCjjvbdLBKgNCYR +EObjjvbdZsiJZESn +DoCkKvbdTqROtuIN +EPCjjvbdyfyMAMdw +EOcLKvbdptTgSSLU +DncLKvbdPxmAHTSK +DnbjjvbdRkZFtfkT +EPDLKvbdtlXvaUAw +EPCkKvbdqBJFAWhE +EPCkKvbdIidAJogE +EPDLKvbdKQydoGOF +EObkKvbdauCGwkTh +EPCjjvbdNddUIiKd +DoDLKvbdFfKRmhsq +EPCkKvbdeEnqbXCj +EObkKvbdJvVGDdfi +DoDKjvbdWRmwaeLc +EObkKvbdSCDeLiZL +EPDKjvbdDoDLLWcE +EPDLKvbdiMEcnUby +DnbjjvbdLBLGmBxR +EPCjjvbdZnmiEdyj +EObjjvbdVhXuwgYz +DncLKvbdUtNTfMVj +EPDLKvbdKaKgMaxR +DncKjvbdJcJbpicY +DnbkKvbdSKyGVHLT +DoDKjvbdzROlhjXA +DnbkKvbdlrZUysEJ +DoCkKvbdnQZyWLYb +DoCjjvbdeFOqbWbj +EOcLKvbdjgfkfGOL +EObkKvbdiHJbyWKV +DnbkKvbdGdLVibJj +DoDKjvbdGLErcINV +EPCjjvbdNGcPlpUk +EOcKjvbdjFLGtoAO +EOcKjvbdsBfMlGkZ +EObjjvbdhtydvquC +DoCjjvbdznpRFCkx +DncLKvbdYSkaNUOx +DoCjjvbdVvhxVdFH +EPDLKvbdNeETiJLE +DoDKjvbdcScLTdJa +EOcLKvbdQwNdDLgc +DoDLKvbdUMWPBWPJ +DncKjvbdqFdEtVaI +EObjjvbdhbPCeXRR +DoCjjvbdKeehCApu +DncKjvbdYNqAXuVt +DoDLKvbdjmCLzFGo +DoCkKvbdtlXwBUAw +EObkKvbdwtmEqYlO +EObjjvbdrovOjCvG +EObkKvbdqrVLOLBN +DoCjjvbdSBcdkhxk +DncLKvbdrEEhomua +EObkKvbdtbbtvuno +EPDLKvbdZjShQGaf +EPCjjvbdTAFJHbPE +DnbjjvbdcScLTcia +EObkKvbdbsDLUDia +DnbkKvbdkyTSTYgU +DncKjvbdySmhmSCH +DoCjjvbdnBivxPNu +DncKjvbdEXxLtTtM +EObjjvbdZshhyESn +DoDKjvbdkMbLzEfo +EObjjvbdssRrxyeD +DoDKjvbdcSbkTdKB +EPDLKvbdHDjvJbKK +DncLKvbdsQVnjCvG +DnbjjvbdJSyBTMwl +EOcLKvbddZxpYYqC +EPCjjvbdrXQLcJZR +DoCkKvbdnHEwlmfy +EOcKjvbdGZUuBDwb +EObjjvbdvOszqKnt +EOcLKvbdRosgKFdX +EPCjjvbdMpXqWNfs +EPCkKvbdJbibqJcY +DncKjvbdJvVFdEgJ +EObkKvbdqwPkcIyR +DnbkKvbdDwxMUTtM +DncKjvbdtcDVXVno +EPDLKvbdlZSrSxft +DoCkKvbdKeehCApu +EPDLKvbdQlxCYmtz +EOcLKvbdYqNFJNFR +DoCkKvbdnCKWwoOV +EObjjvbdwzIFfYEr +EOcKjvbdkDMLQfuH +EPCjjvbdrSUjnLBN +EPCkKvbdTfznMXVe +EPCkKvbdZxdKNcMS +DoCjjvbdJXsaglRQ +DoCjjvbdNPwqWNgT +DoCjjvbdLqwMzUpz +EOcKjvbdCDoaWJlf +DnbjjvbdlYsRsZGt +DncKjvbdeOdsLUUS +EOcKjvbdEvZQPmJe +DoCkKvbdqBJFAXHd +DnbjjvbdtkwwBUBX +EObjjvbdLFfHaaQu +DoDLKvbdbLMFoNcA +EPDLKvbdiLdcnUby +DnbkKvbdUQqPVUgm +EOcLKvbdEOcLLXDE +DoDKjvbdrEEhpOWB +DncKjvbdkCkkQftg +DncLKvbdMfbpNQUk +DnbjjvbdTulQKUAq +DoDLKvbdUtNUFkvK +DncKjvbddndsKtTr +EPDKjvbdliDsqVSB +EPCkKvbdhbOcEvqR +DoCkKvbdqceJQNua +DoCkKvbdrWpLcIyR +DncKjvbdrSVLNkAm +DoDLKvbdyOShYTJD +DncKjvbdyYJKBoyk +DnbjjvbdZQldiNFR +EPDLKvbdePEsKstS +EPCjjvbdcScKtDia +DncLKvbdxsOJNRbH +EObjjvbdEYXlUUTl +DoCkKvbdxUldqZMO +EOcKjvbdRjxeuGkT +EOcLKvbdqrVLNjaN +DoCkKvbdDwwktUUM +EOcLKvbdZQmEiNFR +EPCkKvbdMSXMytpz +DnbkKvbdnUtzKiqf +DoCjjvbdREDAoqDr +EPCjjvbdZyDinDMS +EPCjjvbdiCPDEwRR +EPCkKvbdmSZUzSci +DoDKjvbdkWWmdCXw +DnbkKvbdmJDsqVRa +EPDKjvbdhzVGLpnG +DoCkKvbdsPuoKDWG +DoDLKvbdrylPsAgn +EPCjjvbdsPuoJbuf +EOcKjvbdrEFJQOVa +EPCjjvbdEPDLLXCd +DncKjvbdkVwOEBxX +EPCkKvbdqGEFUWAh +DncLKvbdtbcUvuno +EOcKjvbdWIYWYGxz +EPDLKvbdZLqcsmkm +DoDKjvbdmaivwnnV +DoCkKvbdOYPVzcmt +DoCjjvbdVwIwvDeH +DoCjjvbdYkrETmkm +DoDKjvbdLFfHbAqV +EObjjvbdkIHLefOL +EPDKjvbdZjShPfaf +DoCjjvbdehLWSORH +DncLKvbdKfFgbBQu +EObkKvbdsPunjDVf +DncKjvbdiMEdNuCy +DncKjvbdFfKSNhtR +EOcKjvbdFVxpQNKF +DncLKvbdfHkVrORH +EObjjvbdKefIBaQu +EPDKjvbduCbtvuoP +EPCkKvbdGdLWKCKK +DncLKvbdLAkGmBwq +DncLKvbdZshiZESn +DnbjjvbdySmhmSCH +DoDKjvbdACqxJyiQ +DncLKvbdmajXYOmu +DnbjjvbdxVNFRZMO +DnbjjvbdVqmxBdlD +DnbkKvbdIGgZyYXg +DncKjvbdddnrBvcK +EPCjjvbdUGzmkwVe +DncLKvbdaNLCTVNH +DoCkKvbdWWhwucdg +DncKjvbdkWWmcaxX +DoDKjvbdaRfChUGL +EPDLKvbdOEcsiJKd +DoDLKvbdGLFTChMu +EObjjvbdjmBkzFHP +DncLKvbdrWokcJYq +EObjjvbdDHMGHAzc +EObkKvbdRyjITCvA +DnbjjvbdWRnXbElD +DoCjjvbdEARiNZvw +DnbkKvbdRjyFtfjs +DoCkKvbdMgDQNQVL +DoDKjvbdCEPaWJmG +DoCkKvbdUtNTfLuj +DoDKjvbdNGcQMpVL +DoDKjvbdZQmFImEq +EObjjvbdyYIibPyk +DoDLKvbdcSbjtDjB +EPCjjvbdPxmAGsSK +EPCjjvbdnUuZjirG +EPCkKvbddijSVtzn +EOcKjvbdxUmEqYlO +EOcKjvbdxrmiNRag +EPCkKvbdjmBlZeHP +EOcKjvbdvBDySndh +EObjjvbdliDsqVSB +EOcKjvbdTvMQKUBR +DncLKvbdRNXbYnUz +DnbjjvbdyYIiaozL +DoCkKvbdhbPDEwRR +EPDKjvbdptUGrSLU +DoDKjvbdFjeTChMu +DnbkKvbdFVxoomJe +EObkKvbdlYrrSyGt +EPDLKvbdVZHszKnn +DncLKvbdDwwktUUM +DncLKvbdDnbkKvcE +EPCkKvbdjJfHjMwr +EPDKjvbdUtNTfMWK +EObjjvbdbhlikGWx +DncLKvbdKfFhCBQu +DoDKjvbdVgwvXgYz +EPDLKvbdiBoCdwRR +EPDLKvbdzdzOzeZp +EObkKvbdMoxRWNgT +EPDKjvbdjvXNdBww +EObkKvbdUtMsfLuj +EOcLKvbdnUuZjjRf +DnbkKvbduCbtwVoP +EPDLKvbdGGKRmhsq +EObkKvbdePEsLTtS +DoCjjvbdSKyGUgLT +EOcLKvbdRbDdlIyL +DoDLKvbdNxPVzcnU +EObjjvbdkCkkRGtg +DncKjvbdVTmUFkvK +DncKjvbdUsltFkuj +EPDKjvbdSCEElJZL +EOcKjvbdZxcjNcMS +DoCjjvbdEJgjWYKA +DncLKvbdREDBQRDr +DncKjvbddoErjtUS +EPDLKvbdADSYJyiQ +EPDKjvbdatafxKsh +EPDLKvbdkIGkeemk +DoDLKvbdmRxtzSci +DnbkKvbdTlWPAvPJ +DncKjvbdjJegjMwr +DoCkKvbdqTtHSSKt +EOcKjvbdkMakzFHP +DncLKvbddZyPwxpb +DnbkKvbdTppnuUgm +EObkKvbdnPyxukZC +DoDKjvbdbiNJjewY +EPDKjvbdJSyArlwl +EPDLKvbdvvlBVaVu +EOcLKvbdjJfIKMxS +EPDLKvbdliETqVRa +DoCkKvbdWXJXvEFH +DncLKvbdiHKDZWKV +EObkKvbdEXwktUUM +EOcKjvbdRWnDcMID +EPDLKvbdbhljKfWx +DnbkKvbdVTlsfMVj +DnbjjvbdZoOIdeZj +DoDKjvbdDxYLtUTl +EObjjvbdmIdTqUqa +EPCjjvbdiZtekqNf +DoDLKvbdMfcPmPtk +EPDLKvbdKxpirztf +DnbkKvbdEARhlzWw +EOcKjvbdqiAJeMne +DnbjjvbdUsltGMWK +DnbkKvbdMoxRWNfs +EPCjjvbdTqQntuIN +EPDKjvbdLFfHbApu +EOcLKvbdANIZSwZx +DoCjjvbdSLZGUfjs +DoDLKvbdJSyArlxM +EOcLKvbddZxoxZRC +DoDLKvbdRpTfjFcw +EObjjvbdKefHbBRV +EPCkKvbdjlakyeGo +DoDLKvbdiBncFXRR +EObkKvbdkHfkefOL +DnbjjvbdfILVrORH +DnbjjvbdbsDKtDia +DoCjjvbdqiAKElne +EObkKvbdEXxMTtUM +DncKjvbdHfgZxxXg +EPDKjvbdQvnDcMID +DoDKjvbdCSaCsewS +DncLKvbdSZigsDWA +DnbkKvbdiUyeXSUb +DnbkKvbdZRNFJMeR +EPDKjvbdDxXlTstM +EPCjjvbdkNBlZdfo +DnbkKvbdhuZdvqtb +DncLKvbdHDkWJajK +EOcKjvbdhficZWKV +DoDLKvbdxwiKCPyk +EPDLKvbdZQleJMeR +DoDLKvbdLrXMytpz +DncKjvbdcTCjtEJa +DnbkKvbdUMVnaWPJ +DoCjjvbdnBjXYPOV +EObjjvbduWNwjQsA +DoCjjvbdRpUHJecw +DnbkKvbdJYUBglQp +EOcLKvbduoTzqKoU +EObjjvbdZMRctNlN +EObkKvbdziuPpESt +DoDLKvbduLxWaTaX +EOcLKvbdhgKDZWKV +DnbkKvbdZQldhmFR +EOcLKvbdcyyPxZQb +EOcKjvbdRWnDcLgc +DncLKvbdxZgfFweS +EPCkKvbdyqOliJwA +DnbjjvbdsPvPKCuf +DoCjjvbdMgCpNQVL +DncLKvbdOEdTiJKd +EPDKjvbdEARiMyvw +EOcLKvbdJbibqKDY +DoCkKvbdeEnrCWbj +DoCkKvbdGKdrcIMu +DnbkKvbdUMWOaVoJ +DoCkKvbdKaKgNCXq +DnbkKvbdoAKztHdO +EPDKjvbdDxXlUUTl +EOcLKvbdFVxoomJe +EOcKjvbdpyPHfpdY +EPCjjvbdxwiJaoyk +DoCkKvbdlqxtyrci +EOcKjvbdfHkWRmpg +DoCjjvbdkMalZdfo +EPCjjvbdJpyePGOF +DncLKvbdqUUHRqjt +DoDLKvbdziuQPdSt +DoDKjvbdBhjajiGK +EPDKjvbdjcLjpftg +EPDKjvbdVwJYWEFH +DnbjjvbdNdcsiJLE +DoCjjvbdQwODcLgc +EOcLKvbdtkxXAtAw +EPDKjvbdwMvANEEm +DoCjjvbdqFdEsuaI +EObjjvbdrSUjmjaN +DoDLKvbdnGeYMnGy +EOcLKvbdPyNAHTSK +DnbkKvbdMowpvNgT +DoCjjvbdGdLVibKK +DoDLKvbdtcDVXVno +EObkKvbdtlXwBUAw +DoCjjvbdSPsgKGEX +EPCjjvbdURQntuHm +DncLKvbdrMyjZLgi +EPDKjvbdwXMAvBVu +EOcLKvbdRjxfUfkT +DnbkKvbdGFjRnJTq +DoCkKvbdbUbHYLTh +EPDKjvbdoznEKxPA +EPCjjvbdLiBlQxAS +DncKjvbdfVzxPizs +DnbjjvbdSKyFtgLT +EPDKjvbdrXPlCiZR +DncLKvbdhzVGLpnG +EObjjvbdVwJYVdFH +EPDKjvbdwXLaWBVu +EPCjjvbdjhHMGFmk +EObkKvbdKyQjSzuG +DoCjjvbdmfeYNOHZ +DoDLKvbdZirgofaf +EOcLKvbdZoOIdeZj +EPCkKvbdLFfHbApu +EPCkKvbdjvWnEBww +DoDKjvbdcScLUEKB +DoCkKvbdkCkjqHUg +DoDKjvbdyTNhmSBg +DoCkKvbdkHgLfFnL +EPCjjvbdzoQQdcLx +DoCjjvbdOTTvHEtp +EPCkKvbdznopeDLx +EPCkKvbdGFjRmhtR +EPCkKvbdUaCQrpqy +EOcKjvbdnGeXmOHZ +DoDKjvbdiCPDEwRR +DoCjjvbdRbEFLiYk +DncKjvbdRXOECkgc +EPCjjvbdKWUedEgJ +DncKjvbdDjIJvYKA +DoDKjvbdyTOJNRbH +DoCjjvbdePFTKtTr +DoDKjvbdhtyeWrVC +EPCkKvbdqvolCiZR +DoDLKvbdapHHELzd +EObjjvbdlhdUQtrB +EOcKjvbdptUGrRkU +EPCjjvbdqUTfqrLU +EPCkKvbdcJMikGWx +DoDKjvbdlhctRVRa +EOcLKvbdANHyTXZx +EPDKjvbdpssfqrKt +EPCkKvbdFeiqnJTq +DoCkKvbdxZgfGXdr +EOcLKvbdRWmcblHc +DncLKvbdjggMFemk +DoDKjvbdKeegbBQu From 4254270688d93ca8f394b38a79fac42bc774d486 Mon Sep 17 00:00:00 2001 From: Poonam Bajaj Date: Thu, 14 Jun 2012 02:12:46 -0700 Subject: [PATCH 02/83] 6310967: SA: jstack -m produce failures in output While looking for the sender frame check that the frame pointer should not be less than the stack pointer. Reviewed-by: dholmes, sla --- .../share/classes/sun/jvm/hotspot/bugspot/BugSpot.java | 4 ++-- .../jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java | 10 +++++++--- .../sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java | 10 +++++++--- .../classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java | 4 ++-- .../hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java | 10 +++++++--- .../jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java | 10 +++++++--- .../hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java | 10 +++++++--- .../hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java | 4 ++-- .../jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java | 10 +++++++--- .../sun/jvm/hotspot/debugger/proc/ProcCFrame.java | 4 ++-- .../share/classes/sun/jvm/hotspot/tools/PStack.java | 4 ++-- 11 files changed, 52 insertions(+), 28 deletions(-) diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java index 668fba78372..2ff5308b158 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, 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 @@ -657,7 +657,7 @@ public class BugSpot extends JPanel { while (fr != null) { trace.add(new StackTraceEntry(fr, getCDebugger())); try { - fr = fr.sender(); + fr = fr.sender(t); } catch (AddressException e) { e.printStackTrace(); showMessageDialog("Error while walking stack; stack trace will be truncated\n(see console for details)", diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java index b27a5399009..01d9b06dcd1 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.bsd.amd64; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.bsd.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -51,8 +52,11 @@ final public class BsdAMD64CFrame extends BasicCFrame { return rbp; } - public CFrame sender() { - if (rbp == null) { + public CFrame sender(ThreadProxy thread) { + AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); + Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP); + + if ( (rbp == null) || rbp.lessThan(rsp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java index 40292b921e6..237223ed308 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -28,6 +28,7 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.bsd.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; +import sun.jvm.hotspot.debugger.x86.*; final public class BsdX86CFrame extends BasicCFrame { // package/class internals only @@ -52,8 +53,11 @@ final public class BsdX86CFrame extends BasicCFrame { return ebp; } - public CFrame sender() { - if (ebp == null) { + public CFrame sender(ThreadProxy thread) { + X86ThreadContext context = (X86ThreadContext) thread.getContext(); + Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP); + + if ( (ebp == null) || ebp.lessThan(esp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java index 30ddc298fd9..7640ddaa35e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, 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 @@ -34,7 +34,7 @@ import sun.jvm.hotspot.debugger.*; public interface CFrame { /** Returns null when no more frames on stack */ - public CFrame sender(); + public CFrame sender(ThreadProxy th); /** Get the program counter of this frame */ public Address pc(); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java index 03b5dc572ca..d6ec6b45003 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.cdbg.basic.amd64; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -43,8 +44,11 @@ public class AMD64CFrame extends BasicCFrame { this.pc = pc; } - public CFrame sender() { - if (rbp == null) { + public CFrame sender(ThreadProxy thread) { + AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); + Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP); + + if ( (rbp == null) || rbp.lessThan(rsp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java index 0764a5da5e9..76b101bef97 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, 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 @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.cdbg.basic.x86; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.x86.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -43,8 +44,11 @@ public class X86CFrame extends BasicCFrame { this.pc = pc; } - public CFrame sender() { - if (ebp == null) { + public CFrame sender(ThreadProxy thread) { + X86ThreadContext context = (X86ThreadContext) thread.getContext(); + Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP); + + if ( (ebp == null) || ebp.lessThan(esp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java index 3fab9a9e1d0..36977f1aeaa 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.linux.amd64; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.linux.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -51,8 +52,11 @@ final public class LinuxAMD64CFrame extends BasicCFrame { return rbp; } - public CFrame sender() { - if (rbp == null) { + public CFrame sender(ThreadProxy thread) { + AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); + Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP); + + if ( (rbp == null) || rbp.lessThan(rsp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java index eb490b284b5..d52f6b35ee0 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, 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 @@ -57,7 +57,7 @@ final public class LinuxSPARCCFrame extends BasicCFrame { return sp; } - public CFrame sender() { + public CFrame sender(ThreadProxy thread) { if (sp == null) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java index 67074c6533c..8d066720ea2 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -28,6 +28,7 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.linux.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; +import sun.jvm.hotspot.debugger.x86.*; final public class LinuxX86CFrame extends BasicCFrame { // package/class internals only @@ -52,8 +53,11 @@ final public class LinuxX86CFrame extends BasicCFrame { return ebp; } - public CFrame sender() { - if (ebp == null) { + public CFrame sender(ThreadProxy thread) { + X86ThreadContext context = (X86ThreadContext) thread.getContext(); + Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP); + + if ( (ebp == null) || ebp.lessThan(esp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java index 6b508e1e4e8..83d5f677a6e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -37,7 +37,7 @@ final class ProcCFrame extends BasicCFrame { return fp; } - public CFrame sender() { + public CFrame sender(ThreadProxy t) { return sender; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java index 671bfc81125..a087d4aa04e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -158,7 +158,7 @@ public class PStack extends Tool { printUnknown(out); } } - f = f.sender(); + f = f.sender(th); } } catch (Exception exp) { exp.printStackTrace(); From d1191bb4f4505492fa9b24720fccc5a6c06fa10e Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Fri, 15 Jun 2012 01:25:19 -0700 Subject: [PATCH 03/83] 7119644: Increase superword's vector size up to 256 bits Increase vector size up to 256-bits for YMM AVX registers on x86. Reviewed-by: never, twisti, roland --- hotspot/src/cpu/sparc/vm/sparc.ad | 665 +++---- hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp | 4 +- hotspot/src/cpu/x86/vm/assembler_x86.cpp | 75 + hotspot/src/cpu/x86/vm/assembler_x86.hpp | 40 +- hotspot/src/cpu/x86/vm/register_x86.cpp | 4 +- hotspot/src/cpu/x86/vm/register_x86.hpp | 6 +- hotspot/src/cpu/x86/vm/vm_version_x86.cpp | 41 +- hotspot/src/cpu/x86/vm/vmreg_x86.cpp | 7 +- hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp | 6 +- hotspot/src/cpu/x86/vm/x86.ad | 1530 +++++++++++++++++ hotspot/src/cpu/x86/vm/x86_32.ad | 1005 +++++------ hotspot/src/cpu/x86/vm/x86_64.ad | 825 ++------- hotspot/src/share/vm/adlc/adlparse.cpp | 23 +- hotspot/src/share/vm/adlc/archDesc.cpp | 18 +- hotspot/src/share/vm/adlc/forms.cpp | 35 +- hotspot/src/share/vm/adlc/forms.hpp | 5 +- hotspot/src/share/vm/adlc/formsopt.cpp | 13 +- hotspot/src/share/vm/adlc/formssel.cpp | 60 +- hotspot/src/share/vm/adlc/formssel.hpp | 4 +- hotspot/src/share/vm/adlc/main.cpp | 3 +- hotspot/src/share/vm/code/vmreg.cpp | 4 +- hotspot/src/share/vm/opto/c2_globals.hpp | 7 + hotspot/src/share/vm/opto/chaitin.cpp | 171 +- hotspot/src/share/vm/opto/chaitin.hpp | 17 +- hotspot/src/share/vm/opto/classes.hpp | 72 +- hotspot/src/share/vm/opto/compile.cpp | 30 +- hotspot/src/share/vm/opto/ifg.cpp | 31 +- hotspot/src/share/vm/opto/lcm.cpp | 8 +- hotspot/src/share/vm/opto/loopnode.cpp | 6 +- hotspot/src/share/vm/opto/machnode.cpp | 6 +- hotspot/src/share/vm/opto/machnode.hpp | 7 +- hotspot/src/share/vm/opto/matcher.cpp | 98 +- hotspot/src/share/vm/opto/matcher.hpp | 17 +- hotspot/src/share/vm/opto/memnode.cpp | 3 +- hotspot/src/share/vm/opto/mulnode.hpp | 6 +- hotspot/src/share/vm/opto/node.cpp | 5 +- hotspot/src/share/vm/opto/node.hpp | 21 +- hotspot/src/share/vm/opto/opcodes.cpp | 6 +- hotspot/src/share/vm/opto/opcodes.hpp | 6 +- hotspot/src/share/vm/opto/postaloc.cpp | 81 +- hotspot/src/share/vm/opto/reg_split.cpp | 36 +- hotspot/src/share/vm/opto/regmask.cpp | 165 +- hotspot/src/share/vm/opto/regmask.hpp | 61 +- hotspot/src/share/vm/opto/superword.cpp | 500 ++++-- hotspot/src/share/vm/opto/superword.hpp | 16 +- hotspot/src/share/vm/opto/type.cpp | 151 +- hotspot/src/share/vm/opto/type.hpp | 85 +- hotspot/src/share/vm/opto/vectornode.cpp | 458 ++--- hotspot/src/share/vm/opto/vectornode.hpp | 874 ++-------- hotspot/src/share/vm/runtime/vmStructs.cpp | 68 +- .../compiler/7119644/TestBooleanVect.java | 952 ++++++++++ .../compiler/7119644/TestByteDoubleVect.java | 571 ++++++ .../compiler/7119644/TestByteFloatVect.java | 571 ++++++ .../compiler/7119644/TestByteIntVect.java | 571 ++++++ .../compiler/7119644/TestByteLongVect.java | 571 ++++++ .../compiler/7119644/TestByteShortVect.java | 571 ++++++ .../test/compiler/7119644/TestByteVect.java | 953 ++++++++++ .../compiler/7119644/TestCharShortVect.java | 571 ++++++ .../test/compiler/7119644/TestCharVect.java | 953 ++++++++++ .../test/compiler/7119644/TestDoubleVect.java | 953 ++++++++++ .../compiler/7119644/TestFloatDoubleVect.java | 571 ++++++ .../test/compiler/7119644/TestFloatVect.java | 953 ++++++++++ .../compiler/7119644/TestIntDoubleVect.java | 571 ++++++ .../compiler/7119644/TestIntFloatVect.java | 571 ++++++ .../compiler/7119644/TestIntLongVect.java | 571 ++++++ .../test/compiler/7119644/TestIntVect.java | 953 ++++++++++ .../compiler/7119644/TestLongDoubleVect.java | 571 ++++++ .../compiler/7119644/TestLongFloatVect.java | 571 ++++++ .../test/compiler/7119644/TestLongVect.java | 953 ++++++++++ .../compiler/7119644/TestShortDoubleVect.java | 571 ++++++ .../compiler/7119644/TestShortFloatVect.java | 571 ++++++ .../compiler/7119644/TestShortIntVect.java | 571 ++++++ .../compiler/7119644/TestShortLongVect.java | 571 ++++++ .../test/compiler/7119644/TestShortVect.java | 953 ++++++++++ 74 files changed, 20945 insertions(+), 3199 deletions(-) create mode 100644 hotspot/test/compiler/7119644/TestBooleanVect.java create mode 100644 hotspot/test/compiler/7119644/TestByteDoubleVect.java create mode 100644 hotspot/test/compiler/7119644/TestByteFloatVect.java create mode 100644 hotspot/test/compiler/7119644/TestByteIntVect.java create mode 100644 hotspot/test/compiler/7119644/TestByteLongVect.java create mode 100644 hotspot/test/compiler/7119644/TestByteShortVect.java create mode 100644 hotspot/test/compiler/7119644/TestByteVect.java create mode 100644 hotspot/test/compiler/7119644/TestCharShortVect.java create mode 100644 hotspot/test/compiler/7119644/TestCharVect.java create mode 100644 hotspot/test/compiler/7119644/TestDoubleVect.java create mode 100644 hotspot/test/compiler/7119644/TestFloatDoubleVect.java create mode 100644 hotspot/test/compiler/7119644/TestFloatVect.java create mode 100644 hotspot/test/compiler/7119644/TestIntDoubleVect.java create mode 100644 hotspot/test/compiler/7119644/TestIntFloatVect.java create mode 100644 hotspot/test/compiler/7119644/TestIntLongVect.java create mode 100644 hotspot/test/compiler/7119644/TestIntVect.java create mode 100644 hotspot/test/compiler/7119644/TestLongDoubleVect.java create mode 100644 hotspot/test/compiler/7119644/TestLongFloatVect.java create mode 100644 hotspot/test/compiler/7119644/TestLongVect.java create mode 100644 hotspot/test/compiler/7119644/TestShortDoubleVect.java create mode 100644 hotspot/test/compiler/7119644/TestShortFloatVect.java create mode 100644 hotspot/test/compiler/7119644/TestShortIntVect.java create mode 100644 hotspot/test/compiler/7119644/TestShortLongVect.java create mode 100644 hotspot/test/compiler/7119644/TestShortVect.java diff --git a/hotspot/src/cpu/sparc/vm/sparc.ad b/hotspot/src/cpu/sparc/vm/sparc.ad index 43c9976bbde..400df553694 100644 --- a/hotspot/src/cpu/sparc/vm/sparc.ad +++ b/hotspot/src/cpu/sparc/vm/sparc.ad @@ -1,5 +1,5 @@ // -// Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 1998, 2012, 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 @@ -678,18 +678,26 @@ intptr_t get_offset_from_base_2(const MachNode* n, const TypePtr* atype, int dis static inline jdouble replicate_immI(int con, int count, int width) { // Load a constant replicated "count" times with width "width" + assert(count*width == 8 && width <= 4, "sanity"); int bit_width = width * 8; - jlong elt_val = con; - elt_val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits - jlong val = elt_val; + jlong val = con; + val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits for (int i = 0; i < count - 1; i++) { - val <<= bit_width; - val |= elt_val; + val |= (val << bit_width); } jdouble dval = *((jdouble*) &val); // coerce to double type return dval; } +static inline jdouble replicate_immF(float con) { + // Replicate float con 2 times and pack into vector. + int val = *((int*)&con); + jlong lval = val; + lval = (lval << 32) | (lval & 0xFFFFFFFFl); + jdouble dval = *((jdouble*) &lval); // coerce to double type + return dval; +} + // Standard Sparc opcode form2 field breakdown static inline void emit2_19(CodeBuffer &cbuf, int f30, int f29, int f25, int f22, int f20, int f19, int f0 ) { f0 &= (1<<19)-1; // Mask displacement to 19 bits @@ -791,6 +799,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te case Assembler::stdf_op3: st_op = Op_StoreD; break; case Assembler::ldsb_op3: ld_op = Op_LoadB; break; + case Assembler::ldub_op3: ld_op = Op_LoadUB; break; case Assembler::lduh_op3: ld_op = Op_LoadUS; break; case Assembler::ldsh_op3: ld_op = Op_LoadS; break; case Assembler::ldx_op3: // may become LoadP or stay LoadI @@ -799,7 +808,6 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te case Assembler::ldd_op3: ld_op = Op_LoadL; break; case Assembler::ldf_op3: ld_op = Op_LoadF; break; case Assembler::lddf_op3: ld_op = Op_LoadD; break; - case Assembler::ldub_op3: ld_op = Op_LoadB; break; case Assembler::prefetch_op3: ld_op = Op_LoadI; break; default: ShouldNotReachHere(); @@ -840,10 +848,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te !(n->ideal_Opcode()==Op_PrefetchRead && ld_op==Op_LoadI) && !(n->ideal_Opcode()==Op_PrefetchWrite && ld_op==Op_LoadI) && !(n->ideal_Opcode()==Op_PrefetchAllocation && ld_op==Op_LoadI) && - !(n->ideal_Opcode()==Op_Load2I && ld_op==Op_LoadD) && - !(n->ideal_Opcode()==Op_Load4C && ld_op==Op_LoadD) && - !(n->ideal_Opcode()==Op_Load4S && ld_op==Op_LoadD) && - !(n->ideal_Opcode()==Op_Load8B && ld_op==Op_LoadD) && + !(n->ideal_Opcode()==Op_LoadVector && ld_op==Op_LoadD) && !(n->rule() == loadUB_rule)) { verify_oops_warning(n, n->ideal_Opcode(), ld_op); } @@ -855,9 +860,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te !(n->ideal_Opcode()==Op_StoreI && st_op==Op_StoreF) && !(n->ideal_Opcode()==Op_StoreF && st_op==Op_StoreI) && !(n->ideal_Opcode()==Op_StoreL && st_op==Op_StoreI) && - !(n->ideal_Opcode()==Op_Store2I && st_op==Op_StoreD) && - !(n->ideal_Opcode()==Op_Store4C && st_op==Op_StoreD) && - !(n->ideal_Opcode()==Op_Store8B && st_op==Op_StoreD) && + !(n->ideal_Opcode()==Op_StoreVector && st_op==Op_StoreD) && !(n->ideal_Opcode()==Op_StoreD && st_op==Op_StoreI && n->rule() == storeD0_rule)) { verify_oops_warning(n, n->ideal_Opcode(), st_op); } @@ -1849,16 +1852,45 @@ int Matcher::regnum_to_fpu_offset(int regnum) { address last_rethrow = NULL; // debugging aid for Rethrow encoding #endif +// Map Types to machine register types +const int Matcher::base2reg[Type::lastype] = { + Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, + Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ + 0, Op_RegD, 0, 0, /* Vectors */ + Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ + 0, 0/*abio*/, + Op_RegP /* Return address */, 0, /* the memories */ + Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, + 0 /*bottom*/ +}; + // Vector width in bytes -const uint Matcher::vector_width_in_bytes(void) { +const int Matcher::vector_width_in_bytes(BasicType bt) { + assert(MaxVectorSize == 8, ""); return 8; } // Vector ideal reg -const uint Matcher::vector_ideal_reg(void) { +const int Matcher::vector_ideal_reg(int size) { + assert(MaxVectorSize == 8, ""); return Op_RegD; } +// Limits on vector size (number of elements) loaded into vector. +const int Matcher::max_vector_size(const BasicType bt) { + assert(is_java_primitive(bt), "only primitive type vectors"); + return vector_width_in_bytes(bt)/type2aelembytes(bt); +} + +const int Matcher::min_vector_size(const BasicType bt) { + return max_vector_size(bt); // Same as max. +} + +// SPARC doesn't support misaligned vectors store/load. +const bool Matcher::misaligned_vectors_ok() { + return false; +} + // USII supports fxtof through the whole range of number, USIII doesn't const bool Matcher::convL2FSupported(void) { return VM_Version::has_fast_fxtof(); @@ -3125,50 +3157,6 @@ enc_class enc_Array_Equals(o0RegP ary1, o1RegP ary2, g3RegP tmp1, notemp_iRegI r __ membar( Assembler::Membar_mask_bits(Assembler::StoreLoad) ); %} - enc_class enc_repl8b( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sllx(src_reg, 56, dst_reg); - __ srlx(dst_reg, 8, O7); - __ or3 (dst_reg, O7, dst_reg); - __ srlx(dst_reg, 16, O7); - __ or3 (dst_reg, O7, dst_reg); - __ srlx(dst_reg, 32, O7); - __ or3 (dst_reg, O7, dst_reg); - %} - - enc_class enc_repl4b( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sll(src_reg, 24, dst_reg); - __ srl(dst_reg, 8, O7); - __ or3(dst_reg, O7, dst_reg); - __ srl(dst_reg, 16, O7); - __ or3(dst_reg, O7, dst_reg); - %} - - enc_class enc_repl4s( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sllx(src_reg, 48, dst_reg); - __ srlx(dst_reg, 16, O7); - __ or3 (dst_reg, O7, dst_reg); - __ srlx(dst_reg, 32, O7); - __ or3 (dst_reg, O7, dst_reg); - %} - - enc_class enc_repl2i( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sllx(src_reg, 32, dst_reg); - __ srlx(dst_reg, 32, O7); - __ or3 (dst_reg, O7, dst_reg); - %} - %} //----------FRAME-------------------------------------------------------------- @@ -5932,50 +5920,6 @@ instruct loadL_unaligned(iRegL dst, memory mem, o7RegI tmp) %{ ins_pipe(iload_mem); %} -// Load Aligned Packed Byte into a Double Register -instruct loadA8B(regD dst, memory mem) %{ - match(Set dst (Load8B mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed8B" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - -// Load Aligned Packed Char into a Double Register -instruct loadA4C(regD dst, memory mem) %{ - match(Set dst (Load4C mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed4C" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - -// Load Aligned Packed Short into a Double Register -instruct loadA4S(regD dst, memory mem) %{ - match(Set dst (Load4S mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed4S" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - -// Load Aligned Packed Int into a Double Register -instruct loadA2I(regD dst, memory mem) %{ - match(Set dst (Load2I mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed2I" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - // Load Range instruct loadRange(iRegI dst, memory mem) %{ match(Set dst (LoadRange mem)); @@ -6599,17 +6543,6 @@ instruct storeF0( memory mem, immF0 src) %{ ins_pipe(fstoreF_mem_zero); %} -// Store Aligned Packed Bytes in Double register to memory -instruct storeA8B(memory mem, regD src) %{ - match(Set mem (Store8B mem src)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STDF $src,$mem\t! packed8B" %} - opcode(Assembler::stdf_op3); - ins_encode(simple_form3_mem_reg( mem, src ) ); - ins_pipe(fstoreD_mem_reg); -%} - // Convert oop pointer into compressed form instruct encodeHeapOop(iRegN dst, iRegP src) %{ predicate(n->bottom_type()->make_ptr()->ptr() != TypePtr::NotNull); @@ -6654,62 +6587,6 @@ instruct decodeHeapOop_not_null(iRegP dst, iRegN src) %{ %} -// Store Zero into Aligned Packed Bytes -instruct storeA8B0(memory mem, immI0 zero) %{ - match(Set mem (Store8B mem zero)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STX $zero,$mem\t! packed8B" %} - opcode(Assembler::stx_op3); - ins_encode(simple_form3_mem_reg( mem, R_G0 ) ); - ins_pipe(fstoreD_mem_zero); -%} - -// Store Aligned Packed Chars/Shorts in Double register to memory -instruct storeA4C(memory mem, regD src) %{ - match(Set mem (Store4C mem src)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STDF $src,$mem\t! packed4C" %} - opcode(Assembler::stdf_op3); - ins_encode(simple_form3_mem_reg( mem, src ) ); - ins_pipe(fstoreD_mem_reg); -%} - -// Store Zero into Aligned Packed Chars/Shorts -instruct storeA4C0(memory mem, immI0 zero) %{ - match(Set mem (Store4C mem (Replicate4C zero))); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STX $zero,$mem\t! packed4C" %} - opcode(Assembler::stx_op3); - ins_encode(simple_form3_mem_reg( mem, R_G0 ) ); - ins_pipe(fstoreD_mem_zero); -%} - -// Store Aligned Packed Ints in Double register to memory -instruct storeA2I(memory mem, regD src) %{ - match(Set mem (Store2I mem src)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STDF $src,$mem\t! packed2I" %} - opcode(Assembler::stdf_op3); - ins_encode(simple_form3_mem_reg( mem, src ) ); - ins_pipe(fstoreD_mem_reg); -%} - -// Store Zero into Aligned Packed Ints -instruct storeA2I0(memory mem, immI0 zero) %{ - match(Set mem (Store2I mem zero)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STX $zero,$mem\t! packed2I" %} - opcode(Assembler::stx_op3); - ins_encode(simple_form3_mem_reg( mem, R_G0 ) ); - ins_pipe(fstoreD_mem_zero); -%} - - //----------MemBar Instructions----------------------------------------------- // Memory barrier flavors @@ -8880,150 +8757,6 @@ instruct shrL_reg_imm6_L2I(iRegI dst, iRegL src, immI_32_63 cnt) %{ ins_pipe(ialu_reg_imm); %} -// Replicate scalar to packed byte values in Double register -instruct Repl8B_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,56,$dst\n\t" - "SRLX $dst, 8,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,16,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate8B" %} - ins_encode( enc_repl8b(src, dst)); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed byte values in Double register -instruct Repl8B_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate8B src)); - expand %{ - iRegL tmp; - Repl8B_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar constant to packed byte values in Double register -instruct Repl8B_immI(regD dst, immI13 con, o7RegI tmp) %{ - match(Set dst (Replicate8B con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl8B($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 8, 1)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 8, 1)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - -// Replicate scalar to packed char values into stack slot -instruct Repl4C_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,48,$dst\n\t" - "SRLX $dst,16,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate4C" %} - ins_encode( enc_repl4s(src, dst) ); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed char values into stack slot -instruct Repl4C_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate4C src)); - expand %{ - iRegL tmp; - Repl4C_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar constant to packed char values in Double register -instruct Repl4C_immI(regD dst, immI con, o7RegI tmp) %{ - match(Set dst (Replicate4C con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4C($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - -// Replicate scalar to packed short values into stack slot -instruct Repl4S_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,48,$dst\n\t" - "SRLX $dst,16,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate4S" %} - ins_encode( enc_repl4s(src, dst) ); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed short values into stack slot -instruct Repl4S_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate4S src)); - expand %{ - iRegL tmp; - Repl4S_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar constant to packed short values in Double register -instruct Repl4S_immI(regD dst, immI con, o7RegI tmp) %{ - match(Set dst (Replicate4S con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4S($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - -// Replicate scalar to packed int values in Double register -instruct Repl2I_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,32,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate2I" %} - ins_encode( enc_repl2i(src, dst)); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed int values in Double register -instruct Repl2I_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate2I src)); - expand %{ - iRegL tmp; - Repl2I_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar zero constant to packed int values in Double register -instruct Repl2I_immI(regD dst, immI con, o7RegI tmp) %{ - match(Set dst (Replicate2I con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2I($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 2, 4)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 2, 4)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - //----------Control Flow Instructions------------------------------------------ // Compare Instructions // Compare Integers @@ -10742,6 +10475,308 @@ instruct storeS_reversed(indIndexMemory dst, iRegI src) %{ ins_pipe(istore_mem_reg); %} +// ====================VECTOR INSTRUCTIONS===================================== + +// Load Aligned Packed values into a Double Register +instruct loadV8(regD dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 8); + match(Set dst (LoadVector mem)); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "LDDF $mem,$dst\t! load vector (8 bytes)" %} + ins_encode %{ + __ ldf(FloatRegisterImpl::D, $mem$$Address, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(floadD_mem); +%} + +// Store Vector in Double register to memory +instruct storeV8(memory mem, regD src) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem src)); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STDF $src,$mem\t! store vector (8 bytes)" %} + ins_encode %{ + __ stf(FloatRegisterImpl::D, as_DoubleFloatRegister($src$$reg), $mem$$Address); + %} + ins_pipe(fstoreD_mem_reg); +%} + +// Store Zero into vector in memory +instruct storeV8B_zero(memory mem, immI0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateB zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (8 bytes)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +instruct storeV4S_zero(memory mem, immI0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateS zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (4 shorts)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +instruct storeV2I_zero(memory mem, immI0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateI zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (2 ints)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +instruct storeV2F_zero(memory mem, immF0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateF zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (2 floats)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +// Replicate scalar to packed byte values into Double register +instruct Repl8B_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 8 && UseVIS >= 3); + match(Set dst (ReplicateB src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,56,$tmp\n\t" + "SRLX $tmp, 8,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate8B\n\t" + "MOVXTOD $tmp,$dst\t! MoveL2D" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 56, Rtmp); + __ srlx(Rtmp, 8, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar to packed byte values into Double stack +instruct Repl8B_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 8 && UseVIS < 3); + match(Set dst (ReplicateB src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,56,$tmp\n\t" + "SRLX $tmp, 8,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate8B\n\t" + "STX $tmp,$dst\t! regL to stkD" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 56, Rtmp); + __ srlx(Rtmp, 8, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ set ($dst$$disp + STACK_BIAS, Rtmp2); + __ stx (Rtmp, Rtmp2, $dst$$base$$Register); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar constant to packed byte values in Double register +instruct Repl8B_immI(regD dst, immI13 con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl8B($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 8, 1)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 8, 1)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + +// Replicate scalar to packed char/short values into Double register +instruct Repl4S_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 4 && UseVIS >= 3); + match(Set dst (ReplicateS src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,48,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate4S\n\t" + "MOVXTOD $tmp,$dst\t! MoveL2D" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 48, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar to packed char/short values into Double stack +instruct Repl4S_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 4 && UseVIS < 3); + match(Set dst (ReplicateS src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,48,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate4S\n\t" + "STX $tmp,$dst\t! regL to stkD" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 48, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ set ($dst$$disp + STACK_BIAS, Rtmp2); + __ stx (Rtmp, Rtmp2, $dst$$base$$Register); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar constant to packed char/short values in Double register +instruct Repl4S_immI(regD dst, immI con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4S($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + +// Replicate scalar to packed int values into Double register +instruct Repl2I_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 2 && UseVIS >= 3); + match(Set dst (ReplicateI src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,32,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate2I\n\t" + "MOVXTOD $tmp,$dst\t! MoveL2D" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 32, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar to packed int values into Double stack +instruct Repl2I_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 2 && UseVIS < 3); + match(Set dst (ReplicateI src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,32,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate2I\n\t" + "STX $tmp,$dst\t! regL to stkD" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 32, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ set ($dst$$disp + STACK_BIAS, Rtmp2); + __ stx (Rtmp, Rtmp2, $dst$$base$$Register); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar zero constant to packed int values in Double register +instruct Repl2I_immI(regD dst, immI con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2I($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 2, 4)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 2, 4)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + +// Replicate scalar to packed float values into Double stack +instruct Repl2F_stk(stackSlotD dst, regF src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF src)); + ins_cost(MEMORY_REF_COST*2); + format %{ "STF $src,$dst.hi\t! packed2F\n\t" + "STF $src,$dst.lo" %} + opcode(Assembler::stf_op3); + ins_encode(simple_form3_mem_reg(dst, src), form3_mem_plus_4_reg(dst, src)); + ins_pipe(fstoreF_stk_reg); +%} + +// Replicate scalar zero constant to packed float values in Double register +instruct Repl2F_immF(regD dst, immF con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2F($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immF($con$$constant)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immF($con$$constant)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + //----------PEEPHOLE RULES----------------------------------------------------- // These must follow all instruction definitions as they use the names // defined in the instructions definitions. diff --git a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp index 1d4966217a0..ce1b0286067 100644 --- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -217,6 +217,8 @@ void VM_Version::initialize() { // Currently not supported anywhere. FLAG_SET_DEFAULT(UseFPUForSpilling, false); + MaxVectorSize = 8; + assert((InteriorEntryAlignment % relocInfo::addr_unit()) == 0, "alignment is not a multiple of NOP size"); #endif diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.cpp b/hotspot/src/cpu/x86/vm/assembler_x86.cpp index 8409fd73e18..bc17edba531 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp @@ -1637,6 +1637,13 @@ void Assembler::movaps(XMMRegister dst, XMMRegister src) { emit_byte(0xC0 | encode); } +void Assembler::movlhps(XMMRegister dst, XMMRegister src) { + NOT_LP64(assert(VM_Version::supports_sse(), "")); + int encode = simd_prefix_and_encode(dst, src, src, VEX_SIMD_NONE); + emit_byte(0x16); + emit_byte(0xC0 | encode); +} + void Assembler::movb(Register dst, Address src) { NOT_LP64(assert(dst->has_byte_register(), "must have byte register")); InstructionMark im(this); @@ -1686,6 +1693,14 @@ void Assembler::movdl(XMMRegister dst, Address src) { emit_operand(dst, src); } +void Assembler::movdl(Address dst, XMMRegister src) { + NOT_LP64(assert(VM_Version::supports_sse2(), "")); + InstructionMark im(this); + simd_prefix(dst, src, VEX_SIMD_66); + emit_byte(0x7E); + emit_operand(src, dst); +} + void Assembler::movdqa(XMMRegister dst, XMMRegister src) { NOT_LP64(assert(VM_Version::supports_sse2(), "")); int encode = simd_prefix_and_encode(dst, src, VEX_SIMD_66); @@ -1716,6 +1731,35 @@ void Assembler::movdqu(Address dst, XMMRegister src) { emit_operand(src, dst); } +// Move Unaligned 256bit Vector +void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) { + assert(UseAVX, ""); + bool vector256 = true; + int encode = vex_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_F3, vector256); + emit_byte(0x6F); + emit_byte(0xC0 | encode); +} + +void Assembler::vmovdqu(XMMRegister dst, Address src) { + assert(UseAVX, ""); + InstructionMark im(this); + bool vector256 = true; + vex_prefix(dst, xnoreg, src, VEX_SIMD_F3, vector256); + emit_byte(0x6F); + emit_operand(dst, src); +} + +void Assembler::vmovdqu(Address dst, XMMRegister src) { + assert(UseAVX, ""); + InstructionMark im(this); + bool vector256 = true; + // swap src<->dst for encoding + assert(src != xnoreg, "sanity"); + vex_prefix(src, xnoreg, dst, VEX_SIMD_F3, vector256); + emit_byte(0x7F); + emit_operand(src, dst); +} + // Uses zero extension on 64bit void Assembler::movl(Register dst, int32_t imm32) { @@ -3112,6 +3156,13 @@ void Assembler::vxorpd(XMMRegister dst, XMMRegister nds, Address src) { emit_operand(dst, src); } +void Assembler::vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { + assert(VM_Version::supports_avx(), ""); + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256); + emit_byte(0x57); + emit_byte(0xC0 | encode); +} + void Assembler::vxorps(XMMRegister dst, XMMRegister nds, Address src) { assert(VM_Version::supports_avx(), ""); InstructionMark im(this); @@ -3120,6 +3171,30 @@ void Assembler::vxorps(XMMRegister dst, XMMRegister nds, Address src) { emit_operand(dst, src); } +void Assembler::vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { + assert(VM_Version::supports_avx(), ""); + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_NONE, vector256); + emit_byte(0x57); + emit_byte(0xC0 | encode); +} + +void Assembler::vinsertf128h(XMMRegister dst, XMMRegister nds, XMMRegister src) { + assert(VM_Version::supports_avx(), ""); + bool vector256 = true; + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_3A); + emit_byte(0x18); + emit_byte(0xC0 | encode); + // 0x00 - insert into lower 128 bits + // 0x01 - insert into upper 128 bits + emit_byte(0x01); +} + +void Assembler::vzeroupper() { + assert(VM_Version::supports_avx(), ""); + (void)vex_prefix_and_encode(xmm0, xmm0, xmm0, VEX_SIMD_NONE); + emit_byte(0x77); +} + #ifndef _LP64 // 32bit only pieces of the assembler diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.hpp b/hotspot/src/cpu/x86/vm/assembler_x86.hpp index 2e2fca03354..0746c827124 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.hpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -591,8 +591,9 @@ private: void vex_prefix(XMMRegister dst, XMMRegister nds, Address src, VexSimdPrefix pre, bool vector256 = false) { - vex_prefix(src, nds->encoding(), dst->encoding(), - pre, VEX_OPCODE_0F, false, vector256); + int dst_enc = dst->encoding(); + int nds_enc = nds->is_valid() ? nds->encoding() : 0; + vex_prefix(src, nds_enc, dst_enc, pre, VEX_OPCODE_0F, false, vector256); } int vex_prefix_and_encode(int dst_enc, int nds_enc, int src_enc, @@ -600,9 +601,12 @@ private: bool vex_w, bool vector256); int vex_prefix_and_encode(XMMRegister dst, XMMRegister nds, XMMRegister src, - VexSimdPrefix pre, bool vector256 = false) { - return vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), - pre, VEX_OPCODE_0F, false, vector256); + VexSimdPrefix pre, bool vector256 = false, + VexOpcode opc = VEX_OPCODE_0F) { + int src_enc = src->encoding(); + int dst_enc = dst->encoding(); + int nds_enc = nds->is_valid() ? nds->encoding() : 0; + return vex_prefix_and_encode(dst_enc, nds_enc, src_enc, pre, opc, false, vector256); } void simd_prefix(XMMRegister xreg, XMMRegister nds, Address adr, @@ -1261,6 +1265,7 @@ private: void movdl(XMMRegister dst, Register src); void movdl(Register dst, XMMRegister src); void movdl(XMMRegister dst, Address src); + void movdl(Address dst, XMMRegister src); // Move Double Quadword void movdq(XMMRegister dst, Register src); @@ -1274,6 +1279,14 @@ private: void movdqu(XMMRegister dst, Address src); void movdqu(XMMRegister dst, XMMRegister src); + // Move Unaligned 256bit Vector + void vmovdqu(Address dst, XMMRegister src); + void vmovdqu(XMMRegister dst, Address src); + void vmovdqu(XMMRegister dst, XMMRegister src); + + // Move lower 64bit to high 64bit in 128bit register + void movlhps(XMMRegister dst, XMMRegister src); + void movl(Register dst, int32_t imm32); void movl(Address dst, int32_t imm32); void movl(Register dst, Register src); @@ -1615,6 +1628,17 @@ private: void vxorpd(XMMRegister dst, XMMRegister nds, Address src); void vxorps(XMMRegister dst, XMMRegister nds, Address src); + // AVX Vector instrucitons. + void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); + void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); + void vinsertf128h(XMMRegister dst, XMMRegister nds, XMMRegister src); + + // AVX instruction which is used to clear upper 128 bits of YMM registers and + // to avoid transaction penalty between AVX and SSE states. There is no + // penalty if legacy SSE instructions are encoded using VEX prefix because + // they always clear upper 128 bits. It should be used before calling + // runtime code and native libraries. + void vzeroupper(); protected: // Next instructions require address alignment 16 bytes SSE mode. @@ -2529,9 +2553,13 @@ public: void vsubss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubss(dst, nds, src); } void vsubss(XMMRegister dst, XMMRegister nds, AddressLiteral src); + // AVX Vector instructions + + void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorpd(dst, nds, src, vector256); } void vxorpd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vxorpd(dst, nds, src); } void vxorpd(XMMRegister dst, XMMRegister nds, AddressLiteral src); + void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorps(dst, nds, src, vector256); } void vxorps(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vxorps(dst, nds, src); } void vxorps(XMMRegister dst, XMMRegister nds, AddressLiteral src); diff --git a/hotspot/src/cpu/x86/vm/register_x86.cpp b/hotspot/src/cpu/x86/vm/register_x86.cpp index a6301eafe4d..a3763a3498f 100644 --- a/hotspot/src/cpu/x86/vm/register_x86.cpp +++ b/hotspot/src/cpu/x86/vm/register_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, 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 @@ -35,7 +35,7 @@ const int ConcreteRegisterImpl::max_gpr = RegisterImpl::number_of_registers << 1 const int ConcreteRegisterImpl::max_fpr = ConcreteRegisterImpl::max_gpr + 2 * FloatRegisterImpl::number_of_registers; const int ConcreteRegisterImpl::max_xmm = ConcreteRegisterImpl::max_fpr + - 2 * XMMRegisterImpl::number_of_registers; + 8 * XMMRegisterImpl::number_of_registers; const char* RegisterImpl::name() const { const char* names[number_of_registers] = { #ifndef AMD64 diff --git a/hotspot/src/cpu/x86/vm/register_x86.hpp b/hotspot/src/cpu/x86/vm/register_x86.hpp index 2f4cd0dcac6..680dd900a48 100644 --- a/hotspot/src/cpu/x86/vm/register_x86.hpp +++ b/hotspot/src/cpu/x86/vm/register_x86.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, 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 @@ -158,7 +158,7 @@ class XMMRegisterImpl: public AbstractRegisterImpl { XMMRegister successor() const { return as_XMMRegister(encoding() + 1); } // accessors - int encoding() const { assert(is_valid(), "invalid register"); return (intptr_t)this; } + int encoding() const { assert(is_valid(), err_msg("invalid register (%d)", (int)(intptr_t)this )); return (intptr_t)this; } bool is_valid() const { return 0 <= (intptr_t)this && (intptr_t)this < number_of_registers; } const char* name() const; }; @@ -216,7 +216,7 @@ class ConcreteRegisterImpl : public AbstractRegisterImpl { RegisterImpl::number_of_registers + // "H" half of a 64bit register #endif // AMD64 2 * FloatRegisterImpl::number_of_registers + - 2 * XMMRegisterImpl::number_of_registers + + 8 * XMMRegisterImpl::number_of_registers + 1 // eflags }; diff --git a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp index 121be7a2ba7..2cc0231db93 100644 --- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp @@ -467,6 +467,32 @@ void VM_Version::get_processor_features() { if (!supports_avx ()) // Drop to 0 if no AVX support UseAVX = 0; +#ifdef COMPILER2 + if (UseFPUForSpilling) { + if (UseSSE < 2) { + // Only supported with SSE2+ + FLAG_SET_DEFAULT(UseFPUForSpilling, false); + } + } + if (MaxVectorSize > 0) { + if (!is_power_of_2(MaxVectorSize)) { + warning("MaxVectorSize must be a power of 2"); + FLAG_SET_DEFAULT(MaxVectorSize, 32); + } + if (MaxVectorSize > 32) { + FLAG_SET_DEFAULT(MaxVectorSize, 32); + } + if (MaxVectorSize > 16 && UseAVX == 0) { + // Only supported with AVX+ + FLAG_SET_DEFAULT(MaxVectorSize, 16); + } + if (UseSSE < 2) { + // Only supported with SSE2+ + FLAG_SET_DEFAULT(MaxVectorSize, 0); + } + } +#endif + // On new cpus instructions which update whole XMM register should be used // to prevent partial register stall due to dependencies on high half. // @@ -544,6 +570,12 @@ void VM_Version::get_processor_features() { } } +#ifdef COMPILER2 + if (MaxVectorSize > 16) { + // Limit vectors size to 16 bytes on current AMD cpus. + FLAG_SET_DEFAULT(MaxVectorSize, 16); + } +#endif // COMPILER2 } if( is_intel() ) { // Intel cpus specific settings @@ -606,15 +638,6 @@ void VM_Version::get_processor_features() { FLAG_SET_DEFAULT(UsePopCountInstruction, false); } -#ifdef COMPILER2 - if (UseFPUForSpilling) { - if (UseSSE < 2) { - // Only supported with SSE2+ - FLAG_SET_DEFAULT(UseFPUForSpilling, false); - } - } -#endif - assert(0 <= ReadPrefetchInstr && ReadPrefetchInstr <= 3, "invalid value"); assert(0 <= AllocatePrefetchInstr && AllocatePrefetchInstr <= 3, "invalid value"); diff --git a/hotspot/src/cpu/x86/vm/vmreg_x86.cpp b/hotspot/src/cpu/x86/vm/vmreg_x86.cpp index a0bfe6e69c1..89959771ea2 100644 --- a/hotspot/src/cpu/x86/vm/vmreg_x86.cpp +++ b/hotspot/src/cpu/x86/vm/vmreg_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, 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 @@ -48,8 +48,9 @@ void VMRegImpl::set_regName() { XMMRegister xreg = ::as_XMMRegister(0); for ( ; i < ConcreteRegisterImpl::max_xmm ; ) { - regName[i++] = xreg->name(); - regName[i++] = xreg->name(); + for (int j = 0 ; j < 8 ; j++) { + regName[i++] = xreg->name(); + } xreg = xreg->successor(); } for ( ; i < ConcreteRegisterImpl::number_of_registers ; i ++ ) { diff --git a/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp b/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp index 88201bd3d83..0608d3edbff 100644 --- a/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp +++ b/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, 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 @@ -39,7 +39,7 @@ inline VMReg FloatRegisterImpl::as_VMReg() { } inline VMReg XMMRegisterImpl::as_VMReg() { - return VMRegImpl::as_VMReg((encoding() << 1) + ConcreteRegisterImpl::max_fpr); + return VMRegImpl::as_VMReg((encoding() << 3) + ConcreteRegisterImpl::max_fpr); } @@ -75,7 +75,7 @@ inline FloatRegister VMRegImpl::as_FloatRegister() { inline XMMRegister VMRegImpl::as_XMMRegister() { assert( is_XMMRegister() && is_even(value()), "must be" ); // Yuk - return ::as_XMMRegister((value() - ConcreteRegisterImpl::max_fpr) >> 1); + return ::as_XMMRegister((value() - ConcreteRegisterImpl::max_fpr) >> 3); } inline bool VMRegImpl::is_concrete() { diff --git a/hotspot/src/cpu/x86/vm/x86.ad b/hotspot/src/cpu/x86/vm/x86.ad index 6bd91287fc0..faa00d70373 100644 --- a/hotspot/src/cpu/x86/vm/x86.ad +++ b/hotspot/src/cpu/x86/vm/x86.ad @@ -24,6 +24,456 @@ // X86 Common Architecture Description File +//----------REGISTER DEFINITION BLOCK------------------------------------------ +// This information is used by the matcher and the register allocator to +// describe individual registers and classes of registers within the target +// archtecture. + +register %{ +//----------Architecture Description Register Definitions---------------------- +// General Registers +// "reg_def" name ( register save type, C convention save type, +// ideal register type, encoding ); +// Register Save Types: +// +// NS = No-Save: The register allocator assumes that these registers +// can be used without saving upon entry to the method, & +// that they do not need to be saved at call sites. +// +// SOC = Save-On-Call: The register allocator assumes that these registers +// can be used without saving upon entry to the method, +// but that they must be saved at call sites. +// +// SOE = Save-On-Entry: The register allocator assumes that these registers +// must be saved before using them upon entry to the +// method, but they do not need to be saved at call +// sites. +// +// AS = Always-Save: The register allocator assumes that these registers +// must be saved before using them upon entry to the +// method, & that they must be saved at call sites. +// +// Ideal Register Type is used to determine how to save & restore a +// register. Op_RegI will get spilled with LoadI/StoreI, Op_RegP will get +// spilled with LoadP/StoreP. If the register supports both, use Op_RegI. +// +// The encoding number is the actual bit-pattern placed into the opcodes. + +// XMM registers. 256-bit registers or 8 words each, labeled (a)-h. +// Word a in each register holds a Float, words ab hold a Double. +// The whole registers are used in SSE4.2 version intrinsics, +// array copy stubs and superword operations (see UseSSE42Intrinsics, +// UseXMMForArrayCopy and UseSuperword flags). +// XMM8-XMM15 must be encoded with REX (VEX for UseAVX). +// Linux ABI: No register preserved across function calls +// XMM0-XMM7 might hold parameters +// Windows ABI: XMM6-XMM15 preserved across function calls +// XMM0-XMM3 might hold parameters + +reg_def XMM0 ( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()); +reg_def XMM0b( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()); +reg_def XMM0c( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()->next()); +reg_def XMM0d( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()->next()->next()); +reg_def XMM0e( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()->next()->next()->next()); +reg_def XMM0f( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM0g( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM0h( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM1 ( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()); +reg_def XMM1b( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()); +reg_def XMM1c( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()->next()); +reg_def XMM1d( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()->next()->next()); +reg_def XMM1e( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()->next()->next()->next()); +reg_def XMM1f( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM1g( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM1h( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM2 ( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()); +reg_def XMM2b( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()); +reg_def XMM2c( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()->next()); +reg_def XMM2d( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()->next()->next()); +reg_def XMM2e( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()->next()->next()->next()); +reg_def XMM2f( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM2g( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM2h( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM3 ( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()); +reg_def XMM3b( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()); +reg_def XMM3c( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()->next()); +reg_def XMM3d( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()->next()->next()); +reg_def XMM3e( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()->next()->next()->next()); +reg_def XMM3f( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM3g( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM3h( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM4 ( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()); +reg_def XMM4b( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()); +reg_def XMM4c( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()->next()); +reg_def XMM4d( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()->next()->next()); +reg_def XMM4e( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()->next()->next()->next()); +reg_def XMM4f( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM4g( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM4h( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM5 ( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()); +reg_def XMM5b( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()); +reg_def XMM5c( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()->next()); +reg_def XMM5d( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()->next()->next()); +reg_def XMM5e( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()->next()->next()->next()); +reg_def XMM5f( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM5g( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM5h( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +#ifdef _WIN64 + +reg_def XMM6 ( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()); +reg_def XMM6b( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next()); +reg_def XMM6c( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next()->next()); +reg_def XMM6d( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next()->next()->next()); +reg_def XMM6e( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next()->next()->next()->next()); +reg_def XMM6f( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM6g( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM6h( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM7 ( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()); +reg_def XMM7b( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next()); +reg_def XMM7c( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next()->next()); +reg_def XMM7d( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next()->next()->next()); +reg_def XMM7e( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next()->next()->next()->next()); +reg_def XMM7f( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM7g( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM7h( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM8 ( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()); +reg_def XMM8b( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next()); +reg_def XMM8c( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next()->next()); +reg_def XMM8d( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next()->next()->next()); +reg_def XMM8e( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next()->next()->next()->next()); +reg_def XMM8f( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM8g( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM8h( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM9 ( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()); +reg_def XMM9b( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next()); +reg_def XMM9c( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next()->next()); +reg_def XMM9d( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next()->next()->next()); +reg_def XMM9e( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next()->next()->next()->next()); +reg_def XMM9f( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM9g( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM9h( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM10 ( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()); +reg_def XMM10b( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next()); +reg_def XMM10c( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next()->next()); +reg_def XMM10d( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next()->next()->next()); +reg_def XMM10e( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next()->next()->next()->next()); +reg_def XMM10f( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM10g( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM10h( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM11 ( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()); +reg_def XMM11b( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next()); +reg_def XMM11c( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next()->next()); +reg_def XMM11d( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next()->next()->next()); +reg_def XMM11e( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next()->next()->next()->next()); +reg_def XMM11f( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM11g( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM11h( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM12 ( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()); +reg_def XMM12b( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next()); +reg_def XMM12c( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next()->next()); +reg_def XMM12d( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next()->next()->next()); +reg_def XMM12e( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next()->next()->next()->next()); +reg_def XMM12f( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM12g( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM12h( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM13 ( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()); +reg_def XMM13b( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next()); +reg_def XMM13c( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next()->next()); +reg_def XMM13d( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next()->next()->next()); +reg_def XMM13e( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next()->next()->next()->next()); +reg_def XMM13f( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM13g( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM13h( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM14 ( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()); +reg_def XMM14b( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next()); +reg_def XMM14c( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next()->next()); +reg_def XMM14d( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next()->next()->next()); +reg_def XMM14e( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next()->next()->next()->next()); +reg_def XMM14f( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM14g( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM14h( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM15 ( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()); +reg_def XMM15b( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next()); +reg_def XMM15c( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next()->next()); +reg_def XMM15d( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next()->next()->next()); +reg_def XMM15e( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next()->next()->next()->next()); +reg_def XMM15f( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM15g( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM15h( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +#else // _WIN64 + +reg_def XMM6 ( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()); +reg_def XMM6b( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()); +reg_def XMM6c( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()->next()); +reg_def XMM6d( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()->next()->next()); +reg_def XMM6e( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()->next()->next()->next()); +reg_def XMM6f( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM6g( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM6h( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM7 ( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()); +reg_def XMM7b( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()); +reg_def XMM7c( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()->next()); +reg_def XMM7d( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()->next()->next()); +reg_def XMM7e( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()->next()->next()->next()); +reg_def XMM7f( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM7g( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM7h( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +#ifdef _LP64 + +reg_def XMM8 ( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()); +reg_def XMM8b( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next()); +reg_def XMM8c( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next()->next()); +reg_def XMM8d( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next()->next()->next()); +reg_def XMM8e( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next()->next()->next()->next()); +reg_def XMM8f( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM8g( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM8h( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM9 ( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()); +reg_def XMM9b( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next()); +reg_def XMM9c( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next()->next()); +reg_def XMM9d( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next()->next()->next()); +reg_def XMM9e( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next()->next()->next()->next()); +reg_def XMM9f( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM9g( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM9h( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM10 ( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()); +reg_def XMM10b( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next()); +reg_def XMM10c( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next()->next()); +reg_def XMM10d( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next()->next()->next()); +reg_def XMM10e( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next()->next()->next()->next()); +reg_def XMM10f( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM10g( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM10h( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM11 ( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()); +reg_def XMM11b( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next()); +reg_def XMM11c( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next()->next()); +reg_def XMM11d( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next()->next()->next()); +reg_def XMM11e( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next()->next()->next()->next()); +reg_def XMM11f( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM11g( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM11h( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM12 ( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()); +reg_def XMM12b( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next()); +reg_def XMM12c( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next()->next()); +reg_def XMM12d( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next()->next()->next()); +reg_def XMM12e( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next()->next()->next()->next()); +reg_def XMM12f( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM12g( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM12h( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM13 ( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()); +reg_def XMM13b( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next()); +reg_def XMM13c( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next()->next()); +reg_def XMM13d( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next()->next()->next()); +reg_def XMM13e( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next()->next()->next()->next()); +reg_def XMM13f( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM13g( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM13h( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM14 ( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()); +reg_def XMM14b( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next()); +reg_def XMM14c( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next()->next()); +reg_def XMM14d( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next()->next()->next()); +reg_def XMM14e( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next()->next()->next()->next()); +reg_def XMM14f( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM14g( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM14h( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +reg_def XMM15 ( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()); +reg_def XMM15b( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next()); +reg_def XMM15c( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next()->next()); +reg_def XMM15d( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next()->next()->next()); +reg_def XMM15e( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next()->next()->next()->next()); +reg_def XMM15f( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next()->next()->next()->next()->next()); +reg_def XMM15g( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next()->next()->next()->next()->next()->next()); +reg_def XMM15h( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next()->next()->next()->next()->next()->next()->next()); + +#endif // _LP64 + +#endif // _WIN64 + +#ifdef _LP64 +reg_def RFLAGS(SOC, SOC, 0, 16, VMRegImpl::Bad()); +#else +reg_def RFLAGS(SOC, SOC, 0, 8, VMRegImpl::Bad()); +#endif // _LP64 + +alloc_class chunk1(XMM0, XMM0b, XMM0c, XMM0d, XMM0e, XMM0f, XMM0g, XMM0h, + XMM1, XMM1b, XMM1c, XMM1d, XMM1e, XMM1f, XMM1g, XMM1h, + XMM2, XMM2b, XMM2c, XMM2d, XMM2e, XMM2f, XMM2g, XMM2h, + XMM3, XMM3b, XMM3c, XMM3d, XMM3e, XMM3f, XMM3g, XMM3h, + XMM4, XMM4b, XMM4c, XMM4d, XMM4e, XMM4f, XMM4g, XMM4h, + XMM5, XMM5b, XMM5c, XMM5d, XMM5e, XMM5f, XMM5g, XMM5h, + XMM6, XMM6b, XMM6c, XMM6d, XMM6e, XMM6f, XMM6g, XMM6h, + XMM7, XMM7b, XMM7c, XMM7d, XMM7e, XMM7f, XMM7g, XMM7h +#ifdef _LP64 + ,XMM8, XMM8b, XMM8c, XMM8d, XMM8e, XMM8f, XMM8g, XMM8h, + XMM9, XMM9b, XMM9c, XMM9d, XMM9e, XMM9f, XMM9g, XMM9h, + XMM10, XMM10b, XMM10c, XMM10d, XMM10e, XMM10f, XMM10g, XMM10h, + XMM11, XMM11b, XMM11c, XMM11d, XMM11e, XMM11f, XMM11g, XMM11h, + XMM12, XMM12b, XMM12c, XMM12d, XMM12e, XMM12f, XMM12g, XMM12h, + XMM13, XMM13b, XMM13c, XMM13d, XMM13e, XMM13f, XMM13g, XMM13h, + XMM14, XMM14b, XMM14c, XMM14d, XMM14e, XMM14f, XMM14g, XMM14h, + XMM15, XMM15b, XMM15c, XMM15d, XMM15e, XMM15f, XMM15g, XMM15h +#endif + ); + +// flags allocation class should be last. +alloc_class chunk2(RFLAGS); + +// Singleton class for condition codes +reg_class int_flags(RFLAGS); + +// Class for all float registers +reg_class float_reg(XMM0, + XMM1, + XMM2, + XMM3, + XMM4, + XMM5, + XMM6, + XMM7 +#ifdef _LP64 + ,XMM8, + XMM9, + XMM10, + XMM11, + XMM12, + XMM13, + XMM14, + XMM15 +#endif + ); + +// Class for all double registers +reg_class double_reg(XMM0, XMM0b, + XMM1, XMM1b, + XMM2, XMM2b, + XMM3, XMM3b, + XMM4, XMM4b, + XMM5, XMM5b, + XMM6, XMM6b, + XMM7, XMM7b +#ifdef _LP64 + ,XMM8, XMM8b, + XMM9, XMM9b, + XMM10, XMM10b, + XMM11, XMM11b, + XMM12, XMM12b, + XMM13, XMM13b, + XMM14, XMM14b, + XMM15, XMM15b +#endif + ); + +// Class for all 32bit vector registers +reg_class vectors_reg(XMM0, + XMM1, + XMM2, + XMM3, + XMM4, + XMM5, + XMM6, + XMM7 +#ifdef _LP64 + ,XMM8, + XMM9, + XMM10, + XMM11, + XMM12, + XMM13, + XMM14, + XMM15 +#endif + ); + +// Class for all 64bit vector registers +reg_class vectord_reg(XMM0, XMM0b, + XMM1, XMM1b, + XMM2, XMM2b, + XMM3, XMM3b, + XMM4, XMM4b, + XMM5, XMM5b, + XMM6, XMM6b, + XMM7, XMM7b +#ifdef _LP64 + ,XMM8, XMM8b, + XMM9, XMM9b, + XMM10, XMM10b, + XMM11, XMM11b, + XMM12, XMM12b, + XMM13, XMM13b, + XMM14, XMM14b, + XMM15, XMM15b +#endif + ); + +// Class for all 128bit vector registers +reg_class vectorx_reg(XMM0, XMM0b, XMM0c, XMM0d, + XMM1, XMM1b, XMM1c, XMM1d, + XMM2, XMM2b, XMM2c, XMM2d, + XMM3, XMM3b, XMM3c, XMM3d, + XMM4, XMM4b, XMM4c, XMM4d, + XMM5, XMM5b, XMM5c, XMM5d, + XMM6, XMM6b, XMM6c, XMM6d, + XMM7, XMM7b, XMM7c, XMM7d +#ifdef _LP64 + ,XMM8, XMM8b, XMM8c, XMM8d, + XMM9, XMM9b, XMM9c, XMM9d, + XMM10, XMM10b, XMM10c, XMM10d, + XMM11, XMM11b, XMM11c, XMM11d, + XMM12, XMM12b, XMM12c, XMM12d, + XMM13, XMM13b, XMM13c, XMM13d, + XMM14, XMM14b, XMM14c, XMM14d, + XMM15, XMM15b, XMM15c, XMM15d +#endif + ); + +// Class for all 256bit vector registers +reg_class vectory_reg(XMM0, XMM0b, XMM0c, XMM0d, XMM0e, XMM0f, XMM0g, XMM0h, + XMM1, XMM1b, XMM1c, XMM1d, XMM1e, XMM1f, XMM1g, XMM1h, + XMM2, XMM2b, XMM2c, XMM2d, XMM2e, XMM2f, XMM2g, XMM2h, + XMM3, XMM3b, XMM3c, XMM3d, XMM3e, XMM3f, XMM3g, XMM3h, + XMM4, XMM4b, XMM4c, XMM4d, XMM4e, XMM4f, XMM4g, XMM4h, + XMM5, XMM5b, XMM5c, XMM5d, XMM5e, XMM5f, XMM5g, XMM5h, + XMM6, XMM6b, XMM6c, XMM6d, XMM6e, XMM6f, XMM6g, XMM6h, + XMM7, XMM7b, XMM7c, XMM7d, XMM7e, XMM7f, XMM7g, XMM7h +#ifdef _LP64 + ,XMM8, XMM8b, XMM8c, XMM8d, XMM8e, XMM8f, XMM8g, XMM8h, + XMM9, XMM9b, XMM9c, XMM9d, XMM9e, XMM9f, XMM9g, XMM9h, + XMM10, XMM10b, XMM10c, XMM10d, XMM10e, XMM10f, XMM10g, XMM10h, + XMM11, XMM11b, XMM11c, XMM11d, XMM11e, XMM11f, XMM11g, XMM11h, + XMM12, XMM12b, XMM12c, XMM12d, XMM12e, XMM12f, XMM12g, XMM12h, + XMM13, XMM13b, XMM13c, XMM13d, XMM13e, XMM13f, XMM13g, XMM13h, + XMM14, XMM14b, XMM14c, XMM14d, XMM14e, XMM14f, XMM14g, XMM14h, + XMM15, XMM15b, XMM15c, XMM15d, XMM15e, XMM15f, XMM15g, XMM15h +#endif + ); + +%} + source %{ // Float masks come from different places depending on platform. #ifdef _LP64 @@ -38,6 +488,252 @@ source %{ static address double_signflip() { return (address)double_signflip_pool; } #endif +// Map Types to machine register types +const int Matcher::base2reg[Type::lastype] = { + Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, + Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ + Op_VecS, Op_VecD, Op_VecX, Op_VecY, /* Vectors */ + Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ + 0, 0/*abio*/, + Op_RegP /* Return address */, 0, /* the memories */ + Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, + 0 /*bottom*/ +}; + +// Max vector size in bytes. 0 if not supported. +const int Matcher::vector_width_in_bytes(BasicType bt) { + assert(is_java_primitive(bt), "only primitive type vectors"); + if (UseSSE < 2) return 0; + // SSE2 supports 128bit vectors for all types. + // AVX2 supports 256bit vectors for all types. + int size = (UseAVX > 1) ? 32 : 16; + // AVX1 supports 256bit vectors only for FLOAT and DOUBLE. + if (UseAVX > 0 && (bt == T_FLOAT || bt == T_DOUBLE)) + size = 32; + // Use flag to limit vector size. + size = MIN2(size,(int)MaxVectorSize); + // Minimum 2 values in vector (or 4 for bytes). + switch (bt) { + case T_DOUBLE: + case T_LONG: + if (size < 16) return 0; + case T_FLOAT: + case T_INT: + if (size < 8) return 0; + case T_BOOLEAN: + case T_BYTE: + case T_CHAR: + case T_SHORT: + if (size < 4) return 0; + break; + default: + ShouldNotReachHere(); + } + return size; +} + +// Limits on vector size (number of elements) loaded into vector. +const int Matcher::max_vector_size(const BasicType bt) { + return vector_width_in_bytes(bt)/type2aelembytes(bt); +} +const int Matcher::min_vector_size(const BasicType bt) { + int max_size = max_vector_size(bt); + // Min size which can be loaded into vector is 4 bytes. + int size = (type2aelembytes(bt) == 1) ? 4 : 2; + return MIN2(size,max_size); +} + +// Vector ideal reg corresponding to specidied size in bytes +const int Matcher::vector_ideal_reg(int size) { + assert(MaxVectorSize >= size, ""); + switch(size) { + case 4: return Op_VecS; + case 8: return Op_VecD; + case 16: return Op_VecX; + case 32: return Op_VecY; + } + ShouldNotReachHere(); + return 0; +} + +// x86 supports misaligned vectors store/load. +const bool Matcher::misaligned_vectors_ok() { + return !AlignVector; // can be changed by flag +} + +// Helper methods for MachSpillCopyNode::implementation(). +static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo, + int src_hi, int dst_hi, uint ireg, outputStream* st) { + // In 64-bit VM size calculation is very complex. Emitting instructions + // into scratch buffer is used to get size in 64-bit VM. + LP64_ONLY( assert(!do_size, "this method calculates size only for 32-bit VM"); ) + assert(ireg == Op_VecS || // 32bit vector + (src_lo & 1) == 0 && (src_lo + 1) == src_hi && + (dst_lo & 1) == 0 && (dst_lo + 1) == dst_hi, + "no non-adjacent vector moves" ); + if (cbuf) { + MacroAssembler _masm(cbuf); + int offset = __ offset(); + switch (ireg) { + case Op_VecS: // copy whole register + case Op_VecD: + case Op_VecX: + __ movdqu(as_XMMRegister(Matcher::_regEncode[dst_lo]), as_XMMRegister(Matcher::_regEncode[src_lo])); + break; + case Op_VecY: + __ vmovdqu(as_XMMRegister(Matcher::_regEncode[dst_lo]), as_XMMRegister(Matcher::_regEncode[src_lo])); + break; + default: + ShouldNotReachHere(); + } + int size = __ offset() - offset; +#ifdef ASSERT + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. + assert(!do_size || size == 4, "incorrect size calculattion"); +#endif + return size; +#ifndef PRODUCT + } else if (!do_size) { + switch (ireg) { + case Op_VecS: + case Op_VecD: + case Op_VecX: + st->print("movdqu %s,%s\t# spill",Matcher::regName[dst_lo],Matcher::regName[src_lo]); + break; + case Op_VecY: + st->print("vmovdqu %s,%s\t# spill",Matcher::regName[dst_lo],Matcher::regName[src_lo]); + break; + default: + ShouldNotReachHere(); + } +#endif + } + // VEX_2bytes prefix is used if UseAVX > 0, and it takes the same 2 bytes as SIMD prefix. + return 4; +} + +static int vec_spill_helper(CodeBuffer *cbuf, bool do_size, bool is_load, + int stack_offset, int reg, uint ireg, outputStream* st) { + // In 64-bit VM size calculation is very complex. Emitting instructions + // into scratch buffer is used to get size in 64-bit VM. + LP64_ONLY( assert(!do_size, "this method calculates size only for 32-bit VM"); ) + if (cbuf) { + MacroAssembler _masm(cbuf); + int offset = __ offset(); + if (is_load) { + switch (ireg) { + case Op_VecS: + __ movdl(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + case Op_VecD: + __ movq(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + case Op_VecX: + __ movdqu(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + case Op_VecY: + __ vmovdqu(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + default: + ShouldNotReachHere(); + } + } else { // store + switch (ireg) { + case Op_VecS: + __ movdl(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + case Op_VecD: + __ movq(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + case Op_VecX: + __ movdqu(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + case Op_VecY: + __ vmovdqu(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + default: + ShouldNotReachHere(); + } + } + int size = __ offset() - offset; +#ifdef ASSERT + int offset_size = (stack_offset == 0) ? 0 : ((stack_offset < 0x80) ? 1 : 4); + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. + assert(!do_size || size == (5+offset_size), "incorrect size calculattion"); +#endif + return size; +#ifndef PRODUCT + } else if (!do_size) { + if (is_load) { + switch (ireg) { + case Op_VecS: + st->print("movd %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + case Op_VecD: + st->print("movq %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + case Op_VecX: + st->print("movdqu %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + case Op_VecY: + st->print("vmovdqu %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + default: + ShouldNotReachHere(); + } + } else { // store + switch (ireg) { + case Op_VecS: + st->print("movd [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + case Op_VecD: + st->print("movq [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + case Op_VecX: + st->print("movdqu [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + case Op_VecY: + st->print("vmovdqu [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + default: + ShouldNotReachHere(); + } + } +#endif + } + int offset_size = (stack_offset == 0) ? 0 : ((stack_offset < 0x80) ? 1 : 4); + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. + return 5+offset_size; +} + +static inline jfloat replicate4_imm(int con, int width) { + // Load a constant of "width" (in bytes) and replicate it to fill 32bit. + assert(width == 1 || width == 2, "only byte or short types here"); + int bit_width = width * 8; + jint val = con; + val &= (1 << bit_width) - 1; // mask off sign bits + while(bit_width < 32) { + val |= (val << bit_width); + bit_width <<= 1; + } + jfloat fval = *((jfloat*) &val); // coerce to float type + return fval; +} + +static inline jdouble replicate8_imm(int con, int width) { + // Load a constant of "width" (in bytes) and replicate it to fill 64bit. + assert(width == 1 || width == 2 || width == 4, "only byte, short or int types here"); + int bit_width = width * 8; + jlong val = con; + val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits + while(bit_width < 64) { + val |= (val << bit_width); + bit_width <<= 1; + } + jdouble dval = *((jdouble*) &val); // coerce to double type + return dval; +} + #ifndef PRODUCT void MachNopNode::format(PhaseRegAlloc*, outputStream* st) const { st->print("nop \t# %d bytes pad for loops and calls", _count); @@ -103,6 +799,46 @@ encode %{ %} + +//----------OPERANDS----------------------------------------------------------- +// Operand definitions must precede instruction definitions for correct parsing +// in the ADLC because operands constitute user defined types which are used in +// instruction definitions. + +// Vectors +operand vecS() %{ + constraint(ALLOC_IN_RC(vectors_reg)); + match(VecS); + + format %{ %} + interface(REG_INTER); +%} + +operand vecD() %{ + constraint(ALLOC_IN_RC(vectord_reg)); + match(VecD); + + format %{ %} + interface(REG_INTER); +%} + +operand vecX() %{ + constraint(ALLOC_IN_RC(vectorx_reg)); + match(VecX); + + format %{ %} + interface(REG_INTER); +%} + +operand vecY() %{ + constraint(ALLOC_IN_RC(vectory_reg)); + match(VecY); + + format %{ %} + interface(REG_INTER); +%} + + // INSTRUCTIONS -- Platform independent definitions (same for 32- and 64-bit) // ============================================================================ @@ -852,3 +1588,797 @@ instruct sqrtD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} + +// ====================VECTOR INSTRUCTIONS===================================== + +// Load vectors (4 bytes long) +instruct loadV4(vecS dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 4); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "movd $dst,$mem\t! load vector (4 bytes)" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Load vectors (8 bytes long) +instruct loadV8(vecD dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 8); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "movq $dst,$mem\t! load vector (8 bytes)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Load vectors (16 bytes long) +instruct loadV16(vecX dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 16); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "movdqu $dst,$mem\t! load vector (16 bytes)" %} + ins_encode %{ + __ movdqu($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Load vectors (32 bytes long) +instruct loadV32(vecY dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 32); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "vmovdqu $dst,$mem\t! load vector (32 bytes)" %} + ins_encode %{ + __ vmovdqu($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Store vectors +instruct storeV4(memory mem, vecS src) %{ + predicate(n->as_StoreVector()->memory_size() == 4); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "movd $mem,$src\t! store vector (4 bytes)" %} + ins_encode %{ + __ movdl($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct storeV8(memory mem, vecD src) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "movq $mem,$src\t! store vector (8 bytes)" %} + ins_encode %{ + __ movq($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct storeV16(memory mem, vecX src) %{ + predicate(n->as_StoreVector()->memory_size() == 16); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "movdqu $mem,$src\t! store vector (16 bytes)" %} + ins_encode %{ + __ movdqu($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct storeV32(memory mem, vecY src) %{ + predicate(n->as_StoreVector()->memory_size() == 32); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "vmovdqu $mem,$src\t! store vector (32 bytes)" %} + ins_encode %{ + __ vmovdqu($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate byte scalar to be vector +instruct Repl4B(vecS dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\t! replicate4B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8B(vecD dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\t! replicate8B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16B(vecX dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "movlhps $dst,$dst\t! replicate16B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl32B(vecY dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 32); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "movlhps $dst,$dst\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate32B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate byte scalar immediate to be vector by loading from const table. +instruct Repl4B_imm(vecS dst, immI con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateB con)); + format %{ "movss $dst,[$constantaddress]\t! replicate4B($con)" %} + ins_encode %{ + __ movflt($dst$$XMMRegister, $constantaddress(replicate4_imm($con$$constant, 1))); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8B_imm(vecD dst, immI con) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB con)); + format %{ "movsd $dst,[$constantaddress]\t! replicate8B($con)" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1))); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16B_imm(vecX dst, immI con) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateB con)); + format %{ "movsd $dst,[$constantaddress]\t! replicate16B($con)\n\t" + "movlhps $dst,$dst" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1))); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl32B_imm(vecY dst, immI con) %{ + predicate(n->as_Vector()->length() == 32); + match(Set dst (ReplicateB con)); + format %{ "movsd $dst,[$constantaddress]\t! lreplicate32B($con)\n\t" + "movlhps $dst,$dst\n\t" + "vinsertf128h $dst,$dst,$dst" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1))); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate byte scalar zero to be vector +instruct Repl4B_zero(vecS dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateB zero)); + format %{ "pxor $dst,$dst\t! replicate4B zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8B_zero(vecD dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB zero)); + format %{ "pxor $dst,$dst\t! replicate8B zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl16B_zero(vecX dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateB zero)); + format %{ "pxor $dst,$dst\t! replicate16B zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl32B_zero(vecY dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 32); + match(Set dst (ReplicateB zero)); + format %{ "vxorpd $dst,$dst,$dst\t! replicate32B zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vxorpd($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate char/short (2 byte) scalar to be vector +instruct Repl2S(vecS dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\t! replicate2S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4S(vecD dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\t! replicate4S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8S(vecX dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "movlhps $dst,$dst\t! replicate8S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16S(vecY dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "movlhps $dst,$dst\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate16S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate char/short (2 byte) scalar immediate to be vector by loading from const table. +instruct Repl2S_imm(vecS dst, immI con) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateS con)); + format %{ "movss $dst,[$constantaddress]\t! replicate2S($con)" %} + ins_encode %{ + __ movflt($dst$$XMMRegister, $constantaddress(replicate4_imm($con$$constant, 2))); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4S_imm(vecD dst, immI con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS con)); + format %{ "movsd $dst,[$constantaddress]\t! replicate4S($con)" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 2))); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8S_imm(vecX dst, immI con) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateS con)); + format %{ "movsd $dst,[$constantaddress]\t! replicate8S($con)\n\t" + "movlhps $dst,$dst" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 2))); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16S_imm(vecY dst, immI con) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateS con)); + format %{ "movsd $dst,[$constantaddress]\t! replicate16S($con)\n\t" + "movlhps $dst,$dst\n\t" + "vinsertf128h $dst,$dst,$dst" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 2))); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate char/short (2 byte) scalar zero to be vector +instruct Repl2S_zero(vecS dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateS zero)); + format %{ "pxor $dst,$dst\t! replicate2S zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4S_zero(vecD dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS zero)); + format %{ "pxor $dst,$dst\t! replicate4S zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8S_zero(vecX dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateS zero)); + format %{ "pxor $dst,$dst\t! replicate8S zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl16S_zero(vecY dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateS zero)); + format %{ "vxorpd $dst,$dst,$dst\t! replicate16S zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vxorpd($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate integer (4 byte) scalar to be vector +instruct Repl2I(vecD dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI src)); + format %{ "movd $dst,$src\n\t" + "pshufd $dst,$dst,0x00\t! replicate2I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I(vecX dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI src)); + format %{ "movd $dst,$src\n\t" + "pshufd $dst,$dst,0x00\t! replicate4I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8I(vecY dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI src)); + format %{ "movd $dst,$src\n\t" + "pshufd $dst,$dst,0x00\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate8I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate integer (4 byte) scalar immediate to be vector by loading from const table. +instruct Repl2I_imm(vecD dst, immI con) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI con)); + format %{ "movsd $dst,[$constantaddress]\t! replicate2I($con)" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 4))); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I_imm(vecX dst, immI con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI con)); + format %{ "movsd $dst,[$constantaddress]\t! replicate4I($con)\n\t" + "movlhps $dst,$dst" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 4))); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8I_imm(vecY dst, immI con) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI con)); + format %{ "movsd $dst,[$constantaddress]\t! replicate8I($con)\n\t" + "movlhps $dst,$dst\n\t" + "vinsertf128h $dst,$dst,$dst" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 4))); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Integer could be loaded into xmm register directly from memory. +instruct Repl2I_mem(vecD dst, memory mem) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI mem)); + format %{ "movd $dst,$mem\n\t" + "pshufd $dst,$dst,0x00\t! replicate2I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I_mem(vecX dst, memory mem) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI mem)); + format %{ "movd $dst,$mem\n\t" + "pshufd $dst,$dst,0x00\t! replicate4I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8I_mem(vecY dst, memory mem) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI mem)); + format %{ "movd $dst,$mem\n\t" + "pshufd $dst,$dst,0x00\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate8I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate integer (4 byte) scalar zero to be vector +instruct Repl2I_zero(vecD dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI zero)); + format %{ "pxor $dst,$dst\t! replicate2I" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I_zero(vecX dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI zero)); + format %{ "pxor $dst,$dst\t! replicate4I zero)" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8I_zero(vecY dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI zero)); + format %{ "vxorpd $dst,$dst,$dst\t! replicate8I zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vxorpd($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate long (8 byte) scalar to be vector +#ifdef _LP64 +instruct Repl2L(vecX dst, rRegL src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL src)); + format %{ "movdq $dst,$src\n\t" + "movlhps $dst,$dst\t! replicate2L" %} + ins_encode %{ + __ movdq($dst$$XMMRegister, $src$$Register); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L(vecY dst, rRegL src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL src)); + format %{ "movdq $dst,$src\n\t" + "movlhps $dst,$dst\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate4L" %} + ins_encode %{ + __ movdq($dst$$XMMRegister, $src$$Register); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} +#else // _LP64 +instruct Repl2L(vecX dst, eRegL src, regD tmp) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL src)); + effect(TEMP dst, USE src, TEMP tmp); + format %{ "movdl $dst,$src.lo\n\t" + "movdl $tmp,$src.hi\n\t" + "punpckldq $dst,$tmp\n\t" + "movlhps $dst,$dst\t! replicate2L"%} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ movdl($tmp$$XMMRegister, HIGH_FROM_LOW($src$$Register)); + __ punpckldq($dst$$XMMRegister, $tmp$$XMMRegister); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L(vecY dst, eRegL src, regD tmp) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL src)); + effect(TEMP dst, USE src, TEMP tmp); + format %{ "movdl $dst,$src.lo\n\t" + "movdl $tmp,$src.hi\n\t" + "punpckldq $dst,$tmp\n\t" + "movlhps $dst,$dst\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate4L" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ movdl($tmp$$XMMRegister, HIGH_FROM_LOW($src$$Register)); + __ punpckldq($dst$$XMMRegister, $tmp$$XMMRegister); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} +#endif // _LP64 + +// Replicate long (8 byte) scalar immediate to be vector by loading from const table. +instruct Repl2L_imm(vecX dst, immL con) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL con)); + format %{ "movsd $dst,[$constantaddress]\t! replicate2L($con)\n\t" + "movlhps $dst,$dst" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress($con)); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L_imm(vecY dst, immL con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL con)); + format %{ "movsd $dst,[$constantaddress]\t! replicate4L($con)\n\t" + "movlhps $dst,$dst\n\t" + "vinsertf128h $dst,$dst,$dst" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $constantaddress($con)); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Long could be loaded into xmm register directly from memory. +instruct Repl2L_mem(vecX dst, memory mem) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL mem)); + format %{ "movq $dst,$mem\n\t" + "movlhps $dst,$dst\t! replicate2L" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $mem$$Address); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L_mem(vecY dst, memory mem) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL mem)); + format %{ "movq $dst,$mem\n\t" + "movlhps $dst,$dst\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate4L" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $mem$$Address); + __ movlhps($dst$$XMMRegister, $dst$$XMMRegister); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate long (8 byte) scalar zero to be vector +instruct Repl2L_zero(vecX dst, immL0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL zero)); + format %{ "pxor $dst,$dst\t! replicate2L zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4L_zero(vecY dst, immL0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL zero)); + format %{ "vxorpd $dst,$dst,$dst\t! replicate4L zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vxorpd($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate float (4 byte) scalar to be vector +instruct Repl2F(vecD dst, regF src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF src)); + format %{ "pshufd $dst,$dst,0x00\t! replicate2F" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4F(vecX dst, regF src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateF src)); + format %{ "pshufd $dst,$dst,0x00\t! replicate4F" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8F(vecY dst, regF src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateF src)); + format %{ "pshufd $dst,$src,0x00\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate8F" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate float (4 byte) scalar zero to be vector +instruct Repl2F_zero(vecD dst, immF0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF zero)); + format %{ "xorps $dst,$dst\t! replicate2F zero" %} + ins_encode %{ + __ xorps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4F_zero(vecX dst, immF0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateF zero)); + format %{ "xorps $dst,$dst\t! replicate4F zero" %} + ins_encode %{ + __ xorps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8F_zero(vecY dst, immF0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateF zero)); + format %{ "vxorps $dst,$dst,$dst\t! replicate8F zero" %} + ins_encode %{ + bool vector256 = true; + __ vxorps($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate double (8 bytes) scalar to be vector +instruct Repl2D(vecX dst, regD src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateD src)); + format %{ "pshufd $dst,$src,0x44\t! replicate2D" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x44); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4D(vecY dst, regD src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateD src)); + format %{ "pshufd $dst,$src,0x44\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate4D" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x44); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate double (8 byte) scalar zero to be vector +instruct Repl2D_zero(vecX dst, immD0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateD zero)); + format %{ "xorpd $dst,$dst\t! replicate2D zero" %} + ins_encode %{ + __ xorpd($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4D_zero(vecY dst, immD0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateD zero)); + format %{ "vxorpd $dst,$dst,$dst,vect256\t! replicate4D zero" %} + ins_encode %{ + bool vector256 = true; + __ vxorpd($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + diff --git a/hotspot/src/cpu/x86/vm/x86_32.ad b/hotspot/src/cpu/x86/vm/x86_32.ad index 300903954d2..b46d3d68843 100644 --- a/hotspot/src/cpu/x86/vm/x86_32.ad +++ b/hotspot/src/cpu/x86/vm/x86_32.ad @@ -74,9 +74,6 @@ reg_def EDX(SOC, SOC, Op_RegI, 2, rdx->as_VMReg()); reg_def EAX(SOC, SOC, Op_RegI, 0, rax->as_VMReg()); reg_def ESP( NS, NS, Op_RegI, 4, rsp->as_VMReg()); -// Special Registers -reg_def EFLAGS(SOC, SOC, 0, 8, VMRegImpl::Bad()); - // Float registers. We treat TOS/FPR0 special. It is invisible to the // allocator, and only shows up in the encodings. reg_def FPR0L( SOC, SOC, Op_RegF, 0, VMRegImpl::Bad()); @@ -105,27 +102,6 @@ reg_def FPR6H( SOC, SOC, Op_RegF, 6, as_FloatRegister(5)->as_VMReg()->next()); reg_def FPR7L( SOC, SOC, Op_RegF, 7, as_FloatRegister(6)->as_VMReg()); reg_def FPR7H( SOC, SOC, Op_RegF, 7, as_FloatRegister(6)->as_VMReg()->next()); -// XMM registers. 128-bit registers or 4 words each, labeled a-d. -// Word a in each register holds a Float, words ab hold a Double. -// We currently do not use the SIMD capabilities, so registers cd -// are unused at the moment. -reg_def XMM0a( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()); -reg_def XMM0b( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()); -reg_def XMM1a( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()); -reg_def XMM1b( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()); -reg_def XMM2a( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()); -reg_def XMM2b( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()); -reg_def XMM3a( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()); -reg_def XMM3b( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()); -reg_def XMM4a( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()); -reg_def XMM4b( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()); -reg_def XMM5a( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()); -reg_def XMM5b( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()); -reg_def XMM6a( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()); -reg_def XMM6b( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()); -reg_def XMM7a( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()); -reg_def XMM7b( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()); - // Specify priority of register selection within phases of register // allocation. Highest priority is first. A useful heuristic is to // give registers a low priority when they are required by machine @@ -138,15 +114,6 @@ alloc_class chunk0( ECX, EBX, EBP, EDI, EAX, EDX, ESI, ESP, FPR3L, FPR3H, FPR4L, FPR4H, FPR5L, FPR5H, FPR6L, FPR6H, FPR7L, FPR7H ); -alloc_class chunk1( XMM0a, XMM0b, - XMM1a, XMM1b, - XMM2a, XMM2b, - XMM3a, XMM3b, - XMM4a, XMM4b, - XMM5a, XMM5b, - XMM6a, XMM6b, - XMM7a, XMM7b, EFLAGS); - //----------Architecture Description Register Classes-------------------------- // Several register classes are automatically defined based upon information in @@ -159,12 +126,12 @@ alloc_class chunk1( XMM0a, XMM0b, // Class for all registers reg_class any_reg(EAX, EDX, EBP, EDI, ESI, ECX, EBX, ESP); // Class for general registers -reg_class e_reg(EAX, EDX, EBP, EDI, ESI, ECX, EBX); +reg_class int_reg(EAX, EDX, EBP, EDI, ESI, ECX, EBX); // Class for general registers which may be used for implicit null checks on win95 // Also safe for use by tailjump. We don't want to allocate in rbp, -reg_class e_reg_no_rbp(EAX, EDX, EDI, ESI, ECX, EBX); +reg_class int_reg_no_rbp(EAX, EDX, EDI, ESI, ECX, EBX); // Class of "X" registers -reg_class x_reg(EBX, ECX, EDX, EAX); +reg_class int_x_reg(EBX, ECX, EDX, EAX); // Class of registers that can appear in an address with no offset. // EBP and ESP require an extra instruction byte for zero offset. // Used in fast-unlock @@ -193,8 +160,6 @@ reg_class ebp_reg(EBP); reg_class sp_reg(ESP); // Singleton class for instruction pointer // reg_class ip_reg(EIP); -// Singleton class for condition codes -reg_class int_flags(EFLAGS); // Class of integer register pairs reg_class long_reg( EAX,EDX, ECX,EBX, EBP,EDI ); // Class of integer register pairs that aligns with calling convention @@ -206,29 +171,18 @@ reg_class nadx_reg( EBX,ECX,ESI,EDI,EBP ); // Floating point registers. Notice FPR0 is not a choice. // FPR0 is not ever allocated; we use clever encodings to fake // a 2-address instructions out of Intels FP stack. -reg_class flt_reg( FPR1L,FPR2L,FPR3L,FPR4L,FPR5L,FPR6L,FPR7L ); +reg_class fp_flt_reg( FPR1L,FPR2L,FPR3L,FPR4L,FPR5L,FPR6L,FPR7L ); -// make a register class for SSE registers -reg_class xmm_reg(XMM0a, XMM1a, XMM2a, XMM3a, XMM4a, XMM5a, XMM6a, XMM7a); +reg_class fp_dbl_reg( FPR1L,FPR1H, FPR2L,FPR2H, FPR3L,FPR3H, + FPR4L,FPR4H, FPR5L,FPR5H, FPR6L,FPR6H, + FPR7L,FPR7H ); -// make a double register class for SSE2 registers -reg_class xdb_reg(XMM0a,XMM0b, XMM1a,XMM1b, XMM2a,XMM2b, XMM3a,XMM3b, - XMM4a,XMM4b, XMM5a,XMM5b, XMM6a,XMM6b, XMM7a,XMM7b ); +reg_class fp_flt_reg0( FPR1L ); +reg_class fp_dbl_reg0( FPR1L,FPR1H ); +reg_class fp_dbl_reg1( FPR2L,FPR2H ); +reg_class fp_dbl_notreg0( FPR2L,FPR2H, FPR3L,FPR3H, FPR4L,FPR4H, + FPR5L,FPR5H, FPR6L,FPR6H, FPR7L,FPR7H ); -reg_class dbl_reg( FPR1L,FPR1H, FPR2L,FPR2H, FPR3L,FPR3H, - FPR4L,FPR4H, FPR5L,FPR5H, FPR6L,FPR6H, - FPR7L,FPR7H ); - -reg_class flt_reg0( FPR1L ); -reg_class dbl_reg0( FPR1L,FPR1H ); -reg_class dbl_reg1( FPR2L,FPR2H ); -reg_class dbl_notreg0( FPR2L,FPR2H, FPR3L,FPR3H, FPR4L,FPR4H, - FPR5L,FPR5H, FPR6L,FPR6H, FPR7L,FPR7H ); - -// XMM6 and XMM7 could be used as temporary registers for long, float and -// double values for SSE2. -reg_class xdb_reg6( XMM6a,XMM6b ); -reg_class xdb_reg7( XMM7a,XMM7b ); %} @@ -412,7 +366,7 @@ void store_to_stackslot(CodeBuffer &cbuf, int opcode, int rm_field, int disp) { } } - // eRegI ereg, memory mem) %{ // emit_reg_mem + // rRegI ereg, memory mem) %{ // emit_reg_mem void encode_RegMem( CodeBuffer &cbuf, int reg_encoding, int base, int index, int scale, int displace, bool displace_is_oop ) { // There is no index & no scale, use form without SIB byte if ((index == 0x4) && @@ -787,7 +741,7 @@ static int impl_x_helper( CodeBuffer *cbuf, bool do_size, bool is_load, #endif } int offset_size = (offset == 0) ? 0 : ((offset <= 127) ? 1 : 4); - // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes. + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. return size+5+offset_size; } @@ -821,7 +775,7 @@ static int impl_movx_helper( CodeBuffer *cbuf, bool do_size, int src_lo, int dst } #endif } - // VEX_2bytes prefix is used if UseAVX > 0, and it takes the same 2 bytes. + // VEX_2bytes prefix is used if UseAVX > 0, and it takes the same 2 bytes as SIMD prefix. // Only MOVAPS SSE prefix uses 1 byte. int sz = 4; if (!(src_lo+1 == src_hi && dst_lo+1 == dst_hi) && @@ -903,6 +857,108 @@ static int impl_fp_store_helper( CodeBuffer *cbuf, bool do_size, int src_lo, int return impl_helper(cbuf,do_size,false,offset,st_op,op,op_str,size, st); } +// Next two methods are shared by 32- and 64-bit VM. They are defined in x86.ad. +static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo, + int src_hi, int dst_hi, uint ireg, outputStream* st); + +static int vec_spill_helper(CodeBuffer *cbuf, bool do_size, bool is_load, + int stack_offset, int reg, uint ireg, outputStream* st); + +static int vec_stack_to_stack_helper(CodeBuffer *cbuf, bool do_size, int src_offset, + int dst_offset, uint ireg, outputStream* st) { + int calc_size = 0; + int src_offset_size = (src_offset == 0) ? 0 : ((src_offset < 0x80) ? 1 : 4); + int dst_offset_size = (dst_offset == 0) ? 0 : ((dst_offset < 0x80) ? 1 : 4); + switch (ireg) { + case Op_VecS: + calc_size = 3+src_offset_size + 3+dst_offset_size; + break; + case Op_VecD: + calc_size = 3+src_offset_size + 3+dst_offset_size; + src_offset += 4; + dst_offset += 4; + src_offset_size = (src_offset == 0) ? 0 : ((src_offset < 0x80) ? 1 : 4); + dst_offset_size = (dst_offset == 0) ? 0 : ((dst_offset < 0x80) ? 1 : 4); + calc_size += 3+src_offset_size + 3+dst_offset_size; + break; + case Op_VecX: + calc_size = 6 + 6 + 5+src_offset_size + 5+dst_offset_size; + break; + case Op_VecY: + calc_size = 6 + 6 + 5+src_offset_size + 5+dst_offset_size; + break; + default: + ShouldNotReachHere(); + } + if (cbuf) { + MacroAssembler _masm(cbuf); + int offset = __ offset(); + switch (ireg) { + case Op_VecS: + __ pushl(Address(rsp, src_offset)); + __ popl (Address(rsp, dst_offset)); + break; + case Op_VecD: + __ pushl(Address(rsp, src_offset)); + __ popl (Address(rsp, dst_offset)); + __ pushl(Address(rsp, src_offset+4)); + __ popl (Address(rsp, dst_offset+4)); + break; + case Op_VecX: + __ movdqu(Address(rsp, -16), xmm0); + __ movdqu(xmm0, Address(rsp, src_offset)); + __ movdqu(Address(rsp, dst_offset), xmm0); + __ movdqu(xmm0, Address(rsp, -16)); + break; + case Op_VecY: + __ vmovdqu(Address(rsp, -32), xmm0); + __ vmovdqu(xmm0, Address(rsp, src_offset)); + __ vmovdqu(Address(rsp, dst_offset), xmm0); + __ vmovdqu(xmm0, Address(rsp, -32)); + break; + default: + ShouldNotReachHere(); + } + int size = __ offset() - offset; + assert(size == calc_size, "incorrect size calculattion"); + return size; +#ifndef PRODUCT + } else if (!do_size) { + switch (ireg) { + case Op_VecS: + st->print("pushl [rsp + #%d]\t# 32-bit mem-mem spill\n\t" + "popl [rsp + #%d]", + src_offset, dst_offset); + break; + case Op_VecD: + st->print("pushl [rsp + #%d]\t# 64-bit mem-mem spill\n\t" + "popq [rsp + #%d]\n\t" + "pushl [rsp + #%d]\n\t" + "popq [rsp + #%d]", + src_offset, dst_offset, src_offset+4, dst_offset+4); + break; + case Op_VecX: + st->print("movdqu [rsp - #16], xmm0\t# 128-bit mem-mem spill\n\t" + "movdqu xmm0, [rsp + #%d]\n\t" + "movdqu [rsp + #%d], xmm0\n\t" + "movdqu xmm0, [rsp - #16]", + src_offset, dst_offset); + break; + case Op_VecY: + st->print("vmovdqu [rsp - #32], xmm0\t# 256-bit mem-mem spill\n\t" + "vmovdqu xmm0, [rsp + #%d]\n\t" + "vmovdqu [rsp + #%d], xmm0\n\t" + "vmovdqu xmm0, [rsp - #32]", + src_offset, dst_offset); + break; + default: + ShouldNotReachHere(); + } +#endif + } + return calc_size; +} + uint MachSpillCopyNode::implementation( CodeBuffer *cbuf, PhaseRegAlloc *ra_, bool do_size, outputStream* st ) const { // Get registers to move OptoReg::Name src_second = ra_->get_reg_second(in(1)); @@ -923,6 +979,29 @@ uint MachSpillCopyNode::implementation( CodeBuffer *cbuf, PhaseRegAlloc *ra_, bo if( src_first == dst_first && src_second == dst_second ) return size; // Self copy, no move + if (bottom_type()->isa_vect() != NULL) { + uint ireg = ideal_reg(); + assert((src_first_rc != rc_int && dst_first_rc != rc_int), "sanity"); + assert((src_first_rc != rc_float && dst_first_rc != rc_float), "sanity"); + assert((ireg == Op_VecS || ireg == Op_VecD || ireg == Op_VecX || ireg == Op_VecY), "sanity"); + if( src_first_rc == rc_stack && dst_first_rc == rc_stack ) { + // mem -> mem + int src_offset = ra_->reg2offset(src_first); + int dst_offset = ra_->reg2offset(dst_first); + return vec_stack_to_stack_helper(cbuf, do_size, src_offset, dst_offset, ireg, st); + } else if (src_first_rc == rc_xmm && dst_first_rc == rc_xmm ) { + return vec_mov_helper(cbuf, do_size, src_first, dst_first, src_second, dst_second, ireg, st); + } else if (src_first_rc == rc_xmm && dst_first_rc == rc_stack ) { + int stack_offset = ra_->reg2offset(dst_first); + return vec_spill_helper(cbuf, do_size, false, stack_offset, src_first, ireg, st); + } else if (src_first_rc == rc_stack && dst_first_rc == rc_xmm ) { + int stack_offset = ra_->reg2offset(src_first); + return vec_spill_helper(cbuf, do_size, true, stack_offset, dst_first, ireg, st); + } else { + ShouldNotReachHere(); + } + } + // -------------------------------------- // Check for mem-mem move. push/pop to move. if( src_first_rc == rc_stack && dst_first_rc == rc_stack ) { @@ -1313,16 +1392,6 @@ const bool Matcher::convL2FSupported(void) { return true; } -// Vector width in bytes -const uint Matcher::vector_width_in_bytes(void) { - return UseSSE >= 2 ? 8 : 0; -} - -// Vector ideal reg -const uint Matcher::vector_ideal_reg(void) { - return Op_RegD; -} - // Is this branch offset short enough that a short branch can be used? // // NOTE: If the platform does not provide any short branch variants, then @@ -1452,7 +1521,7 @@ const bool Matcher::int_in_long = false; // arguments in those registers not be available to the callee. bool Matcher::can_be_java_arg( int reg ) { if( reg == ECX_num || reg == EDX_num ) return true; - if( (reg == XMM0a_num || reg == XMM1a_num) && UseSSE>=1 ) return true; + if( (reg == XMM0_num || reg == XMM1_num ) && UseSSE>=1 ) return true; if( (reg == XMM0b_num || reg == XMM1b_num) && UseSSE>=2 ) return true; return false; } @@ -1565,16 +1634,16 @@ encode %{ emit_opcode(cbuf,0x66); %} - enc_class RegReg (eRegI dst, eRegI src) %{ // RegReg(Many) + enc_class RegReg (rRegI dst, rRegI src) %{ // RegReg(Many) emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} - enc_class OpcRegReg (immI opcode, eRegI dst, eRegI src) %{ // OpcRegReg(Many) + enc_class OpcRegReg (immI opcode, rRegI dst, rRegI src) %{ // OpcRegReg(Many) emit_opcode(cbuf,$opcode$$constant); emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} - enc_class mov_r32_imm0( eRegI dst ) %{ + enc_class mov_r32_imm0( rRegI dst ) %{ emit_opcode( cbuf, 0xB8 + $dst$$reg ); // 0xB8+ rd -- MOV r32 ,imm32 emit_d32 ( cbuf, 0x0 ); // imm32==0x0 %} @@ -1621,7 +1690,7 @@ encode %{ %} // Dense encoding for older common ops - enc_class Opc_plus(immI opcode, eRegI reg) %{ + enc_class Opc_plus(immI opcode, rRegI reg) %{ emit_opcode(cbuf, $opcode$$constant + $reg$$reg); %} @@ -1637,7 +1706,7 @@ encode %{ } %} - enc_class OpcSErm (eRegI dst, immI imm) %{ // OpcSEr/m + enc_class OpcSErm (rRegI dst, immI imm) %{ // OpcSEr/m // Emit primary opcode and set sign-extend bit // Check for 8-bit immediate, and set sign extend bit in opcode if (($imm$$constant >= -128) && ($imm$$constant <= 127)) { @@ -1682,7 +1751,7 @@ encode %{ else emit_d32(cbuf,con); %} - enc_class OpcSReg (eRegI dst) %{ // BSWAP + enc_class OpcSReg (rRegI dst) %{ // BSWAP emit_cc(cbuf, $secondary, $dst$$reg ); %} @@ -1700,7 +1769,7 @@ encode %{ emit_rm(cbuf, 0x3, destlo, desthi); %} - enc_class RegOpc (eRegI div) %{ // IDIV, IMOD, JMP indirect, ... + enc_class RegOpc (rRegI div) %{ // IDIV, IMOD, JMP indirect, ... emit_rm(cbuf, 0x3, $secondary, $div$$reg ); %} @@ -1891,20 +1960,20 @@ encode %{ // runtime_call_Relocation::spec(), RELOC_IMM32 ); // %} - enc_class RegOpcImm (eRegI dst, immI8 shift) %{ // SHL, SAR, SHR + enc_class RegOpcImm (rRegI dst, immI8 shift) %{ // SHL, SAR, SHR $$$emit8$primary; emit_rm(cbuf, 0x3, $secondary, $dst$$reg); $$$emit8$shift$$constant; %} - enc_class LdImmI (eRegI dst, immI src) %{ // Load Immediate + enc_class LdImmI (rRegI dst, immI src) %{ // Load Immediate // Load immediate does not have a zero or sign extended version // for 8-bit immediates emit_opcode(cbuf, 0xB8 + $dst$$reg); $$$emit32$src$$constant; %} - enc_class LdImmP (eRegI dst, immI src) %{ // Load Immediate + enc_class LdImmP (rRegI dst, immI src) %{ // Load Immediate // Load immediate does not have a zero or sign extended version // for 8-bit immediates emit_opcode(cbuf, $primary + $dst$$reg); @@ -1943,15 +2012,15 @@ encode %{ // Encode a reg-reg copy. If it is useless, then empty encoding. - enc_class enc_Copy( eRegI dst, eRegI src ) %{ + enc_class enc_Copy( rRegI dst, rRegI src ) %{ encode_Copy( cbuf, $dst$$reg, $src$$reg ); %} - enc_class enc_CopyL_Lo( eRegI dst, eRegL src ) %{ + enc_class enc_CopyL_Lo( rRegI dst, eRegL src ) %{ encode_Copy( cbuf, $dst$$reg, $src$$reg ); %} - enc_class RegReg (eRegI dst, eRegI src) %{ // RegReg(Many) + enc_class RegReg (rRegI dst, rRegI src) %{ // RegReg(Many) emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} @@ -1973,7 +2042,7 @@ encode %{ emit_rm(cbuf, 0x3, HIGH_FROM_LOW($dst$$reg), HIGH_FROM_LOW($src$$reg)); %} - enc_class RegReg_HiLo( eRegL src, eRegI dst ) %{ + enc_class RegReg_HiLo( eRegL src, rRegI dst ) %{ emit_rm(cbuf, 0x3, $dst$$reg, HIGH_FROM_LOW($src$$reg)); %} @@ -2068,7 +2137,7 @@ encode %{ cbuf.set_insts_mark(); // Mark start of opcode for reloc info in mem operand %} - enc_class RegMem (eRegI ereg, memory mem) %{ // emit_reg_mem + enc_class RegMem (rRegI ereg, memory mem) %{ // emit_reg_mem int reg_encoding = $ereg$$reg; int base = $mem$$base; int index = $mem$$index; @@ -2132,7 +2201,7 @@ encode %{ // Clone of RegMem but accepts an extra parameter to access each // half of a double in memory; it never needs relocation info. - enc_class Mov_MemD_half_to_Reg (immI opcode, memory mem, immI disp_for_half, eRegI rm_reg) %{ + enc_class Mov_MemD_half_to_Reg (immI opcode, memory mem, immI disp_for_half, rRegI rm_reg) %{ emit_opcode(cbuf,$opcode$$constant); int reg_encoding = $rm_reg$$reg; int base = $mem$$base; @@ -2168,7 +2237,7 @@ encode %{ encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, disp_is_oop); %} - enc_class RegLea (eRegI dst, eRegI src0, immI src1 ) %{ // emit_reg_lea + enc_class RegLea (rRegI dst, rRegI src0, immI src1 ) %{ // emit_reg_lea int reg_encoding = $dst$$reg; int base = $src0$$reg; // 0xFFFFFFFF indicates no base int index = 0x04; // 0x04 indicates no index @@ -2178,7 +2247,7 @@ encode %{ encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); %} - enc_class min_enc (eRegI dst, eRegI src) %{ // MIN + enc_class min_enc (rRegI dst, rRegI src) %{ // MIN // Compare dst,src emit_opcode(cbuf,0x3B); emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); @@ -2190,7 +2259,7 @@ encode %{ emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} - enc_class max_enc (eRegI dst, eRegI src) %{ // MAX + enc_class max_enc (rRegI dst, rRegI src) %{ // MAX // Compare dst,src emit_opcode(cbuf,0x3B); emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); @@ -2221,7 +2290,7 @@ encode %{ encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); %} - enc_class neg_reg(eRegI dst) %{ + enc_class neg_reg(rRegI dst) %{ // NEG $dst emit_opcode(cbuf,0xF7); emit_rm(cbuf, 0x3, 0x03, $dst$$reg ); @@ -2251,7 +2320,7 @@ encode %{ emit_rm(cbuf, 0x3, $p$$reg, tmpReg); %} - enc_class enc_cmpLTP_mem(eRegI p, eRegI q, memory mem, eCXRegI tmp) %{ // cadd_cmpLT + enc_class enc_cmpLTP_mem(rRegI p, rRegI q, memory mem, eCXRegI tmp) %{ // cadd_cmpLT int tmpReg = $tmp$$reg; // SUB $p,$q @@ -2390,12 +2459,12 @@ encode %{ %} // Special case for moving an integer register to a stack slot. - enc_class OpcPRegSS( stackSlotI dst, eRegI src ) %{ // RegSS + enc_class OpcPRegSS( stackSlotI dst, rRegI src ) %{ // RegSS store_to_stackslot( cbuf, $primary, $src$$reg, $dst$$disp ); %} // Special case for moving a register to a stack slot. - enc_class RegSS( stackSlotI dst, eRegI src ) %{ // RegSS + enc_class RegSS( stackSlotI dst, rRegI src ) %{ // RegSS // Opcode already emitted emit_rm( cbuf, 0x02, $src$$reg, ESP_enc ); // R/M byte emit_rm( cbuf, 0x00, ESP_enc, ESP_enc); // SIB byte @@ -2640,7 +2709,7 @@ encode %{ // equal_result = 0; // nan_result = -1; - enc_class CmpF_Result(eRegI dst) %{ + enc_class CmpF_Result(rRegI dst) %{ // fnstsw_ax(); emit_opcode( cbuf, 0xDF); emit_opcode( cbuf, 0xE0); @@ -2685,7 +2754,7 @@ encode %{ // done: %} - enc_class convert_int_long( regL dst, eRegI src ) %{ + enc_class convert_int_long( regL dst, rRegI src ) %{ // mov $dst.lo,$src int dst_encoding = $dst$$reg; int src_encoding = $src$$reg; @@ -2754,7 +2823,7 @@ encode %{ emit_rm( cbuf, 0x3, 0x4, $src$$reg); %} - enc_class long_multiply( eADXRegL dst, eRegL src, eRegI tmp ) %{ + enc_class long_multiply( eADXRegL dst, eRegL src, rRegI tmp ) %{ // Basic idea: lo(result) = lo(x_lo * y_lo) // hi(result) = hi(x_lo * y_lo) + lo(x_hi * y_lo) + lo(x_lo * y_hi) // MOV $tmp,$src.lo @@ -2780,7 +2849,7 @@ encode %{ emit_rm( cbuf, 0x3, HIGH_FROM_LOW($dst$$reg), $tmp$$reg ); %} - enc_class long_multiply_con( eADXRegL dst, immL_127 src, eRegI tmp ) %{ + enc_class long_multiply_con( eADXRegL dst, immL_127 src, rRegI tmp ) %{ // Basic idea: lo(result) = lo(src * y_lo) // hi(result) = hi(src * y_lo) + lo(src * y_hi) // IMUL $tmp,EDX,$src @@ -2836,7 +2905,7 @@ encode %{ emit_d8(cbuf, 4*4); %} - enc_class long_cmp_flags0( eRegL src, eRegI tmp ) %{ + enc_class long_cmp_flags0( eRegL src, rRegI tmp ) %{ // MOV $tmp,$src.lo emit_opcode(cbuf, 0x8B); emit_rm(cbuf, 0x3, $tmp$$reg, $src$$reg); @@ -2857,7 +2926,7 @@ encode %{ emit_rm(cbuf, 0x3, HIGH_FROM_LOW($src1$$reg), HIGH_FROM_LOW($src2$$reg) ); %} - enc_class long_cmp_flags2( eRegL src1, eRegL src2, eRegI tmp ) %{ + enc_class long_cmp_flags2( eRegL src1, eRegL src2, rRegI tmp ) %{ // CMP $src1.lo,$src2.lo\t! Long compare; set flags for low bits emit_opcode( cbuf, 0x3B ); emit_rm(cbuf, 0x3, $src1$$reg, $src2$$reg ); @@ -2869,7 +2938,7 @@ encode %{ emit_rm(cbuf, 0x3, $tmp$$reg, HIGH_FROM_LOW($src2$$reg) ); %} - enc_class long_cmp_flags3( eRegL src, eRegI tmp ) %{ + enc_class long_cmp_flags3( eRegL src, rRegI tmp ) %{ // XOR $tmp,$tmp emit_opcode(cbuf,0x33); // XOR emit_rm(cbuf,0x3, $tmp$$reg, $tmp$$reg); @@ -3762,9 +3831,9 @@ frame %{ // in SSE2+ mode we want to keep the FPU stack clean so pretend // that C functions return float and double results in XMM0. if( ideal_reg == Op_RegD && UseSSE>=2 ) - return OptoRegPair(XMM0b_num,XMM0a_num); + return OptoRegPair(XMM0b_num,XMM0_num); if( ideal_reg == Op_RegF && UseSSE>=2 ) - return OptoRegPair(OptoReg::Bad,XMM0a_num); + return OptoRegPair(OptoReg::Bad,XMM0_num); return OptoRegPair(hi[ideal_reg],lo[ideal_reg]); %} @@ -3775,9 +3844,9 @@ frame %{ static int lo[Op_RegL+1] = { 0, 0, OptoReg::Bad, EAX_num, EAX_num, FPR1L_num, FPR1L_num, EAX_num }; static int hi[Op_RegL+1] = { 0, 0, OptoReg::Bad, OptoReg::Bad, OptoReg::Bad, OptoReg::Bad, FPR1H_num, EDX_num }; if( ideal_reg == Op_RegD && UseSSE>=2 ) - return OptoRegPair(XMM0b_num,XMM0a_num); + return OptoRegPair(XMM0b_num,XMM0_num); if( ideal_reg == Op_RegF && UseSSE>=1 ) - return OptoRegPair(OptoReg::Bad,XMM0a_num); + return OptoRegPair(OptoReg::Bad,XMM0_num); return OptoRegPair(hi[ideal_reg],lo[ideal_reg]); %} @@ -4147,8 +4216,8 @@ operand immI_65535() %{ // Register Operands // Integer Register -operand eRegI() %{ - constraint(ALLOC_IN_RC(e_reg)); +operand rRegI() %{ + constraint(ALLOC_IN_RC(int_reg)); match(RegI); match(xRegI); match(eAXRegI); @@ -4163,8 +4232,8 @@ operand eRegI() %{ %} // Subset of Integer Register -operand xRegI(eRegI reg) %{ - constraint(ALLOC_IN_RC(x_reg)); +operand xRegI(rRegI reg) %{ + constraint(ALLOC_IN_RC(int_x_reg)); match(reg); match(eAXRegI); match(eBXRegI); @@ -4179,7 +4248,7 @@ operand xRegI(eRegI reg) %{ operand eAXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(eax_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EAX" %} interface(REG_INTER); @@ -4189,7 +4258,7 @@ operand eAXRegI(xRegI reg) %{ operand eBXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(ebx_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EBX" %} interface(REG_INTER); @@ -4198,7 +4267,7 @@ operand eBXRegI(xRegI reg) %{ operand eCXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(ecx_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "ECX" %} interface(REG_INTER); @@ -4207,7 +4276,7 @@ operand eCXRegI(xRegI reg) %{ operand eDXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(edx_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EDX" %} interface(REG_INTER); @@ -4216,7 +4285,7 @@ operand eDXRegI(xRegI reg) %{ operand eDIRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(edi_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EDI" %} interface(REG_INTER); @@ -4263,7 +4332,7 @@ operand ncxRegI() %{ operand eSIRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(esi_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "ESI" %} interface(REG_INTER); @@ -4284,7 +4353,7 @@ operand anyRegP() %{ %} operand eRegP() %{ - constraint(ALLOC_IN_RC(e_reg)); + constraint(ALLOC_IN_RC(int_reg)); match(RegP); match(eAXRegP); match(eBXRegP); @@ -4297,7 +4366,7 @@ operand eRegP() %{ // On windows95, EBP is not safe to use for implicit null tests. operand eRegP_no_EBP() %{ - constraint(ALLOC_IN_RC(e_reg_no_rbp)); + constraint(ALLOC_IN_RC(int_reg_no_rbp)); match(RegP); match(eAXRegP); match(eBXRegP); @@ -4477,7 +4546,7 @@ operand flagsReg_long_LEGT() %{ // Float register operands operand regDPR() %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_reg)); + constraint(ALLOC_IN_RC(fp_dbl_reg)); match(RegD); match(regDPR1); match(regDPR2); @@ -4487,7 +4556,7 @@ operand regDPR() %{ operand regDPR1(regDPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_reg0)); + constraint(ALLOC_IN_RC(fp_dbl_reg0)); match(reg); format %{ "FPR1" %} interface(REG_INTER); @@ -4495,7 +4564,7 @@ operand regDPR1(regDPR reg) %{ operand regDPR2(regDPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_reg1)); + constraint(ALLOC_IN_RC(fp_dbl_reg1)); match(reg); format %{ "FPR2" %} interface(REG_INTER); @@ -4503,45 +4572,16 @@ operand regDPR2(regDPR reg) %{ operand regnotDPR1(regDPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_notreg0)); + constraint(ALLOC_IN_RC(fp_dbl_notreg0)); match(reg); format %{ %} interface(REG_INTER); %} -// XMM Double register operands -operand regD() %{ - predicate( UseSSE>=2 ); - constraint(ALLOC_IN_RC(xdb_reg)); - match(RegD); - match(regD6); - match(regD7); - format %{ %} - interface(REG_INTER); -%} - -// XMM6 double register operands -operand regD6(regD reg) %{ - predicate( UseSSE>=2 ); - constraint(ALLOC_IN_RC(xdb_reg6)); - match(reg); - format %{ "XMM6" %} - interface(REG_INTER); -%} - -// XMM7 double register operands -operand regD7(regD reg) %{ - predicate( UseSSE>=2 ); - constraint(ALLOC_IN_RC(xdb_reg7)); - match(reg); - format %{ "XMM7" %} - interface(REG_INTER); -%} - // Float register operands operand regFPR() %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(flt_reg)); + constraint(ALLOC_IN_RC(fp_flt_reg)); match(RegF); match(regFPR1); format %{ %} @@ -4551,21 +4591,30 @@ operand regFPR() %{ // Float register operands operand regFPR1(regFPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(flt_reg0)); + constraint(ALLOC_IN_RC(fp_flt_reg0)); match(reg); format %{ "FPR1" %} interface(REG_INTER); %} -// XMM register operands +// XMM Float register operands operand regF() %{ predicate( UseSSE>=1 ); - constraint(ALLOC_IN_RC(xmm_reg)); + constraint(ALLOC_IN_RC(float_reg)); match(RegF); format %{ %} interface(REG_INTER); %} +// XMM Double register operands +operand regD() %{ + predicate( UseSSE>=2 ); + constraint(ALLOC_IN_RC(double_reg)); + match(RegD); + format %{ %} + interface(REG_INTER); +%} + //----------Memory Operands---------------------------------------------------- // Direct Memory Operand @@ -4583,7 +4632,7 @@ operand direct(immP addr) %{ // Indirect Memory Operand operand indirect(eRegP reg) %{ - constraint(ALLOC_IN_RC(e_reg)); + constraint(ALLOC_IN_RC(int_reg)); match(reg); format %{ "[$reg]" %} @@ -4622,7 +4671,7 @@ operand indOffset32(eRegP reg, immI off) %{ %} // Indirect Memory Plus Long Offset Operand -operand indOffset32X(eRegI reg, immP off) %{ +operand indOffset32X(rRegI reg, immP off) %{ match(AddP off reg); format %{ "[$reg + $off]" %} @@ -4635,7 +4684,7 @@ operand indOffset32X(eRegI reg, immP off) %{ %} // Indirect Memory Plus Index Register Plus Offset Operand -operand indIndexOffset(eRegP reg, eRegI ireg, immI off) %{ +operand indIndexOffset(eRegP reg, rRegI ireg, immI off) %{ match(AddP (AddP reg ireg) off); op_cost(10); @@ -4649,7 +4698,7 @@ operand indIndexOffset(eRegP reg, eRegI ireg, immI off) %{ %} // Indirect Memory Plus Index Register Plus Offset Operand -operand indIndex(eRegP reg, eRegI ireg) %{ +operand indIndex(eRegP reg, rRegI ireg) %{ match(AddP reg ireg); op_cost(10); @@ -4667,7 +4716,7 @@ operand indIndex(eRegP reg, eRegI ireg) %{ // // ------------------------------------------------------------------------- // // Scaled Memory Operands // // Indirect Memory Times Scale Plus Offset Operand -// operand indScaleOffset(immP off, eRegI ireg, immI2 scale) %{ +// operand indScaleOffset(immP off, rRegI ireg, immI2 scale) %{ // match(AddP off (LShiftI ireg scale)); // // op_cost(10); @@ -4681,7 +4730,7 @@ operand indIndex(eRegP reg, eRegI ireg) %{ // %} // Indirect Memory Times Scale Plus Index Register -operand indIndexScale(eRegP reg, eRegI ireg, immI2 scale) %{ +operand indIndexScale(eRegP reg, rRegI ireg, immI2 scale) %{ match(AddP reg (LShiftI ireg scale)); op_cost(10); @@ -4695,7 +4744,7 @@ operand indIndexScale(eRegP reg, eRegI ireg, immI2 scale) %{ %} // Indirect Memory Times Scale Plus Index Register Plus Offset Operand -operand indIndexScaleOffset(eRegP reg, immI off, eRegI ireg, immI2 scale) %{ +operand indIndexScaleOffset(eRegP reg, immI off, rRegI ireg, immI2 scale) %{ match(AddP (AddP reg (LShiftI ireg scale)) off); op_cost(10); @@ -4823,7 +4872,7 @@ operand stackSlotL(sRegL reg) %{ // Indirect Memory Operand operand indirect_win95_safe(eRegP_no_EBP reg) %{ - constraint(ALLOC_IN_RC(e_reg)); + constraint(ALLOC_IN_RC(int_reg)); match(reg); op_cost(100); @@ -4867,7 +4916,7 @@ operand indOffset32_win95_safe(eRegP_no_EBP reg, immI off) %} // Indirect Memory Plus Index Register Plus Offset Operand -operand indIndexOffset_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI off) +operand indIndexOffset_win95_safe(eRegP_no_EBP reg, rRegI ireg, immI off) %{ match(AddP (AddP reg ireg) off); @@ -4882,7 +4931,7 @@ operand indIndexOffset_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI off) %} // Indirect Memory Times Scale Plus Index Register -operand indIndexScale_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI2 scale) +operand indIndexScale_win95_safe(eRegP_no_EBP reg, rRegI ireg, immI2 scale) %{ match(AddP reg (LShiftI ireg scale)); @@ -4897,7 +4946,7 @@ operand indIndexScale_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI2 scale) %} // Indirect Memory Times Scale Plus Index Register Plus Offset Operand -operand indIndexScaleOffset_win95_safe(eRegP_no_EBP reg, immI off, eRegI ireg, immI2 scale) +operand indIndexScaleOffset_win95_safe(eRegP_no_EBP reg, immI off, rRegI ireg, immI2 scale) %{ match(AddP (AddP reg (LShiftI ireg scale)) off); @@ -5086,7 +5135,7 @@ pipe_desc(S0, S1, S2, S3, S4, S5); // Or: _mem if it requires the big decoder and a memory unit. // Integer ALU reg operation -pipe_class ialu_reg(eRegI dst) %{ +pipe_class ialu_reg(rRegI dst) %{ single_instruction; dst : S4(write); dst : S3(read); @@ -5104,7 +5153,7 @@ pipe_class ialu_reg_long(eRegL dst) %{ %} // Integer ALU reg operation using big decoder -pipe_class ialu_reg_fat(eRegI dst) %{ +pipe_class ialu_reg_fat(rRegI dst) %{ single_instruction; dst : S4(write); dst : S3(read); @@ -5122,7 +5171,7 @@ pipe_class ialu_reg_long_fat(eRegL dst) %{ %} // Integer ALU reg-reg operation -pipe_class ialu_reg_reg(eRegI dst, eRegI src) %{ +pipe_class ialu_reg_reg(rRegI dst, rRegI src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5140,7 +5189,7 @@ pipe_class ialu_reg_reg_long(eRegL dst, eRegL src) %{ %} // Integer ALU reg-reg operation -pipe_class ialu_reg_reg_fat(eRegI dst, memory src) %{ +pipe_class ialu_reg_reg_fat(rRegI dst, memory src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5158,7 +5207,7 @@ pipe_class ialu_reg_reg_long_fat(eRegL dst, eRegL src) %{ %} // Integer ALU reg-mem operation -pipe_class ialu_reg_mem(eRegI dst, memory mem) %{ +pipe_class ialu_reg_mem(rRegI dst, memory mem) %{ single_instruction; dst : S5(write); mem : S3(read); @@ -5187,7 +5236,7 @@ pipe_class ialu_mem(memory mem) %} // Integer Store to Memory -pipe_class ialu_mem_reg(memory mem, eRegI src) %{ +pipe_class ialu_mem_reg(memory mem, rRegI src) %{ single_instruction; mem : S3(read); src : S5(read); @@ -5216,7 +5265,7 @@ pipe_class ialu_mem_imm(memory mem) %{ %} // Integer ALU0 reg-reg operation -pipe_class ialu_reg_reg_alu0(eRegI dst, eRegI src) %{ +pipe_class ialu_reg_reg_alu0(rRegI dst, rRegI src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5225,7 +5274,7 @@ pipe_class ialu_reg_reg_alu0(eRegI dst, eRegI src) %{ %} // Integer ALU0 reg-mem operation -pipe_class ialu_reg_mem_alu0(eRegI dst, memory mem) %{ +pipe_class ialu_reg_mem_alu0(rRegI dst, memory mem) %{ single_instruction; dst : S5(write); mem : S3(read); @@ -5235,7 +5284,7 @@ pipe_class ialu_reg_mem_alu0(eRegI dst, memory mem) %{ %} // Integer ALU reg-reg operation -pipe_class ialu_cr_reg_reg(eFlagsReg cr, eRegI src1, eRegI src2) %{ +pipe_class ialu_cr_reg_reg(eFlagsReg cr, rRegI src1, rRegI src2) %{ single_instruction; cr : S4(write); src1 : S3(read); @@ -5245,7 +5294,7 @@ pipe_class ialu_cr_reg_reg(eFlagsReg cr, eRegI src1, eRegI src2) %{ %} // Integer ALU reg-imm operation -pipe_class ialu_cr_reg_imm(eFlagsReg cr, eRegI src1) %{ +pipe_class ialu_cr_reg_imm(eFlagsReg cr, rRegI src1) %{ single_instruction; cr : S4(write); src1 : S3(read); @@ -5254,7 +5303,7 @@ pipe_class ialu_cr_reg_imm(eFlagsReg cr, eRegI src1) %{ %} // Integer ALU reg-mem operation -pipe_class ialu_cr_reg_mem(eFlagsReg cr, eRegI src1, memory src2) %{ +pipe_class ialu_cr_reg_mem(eFlagsReg cr, rRegI src1, memory src2) %{ single_instruction; cr : S4(write); src1 : S3(read); @@ -5265,7 +5314,7 @@ pipe_class ialu_cr_reg_mem(eFlagsReg cr, eRegI src1, memory src2) %{ %} // Conditional move reg-reg -pipe_class pipe_cmplt( eRegI p, eRegI q, eRegI y ) %{ +pipe_class pipe_cmplt( rRegI p, rRegI q, rRegI y ) %{ instruction_count(4); y : S4(read); q : S3(read); @@ -5274,7 +5323,7 @@ pipe_class pipe_cmplt( eRegI p, eRegI q, eRegI y ) %{ %} // Conditional move reg-reg -pipe_class pipe_cmov_reg( eRegI dst, eRegI src, eFlagsReg cr ) %{ +pipe_class pipe_cmov_reg( rRegI dst, rRegI src, eFlagsReg cr ) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5283,7 +5332,7 @@ pipe_class pipe_cmov_reg( eRegI dst, eRegI src, eFlagsReg cr ) %{ %} // Conditional move reg-mem -pipe_class pipe_cmov_mem( eFlagsReg cr, eRegI dst, memory src) %{ +pipe_class pipe_cmov_mem( eFlagsReg cr, rRegI dst, memory src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5534,7 +5583,7 @@ define %{ // in the encode section of the architecture description. //----------BSWAP-Instruction-------------------------------------------------- -instruct bytes_reverse_int(eRegI dst) %{ +instruct bytes_reverse_int(rRegI dst) %{ match(Set dst (ReverseBytesI dst)); format %{ "BSWAP $dst" %} @@ -5555,7 +5604,7 @@ instruct bytes_reverse_long(eRegL dst) %{ ins_pipe( ialu_reg_reg); %} -instruct bytes_reverse_unsigned_short(eRegI dst, eFlagsReg cr) %{ +instruct bytes_reverse_unsigned_short(rRegI dst, eFlagsReg cr) %{ match(Set dst (ReverseBytesUS dst)); effect(KILL cr); @@ -5568,7 +5617,7 @@ instruct bytes_reverse_unsigned_short(eRegI dst, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct bytes_reverse_short(eRegI dst, eFlagsReg cr) %{ +instruct bytes_reverse_short(rRegI dst, eFlagsReg cr) %{ match(Set dst (ReverseBytesS dst)); effect(KILL cr); @@ -5584,7 +5633,7 @@ instruct bytes_reverse_short(eRegI dst, eFlagsReg cr) %{ //---------- Zeros Count Instructions ------------------------------------------ -instruct countLeadingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct countLeadingZerosI(rRegI dst, rRegI src, eFlagsReg cr) %{ predicate(UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosI src)); effect(KILL cr); @@ -5596,7 +5645,7 @@ instruct countLeadingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countLeadingZerosI_bsr(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct countLeadingZerosI_bsr(rRegI dst, rRegI src, eFlagsReg cr) %{ predicate(!UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosI src)); effect(KILL cr); @@ -5621,7 +5670,7 @@ instruct countLeadingZerosI_bsr(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countLeadingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ +instruct countLeadingZerosL(rRegI dst, eRegL src, eFlagsReg cr) %{ predicate(UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosL src)); effect(TEMP dst, KILL cr); @@ -5644,7 +5693,7 @@ instruct countLeadingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countLeadingZerosL_bsr(eRegI dst, eRegL src, eFlagsReg cr) %{ +instruct countLeadingZerosL_bsr(rRegI dst, eRegL src, eFlagsReg cr) %{ predicate(!UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosL src)); effect(TEMP dst, KILL cr); @@ -5680,7 +5729,7 @@ instruct countLeadingZerosL_bsr(eRegI dst, eRegL src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countTrailingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct countTrailingZerosI(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (CountTrailingZerosI src)); effect(KILL cr); @@ -5699,7 +5748,7 @@ instruct countTrailingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countTrailingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ +instruct countTrailingZerosL(rRegI dst, eRegL src, eFlagsReg cr) %{ match(Set dst (CountTrailingZerosL src)); effect(TEMP dst, KILL cr); @@ -5731,7 +5780,7 @@ instruct countTrailingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ //---------- Population Count Instructions ------------------------------------- -instruct popCountI(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct popCountI(rRegI dst, rRegI src, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountI src)); effect(KILL cr); @@ -5743,7 +5792,7 @@ instruct popCountI(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct popCountI_mem(eRegI dst, memory mem, eFlagsReg cr) %{ +instruct popCountI_mem(rRegI dst, memory mem, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountI (LoadI mem))); effect(KILL cr); @@ -5756,7 +5805,7 @@ instruct popCountI_mem(eRegI dst, memory mem, eFlagsReg cr) %{ %} // Note: Long.bitCount(long) returns an int. -instruct popCountL(eRegI dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct popCountL(rRegI dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountL src)); effect(KILL cr, TEMP tmp, TEMP dst); @@ -5773,7 +5822,7 @@ instruct popCountL(eRegI dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ %} // Note: Long.bitCount(long) returns an int. -instruct popCountL_mem(eRegI dst, memory mem, eRegI tmp, eFlagsReg cr) %{ +instruct popCountL_mem(rRegI dst, memory mem, rRegI tmp, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountL (LoadL mem))); effect(KILL cr, TEMP tmp, TEMP dst); @@ -5877,7 +5926,7 @@ instruct loadUB2L_immI8(eRegL dst, memory mem, immI8 mask, eFlagsReg cr) %{ %} // Load Short (16bit signed) -instruct loadS(eRegI dst, memory mem) %{ +instruct loadS(rRegI dst, memory mem) %{ match(Set dst (LoadS mem)); ins_cost(125); @@ -5891,7 +5940,7 @@ instruct loadS(eRegI dst, memory mem) %{ %} // Load Short (16 bit signed) to Byte (8 bit signed) -instruct loadS2B(eRegI dst, memory mem, immI_24 twentyfour) %{ +instruct loadS2B(rRegI dst, memory mem, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI (LoadS mem) twentyfour) twentyfour)); ins_cost(125); @@ -5922,7 +5971,7 @@ instruct loadS2L(eRegL dst, memory mem, eFlagsReg cr) %{ %} // Load Unsigned Short/Char (16bit unsigned) -instruct loadUS(eRegI dst, memory mem) %{ +instruct loadUS(rRegI dst, memory mem) %{ match(Set dst (LoadUS mem)); ins_cost(125); @@ -5936,7 +5985,7 @@ instruct loadUS(eRegI dst, memory mem) %{ %} // Load Unsigned Short/Char (16 bit UNsigned) to Byte (8 bit signed) -instruct loadUS2B(eRegI dst, memory mem, immI_24 twentyfour) %{ +instruct loadUS2B(rRegI dst, memory mem, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI (LoadUS mem) twentyfour) twentyfour)); ins_cost(125); @@ -5997,7 +6046,7 @@ instruct loadUS2L_immI16(eRegL dst, memory mem, immI16 mask, eFlagsReg cr) %{ %} // Load Integer -instruct loadI(eRegI dst, memory mem) %{ +instruct loadI(rRegI dst, memory mem) %{ match(Set dst (LoadI mem)); ins_cost(125); @@ -6011,7 +6060,7 @@ instruct loadI(eRegI dst, memory mem) %{ %} // Load Integer (32 bit signed) to Byte (8 bit signed) -instruct loadI2B(eRegI dst, memory mem, immI_24 twentyfour) %{ +instruct loadI2B(rRegI dst, memory mem, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI (LoadI mem) twentyfour) twentyfour)); ins_cost(125); @@ -6023,7 +6072,7 @@ instruct loadI2B(eRegI dst, memory mem, immI_24 twentyfour) %{ %} // Load Integer (32 bit signed) to Unsigned Byte (8 bit UNsigned) -instruct loadI2UB(eRegI dst, memory mem, immI_255 mask) %{ +instruct loadI2UB(rRegI dst, memory mem, immI_255 mask) %{ match(Set dst (AndI (LoadI mem) mask)); ins_cost(125); @@ -6035,7 +6084,7 @@ instruct loadI2UB(eRegI dst, memory mem, immI_255 mask) %{ %} // Load Integer (32 bit signed) to Short (16 bit signed) -instruct loadI2S(eRegI dst, memory mem, immI_16 sixteen) %{ +instruct loadI2S(rRegI dst, memory mem, immI_16 sixteen) %{ match(Set dst (RShiftI (LShiftI (LoadI mem) sixteen) sixteen)); ins_cost(125); @@ -6047,7 +6096,7 @@ instruct loadI2S(eRegI dst, memory mem, immI_16 sixteen) %{ %} // Load Integer (32 bit signed) to Unsigned Short/Char (16 bit UNsigned) -instruct loadI2US(eRegI dst, memory mem, immI_65535 mask) %{ +instruct loadI2US(rRegI dst, memory mem, immI_65535 mask) %{ match(Set dst (AndI (LoadI mem) mask)); ins_cost(125); @@ -6208,7 +6257,7 @@ instruct loadLX_reg_volatile(eRegL dst, memory mem, regD tmp) %{ %} // Load Range -instruct loadRange(eRegI dst, memory mem) %{ +instruct loadRange(rRegI dst, memory mem) %{ match(Set dst (LoadRange mem)); ins_cost(125); @@ -6305,66 +6354,6 @@ instruct loadFPR(regFPR dst, memory mem) %{ ins_pipe( fpu_reg_mem ); %} -// Load Aligned Packed Byte to XMM register -instruct loadA8B(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load8B mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed8B" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Short to XMM register -instruct loadA4S(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load4S mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4S" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Char to XMM register -instruct loadA4C(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load4C mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4C" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Integer to XMM register -instruct load2IU(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load2I mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed2I" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Single to XMM -instruct loadA2F(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load2F mem)); - ins_cost(145); - format %{ "MOVQ $dst,$mem\t! packed2F" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - // Load Effective Address instruct leaP8(eRegP dst, indOffset8 mem) %{ match(Set dst mem); @@ -6417,7 +6406,7 @@ instruct leaPIdxScaleOff(eRegP dst, indIndexScaleOffset mem) %{ %} // Load Constant -instruct loadConI(eRegI dst, immI src) %{ +instruct loadConI(rRegI dst, immI src) %{ match(Set dst src); format %{ "MOV $dst,$src" %} @@ -6426,7 +6415,7 @@ instruct loadConI(eRegI dst, immI src) %{ %} // Load Constant zero -instruct loadConI0(eRegI dst, immI0 src, eFlagsReg cr) %{ +instruct loadConI0(rRegI dst, immI0 src, eFlagsReg cr) %{ match(Set dst src); effect(KILL cr); @@ -6594,7 +6583,7 @@ instruct loadConD0(regD dst, immD0 src) %{ %} // Load Stack Slot -instruct loadSSI(eRegI dst, stackSlotI src) %{ +instruct loadSSI(rRegI dst, stackSlotI src) %{ match(Set dst src); ins_cost(125); @@ -6821,7 +6810,7 @@ instruct storeB(memory mem, xRegI src) %{ %} // Store Char/Short -instruct storeC(memory mem, eRegI src) %{ +instruct storeC(memory mem, rRegI src) %{ match(Set mem (StoreC mem src)); ins_cost(125); @@ -6832,7 +6821,7 @@ instruct storeC(memory mem, eRegI src) %{ %} // Store Integer -instruct storeI(memory mem, eRegI src) %{ +instruct storeI(memory mem, rRegI src) %{ match(Set mem (StoreI mem src)); ins_cost(125); @@ -6976,42 +6965,6 @@ instruct storeImmB(memory mem, immI8 src) %{ ins_pipe( ialu_mem_imm ); %} -// Store Aligned Packed Byte XMM register to memory -instruct storeA8B(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store8B mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed8B" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Char/Short XMM register to memory -instruct storeA4C(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store4C mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed4C" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Integer XMM register to memory -instruct storeA2I(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store2I mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2I" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store CMS card-mark Immediate instruct storeImmCM(memory mem, immI8 src) %{ match(Set mem (StoreCM mem src)); @@ -7073,18 +7026,6 @@ instruct storeF(memory mem, regF src) %{ ins_pipe( pipe_slow ); %} -// Store Aligned Packed Single Float XMM register to memory -instruct storeA2F(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store2F mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2F" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store Float instruct storeFPR( memory mem, regFPR1 src) %{ predicate(UseSSE==0); @@ -7146,7 +7087,7 @@ instruct storeF_imm( memory mem, immF src) %{ %} // Store Integer to stack slot -instruct storeSSI(stackSlotI dst, eRegI src) %{ +instruct storeSSI(stackSlotI dst, rRegI src) %{ match(Set dst src); ins_cost(100); @@ -7271,7 +7212,7 @@ instruct castX2P(eAXRegP dst, eAXRegI src) %{ ins_pipe(empty); %} -instruct castP2X(eRegI dst, eRegP src ) %{ +instruct castP2X(rRegI dst, eRegP src ) %{ match(Set dst (CastP2X src)); ins_cost(50); format %{ "MOV $dst, $src\t# CastP2X" %} @@ -7281,7 +7222,7 @@ instruct castP2X(eRegI dst, eRegP src ) %{ //----------Conditional Move--------------------------------------------------- // Conditional move -instruct jmovI_reg(cmpOp cop, eFlagsReg cr, eRegI dst, eRegI src) %{ +instruct jmovI_reg(cmpOp cop, eFlagsReg cr, rRegI dst, rRegI src) %{ predicate(!VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7298,7 +7239,7 @@ instruct jmovI_reg(cmpOp cop, eFlagsReg cr, eRegI dst, eRegI src) %{ ins_pipe( pipe_cmov_reg ); %} -instruct jmovI_regU(cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src) %{ +instruct jmovI_regU(cmpOpU cop, eFlagsRegU cr, rRegI dst, rRegI src) %{ predicate(!VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7315,7 +7256,7 @@ instruct jmovI_regU(cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src) %{ ins_pipe( pipe_cmov_reg ); %} -instruct cmovI_reg(eRegI dst, eRegI src, eFlagsReg cr, cmpOp cop ) %{ +instruct cmovI_reg(rRegI dst, rRegI src, eFlagsReg cr, cmpOp cop ) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7325,7 +7266,7 @@ instruct cmovI_reg(eRegI dst, eRegI src, eFlagsReg cr, cmpOp cop ) %{ ins_pipe( pipe_cmov_reg ); %} -instruct cmovI_regU( cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src ) %{ +instruct cmovI_regU( cmpOpU cop, eFlagsRegU cr, rRegI dst, rRegI src ) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7335,7 +7276,7 @@ instruct cmovI_regU( cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src ) %{ ins_pipe( pipe_cmov_reg ); %} -instruct cmovI_regUCF( cmpOpUCF cop, eFlagsRegUCF cr, eRegI dst, eRegI src ) %{ +instruct cmovI_regUCF( cmpOpUCF cop, eFlagsRegUCF cr, rRegI dst, rRegI src ) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7345,7 +7286,7 @@ instruct cmovI_regUCF( cmpOpUCF cop, eFlagsRegUCF cr, eRegI dst, eRegI src ) %{ %} // Conditional move -instruct cmovI_mem(cmpOp cop, eFlagsReg cr, eRegI dst, memory src) %{ +instruct cmovI_mem(cmpOp cop, eFlagsReg cr, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst (LoadI src)))); ins_cost(250); @@ -7356,7 +7297,7 @@ instruct cmovI_mem(cmpOp cop, eFlagsReg cr, eRegI dst, memory src) %{ %} // Conditional move -instruct cmovI_memU(cmpOpU cop, eFlagsRegU cr, eRegI dst, memory src) %{ +instruct cmovI_memU(cmpOpU cop, eFlagsRegU cr, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst (LoadI src)))); ins_cost(250); @@ -7366,7 +7307,7 @@ instruct cmovI_memU(cmpOpU cop, eFlagsRegU cr, eRegI dst, memory src) %{ ins_pipe( pipe_cmov_mem ); %} -instruct cmovI_memUCF(cmpOpUCF cop, eFlagsRegUCF cr, eRegI dst, memory src) %{ +instruct cmovI_memUCF(cmpOpUCF cop, eFlagsRegUCF cr, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst (LoadI src)))); ins_cost(250); @@ -7620,7 +7561,7 @@ instruct cmovL_regUCF(cmpOpUCF cop, eFlagsRegUCF cr, eRegL dst, eRegL src) %{ //----------Arithmetic Instructions-------------------------------------------- //----------Addition Instructions---------------------------------------------- // Integer Addition Instructions -instruct addI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct addI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (AddI dst src)); effect(KILL cr); @@ -7631,7 +7572,7 @@ instruct addI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct addI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct addI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (AddI dst src)); effect(KILL cr); @@ -7641,7 +7582,7 @@ instruct addI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct incI_eReg(eRegI dst, immI1 src, eFlagsReg cr) %{ +instruct incI_eReg(rRegI dst, immI1 src, eFlagsReg cr) %{ predicate(UseIncDec); match(Set dst (AddI dst src)); effect(KILL cr); @@ -7653,7 +7594,7 @@ instruct incI_eReg(eRegI dst, immI1 src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct leaI_eReg_immI(eRegI dst, eRegI src0, immI src1) %{ +instruct leaI_eReg_immI(rRegI dst, rRegI src0, immI src1) %{ match(Set dst (AddI src0 src1)); ins_cost(110); @@ -7673,7 +7614,7 @@ instruct leaP_eReg_immI(eRegP dst, eRegP src0, immI src1) %{ ins_pipe( ialu_reg_reg ); %} -instruct decI_eReg(eRegI dst, immI_M1 src, eFlagsReg cr) %{ +instruct decI_eReg(rRegI dst, immI_M1 src, eFlagsReg cr) %{ predicate(UseIncDec); match(Set dst (AddI dst src)); effect(KILL cr); @@ -7685,7 +7626,7 @@ instruct decI_eReg(eRegI dst, immI_M1 src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct addP_eReg(eRegP dst, eRegI src, eFlagsReg cr) %{ +instruct addP_eReg(eRegP dst, rRegI src, eFlagsReg cr) %{ match(Set dst (AddP dst src)); effect(KILL cr); @@ -7707,7 +7648,7 @@ instruct addP_eReg_imm(eRegP dst, immI src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct addI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct addI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (AddI dst (LoadI src))); effect(KILL cr); @@ -7718,7 +7659,7 @@ instruct addI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ ins_pipe( ialu_reg_mem ); %} -instruct addI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct addI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (AddI (LoadI dst) src))); effect(KILL cr); @@ -7780,7 +7721,7 @@ instruct castPP( eRegP dst ) %{ ins_pipe( empty ); %} -instruct castII( eRegI dst ) %{ +instruct castII( rRegI dst ) %{ match(Set dst (CastII dst)); format %{ "#castII of $dst" %} ins_encode( /*empty encoding*/ ); @@ -7814,7 +7755,7 @@ instruct storePConditional( memory heap_top_ptr, eAXRegP oldval, eRegP newval, e // Conditional-store of an int value. // ZF flag is set on success, reset otherwise. Implemented with a CMPXCHG on Intel. -instruct storeIConditional( memory mem, eAXRegI oldval, eRegI newval, eFlagsReg cr ) %{ +instruct storeIConditional( memory mem, eAXRegI oldval, rRegI newval, eFlagsReg cr ) %{ match(Set cr (StoreIConditional mem (Binary oldval newval))); effect(KILL oldval); format %{ "CMPXCHG $mem,$newval\t# If EAX==$mem Then store $newval into $mem" %} @@ -7847,7 +7788,7 @@ instruct storeLConditional( memory mem, eADXRegL oldval, eBCXRegL newval, eFlags // No flag versions for CompareAndSwap{P,I,L} because matcher can't match them -instruct compareAndSwapL( eRegI res, eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL newval, eFlagsReg cr ) %{ +instruct compareAndSwapL( rRegI res, eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL newval, eFlagsReg cr ) %{ match(Set res (CompareAndSwapL mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); format %{ "CMPXCHG8 [$mem_ptr],$newval\t# If EDX:EAX==[$mem_ptr] Then store $newval into [$mem_ptr]\n\t" @@ -7860,7 +7801,7 @@ instruct compareAndSwapL( eRegI res, eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL ins_pipe( pipe_cmpxchg ); %} -instruct compareAndSwapP( eRegI res, pRegP mem_ptr, eAXRegP oldval, eCXRegP newval, eFlagsReg cr) %{ +instruct compareAndSwapP( rRegI res, pRegP mem_ptr, eAXRegP oldval, eCXRegP newval, eFlagsReg cr) %{ match(Set res (CompareAndSwapP mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); format %{ "CMPXCHG [$mem_ptr],$newval\t# If EAX==[$mem_ptr] Then store $newval into [$mem_ptr]\n\t" @@ -7872,7 +7813,7 @@ instruct compareAndSwapP( eRegI res, pRegP mem_ptr, eAXRegP oldval, eCXRegP new ins_pipe( pipe_cmpxchg ); %} -instruct compareAndSwapI( eRegI res, pRegP mem_ptr, eAXRegI oldval, eCXRegI newval, eFlagsReg cr) %{ +instruct compareAndSwapI( rRegI res, pRegP mem_ptr, eAXRegI oldval, eCXRegI newval, eFlagsReg cr) %{ match(Set res (CompareAndSwapI mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); format %{ "CMPXCHG [$mem_ptr],$newval\t# If EAX==[$mem_ptr] Then store $newval into [$mem_ptr]\n\t" @@ -7886,7 +7827,7 @@ instruct compareAndSwapI( eRegI res, pRegP mem_ptr, eAXRegI oldval, eCXRegI newv //----------Subtraction Instructions------------------------------------------- // Integer Subtraction Instructions -instruct subI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct subI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (SubI dst src)); effect(KILL cr); @@ -7897,7 +7838,7 @@ instruct subI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct subI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct subI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (SubI dst src)); effect(KILL cr); @@ -7908,7 +7849,7 @@ instruct subI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct subI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct subI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (SubI dst (LoadI src))); effect(KILL cr); @@ -7919,7 +7860,7 @@ instruct subI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ ins_pipe( ialu_reg_mem ); %} -instruct subI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct subI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (SubI (LoadI dst) src))); effect(KILL cr); @@ -7931,7 +7872,7 @@ instruct subI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ %} // Subtract from a pointer -instruct subP_eReg(eRegP dst, eRegI src, immI0 zero, eFlagsReg cr) %{ +instruct subP_eReg(eRegP dst, rRegI src, immI0 zero, eFlagsReg cr) %{ match(Set dst (AddP dst (SubI zero src))); effect(KILL cr); @@ -7942,7 +7883,7 @@ instruct subP_eReg(eRegP dst, eRegI src, immI0 zero, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct negI_eReg(eRegI dst, immI0 zero, eFlagsReg cr) %{ +instruct negI_eReg(rRegI dst, immI0 zero, eFlagsReg cr) %{ match(Set dst (SubI zero dst)); effect(KILL cr); @@ -7957,7 +7898,7 @@ instruct negI_eReg(eRegI dst, immI0 zero, eFlagsReg cr) %{ //----------Multiplication/Division Instructions------------------------------- // Integer Multiplication Instructions // Multiply Register -instruct mulI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct mulI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (MulI dst src)); effect(KILL cr); @@ -7970,7 +7911,7 @@ instruct mulI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ %} // Multiply 32-bit Immediate -instruct mulI_eReg_imm(eRegI dst, eRegI src, immI imm, eFlagsReg cr) %{ +instruct mulI_eReg_imm(rRegI dst, rRegI src, immI imm, eFlagsReg cr) %{ match(Set dst (MulI src imm)); effect(KILL cr); @@ -8026,7 +7967,7 @@ instruct mulI_imm_RShift_high(eDXRegI dst, nadxRegI src1, eADXRegL_low_only src2 %} // Multiply Memory 32-bit Immediate -instruct mulI_mem_imm(eRegI dst, memory src, immI imm, eFlagsReg cr) %{ +instruct mulI_mem_imm(rRegI dst, memory src, immI imm, eFlagsReg cr) %{ match(Set dst (MulI (LoadI src) imm)); effect(KILL cr); @@ -8038,7 +7979,7 @@ instruct mulI_mem_imm(eRegI dst, memory src, immI imm, eFlagsReg cr) %{ %} // Multiply Memory -instruct mulI(eRegI dst, memory src, eFlagsReg cr) %{ +instruct mulI(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (MulI dst (LoadI src))); effect(KILL cr); @@ -8075,7 +8016,7 @@ instruct mulIS_eReg(eADXRegL dst, immL_32bits mask, eFlagsReg flags, eAXRegI src %} // Multiply Register Long -instruct mulL_eReg(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg(eADXRegL dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); ins_cost(4*100+3*400); @@ -8093,7 +8034,7 @@ instruct mulL_eReg(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ %} // Multiply Register Long where the left operand's high 32 bits are zero -instruct mulL_eReg_lhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg_lhi0(eADXRegL dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ predicate(is_operand_hi32_zero(n->in(1))); match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); @@ -8114,7 +8055,7 @@ instruct mulL_eReg_lhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ %} // Multiply Register Long where the right operand's high 32 bits are zero -instruct mulL_eReg_rhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg_rhi0(eADXRegL dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ predicate(is_operand_hi32_zero(n->in(2))); match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); @@ -8150,7 +8091,7 @@ instruct mulL_eReg_hi0(eADXRegL dst, eRegL src, eFlagsReg cr) %{ %} // Multiply Register Long by small constant -instruct mulL_eReg_con(eADXRegL dst, immL_127 src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg_con(eADXRegL dst, immL_127 src, rRegI tmp, eFlagsReg cr) %{ match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); ins_cost(2*100+2*400); @@ -8248,7 +8189,7 @@ instruct modL_eReg( eADXRegL dst, eRegL src1, eRegL src2, eFlagsReg cr, eCXRegI %} // Divide Register Long (no special case since divisor != -1) -instruct divL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlagsReg cr ) %{ +instruct divL_eReg_imm32( eADXRegL dst, immL32 imm, rRegI tmp, rRegI tmp2, eFlagsReg cr ) %{ match(Set dst (DivL dst imm)); effect( TEMP tmp, TEMP tmp2, KILL cr ); ins_cost(1000); @@ -8319,7 +8260,7 @@ instruct divL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlag %} // Remainder Register Long (remainder fit into 32 bits) -instruct modL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlagsReg cr ) %{ +instruct modL_eReg_imm32( eADXRegL dst, immL32 imm, rRegI tmp, rRegI tmp2, eFlagsReg cr ) %{ match(Set dst (ModL dst imm)); effect( TEMP tmp, TEMP tmp2, KILL cr ); ins_cost(1000); @@ -8387,7 +8328,7 @@ instruct modL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlag // Integer Shift Instructions // Shift Left by one -instruct shlI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct shlI_eReg_1(rRegI dst, immI1 shift, eFlagsReg cr) %{ match(Set dst (LShiftI dst shift)); effect(KILL cr); @@ -8399,7 +8340,7 @@ instruct shlI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ %} // Shift Left by 8-bit immediate -instruct salI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct salI_eReg_imm(rRegI dst, immI8 shift, eFlagsReg cr) %{ match(Set dst (LShiftI dst shift)); effect(KILL cr); @@ -8411,7 +8352,7 @@ instruct salI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ %} // Shift Left by variable -instruct salI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ +instruct salI_eReg_CL(rRegI dst, eCXRegI shift, eFlagsReg cr) %{ match(Set dst (LShiftI dst shift)); effect(KILL cr); @@ -8423,7 +8364,7 @@ instruct salI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ %} // Arithmetic shift right by one -instruct sarI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct sarI_eReg_1(rRegI dst, immI1 shift, eFlagsReg cr) %{ match(Set dst (RShiftI dst shift)); effect(KILL cr); @@ -8445,7 +8386,7 @@ instruct sarI_mem_1(memory dst, immI1 shift, eFlagsReg cr) %{ %} // Arithmetic Shift Right by 8-bit immediate -instruct sarI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct sarI_eReg_imm(rRegI dst, immI8 shift, eFlagsReg cr) %{ match(Set dst (RShiftI dst shift)); effect(KILL cr); @@ -8468,7 +8409,7 @@ instruct sarI_mem_imm(memory dst, immI8 shift, eFlagsReg cr) %{ %} // Arithmetic Shift Right by variable -instruct sarI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ +instruct sarI_eReg_CL(rRegI dst, eCXRegI shift, eFlagsReg cr) %{ match(Set dst (RShiftI dst shift)); effect(KILL cr); @@ -8480,7 +8421,7 @@ instruct sarI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ %} // Logical shift right by one -instruct shrI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct shrI_eReg_1(rRegI dst, immI1 shift, eFlagsReg cr) %{ match(Set dst (URShiftI dst shift)); effect(KILL cr); @@ -8492,7 +8433,7 @@ instruct shrI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ %} // Logical Shift Right by 8-bit immediate -instruct shrI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct shrI_eReg_imm(rRegI dst, immI8 shift, eFlagsReg cr) %{ match(Set dst (URShiftI dst shift)); effect(KILL cr); @@ -8506,7 +8447,7 @@ instruct shrI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ // Logical Shift Right by 24, followed by Arithmetic Shift Left by 24. // This idiom is used by the compiler for the i2b bytecode. -instruct i2b(eRegI dst, xRegI src, immI_24 twentyfour) %{ +instruct i2b(rRegI dst, xRegI src, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI src twentyfour) twentyfour)); size(3); @@ -8519,7 +8460,7 @@ instruct i2b(eRegI dst, xRegI src, immI_24 twentyfour) %{ // Logical Shift Right by 16, followed by Arithmetic Shift Left by 16. // This idiom is used by the compiler the i2s bytecode. -instruct i2s(eRegI dst, xRegI src, immI_16 sixteen) %{ +instruct i2s(rRegI dst, xRegI src, immI_16 sixteen) %{ match(Set dst (RShiftI (LShiftI src sixteen) sixteen)); size(3); @@ -8532,7 +8473,7 @@ instruct i2s(eRegI dst, xRegI src, immI_16 sixteen) %{ // Logical Shift Right by variable -instruct shrI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ +instruct shrI_eReg_CL(rRegI dst, eCXRegI shift, eFlagsReg cr) %{ match(Set dst (URShiftI dst shift)); effect(KILL cr); @@ -8548,7 +8489,7 @@ instruct shrI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ //----------Integer Logical Instructions--------------------------------------- // And Instructions // And Register with Register -instruct andI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct andI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (AndI dst src)); effect(KILL cr); @@ -8560,7 +8501,7 @@ instruct andI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ %} // And Register with Immediate -instruct andI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct andI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (AndI dst src)); effect(KILL cr); @@ -8572,7 +8513,7 @@ instruct andI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ %} // And Register with Memory -instruct andI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct andI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (AndI dst (LoadI src))); effect(KILL cr); @@ -8584,7 +8525,7 @@ instruct andI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ %} // And Memory with Register -instruct andI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct andI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (AndI (LoadI dst) src))); effect(KILL cr); @@ -8610,7 +8551,7 @@ instruct andI_mem_imm(memory dst, immI src, eFlagsReg cr) %{ // Or Instructions // Or Register with Register -instruct orI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct orI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (OrI dst src)); effect(KILL cr); @@ -8621,7 +8562,7 @@ instruct orI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct orI_eReg_castP2X(eRegI dst, eRegP src, eFlagsReg cr) %{ +instruct orI_eReg_castP2X(rRegI dst, eRegP src, eFlagsReg cr) %{ match(Set dst (OrI dst (CastP2X src))); effect(KILL cr); @@ -8634,7 +8575,7 @@ instruct orI_eReg_castP2X(eRegI dst, eRegP src, eFlagsReg cr) %{ // Or Register with Immediate -instruct orI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct orI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (OrI dst src)); effect(KILL cr); @@ -8646,7 +8587,7 @@ instruct orI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ %} // Or Register with Memory -instruct orI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct orI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (OrI dst (LoadI src))); effect(KILL cr); @@ -8658,7 +8599,7 @@ instruct orI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ %} // Or Memory with Register -instruct orI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct orI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (OrI (LoadI dst) src))); effect(KILL cr); @@ -8684,7 +8625,7 @@ instruct orI_mem_imm(memory dst, immI src, eFlagsReg cr) %{ // ROL/ROR // ROL expand -instruct rolI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct rolI_eReg_imm1(rRegI dst, immI1 shift, eFlagsReg cr) %{ effect(USE_DEF dst, USE shift, KILL cr); format %{ "ROL $dst, $shift" %} @@ -8693,7 +8634,7 @@ instruct rolI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct rolI_eReg_imm8(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct rolI_eReg_imm8(rRegI dst, immI8 shift, eFlagsReg cr) %{ effect(USE_DEF dst, USE shift, KILL cr); format %{ "ROL $dst, $shift" %} @@ -8713,7 +8654,7 @@ instruct rolI_eReg_CL(ncxRegI dst, eCXRegI shift, eFlagsReg cr) %{ // end of ROL expand // ROL 32bit by one once -instruct rolI_eReg_i1(eRegI dst, immI1 lshift, immI_M1 rshift, eFlagsReg cr) %{ +instruct rolI_eReg_i1(rRegI dst, immI1 lshift, immI_M1 rshift, eFlagsReg cr) %{ match(Set dst ( OrI (LShiftI dst lshift) (URShiftI dst rshift))); expand %{ @@ -8722,7 +8663,7 @@ instruct rolI_eReg_i1(eRegI dst, immI1 lshift, immI_M1 rshift, eFlagsReg cr) %{ %} // ROL 32bit var by imm8 once -instruct rolI_eReg_i8(eRegI dst, immI8 lshift, immI8 rshift, eFlagsReg cr) %{ +instruct rolI_eReg_i8(rRegI dst, immI8 lshift, immI8 rshift, eFlagsReg cr) %{ predicate( 0 == ((n->in(1)->in(2)->get_int() + n->in(2)->in(2)->get_int()) & 0x1f)); match(Set dst ( OrI (LShiftI dst lshift) (URShiftI dst rshift))); @@ -8750,7 +8691,7 @@ instruct rolI_eReg_Var_C32(ncxRegI dst, eCXRegI shift, immI_32 c32, eFlagsReg cr %} // ROR expand -instruct rorI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct rorI_eReg_imm1(rRegI dst, immI1 shift, eFlagsReg cr) %{ effect(USE_DEF dst, USE shift, KILL cr); format %{ "ROR $dst, $shift" %} @@ -8759,7 +8700,7 @@ instruct rorI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct rorI_eReg_imm8(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct rorI_eReg_imm8(rRegI dst, immI8 shift, eFlagsReg cr) %{ effect (USE_DEF dst, USE shift, KILL cr); format %{ "ROR $dst, $shift" %} @@ -8779,7 +8720,7 @@ instruct rorI_eReg_CL(ncxRegI dst, eCXRegI shift, eFlagsReg cr)%{ // end of ROR expand // ROR right once -instruct rorI_eReg_i1(eRegI dst, immI1 rshift, immI_M1 lshift, eFlagsReg cr) %{ +instruct rorI_eReg_i1(rRegI dst, immI1 rshift, immI_M1 lshift, eFlagsReg cr) %{ match(Set dst ( OrI (URShiftI dst rshift) (LShiftI dst lshift))); expand %{ @@ -8788,7 +8729,7 @@ instruct rorI_eReg_i1(eRegI dst, immI1 rshift, immI_M1 lshift, eFlagsReg cr) %{ %} // ROR 32bit by immI8 once -instruct rorI_eReg_i8(eRegI dst, immI8 rshift, immI8 lshift, eFlagsReg cr) %{ +instruct rorI_eReg_i8(rRegI dst, immI8 rshift, immI8 lshift, eFlagsReg cr) %{ predicate( 0 == ((n->in(1)->in(2)->get_int() + n->in(2)->in(2)->get_int()) & 0x1f)); match(Set dst ( OrI (URShiftI dst rshift) (LShiftI dst lshift))); @@ -8817,7 +8758,7 @@ instruct rorI_eReg_Var_C32(ncxRegI dst, eCXRegI shift, immI_32 c32, eFlagsReg cr // Xor Instructions // Xor Register with Register -instruct xorI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct xorI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (XorI dst src)); effect(KILL cr); @@ -8829,7 +8770,7 @@ instruct xorI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ %} // Xor Register with Immediate -1 -instruct xorI_eReg_im1(eRegI dst, immI_M1 imm) %{ +instruct xorI_eReg_im1(rRegI dst, immI_M1 imm) %{ match(Set dst (XorI dst imm)); size(2); @@ -8841,7 +8782,7 @@ instruct xorI_eReg_im1(eRegI dst, immI_M1 imm) %{ %} // Xor Register with Immediate -instruct xorI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct xorI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (XorI dst src)); effect(KILL cr); @@ -8853,7 +8794,7 @@ instruct xorI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ %} // Xor Register with Memory -instruct xorI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct xorI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (XorI dst (LoadI src))); effect(KILL cr); @@ -8865,7 +8806,7 @@ instruct xorI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ %} // Xor Memory with Register -instruct xorI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct xorI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (XorI (LoadI dst) src))); effect(KILL cr); @@ -8890,14 +8831,14 @@ instruct xorI_mem_imm(memory dst, immI src, eFlagsReg cr) %{ //----------Convert Int to Boolean--------------------------------------------- -instruct movI_nocopy(eRegI dst, eRegI src) %{ +instruct movI_nocopy(rRegI dst, rRegI src) %{ effect( DEF dst, USE src ); format %{ "MOV $dst,$src" %} ins_encode( enc_Copy( dst, src) ); ins_pipe( ialu_reg_reg ); %} -instruct ci2b( eRegI dst, eRegI src, eFlagsReg cr ) %{ +instruct ci2b( rRegI dst, rRegI src, eFlagsReg cr ) %{ effect( USE_DEF dst, USE src, KILL cr ); size(4); @@ -8908,7 +8849,7 @@ instruct ci2b( eRegI dst, eRegI src, eFlagsReg cr ) %{ ins_pipe( ialu_reg_reg_long ); %} -instruct convI2B( eRegI dst, eRegI src, eFlagsReg cr ) %{ +instruct convI2B( rRegI dst, rRegI src, eFlagsReg cr ) %{ match(Set dst (Conv2B src)); expand %{ @@ -8917,14 +8858,14 @@ instruct convI2B( eRegI dst, eRegI src, eFlagsReg cr ) %{ %} %} -instruct movP_nocopy(eRegI dst, eRegP src) %{ +instruct movP_nocopy(rRegI dst, eRegP src) %{ effect( DEF dst, USE src ); format %{ "MOV $dst,$src" %} ins_encode( enc_Copy( dst, src) ); ins_pipe( ialu_reg_reg ); %} -instruct cp2b( eRegI dst, eRegP src, eFlagsReg cr ) %{ +instruct cp2b( rRegI dst, eRegP src, eFlagsReg cr ) %{ effect( USE_DEF dst, USE src, KILL cr ); format %{ "NEG $dst\n\t" "ADC $dst,$src" %} @@ -8933,7 +8874,7 @@ instruct cp2b( eRegI dst, eRegP src, eFlagsReg cr ) %{ ins_pipe( ialu_reg_reg_long ); %} -instruct convP2B( eRegI dst, eRegP src, eFlagsReg cr ) %{ +instruct convP2B( rRegI dst, eRegP src, eFlagsReg cr ) %{ match(Set dst (Conv2B src)); expand %{ @@ -8958,7 +8899,7 @@ instruct cmpLTMask( eCXRegI dst, ncxRegI p, ncxRegI q, eFlagsReg cr ) %{ ins_pipe( pipe_slow ); %} -instruct cmpLTMask0( eRegI dst, immI0 zero, eFlagsReg cr ) %{ +instruct cmpLTMask0( rRegI dst, immI0 zero, eFlagsReg cr ) %{ match(Set dst (CmpLTMask dst zero)); effect( DEF dst, KILL cr ); ins_cost(100); @@ -9430,7 +9371,7 @@ instruct cmpDPR_cc(eFlagsRegU cr, regDPR src1, regDPR src2, eAXRegI rax) %{ %} // Compare vs zero into -1,0,1 -instruct cmpDPR_0(eRegI dst, regDPR src1, immDPR0 zero, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpDPR_0(rRegI dst, regDPR src1, immDPR0 zero, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE<=1); match(Set dst (CmpD3 src1 zero)); effect(KILL cr, KILL rax); @@ -9444,7 +9385,7 @@ instruct cmpDPR_0(eRegI dst, regDPR src1, immDPR0 zero, eAXRegI rax, eFlagsReg c %} // Compare into -1,0,1 -instruct cmpDPR_reg(eRegI dst, regDPR src1, regDPR src2, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpDPR_reg(rRegI dst, regDPR src1, regDPR src2, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE<=1); match(Set dst (CmpD3 src1 src2)); effect(KILL cr, KILL rax); @@ -10222,7 +10163,7 @@ instruct cmpFPR_cc(eFlagsRegU cr, regFPR src1, regFPR src2, eAXRegI rax) %{ %} // Compare vs zero into -1,0,1 -instruct cmpFPR_0(eRegI dst, regFPR src1, immFPR0 zero, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpFPR_0(rRegI dst, regFPR src1, immFPR0 zero, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE == 0); match(Set dst (CmpF3 src1 zero)); effect(KILL cr, KILL rax); @@ -10236,7 +10177,7 @@ instruct cmpFPR_0(eRegI dst, regFPR src1, immFPR0 zero, eAXRegI rax, eFlagsReg c %} // Compare into -1,0,1 -instruct cmpFPR_reg(eRegI dst, regFPR src1, regFPR src2, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpFPR_reg(rRegI dst, regFPR src1, regFPR src2, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE == 0); match(Set dst (CmpF3 src1 src2)); effect(KILL cr, KILL rax); @@ -11156,7 +11097,7 @@ instruct convI2DPR_reg(regDPR dst, stackSlotI src) %{ ins_pipe( fpu_reg_mem ); %} -instruct convI2D_reg(regD dst, eRegI src) %{ +instruct convI2D_reg(regD dst, rRegI src) %{ predicate( UseSSE>=2 && !UseXmmI2D ); match(Set dst (ConvI2D src)); format %{ "CVTSI2SD $dst,$src" %} @@ -11176,7 +11117,7 @@ instruct convI2D_mem(regD dst, memory mem) %{ ins_pipe( pipe_slow ); %} -instruct convXI2D_reg(regD dst, eRegI src) +instruct convXI2D_reg(regD dst, rRegI src) %{ predicate( UseSSE>=2 && UseXmmI2D ); match(Set dst (ConvI2D src)); @@ -11264,7 +11205,7 @@ instruct convI2FPR_mem(regFPR dst, memory mem) %{ %} // Convert an int to a float in xmm; no rounding step needed. -instruct convI2F_reg(regF dst, eRegI src) %{ +instruct convI2F_reg(regF dst, rRegI src) %{ predicate( UseSSE==1 || UseSSE>=2 && !UseXmmI2F ); match(Set dst (ConvI2F src)); format %{ "CVTSI2SS $dst, $src" %} @@ -11274,7 +11215,7 @@ instruct convI2F_reg(regF dst, eRegI src) %{ ins_pipe( pipe_slow ); %} - instruct convXI2F_reg(regF dst, eRegI src) + instruct convXI2F_reg(regF dst, rRegI src) %{ predicate( UseSSE>=2 && UseXmmI2F ); match(Set dst (ConvI2F src)); @@ -11288,7 +11229,7 @@ instruct convI2F_reg(regF dst, eRegI src) %{ ins_pipe(pipe_slow); // XXX %} -instruct convI2L_reg( eRegL dst, eRegI src, eFlagsReg cr) %{ +instruct convI2L_reg( eRegL dst, rRegI src, eFlagsReg cr) %{ match(Set dst (ConvI2L src)); effect(KILL cr); ins_cost(375); @@ -11300,7 +11241,7 @@ instruct convI2L_reg( eRegL dst, eRegI src, eFlagsReg cr) %{ %} // Zero-extend convert int to long -instruct convI2L_reg_zex(eRegL dst, eRegI src, immL_32bits mask, eFlagsReg flags ) %{ +instruct convI2L_reg_zex(eRegL dst, rRegI src, immL_32bits mask, eFlagsReg flags ) %{ match(Set dst (AndL (ConvI2L src) mask) ); effect( KILL flags ); ins_cost(250); @@ -11380,7 +11321,7 @@ instruct convL2FPR_reg( stackSlotF dst, eRegL src, eFlagsReg cr) %{ ins_pipe( pipe_slow ); %} -instruct convL2I_reg( eRegI dst, eRegL src ) %{ +instruct convL2I_reg( rRegI dst, eRegL src ) %{ match(Set dst (ConvL2I src)); effect( DEF dst, USE src ); format %{ "MOV $dst,$src.lo" %} @@ -11389,7 +11330,7 @@ instruct convL2I_reg( eRegI dst, eRegL src ) %{ %} -instruct MoveF2I_stack_reg(eRegI dst, stackSlotF src) %{ +instruct MoveF2I_stack_reg(rRegI dst, stackSlotF src) %{ match(Set dst (MoveF2I src)); effect( DEF dst, USE src ); ins_cost(100); @@ -11424,7 +11365,7 @@ instruct MoveF2I_reg_stack_sse(stackSlotI dst, regF src) %{ ins_pipe( pipe_slow ); %} -instruct MoveF2I_reg_reg_sse(eRegI dst, regF src) %{ +instruct MoveF2I_reg_reg_sse(rRegI dst, regF src) %{ predicate(UseSSE>=2); match(Set dst (MoveF2I src)); effect( DEF dst, USE src ); @@ -11436,7 +11377,7 @@ instruct MoveF2I_reg_reg_sse(eRegI dst, regF src) %{ ins_pipe( pipe_slow ); %} -instruct MoveI2F_reg_stack(stackSlotF dst, eRegI src) %{ +instruct MoveI2F_reg_stack(stackSlotF dst, rRegI src) %{ match(Set dst (MoveI2F src)); effect( DEF dst, USE src ); @@ -11476,7 +11417,7 @@ instruct MoveI2F_stack_reg_sse(regF dst, stackSlotI src) %{ ins_pipe( pipe_slow ); %} -instruct MoveI2F_reg_reg_sse(regF dst, eRegI src) %{ +instruct MoveI2F_reg_reg_sse(regF dst, rRegI src) %{ predicate(UseSSE>=2); match(Set dst (MoveI2F src)); effect( DEF dst, USE src ); @@ -11610,186 +11551,6 @@ instruct MoveL2D_reg_reg_sse(regD dst, eRegL src, regD tmp) %{ ins_pipe( pipe_slow ); %} -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate8B src)); - format %{ "MOVDQA $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - if ($dst$$reg != $src$$reg) { - __ movdqa($dst$$XMMRegister, $src$$XMMRegister); - } - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate8B src)); - format %{ "MOVD $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar zero to packed byte (1 byte) values in xmm -instruct Repl8B_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate8B zero)); - format %{ "PXOR $dst,$dst\t! replicate8B" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4S src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4S" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4S src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4S" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed short (2 byte) values in xmm -instruct Repl4S_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4S zero)); - format %{ "PXOR $dst,$dst\t! replicate4S" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4C src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4C" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4C src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4C" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed char (2 byte) values in xmm -instruct Repl4C_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4C zero)); - format %{ "PXOR $dst,$dst\t! replicate4C" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2I src)); - format %{ "PSHUFD $dst,$src,0x00\t! replicate2I" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2I src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFD $dst,$dst,0x00\t! replicate2I" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed integer (2 byte) values in xmm -instruct Repl2I_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2I zero)); - format %{ "PXOR $dst,$dst\t! replicate2I" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_regF(regD dst, regF src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_immF0(regD dst, immF0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2F zero)); - format %{ "PXOR $dst,$dst\t! replicate2F" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} // ======================================================================= // fast clearing of an array @@ -11898,7 +11659,7 @@ instruct array_equals(eDIRegP ary1, eSIRegP ary2, eAXRegI result, //----------Control Flow Instructions------------------------------------------ // Signed compare Instructions -instruct compI_eReg(eFlagsReg cr, eRegI op1, eRegI op2) %{ +instruct compI_eReg(eFlagsReg cr, rRegI op1, rRegI op2) %{ match(Set cr (CmpI op1 op2)); effect( DEF cr, USE op1, USE op2 ); format %{ "CMP $op1,$op2" %} @@ -11907,7 +11668,7 @@ instruct compI_eReg(eFlagsReg cr, eRegI op1, eRegI op2) %{ ins_pipe( ialu_cr_reg_reg ); %} -instruct compI_eReg_imm(eFlagsReg cr, eRegI op1, immI op2) %{ +instruct compI_eReg_imm(eFlagsReg cr, rRegI op1, immI op2) %{ match(Set cr (CmpI op1 op2)); effect( DEF cr, USE op1 ); format %{ "CMP $op1,$op2" %} @@ -11918,7 +11679,7 @@ instruct compI_eReg_imm(eFlagsReg cr, eRegI op1, immI op2) %{ %} // Cisc-spilled version of cmpI_eReg -instruct compI_eReg_mem(eFlagsReg cr, eRegI op1, memory op2) %{ +instruct compI_eReg_mem(eFlagsReg cr, rRegI op1, memory op2) %{ match(Set cr (CmpI op1 (LoadI op2))); format %{ "CMP $op1,$op2" %} @@ -11928,7 +11689,7 @@ instruct compI_eReg_mem(eFlagsReg cr, eRegI op1, memory op2) %{ ins_pipe( ialu_cr_reg_mem ); %} -instruct testI_reg( eFlagsReg cr, eRegI src, immI0 zero ) %{ +instruct testI_reg( eFlagsReg cr, rRegI src, immI0 zero ) %{ match(Set cr (CmpI src zero)); effect( DEF cr, USE src ); @@ -11938,7 +11699,7 @@ instruct testI_reg( eFlagsReg cr, eRegI src, immI0 zero ) %{ ins_pipe( ialu_cr_reg_imm ); %} -instruct testI_reg_imm( eFlagsReg cr, eRegI src, immI con, immI0 zero ) %{ +instruct testI_reg_imm( eFlagsReg cr, rRegI src, immI con, immI0 zero ) %{ match(Set cr (CmpI (AndI src con) zero)); format %{ "TEST $src,$con" %} @@ -11947,7 +11708,7 @@ instruct testI_reg_imm( eFlagsReg cr, eRegI src, immI con, immI0 zero ) %{ ins_pipe( ialu_cr_reg_imm ); %} -instruct testI_reg_mem( eFlagsReg cr, eRegI src, memory mem, immI0 zero ) %{ +instruct testI_reg_mem( eFlagsReg cr, rRegI src, memory mem, immI0 zero ) %{ match(Set cr (CmpI (AndI src mem) zero)); format %{ "TEST $src,$mem" %} @@ -11958,7 +11719,7 @@ instruct testI_reg_mem( eFlagsReg cr, eRegI src, memory mem, immI0 zero ) %{ // Unsigned compare Instructions; really, same as signed except they // produce an eFlagsRegU instead of eFlagsReg. -instruct compU_eReg(eFlagsRegU cr, eRegI op1, eRegI op2) %{ +instruct compU_eReg(eFlagsRegU cr, rRegI op1, rRegI op2) %{ match(Set cr (CmpU op1 op2)); format %{ "CMPu $op1,$op2" %} @@ -11967,7 +11728,7 @@ instruct compU_eReg(eFlagsRegU cr, eRegI op1, eRegI op2) %{ ins_pipe( ialu_cr_reg_reg ); %} -instruct compU_eReg_imm(eFlagsRegU cr, eRegI op1, immI op2) %{ +instruct compU_eReg_imm(eFlagsRegU cr, rRegI op1, immI op2) %{ match(Set cr (CmpU op1 op2)); format %{ "CMPu $op1,$op2" %} @@ -11977,7 +11738,7 @@ instruct compU_eReg_imm(eFlagsRegU cr, eRegI op1, immI op2) %{ %} // // Cisc-spilled version of cmpU_eReg -instruct compU_eReg_mem(eFlagsRegU cr, eRegI op1, memory op2) %{ +instruct compU_eReg_mem(eFlagsRegU cr, rRegI op1, memory op2) %{ match(Set cr (CmpU op1 (LoadI op2))); format %{ "CMPu $op1,$op2" %} @@ -11988,7 +11749,7 @@ instruct compU_eReg_mem(eFlagsRegU cr, eRegI op1, memory op2) %{ %} // // Cisc-spilled version of cmpU_eReg -//instruct compU_mem_eReg(eFlagsRegU cr, memory op1, eRegI op2) %{ +//instruct compU_mem_eReg(eFlagsRegU cr, memory op1, rRegI op2) %{ // match(Set cr (CmpU (LoadI op1) op2)); // // format %{ "CMPu $op1,$op2" %} @@ -11997,7 +11758,7 @@ instruct compU_eReg_mem(eFlagsRegU cr, eRegI op1, memory op2) %{ // ins_encode( OpcP, RegMem( op1, op2) ); //%} -instruct testU_reg( eFlagsRegU cr, eRegI src, immI0 zero ) %{ +instruct testU_reg( eFlagsRegU cr, rRegI src, immI0 zero ) %{ match(Set cr (CmpU src zero)); format %{ "TESTu $src,$src" %} @@ -12093,7 +11854,7 @@ instruct testP_Reg_mem( eFlagsReg cr, memory op, immI0 zero ) %{ // *** Min and Max using the conditional move are slower than the // *** branch version on a Pentium III. // // Conditional move for min -//instruct cmovI_reg_lt( eRegI op2, eRegI op1, eFlagsReg cr ) %{ +//instruct cmovI_reg_lt( rRegI op2, rRegI op1, eFlagsReg cr ) %{ // effect( USE_DEF op2, USE op1, USE cr ); // format %{ "CMOVlt $op2,$op1\t! min" %} // opcode(0x4C,0x0F); @@ -12102,7 +11863,7 @@ instruct testP_Reg_mem( eFlagsReg cr, memory op, immI0 zero ) %{ //%} // //// Min Register with Register (P6 version) -//instruct minI_eReg_p6( eRegI op1, eRegI op2 ) %{ +//instruct minI_eReg_p6( rRegI op1, rRegI op2 ) %{ // predicate(VM_Version::supports_cmov() ); // match(Set op2 (MinI op1 op2)); // ins_cost(200); @@ -12114,7 +11875,7 @@ instruct testP_Reg_mem( eFlagsReg cr, memory op, immI0 zero ) %{ //%} // Min Register with Register (generic version) -instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ +instruct minI_eReg(rRegI dst, rRegI src, eFlagsReg flags) %{ match(Set dst (MinI dst src)); effect(KILL flags); ins_cost(300); @@ -12129,7 +11890,7 @@ instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ // *** Min and Max using the conditional move are slower than the // *** branch version on a Pentium III. // // Conditional move for max -//instruct cmovI_reg_gt( eRegI op2, eRegI op1, eFlagsReg cr ) %{ +//instruct cmovI_reg_gt( rRegI op2, rRegI op1, eFlagsReg cr ) %{ // effect( USE_DEF op2, USE op1, USE cr ); // format %{ "CMOVgt $op2,$op1\t! max" %} // opcode(0x4F,0x0F); @@ -12138,7 +11899,7 @@ instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ //%} // // // Max Register with Register (P6 version) -//instruct maxI_eReg_p6( eRegI op1, eRegI op2 ) %{ +//instruct maxI_eReg_p6( rRegI op1, rRegI op2 ) %{ // predicate(VM_Version::supports_cmov() ); // match(Set op2 (MaxI op1 op2)); // ins_cost(200); @@ -12150,7 +11911,7 @@ instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ //%} // Max Register with Register (generic version) -instruct maxI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ +instruct maxI_eReg(rRegI dst, rRegI src, eFlagsReg flags) %{ match(Set dst (MaxI dst src)); effect(KILL flags); ins_cost(300); @@ -12211,7 +11972,7 @@ instruct loopLimit_eReg(eAXRegI limit, nadxRegI init, immI stride, eDXRegI limit // ============================================================================ // Branch Instructions // Jump Table -instruct jumpXtnd(eRegI switch_val) %{ +instruct jumpXtnd(rRegI switch_val) %{ match(Jump switch_val); ins_cost(350); format %{ "JMP [$constantaddress](,$switch_val,1)\n\t" %} @@ -12629,7 +12390,7 @@ instruct cmpL_zero_flags_LTGE( flagsReg_long_LTGE flags, eRegL src, immL0 zero ) // Manifest a CmpL result in the normal flags. Only good for LT or GE // compares. Can be used for LE or GT compares by reversing arguments. // NOT GOOD FOR EQ/NE tests. -instruct cmpL_reg_flags_LTGE( flagsReg_long_LTGE flags, eRegL src1, eRegL src2, eRegI tmp ) %{ +instruct cmpL_reg_flags_LTGE( flagsReg_long_LTGE flags, eRegL src1, eRegL src2, rRegI tmp ) %{ match( Set flags (CmpL src1 src2 )); effect( TEMP tmp ); ins_cost(300); @@ -12675,7 +12436,7 @@ instruct cmovLL_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegL dst, load_lo %} // Compare 2 longs and CMOVE ints. -instruct cmovII_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegI dst, eRegI src) %{ +instruct cmovII_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, rRegI dst, rRegI src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst src))); ins_cost(200); @@ -12685,7 +12446,7 @@ instruct cmovII_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegI dst, eRegI s ins_pipe( pipe_cmov_reg ); %} -instruct cmovII_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegI dst, memory src) %{ +instruct cmovII_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src)))); ins_cost(250); @@ -12746,7 +12507,7 @@ instruct cmovFF_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regF dst, regF src //====== // Manifest a CmpL result in the normal flags. Only good for EQ/NE compares. -instruct cmpL_zero_flags_EQNE( flagsReg_long_EQNE flags, eRegL src, immL0 zero, eRegI tmp ) %{ +instruct cmpL_zero_flags_EQNE( flagsReg_long_EQNE flags, eRegL src, immL0 zero, rRegI tmp ) %{ match( Set flags (CmpL src zero )); effect(TEMP tmp); ins_cost(200); @@ -12803,7 +12564,7 @@ instruct cmovLL_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegL dst, load_lo %} // Compare 2 longs and CMOVE ints. -instruct cmovII_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegI dst, eRegI src) %{ +instruct cmovII_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, rRegI dst, rRegI src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst src))); ins_cost(200); @@ -12813,7 +12574,7 @@ instruct cmovII_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegI dst, eRegI s ins_pipe( pipe_cmov_reg ); %} -instruct cmovII_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegI dst, memory src) %{ +instruct cmovII_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src)))); ins_cost(250); @@ -12875,7 +12636,7 @@ instruct cmovFF_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regF dst, regF src //====== // Manifest a CmpL result in the normal flags. Only good for LE or GT compares. // Same as cmpL_reg_flags_LEGT except must negate src -instruct cmpL_zero_flags_LEGT( flagsReg_long_LEGT flags, eRegL src, immL0 zero, eRegI tmp ) %{ +instruct cmpL_zero_flags_LEGT( flagsReg_long_LEGT flags, eRegL src, immL0 zero, rRegI tmp ) %{ match( Set flags (CmpL src zero )); effect( TEMP tmp ); ins_cost(300); @@ -12889,7 +12650,7 @@ instruct cmpL_zero_flags_LEGT( flagsReg_long_LEGT flags, eRegL src, immL0 zero, // Manifest a CmpL result in the normal flags. Only good for LE or GT compares. // Same as cmpL_reg_flags_LTGE except operands swapped. Swapping operands // requires a commuted test to get the same result. -instruct cmpL_reg_flags_LEGT( flagsReg_long_LEGT flags, eRegL src1, eRegL src2, eRegI tmp ) %{ +instruct cmpL_reg_flags_LEGT( flagsReg_long_LEGT flags, eRegL src1, eRegL src2, rRegI tmp ) %{ match( Set flags (CmpL src1 src2 )); effect( TEMP tmp ); ins_cost(300); @@ -12936,7 +12697,7 @@ instruct cmovLL_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegL dst, %} // Compare 2 longs and CMOVE ints. -instruct cmovII_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegI dst, eRegI src) %{ +instruct cmovII_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, rRegI dst, rRegI src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst src))); ins_cost(200); @@ -12946,7 +12707,7 @@ instruct cmovII_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegI dst, ins_pipe( pipe_cmov_reg ); %} -instruct cmovII_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegI dst, memory src) %{ +instruct cmovII_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src)))); ins_cost(250); @@ -13275,11 +13036,11 @@ instruct tlsLoadP(eRegP dst, eFlagsReg cr) %{ // ---------EXAMPLE---------------------------------------------------------- // // // pertinent parts of existing instructions in architecture description -// instruct movI(eRegI dst, eRegI src) %{ +// instruct movI(rRegI dst, rRegI src) %{ // match(Set dst (CopyI src)); // %} // -// instruct incI_eReg(eRegI dst, immI1 src, eFlagsReg cr) %{ +// instruct incI_eReg(rRegI dst, immI1 src, eFlagsReg cr) %{ // match(Set dst (AddI dst src)); // effect(KILL cr); // %} @@ -13324,11 +13085,11 @@ instruct tlsLoadP(eRegP dst, eFlagsReg cr) %{ // %} // // Change load of spilled value to only a spill -// instruct storeI(memory mem, eRegI src) %{ +// instruct storeI(memory mem, rRegI src) %{ // match(Set mem (StoreI mem src)); // %} // -// instruct loadI(eRegI dst, memory mem) %{ +// instruct loadI(rRegI dst, memory mem) %{ // match(Set dst (LoadI mem)); // %} // diff --git a/hotspot/src/cpu/x86/vm/x86_64.ad b/hotspot/src/cpu/x86/vm/x86_64.ad index 1a5e1c86c6c..68c6d354012 100644 --- a/hotspot/src/cpu/x86/vm/x86_64.ad +++ b/hotspot/src/cpu/x86/vm/x86_64.ad @@ -131,102 +131,6 @@ reg_def R15_H(SOC, SOE, Op_RegI, 15, r15->as_VMReg()->next()); // Floating Point Registers -// XMM registers. 128-bit registers or 4 words each, labeled (a)-d. -// Word a in each register holds a Float, words ab hold a Double. We -// currently do not use the SIMD capabilities, so registers cd are -// unused at the moment. -// XMM8-XMM15 must be encoded with REX. -// Linux ABI: No register preserved across function calls -// XMM0-XMM7 might hold parameters -// Windows ABI: XMM6-XMM15 preserved across function calls -// XMM0-XMM3 might hold parameters - -reg_def XMM0 (SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()); -reg_def XMM0_H (SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()); - -reg_def XMM1 (SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()); -reg_def XMM1_H (SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()); - -reg_def XMM2 (SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()); -reg_def XMM2_H (SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()); - -reg_def XMM3 (SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()); -reg_def XMM3_H (SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()); - -reg_def XMM4 (SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()); -reg_def XMM4_H (SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()); - -reg_def XMM5 (SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()); -reg_def XMM5_H (SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()); - -#ifdef _WIN64 - -reg_def XMM6 (SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()); -reg_def XMM6_H (SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next()); - -reg_def XMM7 (SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()); -reg_def XMM7_H (SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next()); - -reg_def XMM8 (SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()); -reg_def XMM8_H (SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next()); - -reg_def XMM9 (SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()); -reg_def XMM9_H (SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next()); - -reg_def XMM10 (SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()); -reg_def XMM10_H(SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next()); - -reg_def XMM11 (SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()); -reg_def XMM11_H(SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next()); - -reg_def XMM12 (SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()); -reg_def XMM12_H(SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next()); - -reg_def XMM13 (SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()); -reg_def XMM13_H(SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next()); - -reg_def XMM14 (SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()); -reg_def XMM14_H(SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next()); - -reg_def XMM15 (SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()); -reg_def XMM15_H(SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next()); - -#else - -reg_def XMM6 (SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()); -reg_def XMM6_H (SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()); - -reg_def XMM7 (SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()); -reg_def XMM7_H (SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()); - -reg_def XMM8 (SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()); -reg_def XMM8_H (SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next()); - -reg_def XMM9 (SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()); -reg_def XMM9_H (SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next()); - -reg_def XMM10 (SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()); -reg_def XMM10_H(SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next()); - -reg_def XMM11 (SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()); -reg_def XMM11_H(SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next()); - -reg_def XMM12 (SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()); -reg_def XMM12_H(SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next()); - -reg_def XMM13 (SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()); -reg_def XMM13_H(SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next()); - -reg_def XMM14 (SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()); -reg_def XMM14_H(SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next()); - -reg_def XMM15 (SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()); -reg_def XMM15_H(SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next()); - -#endif // _WIN64 - -reg_def RFLAGS(SOC, SOC, 0, 16, VMRegImpl::Bad()); - // Specify priority of register selection within phases of register // allocation. Highest priority is first. A useful heuristic is to // give registers a low priority when they are required by machine @@ -252,26 +156,6 @@ alloc_class chunk0(R10, R10_H, R15, R15_H, RSP, RSP_H); -// XXX probably use 8-15 first on Linux -alloc_class chunk1(XMM0, XMM0_H, - XMM1, XMM1_H, - XMM2, XMM2_H, - XMM3, XMM3_H, - XMM4, XMM4_H, - XMM5, XMM5_H, - XMM6, XMM6_H, - XMM7, XMM7_H, - XMM8, XMM8_H, - XMM9, XMM9_H, - XMM10, XMM10_H, - XMM11, XMM11_H, - XMM12, XMM12_H, - XMM13, XMM13_H, - XMM14, XMM14_H, - XMM15, XMM15_H); - -alloc_class chunk2(RFLAGS); - //----------Architecture Description Register Classes-------------------------- // Several register classes are automatically defined based upon information in @@ -501,47 +385,8 @@ reg_class int_rdi_reg(RDI); // Singleton class for instruction pointer // reg_class ip_reg(RIP); -// Singleton class for condition codes -reg_class int_flags(RFLAGS); - -// Class for all float registers -reg_class float_reg(XMM0, - XMM1, - XMM2, - XMM3, - XMM4, - XMM5, - XMM6, - XMM7, - XMM8, - XMM9, - XMM10, - XMM11, - XMM12, - XMM13, - XMM14, - XMM15); - -// Class for all double registers -reg_class double_reg(XMM0, XMM0_H, - XMM1, XMM1_H, - XMM2, XMM2_H, - XMM3, XMM3_H, - XMM4, XMM4_H, - XMM5, XMM5_H, - XMM6, XMM6_H, - XMM7, XMM7_H, - XMM8, XMM8_H, - XMM9, XMM9_H, - XMM10, XMM10_H, - XMM11, XMM11_H, - XMM12, XMM12_H, - XMM13, XMM13_H, - XMM14, XMM14_H, - XMM15, XMM15_H); %} - //----------SOURCE BLOCK------------------------------------------------------- // This is a block of C++ code which provides values, functions, and // definitions necessary in the rest of the architecture description @@ -1027,12 +872,84 @@ static enum RC rc_class(OptoReg::Name reg) return rc_float; } +// Next two methods are shared by 32- and 64-bit VM. They are defined in x86.ad. +static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo, + int src_hi, int dst_hi, uint ireg, outputStream* st); + +static int vec_spill_helper(CodeBuffer *cbuf, bool do_size, bool is_load, + int stack_offset, int reg, uint ireg, outputStream* st); + +static void vec_stack_to_stack_helper(CodeBuffer *cbuf, int src_offset, + int dst_offset, uint ireg, outputStream* st) { + if (cbuf) { + MacroAssembler _masm(cbuf); + switch (ireg) { + case Op_VecS: + __ movq(Address(rsp, -8), rax); + __ movl(rax, Address(rsp, src_offset)); + __ movl(Address(rsp, dst_offset), rax); + __ movq(rax, Address(rsp, -8)); + break; + case Op_VecD: + __ pushq(Address(rsp, src_offset)); + __ popq (Address(rsp, dst_offset)); + break; + case Op_VecX: + __ pushq(Address(rsp, src_offset)); + __ popq (Address(rsp, dst_offset)); + __ pushq(Address(rsp, src_offset+8)); + __ popq (Address(rsp, dst_offset+8)); + break; + case Op_VecY: + __ vmovdqu(Address(rsp, -32), xmm0); + __ vmovdqu(xmm0, Address(rsp, src_offset)); + __ vmovdqu(Address(rsp, dst_offset), xmm0); + __ vmovdqu(xmm0, Address(rsp, -32)); + break; + default: + ShouldNotReachHere(); + } +#ifndef PRODUCT + } else { + switch (ireg) { + case Op_VecS: + st->print("movq [rsp - #8], rax\t# 32-bit mem-mem spill\n\t" + "movl rax, [rsp + #%d]\n\t" + "movl [rsp + #%d], rax\n\t" + "movq rax, [rsp - #8]", + src_offset, dst_offset); + break; + case Op_VecD: + st->print("pushq [rsp + #%d]\t# 64-bit mem-mem spill\n\t" + "popq [rsp + #%d]", + src_offset, dst_offset); + break; + case Op_VecX: + st->print("pushq [rsp + #%d]\t# 128-bit mem-mem spill\n\t" + "popq [rsp + #%d]\n\t" + "pushq [rsp + #%d]\n\t" + "popq [rsp + #%d]", + src_offset, dst_offset, src_offset+8, dst_offset+8); + break; + case Op_VecY: + st->print("vmovdqu [rsp - #32], xmm0\t# 256-bit mem-mem spill\n\t" + "vmovdqu xmm0, [rsp + #%d]\n\t" + "vmovdqu [rsp + #%d], xmm0\n\t" + "vmovdqu xmm0, [rsp - #32]", + src_offset, dst_offset); + break; + default: + ShouldNotReachHere(); + } +#endif + } +} + uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, PhaseRegAlloc* ra_, bool do_size, - outputStream* st) const -{ - + outputStream* st) const { + assert(cbuf != NULL || st != NULL, "sanity"); // Get registers to move OptoReg::Name src_second = ra_->get_reg_second(in(1)); OptoReg::Name src_first = ra_->get_reg_first(in(1)); @@ -1050,7 +967,30 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, if (src_first == dst_first && src_second == dst_second) { // Self copy, no move return 0; - } else if (src_first_rc == rc_stack) { + } + if (bottom_type()->isa_vect() != NULL) { + uint ireg = ideal_reg(); + assert((src_first_rc != rc_int && dst_first_rc != rc_int), "sanity"); + assert((ireg == Op_VecS || ireg == Op_VecD || ireg == Op_VecX || ireg == Op_VecY), "sanity"); + if( src_first_rc == rc_stack && dst_first_rc == rc_stack ) { + // mem -> mem + int src_offset = ra_->reg2offset(src_first); + int dst_offset = ra_->reg2offset(dst_first); + vec_stack_to_stack_helper(cbuf, src_offset, dst_offset, ireg, st); + } else if (src_first_rc == rc_float && dst_first_rc == rc_float ) { + vec_mov_helper(cbuf, false, src_first, dst_first, src_second, dst_second, ireg, st); + } else if (src_first_rc == rc_float && dst_first_rc == rc_stack ) { + int stack_offset = ra_->reg2offset(dst_first); + vec_spill_helper(cbuf, false, false, stack_offset, src_first, ireg, st); + } else if (src_first_rc == rc_stack && dst_first_rc == rc_float ) { + int stack_offset = ra_->reg2offset(src_first); + vec_spill_helper(cbuf, false, true, stack_offset, dst_first, ireg, st); + } else { + ShouldNotReachHere(); + } + return 0; + } + if (src_first_rc == rc_stack) { // mem -> if (dst_first_rc == rc_stack) { // mem -> mem @@ -1061,23 +1001,16 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, int src_offset = ra_->reg2offset(src_first); int dst_offset = ra_->reg2offset(dst_first); if (cbuf) { - emit_opcode(*cbuf, 0xFF); - encode_RegMem(*cbuf, RSI_enc, RSP_enc, 0x4, 0, src_offset, false); - - emit_opcode(*cbuf, 0x8F); - encode_RegMem(*cbuf, RAX_enc, RSP_enc, 0x4, 0, dst_offset, false); - + MacroAssembler _masm(cbuf); + __ pushq(Address(rsp, src_offset)); + __ popq (Address(rsp, dst_offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("pushq [rsp + #%d]\t# 64-bit mem-mem spill\n\t" - "popq [rsp + #%d]", - src_offset, - dst_offset); + "popq [rsp + #%d]", + src_offset, dst_offset); #endif } - return - 3 + ((src_offset == 0) ? 0 : (src_offset < 0x80 ? 1 : 4)) + - 3 + ((dst_offset == 0) ? 0 : (dst_offset < 0x80 ? 1 : 4)); } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1086,46 +1019,22 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, int src_offset = ra_->reg2offset(src_first); int dst_offset = ra_->reg2offset(dst_first); if (cbuf) { - emit_opcode(*cbuf, Assembler::REX_W); - emit_opcode(*cbuf, 0x89); - emit_opcode(*cbuf, 0x44); - emit_opcode(*cbuf, 0x24); - emit_opcode(*cbuf, 0xF8); - - emit_opcode(*cbuf, 0x8B); - encode_RegMem(*cbuf, - RAX_enc, - RSP_enc, 0x4, 0, src_offset, - false); - - emit_opcode(*cbuf, 0x89); - encode_RegMem(*cbuf, - RAX_enc, - RSP_enc, 0x4, 0, dst_offset, - false); - - emit_opcode(*cbuf, Assembler::REX_W); - emit_opcode(*cbuf, 0x8B); - emit_opcode(*cbuf, 0x44); - emit_opcode(*cbuf, 0x24); - emit_opcode(*cbuf, 0xF8); - + MacroAssembler _masm(cbuf); + __ movq(Address(rsp, -8), rax); + __ movl(rax, Address(rsp, src_offset)); + __ movl(Address(rsp, dst_offset), rax); + __ movq(rax, Address(rsp, -8)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq [rsp - #8], rax\t# 32-bit mem-mem spill\n\t" - "movl rax, [rsp + #%d]\n\t" - "movl [rsp + #%d], rax\n\t" - "movq rax, [rsp - #8]", - src_offset, - dst_offset); + "movl rax, [rsp + #%d]\n\t" + "movl [rsp + #%d], rax\n\t" + "movq rax, [rsp - #8]", + src_offset, dst_offset); #endif } - return - 5 + // movq - 3 + ((src_offset == 0) ? 0 : (src_offset < 0x80 ? 1 : 4)) + // movl - 3 + ((dst_offset == 0) ? 0 : (dst_offset < 0x80 ? 1 : 4)) + // movl - 5; // movq } + return 0; } else if (dst_first_rc == rc_int) { // mem -> gpr if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1133,52 +1042,32 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, // 64-bit int offset = ra_->reg2offset(src_first); if (cbuf) { - if (Matcher::_regEncode[dst_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_W); - } else { - emit_opcode(*cbuf, Assembler::REX_WR); - } - emit_opcode(*cbuf, 0x8B); - encode_RegMem(*cbuf, - Matcher::_regEncode[dst_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movq(as_Register(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq %s, [rsp + #%d]\t# spill", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + 4; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); assert(!((dst_first & 1) == 0 && dst_first + 1 == dst_second), "no transform"); int offset = ra_->reg2offset(src_first); if (cbuf) { - if (Matcher::_regEncode[dst_first] >= 8) { - emit_opcode(*cbuf, Assembler::REX_R); - } - emit_opcode(*cbuf, 0x8B); - encode_RegMem(*cbuf, - Matcher::_regEncode[dst_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movl(as_Register(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movl %s, [rsp + #%d]\t# spill", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[dst_first] < 8) - ? 3 - : 4); // REX } + return 0; } else if (dst_first_rc == rc_float) { // mem-> xmm if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1189,18 +1078,13 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdbl( as_XMMRegister(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("%s %s, [rsp + #%d]\t# spill", UseXmmLoadAndClearUpper ? "movsd " : "movlpd", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[dst_first] >= 8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1210,18 +1094,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movflt( as_XMMRegister(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movss %s, [rsp + #%d]\t# spill", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[dst_first] >= 8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } + return 0; } } else if (src_first_rc == rc_int) { // gpr -> @@ -1232,113 +1112,65 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, // 64-bit int offset = ra_->reg2offset(dst_first); if (cbuf) { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_W); - } else { - emit_opcode(*cbuf, Assembler::REX_WR); - } - emit_opcode(*cbuf, 0x89); - encode_RegMem(*cbuf, - Matcher::_regEncode[src_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movq(Address(rsp, offset), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + 4; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); assert(!((dst_first & 1) == 0 && dst_first + 1 == dst_second), "no transform"); int offset = ra_->reg2offset(dst_first); if (cbuf) { - if (Matcher::_regEncode[src_first] >= 8) { - emit_opcode(*cbuf, Assembler::REX_R); - } - emit_opcode(*cbuf, 0x89); - encode_RegMem(*cbuf, - Matcher::_regEncode[src_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movl(Address(rsp, offset), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movl [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[src_first] < 8) - ? 3 - : 4); // REX } + return 0; } else if (dst_first_rc == rc_int) { // gpr -> gpr if ((src_first & 1) == 0 && src_first + 1 == src_second && (dst_first & 1) == 0 && dst_first + 1 == dst_second) { // 64-bit if (cbuf) { - if (Matcher::_regEncode[dst_first] < 8) { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_W); - } else { - emit_opcode(*cbuf, Assembler::REX_WB); - } - } else { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_WR); - } else { - emit_opcode(*cbuf, Assembler::REX_WRB); - } - } - emit_opcode(*cbuf, 0x8B); - emit_rm(*cbuf, 0x3, - Matcher::_regEncode[dst_first] & 7, - Matcher::_regEncode[src_first] & 7); + MacroAssembler _masm(cbuf); + __ movq(as_Register(Matcher::_regEncode[dst_first]), + as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return 3; // REX + return 0; } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); assert(!((dst_first & 1) == 0 && dst_first + 1 == dst_second), "no transform"); if (cbuf) { - if (Matcher::_regEncode[dst_first] < 8) { - if (Matcher::_regEncode[src_first] >= 8) { - emit_opcode(*cbuf, Assembler::REX_B); - } - } else { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_R); - } else { - emit_opcode(*cbuf, Assembler::REX_RB); - } - } - emit_opcode(*cbuf, 0x8B); - emit_rm(*cbuf, 0x3, - Matcher::_regEncode[dst_first] & 7, - Matcher::_regEncode[src_first] & 7); + MacroAssembler _masm(cbuf); + __ movl(as_Register(Matcher::_regEncode[dst_first]), + as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movl %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] < 8 && Matcher::_regEncode[dst_first] < 8) - ? 2 - : 3; // REX + return 0; } } else if (dst_first_rc == rc_float) { // gpr -> xmm @@ -1349,13 +1181,12 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdq( as_XMMRegister(Matcher::_regEncode[dst_first]), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdq %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return 5; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1364,17 +1195,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdl( as_XMMRegister(Matcher::_regEncode[dst_first]), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdl %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? 5 - : (4 + ((UseAVX>0)?1:0)); // REX } + return 0; } } else if (src_first_rc == rc_float) { // xmm -> @@ -1388,17 +1216,12 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdbl( Address(rsp, offset), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movsd [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[src_first] >= 8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1408,18 +1231,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movflt(Address(rsp, offset), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movss [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[src_first] >=8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } + return 0; } else if (dst_first_rc == rc_int) { // xmm -> gpr if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1429,13 +1248,12 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdq( as_Register(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdq %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return 5; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1444,17 +1262,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdl( as_Register(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdl %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? 5 - : (4 + ((UseAVX>0)?1:0)); // REX } + return 0; } else if (dst_first_rc == rc_float) { // xmm -> xmm if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1464,17 +1279,13 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdbl( as_XMMRegister(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("%s %s, %s\t# spill", UseXmmRegToRegMoveAll ? "movapd" : "movsd ", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? 5 - : (4 + ((UseAVX>0)?1:0)); // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1483,42 +1294,35 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movflt( as_XMMRegister(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("%s %s, %s\t# spill", UseXmmRegToRegMoveAll ? "movaps" : "movss ", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return ((UseAVX>0) ? 5: - ((Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? (UseXmmRegToRegMoveAll ? 4 : 5) - : (UseXmmRegToRegMoveAll ? 3 : 4))); // REX } + return 0; } } assert(0," foo "); Unimplemented(); - return 0; } #ifndef PRODUCT -void MachSpillCopyNode::format(PhaseRegAlloc *ra_, outputStream* st) const -{ +void MachSpillCopyNode::format(PhaseRegAlloc *ra_, outputStream* st) const { implementation(NULL, ra_, false, st); } #endif -void MachSpillCopyNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const -{ +void MachSpillCopyNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const { implementation(&cbuf, ra_, false, NULL); } -uint MachSpillCopyNode::size(PhaseRegAlloc *ra_) const -{ - return implementation(NULL, ra_, true, NULL); +uint MachSpillCopyNode::size(PhaseRegAlloc *ra_) const { + return MachNode::size(ra_); } //============================================================================= @@ -1735,16 +1539,6 @@ const bool Matcher::convL2FSupported(void) { return true; } -// Vector width in bytes -const uint Matcher::vector_width_in_bytes(void) { - return 8; -} - -// Vector ideal reg -const uint Matcher::vector_ideal_reg(void) { - return Op_RegD; -} - // Is this branch offset short enough that a short branch can be used? // // NOTE: If the platform does not provide any short branch variants, then @@ -1831,21 +1625,21 @@ const bool Matcher::int_in_long = true; bool Matcher::can_be_java_arg(int reg) { return - reg == RDI_num || reg == RDI_H_num || - reg == RSI_num || reg == RSI_H_num || - reg == RDX_num || reg == RDX_H_num || - reg == RCX_num || reg == RCX_H_num || - reg == R8_num || reg == R8_H_num || - reg == R9_num || reg == R9_H_num || - reg == R12_num || reg == R12_H_num || - reg == XMM0_num || reg == XMM0_H_num || - reg == XMM1_num || reg == XMM1_H_num || - reg == XMM2_num || reg == XMM2_H_num || - reg == XMM3_num || reg == XMM3_H_num || - reg == XMM4_num || reg == XMM4_H_num || - reg == XMM5_num || reg == XMM5_H_num || - reg == XMM6_num || reg == XMM6_H_num || - reg == XMM7_num || reg == XMM7_H_num; + reg == RDI_num || reg == RDI_H_num || + reg == RSI_num || reg == RSI_H_num || + reg == RDX_num || reg == RDX_H_num || + reg == RCX_num || reg == RCX_H_num || + reg == R8_num || reg == R8_H_num || + reg == R9_num || reg == R9_H_num || + reg == R12_num || reg == R12_H_num || + reg == XMM0_num || reg == XMM0b_num || + reg == XMM1_num || reg == XMM1b_num || + reg == XMM2_num || reg == XMM2b_num || + reg == XMM3_num || reg == XMM3b_num || + reg == XMM4_num || reg == XMM4b_num || + reg == XMM5_num || reg == XMM5b_num || + reg == XMM6_num || reg == XMM6b_num || + reg == XMM7_num || reg == XMM7b_num; } bool Matcher::is_spillable_arg(int reg) @@ -3220,10 +3014,11 @@ frame OptoReg::Bad, // Op_RegI RAX_H_num, // Op_RegP OptoReg::Bad, // Op_RegF - XMM0_H_num, // Op_RegD + XMM0b_num, // Op_RegD RAX_H_num // Op_RegL }; - assert(ARRAY_SIZE(hi) == _last_machine_leaf - 1, "missing type"); + // Excluded flags and vector registers. + assert(ARRAY_SIZE(hi) == _last_machine_leaf - 5, "missing type"); return OptoRegPair(hi[ideal_reg], lo[ideal_reg]); %} %} @@ -3985,7 +3780,6 @@ operand regD() interface(REG_INTER); %} - //----------Memory Operands---------------------------------------------------- // Direct Memory Operand // operand direct(immP addr) @@ -5416,61 +5210,6 @@ instruct loadD(regD dst, memory mem) ins_pipe(pipe_slow); // XXX %} -// Load Aligned Packed Byte to XMM register -instruct loadA8B(regD dst, memory mem) %{ - match(Set dst (Load8B mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed8B" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Short to XMM register -instruct loadA4S(regD dst, memory mem) %{ - match(Set dst (Load4S mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4S" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Char to XMM register -instruct loadA4C(regD dst, memory mem) %{ - match(Set dst (Load4C mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4C" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Integer to XMM register -instruct load2IU(regD dst, memory mem) %{ - match(Set dst (Load2I mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed2I" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Single to XMM -instruct loadA2F(regD dst, memory mem) %{ - match(Set dst (Load2F mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed2F" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - // Load Effective Address instruct leaP8(rRegP dst, indOffset8 mem) %{ @@ -6200,39 +5939,6 @@ instruct storeImmB(memory mem, immI8 src) ins_pipe(ialu_mem_imm); %} -// Store Aligned Packed Byte XMM register to memory -instruct storeA8B(memory mem, regD src) %{ - match(Set mem (Store8B mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed8B" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Char/Short XMM register to memory -instruct storeA4C(memory mem, regD src) %{ - match(Set mem (Store4C mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed4C" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Integer XMM register to memory -instruct storeA2I(memory mem, regD src) %{ - match(Set mem (Store2I mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2I" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store CMS card-mark Immediate instruct storeImmCM0_reg(memory mem, immI0 zero) %{ @@ -6258,17 +5964,6 @@ instruct storeImmCM0(memory mem, immI0 src) ins_pipe(ialu_mem_imm); %} -// Store Aligned Packed Single Float XMM register to memory -instruct storeA2F(memory mem, regD src) %{ - match(Set mem (Store2F mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2F" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store Float instruct storeF(memory mem, regF src) %{ @@ -10377,172 +10072,6 @@ instruct MoveL2D_reg_reg(regD dst, rRegL src) %{ ins_pipe( pipe_slow ); %} -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_reg(regD dst, regD src) %{ - match(Set dst (Replicate8B src)); - format %{ "MOVDQA $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - if ($dst$$reg != $src$$reg) { - __ movdqa($dst$$XMMRegister, $src$$XMMRegister); - } - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate8B src)); - format %{ "MOVD $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar zero to packed byte (1 byte) values in xmm -instruct Repl8B_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate8B zero)); - format %{ "PXOR $dst,$dst\t! replicate8B" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_reg(regD dst, regD src) %{ - match(Set dst (Replicate4S src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4S" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate4S src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4S" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed short (2 byte) values in xmm -instruct Repl4S_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate4S zero)); - format %{ "PXOR $dst,$dst\t! replicate4S" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_reg(regD dst, regD src) %{ - match(Set dst (Replicate4C src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4C" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate4C src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4C" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed char (2 byte) values in xmm -instruct Repl4C_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate4C zero)); - format %{ "PXOR $dst,$dst\t! replicate4C" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_reg(regD dst, regD src) %{ - match(Set dst (Replicate2I src)); - format %{ "PSHUFD $dst,$src,0x00\t! replicate2I" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate2I src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFD $dst,$dst,0x00\t! replicate2I" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed integer (2 byte) values in xmm -instruct Repl2I_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate2I zero)); - format %{ "PXOR $dst,$dst\t! replicate2I" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_reg(regD dst, regD src) %{ - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_regF(regD dst, regF src) %{ - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_immF0(regD dst, immF0 zero) %{ - match(Set dst (Replicate2F zero)); - format %{ "PXOR $dst,$dst\t! replicate2F" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - // ======================================================================= // fast clearing of an array diff --git a/hotspot/src/share/vm/adlc/adlparse.cpp b/hotspot/src/share/vm/adlc/adlparse.cpp index ec31e36279b..ff486733efc 100644 --- a/hotspot/src/share/vm/adlc/adlparse.cpp +++ b/hotspot/src/share/vm/adlc/adlparse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -115,6 +115,12 @@ void ADLParser::parse() { parse_err(SYNERR, "expected one of - instruct, operand, ins_attrib, op_attrib, source, register, pipeline, encode\n Found %s",ident); } } + // Add reg_class spill_regs after parsing. + RegisterForm *regBlock = _AD.get_registers(); + if (regBlock == NULL) { + parse_err(SEMERR, "Did not declare 'register' definitions"); + } + regBlock->addSpillRegClass(); // Done with parsing, check consistency. @@ -768,11 +774,12 @@ void ADLParser::source_hpp_parse(void) { //------------------------------reg_parse-------------------------------------- void ADLParser::reg_parse(void) { - - // Create the RegisterForm for the architecture description. - RegisterForm *regBlock = new RegisterForm(); // Build new Source object - regBlock->_linenum = linenum(); - _AD.addForm(regBlock); + RegisterForm *regBlock = _AD.get_registers(); // Information about registers encoding + if (regBlock == NULL) { + // Create the RegisterForm for the architecture description. + regBlock = new RegisterForm(); // Build new Source object + _AD.addForm(regBlock); + } skipws(); // Skip leading whitespace if (_curchar == '%' && *(_ptr+1) == '{') { @@ -796,15 +803,11 @@ void ADLParser::reg_parse(void) { parse_err(SYNERR, "Missing %c{ ... %c} block after register keyword.\n",'%','%'); return; } - - // Add reg_class spill_regs - regBlock->addSpillRegClass(); } //------------------------------encode_parse----------------------------------- void ADLParser::encode_parse(void) { EncodeForm *encBlock; // Information about instruction/operand encoding - char *desc = NULL; // String representation of encode rule _AD.getForm(&encBlock); if ( encBlock == NULL) { diff --git a/hotspot/src/share/vm/adlc/archDesc.cpp b/hotspot/src/share/vm/adlc/archDesc.cpp index 294e88c148e..23cbb1e007b 100644 --- a/hotspot/src/share/vm/adlc/archDesc.cpp +++ b/hotspot/src/share/vm/adlc/archDesc.cpp @@ -1,5 +1,5 @@ // -// Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 1997, 2012, 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 @@ -911,12 +911,24 @@ const char *ArchDesc::getIdealType(const char *idealOp) { // Find last character in idealOp, it specifies the type char last_char = 0; const char *ptr = idealOp; - for( ; *ptr != '\0'; ++ptr) { + for (; *ptr != '\0'; ++ptr) { last_char = *ptr; } + // Match Vector types. + if (strncmp(idealOp, "Vec",3)==0) { + switch(last_char) { + case 'S': return "TypeVect::VECTS"; + case 'D': return "TypeVect::VECTD"; + case 'X': return "TypeVect::VECTX"; + case 'Y': return "TypeVect::VECTY"; + default: + internal_err("Vector type %s with unrecognized type\n",idealOp); + } + } + // !!!!! - switch( last_char ) { + switch(last_char) { case 'I': return "TypeInt::INT"; case 'P': return "TypePtr::BOTTOM"; case 'N': return "TypeNarrowOop::BOTTOM"; diff --git a/hotspot/src/share/vm/adlc/forms.cpp b/hotspot/src/share/vm/adlc/forms.cpp index 372ef5dd508..70b8bd96253 100644 --- a/hotspot/src/share/vm/adlc/forms.cpp +++ b/hotspot/src/share/vm/adlc/forms.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -265,47 +265,22 @@ Form::DataType Form::is_load_from_memory(const char *opType) const { if( strcmp(opType,"LoadN")==0 ) return Form::idealN; if( strcmp(opType,"LoadRange")==0 ) return Form::idealI; if( strcmp(opType,"LoadS")==0 ) return Form::idealS; - if( strcmp(opType,"Load16B")==0 ) return Form::idealB; - if( strcmp(opType,"Load8B")==0 ) return Form::idealB; - if( strcmp(opType,"Load4B")==0 ) return Form::idealB; - if( strcmp(opType,"Load8C")==0 ) return Form::idealC; - if( strcmp(opType,"Load4C")==0 ) return Form::idealC; - if( strcmp(opType,"Load2C")==0 ) return Form::idealC; - if( strcmp(opType,"Load8S")==0 ) return Form::idealS; - if( strcmp(opType,"Load4S")==0 ) return Form::idealS; - if( strcmp(opType,"Load2S")==0 ) return Form::idealS; - if( strcmp(opType,"Load2D")==0 ) return Form::idealD; - if( strcmp(opType,"Load4F")==0 ) return Form::idealF; - if( strcmp(opType,"Load2F")==0 ) return Form::idealF; - if( strcmp(opType,"Load4I")==0 ) return Form::idealI; - if( strcmp(opType,"Load2I")==0 ) return Form::idealI; - if( strcmp(opType,"Load2L")==0 ) return Form::idealL; + if( strcmp(opType,"LoadVector")==0 ) return Form::idealV; assert( strcmp(opType,"Load") != 0, "Must type Loads" ); return Form::none; } Form::DataType Form::is_store_to_memory(const char *opType) const { if( strcmp(opType,"StoreB")==0) return Form::idealB; - if( strcmp(opType,"StoreCM")==0) return Form::idealB; + if( strcmp(opType,"StoreCM")==0) return Form::idealB; if( strcmp(opType,"StoreC")==0) return Form::idealC; if( strcmp(opType,"StoreD")==0) return Form::idealD; if( strcmp(opType,"StoreF")==0) return Form::idealF; if( strcmp(opType,"StoreI")==0) return Form::idealI; if( strcmp(opType,"StoreL")==0) return Form::idealL; if( strcmp(opType,"StoreP")==0) return Form::idealP; - if( strcmp(opType,"StoreN")==0) return Form::idealN; - if( strcmp(opType,"Store16B")==0) return Form::idealB; - if( strcmp(opType,"Store8B")==0) return Form::idealB; - if( strcmp(opType,"Store4B")==0) return Form::idealB; - if( strcmp(opType,"Store8C")==0) return Form::idealC; - if( strcmp(opType,"Store4C")==0) return Form::idealC; - if( strcmp(opType,"Store2C")==0) return Form::idealC; - if( strcmp(opType,"Store2D")==0) return Form::idealD; - if( strcmp(opType,"Store4F")==0) return Form::idealF; - if( strcmp(opType,"Store2F")==0) return Form::idealF; - if( strcmp(opType,"Store4I")==0) return Form::idealI; - if( strcmp(opType,"Store2I")==0) return Form::idealI; - if( strcmp(opType,"Store2L")==0) return Form::idealL; + if( strcmp(opType,"StoreN")==0) return Form::idealN; + if( strcmp(opType,"StoreVector")==0 ) return Form::idealV; assert( strcmp(opType,"Store") != 0, "Must type Stores" ); return Form::none; } diff --git a/hotspot/src/share/vm/adlc/forms.hpp b/hotspot/src/share/vm/adlc/forms.hpp index 3132c6a3f92..aa13845d38f 100644 --- a/hotspot/src/share/vm/adlc/forms.hpp +++ b/hotspot/src/share/vm/adlc/forms.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -172,7 +172,8 @@ public: idealB = 6, // Byte type idealC = 7, // Char type idealS = 8, // String type - idealN = 9 // Narrow oop types + idealN = 9, // Narrow oop types + idealV = 10 // Vector type }; // Convert ideal name to a DataType, return DataType::none if not a 'ConX' Form::DataType ideal_to_const_type(const char *ideal_type_name) const; diff --git a/hotspot/src/share/vm/adlc/formsopt.cpp b/hotspot/src/share/vm/adlc/formsopt.cpp index 302cd84afe4..07d70fc6c6e 100644 --- a/hotspot/src/share/vm/adlc/formsopt.cpp +++ b/hotspot/src/share/vm/adlc/formsopt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, 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 @@ -66,7 +66,7 @@ AllocClass *RegisterForm::addAllocClass(char *className) { // for spill-slots/regs. void RegisterForm::addSpillRegClass() { // Stack slots start at the next available even register number. - _reg_ctr = (_reg_ctr+1) & ~1; + _reg_ctr = (_reg_ctr+7) & ~7; const char *rc_name = "stack_slots"; RegClass *reg_class = new RegClass(rc_name); reg_class->_stack_or_reg = true; @@ -150,9 +150,14 @@ bool RegisterForm::verify() { int RegisterForm::RegMask_Size() { // Need at least this many words int words_for_regs = (_reg_ctr + 31)>>5; - // Add a few for incoming & outgoing arguments to calls. + // The array of Register Mask bits should be large enough to cover + // all the machine registers and all parameters that need to be passed + // on the stack (stack registers) up to some interesting limit. Methods + // that need more parameters will NOT be compiled. On Intel, the limit + // is something like 90+ parameters. + // Add a few (3 words == 96 bits) for incoming & outgoing arguments to calls. // Round up to the next doubleword size. - return (words_for_regs + 2 + 1) & ~1; + return (words_for_regs + 3 + 1) & ~1; } void RegisterForm::dump() { // Debug printer diff --git a/hotspot/src/share/vm/adlc/formssel.cpp b/hotspot/src/share/vm/adlc/formssel.cpp index e92b8f89ec9..1b009707ac8 100644 --- a/hotspot/src/share/vm/adlc/formssel.cpp +++ b/hotspot/src/share/vm/adlc/formssel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, 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 @@ -432,6 +432,14 @@ Form::DataType InstructForm::is_ideal_store() const { return _matrule->is_ideal_store(); } +// Return 'true' if this instruction matches an ideal vector node +bool InstructForm::is_vector() const { + if( _matrule == NULL ) return false; + + return _matrule->is_vector(); +} + + // Return the input register that must match the output register // If this is not required, return 0 uint InstructForm::two_address(FormDict &globals) { @@ -751,6 +759,9 @@ bool InstructForm::captures_bottom_type(FormDict &globals) const { if (needs_base_oop_edge(globals)) return true; + if (is_vector()) return true; + if (is_mach_constant()) return true; + return false; } @@ -3381,11 +3392,8 @@ int MatchNode::needs_ideal_memory_edge(FormDict &globals) const { "StoreI","StoreL","StoreP","StoreN","StoreD","StoreF" , "StoreB","StoreC","Store" ,"StoreFP", "LoadI", "LoadUI2L", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF" , - "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" , - "Store4I","Store2I","Store2L","Store2D","Store4F","Store2F","Store16B", - "Store8B","Store4B","Store8C","Store4C","Store2C", - "Load4I" ,"Load2I" ,"Load2L" ,"Load2D" ,"Load4F" ,"Load2F" ,"Load16B" , - "Load8B" ,"Load4B" ,"Load8C" ,"Load4C" ,"Load2C" ,"Load8S", "Load4S","Load2S", + "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" , + "StoreVector", "LoadVector", "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned", "LoadPLocked", "StorePConditional", "StoreIConditional", "StoreLConditional", @@ -3822,6 +3830,10 @@ bool MatchRule::is_base_register(FormDict &globals) const { strcmp(opType,"RegL")==0 || strcmp(opType,"RegF")==0 || strcmp(opType,"RegD")==0 || + strcmp(opType,"VecS")==0 || + strcmp(opType,"VecD")==0 || + strcmp(opType,"VecX")==0 || + strcmp(opType,"VecY")==0 || strcmp(opType,"Reg" )==0) ) { return 1; } @@ -3938,19 +3950,12 @@ int MatchRule::is_expensive() const { strcmp(opType,"ReverseBytesL")==0 || strcmp(opType,"ReverseBytesUS")==0 || strcmp(opType,"ReverseBytesS")==0 || - strcmp(opType,"Replicate16B")==0 || - strcmp(opType,"Replicate8B")==0 || - strcmp(opType,"Replicate4B")==0 || - strcmp(opType,"Replicate8C")==0 || - strcmp(opType,"Replicate4C")==0 || - strcmp(opType,"Replicate8S")==0 || - strcmp(opType,"Replicate4S")==0 || - strcmp(opType,"Replicate4I")==0 || - strcmp(opType,"Replicate2I")==0 || - strcmp(opType,"Replicate2L")==0 || - strcmp(opType,"Replicate4F")==0 || - strcmp(opType,"Replicate2F")==0 || - strcmp(opType,"Replicate2D")==0 || + strcmp(opType,"ReplicateB")==0 || + strcmp(opType,"ReplicateS")==0 || + strcmp(opType,"ReplicateI")==0 || + strcmp(opType,"ReplicateL")==0 || + strcmp(opType,"ReplicateF")==0 || + strcmp(opType,"ReplicateD")==0 || 0 /* 0 to line up columns nicely */ ) return 1; } @@ -4034,6 +4039,23 @@ Form::DataType MatchRule::is_ideal_load() const { return ideal_load; } +bool MatchRule::is_vector() const { + if( _rChild ) { + const char *opType = _rChild->_opType; + if( strcmp(opType,"ReplicateB")==0 || + strcmp(opType,"ReplicateS")==0 || + strcmp(opType,"ReplicateI")==0 || + strcmp(opType,"ReplicateL")==0 || + strcmp(opType,"ReplicateF")==0 || + strcmp(opType,"ReplicateD")==0 || + strcmp(opType,"LoadVector")==0 || + strcmp(opType,"StoreVector")==0 || + 0 /* 0 to line up columns nicely */ ) + return true; + } + return false; +} + bool MatchRule::skip_antidep_check() const { // Some loads operate on what is effectively immutable memory so we diff --git a/hotspot/src/share/vm/adlc/formssel.hpp b/hotspot/src/share/vm/adlc/formssel.hpp index b2d3ec74d46..93b43b1f08b 100644 --- a/hotspot/src/share/vm/adlc/formssel.hpp +++ b/hotspot/src/share/vm/adlc/formssel.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, 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 @@ -160,6 +160,7 @@ public: virtual bool is_ideal_safepoint() const; // node matches 'SafePoint' virtual bool is_ideal_nop() const; // node matches 'Nop' virtual bool is_ideal_control() const; // control node + virtual bool is_vector() const; // vector instruction virtual Form::CallType is_ideal_call() const; // matches ideal 'Call' virtual Form::DataType is_ideal_load() const; // node matches ideal 'LoadXNode' @@ -1011,6 +1012,7 @@ public: bool is_ideal_goto() const; // node matches ideal 'Goto' bool is_ideal_loopEnd() const; // node matches ideal 'LoopEnd' bool is_ideal_bool() const; // node matches ideal 'Bool' + bool is_vector() const; // vector instruction Form::DataType is_ideal_load() const;// node matches ideal 'LoadXNode' // Should antidep checks be disabled for this rule // See definition of MatchRule::skip_antidep_check diff --git a/hotspot/src/share/vm/adlc/main.cpp b/hotspot/src/share/vm/adlc/main.cpp index 47e207a4b13..a963cdaf5bc 100644 --- a/hotspot/src/share/vm/adlc/main.cpp +++ b/hotspot/src/share/vm/adlc/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -250,6 +250,7 @@ int main(int argc, char *argv[]) AD.addInclude(AD._HPP_file, "opto/node.hpp"); AD.addInclude(AD._HPP_file, "opto/regalloc.hpp"); AD.addInclude(AD._HPP_file, "opto/subnode.hpp"); + AD.addInclude(AD._HPP_file, "opto/vectornode.hpp"); AD.addInclude(AD._CPP_CLONE_file, "precompiled.hpp"); AD.addInclude(AD._CPP_CLONE_file, "adfiles", get_basename(AD._HPP_file._name)); AD.addInclude(AD._CPP_EXPAND_file, "precompiled.hpp"); diff --git a/hotspot/src/share/vm/code/vmreg.cpp b/hotspot/src/share/vm/code/vmreg.cpp index dd5945503b2..c56be87f108 100644 --- a/hotspot/src/share/vm/code/vmreg.cpp +++ b/hotspot/src/share/vm/code/vmreg.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, 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 @@ -27,7 +27,7 @@ #include "code/vmreg.hpp" // First VMReg value that could refer to a stack slot -VMReg VMRegImpl::stack0 = (VMReg)(intptr_t)((ConcreteRegisterImpl::number_of_registers + 1) & ~1); +VMReg VMRegImpl::stack0 = (VMReg)(intptr_t)((ConcreteRegisterImpl::number_of_registers + 7) & ~7); // VMRegs are 4 bytes wide on all platforms const int VMRegImpl::stack_slot_size = 4; diff --git a/hotspot/src/share/vm/opto/c2_globals.hpp b/hotspot/src/share/vm/opto/c2_globals.hpp index 4d5424da5f7..947d806a34a 100644 --- a/hotspot/src/share/vm/opto/c2_globals.hpp +++ b/hotspot/src/share/vm/opto/c2_globals.hpp @@ -81,6 +81,13 @@ product(intx, MaxLoopPad, (OptoLoopAlignment-1), \ "Align a loop if padding size in bytes is less or equal to this value") \ \ + product(intx, MaxVectorSize, 32, \ + "Max vector size in bytes, " \ + "actual size could be less depending on elements type") \ + \ + product(bool, AlignVector, false, \ + "Perform vector store/load alignment in loop") \ + \ product(intx, NumberOfLoopInstrToAlign, 4, \ "Number of first instructions in a loop to align") \ \ diff --git a/hotspot/src/share/vm/opto/chaitin.cpp b/hotspot/src/share/vm/opto/chaitin.cpp index a74114add85..0ed9b962724 100644 --- a/hotspot/src/share/vm/opto/chaitin.cpp +++ b/hotspot/src/share/vm/opto/chaitin.cpp @@ -75,6 +75,7 @@ void LRG::dump( ) const { // Flags if( _is_oop ) tty->print("Oop "); if( _is_float ) tty->print("Float "); + if( _is_vector ) tty->print("Vector "); if( _was_spilled1 ) tty->print("Spilled "); if( _was_spilled2 ) tty->print("Spilled2 "); if( _direct_conflict ) tty->print("Direct_conflict "); @@ -479,16 +480,18 @@ void PhaseChaitin::Register_Allocate() { // Move important info out of the live_arena to longer lasting storage. alloc_node_regs(_names.Size()); - for( uint i=0; i < _names.Size(); i++ ) { - if( _names[i] ) { // Live range associated with Node? - LRG &lrg = lrgs( _names[i] ); - if( lrg.num_regs() == 1 ) { - _node_regs[i].set1( lrg.reg() ); + for (uint i=0; i < _names.Size(); i++) { + if (_names[i]) { // Live range associated with Node? + LRG &lrg = lrgs(_names[i]); + if (!lrg.alive()) { + _node_regs[i].set_bad(); + } else if (lrg.num_regs() == 1) { + _node_regs[i].set1(lrg.reg()); } else { // Must be a register-pair - if( !lrg._fat_proj ) { // Must be aligned adjacent register pair + if (!lrg._fat_proj) { // Must be aligned adjacent register pair // Live ranges record the highest register in their mask. // We want the low register for the AD file writer's convenience. - _node_regs[i].set2( OptoReg::add(lrg.reg(),-1) ); + _node_regs[i].set2( OptoReg::add(lrg.reg(),(1-lrg.num_regs())) ); } else { // Misaligned; extract 2 bits OptoReg::Name hi = lrg.reg(); // Get hi register lrg.Remove(hi); // Yank from mask @@ -568,7 +571,7 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { // Check for float-vs-int live range (used in register-pressure // calculations) const Type *n_type = n->bottom_type(); - if( n_type->is_floatingpoint() ) + if (n_type->is_floatingpoint()) lrg._is_float = 1; // Check for twice prior spilling. Once prior spilling might have @@ -599,18 +602,28 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { // Limit result register mask to acceptable registers const RegMask &rm = n->out_RegMask(); lrg.AND( rm ); - // Check for bound register masks - const RegMask &lrgmask = lrg.mask(); - if( lrgmask.is_bound1() || lrgmask.is_bound2() ) - lrg._is_bound = 1; - - // Check for maximum frequency value - if( lrg._maxfreq < b->_freq ) - lrg._maxfreq = b->_freq; int ireg = n->ideal_reg(); assert( !n->bottom_type()->isa_oop_ptr() || ireg == Op_RegP, "oops must be in Op_RegP's" ); + + // Check for vector live range (only if vector register is used). + // On SPARC vector uses RegD which could be misaligned so it is not + // processes as vector in RA. + if (RegMask::is_vector(ireg)) + lrg._is_vector = 1; + assert(n_type->isa_vect() == NULL || lrg._is_vector || ireg == Op_RegD, + "vector must be in vector registers"); + + // Check for bound register masks + const RegMask &lrgmask = lrg.mask(); + if (lrgmask.is_bound(ireg)) + lrg._is_bound = 1; + + // Check for maximum frequency value + if (lrg._maxfreq < b->_freq) + lrg._maxfreq = b->_freq; + // Check for oop-iness, or long/double // Check for multi-kill projection switch( ireg ) { @@ -689,7 +702,7 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { // AND changes how we count interferences. A mis-aligned // double can interfere with TWO aligned pairs, or effectively // FOUR registers! - if( rm.is_misaligned_Pair() ) { + if (rm.is_misaligned_pair()) { lrg._fat_proj = 1; lrg._is_bound = 1; } @@ -706,6 +719,33 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { lrg.set_reg_pressure(1); #endif break; + case Op_VecS: + assert(Matcher::vector_size_supported(T_BYTE,4), "sanity"); + assert(RegMask::num_registers(Op_VecS) == RegMask::SlotsPerVecS, "sanity"); + lrg.set_num_regs(RegMask::SlotsPerVecS); + lrg.set_reg_pressure(1); + break; + case Op_VecD: + assert(Matcher::vector_size_supported(T_FLOAT,RegMask::SlotsPerVecD), "sanity"); + assert(RegMask::num_registers(Op_VecD) == RegMask::SlotsPerVecD, "sanity"); + assert(lrgmask.is_aligned_sets(RegMask::SlotsPerVecD), "vector should be aligned"); + lrg.set_num_regs(RegMask::SlotsPerVecD); + lrg.set_reg_pressure(1); + break; + case Op_VecX: + assert(Matcher::vector_size_supported(T_FLOAT,RegMask::SlotsPerVecX), "sanity"); + assert(RegMask::num_registers(Op_VecX) == RegMask::SlotsPerVecX, "sanity"); + assert(lrgmask.is_aligned_sets(RegMask::SlotsPerVecX), "vector should be aligned"); + lrg.set_num_regs(RegMask::SlotsPerVecX); + lrg.set_reg_pressure(1); + break; + case Op_VecY: + assert(Matcher::vector_size_supported(T_FLOAT,RegMask::SlotsPerVecY), "sanity"); + assert(RegMask::num_registers(Op_VecY) == RegMask::SlotsPerVecY, "sanity"); + assert(lrgmask.is_aligned_sets(RegMask::SlotsPerVecY), "vector should be aligned"); + lrg.set_num_regs(RegMask::SlotsPerVecY); + lrg.set_reg_pressure(1); + break; default: ShouldNotReachHere(); } @@ -763,24 +803,38 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { } else { lrg.AND( rm ); } + // Check for bound register masks const RegMask &lrgmask = lrg.mask(); - if( lrgmask.is_bound1() || lrgmask.is_bound2() ) + int kreg = n->in(k)->ideal_reg(); + bool is_vect = RegMask::is_vector(kreg); + assert(n->in(k)->bottom_type()->isa_vect() == NULL || + is_vect || kreg == Op_RegD, + "vector must be in vector registers"); + if (lrgmask.is_bound(kreg)) lrg._is_bound = 1; + // If this use of a double forces a mis-aligned double, // flag as '_fat_proj' - really flag as allowing misalignment // AND changes how we count interferences. A mis-aligned // double can interfere with TWO aligned pairs, or effectively // FOUR registers! - if( lrg.num_regs() == 2 && !lrg._fat_proj && rm.is_misaligned_Pair() ) { +#ifdef ASSERT + if (is_vect) { + assert(lrgmask.is_aligned_sets(lrg.num_regs()), "vector should be aligned"); + assert(!lrg._fat_proj, "sanity"); + assert(RegMask::num_registers(kreg) == lrg.num_regs(), "sanity"); + } +#endif + if (!is_vect && lrg.num_regs() == 2 && !lrg._fat_proj && rm.is_misaligned_pair()) { lrg._fat_proj = 1; lrg._is_bound = 1; } // if the LRG is an unaligned pair, we will have to spill // so clear the LRG's register mask if it is not already spilled - if ( !n->is_SpillCopy() && - (lrg._def == NULL || lrg.is_multidef() || !lrg._def->is_SpillCopy()) && - lrgmask.is_misaligned_Pair()) { + if (!is_vect && !n->is_SpillCopy() && + (lrg._def == NULL || lrg.is_multidef() || !lrg._def->is_SpillCopy()) && + lrgmask.is_misaligned_pair()) { lrg.Clear(); } @@ -793,12 +847,14 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { } // end for all blocks // Final per-liverange setup - for( uint i2=0; i2<_maxlrg; i2++ ) { + for (uint i2=0; i2<_maxlrg; i2++) { LRG &lrg = lrgs(i2); - if( lrg.num_regs() == 2 && !lrg._fat_proj ) - lrg.ClearToPairs(); + assert(!lrg._is_vector || !lrg._fat_proj, "sanity"); + if (lrg.num_regs() > 1 && !lrg._fat_proj) { + lrg.clear_to_sets(); + } lrg.compute_set_mask_size(); - if( lrg.not_free() ) { // Handle case where we lose from the start + if (lrg.not_free()) { // Handle case where we lose from the start lrg.set_reg(OptoReg::Name(LRG::SPILL_REG)); lrg._direct_conflict = 1; } @@ -1104,22 +1160,17 @@ OptoReg::Name PhaseChaitin::bias_color( LRG &lrg, int chunk ) { // Choose a color which is legal for him RegMask tempmask = lrg.mask(); tempmask.AND(lrgs(copy_lrg).mask()); - OptoReg::Name reg; - if( lrg.num_regs() == 1 ) { - reg = tempmask.find_first_elem(); - } else { - tempmask.ClearToPairs(); - reg = tempmask.find_first_pair(); - } - if( OptoReg::is_valid(reg) ) + tempmask.clear_to_sets(lrg.num_regs()); + OptoReg::Name reg = tempmask.find_first_set(lrg.num_regs()); + if (OptoReg::is_valid(reg)) return reg; } } // If no bias info exists, just go with the register selection ordering - if( lrg.num_regs() == 2 ) { - // Find an aligned pair - return OptoReg::add(lrg.mask().find_first_pair(),chunk); + if (lrg._is_vector || lrg.num_regs() == 2) { + // Find an aligned set + return OptoReg::add(lrg.mask().find_first_set(lrg.num_regs()),chunk); } // CNC - Fun hack. Alternate 1st and 2nd selection. Enables post-allocate @@ -1149,6 +1200,7 @@ OptoReg::Name PhaseChaitin::choose_color( LRG &lrg, int chunk ) { // Use a heuristic to "bias" the color choice return bias_color(lrg, chunk); + assert(!lrg._is_vector, "should be not vector here" ); assert( lrg.num_regs() >= 2, "dead live ranges do not color" ); // Fat-proj case or misaligned double argument. @@ -1238,14 +1290,16 @@ uint PhaseChaitin::Select( ) { } //assert(is_allstack == lrg->mask().is_AllStack(), "nbrs must not change AllStackedness"); // Aligned pairs need aligned masks - if( lrg->num_regs() == 2 && !lrg->_fat_proj ) - lrg->ClearToPairs(); + assert(!lrg->_is_vector || !lrg->_fat_proj, "sanity"); + if (lrg->num_regs() > 1 && !lrg->_fat_proj) { + lrg->clear_to_sets(); + } // Check if a color is available and if so pick the color OptoReg::Name reg = choose_color( *lrg, chunk ); #ifdef SPARC debug_only(lrg->compute_set_mask_size()); - assert(lrg->num_regs() != 2 || lrg->is_bound() || is_even(reg-1), "allocate all doubles aligned"); + assert(lrg->num_regs() < 2 || lrg->is_bound() || is_even(reg-1), "allocate all doubles aligned"); #endif //--------------- @@ -1277,17 +1331,16 @@ uint PhaseChaitin::Select( ) { // If the live range is not bound, then we actually had some choices // to make. In this case, the mask has more bits in it than the colors // chosen. Restrict the mask to just what was picked. - if( lrg->num_regs() == 1 ) { // Size 1 live range + int n_regs = lrg->num_regs(); + assert(!lrg->_is_vector || !lrg->_fat_proj, "sanity"); + if (n_regs == 1 || !lrg->_fat_proj) { + assert(!lrg->_is_vector || n_regs <= RegMask::SlotsPerVecY, "sanity"); lrg->Clear(); // Clear the mask lrg->Insert(reg); // Set regmask to match selected reg - lrg->set_mask_size(1); - } else if( !lrg->_fat_proj ) { - // For pairs, also insert the low bit of the pair - assert( lrg->num_regs() == 2, "unbound fatproj???" ); - lrg->Clear(); // Clear the mask - lrg->Insert(reg); // Set regmask to match selected reg - lrg->Insert(OptoReg::add(reg,-1)); - lrg->set_mask_size(2); + // For vectors and pairs, also insert the low bit of the pair + for (int i = 1; i < n_regs; i++) + lrg->Insert(OptoReg::add(reg,-i)); + lrg->set_mask_size(n_regs); } else { // Else fatproj // mask must be equal to fatproj bits, by definition } @@ -1860,12 +1913,20 @@ char *PhaseChaitin::dump_register( const Node *n, char *buf ) const { sprintf(buf,"L%d",lidx); // No register binding yet } else if( !lidx ) { // Special, not allocated value strcpy(buf,"Special"); - } else if( (lrgs(lidx).num_regs() == 1) - ? !lrgs(lidx).mask().is_bound1() - : !lrgs(lidx).mask().is_bound2() ) { - sprintf(buf,"L%d",lidx); // No register binding yet - } else { // Hah! We have a bound machine register - print_reg( lrgs(lidx).reg(), this, buf ); + } else { + if (lrgs(lidx)._is_vector) { + if (lrgs(lidx).mask().is_bound_set(lrgs(lidx).num_regs())) + print_reg( lrgs(lidx).reg(), this, buf ); // a bound machine register + else + sprintf(buf,"L%d",lidx); // No register binding yet + } else if( (lrgs(lidx).num_regs() == 1) + ? lrgs(lidx).mask().is_bound1() + : lrgs(lidx).mask().is_bound_pair() ) { + // Hah! We have a bound machine register + print_reg( lrgs(lidx).reg(), this, buf ); + } else { + sprintf(buf,"L%d",lidx); // No register binding yet + } } } return buf+strlen(buf); diff --git a/hotspot/src/share/vm/opto/chaitin.hpp b/hotspot/src/share/vm/opto/chaitin.hpp index 1e6be63c452..c10f18d742e 100644 --- a/hotspot/src/share/vm/opto/chaitin.hpp +++ b/hotspot/src/share/vm/opto/chaitin.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -99,8 +99,15 @@ public: void set_mask_size( int size ) { assert((size == 65535) || (size == (int)_mask.Size()), ""); _mask_size = size; - debug_only(_msize_valid=1;) - debug_only( if( _num_regs == 2 && !_fat_proj ) _mask.VerifyPairs(); ) +#ifdef ASSERT + _msize_valid=1; + if (_is_vector) { + assert(!_fat_proj, "sanity"); + _mask.verify_sets(_num_regs); + } else if (_num_regs == 2 && !_fat_proj) { + _mask.verify_pairs(); + } +#endif } void compute_set_mask_size() { set_mask_size(compute_mask_size()); } int mask_size() const { assert( _msize_valid, "mask size not valid" ); @@ -116,7 +123,8 @@ public: void Set_All() { _mask.Set_All(); debug_only(_msize_valid=1); _mask_size = RegMask::CHUNK_SIZE; } void Insert( OptoReg::Name reg ) { _mask.Insert(reg); debug_only(_msize_valid=0;) } void Remove( OptoReg::Name reg ) { _mask.Remove(reg); debug_only(_msize_valid=0;) } - void ClearToPairs() { _mask.ClearToPairs(); debug_only(_msize_valid=0;) } + void clear_to_pairs() { _mask.clear_to_pairs(); debug_only(_msize_valid=0;) } + void clear_to_sets() { _mask.clear_to_sets(_num_regs); debug_only(_msize_valid=0;) } // Number of registers this live range uses when it colors private: @@ -150,6 +158,7 @@ public: uint _is_oop:1, // Live-range holds an oop _is_float:1, // True if in float registers + _is_vector:1, // True if in vector registers _was_spilled1:1, // True if prior spilling on def _was_spilled2:1, // True if twice prior spilling on def _is_bound:1, // live range starts life with no diff --git a/hotspot/src/share/vm/opto/classes.hpp b/hotspot/src/share/vm/opto/classes.hpp index 03b5107c3e4..bdf18b51f32 100644 --- a/hotspot/src/share/vm/opto/classes.hpp +++ b/hotspot/src/share/vm/opto/classes.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -245,14 +245,12 @@ macro(XorI) macro(XorL) macro(Vector) macro(AddVB) -macro(AddVC) macro(AddVS) macro(AddVI) macro(AddVL) macro(AddVF) macro(AddVD) macro(SubVB) -macro(SubVC) macro(SubVS) macro(SubVI) macro(SubVL) @@ -263,74 +261,36 @@ macro(MulVD) macro(DivVF) macro(DivVD) macro(LShiftVB) -macro(LShiftVC) macro(LShiftVS) macro(LShiftVI) -macro(URShiftVB) -macro(URShiftVC) -macro(URShiftVS) -macro(URShiftVI) +macro(RShiftVB) +macro(RShiftVS) +macro(RShiftVI) macro(AndV) macro(OrV) macro(XorV) -macro(VectorLoad) -macro(Load16B) -macro(Load8B) -macro(Load4B) -macro(Load8C) -macro(Load4C) -macro(Load2C) -macro(Load8S) -macro(Load4S) -macro(Load2S) -macro(Load4I) -macro(Load2I) -macro(Load2L) -macro(Load4F) -macro(Load2F) -macro(Load2D) -macro(VectorStore) -macro(Store16B) -macro(Store8B) -macro(Store4B) -macro(Store8C) -macro(Store4C) -macro(Store2C) -macro(Store4I) -macro(Store2I) -macro(Store2L) -macro(Store4F) -macro(Store2F) -macro(Store2D) +macro(LoadVector) +macro(StoreVector) macro(Pack) macro(PackB) macro(PackS) -macro(PackC) macro(PackI) macro(PackL) macro(PackF) macro(PackD) -macro(Pack2x1B) -macro(Pack2x2B) -macro(Replicate16B) -macro(Replicate8B) -macro(Replicate4B) -macro(Replicate8S) -macro(Replicate4S) -macro(Replicate2S) -macro(Replicate8C) -macro(Replicate4C) -macro(Replicate2C) -macro(Replicate4I) -macro(Replicate2I) -macro(Replicate2L) -macro(Replicate4F) -macro(Replicate2F) -macro(Replicate2D) +macro(Pack2L) +macro(Pack2D) +macro(ReplicateB) +macro(ReplicateS) +macro(ReplicateI) +macro(ReplicateL) +macro(ReplicateF) +macro(ReplicateD) macro(Extract) macro(ExtractB) -macro(ExtractS) +macro(ExtractUB) macro(ExtractC) +macro(ExtractS) macro(ExtractI) macro(ExtractL) macro(ExtractF) diff --git a/hotspot/src/share/vm/opto/compile.cpp b/hotspot/src/share/vm/opto/compile.cpp index 5c4b5145ab7..5331d033fe2 100644 --- a/hotspot/src/share/vm/opto/compile.cpp +++ b/hotspot/src/share/vm/opto/compile.cpp @@ -2591,38 +2591,12 @@ static void final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc ) { } break; - case Op_Load16B: - case Op_Load8B: - case Op_Load4B: - case Op_Load8S: - case Op_Load4S: - case Op_Load2S: - case Op_Load8C: - case Op_Load4C: - case Op_Load2C: - case Op_Load4I: - case Op_Load2I: - case Op_Load2L: - case Op_Load4F: - case Op_Load2F: - case Op_Load2D: - case Op_Store16B: - case Op_Store8B: - case Op_Store4B: - case Op_Store8C: - case Op_Store4C: - case Op_Store2C: - case Op_Store4I: - case Op_Store2I: - case Op_Store2L: - case Op_Store4F: - case Op_Store2F: - case Op_Store2D: + case Op_LoadVector: + case Op_StoreVector: break; case Op_PackB: case Op_PackS: - case Op_PackC: case Op_PackI: case Op_PackF: case Op_PackL: diff --git a/hotspot/src/share/vm/opto/ifg.cpp b/hotspot/src/share/vm/opto/ifg.cpp index 3a225456503..4827a17d8df 100644 --- a/hotspot/src/share/vm/opto/ifg.cpp +++ b/hotspot/src/share/vm/opto/ifg.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, 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 @@ -416,6 +416,7 @@ uint PhaseChaitin::count_int_pressure( IndexSet *liveout ) { if( lrgs(lidx).mask().is_UP() && lrgs(lidx).mask_size() && !lrgs(lidx)._is_float && + !lrgs(lidx)._is_vector && lrgs(lidx).mask().overlap(*Matcher::idealreg2regmask[Op_RegI]) ) cnt += lrgs(lidx).reg_pressure(); } @@ -430,7 +431,7 @@ uint PhaseChaitin::count_float_pressure( IndexSet *liveout ) { while ((lidx = elements.next()) != 0) { if( lrgs(lidx).mask().is_UP() && lrgs(lidx).mask_size() && - lrgs(lidx)._is_float ) + (lrgs(lidx)._is_float || lrgs(lidx)._is_vector)) cnt += lrgs(lidx).reg_pressure(); } return cnt; @@ -439,8 +440,8 @@ uint PhaseChaitin::count_float_pressure( IndexSet *liveout ) { //------------------------------lower_pressure--------------------------------- // Adjust register pressure down by 1. Capture last hi-to-low transition, static void lower_pressure( LRG *lrg, uint where, Block *b, uint *pressure, uint *hrp_index ) { - if( lrg->mask().is_UP() && lrg->mask_size() ) { - if( lrg->_is_float ) { + if (lrg->mask().is_UP() && lrg->mask_size()) { + if (lrg->_is_float || lrg->_is_vector) { pressure[1] -= lrg->reg_pressure(); if( pressure[1] == (uint)FLOATPRESSURE ) { hrp_index[1] = where; @@ -522,8 +523,8 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { LRG &lrg = lrgs(lidx); lrg._area += cost; // Compute initial register pressure - if( lrg.mask().is_UP() && lrg.mask_size() ) { - if( lrg._is_float ) { // Count float pressure + if (lrg.mask().is_UP() && lrg.mask_size()) { + if (lrg._is_float || lrg._is_vector) { // Count float pressure pressure[1] += lrg.reg_pressure(); #ifdef EXACT_PRESSURE if( pressure[1] > b->_freg_pressure ) @@ -681,13 +682,10 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { // according to its bindings. const RegMask &rmask = lrgs(r).mask(); if( lrgs(r).is_bound() && !(n->rematerialize()) && rmask.is_NotEmpty() ) { - // Smear odd bits; leave only aligned pairs of bits. - RegMask r2mask = rmask; - r2mask.SmearToPairs(); // Check for common case int r_size = lrgs(r).num_regs(); OptoReg::Name r_reg = (r_size == 1) ? rmask.find_first_elem() : OptoReg::Physical; - + // Smear odd bits IndexSetIterator elements(&liveout); uint l; while ((l = elements.next()) != 0) { @@ -701,10 +699,15 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { // Remove the bits from LRG 'r' from LRG 'l' so 'l' no // longer interferes with 'r'. If 'l' requires aligned // adjacent pairs, subtract out bit pairs. - if( lrg.num_regs() == 2 && !lrg._fat_proj ) { + assert(!lrg._is_vector || !lrg._fat_proj, "sanity"); + if (lrg.num_regs() > 1 && !lrg._fat_proj) { + RegMask r2mask = rmask; + // Leave only aligned set of bits. + r2mask.smear_to_sets(lrg.num_regs()); + // It includes vector case. lrg.SUBTRACT( r2mask ); lrg.compute_set_mask_size(); - } else if( r_size != 1 ) { + } else if( r_size != 1 ) { // fat proj lrg.SUBTRACT( rmask ); lrg.compute_set_mask_size(); } else { // Common case: size 1 bound removal @@ -763,8 +766,8 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { // Newly live things assumed live from here to top of block lrg._area += cost; // Adjust register pressure - if( lrg.mask().is_UP() && lrg.mask_size() ) { - if( lrg._is_float ) { + if (lrg.mask().is_UP() && lrg.mask_size()) { + if (lrg._is_float || lrg._is_vector) { pressure[1] += lrg.reg_pressure(); #ifdef EXACT_PRESSURE if( pressure[1] > b->_freg_pressure ) diff --git a/hotspot/src/share/vm/opto/lcm.cpp b/hotspot/src/share/vm/opto/lcm.cpp index 1ad9f0b1f0c..2f272eb55c7 100644 --- a/hotspot/src/share/vm/opto/lcm.cpp +++ b/hotspot/src/share/vm/opto/lcm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, 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 @@ -139,6 +139,7 @@ void Block::implicit_null_check(PhaseCFG *cfg, Node *proj, Node *val, int allowe int iop = mach->ideal_Opcode(); switch( iop ) { case Op_LoadB: + case Op_LoadUB: case Op_LoadUS: case Op_LoadD: case Op_LoadF: @@ -445,6 +446,11 @@ Node *Block::select(PhaseCFG *cfg, Node_List &worklist, GrowableArray &read if( e->is_MachNullCheck() && e->in(1) == n ) continue; + // Schedule IV increment last. + if (e->is_Mach() && e->as_Mach()->ideal_Opcode() == Op_CountedLoopEnd && + e->in(1)->in(1) == n && n->is_iteratively_computed()) + continue; + uint n_choice = 2; // See if this instruction is consumed by a branch. If so, then (as the diff --git a/hotspot/src/share/vm/opto/loopnode.cpp b/hotspot/src/share/vm/opto/loopnode.cpp index afd96045aa7..43def731478 100644 --- a/hotspot/src/share/vm/opto/loopnode.cpp +++ b/hotspot/src/share/vm/opto/loopnode.cpp @@ -2751,7 +2751,8 @@ int PhaseIdealLoop::build_loop_tree_impl( Node *n, int pre_order ) { // Do not count uncommon calls if( !n->is_CallStaticJava() || !n->as_CallStaticJava()->_name ) { Node *iff = n->in(0)->in(0); - if( !iff->is_If() || + // No any calls for vectorized loops. + if( UseSuperWord || !iff->is_If() || (n->in(0)->Opcode() == Op_IfFalse && (1.0 - iff->as_If()->_prob) >= 0.01) || (iff->as_If()->_prob >= 0.01) ) @@ -3216,7 +3217,8 @@ void PhaseIdealLoop::build_loop_late_post( Node *n ) { case Op_ModF: case Op_ModD: case Op_LoadB: // Same with Loads; they can sink - case Op_LoadUS: // during loop optimizations. + case Op_LoadUB: // during loop optimizations. + case Op_LoadUS: case Op_LoadD: case Op_LoadF: case Op_LoadI: diff --git a/hotspot/src/share/vm/opto/machnode.cpp b/hotspot/src/share/vm/opto/machnode.cpp index 7bc5877854c..88bb23b370f 100644 --- a/hotspot/src/share/vm/opto/machnode.cpp +++ b/hotspot/src/share/vm/opto/machnode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -439,9 +439,9 @@ bool MachNode::rematerialize() const { // Don't remateralize somebody with bound inputs - it stretches a // fixed register lifetime. uint idx = oper_input_base(); - if( req() > idx ) { + if (req() > idx) { const RegMask &rm = in_RegMask(idx); - if( rm.is_bound1() || rm.is_bound2() ) + if (rm.is_bound(ideal_reg())) return false; } diff --git a/hotspot/src/share/vm/opto/machnode.hpp b/hotspot/src/share/vm/opto/machnode.hpp index 566e031d1a1..4db1154e8df 100644 --- a/hotspot/src/share/vm/opto/machnode.hpp +++ b/hotspot/src/share/vm/opto/machnode.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -319,6 +319,7 @@ public: class MachTypeNode : public MachNode { virtual uint size_of() const { return sizeof(*this); } // Size is bigger public: + MachTypeNode( ) {} const Type *_bottom_type; virtual const class Type *bottom_type() const { return _bottom_type; } @@ -370,12 +371,12 @@ public: //------------------------------MachConstantNode------------------------------- // Machine node that holds a constant which is stored in the constant table. -class MachConstantNode : public MachNode { +class MachConstantNode : public MachTypeNode { protected: Compile::Constant _constant; // This node's constant. public: - MachConstantNode() : MachNode() { + MachConstantNode() : MachTypeNode() { init_class_id(Class_MachConstant); } diff --git a/hotspot/src/share/vm/opto/matcher.cpp b/hotspot/src/share/vm/opto/matcher.cpp index 397385670d2..f6bb30769cd 100644 --- a/hotspot/src/share/vm/opto/matcher.cpp +++ b/hotspot/src/share/vm/opto/matcher.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -35,6 +35,7 @@ #include "opto/rootnode.hpp" #include "opto/runtime.hpp" #include "opto/type.hpp" +#include "opto/vectornode.hpp" #include "runtime/atomic.hpp" #include "runtime/os.hpp" #ifdef TARGET_ARCH_MODEL_x86_32 @@ -58,18 +59,6 @@ OptoReg::Name OptoReg::c_frame_pointer; - - -const int Matcher::base2reg[Type::lastype] = { - Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, - Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ - Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ - 0, 0/*abio*/, - Op_RegP /* Return address */, 0, /* the memories */ - Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, - 0 /*bottom*/ -}; - const RegMask *Matcher::idealreg2regmask[_last_machine_leaf]; RegMask Matcher::mreg2regmask[_last_Mach_Reg]; RegMask Matcher::STACK_ONLY_mask; @@ -107,6 +96,10 @@ Matcher::Matcher( Node_List &proj_list ) : idealreg2spillmask [Op_RegF] = NULL; idealreg2spillmask [Op_RegD] = NULL; idealreg2spillmask [Op_RegP] = NULL; + idealreg2spillmask [Op_VecS] = NULL; + idealreg2spillmask [Op_VecD] = NULL; + idealreg2spillmask [Op_VecX] = NULL; + idealreg2spillmask [Op_VecY] = NULL; idealreg2debugmask [Op_RegI] = NULL; idealreg2debugmask [Op_RegN] = NULL; @@ -114,6 +107,10 @@ Matcher::Matcher( Node_List &proj_list ) : idealreg2debugmask [Op_RegF] = NULL; idealreg2debugmask [Op_RegD] = NULL; idealreg2debugmask [Op_RegP] = NULL; + idealreg2debugmask [Op_VecS] = NULL; + idealreg2debugmask [Op_VecD] = NULL; + idealreg2debugmask [Op_VecX] = NULL; + idealreg2debugmask [Op_VecY] = NULL; idealreg2mhdebugmask[Op_RegI] = NULL; idealreg2mhdebugmask[Op_RegN] = NULL; @@ -121,6 +118,10 @@ Matcher::Matcher( Node_List &proj_list ) : idealreg2mhdebugmask[Op_RegF] = NULL; idealreg2mhdebugmask[Op_RegD] = NULL; idealreg2mhdebugmask[Op_RegP] = NULL; + idealreg2mhdebugmask[Op_VecS] = NULL; + idealreg2mhdebugmask[Op_VecD] = NULL; + idealreg2mhdebugmask[Op_VecX] = NULL; + idealreg2mhdebugmask[Op_VecY] = NULL; debug_only(_mem_node = NULL;) // Ideal memory node consumed by mach node } @@ -134,7 +135,7 @@ OptoReg::Name Matcher::warp_incoming_stk_arg( VMReg reg ) { warped = OptoReg::add(warped, C->out_preserve_stack_slots()); if( warped >= _in_arg_limit ) _in_arg_limit = OptoReg::add(warped, 1); // Bump max stack slot seen - if (!RegMask::can_represent(warped)) { + if (!RegMask::can_represent_arg(warped)) { // the compiler cannot represent this method's calling sequence C->record_method_not_compilable_all_tiers("unsupported incoming calling sequence"); return OptoReg::Bad; @@ -302,7 +303,7 @@ void Matcher::match( ) { _out_arg_limit = OptoReg::add(_new_SP, C->out_preserve_stack_slots()); assert( is_even(_out_arg_limit), "out_preserve must be even" ); - if (!RegMask::can_represent(OptoReg::add(_out_arg_limit,-1))) { + if (!RegMask::can_represent_arg(OptoReg::add(_out_arg_limit,-1))) { // the compiler cannot represent this method's calling sequence C->record_method_not_compilable("must be able to represent all call arguments in reg mask"); } @@ -428,7 +429,7 @@ static RegMask *init_input_masks( uint size, RegMask &ret_adr, RegMask &fp ) { void Matcher::init_first_stack_mask() { // Allocate storage for spill masks as masks for the appropriate load type. - RegMask *rms = (RegMask*)C->comp_arena()->Amalloc_D(sizeof(RegMask) * 3*6); + RegMask *rms = (RegMask*)C->comp_arena()->Amalloc_D(sizeof(RegMask) * (3*6+4)); idealreg2spillmask [Op_RegN] = &rms[0]; idealreg2spillmask [Op_RegI] = &rms[1]; @@ -451,6 +452,11 @@ void Matcher::init_first_stack_mask() { idealreg2mhdebugmask[Op_RegD] = &rms[16]; idealreg2mhdebugmask[Op_RegP] = &rms[17]; + idealreg2spillmask [Op_VecS] = &rms[18]; + idealreg2spillmask [Op_VecD] = &rms[19]; + idealreg2spillmask [Op_VecX] = &rms[20]; + idealreg2spillmask [Op_VecY] = &rms[21]; + OptoReg::Name i; // At first, start with the empty mask @@ -462,7 +468,7 @@ void Matcher::init_first_stack_mask() { C->FIRST_STACK_mask().Insert(i); // Add in all bits past the outgoing argument area - guarantee(RegMask::can_represent(OptoReg::add(_out_arg_limit,-1)), + guarantee(RegMask::can_represent_arg(OptoReg::add(_out_arg_limit,-1)), "must be able to represent all call arguments in reg mask"); init = _out_arg_limit; for (i = init; RegMask::can_represent(i); i = OptoReg::add(i,1)) @@ -472,21 +478,48 @@ void Matcher::init_first_stack_mask() { C->FIRST_STACK_mask().set_AllStack(); // Make spill masks. Registers for their class, plus FIRST_STACK_mask. + RegMask aligned_stack_mask = C->FIRST_STACK_mask(); + // Keep spill masks aligned. + aligned_stack_mask.clear_to_pairs(); + assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); + + *idealreg2spillmask[Op_RegP] = *idealreg2regmask[Op_RegP]; #ifdef _LP64 *idealreg2spillmask[Op_RegN] = *idealreg2regmask[Op_RegN]; idealreg2spillmask[Op_RegN]->OR(C->FIRST_STACK_mask()); + idealreg2spillmask[Op_RegP]->OR(aligned_stack_mask); +#else + idealreg2spillmask[Op_RegP]->OR(C->FIRST_STACK_mask()); #endif *idealreg2spillmask[Op_RegI] = *idealreg2regmask[Op_RegI]; idealreg2spillmask[Op_RegI]->OR(C->FIRST_STACK_mask()); *idealreg2spillmask[Op_RegL] = *idealreg2regmask[Op_RegL]; - idealreg2spillmask[Op_RegL]->OR(C->FIRST_STACK_mask()); + idealreg2spillmask[Op_RegL]->OR(aligned_stack_mask); *idealreg2spillmask[Op_RegF] = *idealreg2regmask[Op_RegF]; idealreg2spillmask[Op_RegF]->OR(C->FIRST_STACK_mask()); *idealreg2spillmask[Op_RegD] = *idealreg2regmask[Op_RegD]; - idealreg2spillmask[Op_RegD]->OR(C->FIRST_STACK_mask()); - *idealreg2spillmask[Op_RegP] = *idealreg2regmask[Op_RegP]; - idealreg2spillmask[Op_RegP]->OR(C->FIRST_STACK_mask()); + idealreg2spillmask[Op_RegD]->OR(aligned_stack_mask); + if (Matcher::vector_size_supported(T_BYTE,4)) { + *idealreg2spillmask[Op_VecS] = *idealreg2regmask[Op_VecS]; + idealreg2spillmask[Op_VecS]->OR(C->FIRST_STACK_mask()); + } + if (Matcher::vector_size_supported(T_FLOAT,2)) { + *idealreg2spillmask[Op_VecD] = *idealreg2regmask[Op_VecD]; + idealreg2spillmask[Op_VecD]->OR(aligned_stack_mask); + } + if (Matcher::vector_size_supported(T_FLOAT,4)) { + aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecX); + assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); + *idealreg2spillmask[Op_VecX] = *idealreg2regmask[Op_VecX]; + idealreg2spillmask[Op_VecX]->OR(aligned_stack_mask); + } + if (Matcher::vector_size_supported(T_FLOAT,8)) { + aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecY); + assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); + *idealreg2spillmask[Op_VecY] = *idealreg2regmask[Op_VecY]; + idealreg2spillmask[Op_VecY]->OR(aligned_stack_mask); + } if (UseFPUForSpilling) { // This mask logic assumes that the spill operations are // symmetric and that the registers involved are the same size. @@ -807,6 +840,25 @@ void Matcher::init_spill_mask( Node *ret ) { idealreg2regmask[Op_RegF] = &spillF->out_RegMask(); idealreg2regmask[Op_RegD] = &spillD->out_RegMask(); idealreg2regmask[Op_RegP] = &spillP->out_RegMask(); + + // Vector regmasks. + if (Matcher::vector_size_supported(T_BYTE,4)) { + TypeVect::VECTS = TypeVect::make(T_BYTE, 4); + MachNode *spillVectS = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTS)); + idealreg2regmask[Op_VecS] = &spillVectS->out_RegMask(); + } + if (Matcher::vector_size_supported(T_FLOAT,2)) { + MachNode *spillVectD = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTD)); + idealreg2regmask[Op_VecD] = &spillVectD->out_RegMask(); + } + if (Matcher::vector_size_supported(T_FLOAT,4)) { + MachNode *spillVectX = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTX)); + idealreg2regmask[Op_VecX] = &spillVectX->out_RegMask(); + } + if (Matcher::vector_size_supported(T_FLOAT,8)) { + MachNode *spillVectY = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTY)); + idealreg2regmask[Op_VecY] = &spillVectY->out_RegMask(); + } } #ifdef ASSERT @@ -1063,7 +1115,7 @@ OptoReg::Name Matcher::warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out // that is killed by the call. if( warped >= out_arg_limit_per_call ) out_arg_limit_per_call = OptoReg::add(warped,1); - if (!RegMask::can_represent(warped)) { + if (!RegMask::can_represent_arg(warped)) { C->record_method_not_compilable_all_tiers("unsupported calling sequence"); return OptoReg::Bad; } @@ -1251,7 +1303,7 @@ MachNode *Matcher::match_sfpt( SafePointNode *sfpt ) { // this killed area. uint r_cnt = mcall->tf()->range()->cnt(); MachProjNode *proj = new (C, 1) MachProjNode( mcall, r_cnt+10000, RegMask::Empty, MachProjNode::fat_proj ); - if (!RegMask::can_represent(OptoReg::Name(out_arg_limit_per_call-1))) { + if (!RegMask::can_represent_arg(OptoReg::Name(out_arg_limit_per_call-1))) { C->record_method_not_compilable_all_tiers("unsupported outgoing calling sequence"); } else { for (int i = begin_out_arg_area; i < out_arg_limit_per_call; i++) diff --git a/hotspot/src/share/vm/opto/matcher.hpp b/hotspot/src/share/vm/opto/matcher.hpp index e6aae28b317..0597cb54345 100644 --- a/hotspot/src/share/vm/opto/matcher.hpp +++ b/hotspot/src/share/vm/opto/matcher.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -250,10 +250,21 @@ public: static const bool convL2FSupported(void); // Vector width in bytes - static const uint vector_width_in_bytes(void); + static const int vector_width_in_bytes(BasicType bt); + + // Limits on vector size (number of elements). + static const int max_vector_size(const BasicType bt); + static const int min_vector_size(const BasicType bt); + static const bool vector_size_supported(const BasicType bt, int size) { + return (Matcher::max_vector_size(bt) >= size && + Matcher::min_vector_size(bt) <= size); + } // Vector ideal reg - static const uint vector_ideal_reg(void); + static const int vector_ideal_reg(int len); + + // CPU supports misaligned vectors store/load. + static const bool misaligned_vectors_ok(); // Used to determine a "low complexity" 64-bit constant. (Zero is simple.) // The standard of comparison is one (StoreL ConL) vs. two (StoreI ConI). diff --git a/hotspot/src/share/vm/opto/memnode.cpp b/hotspot/src/share/vm/opto/memnode.cpp index e28e09226ad..799c2ba14d0 100644 --- a/hotspot/src/share/vm/opto/memnode.cpp +++ b/hotspot/src/share/vm/opto/memnode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -1543,6 +1543,7 @@ const Type *LoadNode::Value( PhaseTransform *phase ) const { // had an original form like p1:(AddP x x (LShiftL quux 3)), where the // expression (LShiftL quux 3) independently optimized to the constant 8. if ((t->isa_int() == NULL) && (t->isa_long() == NULL) + && (_type->isa_vect() == NULL) && Opcode() != Op_LoadKlass && Opcode() != Op_LoadNKlass) { // t might actually be lower than _type, if _type is a unique // concrete subclass of abstract class t. diff --git a/hotspot/src/share/vm/opto/mulnode.hpp b/hotspot/src/share/vm/opto/mulnode.hpp index 11cc77145a5..c3adc433fda 100644 --- a/hotspot/src/share/vm/opto/mulnode.hpp +++ b/hotspot/src/share/vm/opto/mulnode.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -41,7 +41,9 @@ class PhaseTransform; class MulNode : public Node { virtual uint hash() const; public: - MulNode( Node *in1, Node *in2 ): Node(0,in1,in2) {} + MulNode( Node *in1, Node *in2 ): Node(0,in1,in2) { + init_class_id(Class_Mul); + } // Handle algebraic identities here. If we have an identity, return the Node // we are equivalent to. We look for "add of zero" as an identity. diff --git a/hotspot/src/share/vm/opto/node.cpp b/hotspot/src/share/vm/opto/node.cpp index 4bd752feda5..2cb44ad0e55 100644 --- a/hotspot/src/share/vm/opto/node.cpp +++ b/hotspot/src/share/vm/opto/node.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -1576,6 +1576,9 @@ void Node::dump() const { } else { tty->print("no type"); } + } else if (t->isa_vect() && this->is_MachSpillCopy()) { + // Dump MachSpillcopy vector type. + t->dump(); } if (is_new) { debug_only(dump_orig(debug_orig())); diff --git a/hotspot/src/share/vm/opto/node.hpp b/hotspot/src/share/vm/opto/node.hpp index 5ddae2f0b19..f63a967b6f2 100644 --- a/hotspot/src/share/vm/opto/node.hpp +++ b/hotspot/src/share/vm/opto/node.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -100,6 +100,7 @@ class MemBarNode; class MemBarStoreStoreNode; class MemNode; class MergeMemNode; +class MulNode; class MultiNode; class MultiBranchNode; class NeverBranchNode; @@ -133,8 +134,8 @@ class Type; class TypeNode; class UnlockNode; class VectorNode; -class VectorLoadNode; -class VectorStoreNode; +class LoadVectorNode; +class StoreVectorNode; class VectorSet; typedef void (*NFunc)(Node&,void*); extern "C" { @@ -609,9 +610,9 @@ public: DEFINE_CLASS_ID(Mem, Node, 4) DEFINE_CLASS_ID(Load, Mem, 0) - DEFINE_CLASS_ID(VectorLoad, Load, 0) + DEFINE_CLASS_ID(LoadVector, Load, 0) DEFINE_CLASS_ID(Store, Mem, 1) - DEFINE_CLASS_ID(VectorStore, Store, 0) + DEFINE_CLASS_ID(StoreVector, Store, 0) DEFINE_CLASS_ID(LoadStore, Mem, 2) DEFINE_CLASS_ID(Region, Node, 5) @@ -629,8 +630,9 @@ public: DEFINE_CLASS_ID(AddP, Node, 9) DEFINE_CLASS_ID(BoxLock, Node, 10) DEFINE_CLASS_ID(Add, Node, 11) - DEFINE_CLASS_ID(Vector, Node, 12) - DEFINE_CLASS_ID(ClearArray, Node, 13) + DEFINE_CLASS_ID(Mul, Node, 12) + DEFINE_CLASS_ID(Vector, Node, 13) + DEFINE_CLASS_ID(ClearArray, Node, 14) _max_classes = ClassMask_ClearArray }; @@ -752,6 +754,7 @@ public: DEFINE_CLASS_QUERY(MemBar) DEFINE_CLASS_QUERY(MemBarStoreStore) DEFINE_CLASS_QUERY(MergeMem) + DEFINE_CLASS_QUERY(Mul) DEFINE_CLASS_QUERY(Multi) DEFINE_CLASS_QUERY(MultiBranch) DEFINE_CLASS_QUERY(Parm) @@ -767,8 +770,8 @@ public: DEFINE_CLASS_QUERY(Sub) DEFINE_CLASS_QUERY(Type) DEFINE_CLASS_QUERY(Vector) - DEFINE_CLASS_QUERY(VectorLoad) - DEFINE_CLASS_QUERY(VectorStore) + DEFINE_CLASS_QUERY(LoadVector) + DEFINE_CLASS_QUERY(StoreVector) DEFINE_CLASS_QUERY(Unlock) #undef DEFINE_CLASS_QUERY diff --git a/hotspot/src/share/vm/opto/opcodes.cpp b/hotspot/src/share/vm/opto/opcodes.cpp index 58489db0adb..83310568b50 100644 --- a/hotspot/src/share/vm/opto/opcodes.cpp +++ b/hotspot/src/share/vm/opto/opcodes.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, 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 @@ -38,6 +38,10 @@ const char *NodeClassNames[] = { "RegD", "RegL", "RegFlags", + "VecS", + "VecD", + "VecX", + "VecY", "_last_machine_leaf", #include "classes.hpp" "_last_class_name", diff --git a/hotspot/src/share/vm/opto/opcodes.hpp b/hotspot/src/share/vm/opto/opcodes.hpp index 9eb5b8a7ccc..4baec83feca 100644 --- a/hotspot/src/share/vm/opto/opcodes.hpp +++ b/hotspot/src/share/vm/opto/opcodes.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -36,6 +36,10 @@ enum Opcodes { macro(RegF) // Machine float register macro(RegD) // Machine double register macro(RegL) // Machine long register + macro(VecS) // Machine vectors register + macro(VecD) // Machine vectord register + macro(VecX) // Machine vectorx register + macro(VecY) // Machine vectory register macro(RegFlags) // Machine flags register _last_machine_leaf, // Split between regular opcodes and machine #include "classes.hpp" diff --git a/hotspot/src/share/vm/opto/postaloc.cpp b/hotspot/src/share/vm/opto/postaloc.cpp index 1a7553bc5cd..8e24d353d8d 100644 --- a/hotspot/src/share/vm/opto/postaloc.cpp +++ b/hotspot/src/share/vm/opto/postaloc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, 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 @@ -27,13 +27,15 @@ #include "opto/chaitin.hpp" #include "opto/machnode.hpp" -// see if this register kind does not requires two registers -static bool is_single_register(uint x) { -#ifdef _LP64 - return (x != Op_RegD && x != Op_RegL && x != Op_RegP); -#else - return (x != Op_RegD && x != Op_RegL); -#endif +// See if this register (or pairs, or vector) already contains the value. +static bool register_contains_value(Node* val, OptoReg::Name reg, int n_regs, + Node_List& value) { + for (int i = 0; i < n_regs; i++) { + OptoReg::Name nreg = OptoReg::add(reg,-i); + if (value[nreg] != val) + return false; + } + return true; } //---------------------------may_be_copy_of_callee----------------------------- @@ -167,9 +169,11 @@ int PhaseChaitin::use_prior_register( Node *n, uint idx, Node *def, Block *curre const RegMask &use_mask = n->in_RegMask(idx); bool can_use = ( RegMask::can_represent(def_reg) ? (use_mask.Member(def_reg) != 0) : (use_mask.is_AllStack() != 0)); - // Check for a copy to or from a misaligned pair. - can_use = can_use && !use_mask.is_misaligned_Pair() && !def_lrg.mask().is_misaligned_Pair(); - + if (!RegMask::is_vector(def->ideal_reg())) { + // Check for a copy to or from a misaligned pair. + // It is workaround for a sparc with misaligned pairs. + can_use = can_use && !use_mask.is_misaligned_pair() && !def_lrg.mask().is_misaligned_pair(); + } if (!can_use) return 0; @@ -263,18 +267,16 @@ int PhaseChaitin::elide_copy( Node *n, int k, Block *current_block, Node_List &v val = skip_copies(n->in(k)); } - if( val == x ) return blk_adjust; // No progress? + if (val == x) return blk_adjust; // No progress? - bool single = is_single_register(val->ideal_reg()); + int n_regs = RegMask::num_registers(val->ideal_reg()); uint val_idx = n2lidx(val); OptoReg::Name val_reg = lrgs(val_idx).reg(); // See if it happens to already be in the correct register! // (either Phi's direct register, or the common case of the name // never-clobbered original-def register) - if( value[val_reg] == val && - // Doubles check both halves - ( single || value[val_reg-1] == val ) ) { + if (register_contains_value(val, val_reg, n_regs, value)) { blk_adjust += use_prior_register(n,k,regnd[val_reg],current_block,value,regnd); if( n->in(k) == regnd[val_reg] ) // Success! Quit trying return blk_adjust; @@ -306,7 +308,7 @@ int PhaseChaitin::elide_copy( Node *n, int k, Block *current_block, Node_List &v } Node *vv = value[reg]; - if( !single ) { // Doubles check for aligned-adjacent pair + if (n_regs > 1) { // Doubles check for aligned-adjacent pair if( (reg&1)==0 ) continue; // Wrong half of a pair if( vv != value[reg-1] ) continue; // Not a complete pair } @@ -526,8 +528,9 @@ void PhaseChaitin::post_allocate_copy_removal() { if( pidx ) { value.map(preg,phi); regnd.map(preg,phi); - OptoReg::Name preg_lo = OptoReg::add(preg,-1); - if( !is_single_register(phi->ideal_reg()) ) { + int n_regs = RegMask::num_registers(phi->ideal_reg()); + for (int l = 1; l < n_regs; l++) { + OptoReg::Name preg_lo = OptoReg::add(preg,-l); value.map(preg_lo,phi); regnd.map(preg_lo,phi); } @@ -568,13 +571,17 @@ void PhaseChaitin::post_allocate_copy_removal() { value.map(ureg,valdef); // record improved reaching-def info regnd.map(ureg, def); // Record other half of doubles - OptoReg::Name ureg_lo = OptoReg::add(ureg,-1); - if( !is_single_register(def->ideal_reg()) && - ( !RegMask::can_represent(ureg_lo) || - lrgs(useidx).mask().Member(ureg_lo) ) && // Nearly always adjacent - !value[ureg_lo] ) { - value.map(ureg_lo,valdef); // record improved reaching-def info - regnd.map(ureg_lo, def); + uint def_ideal_reg = def->ideal_reg(); + int n_regs = RegMask::num_registers(def_ideal_reg); + bool is_vec = RegMask::is_vector(def_ideal_reg); + for (int l = 1; l < n_regs; l++) { + OptoReg::Name ureg_lo = OptoReg::add(ureg,-l); + if (!value[ureg_lo] && + (!RegMask::can_represent(ureg_lo) || + lrgs(useidx).mask().Member(ureg_lo))) { // Nearly always adjacent + value.map(ureg_lo,valdef); // record improved reaching-def info + regnd.map(ureg_lo, def); + } } } } @@ -607,7 +614,8 @@ void PhaseChaitin::post_allocate_copy_removal() { } uint n_ideal_reg = n->ideal_reg(); - if( is_single_register(n_ideal_reg) ) { + int n_regs = RegMask::num_registers(n_ideal_reg); + if (n_regs == 1) { // If Node 'n' does not change the value mapped by the register, // then 'n' is a useless copy. Do not update the register->node // mapping so 'n' will go dead. @@ -625,6 +633,25 @@ void PhaseChaitin::post_allocate_copy_removal() { assert( n->is_Copy(), "" ); j -= replace_and_yank_if_dead(n, nreg, b, value, regnd); } + } else if (RegMask::is_vector(n_ideal_reg)) { + // If Node 'n' does not change the value mapped by the register, + // then 'n' is a useless copy. Do not update the register->node + // mapping so 'n' will go dead. + if (!register_contains_value(val, nreg, n_regs, value)) { + // Update the mapping: record new Node defined by the register + regnd.map(nreg,n); + // Update mapping for defined *value*, which is the defined + // Node after skipping all copies. + value.map(nreg,val); + for (int l = 1; l < n_regs; l++) { + OptoReg::Name nreg_lo = OptoReg::add(nreg,-l); + regnd.map(nreg_lo, n ); + value.map(nreg_lo,val); + } + } else if (n->is_Copy()) { + // Note: vector can't be constant and can't be copy of calee. + j -= replace_and_yank_if_dead(n, nreg, b, value, regnd); + } } else { // If the value occupies a register pair, record same info // in both registers. diff --git a/hotspot/src/share/vm/opto/reg_split.cpp b/hotspot/src/share/vm/opto/reg_split.cpp index 63a11fe8f0f..cae363bea7a 100644 --- a/hotspot/src/share/vm/opto/reg_split.cpp +++ b/hotspot/src/share/vm/opto/reg_split.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, 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 @@ -74,12 +74,13 @@ Node *PhaseChaitin::get_spillcopy_wide( Node *def, Node *use, uint uidx ) { const RegMask *w_i_mask = w_mask->overlap( *i_mask ) ? w_mask : i_mask; const RegMask *w_o_mask; + int num_regs = RegMask::num_registers(ireg); + bool is_vect = RegMask::is_vector(ireg); if( w_mask->overlap( *o_mask ) && // Overlap AND - ((ireg != Op_RegL && ireg != Op_RegD // Single use or aligned -#ifdef _LP64 - && ireg != Op_RegP -#endif - ) || o_mask->is_aligned_Pairs()) ) { + ((num_regs == 1) // Single use or aligned + || is_vect // or vector + || !is_vect && o_mask->is_aligned_pairs()) ) { + assert(!is_vect || o_mask->is_aligned_sets(num_regs), "vectors are aligned"); // Don't come here for mis-aligned doubles w_o_mask = w_mask; } else { // wide ideal mask does not overlap with o_mask @@ -400,15 +401,17 @@ bool PhaseChaitin::is_high_pressure( Block *b, LRG *lrg, uint insidx ) { // CNC - Turned off 7/8/99, causes too much spilling // if( lrg->_is_bound ) return false; + // Use float pressure numbers for vectors. + bool is_float_or_vector = lrg->_is_float || lrg->_is_vector; // Not yet reached the high-pressure cutoff point, so low pressure - uint hrp_idx = lrg->_is_float ? b->_fhrp_index : b->_ihrp_index; + uint hrp_idx = is_float_or_vector ? b->_fhrp_index : b->_ihrp_index; if( insidx < hrp_idx ) return false; // Register pressure for the block as a whole depends on reg class - int block_pres = lrg->_is_float ? b->_freg_pressure : b->_reg_pressure; + int block_pres = is_float_or_vector ? b->_freg_pressure : b->_reg_pressure; // Bound live ranges will split at the binding points first; // Intermediate splits should assume the live range's register set // got "freed up" and that num_regs will become INT_PRESSURE. - int bound_pres = lrg->_is_float ? FLOATPRESSURE : INTPRESSURE; + int bound_pres = is_float_or_vector ? FLOATPRESSURE : INTPRESSURE; // Effective register pressure limit. int lrg_pres = (lrg->get_invalid_mask_size() > lrg->num_regs()) ? (lrg->get_invalid_mask_size() >> (lrg->num_regs()-1)) : bound_pres; @@ -794,12 +797,15 @@ uint PhaseChaitin::Split( uint maxlrg ) { if( i < n->req() ) break; insert_point--; } + uint orig_eidx = b->end_idx(); maxlrg = split_DEF( n1, b, insert_point, maxlrg, Reachblock, debug_defs, splits, slidx); // If it wasn't split bail if (!maxlrg) { return 0; } - insidx++; + // Spill of NULL check mem op goes into the following block. + if (b->end_idx() > orig_eidx) + insidx++; } // This is a new DEF, so update UP UPblock[slidx] = false; @@ -960,7 +966,7 @@ uint PhaseChaitin::Split( uint maxlrg ) { // Grab register mask info const RegMask &dmask = def->out_RegMask(); const RegMask &umask = n->in_RegMask(inpidx); - + bool is_vect = RegMask::is_vector(def->ideal_reg()); assert(inpidx < oopoff, "cannot use-split oop map info"); bool dup = UPblock[slidx]; @@ -972,7 +978,7 @@ uint PhaseChaitin::Split( uint maxlrg ) { if( !umask.is_AllStack() && (int)umask.Size() <= lrgs(useidx).num_regs() && (!def->rematerialize() || - umask.is_misaligned_Pair())) { + !is_vect && umask.is_misaligned_pair())) { // These need a Split regardless of overlap or pressure // SPLIT - NO DEF - NO CISC SPILL maxlrg = split_USE(def,b,n,inpidx,maxlrg,dup,false, splits,slidx); @@ -1123,10 +1129,12 @@ uint PhaseChaitin::Split( uint maxlrg ) { // Grab UP info for DEF const RegMask &dmask = n->out_RegMask(); bool defup = dmask.is_UP(); + int ireg = n->ideal_reg(); + bool is_vect = RegMask::is_vector(ireg); // Only split at Def if this is a HRP block or bound (and spilled once) if( !n->rematerialize() && - (((dmask.is_bound1() || dmask.is_bound2() || dmask.is_misaligned_Pair()) && - (deflrg._direct_conflict || deflrg._must_spill)) || + (((dmask.is_bound(ireg) || !is_vect && dmask.is_misaligned_pair()) && + (deflrg._direct_conflict || deflrg._must_spill)) || // Check for LRG being up in a register and we are inside a high // pressure area. Spill it down immediately. (defup && is_high_pressure(b,&deflrg,insidx))) ) { diff --git a/hotspot/src/share/vm/opto/regmask.cpp b/hotspot/src/share/vm/opto/regmask.cpp index ce220f01be9..59413388ca7 100644 --- a/hotspot/src/share/vm/opto/regmask.cpp +++ b/hotspot/src/share/vm/opto/regmask.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -129,11 +129,34 @@ const RegMask RegMask::Empty( 0 ); +//============================================================================= +bool RegMask::is_vector(uint ireg) { + return (ireg == Op_VecS || ireg == Op_VecD || ireg == Op_VecX || ireg == Op_VecY); +} + +int RegMask::num_registers(uint ireg) { + switch(ireg) { + case Op_VecY: + return 8; + case Op_VecX: + return 4; + case Op_VecD: + case Op_RegD: + case Op_RegL: +#ifdef _LP64 + case Op_RegP: +#endif + return 2; + } + // Op_VecS and the rest ideal registers. + return 1; +} + //------------------------------find_first_pair-------------------------------- // Find the lowest-numbered register pair in the mask. Return the // HIGHEST register number in the pair, or BAD if no pairs. OptoReg::Name RegMask::find_first_pair() const { - VerifyPairs(); + verify_pairs(); for( int i = 0; i < RM_SIZE; i++ ) { if( _A[i] ) { // Found some bits int bit = _A[i] & -_A[i]; // Extract low bit @@ -146,30 +169,30 @@ OptoReg::Name RegMask::find_first_pair() const { //------------------------------ClearToPairs----------------------------------- // Clear out partial bits; leave only bit pairs -void RegMask::ClearToPairs() { +void RegMask::clear_to_pairs() { for( int i = 0; i < RM_SIZE; i++ ) { int bits = _A[i]; bits &= ((bits & 0x55555555)<<1); // 1 hi-bit set for each pair bits |= (bits>>1); // Smear 1 hi-bit into a pair _A[i] = bits; } - VerifyPairs(); + verify_pairs(); } //------------------------------SmearToPairs----------------------------------- // Smear out partial bits; leave only bit pairs -void RegMask::SmearToPairs() { +void RegMask::smear_to_pairs() { for( int i = 0; i < RM_SIZE; i++ ) { int bits = _A[i]; bits |= ((bits & 0x55555555)<<1); // Smear lo bit hi per pair bits |= ((bits & 0xAAAAAAAA)>>1); // Smear hi bit lo per pair _A[i] = bits; } - VerifyPairs(); + verify_pairs(); } //------------------------------is_aligned_pairs------------------------------- -bool RegMask::is_aligned_Pairs() const { +bool RegMask::is_aligned_pairs() const { // Assert that the register mask contains only bit pairs. for( int i = 0; i < RM_SIZE; i++ ) { int bits = _A[i]; @@ -204,7 +227,7 @@ int RegMask::is_bound1() const { //------------------------------is_bound2-------------------------------------- // Return TRUE if the mask contains an adjacent pair of bits and no other bits. -int RegMask::is_bound2() const { +int RegMask::is_bound_pair() const { if( is_AllStack() ) return false; int bit = -1; // Set to hold the one bit allowed @@ -226,6 +249,132 @@ int RegMask::is_bound2() const { return true; } +static int low_bits[3] = { 0x55555555, 0x11111111, 0x01010101 }; +//------------------------------find_first_set--------------------------------- +// Find the lowest-numbered register set in the mask. Return the +// HIGHEST register number in the set, or BAD if no sets. +// Works also for size 1. +OptoReg::Name RegMask::find_first_set(int size) const { + verify_sets(size); + for (int i = 0; i < RM_SIZE; i++) { + if (_A[i]) { // Found some bits + int bit = _A[i] & -_A[i]; // Extract low bit + // Convert to bit number, return hi bit in pair + return OptoReg::Name((i<<_LogWordBits)+find_lowest_bit(bit)+(size-1)); + } + } + return OptoReg::Bad; +} + +//------------------------------clear_to_sets---------------------------------- +// Clear out partial bits; leave only aligned adjacent bit pairs +void RegMask::clear_to_sets(int size) { + if (size == 1) return; + assert(2 <= size && size <= 8, "update low bits table"); + assert(is_power_of_2(size), "sanity"); + int low_bits_mask = low_bits[size>>2]; + for (int i = 0; i < RM_SIZE; i++) { + int bits = _A[i]; + int sets = (bits & low_bits_mask); + for (int j = 1; j < size; j++) { + sets = (bits & (sets<<1)); // filter bits which produce whole sets + } + sets |= (sets>>1); // Smear 1 hi-bit into a set + if (size > 2) { + sets |= (sets>>2); // Smear 2 hi-bits into a set + if (size > 4) { + sets |= (sets>>4); // Smear 4 hi-bits into a set + } + } + _A[i] = sets; + } + verify_sets(size); +} + +//------------------------------smear_to_sets---------------------------------- +// Smear out partial bits to aligned adjacent bit sets +void RegMask::smear_to_sets(int size) { + if (size == 1) return; + assert(2 <= size && size <= 8, "update low bits table"); + assert(is_power_of_2(size), "sanity"); + int low_bits_mask = low_bits[size>>2]; + for (int i = 0; i < RM_SIZE; i++) { + int bits = _A[i]; + int sets = 0; + for (int j = 0; j < size; j++) { + sets |= (bits & low_bits_mask); // collect partial bits + bits = bits>>1; + } + sets |= (sets<<1); // Smear 1 lo-bit into a set + if (size > 2) { + sets |= (sets<<2); // Smear 2 lo-bits into a set + if (size > 4) { + sets |= (sets<<4); // Smear 4 lo-bits into a set + } + } + _A[i] = sets; + } + verify_sets(size); +} + +//------------------------------is_aligned_set-------------------------------- +bool RegMask::is_aligned_sets(int size) const { + if (size == 1) return true; + assert(2 <= size && size <= 8, "update low bits table"); + assert(is_power_of_2(size), "sanity"); + int low_bits_mask = low_bits[size>>2]; + // Assert that the register mask contains only bit sets. + for (int i = 0; i < RM_SIZE; i++) { + int bits = _A[i]; + while (bits) { // Check bits for pairing + int bit = bits & -bits; // Extract low bit + // Low bit is not odd means its mis-aligned. + if ((bit & low_bits_mask) == 0) return false; + // Do extra work since (bit << size) may overflow. + int hi_bit = bit << (size-1); // high bit + int set = hi_bit + ((hi_bit-1) & ~(bit-1)); + // Check for aligned adjacent bits in this set + if ((bits & set) != set) return false; + bits -= set; // Remove this set + } + } + return true; +} + +//------------------------------is_bound_set----------------------------------- +// Return TRUE if the mask contains one adjacent set of bits and no other bits. +// Works also for size 1. +int RegMask::is_bound_set(int size) const { + if( is_AllStack() ) return false; + assert(1 <= size && size <= 8, "update low bits table"); + int bit = -1; // Set to hold the one bit allowed + for (int i = 0; i < RM_SIZE; i++) { + if (_A[i] ) { // Found some bits + if (bit != -1) + return false; // Already had bits, so fail + bit = _A[i] & -_A[i]; // Extract 1 bit from mask + int hi_bit = bit << (size-1); // high bit + if (hi_bit != 0) { // Bit set stays in same word? + int set = hi_bit + ((hi_bit-1) & ~(bit-1)); + if (set != _A[i]) + return false; // Require adjacent bit set and no more bits + } else { // Else its a split-set case + if (((-1) & ~(bit-1)) != _A[i]) + return false; // Found many bits, so fail + i++; // Skip iteration forward and check high part + assert(size <= 8, "update next code"); + // The lower 24 bits should be 0 since it is split case and size <= 8. + int set = bit>>24; + set = set & -set; // Remove sign extension. + set = (((set << size) - 1) >> 8); + if (_A[i] != set) return false; // Require 1 lo bit in next word + } + } + } + // True for both the empty mask and for a bit set + return true; +} + //------------------------------is_UP------------------------------------------ // UP means register only, Register plus stack, or stack only is DOWN bool RegMask::is_UP() const { diff --git a/hotspot/src/share/vm/opto/regmask.hpp b/hotspot/src/share/vm/opto/regmask.hpp index e50ff84ca16..e4c31dcefb2 100644 --- a/hotspot/src/share/vm/opto/regmask.hpp +++ b/hotspot/src/share/vm/opto/regmask.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -113,7 +113,11 @@ public: // the controlling alignment constraint. Note that this alignment // requirement is internal to the allocator, and independent of any // particular platform. - enum { SlotsPerLong = 2 }; + enum { SlotsPerLong = 2, + SlotsPerVecS = 1, + SlotsPerVecD = 2, + SlotsPerVecX = 4, + SlotsPerVecY = 8 }; // A constructor only used by the ADLC output. All mask fields are filled // in directly. Calls to this look something like RM(1,2,3,4); @@ -193,20 +197,53 @@ public: OptoReg::Name find_first_pair() const; // Clear out partial bits; leave only aligned adjacent bit pairs. - void ClearToPairs(); + void clear_to_pairs(); // Smear out partial bits; leave only aligned adjacent bit pairs. - void SmearToPairs(); + void smear_to_pairs(); // Verify that the mask contains only aligned adjacent bit pairs - void VerifyPairs() const { assert( is_aligned_Pairs(), "mask is not aligned, adjacent pairs" ); } + void verify_pairs() const { assert( is_aligned_pairs(), "mask is not aligned, adjacent pairs" ); } // Test that the mask contains only aligned adjacent bit pairs - bool is_aligned_Pairs() const; + bool is_aligned_pairs() const; // mask is a pair of misaligned registers - bool is_misaligned_Pair() const { return Size()==2 && !is_aligned_Pairs();} + bool is_misaligned_pair() const { return Size()==2 && !is_aligned_pairs(); } // Test for single register int is_bound1() const; // Test for a single adjacent pair - int is_bound2() const; + int is_bound_pair() const; + // Test for a single adjacent set of ideal register's size. + int is_bound(uint ireg) const { + if (is_vector(ireg)) { + if (is_bound_set(num_registers(ireg))) + return true; + } else if (is_bound1() || is_bound_pair()) { + return true; + } + return false; + } + + // Find the lowest-numbered register set in the mask. Return the + // HIGHEST register number in the set, or BAD if no sets. + // Assert that the mask contains only bit sets. + OptoReg::Name find_first_set(int size) const; + + // Clear out partial bits; leave only aligned adjacent bit sets of size. + void clear_to_sets(int size); + // Smear out partial bits to aligned adjacent bit sets. + void smear_to_sets(int size); + // Verify that the mask contains only aligned adjacent bit sets + void verify_sets(int size) const { assert(is_aligned_sets(size), "mask is not aligned, adjacent sets"); } + // Test that the mask contains only aligned adjacent bit sets + bool is_aligned_sets(int size) const; + + // mask is a set of misaligned registers + bool is_misaligned_set(int size) const { return (int)Size()==size && !is_aligned_sets(size);} + + // Test for a single adjacent set + int is_bound_set(int size) const; + + static bool is_vector(uint ireg); + static int num_registers(uint ireg); // Fast overlap test. Non-zero if any registers in common. int overlap( const RegMask &rm ) const { @@ -280,9 +317,15 @@ public: static bool can_represent(OptoReg::Name reg) { // NOTE: -1 in computation reflects the usage of the last - // bit of the regmask as an infinite stack flag. + // bit of the regmask as an infinite stack flag and + // -7 is to keep mask aligned for largest value (VecY). return (int)reg < (int)(CHUNK_SIZE-1); } + static bool can_represent_arg(OptoReg::Name reg) { + // NOTE: -SlotsPerVecY in computation reflects the need + // to keep mask aligned for largest value (VecY). + return (int)reg < (int)(CHUNK_SIZE-SlotsPerVecY); + } }; // Do not use this constant directly in client code! diff --git a/hotspot/src/share/vm/opto/superword.cpp b/hotspot/src/share/vm/opto/superword.cpp index ae46e7f17c8..78db4b5ba16 100644 --- a/hotspot/src/share/vm/opto/superword.cpp +++ b/hotspot/src/share/vm/opto/superword.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, 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 @@ -67,6 +67,10 @@ SuperWord::SuperWord(PhaseIdealLoop* phase) : //------------------------------transform_loop--------------------------- void SuperWord::transform_loop(IdealLoopTree* lpt) { + assert(UseSuperWord, "should be"); + // Do vectors exist on this architecture? + if (Matcher::vector_width_in_bytes(T_BYTE) < 2) return; + assert(lpt->_head->is_CountedLoop(), "must be"); CountedLoopNode *cl = lpt->_head->as_CountedLoop(); @@ -89,15 +93,12 @@ void SuperWord::transform_loop(IdealLoopTree* lpt) { Node *pre_opaq1 = pre_end->limit(); if (pre_opaq1->Opcode() != Op_Opaque1) return; - // Do vectors exist on this architecture? - if (vector_width_in_bytes() == 0) return; - init(); // initialize data structures set_lpt(lpt); set_lp(cl); - // For now, define one block which is the entire loop body + // For now, define one block which is the entire loop body set_bb(cl); assert(_packset.length() == 0, "packset must be empty"); @@ -177,7 +178,7 @@ void SuperWord::find_adjacent_refs() { Node_List memops; for (int i = 0; i < _block.length(); i++) { Node* n = _block.at(i); - if (n->is_Mem() && in_bb(n) && + if (n->is_Mem() && !n->is_LoadStore() && in_bb(n) && is_java_primitive(n->as_Mem()->memory_type())) { int align = memory_alignment(n->as_Mem(), 0); if (align != bottom_align) { @@ -185,54 +186,130 @@ void SuperWord::find_adjacent_refs() { } } } - if (memops.size() == 0) return; - // Find a memory reference to align to. The pre-loop trip count - // is modified to align this reference to a vector-aligned address - find_align_to_ref(memops); - if (align_to_ref() == NULL) return; + Node_List align_to_refs; + int best_iv_adjustment = 0; + MemNode* best_align_to_mem_ref = NULL; - SWPointer align_to_ref_p(align_to_ref(), this); - int offset = align_to_ref_p.offset_in_bytes(); - int scale = align_to_ref_p.scale_in_bytes(); - int vw = vector_width_in_bytes(); - int stride_sign = (scale * iv_stride()) > 0 ? 1 : -1; - int iv_adjustment = (stride_sign * vw - (offset % vw)) % vw; + while (memops.size() != 0) { + // Find a memory reference to align to. + MemNode* mem_ref = find_align_to_ref(memops); + if (mem_ref == NULL) break; + align_to_refs.push(mem_ref); + int iv_adjustment = get_iv_adjustment(mem_ref); -#ifndef PRODUCT - if (TraceSuperWord) - tty->print_cr("\noffset = %d iv_adjustment = %d elt_align = %d scale = %d iv_stride = %d", - offset, iv_adjustment, align_to_ref_p.memory_size(), align_to_ref_p.scale_in_bytes(), iv_stride()); -#endif - - // Set alignment relative to "align_to_ref" - for (int i = memops.size() - 1; i >= 0; i--) { - MemNode* s = memops.at(i)->as_Mem(); - SWPointer p2(s, this); - if (p2.comparable(align_to_ref_p)) { - int align = memory_alignment(s, iv_adjustment); - set_alignment(s, align); - } else { - memops.remove(i); + if (best_align_to_mem_ref == NULL) { + // Set memory reference which is the best from all memory operations + // to be used for alignment. The pre-loop trip count is modified to align + // this reference to a vector-aligned address. + best_align_to_mem_ref = mem_ref; + best_iv_adjustment = iv_adjustment; } - } - // Create initial pack pairs of memory operations - for (uint i = 0; i < memops.size(); i++) { - Node* s1 = memops.at(i); - for (uint j = 0; j < memops.size(); j++) { - Node* s2 = memops.at(j); - if (s1 != s2 && are_adjacent_refs(s1, s2)) { - int align = alignment(s1); - if (stmts_can_pack(s1, s2, align)) { - Node_List* pair = new Node_List(); - pair->push(s1); - pair->push(s2); - _packset.append(pair); + SWPointer align_to_ref_p(mem_ref, this); + // Set alignment relative to "align_to_ref" for all related memory operations. + for (int i = memops.size() - 1; i >= 0; i--) { + MemNode* s = memops.at(i)->as_Mem(); + if (isomorphic(s, mem_ref)) { + SWPointer p2(s, this); + if (p2.comparable(align_to_ref_p)) { + int align = memory_alignment(s, iv_adjustment); + set_alignment(s, align); } } } - } + + // Create initial pack pairs of memory operations for which + // alignment is set and vectors will be aligned. + bool create_pack = true; + if (memory_alignment(mem_ref, best_iv_adjustment) != 0) { + if (same_velt_type(mem_ref, best_align_to_mem_ref)) { + // Can't allow vectorization of unaligned memory accesses with the + // same type since it could be overlapped accesses to the same array. + create_pack = false; + } else { + // Allow independent (different type) unaligned memory operations + // if HW supports them. + if (!Matcher::misaligned_vectors_ok()) { + create_pack = false; + } else { + // Check if packs of the same memory type but + // with a different alignment were created before. + for (uint i = 0; i < align_to_refs.size(); i++) { + MemNode* mr = align_to_refs.at(i)->as_Mem(); + if (same_velt_type(mr, mem_ref) && + memory_alignment(mr, iv_adjustment) != 0) + create_pack = false; + } + } + } + } + if (create_pack) { + for (uint i = 0; i < memops.size(); i++) { + Node* s1 = memops.at(i); + int align = alignment(s1); + if (align == top_align) continue; + for (uint j = 0; j < memops.size(); j++) { + Node* s2 = memops.at(j); + if (alignment(s2) == top_align) continue; + if (s1 != s2 && are_adjacent_refs(s1, s2)) { + if (stmts_can_pack(s1, s2, align)) { + Node_List* pair = new Node_List(); + pair->push(s1); + pair->push(s2); + _packset.append(pair); + } + } + } + } + } else { // Don't create unaligned pack + // First, remove remaining memory ops of the same type from the list. + for (int i = memops.size() - 1; i >= 0; i--) { + MemNode* s = memops.at(i)->as_Mem(); + if (same_velt_type(s, mem_ref)) { + memops.remove(i); + } + } + + // Second, remove already constructed packs of the same type. + for (int i = _packset.length() - 1; i >= 0; i--) { + Node_List* p = _packset.at(i); + MemNode* s = p->at(0)->as_Mem(); + if (same_velt_type(s, mem_ref)) { + remove_pack_at(i); + } + } + + // If needed find the best memory reference for loop alignment again. + if (same_velt_type(mem_ref, best_align_to_mem_ref)) { + // Put memory ops from remaining packs back on memops list for + // the best alignment search. + uint orig_msize = memops.size(); + for (int i = 0; i < _packset.length(); i++) { + Node_List* p = _packset.at(i); + MemNode* s = p->at(0)->as_Mem(); + assert(!same_velt_type(s, mem_ref), "sanity"); + memops.push(s); + } + MemNode* best_align_to_mem_ref = find_align_to_ref(memops); + if (best_align_to_mem_ref == NULL) break; + best_iv_adjustment = get_iv_adjustment(best_align_to_mem_ref); + // Restore list. + while (memops.size() > orig_msize) + (void)memops.pop(); + } + } // unaligned memory accesses + + // Remove used mem nodes. + for (int i = memops.size() - 1; i >= 0; i--) { + MemNode* m = memops.at(i)->as_Mem(); + if (alignment(m) != top_align) { + memops.remove(i); + } + } + + } // while (memops.size() != 0 + set_align_to_ref(best_align_to_mem_ref); #ifndef PRODUCT if (TraceSuperWord) { @@ -246,7 +323,7 @@ void SuperWord::find_adjacent_refs() { // Find a memory reference to align the loop induction variable to. // Looks first at stores then at loads, looking for a memory reference // with the largest number of references similar to it. -void SuperWord::find_align_to_ref(Node_List &memops) { +MemNode* SuperWord::find_align_to_ref(Node_List &memops) { GrowableArray cmp_ct(arena(), memops.size(), memops.size(), 0); // Count number of comparable memory ops @@ -270,20 +347,28 @@ void SuperWord::find_align_to_ref(Node_List &memops) { } } - // Find Store (or Load) with the greatest number of "comparable" references + // Find Store (or Load) with the greatest number of "comparable" references, + // biggest vector size, smallest data size and smallest iv offset. int max_ct = 0; + int max_vw = 0; int max_idx = -1; int min_size = max_jint; int min_iv_offset = max_jint; for (uint j = 0; j < memops.size(); j++) { MemNode* s = memops.at(j)->as_Mem(); if (s->is_Store()) { + int vw = vector_width_in_bytes(velt_basic_type(s)); + assert(vw > 1, "sanity"); SWPointer p(s, this); - if (cmp_ct.at(j) > max_ct || - cmp_ct.at(j) == max_ct && (data_size(s) < min_size || - data_size(s) == min_size && - p.offset_in_bytes() < min_iv_offset)) { + if (cmp_ct.at(j) > max_ct || + cmp_ct.at(j) == max_ct && + (vw > max_vw || + vw == max_vw && + (data_size(s) < min_size || + data_size(s) == min_size && + (p.offset_in_bytes() < min_iv_offset)))) { max_ct = cmp_ct.at(j); + max_vw = vw; max_idx = j; min_size = data_size(s); min_iv_offset = p.offset_in_bytes(); @@ -295,12 +380,18 @@ void SuperWord::find_align_to_ref(Node_List &memops) { for (uint j = 0; j < memops.size(); j++) { MemNode* s = memops.at(j)->as_Mem(); if (s->is_Load()) { + int vw = vector_width_in_bytes(velt_basic_type(s)); + assert(vw > 1, "sanity"); SWPointer p(s, this); - if (cmp_ct.at(j) > max_ct || - cmp_ct.at(j) == max_ct && (data_size(s) < min_size || - data_size(s) == min_size && - p.offset_in_bytes() < min_iv_offset)) { + if (cmp_ct.at(j) > max_ct || + cmp_ct.at(j) == max_ct && + (vw > max_vw || + vw == max_vw && + (data_size(s) < min_size || + data_size(s) == min_size && + (p.offset_in_bytes() < min_iv_offset)))) { max_ct = cmp_ct.at(j); + max_vw = vw; max_idx = j; min_size = data_size(s); min_iv_offset = p.offset_in_bytes(); @@ -309,10 +400,7 @@ void SuperWord::find_align_to_ref(Node_List &memops) { } } - if (max_ct > 0) - set_align_to_ref(memops.at(max_idx)->as_Mem()); - -#ifndef PRODUCT +#ifdef ASSERT if (TraceSuperWord && Verbose) { tty->print_cr("\nVector memops after find_align_to_refs"); for (uint i = 0; i < memops.size(); i++) { @@ -321,6 +409,17 @@ void SuperWord::find_align_to_ref(Node_List &memops) { } } #endif + + if (max_ct > 0) { +#ifdef ASSERT + if (TraceSuperWord) { + tty->print("\nVector align to node: "); + memops.at(max_idx)->as_Mem()->dump(); + } +#endif + return memops.at(max_idx)->as_Mem(); + } + return NULL; } //------------------------------ref_is_alignable--------------------------- @@ -341,7 +440,9 @@ bool SuperWord::ref_is_alignable(SWPointer& p) { // If initial offset from start of object is computable, // compute alignment within the vector. - int vw = vector_width_in_bytes(); + BasicType bt = velt_basic_type(p.mem()); + int vw = vector_width_in_bytes(bt); + assert(vw > 1, "sanity"); if (vw % span == 0) { Node* init_nd = pre_end->init_trip(); if (init_nd->is_Con() && p.invar() == NULL) { @@ -361,6 +462,26 @@ bool SuperWord::ref_is_alignable(SWPointer& p) { return false; } +//---------------------------get_iv_adjustment--------------------------- +// Calculate loop's iv adjustment for this memory ops. +int SuperWord::get_iv_adjustment(MemNode* mem_ref) { + SWPointer align_to_ref_p(mem_ref, this); + int offset = align_to_ref_p.offset_in_bytes(); + int scale = align_to_ref_p.scale_in_bytes(); + BasicType bt = velt_basic_type(mem_ref); + int vw = vector_width_in_bytes(bt); + assert(vw > 1, "sanity"); + int stride_sign = (scale * iv_stride()) > 0 ? 1 : -1; + int iv_adjustment = (stride_sign * vw - (offset % vw)) % vw; + +#ifndef PRODUCT + if (TraceSuperWord) + tty->print_cr("\noffset = %d iv_adjust = %d elt_size = %d scale = %d iv_stride = %d vect_size %d", + offset, iv_adjustment, align_to_ref_p.memory_size(), scale, iv_stride(), vw); +#endif + return iv_adjustment; +} + //---------------------------dependence_graph--------------------------- // Construct dependency graph. // Add dependence edges to load/store nodes for memory dependence @@ -488,9 +609,13 @@ void SuperWord::mem_slice_preds(Node* start, Node* stop, GrowableArray &p bool SuperWord::stmts_can_pack(Node* s1, Node* s2, int align) { // Do not use superword for non-primitives - if((s1->is_Mem() && !is_java_primitive(s1->as_Mem()->memory_type())) || - (s2->is_Mem() && !is_java_primitive(s2->as_Mem()->memory_type()))) + BasicType bt1 = velt_basic_type(s1); + BasicType bt2 = velt_basic_type(s2); + if(!is_java_primitive(bt1) || !is_java_primitive(bt2)) return false; + if (Matcher::max_vector_size(bt1) < 2) { + return false; // No vectors for this type + } if (isomorphic(s1, s2)) { if (independent(s1, s2)) { @@ -552,7 +677,7 @@ bool SuperWord::isomorphic(Node* s1, Node* s2) { if (s1->Opcode() != s2->Opcode()) return false; if (s1->req() != s2->req()) return false; if (s1->in(0) != s2->in(0)) return false; - if (velt_type(s1) != velt_type(s2)) return false; + if (!same_velt_type(s1, s2)) return false; return true; } @@ -595,14 +720,16 @@ bool SuperWord::independent_path(Node* shallow, Node* deep, uint dp) { //------------------------------set_alignment--------------------------- void SuperWord::set_alignment(Node* s1, Node* s2, int align) { set_alignment(s1, align); - set_alignment(s2, align + data_size(s1)); + if (align == top_align || align == bottom_align) { + set_alignment(s2, align); + } else { + set_alignment(s2, align + data_size(s1)); + } } //------------------------------data_size--------------------------- int SuperWord::data_size(Node* s) { - const Type* t = velt_type(s); - BasicType bt = t->array_element_basic_type(); - int bsize = type2aelembytes(bt); + int bsize = type2aelembytes(velt_basic_type(s)); assert(bsize != 0, "valid size"); return bsize; } @@ -631,9 +758,9 @@ void SuperWord::extend_packlist() { //------------------------------follow_use_defs--------------------------- // Extend the packset by visiting operand definitions of nodes in pack p bool SuperWord::follow_use_defs(Node_List* p) { + assert(p->size() == 2, "just checking"); Node* s1 = p->at(0); Node* s2 = p->at(1); - assert(p->size() == 2, "just checking"); assert(s1->req() == s2->req(), "just checking"); assert(alignment(s1) + data_size(s1) == alignment(s2), "just checking"); @@ -718,7 +845,12 @@ bool SuperWord::opnd_positions_match(Node* d1, Node* u1, Node* d2, Node* u2) { for (i1++; i1 < ct; i1++) if (u1->in(i1) == d1) break; for (i2++; i2 < ct; i2++) if (u2->in(i2) == d2) break; if (i1 != i2) { - return false; + if ((i1 == (3-i2)) && (u2->is_Add() || u2->is_Mul())) { + // Further analysis relies on operands position matching. + u2->swap_edges(i1, i2); + } else { + return false; + } } } while (i1 < ct); return true; @@ -727,7 +859,7 @@ bool SuperWord::opnd_positions_match(Node* d1, Node* u1, Node* d2, Node* u2) { //------------------------------est_savings--------------------------- // Estimate the savings from executing s1 and s2 as a pack int SuperWord::est_savings(Node* s1, Node* s2) { - int save = 2 - 1; // 2 operations per instruction in packed form + int save_in = 2 - 1; // 2 operations per instruction in packed form // inputs for (uint i = 1; i < s1->req(); i++) { @@ -735,17 +867,18 @@ int SuperWord::est_savings(Node* s1, Node* s2) { Node* x2 = s2->in(i); if (x1 != x2) { if (are_adjacent_refs(x1, x2)) { - save += adjacent_profit(x1, x2); + save_in += adjacent_profit(x1, x2); } else if (!in_packset(x1, x2)) { - save -= pack_cost(2); + save_in -= pack_cost(2); } else { - save += unpack_cost(2); + save_in += unpack_cost(2); } } } // uses of result uint ct = 0; + int save_use = 0; for (DUIterator_Fast imax, i = s1->fast_outs(imax); i < imax; i++) { Node* s1_use = s1->fast_out(i); for (int j = 0; j < _packset.length(); j++) { @@ -756,7 +889,7 @@ int SuperWord::est_savings(Node* s1, Node* s2) { if (p->at(p->size()-1) == s2_use) { ct++; if (are_adjacent_refs(s1_use, s2_use)) { - save += adjacent_profit(s1_use, s2_use); + save_use += adjacent_profit(s1_use, s2_use); } } } @@ -764,10 +897,10 @@ int SuperWord::est_savings(Node* s1, Node* s2) { } } - if (ct < s1->outcnt()) save += unpack_cost(1); - if (ct < s2->outcnt()) save += unpack_cost(1); + if (ct < s1->outcnt()) save_use += unpack_cost(1); + if (ct < s2->outcnt()) save_use += unpack_cost(1); - return save; + return MAX2(save_in, save_use); } //------------------------------costs--------------------------- @@ -778,8 +911,9 @@ int SuperWord::unpack_cost(int ct) { return ct; } //------------------------------combine_packs--------------------------- // Combine packs A and B with A.last == B.first into A.first..,A.last,B.second,..B.last void SuperWord::combine_packs() { - bool changed; - do { + bool changed = true; + // Combine packs regardless max vector size. + while (changed) { changed = false; for (int i = 0; i < _packset.length(); i++) { Node_List* p1 = _packset.at(i); @@ -787,6 +921,7 @@ void SuperWord::combine_packs() { for (int j = 0; j < _packset.length(); j++) { Node_List* p2 = _packset.at(j); if (p2 == NULL) continue; + if (i == j) continue; if (p1->at(p1->size()-1) == p2->at(0)) { for (uint k = 1; k < p2->size(); k++) { p1->push(p2->at(k)); @@ -796,8 +931,39 @@ void SuperWord::combine_packs() { } } } - } while (changed); + } + // Split packs which have size greater then max vector size. + for (int i = 0; i < _packset.length(); i++) { + Node_List* p1 = _packset.at(i); + if (p1 != NULL) { + BasicType bt = velt_basic_type(p1->at(0)); + uint max_vlen = Matcher::max_vector_size(bt); // Max elements in vector + assert(is_power_of_2(max_vlen), "sanity"); + uint psize = p1->size(); + if (!is_power_of_2(psize)) { + // Skip pack which can't be vector. + // case1: for(...) { a[i] = i; } elements values are different (i+x) + // case2: for(...) { a[i] = b[i+1]; } can't align both, load and store + _packset.at_put(i, NULL); + continue; + } + if (psize > max_vlen) { + Node_List* pack = new Node_List(); + for (uint j = 0; j < psize; j++) { + pack->push(p1->at(j)); + if (pack->size() >= max_vlen) { + assert(is_power_of_2(pack->size()), "sanity"); + _packset.append(pack); + pack = new Node_List(); + } + } + _packset.at_put(i, NULL); + } + } + } + + // Compress list. for (int i = _packset.length() - 1; i >= 0; i--) { Node_List* p1 = _packset.at(i); if (p1 == NULL) { @@ -880,8 +1046,7 @@ void SuperWord::filter_packs() { // Can code be generated for pack p? bool SuperWord::implemented(Node_List* p) { Node* p0 = p->at(0); - int vopc = VectorNode::opcode(p0->Opcode(), p->size(), velt_type(p0)); - return vopc > 0 && Matcher::has_match_rule(vopc); + return VectorNode::implemented(p0->Opcode(), p->size(), velt_basic_type(p0)); } //------------------------------profitable--------------------------- @@ -939,36 +1104,36 @@ void SuperWord::schedule() { } //-------------------------------remove_and_insert------------------- -//remove "current" from its current position in the memory graph and insert -//it after the appropriate insertion point (lip or uip) +// Remove "current" from its current position in the memory graph and insert +// it after the appropriate insertion point (lip or uip). void SuperWord::remove_and_insert(MemNode *current, MemNode *prev, MemNode *lip, Node *uip, Unique_Node_List &sched_before) { Node* my_mem = current->in(MemNode::Memory); - _igvn.rehash_node_delayed(current); - _igvn.hash_delete(my_mem); + bool sched_up = sched_before.member(current); - //remove current_store from its current position in the memmory graph + // remove current_store from its current position in the memmory graph for (DUIterator i = current->outs(); current->has_out(i); i++) { Node* use = current->out(i); if (use->is_Mem()) { assert(use->in(MemNode::Memory) == current, "must be"); - _igvn.rehash_node_delayed(use); if (use == prev) { // connect prev to my_mem - use->set_req(MemNode::Memory, my_mem); + _igvn.replace_input_of(use, MemNode::Memory, my_mem); + --i; //deleted this edge; rescan position } else if (sched_before.member(use)) { - _igvn.hash_delete(uip); - use->set_req(MemNode::Memory, uip); + if (!sched_up) { // Will be moved together with current + _igvn.replace_input_of(use, MemNode::Memory, uip); + --i; //deleted this edge; rescan position + } } else { - _igvn.hash_delete(lip); - use->set_req(MemNode::Memory, lip); + if (sched_up) { // Will be moved together with current + _igvn.replace_input_of(use, MemNode::Memory, lip); + --i; //deleted this edge; rescan position + } } - --i; //deleted this edge; rescan position } } - bool sched_up = sched_before.member(current); Node *insert_pt = sched_up ? uip : lip; - _igvn.hash_delete(insert_pt); // all uses of insert_pt's memory state should use current's instead for (DUIterator i = insert_pt->outs(); insert_pt->has_out(i); i++) { @@ -988,7 +1153,7 @@ void SuperWord::remove_and_insert(MemNode *current, MemNode *prev, MemNode *lip, } //connect current to insert_pt - current->set_req(MemNode::Memory, insert_pt); + _igvn.replace_input_of(current, MemNode::Memory, insert_pt); } //------------------------------co_locate_pack---------------------------------- @@ -1025,7 +1190,7 @@ void SuperWord::co_locate_pack(Node_List* pk) { if (use->is_Mem() && use != previous) memops.push(use); } - if(current == first) break; + if (current == first) break; previous = current; current = current->in(MemNode::Memory)->as_Mem(); } @@ -1038,27 +1203,37 @@ void SuperWord::co_locate_pack(Node_List* pk) { Node *s2 = memops.at(j); if (!independent(s1, s2)) { if (in_pack(s2, pk) || schedule_before_pack.member(s2)) { - schedule_before_pack.push(s1); //s1 must be scheduled before + schedule_before_pack.push(s1); // s1 must be scheduled before Node_List* mem_pk = my_pack(s1); if (mem_pk != NULL) { for (uint ii = 0; ii < mem_pk->size(); ii++) { - Node* s = mem_pk->at(ii); // follow partner + Node* s = mem_pk->at(ii); // follow partner if (memops.member(s) && !schedule_before_pack.member(s)) schedule_before_pack.push(s); } } + break; } } } } } - MemNode* lower_insert_pt = last; Node* upper_insert_pt = first->in(MemNode::Memory); + // Following code moves loads connected to upper_insert_pt below aliased stores. + // Collect such loads here and reconnect them back to upper_insert_pt later. + memops.clear(); + for (DUIterator i = upper_insert_pt->outs(); upper_insert_pt->has_out(i); i++) { + Node* use = upper_insert_pt->out(i); + if (!use->is_Store()) + memops.push(use); + } + + MemNode* lower_insert_pt = last; previous = last; //previous store in pk current = last->in(MemNode::Memory)->as_Mem(); - //start scheduling from "last" to "first" + // start scheduling from "last" to "first" while (true) { assert(in_bb(current), "stay in block"); assert(in_pack(previous, pk), "previous stays in pack"); @@ -1066,16 +1241,13 @@ void SuperWord::co_locate_pack(Node_List* pk) { if (in_pack(current, pk)) { // Forward users of my memory state (except "previous) to my input memory state - _igvn.hash_delete(current); for (DUIterator i = current->outs(); current->has_out(i); i++) { Node* use = current->out(i); if (use->is_Mem() && use != previous) { assert(use->in(MemNode::Memory) == current, "must be"); if (schedule_before_pack.member(use)) { - _igvn.hash_delete(upper_insert_pt); _igvn.replace_input_of(use, MemNode::Memory, upper_insert_pt); } else { - _igvn.hash_delete(lower_insert_pt); _igvn.replace_input_of(use, MemNode::Memory, lower_insert_pt); } --i; // deleted this edge; rescan position @@ -1089,6 +1261,14 @@ void SuperWord::co_locate_pack(Node_List* pk) { if (current == first) break; current = my_mem->as_Mem(); } // end while + + // Reconnect loads back to upper_insert_pt. + for (uint i = 0; i < memops.size(); i++) { + Node *ld = memops.at(i); + if (ld->in(MemNode::Memory) != upper_insert_pt) { + _igvn.replace_input_of(ld, MemNode::Memory, upper_insert_pt); + } + } } else if (pk->at(0)->is_Load()) { //load // all loads in the pack should have the same memory state. By default, // we use the memory state of the last load. However, if any load could @@ -1149,35 +1329,30 @@ void SuperWord::output() { Node* vn = NULL; Node* low_adr = p->at(0); Node* first = executed_first(p); + int opc = n->Opcode(); if (n->is_Load()) { - int opc = n->Opcode(); Node* ctl = n->in(MemNode::Control); Node* mem = first->in(MemNode::Memory); Node* adr = low_adr->in(MemNode::Address); const TypePtr* atyp = n->adr_type(); - vn = VectorLoadNode::make(_phase->C, opc, ctl, mem, adr, atyp, vlen); - + vn = LoadVectorNode::make(_phase->C, opc, ctl, mem, adr, atyp, vlen, velt_basic_type(n)); } else if (n->is_Store()) { // Promote value to be stored to vector Node* val = vector_opd(p, MemNode::ValueIn); - - int opc = n->Opcode(); Node* ctl = n->in(MemNode::Control); Node* mem = first->in(MemNode::Memory); Node* adr = low_adr->in(MemNode::Address); const TypePtr* atyp = n->adr_type(); - vn = VectorStoreNode::make(_phase->C, opc, ctl, mem, adr, atyp, val, vlen); - + vn = StoreVectorNode::make(_phase->C, opc, ctl, mem, adr, atyp, val, vlen); } else if (n->req() == 3) { // Promote operands to vector Node* in1 = vector_opd(p, 1); Node* in2 = vector_opd(p, 2); - vn = VectorNode::make(_phase->C, n->Opcode(), in1, in2, vlen, velt_type(n)); - + vn = VectorNode::make(_phase->C, opc, in1, in2, vlen, velt_basic_type(n)); } else { ShouldNotReachHere(); } - + assert(vn != NULL, "sanity"); _phase->_igvn.register_new_node_with_optimizer(vn); _phase->set_ctrl(vn, _phase->get_ctrl(p->at(0))); for (uint j = 0; j < p->size(); j++) { @@ -1185,6 +1360,12 @@ void SuperWord::output() { _igvn.replace_node(pm, vn); } _igvn._worklist.push(vn); +#ifdef ASSERT + if (TraceSuperWord) { + tty->print("new Vector node: "); + vn->dump(); + } +#endif } } } @@ -1207,10 +1388,10 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { } if (same_opd) { - if (opd->is_Vector() || opd->is_VectorLoad()) { + if (opd->is_Vector() || opd->is_LoadVector()) { return opd; // input is matching vector } - assert(!opd->is_VectorStore(), "such vector is not expected here"); + assert(!opd->is_StoreVector(), "such vector is not expected here"); // Convert scalar input to vector with the same number of elements as // p0's vector. Use p0's type because size of operand's container in // vector should match p0's size regardless operand's size. @@ -1219,12 +1400,18 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { _phase->_igvn.register_new_node_with_optimizer(vn); _phase->set_ctrl(vn, _phase->get_ctrl(opd)); +#ifdef ASSERT + if (TraceSuperWord) { + tty->print("new Vector node: "); + vn->dump(); + } +#endif return vn; } // Insert pack operation - const Type* p0_t = velt_type(p0); - PackNode* pk = PackNode::make(_phase->C, opd, p0_t); + BasicType bt = velt_basic_type(p0); + PackNode* pk = PackNode::make(_phase->C, opd, vlen, bt); DEBUG_ONLY( const BasicType opd_bt = opd->bottom_type()->basic_type(); ) for (uint i = 1; i < vlen; i++) { @@ -1232,10 +1419,16 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { Node* in = pi->in(opd_idx); assert(my_pack(in) == NULL, "Should already have been unpacked"); assert(opd_bt == in->bottom_type()->basic_type(), "all same type"); - pk->add_opd(in); + pk->add_opd(i, in); } _phase->_igvn.register_new_node_with_optimizer(pk); _phase->set_ctrl(pk, _phase->get_ctrl(opd)); +#ifdef ASSERT + if (TraceSuperWord) { + tty->print("new Pack node: "); + pk->dump(); + } +#endif return pk; } @@ -1273,16 +1466,15 @@ void SuperWord::insert_extracts(Node_List* p) { // Insert extract operation _igvn.hash_delete(def); int def_pos = alignment(def) / data_size(def); - const Type* def_t = velt_type(def); - Node* ex = ExtractNode::make(_phase->C, def, def_pos, def_t); + Node* ex = ExtractNode::make(_phase->C, def, def_pos, velt_basic_type(def)); _phase->_igvn.register_new_node_with_optimizer(ex); _phase->set_ctrl(ex, _phase->get_ctrl(def)); _igvn.replace_input_of(use, idx, ex); _igvn._worklist.push(def); bb_insert_after(ex, bb_idx(def)); - set_velt_type(ex, def_t); + set_velt_type(ex, velt_type(def)); } } @@ -1509,10 +1701,7 @@ void SuperWord::compute_vector_element_type() { // Initial type for (int i = 0; i < _block.length(); i++) { Node* n = _block.at(i); - const Type* t = n->is_Mem() ? Type::get_const_basic_type(n->as_Mem()->memory_type()) - : _igvn.type(n); - const Type* vt = container_type(t); - set_velt_type(n, vt); + set_velt_type(n, container_type(n)); } // Propagate narrowed type backwards through operations @@ -1543,7 +1732,7 @@ void SuperWord::compute_vector_element_type() { bool same_type = true; for (DUIterator_Fast kmax, k = in->fast_outs(kmax); k < kmax; k++) { Node *use = in->fast_out(k); - if (!in_bb(use) || velt_type(use) != vt) { + if (!in_bb(use) || !same_velt_type(use, n)) { same_type = false; break; } @@ -1575,20 +1764,24 @@ int SuperWord::memory_alignment(MemNode* s, int iv_adjust_in_bytes) { if (!p.valid()) { return bottom_align; } + int vw = vector_width_in_bytes(velt_basic_type(s)); + if (vw < 2) { + return bottom_align; // No vectors for this type + } int offset = p.offset_in_bytes(); offset += iv_adjust_in_bytes; - int off_rem = offset % vector_width_in_bytes(); - int off_mod = off_rem >= 0 ? off_rem : off_rem + vector_width_in_bytes(); + int off_rem = offset % vw; + int off_mod = off_rem >= 0 ? off_rem : off_rem + vw; return off_mod; } //---------------------------container_type--------------------------- // Smallest type containing range of values -const Type* SuperWord::container_type(const Type* t) { - const Type* tp = t->make_ptr(); - if (tp && tp->isa_aryptr()) { - t = tp->is_aryptr()->elem(); +const Type* SuperWord::container_type(Node* n) { + if (n->is_Mem()) { + return Type::get_const_basic_type(n->as_Mem()->memory_type()); } + const Type* t = _igvn.type(n); if (t->basic_type() == T_INT) { if (t->higher_equal(TypeInt::BOOL)) return TypeInt::BOOL; if (t->higher_equal(TypeInt::BYTE)) return TypeInt::BYTE; @@ -1599,11 +1792,22 @@ const Type* SuperWord::container_type(const Type* t) { return t; } +bool SuperWord::same_velt_type(Node* n1, Node* n2) { + const Type* vt1 = velt_type(n1); + const Type* vt2 = velt_type(n1); + if (vt1->basic_type() == T_INT && vt2->basic_type() == T_INT) { + // Compare vectors element sizes for integer types. + return data_size(n1) == data_size(n2); + } + return vt1 == vt2; +} + //-------------------------vector_opd_range----------------------- // (Start, end] half-open range defining which operands are vector void SuperWord::vector_opd_range(Node* n, uint* start, uint* end) { switch (n->Opcode()) { - case Op_LoadB: case Op_LoadUS: + case Op_LoadB: case Op_LoadUB: + case Op_LoadS: case Op_LoadUS: case Op_LoadI: case Op_LoadL: case Op_LoadF: case Op_LoadD: case Op_LoadP: @@ -1721,6 +1925,7 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { assert(orig_limit != NULL && _igvn.type(orig_limit) != Type::TOP, ""); SWPointer align_to_ref_p(align_to_ref, this); + assert(align_to_ref_p.valid(), "sanity"); // Given: // lim0 == original pre loop limit @@ -1773,10 +1978,12 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { // N = (V - (e - lim0)) % V // lim = lim0 - (V - (e - lim0)) % V + int vw = vector_width_in_bytes(velt_basic_type(align_to_ref)); + assert(vw > 1, "sanity"); int stride = iv_stride(); int scale = align_to_ref_p.scale_in_bytes(); int elt_size = align_to_ref_p.memory_size(); - int v_align = vector_width_in_bytes() / elt_size; + int v_align = vw / elt_size; int k = align_to_ref_p.offset_in_bytes() / elt_size; Node *kn = _igvn.intcon(k); @@ -1796,6 +2003,25 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { _phase->_igvn.register_new_node_with_optimizer(e); _phase->set_ctrl(e, pre_ctrl); } + if (vw > ObjectAlignmentInBytes) { + // incorporate base e +/- base && Mask >>> log2(elt) + Node* mask = _igvn.MakeConX(~(-1 << exact_log2(vw))); + Node* xbase = new(_phase->C, 2) CastP2XNode(NULL, align_to_ref_p.base()); + _phase->_igvn.register_new_node_with_optimizer(xbase); + Node* masked_xbase = new (_phase->C, 3) AndXNode(xbase, mask); + _phase->_igvn.register_new_node_with_optimizer(masked_xbase); +#ifdef _LP64 + masked_xbase = new (_phase->C, 2) ConvL2INode(masked_xbase); + _phase->_igvn.register_new_node_with_optimizer(masked_xbase); +#endif + Node* log2_elt = _igvn.intcon(exact_log2(elt_size)); + Node* bref = new (_phase->C, 3) URShiftINode(masked_xbase, log2_elt); + _phase->_igvn.register_new_node_with_optimizer(bref); + _phase->set_ctrl(bref, pre_ctrl); + e = new (_phase->C, 3) AddINode(e, bref); + _phase->_igvn.register_new_node_with_optimizer(e); + _phase->set_ctrl(e, pre_ctrl); + } // compute e +/- lim0 if (scale < 0) { diff --git a/hotspot/src/share/vm/opto/superword.hpp b/hotspot/src/share/vm/opto/superword.hpp index 50937671265..97224e4d7bd 100644 --- a/hotspot/src/share/vm/opto/superword.hpp +++ b/hotspot/src/share/vm/opto/superword.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, 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 @@ -264,7 +264,10 @@ class SuperWord : public ResourceObj { _iv = lp->as_CountedLoop()->phi()->as_Phi(); } int iv_stride() { return lp()->as_CountedLoop()->stride_con(); } - int vector_width_in_bytes() { return Matcher::vector_width_in_bytes(); } + int vector_width_in_bytes(BasicType bt) { + return MIN2(ABS(iv_stride())*type2aelembytes(bt), + Matcher::vector_width_in_bytes(bt)); + } MemNode* align_to_ref() { return _align_to_ref; } void set_align_to_ref(MemNode* m) { _align_to_ref = m; } @@ -298,7 +301,9 @@ class SuperWord : public ResourceObj { // vector element type const Type* velt_type(Node* n) { return _node_info.adr_at(bb_idx(n))->_velt_type; } + BasicType velt_basic_type(Node* n) { return velt_type(n)->array_element_basic_type(); } void set_velt_type(Node* n, const Type* t) { int i = bb_idx(n); grow_node_info(i); _node_info.adr_at(i)->_velt_type = t; } + bool same_velt_type(Node* n1, Node* n2); // my_pack Node_List* my_pack(Node* n) { return !in_bb(n) ? NULL : _node_info.adr_at(bb_idx(n))->_my_pack; } @@ -311,7 +316,9 @@ class SuperWord : public ResourceObj { // Find the adjacent memory references and create pack pairs for them. void find_adjacent_refs(); // Find a memory reference to align the loop induction variable to. - void find_align_to_ref(Node_List &memops); + MemNode* find_align_to_ref(Node_List &memops); + // Calculate loop's iv adjustment for this memory ops. + int get_iv_adjustment(MemNode* mem); // Can the preloop align the reference to position zero in the vector? bool ref_is_alignable(SWPointer& p); // Construct dependency graph. @@ -394,7 +401,7 @@ class SuperWord : public ResourceObj { // (Start, end] half-open range defining which operands are vector void vector_opd_range(Node* n, uint* start, uint* end); // Smallest type containing range of values - static const Type* container_type(const Type* t); + const Type* container_type(Node* n); // Adjust pre-loop limit so that in main loop, a load/store reference // to align_to_ref will be a position zero in the vector. void align_initial_loop_index(MemNode* align_to_ref); @@ -462,6 +469,7 @@ class SWPointer VALUE_OBJ_CLASS_SPEC { Node* base() { return _base; } Node* adr() { return _adr; } + MemNode* mem() { return _mem; } int scale_in_bytes() { return _scale; } Node* invar() { return _invar; } bool negate_invar() { return _negate_invar; } diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp index af118139e2b..30ec5695939 100644 --- a/hotspot/src/share/vm/opto/type.cpp +++ b/hotspot/src/share/vm/opto/type.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -60,6 +60,10 @@ const BasicType Type::_basic_type[Type::lastype] = { T_ILLEGAL, // Tuple T_ARRAY, // Array + T_ILLEGAL, // VectorS + T_ILLEGAL, // VectorD + T_ILLEGAL, // VectorX + T_ILLEGAL, // VectorY T_ADDRESS, // AnyPtr // shows up in factory methods for NULL_PTR T_ADDRESS, // RawPtr @@ -414,6 +418,24 @@ void Type::Initialize_shared(Compile* current) { // get_zero_type() should not happen for T_CONFLICT _zero_type[T_CONFLICT]= NULL; + // Vector predefined types, it needs initialized _const_basic_type[]. + if (Matcher::vector_size_supported(T_BYTE,4)) { + TypeVect::VECTS = TypeVect::make(T_BYTE,4); + } + if (Matcher::vector_size_supported(T_FLOAT,2)) { + TypeVect::VECTD = TypeVect::make(T_FLOAT,2); + } + if (Matcher::vector_size_supported(T_FLOAT,4)) { + TypeVect::VECTX = TypeVect::make(T_FLOAT,4); + } + if (Matcher::vector_size_supported(T_FLOAT,8)) { + TypeVect::VECTY = TypeVect::make(T_FLOAT,8); + } + mreg2type[Op_VecS] = TypeVect::VECTS; + mreg2type[Op_VecD] = TypeVect::VECTD; + mreg2type[Op_VecX] = TypeVect::VECTX; + mreg2type[Op_VecY] = TypeVect::VECTY; + // Restore working type arena. current->set_type_arena(save); current->set_type_dict(NULL); @@ -668,6 +690,10 @@ const Type::TYPES Type::dual_type[Type::lastype] = { Bad, // Tuple - handled in v-call Bad, // Array - handled in v-call + Bad, // VectorS - handled in v-call + Bad, // VectorD - handled in v-call + Bad, // VectorX - handled in v-call + Bad, // VectorY - handled in v-call Bad, // AnyPtr - handled in v-call Bad, // RawPtr - handled in v-call @@ -728,8 +754,8 @@ void Type::dump_on(outputStream *st) const { //------------------------------data------------------------------------------- const char * const Type::msg[Type::lastype] = { "bad","control","top","int:","long:","half", "narrowoop:", - "tuple:", "aryptr", - "anyptr:", "rawptr:", "java:", "inst:", "ary:", "klass:", + "tuple:", "array:", "vectors:", "vectord:", "vectorx:", "vectory:", + "anyptr:", "rawptr:", "java:", "inst:", "aryptr:", "klass:", "func", "abIO", "return_address", "memory", "float_top", "ftcon:", "float", "double_top", "dblcon:", "double", @@ -790,7 +816,7 @@ void Type::typerr( const Type *t ) const { //------------------------------isa_oop_ptr------------------------------------ // Return true if type is an oop pointer type. False for raw pointers. static char isa_oop_ptr_tbl[Type::lastype] = { - 0,0,0,0,0,0,0/*narrowoop*/,0/*tuple*/, 0/*ary*/, + 0,0,0,0,0,0,0/*narrowoop*/,0/*tuple*/, 0/*array*/, 0, 0, 0, 0/*vector*/, 0/*anyptr*/,0/*rawptr*/,1/*OopPtr*/,1/*InstPtr*/,1/*AryPtr*/,1/*KlassPtr*/, 0/*func*/,0,0/*return_address*/,0, /*floats*/0,0,0, /*doubles*/0,0,0, @@ -1926,6 +1952,121 @@ bool TypeAry::ary_must_be_exact() const { return false; } +//==============================TypeVect======================================= +// Convenience common pre-built types. +const TypeVect *TypeVect::VECTS = NULL; // 32-bit vectors +const TypeVect *TypeVect::VECTD = NULL; // 64-bit vectors +const TypeVect *TypeVect::VECTX = NULL; // 128-bit vectors +const TypeVect *TypeVect::VECTY = NULL; // 256-bit vectors + +//------------------------------make------------------------------------------- +const TypeVect* TypeVect::make(const Type *elem, uint length) { + BasicType elem_bt = elem->array_element_basic_type(); + assert(is_java_primitive(elem_bt), "only primitive types in vector"); + assert(length > 1 && is_power_of_2(length), "vector length is power of 2"); + assert(Matcher::vector_size_supported(elem_bt, length), "length in range"); + int size = length * type2aelembytes(elem_bt); + switch (Matcher::vector_ideal_reg(size)) { + case Op_VecS: + return (TypeVect*)(new TypeVectS(elem, length))->hashcons(); + case Op_VecD: + case Op_RegD: + return (TypeVect*)(new TypeVectD(elem, length))->hashcons(); + case Op_VecX: + return (TypeVect*)(new TypeVectX(elem, length))->hashcons(); + case Op_VecY: + return (TypeVect*)(new TypeVectY(elem, length))->hashcons(); + } + ShouldNotReachHere(); + return NULL; +} + +//------------------------------meet------------------------------------------- +// Compute the MEET of two types. It returns a new Type object. +const Type *TypeVect::xmeet( const Type *t ) const { + // Perform a fast test for common case; meeting the same types together. + if( this == t ) return this; // Meeting same type-rep? + + // Current "this->_base" is Vector + switch (t->base()) { // switch on original type + + case Bottom: // Ye Olde Default + return t; + + default: // All else is a mistake + typerr(t); + + case VectorS: + case VectorD: + case VectorX: + case VectorY: { // Meeting 2 vectors? + const TypeVect* v = t->is_vect(); + assert( base() == v->base(), ""); + assert(length() == v->length(), ""); + assert(element_basic_type() == v->element_basic_type(), ""); + return TypeVect::make(_elem->xmeet(v->_elem), _length); + } + case Top: + break; + } + return this; +} + +//------------------------------xdual------------------------------------------ +// Dual: compute field-by-field dual +const Type *TypeVect::xdual() const { + return new TypeVect(base(), _elem->dual(), _length); +} + +//------------------------------eq--------------------------------------------- +// Structural equality check for Type representations +bool TypeVect::eq(const Type *t) const { + const TypeVect *v = t->is_vect(); + return (_elem == v->_elem) && (_length == v->_length); +} + +//------------------------------hash------------------------------------------- +// Type-specific hashing function. +int TypeVect::hash(void) const { + return (intptr_t)_elem + (intptr_t)_length; +} + +//------------------------------singleton-------------------------------------- +// TRUE if Type is a singleton type, FALSE otherwise. Singletons are simple +// constants (Ldi nodes). Vector is singleton if all elements are the same +// constant value (when vector is created with Replicate code). +bool TypeVect::singleton(void) const { +// There is no Con node for vectors yet. +// return _elem->singleton(); + return false; +} + +bool TypeVect::empty(void) const { + return _elem->empty(); +} + +//------------------------------dump2------------------------------------------ +#ifndef PRODUCT +void TypeVect::dump2(Dict &d, uint depth, outputStream *st) const { + switch (base()) { + case VectorS: + st->print("vectors["); break; + case VectorD: + st->print("vectord["); break; + case VectorX: + st->print("vectorx["); break; + case VectorY: + st->print("vectory["); break; + default: + ShouldNotReachHere(); + } + st->print("%d]:{", _length); + _elem->dump2(d, depth, st); + st->print("}"); +} +#endif + + //============================================================================= // Convenience common pre-built types. const TypePtr *TypePtr::NULL_PTR; @@ -4140,7 +4281,7 @@ void TypeFunc::dump2( Dict &d, uint depth, outputStream *st ) const { // Print a 'flattened' signature static const char * const flat_type_msg[Type::lastype] = { "bad","control","top","int","long","_", "narrowoop", - "tuple:", "array:", + "tuple:", "array:", "vectors:", "vectord:", "vectorx:", "vectory:", "ptr", "rawptr", "ptr", "ptr", "ptr", "ptr", "func", "abIO", "return_address", "mem", "float_top", "ftcon:", "flt", diff --git a/hotspot/src/share/vm/opto/type.hpp b/hotspot/src/share/vm/opto/type.hpp index 133ce78f061..a4b5487d78b 100644 --- a/hotspot/src/share/vm/opto/type.hpp +++ b/hotspot/src/share/vm/opto/type.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -51,6 +51,11 @@ class TypeLong; class TypeNarrowOop; class TypeAry; class TypeTuple; +class TypeVect; +class TypeVectS; +class TypeVectD; +class TypeVectX; +class TypeVectY; class TypePtr; class TypeRawPtr; class TypeOopPtr; @@ -78,6 +83,10 @@ public: Tuple, // Method signature or object layout Array, // Array types + VectorS, // 32bit Vector types + VectorD, // 64bit Vector types + VectorX, // 128bit Vector types + VectorY, // 256bit Vector types AnyPtr, // Any old raw, klass, inst, or array pointer RawPtr, // Raw (non-oop) pointers @@ -222,6 +231,8 @@ public: const TypeF *isa_float_constant() const; // Returns NULL if not a FloatCon const TypeTuple *is_tuple() const; // Collection of fields, NOT a pointer const TypeAry *is_ary() const; // Array, NOT array pointer + const TypeVect *is_vect() const; // Vector + const TypeVect *isa_vect() const; // Returns NULL if not a Vector const TypePtr *is_ptr() const; // Asserts it is a ptr type const TypePtr *isa_ptr() const; // Returns NULL if not ptr type const TypeRawPtr *isa_rawptr() const; // NOT Java oop @@ -574,6 +585,69 @@ public: #endif }; +//------------------------------TypeVect--------------------------------------- +// Class of Vector Types +class TypeVect : public Type { + const Type* _elem; // Vector's element type + const uint _length; // Elements in vector (power of 2) + +protected: + TypeVect(TYPES t, const Type* elem, uint length) : Type(t), + _elem(elem), _length(length) {} + +public: + const Type* element_type() const { return _elem; } + BasicType element_basic_type() const { return _elem->array_element_basic_type(); } + uint length() const { return _length; } + uint length_in_bytes() const { + return _length * type2aelembytes(element_basic_type()); + } + + virtual bool eq(const Type *t) const; + virtual int hash() const; // Type specific hashing + virtual bool singleton(void) const; // TRUE if type is a singleton + virtual bool empty(void) const; // TRUE if type is vacuous + + static const TypeVect *make(const BasicType elem_bt, uint length) { + // Use bottom primitive type. + return make(get_const_basic_type(elem_bt), length); + } + // Used directly by Replicate nodes to construct singleton vector. + static const TypeVect *make(const Type* elem, uint length); + + virtual const Type *xmeet( const Type *t) const; + virtual const Type *xdual() const; // Compute dual right now. + + static const TypeVect *VECTS; + static const TypeVect *VECTD; + static const TypeVect *VECTX; + static const TypeVect *VECTY; + +#ifndef PRODUCT + virtual void dump2(Dict &d, uint, outputStream *st) const; // Specialized per-Type dumping +#endif +}; + +class TypeVectS : public TypeVect { + friend class TypeVect; + TypeVectS(const Type* elem, uint length) : TypeVect(VectorS, elem, length) {} +}; + +class TypeVectD : public TypeVect { + friend class TypeVect; + TypeVectD(const Type* elem, uint length) : TypeVect(VectorD, elem, length) {} +}; + +class TypeVectX : public TypeVect { + friend class TypeVect; + TypeVectX(const Type* elem, uint length) : TypeVect(VectorX, elem, length) {} +}; + +class TypeVectY : public TypeVect { + friend class TypeVect; + TypeVectY(const Type* elem, uint length) : TypeVect(VectorY, elem, length) {} +}; + //------------------------------TypePtr---------------------------------------- // Class of machine Pointer Types: raw data, instances or arrays. // If the _base enum is AnyPtr, then this refers to all of the above. @@ -1113,6 +1187,15 @@ inline const TypeAry *Type::is_ary() const { return (TypeAry*)this; } +inline const TypeVect *Type::is_vect() const { + assert( _base >= VectorS && _base <= VectorY, "Not a Vector" ); + return (TypeVect*)this; +} + +inline const TypeVect *Type::isa_vect() const { + return (_base >= VectorS && _base <= VectorY) ? (TypeVect*)this : NULL; +} + inline const TypePtr *Type::is_ptr() const { // AnyPtr is the first Ptr and KlassPtr the last, with no non-ptrs between. assert(_base >= AnyPtr && _base <= KlassPtr, "Not a pointer"); diff --git a/hotspot/src/share/vm/opto/vectornode.cpp b/hotspot/src/share/vm/opto/vectornode.cpp index 885a1c89839..c786754cd08 100644 --- a/hotspot/src/share/vm/opto/vectornode.cpp +++ b/hotspot/src/share/vm/opto/vectornode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, 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 @@ -28,147 +28,16 @@ //------------------------------VectorNode-------------------------------------- -// Return vector type for an element type and vector length. -const Type* VectorNode::vect_type(BasicType elt_bt, uint len) { - assert(len <= VectorNode::max_vlen(elt_bt), "len in range"); - switch(elt_bt) { - case T_BOOLEAN: - case T_BYTE: - switch(len) { - case 2: return TypeInt::CHAR; - case 4: return TypeInt::INT; - case 8: return TypeLong::LONG; - } - break; - case T_CHAR: - case T_SHORT: - switch(len) { - case 2: return TypeInt::INT; - case 4: return TypeLong::LONG; - } - break; - case T_INT: - switch(len) { - case 2: return TypeLong::LONG; - } - break; - case T_LONG: - break; - case T_FLOAT: - switch(len) { - case 2: return Type::DOUBLE; - } - break; - case T_DOUBLE: - break; - } - ShouldNotReachHere(); - return NULL; -} - -// Scalar promotion -VectorNode* VectorNode::scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - assert(vlen <= VectorNode::max_vlen(bt), "vlen in range"); - switch (bt) { - case T_BOOLEAN: - case T_BYTE: - if (vlen == 16) return new (C, 2) Replicate16BNode(s); - if (vlen == 8) return new (C, 2) Replicate8BNode(s); - if (vlen == 4) return new (C, 2) Replicate4BNode(s); - break; - case T_CHAR: - if (vlen == 8) return new (C, 2) Replicate8CNode(s); - if (vlen == 4) return new (C, 2) Replicate4CNode(s); - if (vlen == 2) return new (C, 2) Replicate2CNode(s); - break; - case T_SHORT: - if (vlen == 8) return new (C, 2) Replicate8SNode(s); - if (vlen == 4) return new (C, 2) Replicate4SNode(s); - if (vlen == 2) return new (C, 2) Replicate2SNode(s); - break; - case T_INT: - if (vlen == 4) return new (C, 2) Replicate4INode(s); - if (vlen == 2) return new (C, 2) Replicate2INode(s); - break; - case T_LONG: - if (vlen == 2) return new (C, 2) Replicate2LNode(s); - break; - case T_FLOAT: - if (vlen == 4) return new (C, 2) Replicate4FNode(s); - if (vlen == 2) return new (C, 2) Replicate2FNode(s); - break; - case T_DOUBLE: - if (vlen == 2) return new (C, 2) Replicate2DNode(s); - break; - } - ShouldNotReachHere(); - return NULL; -} - -// Return initial Pack node. Additional operands added with add_opd() calls. -PackNode* PackNode::make(Compile* C, Node* s, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - switch (bt) { - case T_BOOLEAN: - case T_BYTE: - return new (C, 2) PackBNode(s); - case T_CHAR: - return new (C, 2) PackCNode(s); - case T_SHORT: - return new (C, 2) PackSNode(s); - case T_INT: - return new (C, 2) PackINode(s); - case T_LONG: - return new (C, 2) PackLNode(s); - case T_FLOAT: - return new (C, 2) PackFNode(s); - case T_DOUBLE: - return new (C, 2) PackDNode(s); - } - ShouldNotReachHere(); - return NULL; -} - -// Create a binary tree form for Packs. [lo, hi) (half-open) range -Node* PackNode::binaryTreePack(Compile* C, int lo, int hi) { - int ct = hi - lo; - assert(is_power_of_2(ct), "power of 2"); - int mid = lo + ct/2; - Node* n1 = ct == 2 ? in(lo) : binaryTreePack(C, lo, mid); - Node* n2 = ct == 2 ? in(lo+1) : binaryTreePack(C, mid, hi ); - int rslt_bsize = ct * type2aelembytes(elt_basic_type()); - if (bottom_type()->is_floatingpoint()) { - switch (rslt_bsize) { - case 8: return new (C, 3) PackFNode(n1, n2); - case 16: return new (C, 3) PackDNode(n1, n2); - } - } else { - assert(bottom_type()->isa_int() || bottom_type()->isa_long(), "int or long"); - switch (rslt_bsize) { - case 2: return new (C, 3) Pack2x1BNode(n1, n2); - case 4: return new (C, 3) Pack2x2BNode(n1, n2); - case 8: return new (C, 3) PackINode(n1, n2); - case 16: return new (C, 3) PackLNode(n1, n2); - } - } - ShouldNotReachHere(); - return NULL; -} - // Return the vector operator for the specified scalar operation -// and vector length. One use is to check if the code generator +// and vector length. Also used to check if the code generator // supports the vector operation. -int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - if (!(is_power_of_2(vlen) && vlen <= max_vlen(bt))) - return 0; // unimplemented +int VectorNode::opcode(int sopc, uint vlen, BasicType bt) { switch (sopc) { case Op_AddI: switch (bt) { case T_BOOLEAN: case T_BYTE: return Op_AddVB; - case T_CHAR: return Op_AddVC; + case T_CHAR: case T_SHORT: return Op_AddVS; case T_INT: return Op_AddVI; } @@ -186,7 +55,7 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { switch (bt) { case T_BOOLEAN: case T_BYTE: return Op_SubVB; - case T_CHAR: return Op_SubVC; + case T_CHAR: case T_SHORT: return Op_SubVS; case T_INT: return Op_SubVI; } @@ -216,18 +85,18 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { switch (bt) { case T_BOOLEAN: case T_BYTE: return Op_LShiftVB; - case T_CHAR: return Op_LShiftVC; + case T_CHAR: case T_SHORT: return Op_LShiftVS; case T_INT: return Op_LShiftVI; } ShouldNotReachHere(); - case Op_URShiftI: + case Op_RShiftI: switch (bt) { case T_BOOLEAN: - case T_BYTE: return Op_URShiftVB; - case T_CHAR: return Op_URShiftVC; - case T_SHORT: return Op_URShiftVS; - case T_INT: return Op_URShiftVI; + case T_BYTE: return Op_RShiftVB; + case T_CHAR: + case T_SHORT: return Op_RShiftVS; + case T_INT: return Op_RShiftVI; } ShouldNotReachHere(); case Op_AndI: @@ -241,13 +110,14 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { return Op_XorV; case Op_LoadB: + case Op_LoadUB: case Op_LoadUS: case Op_LoadS: case Op_LoadI: case Op_LoadL: case Op_LoadF: case Op_LoadD: - return VectorLoadNode::opcode(sopc, vlen); + return Op_LoadVector; case Op_StoreB: case Op_StoreC: @@ -255,211 +125,170 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { case Op_StoreL: case Op_StoreF: case Op_StoreD: - return VectorStoreNode::opcode(sopc, vlen); + return Op_StoreVector; } return 0; // Unimplemented } -// Helper for above. -int VectorLoadNode::opcode(int sopc, uint vlen) { - switch (sopc) { - case Op_LoadB: - switch (vlen) { - case 2: return 0; // Unimplemented - case 4: return Op_Load4B; - case 8: return Op_Load8B; - case 16: return Op_Load16B; - } - break; - case Op_LoadUS: - switch (vlen) { - case 2: return Op_Load2C; - case 4: return Op_Load4C; - case 8: return Op_Load8C; - } - break; - case Op_LoadS: - switch (vlen) { - case 2: return Op_Load2S; - case 4: return Op_Load4S; - case 8: return Op_Load8S; - } - break; - case Op_LoadI: - switch (vlen) { - case 2: return Op_Load2I; - case 4: return Op_Load4I; - } - break; - case Op_LoadL: - if (vlen == 2) return Op_Load2L; - break; - case Op_LoadF: - switch (vlen) { - case 2: return Op_Load2F; - case 4: return Op_Load4F; - } - break; - case Op_LoadD: - if (vlen == 2) return Op_Load2D; - break; +bool VectorNode::implemented(int opc, uint vlen, BasicType bt) { + if (is_java_primitive(bt) && + (vlen > 1) && is_power_of_2(vlen) && + Matcher::vector_size_supported(bt, vlen)) { + int vopc = VectorNode::opcode(opc, vlen, bt); + return vopc > 0 && Matcher::has_match_rule(vopc); } - return 0; // Unimplemented -} - -// Helper for above -int VectorStoreNode::opcode(int sopc, uint vlen) { - switch (sopc) { - case Op_StoreB: - switch (vlen) { - case 2: return 0; // Unimplemented - case 4: return Op_Store4B; - case 8: return Op_Store8B; - case 16: return Op_Store16B; - } - break; - case Op_StoreC: - switch (vlen) { - case 2: return Op_Store2C; - case 4: return Op_Store4C; - case 8: return Op_Store8C; - } - break; - case Op_StoreI: - switch (vlen) { - case 2: return Op_Store2I; - case 4: return Op_Store4I; - } - break; - case Op_StoreL: - if (vlen == 2) return Op_Store2L; - break; - case Op_StoreF: - switch (vlen) { - case 2: return Op_Store2F; - case 4: return Op_Store4F; - } - break; - case Op_StoreD: - if (vlen == 2) return Op_Store2D; - break; - } - return 0; // Unimplemented + return false; } // Return the vector version of a scalar operation node. -VectorNode* VectorNode::make(Compile* C, int sopc, Node* n1, Node* n2, uint vlen, const Type* opd_t) { - int vopc = opcode(sopc, vlen, opd_t); +VectorNode* VectorNode::make(Compile* C, int opc, Node* n1, Node* n2, uint vlen, BasicType bt) { + const TypeVect* vt = TypeVect::make(bt, vlen); + int vopc = VectorNode::opcode(opc, vlen, bt); switch (vopc) { - case Op_AddVB: return new (C, 3) AddVBNode(n1, n2, vlen); - case Op_AddVC: return new (C, 3) AddVCNode(n1, n2, vlen); - case Op_AddVS: return new (C, 3) AddVSNode(n1, n2, vlen); - case Op_AddVI: return new (C, 3) AddVINode(n1, n2, vlen); - case Op_AddVL: return new (C, 3) AddVLNode(n1, n2, vlen); - case Op_AddVF: return new (C, 3) AddVFNode(n1, n2, vlen); - case Op_AddVD: return new (C, 3) AddVDNode(n1, n2, vlen); + case Op_AddVB: return new (C, 3) AddVBNode(n1, n2, vt); + case Op_AddVS: return new (C, 3) AddVSNode(n1, n2, vt); + case Op_AddVI: return new (C, 3) AddVINode(n1, n2, vt); + case Op_AddVL: return new (C, 3) AddVLNode(n1, n2, vt); + case Op_AddVF: return new (C, 3) AddVFNode(n1, n2, vt); + case Op_AddVD: return new (C, 3) AddVDNode(n1, n2, vt); - case Op_SubVB: return new (C, 3) SubVBNode(n1, n2, vlen); - case Op_SubVC: return new (C, 3) SubVCNode(n1, n2, vlen); - case Op_SubVS: return new (C, 3) SubVSNode(n1, n2, vlen); - case Op_SubVI: return new (C, 3) SubVINode(n1, n2, vlen); - case Op_SubVL: return new (C, 3) SubVLNode(n1, n2, vlen); - case Op_SubVF: return new (C, 3) SubVFNode(n1, n2, vlen); - case Op_SubVD: return new (C, 3) SubVDNode(n1, n2, vlen); + case Op_SubVB: return new (C, 3) SubVBNode(n1, n2, vt); + case Op_SubVS: return new (C, 3) SubVSNode(n1, n2, vt); + case Op_SubVI: return new (C, 3) SubVINode(n1, n2, vt); + case Op_SubVL: return new (C, 3) SubVLNode(n1, n2, vt); + case Op_SubVF: return new (C, 3) SubVFNode(n1, n2, vt); + case Op_SubVD: return new (C, 3) SubVDNode(n1, n2, vt); - case Op_MulVF: return new (C, 3) MulVFNode(n1, n2, vlen); - case Op_MulVD: return new (C, 3) MulVDNode(n1, n2, vlen); + case Op_MulVF: return new (C, 3) MulVFNode(n1, n2, vt); + case Op_MulVD: return new (C, 3) MulVDNode(n1, n2, vt); - case Op_DivVF: return new (C, 3) DivVFNode(n1, n2, vlen); - case Op_DivVD: return new (C, 3) DivVDNode(n1, n2, vlen); + case Op_DivVF: return new (C, 3) DivVFNode(n1, n2, vt); + case Op_DivVD: return new (C, 3) DivVDNode(n1, n2, vt); - case Op_LShiftVB: return new (C, 3) LShiftVBNode(n1, n2, vlen); - case Op_LShiftVC: return new (C, 3) LShiftVCNode(n1, n2, vlen); - case Op_LShiftVS: return new (C, 3) LShiftVSNode(n1, n2, vlen); - case Op_LShiftVI: return new (C, 3) LShiftVINode(n1, n2, vlen); + case Op_LShiftVB: return new (C, 3) LShiftVBNode(n1, n2, vt); + case Op_LShiftVS: return new (C, 3) LShiftVSNode(n1, n2, vt); + case Op_LShiftVI: return new (C, 3) LShiftVINode(n1, n2, vt); - case Op_URShiftVB: return new (C, 3) URShiftVBNode(n1, n2, vlen); - case Op_URShiftVC: return new (C, 3) URShiftVCNode(n1, n2, vlen); - case Op_URShiftVS: return new (C, 3) URShiftVSNode(n1, n2, vlen); - case Op_URShiftVI: return new (C, 3) URShiftVINode(n1, n2, vlen); + case Op_RShiftVB: return new (C, 3) RShiftVBNode(n1, n2, vt); + case Op_RShiftVS: return new (C, 3) RShiftVSNode(n1, n2, vt); + case Op_RShiftVI: return new (C, 3) RShiftVINode(n1, n2, vt); - case Op_AndV: return new (C, 3) AndVNode(n1, n2, vlen, opd_t->array_element_basic_type()); - case Op_OrV: return new (C, 3) OrVNode (n1, n2, vlen, opd_t->array_element_basic_type()); - case Op_XorV: return new (C, 3) XorVNode(n1, n2, vlen, opd_t->array_element_basic_type()); + case Op_AndV: return new (C, 3) AndVNode(n1, n2, vt); + case Op_OrV: return new (C, 3) OrVNode (n1, n2, vt); + case Op_XorV: return new (C, 3) XorVNode(n1, n2, vt); } ShouldNotReachHere(); return NULL; + +} + +// Scalar promotion +VectorNode* VectorNode::scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t) { + BasicType bt = opd_t->array_element_basic_type(); + const TypeVect* vt = opd_t->singleton() ? TypeVect::make(opd_t, vlen) + : TypeVect::make(bt, vlen); + switch (bt) { + case T_BOOLEAN: + case T_BYTE: + return new (C, 2) ReplicateBNode(s, vt); + case T_CHAR: + case T_SHORT: + return new (C, 2) ReplicateSNode(s, vt); + case T_INT: + return new (C, 2) ReplicateINode(s, vt); + case T_LONG: + return new (C, 2) ReplicateLNode(s, vt); + case T_FLOAT: + return new (C, 2) ReplicateFNode(s, vt); + case T_DOUBLE: + return new (C, 2) ReplicateDNode(s, vt); + } + ShouldNotReachHere(); + return NULL; +} + +// Return initial Pack node. Additional operands added with add_opd() calls. +PackNode* PackNode::make(Compile* C, Node* s, uint vlen, BasicType bt) { + const TypeVect* vt = TypeVect::make(bt, vlen); + switch (bt) { + case T_BOOLEAN: + case T_BYTE: + return new (C, vlen+1) PackBNode(s, vt); + case T_CHAR: + case T_SHORT: + return new (C, vlen+1) PackSNode(s, vt); + case T_INT: + return new (C, vlen+1) PackINode(s, vt); + case T_LONG: + return new (C, vlen+1) PackLNode(s, vt); + case T_FLOAT: + return new (C, vlen+1) PackFNode(s, vt); + case T_DOUBLE: + return new (C, vlen+1) PackDNode(s, vt); + } + ShouldNotReachHere(); + return NULL; +} + +// Create a binary tree form for Packs. [lo, hi) (half-open) range +Node* PackNode::binaryTreePack(Compile* C, int lo, int hi) { + int ct = hi - lo; + assert(is_power_of_2(ct), "power of 2"); + if (ct == 2) { + PackNode* pk = PackNode::make(C, in(lo), 2, vect_type()->element_basic_type()); + pk->add_opd(1, in(lo+1)); + return pk; + + } else { + int mid = lo + ct/2; + Node* n1 = binaryTreePack(C, lo, mid); + Node* n2 = binaryTreePack(C, mid, hi ); + + BasicType bt = vect_type()->element_basic_type(); + switch (bt) { + case T_BOOLEAN: + case T_BYTE: + return new (C, 3) PackSNode(n1, n2, TypeVect::make(T_SHORT, 2)); + case T_CHAR: + case T_SHORT: + return new (C, 3) PackINode(n1, n2, TypeVect::make(T_INT, 2)); + case T_INT: + return new (C, 3) PackLNode(n1, n2, TypeVect::make(T_LONG, 2)); + case T_LONG: + return new (C, 3) Pack2LNode(n1, n2, TypeVect::make(T_LONG, 2)); + case T_FLOAT: + return new (C, 3) PackDNode(n1, n2, TypeVect::make(T_DOUBLE, 2)); + case T_DOUBLE: + return new (C, 3) Pack2DNode(n1, n2, TypeVect::make(T_DOUBLE, 2)); + } + ShouldNotReachHere(); + } + return NULL; } // Return the vector version of a scalar load node. -VectorLoadNode* VectorLoadNode::make(Compile* C, int opc, Node* ctl, Node* mem, - Node* adr, const TypePtr* atyp, uint vlen) { - int vopc = opcode(opc, vlen); - - switch(vopc) { - case Op_Load16B: return new (C, 3) Load16BNode(ctl, mem, adr, atyp); - case Op_Load8B: return new (C, 3) Load8BNode(ctl, mem, adr, atyp); - case Op_Load4B: return new (C, 3) Load4BNode(ctl, mem, adr, atyp); - - case Op_Load8C: return new (C, 3) Load8CNode(ctl, mem, adr, atyp); - case Op_Load4C: return new (C, 3) Load4CNode(ctl, mem, adr, atyp); - case Op_Load2C: return new (C, 3) Load2CNode(ctl, mem, adr, atyp); - - case Op_Load8S: return new (C, 3) Load8SNode(ctl, mem, adr, atyp); - case Op_Load4S: return new (C, 3) Load4SNode(ctl, mem, adr, atyp); - case Op_Load2S: return new (C, 3) Load2SNode(ctl, mem, adr, atyp); - - case Op_Load4I: return new (C, 3) Load4INode(ctl, mem, adr, atyp); - case Op_Load2I: return new (C, 3) Load2INode(ctl, mem, adr, atyp); - - case Op_Load2L: return new (C, 3) Load2LNode(ctl, mem, adr, atyp); - - case Op_Load4F: return new (C, 3) Load4FNode(ctl, mem, adr, atyp); - case Op_Load2F: return new (C, 3) Load2FNode(ctl, mem, adr, atyp); - - case Op_Load2D: return new (C, 3) Load2DNode(ctl, mem, adr, atyp); - } - ShouldNotReachHere(); +LoadVectorNode* LoadVectorNode::make(Compile* C, int opc, Node* ctl, Node* mem, + Node* adr, const TypePtr* atyp, uint vlen, BasicType bt) { + const TypeVect* vt = TypeVect::make(bt, vlen); + return new (C, 3) LoadVectorNode(ctl, mem, adr, atyp, vt); return NULL; } // Return the vector version of a scalar store node. -VectorStoreNode* VectorStoreNode::make(Compile* C, int opc, Node* ctl, Node* mem, +StoreVectorNode* StoreVectorNode::make(Compile* C, int opc, Node* ctl, Node* mem, Node* adr, const TypePtr* atyp, Node* val, uint vlen) { - int vopc = opcode(opc, vlen); - - switch(vopc) { - case Op_Store16B: return new (C, 4) Store16BNode(ctl, mem, adr, atyp, val); - case Op_Store8B: return new (C, 4) Store8BNode(ctl, mem, adr, atyp, val); - case Op_Store4B: return new (C, 4) Store4BNode(ctl, mem, adr, atyp, val); - - case Op_Store8C: return new (C, 4) Store8CNode(ctl, mem, adr, atyp, val); - case Op_Store4C: return new (C, 4) Store4CNode(ctl, mem, adr, atyp, val); - case Op_Store2C: return new (C, 4) Store2CNode(ctl, mem, adr, atyp, val); - - case Op_Store4I: return new (C, 4) Store4INode(ctl, mem, adr, atyp, val); - case Op_Store2I: return new (C, 4) Store2INode(ctl, mem, adr, atyp, val); - - case Op_Store2L: return new (C, 4) Store2LNode(ctl, mem, adr, atyp, val); - - case Op_Store4F: return new (C, 4) Store4FNode(ctl, mem, adr, atyp, val); - case Op_Store2F: return new (C, 4) Store2FNode(ctl, mem, adr, atyp, val); - - case Op_Store2D: return new (C, 4) Store2DNode(ctl, mem, adr, atyp, val); - } - ShouldNotReachHere(); - return NULL; + return new (C, 4) StoreVectorNode(ctl, mem, adr, atyp, val); } // Extract a scalar element of vector. -Node* ExtractNode::make(Compile* C, Node* v, uint position, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - assert(position < VectorNode::max_vlen(bt), "pos in range"); +Node* ExtractNode::make(Compile* C, Node* v, uint position, BasicType bt) { + assert((int)position < Matcher::max_vector_size(bt), "pos in range"); ConINode* pos = ConINode::make(C, (int)position); switch (bt) { case T_BOOLEAN: + return new (C, 3) ExtractUBNode(v, pos); case T_BYTE: return new (C, 3) ExtractBNode(v, pos); case T_CHAR: @@ -478,3 +307,4 @@ Node* ExtractNode::make(Compile* C, Node* v, uint position, const Type* opd_t) { ShouldNotReachHere(); return NULL; } + diff --git a/hotspot/src/share/vm/opto/vectornode.hpp b/hotspot/src/share/vm/opto/vectornode.hpp index 7d1905c7fb5..602ee94c54c 100644 --- a/hotspot/src/share/vm/opto/vectornode.hpp +++ b/hotspot/src/share/vm/opto/vectornode.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, 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 @@ -31,48 +31,32 @@ //------------------------------VectorNode-------------------------------------- // Vector Operation -class VectorNode : public Node { - virtual uint size_of() const { return sizeof(*this); } - protected: - uint _length; // vector length - virtual BasicType elt_basic_type() const = 0; // Vector element basic type - - static const Type* vect_type(BasicType elt_bt, uint len); - static const Type* vect_type(const Type* elt_type, uint len) { - return vect_type(elt_type->array_element_basic_type(), len); - } - +class VectorNode : public TypeNode { public: - friend class VectorLoadNode; // For vect_type - friend class VectorStoreNode; // ditto. - VectorNode(Node* n1, uint vlen) : Node(NULL, n1), _length(vlen) { + VectorNode(Node* n1, const TypeVect* vt) : TypeNode(vt, 2) { init_class_id(Class_Vector); + init_req(1, n1); } - VectorNode(Node* n1, Node* n2, uint vlen) : Node(NULL, n1, n2), _length(vlen) { + VectorNode(Node* n1, Node* n2, const TypeVect* vt) : TypeNode(vt, 3) { init_class_id(Class_Vector); + init_req(1, n1); + init_req(2, n2); } + + const TypeVect* vect_type() const { return type()->is_vect(); } + uint length() const { return vect_type()->length(); } // Vector length + virtual int Opcode() const; - uint length() const { return _length; } // Vector length - - static uint max_vlen(BasicType bt) { // max vector length - return (uint)(Matcher::vector_width_in_bytes() / type2aelembytes(bt)); - } - - // Element and vector type - const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); } - const Type* vect_type() const { return vect_type(elt_basic_type(), length()); } - - virtual const Type *bottom_type() const { return vect_type(); } - virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); } - - // Vector opcode from scalar opcode - static int opcode(int sopc, uint vlen, const Type* opd_t); + virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(vect_type()->length_in_bytes()); } static VectorNode* scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t); - static VectorNode* make(Compile* C, int sopc, Node* n1, Node* n2, uint vlen, const Type* elt_t); + static VectorNode* make(Compile* C, int opc, Node* n1, Node* n2, uint vlen, BasicType bt); + + static int opcode(int opc, uint vlen, BasicType bt); + static bool implemented(int opc, uint vlen, BasicType bt); }; @@ -81,981 +65,393 @@ class VectorNode : public Node { //------------------------------AddVBNode--------------------------------------- // Vector add byte class AddVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - AddVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------AddVCNode--------------------------------------- -// Vector add char -class AddVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - AddVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVSNode--------------------------------------- -// Vector add short +// Vector add char/short class AddVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - AddVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVINode--------------------------------------- // Vector add int class AddVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - AddVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVLNode--------------------------------------- // Vector add long class AddVLNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } public: - AddVLNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVFNode--------------------------------------- // Vector add float class AddVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - AddVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVDNode--------------------------------------- // Vector add double class AddVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - AddVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVBNode--------------------------------------- // Vector subtract byte class SubVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - SubVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------SubVCNode--------------------------------------- -// Vector subtract char -class SubVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - SubVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVSNode--------------------------------------- // Vector subtract short class SubVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - SubVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVINode--------------------------------------- // Vector subtract int class SubVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - SubVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVLNode--------------------------------------- // Vector subtract long class SubVLNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } public: - SubVLNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVFNode--------------------------------------- // Vector subtract float class SubVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - SubVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVDNode--------------------------------------- // Vector subtract double class SubVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - SubVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------MulVFNode--------------------------------------- // Vector multiply float class MulVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - MulVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + MulVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------MulVDNode--------------------------------------- // Vector multiply double class MulVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - MulVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + MulVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------DivVFNode--------------------------------------- // Vector divide float class DivVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - DivVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + DivVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------DivVDNode--------------------------------------- // Vector Divide double class DivVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - DivVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + DivVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------LShiftVBNode--------------------------------------- // Vector lshift byte class LShiftVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - LShiftVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------LShiftVCNode--------------------------------------- -// Vector lshift chars -class LShiftVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - LShiftVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + LShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------LShiftVSNode--------------------------------------- // Vector lshift shorts class LShiftVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - LShiftVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + LShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------LShiftVINode--------------------------------------- // Vector lshift ints class LShiftVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - LShiftVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + LShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------URShiftVBNode--------------------------------------- // Vector urshift bytes -class URShiftVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +class RShiftVBNode : public VectorNode { public: - URShiftVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------URShiftVCNode--------------------------------------- -// Vector urshift char -class URShiftVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - URShiftVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + RShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------URShiftVSNode--------------------------------------- // Vector urshift shorts -class URShiftVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } +class RShiftVSNode : public VectorNode { public: - URShiftVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + RShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------URShiftVINode--------------------------------------- // Vector urshift ints -class URShiftVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } +class RShiftVINode : public VectorNode { public: - URShiftVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + RShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AndVNode--------------------------------------- // Vector and class AndVNode : public VectorNode { - protected: - BasicType _bt; - virtual BasicType elt_basic_type() const { return _bt; } public: - AndVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {} + AndVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------OrVNode--------------------------------------- // Vector or class OrVNode : public VectorNode { - protected: - BasicType _bt; - virtual BasicType elt_basic_type() const { return _bt; } public: - OrVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {} + OrVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------XorVNode--------------------------------------- // Vector xor class XorVNode : public VectorNode { - protected: - BasicType _bt; - virtual BasicType elt_basic_type() const { return _bt; } public: - XorVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {} + XorVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; -//================================= M E M O R Y ================================== - - -//------------------------------VectorLoadNode-------------------------------------- -// Vector Load from memory -class VectorLoadNode : public LoadNode { - virtual uint size_of() const { return sizeof(*this); } - - protected: - virtual BasicType elt_basic_type() const = 0; // Vector element basic type - // For use in constructor - static const Type* vect_type(const Type* elt_type, uint len) { - return VectorNode::vect_type(elt_type, len); - } +//================================= M E M O R Y =============================== +//------------------------------LoadVectorNode--------------------------------- +// Load Vector from memory +class LoadVectorNode : public LoadNode { public: - VectorLoadNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *rt) - : LoadNode(c,mem,adr,at,rt) { - init_class_id(Class_VectorLoad); + LoadVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt) + : LoadNode(c, mem, adr, at, vt) { + init_class_id(Class_LoadVector); } + + const TypeVect* vect_type() const { return type()->is_vect(); } + uint length() const { return vect_type()->length(); } // Vector length + virtual int Opcode() const; - virtual uint length() const = 0; // Vector length - - // Element and vector type - const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); } - const Type* vect_type() const { return VectorNode::vect_type(elt_basic_type(), length()); } - - virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); } + virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); } virtual BasicType memory_type() const { return T_VOID; } - virtual int memory_size() const { return length()*type2aelembytes(elt_basic_type()); } + virtual int memory_size() const { return vect_type()->length_in_bytes(); } - // Vector opcode from scalar opcode - static int opcode(int sopc, uint vlen); + virtual int store_Opcode() const { return Op_StoreVector; } - static VectorLoadNode* make(Compile* C, int opc, Node* ctl, Node* mem, - Node* adr, const TypePtr* atyp, uint vlen); + static LoadVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem, + Node* adr, const TypePtr* atyp, uint vlen, BasicType bt); }; -//------------------------------Load16BNode-------------------------------------- -// Vector load of 16 bytes (8bits signed) from memory -class Load16BNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------StoreVectorNode-------------------------------- +// Store Vector to memory +class StoreVectorNode : public StoreNode { public: - Load16BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,16)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store16B; } - virtual uint length() const { return 16; } -}; - -//------------------------------Load8BNode-------------------------------------- -// Vector load of 8 bytes (8bits signed) from memory -class Load8BNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Load8BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store8B; } - virtual uint length() const { return 8; } -}; - -//------------------------------Load4BNode-------------------------------------- -// Vector load of 4 bytes (8bits signed) from memory -class Load4BNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Load4BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4B; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load8CNode-------------------------------------- -// Vector load of 8 chars (16bits unsigned) from memory -class Load8CNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Load8CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store8C; } - virtual uint length() const { return 8; } -}; - -//------------------------------Load4CNode-------------------------------------- -// Vector load of 4 chars (16bits unsigned) from memory -class Load4CNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Load4CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4C; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2CNode-------------------------------------- -// Vector load of 2 chars (16bits unsigned) from memory -class Load2CNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Load2CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2C; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load8SNode-------------------------------------- -// Vector load of 8 shorts (16bits signed) from memory -class Load8SNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Load8SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store8C; } - virtual uint length() const { return 8; } -}; - -//------------------------------Load4SNode-------------------------------------- -// Vector load of 4 shorts (16bits signed) from memory -class Load4SNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Load4SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4C; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2SNode-------------------------------------- -// Vector load of 2 shorts (16bits signed) from memory -class Load2SNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Load2SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2C; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load4INode-------------------------------------- -// Vector load of 4 integers (32bits signed) from memory -class Load4INode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Load4INode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::INT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4I; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2INode-------------------------------------- -// Vector load of 2 integers (32bits signed) from memory -class Load2INode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Load2INode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::INT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2I; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load2LNode-------------------------------------- -// Vector load of 2 longs (64bits signed) from memory -class Load2LNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } - public: - Load2LNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeLong *tl = TypeLong::LONG) - : VectorLoadNode(c,mem,adr,at,vect_type(tl,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2L; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load4FNode-------------------------------------- -// Vector load of 4 floats (32bits) from memory -class Load4FNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Load4FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::FLOAT) - : VectorLoadNode(c,mem,adr,at,vect_type(t,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4F; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2FNode-------------------------------------- -// Vector load of 2 floats (32bits) from memory -class Load2FNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Load2FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::FLOAT) - : VectorLoadNode(c,mem,adr,at,vect_type(t,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2F; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load2DNode-------------------------------------- -// Vector load of 2 doubles (64bits) from memory -class Load2DNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } - public: - Load2DNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::DOUBLE) - : VectorLoadNode(c,mem,adr,at,vect_type(t,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2D; } - virtual uint length() const { return 2; } -}; - - -//------------------------------VectorStoreNode-------------------------------------- -// Vector Store to memory -class VectorStoreNode : public StoreNode { - virtual uint size_of() const { return sizeof(*this); } - - protected: - virtual BasicType elt_basic_type() const = 0; // Vector element basic type - - public: - VectorStoreNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : StoreNode(c,mem,adr,at,val) { - init_class_id(Class_VectorStore); + StoreVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) + : StoreNode(c, mem, adr, at, val) { + assert(val->is_Vector() || val->is_LoadVector(), "sanity"); + init_class_id(Class_StoreVector); } + + const TypeVect* vect_type() const { return in(MemNode::ValueIn)->bottom_type()->is_vect(); } + uint length() const { return vect_type()->length(); } // Vector length + virtual int Opcode() const; - virtual uint length() const = 0; // Vector length - - // Element and vector type - const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); } - const Type* vect_type() const { return VectorNode::vect_type(elt_basic_type(), length()); } - - virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); } + virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); } virtual BasicType memory_type() const { return T_VOID; } - virtual int memory_size() const { return length()*type2aelembytes(elt_basic_type()); } + virtual int memory_size() const { return vect_type()->length_in_bytes(); } - // Vector opcode from scalar opcode - static int opcode(int sopc, uint vlen); - - static VectorStoreNode* make(Compile* C, int opc, Node* ctl, Node* mem, + static StoreVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem, Node* adr, const TypePtr* atyp, Node* val, uint vlen); }; -//------------------------------Store16BNode-------------------------------------- -// Vector store of 16 bytes (8bits signed) to memory -class Store16BNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Store16BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 16; } -}; -//------------------------------Store8BNode-------------------------------------- -// Vector store of 8 bytes (8bits signed) to memory -class Store8BNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Store8BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 8; } -}; +//=========================Promote_Scalar_to_Vector============================ -//------------------------------Store4BNode-------------------------------------- -// Vector store of 4 bytes (8bits signed) to memory -class Store4BNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------ReplicateBNode--------------------------------- +// Replicate byte scalar to be vector +class ReplicateBNode : public VectorNode { public: - Store4BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store8CNode-------------------------------------- -// Vector store of 8 chars (16bits signed/unsigned) to memory -class Store8CNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Store8CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 8; } -}; - -//------------------------------Store4CNode-------------------------------------- -// Vector store of 4 chars (16bits signed/unsigned) to memory -class Store4CNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Store4CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store2CNode-------------------------------------- -// Vector store of 2 chars (16bits signed/unsigned) to memory -class Store2CNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Store2CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store4INode-------------------------------------- -// Vector store of 4 integers (32bits signed) to memory -class Store4INode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Store4INode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store2INode-------------------------------------- -// Vector store of 2 integers (32bits signed) to memory -class Store2INode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Store2INode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store2LNode-------------------------------------- -// Vector store of 2 longs (64bits signed) to memory -class Store2LNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } - public: - Store2LNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store4FNode-------------------------------------- -// Vector store of 4 floats (32bits) to memory -class Store4FNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Store4FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store2FNode-------------------------------------- -// Vector store of 2 floats (32bits) to memory -class Store2FNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Store2FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store2DNode-------------------------------------- -// Vector store of 2 doubles (64bits) to memory -class Store2DNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } - public: - Store2DNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//=========================Promote_Scalar_to_Vector==================================== - -//------------------------------Replicate16BNode--------------------------------------- -// Replicate byte scalar to be vector of 16 bytes -class Replicate16BNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Replicate16BNode(Node* in1) : VectorNode(in1, 16) {} + ReplicateBNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate8BNode--------------------------------------- -// Replicate byte scalar to be vector of 8 bytes -class Replicate8BNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------ReplicateSNode--------------------------------- +// Replicate short scalar to be vector +class ReplicateSNode : public VectorNode { public: - Replicate8BNode(Node* in1) : VectorNode(in1, 8) {} + ReplicateSNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate4BNode--------------------------------------- -// Replicate byte scalar to be vector of 4 bytes -class Replicate4BNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------ReplicateINode--------------------------------- +// Replicate int scalar to be vector +class ReplicateINode : public VectorNode { public: - Replicate4BNode(Node* in1) : VectorNode(in1, 4) {} + ReplicateINode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate8CNode--------------------------------------- -// Replicate char scalar to be vector of 8 chars -class Replicate8CNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } +//------------------------------ReplicateLNode--------------------------------- +// Replicate long scalar to be vector +class ReplicateLNode : public VectorNode { public: - Replicate8CNode(Node* in1) : VectorNode(in1, 8) {} + ReplicateLNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate4CNode--------------------------------------- -// Replicate char scalar to be vector of 4 chars -class Replicate4CNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } +//------------------------------ReplicateFNode--------------------------------- +// Replicate float scalar to be vector +class ReplicateFNode : public VectorNode { public: - Replicate4CNode(Node* in1) : VectorNode(in1, 4) {} + ReplicateFNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate2CNode--------------------------------------- -// Replicate char scalar to be vector of 2 chars -class Replicate2CNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } +//------------------------------ReplicateDNode--------------------------------- +// Replicate double scalar to be vector +class ReplicateDNode : public VectorNode { public: - Replicate2CNode(Node* in1) : VectorNode(in1, 2) {} + ReplicateDNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate8SNode--------------------------------------- -// Replicate short scalar to be vector of 8 shorts -class Replicate8SNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Replicate8SNode(Node* in1) : VectorNode(in1, 8) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate4SNode--------------------------------------- -// Replicate short scalar to be vector of 4 shorts -class Replicate4SNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Replicate4SNode(Node* in1) : VectorNode(in1, 4) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2SNode--------------------------------------- -// Replicate short scalar to be vector of 2 shorts -class Replicate2SNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Replicate2SNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate4INode--------------------------------------- -// Replicate int scalar to be vector of 4 ints -class Replicate4INode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Replicate4INode(Node* in1) : VectorNode(in1, 4) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2INode--------------------------------------- -// Replicate int scalar to be vector of 2 ints -class Replicate2INode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Replicate2INode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2LNode--------------------------------------- -// Replicate long scalar to be vector of 2 longs -class Replicate2LNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } - public: - Replicate2LNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate4FNode--------------------------------------- -// Replicate float scalar to be vector of 4 floats -class Replicate4FNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Replicate4FNode(Node* in1) : VectorNode(in1, 4) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2FNode--------------------------------------- -// Replicate float scalar to be vector of 2 floats -class Replicate2FNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Replicate2FNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2DNode--------------------------------------- -// Replicate double scalar to be vector of 2 doubles -class Replicate2DNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } - public: - Replicate2DNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//========================Pack_Scalars_into_a_Vector============================== +//========================Pack_Scalars_into_a_Vector=========================== //------------------------------PackNode--------------------------------------- // Pack parent class (not for code generation). class PackNode : public VectorNode { public: - PackNode(Node* in1) : VectorNode(in1, 1) {} - PackNode(Node* in1, Node* n2) : VectorNode(in1, n2, 2) {} + PackNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} + PackNode(Node* in1, Node* n2, const TypeVect* vt) : VectorNode(in1, n2, vt) {} virtual int Opcode() const; - void add_opd(Node* n) { - add_req(n); - _length++; - assert(_length == req() - 1, "vector length matches edge count"); + void add_opd(uint i, Node* n) { + init_req(i+1, n); } // Create a binary tree form for Packs. [lo, hi) (half-open) range Node* binaryTreePack(Compile* C, int lo, int hi); - static PackNode* make(Compile* C, Node* s, const Type* elt_t); + static PackNode* make(Compile* C, Node* s, uint vlen, BasicType bt); }; //------------------------------PackBNode--------------------------------------- // Pack byte scalars into vector class PackBNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - PackBNode(Node* in1) : PackNode(in1) {} - virtual int Opcode() const; -}; - -//------------------------------PackCNode--------------------------------------- -// Pack char scalars into vector -class PackCNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - PackCNode(Node* in1) : PackNode(in1) {} + PackBNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} virtual int Opcode() const; }; //------------------------------PackSNode--------------------------------------- // Pack short scalars into a vector class PackSNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - PackSNode(Node* in1) : PackNode(in1) {} + PackSNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackSNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackINode--------------------------------------- // Pack integer scalars into a vector class PackINode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - PackINode(Node* in1) : PackNode(in1) {} - PackINode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackINode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackINode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackLNode--------------------------------------- // Pack long scalars into a vector class PackLNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } public: - PackLNode(Node* in1) : PackNode(in1) {} - PackLNode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackLNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackLNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} + virtual int Opcode() const; +}; + +//------------------------------Pack2LNode-------------------------------------- +// Pack 2 long scalars into a vector +class Pack2LNode : public PackNode { + public: + Pack2LNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackFNode--------------------------------------- // Pack float scalars into vector class PackFNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - PackFNode(Node* in1) : PackNode(in1) {} - PackFNode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackFNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackFNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackDNode--------------------------------------- // Pack double scalars into a vector class PackDNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - PackDNode(Node* in1) : PackNode(in1) {} - PackDNode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackDNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackDNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; -// The Pack2xN nodes assist code generation. They are created from -// Pack4C, etc. nodes in final_graph_reshape in the form of a -// balanced, binary tree. - -//------------------------------Pack2x1BNode----------------------------------------- -// Pack 2 1-byte integers into vector of 2 bytes -class Pack2x1BNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------Pack2DNode-------------------------------------- +// Pack 2 double scalars into a vector +class Pack2DNode : public PackNode { public: - Pack2x1BNode(Node *in1, Node* in2) : PackNode(in1, in2) {} + Pack2DNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; - virtual uint ideal_reg() const { return Op_RegI; } }; -//------------------------------Pack2x2BNode--------------------------------------- -// Pack 2 2-byte integers into vector of 4 bytes -class Pack2x2BNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Pack2x2BNode(Node *in1, Node* in2) : PackNode(in1, in2) {} - virtual int Opcode() const; - virtual uint ideal_reg() const { return Op_RegI; } -}; //========================Extract_Scalar_from_Vector=============================== @@ -1069,7 +465,7 @@ class ExtractNode : public Node { virtual int Opcode() const; uint pos() const { return in(2)->get_int(); } - static Node* make(Compile* C, Node* v, uint position, const Type* opd_t); + static Node* make(Compile* C, Node* v, uint position, BasicType bt); }; //------------------------------ExtractBNode--------------------------------------- @@ -1082,6 +478,16 @@ class ExtractBNode : public ExtractNode { virtual uint ideal_reg() const { return Op_RegI; } }; +//------------------------------ExtractUBNode-------------------------------------- +// Extract a boolean from a vector at position "pos" +class ExtractUBNode : public ExtractNode { + public: + ExtractUBNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {} + virtual int Opcode() const; + virtual const Type *bottom_type() const { return TypeInt::INT; } + virtual uint ideal_reg() const { return Op_RegI; } +}; + //------------------------------ExtractCNode--------------------------------------- // Extract a char from a vector at position "pos" class ExtractCNode : public ExtractNode { diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index 7045fa8b3ce..67d3391da22 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -1944,14 +1944,12 @@ static inline uint64_t cast_uint64_t(size_t x) declare_c2_type(ReverseBytesLNode, Node) \ declare_c2_type(VectorNode, Node) \ declare_c2_type(AddVBNode, VectorNode) \ - declare_c2_type(AddVCNode, VectorNode) \ declare_c2_type(AddVSNode, VectorNode) \ declare_c2_type(AddVINode, VectorNode) \ declare_c2_type(AddVLNode, VectorNode) \ declare_c2_type(AddVFNode, VectorNode) \ declare_c2_type(AddVDNode, VectorNode) \ declare_c2_type(SubVBNode, VectorNode) \ - declare_c2_type(SubVCNode, VectorNode) \ declare_c2_type(SubVSNode, VectorNode) \ declare_c2_type(SubVINode, VectorNode) \ declare_c2_type(SubVLNode, VectorNode) \ @@ -1962,73 +1960,33 @@ static inline uint64_t cast_uint64_t(size_t x) declare_c2_type(DivVFNode, VectorNode) \ declare_c2_type(DivVDNode, VectorNode) \ declare_c2_type(LShiftVBNode, VectorNode) \ - declare_c2_type(LShiftVCNode, VectorNode) \ declare_c2_type(LShiftVSNode, VectorNode) \ declare_c2_type(LShiftVINode, VectorNode) \ - declare_c2_type(URShiftVBNode, VectorNode) \ - declare_c2_type(URShiftVCNode, VectorNode) \ - declare_c2_type(URShiftVSNode, VectorNode) \ - declare_c2_type(URShiftVINode, VectorNode) \ + declare_c2_type(RShiftVBNode, VectorNode) \ + declare_c2_type(RShiftVSNode, VectorNode) \ + declare_c2_type(RShiftVINode, VectorNode) \ declare_c2_type(AndVNode, VectorNode) \ declare_c2_type(OrVNode, VectorNode) \ declare_c2_type(XorVNode, VectorNode) \ - declare_c2_type(VectorLoadNode, LoadNode) \ - declare_c2_type(Load16BNode, VectorLoadNode) \ - declare_c2_type(Load8BNode, VectorLoadNode) \ - declare_c2_type(Load4BNode, VectorLoadNode) \ - declare_c2_type(Load8CNode, VectorLoadNode) \ - declare_c2_type(Load4CNode, VectorLoadNode) \ - declare_c2_type(Load2CNode, VectorLoadNode) \ - declare_c2_type(Load8SNode, VectorLoadNode) \ - declare_c2_type(Load4SNode, VectorLoadNode) \ - declare_c2_type(Load2SNode, VectorLoadNode) \ - declare_c2_type(Load4INode, VectorLoadNode) \ - declare_c2_type(Load2INode, VectorLoadNode) \ - declare_c2_type(Load2LNode, VectorLoadNode) \ - declare_c2_type(Load4FNode, VectorLoadNode) \ - declare_c2_type(Load2FNode, VectorLoadNode) \ - declare_c2_type(Load2DNode, VectorLoadNode) \ - declare_c2_type(VectorStoreNode, StoreNode) \ - declare_c2_type(Store16BNode, VectorStoreNode) \ - declare_c2_type(Store8BNode, VectorStoreNode) \ - declare_c2_type(Store4BNode, VectorStoreNode) \ - declare_c2_type(Store8CNode, VectorStoreNode) \ - declare_c2_type(Store4CNode, VectorStoreNode) \ - declare_c2_type(Store2CNode, VectorStoreNode) \ - declare_c2_type(Store4INode, VectorStoreNode) \ - declare_c2_type(Store2INode, VectorStoreNode) \ - declare_c2_type(Store2LNode, VectorStoreNode) \ - declare_c2_type(Store4FNode, VectorStoreNode) \ - declare_c2_type(Store2FNode, VectorStoreNode) \ - declare_c2_type(Store2DNode, VectorStoreNode) \ - declare_c2_type(Replicate16BNode, VectorNode) \ - declare_c2_type(Replicate8BNode, VectorNode) \ - declare_c2_type(Replicate4BNode, VectorNode) \ - declare_c2_type(Replicate8CNode, VectorNode) \ - declare_c2_type(Replicate4CNode, VectorNode) \ - declare_c2_type(Replicate2CNode, VectorNode) \ - declare_c2_type(Replicate8SNode, VectorNode) \ - declare_c2_type(Replicate4SNode, VectorNode) \ - declare_c2_type(Replicate2SNode, VectorNode) \ - declare_c2_type(Replicate4INode, VectorNode) \ - declare_c2_type(Replicate2INode, VectorNode) \ - declare_c2_type(Replicate2LNode, VectorNode) \ - declare_c2_type(Replicate4FNode, VectorNode) \ - declare_c2_type(Replicate2FNode, VectorNode) \ - declare_c2_type(Replicate2DNode, VectorNode) \ + declare_c2_type(LoadVectorNode, LoadNode) \ + declare_c2_type(StoreVectorNode, StoreNode) \ + declare_c2_type(ReplicateBNode, VectorNode) \ + declare_c2_type(ReplicateSNode, VectorNode) \ + declare_c2_type(ReplicateINode, VectorNode) \ + declare_c2_type(ReplicateLNode, VectorNode) \ + declare_c2_type(ReplicateFNode, VectorNode) \ + declare_c2_type(ReplicateDNode, VectorNode) \ declare_c2_type(PackNode, VectorNode) \ declare_c2_type(PackBNode, PackNode) \ - declare_c2_type(PackCNode, PackNode) \ declare_c2_type(PackSNode, PackNode) \ declare_c2_type(PackINode, PackNode) \ declare_c2_type(PackLNode, PackNode) \ declare_c2_type(PackFNode, PackNode) \ declare_c2_type(PackDNode, PackNode) \ - declare_c2_type(Pack2x1BNode, PackNode) \ - declare_c2_type(Pack2x2BNode, PackNode) \ + declare_c2_type(Pack2LNode, PackNode) \ + declare_c2_type(Pack2DNode, PackNode) \ declare_c2_type(ExtractNode, Node) \ declare_c2_type(ExtractBNode, ExtractNode) \ - declare_c2_type(ExtractCNode, ExtractNode) \ declare_c2_type(ExtractSNode, ExtractNode) \ declare_c2_type(ExtractINode, ExtractNode) \ declare_c2_type(ExtractLNode, ExtractNode) \ diff --git a/hotspot/test/compiler/7119644/TestBooleanVect.java b/hotspot/test/compiler/7119644/TestBooleanVect.java new file mode 100644 index 00000000000..d4e3ad68d5f --- /dev/null +++ b/hotspot/test/compiler/7119644/TestBooleanVect.java @@ -0,0 +1,952 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestBooleanVect + */ + +public class TestBooleanVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Boolean vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + boolean[] a1 = new boolean[ARRLEN]; + boolean[] a2 = new boolean[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0); + } + for (int i=ALIGN_OFF; i 0); + errn += verify("test_cp_alndst_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0); + errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0); + } + for (int i=UNALIGN_OFF; i 0); + errn += verify("test_cp_unalndst_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0); + errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = false; + } + } + static void test_vi_neg(boolean[] a, boolean b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(boolean[] a, boolean[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(boolean[] a, boolean[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = false; + b[i] = false; + } + } + static void test_2vi_neg(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(boolean[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = false; + } + } + static void test_vi_oppos(boolean[] a, boolean b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(boolean[] a, boolean[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(boolean[] a, boolean[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = false; + b[i] = false; + } + } + static void test_2vi_oppos(boolean[] a, boolean[] b, boolean c, boolean d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(boolean[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = false; + } + } + static void test_vi_off(boolean[] a, boolean b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = false; + b[i+OFFSET] = false; + } + } + static void test_2vi_off(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(boolean[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = false; + } + } + static void test_vi_inv(boolean[] a, boolean b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(boolean[] a, boolean[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(boolean[] a, boolean[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = false; + b[i+k] = false; + } + } + static void test_2vi_inv(boolean[] a, boolean[] b, boolean c, boolean d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(boolean[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = false; + } + } + static void test_vi_scl(boolean[] a, boolean b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(boolean[] a, boolean[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(boolean[] a, boolean[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = false; + b[i*SCALE] = false; + } + } + static void test_2vi_scl(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = false; + b[i] = false; + } + } + static void test_2vi_aln(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = false; + b[i] = false; + } + } + static void test_2vi_unaln(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, boolean elem, boolean val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteDoubleVect.java b/hotspot/test/compiler/7119644/TestByteDoubleVect.java new file mode 100644 index 00000000000..acf71bf218b --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteDoubleVect + */ + +public class TestByteDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(byte[] a, double[] b, byte c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(byte[] a, double[] b, byte c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(byte[] a, double[] b, byte c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(byte[] a, double[] b, byte c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteFloatVect.java b/hotspot/test/compiler/7119644/TestByteFloatVect.java new file mode 100644 index 00000000000..45fe34e9577 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteFloatVect + */ + +public class TestByteFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(byte[] a, float[] b, byte c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(byte[] a, float[] b, byte c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(byte[] a, float[] b, byte c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(byte[] a, float[] b, byte c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteIntVect.java b/hotspot/test/compiler/7119644/TestByteIntVect.java new file mode 100644 index 00000000000..8d9aa6a808b --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteIntVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteIntVect + */ + +public class TestByteIntVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Integer vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + int[] b1 = new int[ARRLEN]; + int[] b2 = new int[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(byte[] a, int[] b, byte c, int d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(byte[] a, int[] b, byte c, int d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, int[] c, int[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(byte[] a, int[] b, byte c, int d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(byte[] a, int[] b, byte c, int d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteLongVect.java b/hotspot/test/compiler/7119644/TestByteLongVect.java new file mode 100644 index 00000000000..c2d439057d9 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteLongVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteLongVect + */ + +public class TestByteLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + long[] b1 = new long[ARRLEN]; + long[] b2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(byte[] a, long[] b, byte c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(byte[] a, long[] b, byte c, long d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, long[] c, long[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(byte[] a, long[] b, byte c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(byte[] a, long[] b, byte c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteShortVect.java b/hotspot/test/compiler/7119644/TestByteShortVect.java new file mode 100644 index 00000000000..ee1a206c1f2 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteShortVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteShortVect + */ + +public class TestByteShortVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Short vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + short[] b1 = new short[ARRLEN]; + short[] b2 = new short[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(byte[] a, short[] b, byte c, short d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(byte[] a, short[] b, byte c, short d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, short[] c, short[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(byte[] a, short[] b, byte c, short d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(byte[] a, short[] b, byte c, short d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteVect.java b/hotspot/test/compiler/7119644/TestByteVect.java new file mode 100644 index 00000000000..6167678acf9 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteVect + */ + +public class TestByteVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(byte[] a, byte b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(byte[] a, byte[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(byte[] a, byte[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(byte[] a, byte[] b, byte c, byte d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(byte[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(byte[] a, byte b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(byte[] a, byte[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(byte[] a, byte[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(byte[] a, byte[] b, byte c, byte d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(byte[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(byte[] a, byte b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(byte[] a, byte[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(byte[] a, byte[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(byte[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(byte[] a, byte b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(byte[] a, byte[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(byte[] a, byte[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(byte[] a, byte[] b, byte c, byte d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(byte[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(byte[] a, byte b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(byte[] a, byte[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(byte[] a, byte[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(byte[] a, byte[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(byte[] a, byte[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestCharShortVect.java b/hotspot/test/compiler/7119644/TestCharShortVect.java new file mode 100644 index 00000000000..55f8e03b772 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestCharShortVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestCharShortVect + */ + +public class TestCharShortVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Char + Short vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + char[] a1 = new char[ARRLEN]; + char[] a2 = new char[ARRLEN]; + short[] b1 = new short[ARRLEN]; + short[] b2 = new short[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_neg(char[] a, short[] b, char c, short d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(char[] a, char[] b, short[] c, short[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(char[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_oppos(char[] a, short[] b, char c, short d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(char[] a, char[] b, short[] c, short[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(char[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_aln(char[] a, short[] b, char c, short d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(char[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_unaln(char[] a, short[] b, char c, short d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, char elem, char val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestCharVect.java b/hotspot/test/compiler/7119644/TestCharVect.java new file mode 100644 index 00000000000..d05ed4d1ccd --- /dev/null +++ b/hotspot/test/compiler/7119644/TestCharVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestCharVect + */ + +public class TestCharVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Char vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + char[] a1 = new char[ARRLEN]; + char[] a2 = new char[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = (char)-123; + } + } + static void test_vi_neg(char[] a, char b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(char[] a, char[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(char[] a, char[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_neg(char[] a, char[] b, char c, char d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(char[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = (char)-123; + } + } + static void test_vi_oppos(char[] a, char b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(char[] a, char[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(char[] a, char[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_oppos(char[] a, char[] b, char c, char d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(char[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = (char)-123; + } + } + static void test_vi_off(char[] a, char b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(char[] a, char[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(char[] a, char[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = (char)-123; + b[i+OFFSET] = (char)-103; + } + } + static void test_2vi_off(char[] a, char[] b, char c, char d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(char[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = (char)-123; + } + } + static void test_vi_inv(char[] a, char b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(char[] a, char[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(char[] a, char[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = (char)-123; + b[i+k] = (char)-103; + } + } + static void test_2vi_inv(char[] a, char[] b, char c, char d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(char[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = (char)-123; + } + } + static void test_vi_scl(char[] a, char b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(char[] a, char[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(char[] a, char[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = (char)-123; + b[i*SCALE] = (char)-103; + } + } + static void test_2vi_scl(char[] a, char[] b, char c, char d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(char[] a, char[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(char[] a, char[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(char[] a, char[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_aln(char[] a, char[] b, char c, char d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(char[] a, char[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(char[] a, char[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(char[] a, char[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_unaln(char[] a, char[] b, char c, char d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, char elem, char val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestDoubleVect.java b/hotspot/test/compiler/7119644/TestDoubleVect.java new file mode 100644 index 00000000000..385a64d5a2f --- /dev/null +++ b/hotspot/test/compiler/7119644/TestDoubleVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestDoubleVect + */ + +public class TestDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + double[] a1 = new double[ARRLEN]; + double[] a2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123.; + } + } + static void test_vi_neg(double[] a, double b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(double[] a, double[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(double[] a, double[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123.; + b[i] = -103.; + } + } + static void test_2vi_neg(double[] a, double[] b, double c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(double[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.; + } + } + static void test_vi_oppos(double[] a, double b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(double[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(double[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.; + b[i] = -103.; + } + } + static void test_2vi_oppos(double[] a, double[] b, double c, double d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(double[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.; + } + } + static void test_vi_off(double[] a, double b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(double[] a, double[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(double[] a, double[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.; + b[i+OFFSET] = -103.; + } + } + static void test_2vi_off(double[] a, double[] b, double c, double d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(double[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.; + } + } + static void test_vi_inv(double[] a, double b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(double[] a, double[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(double[] a, double[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.; + b[i+k] = -103.; + } + } + static void test_2vi_inv(double[] a, double[] b, double c, double d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(double[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.; + } + } + static void test_vi_scl(double[] a, double b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(double[] a, double[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(double[] a, double[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.; + b[i*SCALE] = -103.; + } + } + static void test_2vi_scl(double[] a, double[] b, double c, double d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(double[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(double[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(double[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123.; + b[i] = -103.; + } + } + static void test_2vi_aln(double[] a, double[] b, double c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(double[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(double[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(double[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123.; + b[i] = -103.; + } + } + static void test_2vi_unaln(double[] a, double[] b, double c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestFloatDoubleVect.java b/hotspot/test/compiler/7119644/TestFloatDoubleVect.java new file mode 100644 index 00000000000..827ecdb4615 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestFloatDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestFloatDoubleVect + */ + +public class TestFloatDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Float + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + float[] a1 = new float[ARRLEN]; + float[] a2 = new float[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123.f; + b[i] = -103.; + } + } + static void test_vi_neg(float[] a, double[] b, float c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(float[] a, float[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(float[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.f; + b[i] = -103.; + } + } + static void test_vi_oppos(float[] a, double[] b, float c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(float[] a, float[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(float[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123.f; + b[i] = -103.; + } + } + static void test_vi_aln(float[] a, double[] b, float c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(float[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123.f; + b[i] = -103.; + } + } + static void test_vi_unaln(float[] a, double[] b, float c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestFloatVect.java b/hotspot/test/compiler/7119644/TestFloatVect.java new file mode 100644 index 00000000000..825fffed64c --- /dev/null +++ b/hotspot/test/compiler/7119644/TestFloatVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestFloatVect + */ + +public class TestFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + float[] a1 = new float[ARRLEN]; + float[] a2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123.f; + } + } + static void test_vi_neg(float[] a, float b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(float[] a, float[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(float[] a, float[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_neg(float[] a, float[] b, float c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(float[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.f; + } + } + static void test_vi_oppos(float[] a, float b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(float[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(float[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_oppos(float[] a, float[] b, float c, float d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(float[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.f; + } + } + static void test_vi_off(float[] a, float b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(float[] a, float[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(float[] a, float[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.f; + b[i+OFFSET] = -103.f; + } + } + static void test_2vi_off(float[] a, float[] b, float c, float d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(float[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.f; + } + } + static void test_vi_inv(float[] a, float b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(float[] a, float[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(float[] a, float[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.f; + b[i+k] = -103.f; + } + } + static void test_2vi_inv(float[] a, float[] b, float c, float d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(float[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.f; + } + } + static void test_vi_scl(float[] a, float b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(float[] a, float[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(float[] a, float[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.f; + b[i*SCALE] = -103.f; + } + } + static void test_2vi_scl(float[] a, float[] b, float c, float d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(float[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(float[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(float[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_aln(float[] a, float[] b, float c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(float[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(float[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(float[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_unaln(float[] a, float[] b, float c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntDoubleVect.java b/hotspot/test/compiler/7119644/TestIntDoubleVect.java new file mode 100644 index 00000000000..fc6e32dce05 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntDoubleVect + */ + +public class TestIntDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(int[] a, double[] b, int c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(int[] a, int[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(int[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(int[] a, double[] b, int c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(int[] a, int[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(int[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(int[] a, double[] b, int c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(int[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(int[] a, double[] b, int c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntFloatVect.java b/hotspot/test/compiler/7119644/TestIntFloatVect.java new file mode 100644 index 00000000000..e698c890d69 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntFloatVect + */ + +public class TestIntFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(int[] a, float[] b, int c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(int[] a, int[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(int[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(int[] a, float[] b, int c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(int[] a, int[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(int[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(int[] a, float[] b, int c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(int[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(int[] a, float[] b, int c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntLongVect.java b/hotspot/test/compiler/7119644/TestIntLongVect.java new file mode 100644 index 00000000000..def0d9b1bc2 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntLongVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntLongVect + */ + +public class TestIntLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer + Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + long[] b1 = new long[ARRLEN]; + long[] b2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(int[] a, long[] b, int c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(int[] a, int[] b, long[] c, long[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(int[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(int[] a, long[] b, int c, long d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(int[] a, int[] b, long[] c, long[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(int[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(int[] a, long[] b, int c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(int[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(int[] a, long[] b, int c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntVect.java b/hotspot/test/compiler/7119644/TestIntVect.java new file mode 100644 index 00000000000..9d3f4e53920 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntVect + */ + +public class TestIntVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(int[] a, int b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(int[] a, int[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(int[] a, int[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(int[] a, int[] b, int c, int d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(int[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(int[] a, int b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(int[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(int[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(int[] a, int[] b, int c, int d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(int[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(int[] a, int b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(int[] a, int[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(int[] a, int[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(int[] a, int[] b, int c, int d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(int[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(int[] a, int b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(int[] a, int[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(int[] a, int[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(int[] a, int[] b, int c, int d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(int[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(int[] a, int b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(int[] a, int[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(int[] a, int[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(int[] a, int[] b, int c, int d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(int[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(int[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(int[] a, int[] b, int c, int d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(int[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(int[] a, int[] b, int c, int d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestLongDoubleVect.java b/hotspot/test/compiler/7119644/TestLongDoubleVect.java new file mode 100644 index 00000000000..344e3a980bb --- /dev/null +++ b/hotspot/test/compiler/7119644/TestLongDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestLongDoubleVect + */ + +public class TestLongDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Long + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + long[] a1 = new long[ARRLEN]; + long[] a2 = new long[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(long[] a, double[] b, long c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(long[] a, long[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(long[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(long[] a, double[] b, long c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(long[] a, long[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(long[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(long[] a, double[] b, long c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(long[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(long[] a, double[] b, long c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestLongFloatVect.java b/hotspot/test/compiler/7119644/TestLongFloatVect.java new file mode 100644 index 00000000000..714f6c83687 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestLongFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestLongFloatVect + */ + +public class TestLongFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Long + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + long[] a1 = new long[ARRLEN]; + long[] a2 = new long[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(long[] a, float[] b, long c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(long[] a, long[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(long[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(long[] a, float[] b, long c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(long[] a, long[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(long[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(long[] a, float[] b, long c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(long[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(long[] a, float[] b, long c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestLongVect.java b/hotspot/test/compiler/7119644/TestLongVect.java new file mode 100644 index 00000000000..6f0365bb5c1 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestLongVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestLongVect + */ + +public class TestLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + long[] a1 = new long[ARRLEN]; + long[] a2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(long[] a, long b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(long[] a, long[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(long[] a, long[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(long[] a, long[] b, long c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(long[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(long[] a, long b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(long[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(long[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(long[] a, long[] b, long c, long d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(long[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(long[] a, long b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(long[] a, long[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(long[] a, long[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(long[] a, long[] b, long c, long d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(long[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(long[] a, long b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(long[] a, long[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(long[] a, long[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(long[] a, long[] b, long c, long d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(long[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(long[] a, long b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(long[] a, long[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(long[] a, long[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(long[] a, long[] b, long c, long d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(long[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(long[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(long[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(long[] a, long[] b, long c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(long[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(long[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(long[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(long[] a, long[] b, long c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortDoubleVect.java b/hotspot/test/compiler/7119644/TestShortDoubleVect.java new file mode 100644 index 00000000000..c21037e4c87 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortDoubleVect + */ + +public class TestShortDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(short[] a, double[] b, short c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(short[] a, double[] b, short c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(short[] a, double[] b, short c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(short[] a, double[] b, short c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortFloatVect.java b/hotspot/test/compiler/7119644/TestShortFloatVect.java new file mode 100644 index 00000000000..05b4dddd980 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortFloatVect + */ + +public class TestShortFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(short[] a, float[] b, short c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(short[] a, float[] b, short c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(short[] a, float[] b, short c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(short[] a, float[] b, short c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortIntVect.java b/hotspot/test/compiler/7119644/TestShortIntVect.java new file mode 100644 index 00000000000..bf180940856 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortIntVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortIntVect + */ + +public class TestShortIntVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Integer vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + int[] b1 = new int[ARRLEN]; + int[] b2 = new int[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(short[] a, int[] b, short c, int d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, int[] c, int[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(short[] a, int[] b, short c, int d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, int[] c, int[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(short[] a, int[] b, short c, int d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(short[] a, int[] b, short c, int d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortLongVect.java b/hotspot/test/compiler/7119644/TestShortLongVect.java new file mode 100644 index 00000000000..d4c121f8716 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortLongVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortLongVect + */ + +public class TestShortLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + long[] b1 = new long[ARRLEN]; + long[] b2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(short[] a, long[] b, short c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, long[] c, long[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(short[] a, long[] b, short c, long d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, long[] c, long[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(short[] a, long[] b, short c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(short[] a, long[] b, short c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortVect.java b/hotspot/test/compiler/7119644/TestShortVect.java new file mode 100644 index 00000000000..d4583832158 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortVect + */ + +public class TestShortVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(short[] a, short b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(short[] a, short[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(short[] a, short[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(short[] a, short[] b, short c, short d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(short[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(short[] a, short b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(short[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(short[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(short[] a, short[] b, short c, short d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(short[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(short[] a, short b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(short[] a, short[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(short[] a, short[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(short[] a, short[] b, short c, short d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(short[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(short[] a, short b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(short[] a, short[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(short[] a, short[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(short[] a, short[] b, short c, short d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(short[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(short[] a, short b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(short[] a, short[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(short[] a, short[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(short[] a, short[] b, short c, short d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(short[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(short[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(short[] a, short[] b, short c, short d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(short[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(short[] a, short[] b, short c, short d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} From 90c19a99071eae897ed73137cd456541e75d4aa4 Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Fri, 15 Jun 2012 07:51:37 -0400 Subject: [PATCH 04/83] 7177307: fix fo CR7158800 doesn't contain Test7158800.sh Forgot to hg add it Reviewed-by: pbk, kamg, dlong, kvn, fparain --- hotspot/test/runtime/7158800/Test7158800.sh | 91 +++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 hotspot/test/runtime/7158800/Test7158800.sh diff --git a/hotspot/test/runtime/7158800/Test7158800.sh b/hotspot/test/runtime/7158800/Test7158800.sh new file mode 100644 index 00000000000..2a502346a0b --- /dev/null +++ b/hotspot/test/runtime/7158800/Test7158800.sh @@ -0,0 +1,91 @@ +#!/bin/sh +# +# Copyright (c) 2012, 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. +# +# +# Run test for InternTest.java +# + +if [ "${TESTSRC}" = "" ] +then TESTSRC=. +fi + +if [ "${TESTJAVA}" = "" ] +then + PARENT=`dirname \`which java\`` + TESTJAVA=`dirname ${PARENT}` + echo "TESTJAVA not set, selecting " ${TESTJAVA} + echo "If this is incorrect, try setting the variable manually." +fi + +if [ "${TESTCLASSES}" = "" ] +then + echo "TESTCLASSES not set. Test cannot execute. Failed." + exit 1 +fi + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + SunOS | Linux ) + NULL=/dev/null + PS=":" + FS="/" + ;; + Windows_* ) + NULL=NUL + PS=";" + FS="\\" + ;; + * ) + echo "Unrecognized system!" + exit 1; + ;; +esac + +JEMMYPATH=${CPAPPEND} +CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH + +THIS_DIR=`pwd` + +${TESTJAVA}${FS}bin${FS}java -fullversion + +${TESTJAVA}${FS}bin${FS}javac -d . ${TESTSRC}${FS}InternTest.java + +cp ${TESTSRC}${FS}badstrings.txt . + +${TESTJAVA}${FS}bin${FS}java -XX:+PrintStringTableStatistics -XX:+TraceSafepointCleanupTime InternTest bad > test.out 2>&1 & +C_PID=$! + +sleep 60 + +ps | grep ${C_PID} | grep -v grep + +if [ $? = 0 ] +then + kill -9 ${C_PID} + echo "Test Failed" + exit 1 +else + echo "Test Passed" + exit 0 +fi From 18fce99e636f0c1fb2f2efd101d682aa9cc4bf6d Mon Sep 17 00:00:00 2001 From: Alejandro Murillo Date: Fri, 15 Jun 2012 14:17:28 -0700 Subject: [PATCH 05/83] 7175515: new hotspot build - hs24-b15 Reviewed-by: jcoomes --- hotspot/make/hotspot_version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/make/hotspot_version b/hotspot/make/hotspot_version index 76b61ffa403..44b5cbc8375 100644 --- a/hotspot/make/hotspot_version +++ b/hotspot/make/hotspot_version @@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2012 HS_MAJOR_VER=24 HS_MINOR_VER=0 -HS_BUILD_NUMBER=14 +HS_BUILD_NUMBER=15 JDK_MAJOR_VER=1 JDK_MINOR_VER=8 From 118f552a6ef35ba73fab295bc738769a84698f3b Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Mon, 18 Jun 2012 09:52:31 +0200 Subject: [PATCH 06/83] 7174363: Arrays.copyOfRange leads to VM crash with -Xcomp -server if executed by testing framework Arrays.copyOfRange(original, from, to) with from > original.length tries to do a copy with a negative length. Reviewed-by: kvn, twisti --- hotspot/src/share/vm/opto/library_call.cpp | 10 ++-- .../test/compiler/7174363/Test7174363.java | 49 +++++++++++++++++++ 2 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 hotspot/test/compiler/7174363/Test7174363.java diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp index f9d740efd7b..785f5a0ae1d 100644 --- a/hotspot/src/share/vm/opto/library_call.cpp +++ b/hotspot/src/share/vm/opto/library_call.cpp @@ -3592,8 +3592,10 @@ bool LibraryCallKit::inline_array_copyOf(bool is_copyOfRange) { } // Bail out if length is negative. - // ...Not needed, since the new_array will throw the right exception. - //generate_negative_guard(length, bailout, &length); + // Without this the new_array would throw + // NegativeArraySizeException but IllegalArgumentException is what + // should be thrown + generate_negative_guard(length, bailout, &length); if (bailout->req() > 1) { PreserveJVMState pjvms(this); @@ -3617,7 +3619,9 @@ bool LibraryCallKit::inline_array_copyOf(bool is_copyOfRange) { // Extreme case: Arrays.copyOf((Integer[])x, 10, String[].class). // This will fail a store-check if x contains any non-nulls. bool disjoint_bases = true; - bool length_never_negative = true; + // if start > orig_length then the length of the copy may be + // negative. + bool length_never_negative = !is_copyOfRange; generate_arraycopy(TypeAryPtr::OOPS, T_OBJECT, original, start, newcopy, intcon(0), moved, disjoint_bases, length_never_negative); diff --git a/hotspot/test/compiler/7174363/Test7174363.java b/hotspot/test/compiler/7174363/Test7174363.java new file mode 100644 index 00000000000..50f784da1eb --- /dev/null +++ b/hotspot/test/compiler/7174363/Test7174363.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7174363 + * @summary crash with Arrays.copyOfRange(original, from, to) when from > original.length + * + * @run main/othervm -XX:-BackgroundCompilation Test7174363 + */ + +import java.util.*; + +public class Test7174363 { + + static Object[] m(Object[] original, int from, int to) { + return Arrays.copyOfRange(original, from, to, Object[].class); + } + + static public void main(String[] args) { + Object[] orig = new Object[10]; + for (int i = 0; i < 20000; i++) { + try { + m(orig, 15, 20); + } catch(ArrayIndexOutOfBoundsException excp) {} + } + } +} From 3927b8d331bc1cc51714de3e4ee8af933b3f0860 Mon Sep 17 00:00:00 2001 From: Krystal Mok Date: Mon, 18 Jun 2012 12:29:21 -0700 Subject: [PATCH 07/83] 7176856: add the JRE name to the error log Reviewed-by: coleenp, jrose, kvn, twisti --- hotspot/src/share/vm/classfile/vmSymbols.hpp | 4 +++ hotspot/src/share/vm/runtime/java.cpp | 1 + hotspot/src/share/vm/runtime/java.hpp | 8 ++++++ hotspot/src/share/vm/runtime/thread.cpp | 26 ++++++++++++++++++++ hotspot/src/share/vm/utilities/vmError.cpp | 4 ++- 5 files changed, 42 insertions(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/classfile/vmSymbols.hpp b/hotspot/src/share/vm/classfile/vmSymbols.hpp index 2814b1d3668..4f926c7a8d2 100644 --- a/hotspot/src/share/vm/classfile/vmSymbols.hpp +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp @@ -111,6 +111,10 @@ template(getBootClassPathEntryForClass_name, "getBootClassPathEntryForClass") \ template(sun_misc_PostVMInitHook, "sun/misc/PostVMInitHook") \ \ + /* Java runtime version access */ \ + template(sun_misc_Version, "sun/misc/Version") \ + template(java_runtime_name_name, "java_runtime_name") \ + \ /* class file format tags */ \ template(tag_source_file, "SourceFile") \ template(tag_inner_classes, "InnerClasses") \ diff --git a/hotspot/src/share/vm/runtime/java.cpp b/hotspot/src/share/vm/runtime/java.cpp index f256e515e9c..7e013e5d2bd 100644 --- a/hotspot/src/share/vm/runtime/java.cpp +++ b/hotspot/src/share/vm/runtime/java.cpp @@ -660,6 +660,7 @@ void vm_shutdown_during_initialization(const char* error, const char* message) { } JDK_Version JDK_Version::_current; +const char* JDK_Version::_runtime_name; void JDK_Version::initialize() { jdk_version_info info; diff --git a/hotspot/src/share/vm/runtime/java.hpp b/hotspot/src/share/vm/runtime/java.hpp index 102fd6b7acd..1d2b45b6967 100644 --- a/hotspot/src/share/vm/runtime/java.hpp +++ b/hotspot/src/share/vm/runtime/java.hpp @@ -74,6 +74,7 @@ class JDK_Version VALUE_OBJ_CLASS_SPEC { private: static JDK_Version _current; + static const char* _runtime_name; // In this class, we promote the minor version of release to be the // major version for releases >= 5 in anticipation of the JDK doing the @@ -181,6 +182,13 @@ class JDK_Version VALUE_OBJ_CLASS_SPEC { void to_string(char* buffer, size_t buflen) const; + static const char* runtime_name() { + return _runtime_name; + } + static void set_runtime_name(const char* name) { + _runtime_name = name; + } + // Convenience methods for queries on the current major/minor version static bool is_jdk12x_version() { return current().compare_major(2) == 0; diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp index 76865f6ff2c..0179e5c2d4e 100644 --- a/hotspot/src/share/vm/runtime/thread.cpp +++ b/hotspot/src/share/vm/runtime/thread.cpp @@ -996,6 +996,29 @@ static void call_initializeSystemClass(TRAPS) { vmSymbols::void_method_signature(), CHECK); } +char java_runtime_name[128] = ""; + +// extract the JRE name from sun.misc.Version.java_runtime_name +static const char* get_java_runtime_name(TRAPS) { + klassOop k = SystemDictionary::find(vmSymbols::sun_misc_Version(), + Handle(), Handle(), CHECK_AND_CLEAR_NULL); + fieldDescriptor fd; + bool found = k != NULL && + instanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_name_name(), + vmSymbols::string_signature(), &fd); + if (found) { + oop name_oop = k->java_mirror()->obj_field(fd.offset()); + if (name_oop == NULL) + return NULL; + const char* name = java_lang_String::as_utf8_string(name_oop, + java_runtime_name, + sizeof(java_runtime_name)); + return name; + } else { + return NULL; + } +} + // General purpose hook into Java code, run once when the VM is initialized. // The Java library method itself may be changed independently from the VM. static void call_postVMInitHook(TRAPS) { @@ -3352,6 +3375,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // The VM creates & returns objects of this class. Make sure it's initialized. initialize_class(vmSymbols::java_lang_Class(), CHECK_0); call_initializeSystemClass(CHECK_0); + + // get the Java runtime name after java.lang.System is initialized + JDK_Version::set_runtime_name(get_java_runtime_name(THREAD)); } else { warning("java.lang.System not initialized"); } diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp index e450676fa7a..fd81cca2983 100644 --- a/hotspot/src/share/vm/utilities/vmError.cpp +++ b/hotspot/src/share/vm/utilities/vmError.cpp @@ -450,7 +450,9 @@ void VMError::report(outputStream* st) { // VM version st->print_cr("#"); JDK_Version::current().to_string(buf, sizeof(buf)); - st->print_cr("# JRE version: %s", buf); + const char* runtime_name = JDK_Version::runtime_name() != NULL ? + JDK_Version::runtime_name() : ""; + st->print_cr("# JRE version: %s (%s)", runtime_name, buf); st->print_cr("# Java VM: %s (%s %s %s %s)", Abstract_VM_Version::vm_name(), Abstract_VM_Version::vm_release(), From ed2051c8615315b2cc6727978e385b958bf176e2 Mon Sep 17 00:00:00 2001 From: Christian Thalinger Date: Mon, 18 Jun 2012 15:17:30 -0700 Subject: [PATCH 08/83] 7157365: jruby/bench.bench_timeout crashes with JVM internal error Reviewed-by: jrose, kvn --- hotspot/src/share/vm/memory/universe.hpp | 2 +- hotspot/src/share/vm/opto/callGenerator.cpp | 53 ++++++++++++--------- hotspot/src/share/vm/opto/chaitin.cpp | 2 +- hotspot/src/share/vm/opto/type.cpp | 36 +++++++------- 4 files changed, 53 insertions(+), 40 deletions(-) diff --git a/hotspot/src/share/vm/memory/universe.hpp b/hotspot/src/share/vm/memory/universe.hpp index 073a5c2ca75..9f400aa60b5 100644 --- a/hotspot/src/share/vm/memory/universe.hpp +++ b/hotspot/src/share/vm/memory/universe.hpp @@ -273,7 +273,7 @@ class Universe: AllStatic { } static klassOop typeArrayKlassObj(BasicType t) { - assert((uint)t < T_VOID+1, "range check"); + assert((uint)t < T_VOID+1, err_msg("range check for type: %s", type2name(t))); assert(_typeArrayKlassObjs[t] != NULL, "domain check"); return _typeArrayKlassObjs[t]; } diff --git a/hotspot/src/share/vm/opto/callGenerator.cpp b/hotspot/src/share/vm/opto/callGenerator.cpp index 26153217d07..1fef941d9b5 100644 --- a/hotspot/src/share/vm/opto/callGenerator.cpp +++ b/hotspot/src/share/vm/opto/callGenerator.cpp @@ -172,9 +172,11 @@ public: JVMState* DynamicCallGenerator::generate(JVMState* jvms) { GraphKit kit(jvms); + Compile* C = kit.C; + PhaseGVN& gvn = kit.gvn(); - if (kit.C->log() != NULL) { - kit.C->log()->elem("dynamic_call bci='%d'", jvms->bci()); + if (C->log() != NULL) { + C->log()->elem("dynamic_call bci='%d'", jvms->bci()); } // Get the constant pool cache from the caller class. @@ -190,18 +192,21 @@ JVMState* DynamicCallGenerator::generate(JVMState* jvms) { size_t call_site_offset = cpcache->get_f1_offset(index); // Load the CallSite object from the constant pool cache. - const TypeOopPtr* cpcache_ptr = TypeOopPtr::make_from_constant(cpcache); - Node* cpcache_adr = kit.makecon(cpcache_ptr); - Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, cpcache_adr, call_site_offset); - Node* call_site = kit.make_load(kit.control(), call_site_adr, TypeInstPtr::BOTTOM, T_OBJECT, Compile::AliasIdxRaw); + const TypeOopPtr* cpcache_type = TypeOopPtr::make_from_constant(cpcache); // returns TypeAryPtr of type T_OBJECT + const TypeOopPtr* call_site_type = TypeOopPtr::make_from_klass(C->env()->CallSite_klass()); + Node* cpcache_adr = kit.makecon(cpcache_type); + Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, call_site_offset); + // The oops in the constant pool cache are not compressed; load then as raw pointers. + Node* call_site = kit.make_load(kit.control(), call_site_adr, call_site_type, T_ADDRESS, Compile::AliasIdxRaw); // Load the target MethodHandle from the CallSite object. - Node* target_mh_adr = kit.basic_plus_adr(call_site, call_site, java_lang_invoke_CallSite::target_offset_in_bytes()); - Node* target_mh = kit.make_load(kit.control(), target_mh_adr, TypeInstPtr::BOTTOM, T_OBJECT); + const TypeOopPtr* target_type = TypeOopPtr::make_from_klass(C->env()->MethodHandle_klass()); + Node* target_mh_adr = kit.basic_plus_adr(call_site, java_lang_invoke_CallSite::target_offset_in_bytes()); + Node* target_mh = kit.make_load(kit.control(), target_mh_adr, target_type, T_OBJECT); address resolve_stub = SharedRuntime::get_resolve_opt_virtual_call_stub(); - CallStaticJavaNode *call = new (kit.C, tf()->domain()->cnt()) CallStaticJavaNode(tf(), resolve_stub, method(), kit.bci()); + CallStaticJavaNode* call = new (C, tf()->domain()->cnt()) CallStaticJavaNode(tf(), resolve_stub, method(), kit.bci()); // invokedynamic is treated as an optimized invokevirtual. call->set_optimized_virtual(true); // Take extra care (in the presence of argument motion) not to trash the SP: @@ -785,9 +790,10 @@ CallGenerator* CallGenerator::for_invokedynamic_inline(ciCallSite* call_site, JV JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { GraphKit kit(jvms); + Compile* C = kit.C; PhaseGVN& gvn = kit.gvn(); - CompileLog* log = kit.C->log(); + CompileLog* log = C->log(); if (log != NULL) { log->elem("predicted_dynamic_call bci='%d'", jvms->bci()); } @@ -803,8 +809,8 @@ JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { Node* receiver = kit.argument(0); // Check if the MethodHandle is the expected one - Node* cmp = gvn.transform(new(kit.C, 3) CmpPNode(receiver, predicted_mh)); - bol = gvn.transform(new(kit.C, 2) BoolNode(cmp, BoolTest::eq) ); + Node* cmp = gvn.transform(new (C, 3) CmpPNode(receiver, predicted_mh)); + bol = gvn.transform(new (C, 2) BoolNode(cmp, BoolTest::eq) ); } else { // Get the constant pool cache from the caller class. ciMethod* caller_method = jvms->method(); @@ -818,22 +824,25 @@ JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { size_t call_site_offset = cpcache->get_f1_offset(index); // Load the CallSite object from the constant pool cache. - const TypeOopPtr* cpcache_ptr = TypeOopPtr::make_from_constant(cpcache); - Node* cpcache_adr = kit.makecon(cpcache_ptr); - Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, cpcache_adr, call_site_offset); - Node* call_site = kit.make_load(kit.control(), call_site_adr, TypeInstPtr::BOTTOM, T_OBJECT, Compile::AliasIdxRaw); + const TypeOopPtr* cpcache_type = TypeOopPtr::make_from_constant(cpcache); // returns TypeAryPtr of type T_OBJECT + const TypeOopPtr* call_site_type = TypeOopPtr::make_from_klass(C->env()->CallSite_klass()); + Node* cpcache_adr = kit.makecon(cpcache_type); + Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, call_site_offset); + // The oops in the constant pool cache are not compressed; load then as raw pointers. + Node* call_site = kit.make_load(kit.control(), call_site_adr, call_site_type, T_ADDRESS, Compile::AliasIdxRaw); // Load the target MethodHandle from the CallSite object. + const TypeOopPtr* target_type = TypeOopPtr::make_from_klass(C->env()->MethodHandle_klass()); Node* target_adr = kit.basic_plus_adr(call_site, call_site, java_lang_invoke_CallSite::target_offset_in_bytes()); - Node* target_mh = kit.make_load(kit.control(), target_adr, TypeInstPtr::BOTTOM, T_OBJECT); + Node* target_mh = kit.make_load(kit.control(), target_adr, target_type, T_OBJECT); // Check if the MethodHandle is still the same. - Node* cmp = gvn.transform(new(kit.C, 3) CmpPNode(target_mh, predicted_mh)); - bol = gvn.transform(new(kit.C, 2) BoolNode(cmp, BoolTest::eq) ); + Node* cmp = gvn.transform(new (C, 3) CmpPNode(target_mh, predicted_mh)); + bol = gvn.transform(new (C, 2) BoolNode(cmp, BoolTest::eq) ); } IfNode* iff = kit.create_and_xform_if(kit.control(), bol, _hit_prob, COUNT_UNKNOWN); - kit.set_control( gvn.transform(new(kit.C, 1) IfTrueNode (iff))); - Node* slow_ctl = gvn.transform(new(kit.C, 1) IfFalseNode(iff)); + kit.set_control( gvn.transform(new (C, 1) IfTrueNode (iff))); + Node* slow_ctl = gvn.transform(new (C, 1) IfFalseNode(iff)); SafePointNode* slow_map = NULL; JVMState* slow_jvms; @@ -882,7 +891,7 @@ JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { // Finish the diamond. kit.C->set_has_split_ifs(true); // Has chance for split-if optimization - RegionNode* region = new (kit.C, 3) RegionNode(3); + RegionNode* region = new (C, 3) RegionNode(3); region->init_req(1, kit.control()); region->init_req(2, slow_map->control()); kit.set_control(gvn.transform(region)); diff --git a/hotspot/src/share/vm/opto/chaitin.cpp b/hotspot/src/share/vm/opto/chaitin.cpp index 0ed9b962724..00cabcf237f 100644 --- a/hotspot/src/share/vm/opto/chaitin.cpp +++ b/hotspot/src/share/vm/opto/chaitin.cpp @@ -1536,7 +1536,7 @@ Node *PhaseChaitin::find_base_for_derived( Node **derived_base_map, Node *derive // Check for AddP-related opcodes if( !derived->is_Phi() ) { - assert( derived->as_Mach()->ideal_Opcode() == Op_AddP, "" ); + assert(derived->as_Mach()->ideal_Opcode() == Op_AddP, err_msg("but is: %s", derived->Name())); Node *base = derived->in(AddPNode::Base); derived_base_map[derived->_idx] = base; return base; diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp index 30ec5695939..b796307c1e7 100644 --- a/hotspot/src/share/vm/opto/type.cpp +++ b/hotspot/src/share/vm/opto/type.cpp @@ -2613,18 +2613,26 @@ const TypeOopPtr* TypeOopPtr::make_from_klass_common(ciKlass *klass, bool klass_ //------------------------------make_from_constant----------------------------- // Make a java pointer from an oop constant const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_constant) { - if (o->is_method_data() || o->is_method() || o->is_cpcache()) { + if (o->is_method_data() || o->is_method()) { // Treat much like a typeArray of bytes, like below, but fake the type... - const Type* etype = (Type*)get_const_basic_type(T_BYTE); + const BasicType bt = T_BYTE; + const Type* etype = get_const_basic_type(bt); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::POS); - ciKlass *klass = ciTypeArrayKlass::make((BasicType) T_BYTE); - assert(o->can_be_constant(), "method data oops should be tenured"); - const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - return arr; + ciKlass* klass = ciArrayKlass::make(ciType::make(bt)); + assert(o->can_be_constant(), "should be tenured"); + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); + } else if (o->is_cpcache()) { + // Treat much like a objArray, like below, but fake the type... + const BasicType bt = T_OBJECT; + const Type* etype = get_const_basic_type(bt); + const TypeAry* arr0 = TypeAry::make(etype, TypeInt::POS); + ciKlass* klass = ciArrayKlass::make(ciType::make(bt)); + assert(o->can_be_constant(), "should be tenured"); + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); } else { assert(o->is_java_object(), "must be java language object"); assert(!o->is_null_object(), "null object not yet handled here."); - ciKlass *klass = o->klass(); + ciKlass* klass = o->klass(); if (klass->is_instance_klass()) { // Element is an instance if (require_constant) { @@ -2635,8 +2643,7 @@ const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_const return TypeInstPtr::make(o); } else if (klass->is_obj_array_klass()) { // Element is an object array. Recursively call ourself. - const Type *etype = - TypeOopPtr::make_from_klass_raw(klass->as_obj_array_klass()->element_klass()); + const Type *etype = make_from_klass_raw(klass->as_obj_array_klass()->element_klass()); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::make(o->as_array()->length())); // We used to pass NotNull in here, asserting that the sub-arrays // are all not-null. This is not true in generally, as code can @@ -2646,12 +2653,10 @@ const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_const } else if (!o->should_be_constant()) { return TypeAryPtr::make(TypePtr::NotNull, arr0, klass, true, 0); } - const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - return arr; + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); } else if (klass->is_type_array_klass()) { // Element is an typeArray - const Type* etype = - (Type*)get_const_basic_type(klass->as_type_array_klass()->element_type()); + const Type* etype = get_const_basic_type(klass->as_type_array_klass()->element_type()); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::make(o->as_array()->length())); // We used to pass NotNull in here, asserting that the array pointer // is not-null. That was not true in general. @@ -2660,12 +2665,11 @@ const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_const } else if (!o->should_be_constant()) { return TypeAryPtr::make(TypePtr::NotNull, arr0, klass, true, 0); } - const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - return arr; + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); } } - ShouldNotReachHere(); + fatal("unhandled object type"); return NULL; } From b5b10846c23d0c1b1953632625506b2fa5663f67 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Tue, 19 Jun 2012 15:12:56 -0700 Subject: [PATCH 09/83] 7177923: SIGBUS on sparc in compiled code for java.util.Calendar.clear() Disable vectorization of a memory access with more elements per vector than one which is used for alignment on sparc Reviewed-by: twisti --- hotspot/src/cpu/x86/vm/x86.ad | 10 +++---- hotspot/src/share/vm/opto/c2_globals.hpp | 5 +++- hotspot/src/share/vm/opto/superword.cpp | 37 +++++++++++++++--------- hotspot/src/share/vm/opto/superword.hpp | 11 ++++--- 4 files changed, 39 insertions(+), 24 deletions(-) diff --git a/hotspot/src/cpu/x86/vm/x86.ad b/hotspot/src/cpu/x86/vm/x86.ad index faa00d70373..af5b5f0b099 100644 --- a/hotspot/src/cpu/x86/vm/x86.ad +++ b/hotspot/src/cpu/x86/vm/x86.ad @@ -2061,7 +2061,7 @@ instruct Repl8I_imm(vecY dst, immI con) %{ // Integer could be loaded into xmm register directly from memory. instruct Repl2I_mem(vecD dst, memory mem) %{ predicate(n->as_Vector()->length() == 2); - match(Set dst (ReplicateI mem)); + match(Set dst (ReplicateI (LoadVector mem))); format %{ "movd $dst,$mem\n\t" "pshufd $dst,$dst,0x00\t! replicate2I" %} ins_encode %{ @@ -2073,7 +2073,7 @@ instruct Repl2I_mem(vecD dst, memory mem) %{ instruct Repl4I_mem(vecX dst, memory mem) %{ predicate(n->as_Vector()->length() == 4); - match(Set dst (ReplicateI mem)); + match(Set dst (ReplicateI (LoadVector mem))); format %{ "movd $dst,$mem\n\t" "pshufd $dst,$dst,0x00\t! replicate4I" %} ins_encode %{ @@ -2085,7 +2085,7 @@ instruct Repl4I_mem(vecX dst, memory mem) %{ instruct Repl8I_mem(vecY dst, memory mem) %{ predicate(n->as_Vector()->length() == 8); - match(Set dst (ReplicateI mem)); + match(Set dst (ReplicateI (LoadVector mem))); format %{ "movd $dst,$mem\n\t" "pshufd $dst,$dst,0x00\n\t" "vinsertf128h $dst,$dst,$dst\t! replicate8I" %} @@ -2225,7 +2225,7 @@ instruct Repl4L_imm(vecY dst, immL con) %{ // Long could be loaded into xmm register directly from memory. instruct Repl2L_mem(vecX dst, memory mem) %{ predicate(n->as_Vector()->length() == 2); - match(Set dst (ReplicateL mem)); + match(Set dst (ReplicateL (LoadVector mem))); format %{ "movq $dst,$mem\n\t" "movlhps $dst,$dst\t! replicate2L" %} ins_encode %{ @@ -2237,7 +2237,7 @@ instruct Repl2L_mem(vecX dst, memory mem) %{ instruct Repl4L_mem(vecY dst, memory mem) %{ predicate(n->as_Vector()->length() == 4); - match(Set dst (ReplicateL mem)); + match(Set dst (ReplicateL (LoadVector mem))); format %{ "movq $dst,$mem\n\t" "movlhps $dst,$dst\n\t" "vinsertf128h $dst,$dst,$dst\t! replicate4L" %} diff --git a/hotspot/src/share/vm/opto/c2_globals.hpp b/hotspot/src/share/vm/opto/c2_globals.hpp index 947d806a34a..cc72fc0a1cf 100644 --- a/hotspot/src/share/vm/opto/c2_globals.hpp +++ b/hotspot/src/share/vm/opto/c2_globals.hpp @@ -299,9 +299,12 @@ develop(bool, SuperWordRTDepCheck, false, \ "Enable runtime dependency checks.") \ \ - product(bool, TraceSuperWord, false, \ + notproduct(bool, TraceSuperWord, false, \ "Trace superword transforms") \ \ + notproduct(bool, TraceNewVectors, false, \ + "Trace creation of Vector nodes") \ + \ product_pd(bool, OptoBundling, \ "Generate nops to fill i-cache lines") \ \ diff --git a/hotspot/src/share/vm/opto/superword.cpp b/hotspot/src/share/vm/opto/superword.cpp index 78db4b5ba16..cfeb47e507b 100644 --- a/hotspot/src/share/vm/opto/superword.cpp +++ b/hotspot/src/share/vm/opto/superword.cpp @@ -222,7 +222,18 @@ void SuperWord::find_adjacent_refs() { // Create initial pack pairs of memory operations for which // alignment is set and vectors will be aligned. bool create_pack = true; - if (memory_alignment(mem_ref, best_iv_adjustment) != 0) { + if (memory_alignment(mem_ref, best_iv_adjustment) == 0) { + if (!Matcher::misaligned_vectors_ok()) { + int vw = vector_width(mem_ref); + int vw_best = vector_width(best_align_to_mem_ref); + if (vw > vw_best) { + // Do not vectorize a memory access with more elements per vector + // if unaligned memory access is not allowed because number of + // iterations in pre-loop will be not enough to align it. + create_pack = false; + } + } + } else { if (same_velt_type(mem_ref, best_align_to_mem_ref)) { // Can't allow vectorization of unaligned memory accesses with the // same type since it could be overlapped accesses to the same array. @@ -357,7 +368,7 @@ MemNode* SuperWord::find_align_to_ref(Node_List &memops) { for (uint j = 0; j < memops.size(); j++) { MemNode* s = memops.at(j)->as_Mem(); if (s->is_Store()) { - int vw = vector_width_in_bytes(velt_basic_type(s)); + int vw = vector_width_in_bytes(s); assert(vw > 1, "sanity"); SWPointer p(s, this); if (cmp_ct.at(j) > max_ct || @@ -380,7 +391,7 @@ MemNode* SuperWord::find_align_to_ref(Node_List &memops) { for (uint j = 0; j < memops.size(); j++) { MemNode* s = memops.at(j)->as_Mem(); if (s->is_Load()) { - int vw = vector_width_in_bytes(velt_basic_type(s)); + int vw = vector_width_in_bytes(s); assert(vw > 1, "sanity"); SWPointer p(s, this); if (cmp_ct.at(j) > max_ct || @@ -440,8 +451,7 @@ bool SuperWord::ref_is_alignable(SWPointer& p) { // If initial offset from start of object is computable, // compute alignment within the vector. - BasicType bt = velt_basic_type(p.mem()); - int vw = vector_width_in_bytes(bt); + int vw = vector_width_in_bytes(p.mem()); assert(vw > 1, "sanity"); if (vw % span == 0) { Node* init_nd = pre_end->init_trip(); @@ -468,8 +478,7 @@ int SuperWord::get_iv_adjustment(MemNode* mem_ref) { SWPointer align_to_ref_p(mem_ref, this); int offset = align_to_ref_p.offset_in_bytes(); int scale = align_to_ref_p.scale_in_bytes(); - BasicType bt = velt_basic_type(mem_ref); - int vw = vector_width_in_bytes(bt); + int vw = vector_width_in_bytes(mem_ref); assert(vw > 1, "sanity"); int stride_sign = (scale * iv_stride()) > 0 ? 1 : -1; int iv_adjustment = (stride_sign * vw - (offset % vw)) % vw; @@ -1361,7 +1370,7 @@ void SuperWord::output() { } _igvn._worklist.push(vn); #ifdef ASSERT - if (TraceSuperWord) { + if (TraceNewVectors) { tty->print("new Vector node: "); vn->dump(); } @@ -1401,7 +1410,7 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { _phase->_igvn.register_new_node_with_optimizer(vn); _phase->set_ctrl(vn, _phase->get_ctrl(opd)); #ifdef ASSERT - if (TraceSuperWord) { + if (TraceNewVectors) { tty->print("new Vector node: "); vn->dump(); } @@ -1424,8 +1433,8 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { _phase->_igvn.register_new_node_with_optimizer(pk); _phase->set_ctrl(pk, _phase->get_ctrl(opd)); #ifdef ASSERT - if (TraceSuperWord) { - tty->print("new Pack node: "); + if (TraceNewVectors) { + tty->print("new Vector node: "); pk->dump(); } #endif @@ -1764,7 +1773,7 @@ int SuperWord::memory_alignment(MemNode* s, int iv_adjust_in_bytes) { if (!p.valid()) { return bottom_align; } - int vw = vector_width_in_bytes(velt_basic_type(s)); + int vw = vector_width_in_bytes(s); if (vw < 2) { return bottom_align; // No vectors for this type } @@ -1978,12 +1987,12 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { // N = (V - (e - lim0)) % V // lim = lim0 - (V - (e - lim0)) % V - int vw = vector_width_in_bytes(velt_basic_type(align_to_ref)); - assert(vw > 1, "sanity"); + int vw = vector_width_in_bytes(align_to_ref); int stride = iv_stride(); int scale = align_to_ref_p.scale_in_bytes(); int elt_size = align_to_ref_p.memory_size(); int v_align = vw / elt_size; + assert(v_align > 1, "sanity"); int k = align_to_ref_p.offset_in_bytes() / elt_size; Node *kn = _igvn.intcon(k); diff --git a/hotspot/src/share/vm/opto/superword.hpp b/hotspot/src/share/vm/opto/superword.hpp index 97224e4d7bd..050ce9ea2df 100644 --- a/hotspot/src/share/vm/opto/superword.hpp +++ b/hotspot/src/share/vm/opto/superword.hpp @@ -264,11 +264,14 @@ class SuperWord : public ResourceObj { _iv = lp->as_CountedLoop()->phi()->as_Phi(); } int iv_stride() { return lp()->as_CountedLoop()->stride_con(); } - int vector_width_in_bytes(BasicType bt) { - return MIN2(ABS(iv_stride())*type2aelembytes(bt), - Matcher::vector_width_in_bytes(bt)); + int vector_width(Node* n) { + BasicType bt = velt_basic_type(n); + return MIN2(ABS(iv_stride()), Matcher::max_vector_size(bt)); + } + int vector_width_in_bytes(Node* n) { + BasicType bt = velt_basic_type(n); + return vector_width(n)*type2aelembytes(bt); } - MemNode* align_to_ref() { return _align_to_ref; } void set_align_to_ref(MemNode* m) { _align_to_ref = m; } From 8b20e7af5390199e9d5fe42211eaf58c4a5fa431 Mon Sep 17 00:00:00 2001 From: Gary Collins Date: Tue, 19 Jun 2012 21:16:20 -0700 Subject: [PATCH 10/83] 7178113: build environment change Simple change to enable proper builds of arm target Reviewed-by: ohair, dholmes --- hotspot/make/jprt.properties | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hotspot/make/jprt.properties b/hotspot/make/jprt.properties index b49573ca37f..0010f8f85ff 100644 --- a/hotspot/make/jprt.properties +++ b/hotspot/make/jprt.properties @@ -102,6 +102,11 @@ jprt.my.linux.armvfp.jdk7=linux_armvfp_2.6 jprt.my.linux.armvfp.jdk7u6=${jprt.my.linux.armvfp.jdk7} jprt.my.linux.armvfp=${jprt.my.linux.armvfp.${jprt.tools.default.release}} +jprt.my.linux.armv6.jdk8=linux_armv6_2.6 +jprt.my.linux.armv6.jdk7=linux_armv6_2.6 +jprt.my.linux.armv6.jdk7u6=${jprt.my.linux.armv6.jdk7} +jprt.my.linux.armv6=${jprt.my.linux.armv6.${jprt.tools.default.release}} + jprt.my.linux.armsflt.jdk8=linux_armsflt_2.6 jprt.my.linux.armsflt.jdk7=linux_armsflt_2.6 jprt.my.linux.armsflt.jdk7u6=${jprt.my.linux.armsflt.jdk7} @@ -134,7 +139,7 @@ jprt.build.targets.standard= \ ${jprt.my.macosx.x64}-{product|fastdebug|debug}, \ ${jprt.my.windows.i586}-{product|fastdebug|debug}, \ ${jprt.my.windows.x64}-{product|fastdebug|debug}, \ - ${jprt.my.linux.armvfp}-{product|fastdebug} + ${jprt.my.linux.armv6}-{product|fastdebug} jprt.build.targets.open= \ ${jprt.my.solaris.i586}-{productOpen}, \ From 4189d0802f65d834f104559c04c6274e68cb33b2 Mon Sep 17 00:00:00 2001 From: "Daniel D. Daugherty" Date: Wed, 20 Jun 2012 14:18:25 -0700 Subject: [PATCH 11/83] 7175255: symlinks are wrong, which caused jdk8-promote-2 to fail (client/64/64 directories in debuginfo zips) Fix bad paths in client/64 and server/64 debug info and symlink creation Reviewed-by: ohair, dholmes --- .../solaris/makefiles/add_gnu_debuglink.make | 7 ++- hotspot/make/solaris/makefiles/dtrace.make | 49 +++++++++++-------- .../makefiles/fix_empty_sec_hdr_flags.make | 7 ++- 3 files changed, 39 insertions(+), 24 deletions(-) diff --git a/hotspot/make/solaris/makefiles/add_gnu_debuglink.make b/hotspot/make/solaris/makefiles/add_gnu_debuglink.make index b89a4c443ea..ee75722fa99 100644 --- a/hotspot/make/solaris/makefiles/add_gnu_debuglink.make +++ b/hotspot/make/solaris/makefiles/add_gnu_debuglink.make @@ -24,8 +24,11 @@ # Rules to build add_gnu_debuglink, used by vm.make on Solaris -GENERATED = ../generated -ADD_GNU_DEBUGLINK = $(GENERATED)/add_gnu_debuglink +# Allow $(ADD_GNU_DEBUGLINK) to be called from any directory. +# We don't set or use the GENERATED macro to avoid affecting +# other HotSpot Makefiles. +TOPDIR = $(shell echo `pwd`) +ADD_GNU_DEBUGLINK = $(TOPDIR)/../generated/add_gnu_debuglink ADD_GNU_DEBUGLINK_DIR = $(GAMMADIR)/src/os/solaris/add_gnu_debuglink ADD_GNU_DEBUGLINK_SRC = $(ADD_GNU_DEBUGLINK_DIR)/add_gnu_debuglink.c diff --git a/hotspot/make/solaris/makefiles/dtrace.make b/hotspot/make/solaris/makefiles/dtrace.make index d8dc58b8135..1a5726520f9 100644 --- a/hotspot/make/solaris/makefiles/dtrace.make +++ b/hotspot/make/solaris/makefiles/dtrace.make @@ -94,23 +94,24 @@ ISA = $(subst i386,i486,$(shell isainfo -n)) # Making 64/libjvm_db.so: 64-bit version of libjvm_db.so which handles 32-bit libjvm.so ifneq ("${ISA}","${BUILDARCH}") -XLIBJVM_DB = 64/$(LIBJVM_DB) -XLIBJVM_DB_G = 64/$(LIBJVM_DB_G) -XLIBJVM_DTRACE = 64/$(LIBJVM_DTRACE) -XLIBJVM_DTRACE_G = 64/$(LIBJVM_DTRACE_G) +XLIBJVM_DIR = 64 +XLIBJVM_DB = $(XLIBJVM_DIR)/$(LIBJVM_DB) +XLIBJVM_DB_G = $(XLIBJVM_DIR)/$(LIBJVM_DB_G) +XLIBJVM_DTRACE = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE) +XLIBJVM_DTRACE_G = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_G) -XLIBJVM_DB_DEBUGINFO = 64/$(LIBJVM_DB_DEBUGINFO) -XLIBJVM_DB_DIZ = 64/$(LIBJVM_DB_DIZ) -XLIBJVM_DB_G_DEBUGINFO = 64/$(LIBJVM_DB_G_DEBUGINFO) -XLIBJVM_DB_G_DIZ = 64/$(LIBJVM_DB_G_DIZ) -XLIBJVM_DTRACE_DEBUGINFO = 64/$(LIBJVM_DTRACE_DEBUGINFO) -XLIBJVM_DTRACE_DIZ = 64/$(LIBJVM_DTRACE_DIZ) -XLIBJVM_DTRACE_G_DEBUGINFO = 64/$(LIBJVM_DTRACE_G_DEBUGINFO) -XLIBJVM_DTRACE_G_DIZ = 64/$(LIBJVM_DTRACE_G_DIZ) +XLIBJVM_DB_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DB_DEBUGINFO) +XLIBJVM_DB_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DB_DIZ) +XLIBJVM_DB_G_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DB_G_DEBUGINFO) +XLIBJVM_DB_G_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DB_G_DIZ) +XLIBJVM_DTRACE_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_DEBUGINFO) +XLIBJVM_DTRACE_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_DIZ) +XLIBJVM_DTRACE_G_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_G_DEBUGINFO) +XLIBJVM_DTRACE_G_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_G_DIZ) $(XLIBJVM_DB): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE) @echo Making $@ - $(QUIETLY) mkdir -p 64/ ; \ + $(QUIETLY) mkdir -p $(XLIBJVM_DIR) ; \ $(CC) $(SYMFLAG) $(ARCHFLAG/$(ISA)) -D$(TYPE) -I. -I$(GENERATED) \ $(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c -lc [ -f $(XLIBJVM_DB_G) ] || { ln -s $(LIBJVM_DB) $(XLIBJVM_DB_G); } @@ -124,8 +125,10 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DB_DEBUGINFO) # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. -# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(XLIBJVM_DB_DEBUGINFO) $@ - $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(XLIBJVM_DB_DEBUGINFO) $@ +# $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) ; +# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not +# in the link name: + ( cd $(XLIBJVM_DIR) && $(ADD_GNU_DEBUGLINK) $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) ) ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else @@ -136,7 +139,9 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) endif [ -f $(XLIBJVM_DB_G_DEBUGINFO) ] || { ln -s $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO); } ifeq ($(ZIP_DEBUGINFO_FILES),1) - $(ZIPEXE) -q -y $(XLIBJVM_DB_DIZ) $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO) +# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not +# in the archived name: + ( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -y $(LIBJVM_DB_DIZ) $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB_G_DEBUGINFO) ) $(RM) $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO) [ -f $(XLIBJVM_DB_G_DIZ) ] || { ln -s $(XLIBJVM_DB_DIZ) $(XLIBJVM_DB_G_DIZ); } endif @@ -144,7 +149,7 @@ endif $(XLIBJVM_DTRACE): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE) @echo Making $@ - $(QUIETLY) mkdir -p 64/ ; \ + $(QUIETLY) mkdir -p $(XLIBJVM_DIR) ; \ $(CC) $(SYMFLAG) $(ARCHFLAG/$(ISA)) -D$(TYPE) -I. \ $(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c -lc -lthread -ldoor [ -f $(XLIBJVM_DTRACE_G) ] || { ln -s $(LIBJVM_DTRACE) $(XLIBJVM_DTRACE_G); } @@ -153,8 +158,10 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) $(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@ $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DTRACE_DEBUGINFO) # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. -# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(XLIBJVM_DTRACE_DEBUGINFO) $@ - $(QUIETLY) $(ADD_GNU_DEBUGLINK) $(XLIBJVM_DTRACE_DEBUGINFO) $@ +# $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) ; +# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not +# in the link name: + ( cd $(XLIBJVM_DIR) && $(ADD_GNU_DEBUGLINK) $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) ) ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else @@ -165,7 +172,9 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) endif [ -f $(XLIBJVM_DTRACE_G_DEBUGINFO) ] || { ln -s $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO); } ifeq ($(ZIP_DEBUGINFO_FILES),1) - $(ZIPEXE) -q -y $(XLIBJVM_DTRACE_DIZ) $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO) +# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not +# in the archived name: + ( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -y $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE_G_DEBUGINFO) ) $(RM) $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO) [ -f $(XLIBJVM_DTRACE_G_DIZ) ] || { ln -s $(XLIBJVM_DTRACE_DIZ) $(XLIBJVM_DTRACE_G_DIZ); } endif diff --git a/hotspot/make/solaris/makefiles/fix_empty_sec_hdr_flags.make b/hotspot/make/solaris/makefiles/fix_empty_sec_hdr_flags.make index 75e15bf193e..bd763904480 100644 --- a/hotspot/make/solaris/makefiles/fix_empty_sec_hdr_flags.make +++ b/hotspot/make/solaris/makefiles/fix_empty_sec_hdr_flags.make @@ -24,8 +24,11 @@ # Rules to build fix_empty_sec_hdr_flags, used by vm.make on Solaris -GENERATED = ../generated -FIX_EMPTY_SEC_HDR_FLAGS = $(GENERATED)/fix_empty_sec_hdr_flags +# Allow $(FIX_EMPTY_SEC_HDR_FLAGS) to be called from any directory. +# We don't set or use the GENERATED macro to avoid affecting +# other HotSpot Makefiles. +TOPDIR = $(shell echo `pwd`) +FIX_EMPTY_SEC_HDR_FLAGS = $(TOPDIR)/../generated/fix_empty_sec_hdr_flags FIX_EMPTY_SEC_HDR_FLAGS_DIR = $(GAMMADIR)/src/os/solaris/fix_empty_sec_hdr_flags FIX_EMPTY_SEC_HDR_FLAGS_SRC = $(FIX_EMPTY_SEC_HDR_FLAGS_DIR)/fix_empty_sec_hdr_flags.c From 470db77b36b5352d644eb8801d09605b82f608a7 Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Thu, 21 Jun 2012 09:52:38 +0200 Subject: [PATCH 12/83] 7129715: MAC: SIGBUS in nsk stress test StackOverflowError may get lost on OSX. Reviewed-by: kvn, dcubed --- hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp b/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp index 2806e79ea4a..c6d31ab4f9a 100644 --- a/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp +++ b/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp @@ -516,7 +516,12 @@ JVM_handle_bsd_signal(int sig, } } - if (thread->thread_state() == _thread_in_Java) { + // We test if stub is already set (by the stack overflow code + // above) so it is not overwritten by the code that follows. This + // check is not required on other platforms, because on other + // platforms we check for SIGSEGV only or SIGBUS only, where here + // we have to check for both SIGSEGV and SIGBUS. + if (thread->thread_state() == _thread_in_Java && stub == NULL) { // Java thread running in Java code => find exception handler if any // a fault inside compiled code, the interpreter, or a stub From 6bc673930fe9d453ece2c42d96b3504b0a7d85c8 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Fri, 22 Jun 2012 10:40:48 -0700 Subject: [PATCH 13/83] 7178280: Failed new vector regression tests When looking for the same value in an other register check that all parts of that register has the same value. Reviewed-by: johnc, twisti --- hotspot/src/share/vm/opto/postaloc.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hotspot/src/share/vm/opto/postaloc.cpp b/hotspot/src/share/vm/opto/postaloc.cpp index 8e24d353d8d..912e07704e7 100644 --- a/hotspot/src/share/vm/opto/postaloc.cpp +++ b/hotspot/src/share/vm/opto/postaloc.cpp @@ -308,9 +308,10 @@ int PhaseChaitin::elide_copy( Node *n, int k, Block *current_block, Node_List &v } Node *vv = value[reg]; - if (n_regs > 1) { // Doubles check for aligned-adjacent pair - if( (reg&1)==0 ) continue; // Wrong half of a pair - if( vv != value[reg-1] ) continue; // Not a complete pair + if (n_regs > 1) { // Doubles and vectors check for aligned-adjacent set + uint last = (n_regs-1); // Looking for the last part of a set + if ((reg&last) != last) continue; // Wrong part of a set + if (!register_contains_value(vv, reg, n_regs, value)) continue; // Different value } if( vv == val || // Got a direct hit? (t && vv && vv->bottom_type() == t && vv->is_Mach() && @@ -573,7 +574,6 @@ void PhaseChaitin::post_allocate_copy_removal() { // Record other half of doubles uint def_ideal_reg = def->ideal_reg(); int n_regs = RegMask::num_registers(def_ideal_reg); - bool is_vec = RegMask::is_vector(def_ideal_reg); for (int l = 1; l < n_regs; l++) { OptoReg::Name ureg_lo = OptoReg::add(ureg,-l); if (!value[ureg_lo] && From 1a35ed23d9d678e90b7b789158e01cb094386bc8 Mon Sep 17 00:00:00 2001 From: Jiangli Zhou Date: Fri, 22 Jun 2012 14:00:39 -0400 Subject: [PATCH 14/83] 7177409: Perf regression in JVM_GetClassDeclaredFields after generic signature changes In fieldDescriptor::generic_signature() returns NULL immediately if the field has no generic signature. Reviewed-by: dholmes, coleenp, jcoomes --- hotspot/src/share/vm/runtime/fieldDescriptor.cpp | 4 ++++ hotspot/src/share/vm/runtime/fieldDescriptor.hpp | 1 + hotspot/src/share/vm/runtime/reflection.cpp | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/runtime/fieldDescriptor.cpp b/hotspot/src/share/vm/runtime/fieldDescriptor.cpp index fc26d9cd09e..3d5213f03a2 100644 --- a/hotspot/src/share/vm/runtime/fieldDescriptor.cpp +++ b/hotspot/src/share/vm/runtime/fieldDescriptor.cpp @@ -39,6 +39,10 @@ oop fieldDescriptor::loader() const { } Symbol* fieldDescriptor::generic_signature() const { + if (!has_generic_signature()) { + return NULL; + } + int idx = 0; instanceKlass* ik = instanceKlass::cast(field_holder()); for (AllFieldStream fs(ik); !fs.done(); fs.next()) { diff --git a/hotspot/src/share/vm/runtime/fieldDescriptor.hpp b/hotspot/src/share/vm/runtime/fieldDescriptor.hpp index f2cdbadbab9..ff6649cdad4 100644 --- a/hotspot/src/share/vm/runtime/fieldDescriptor.hpp +++ b/hotspot/src/share/vm/runtime/fieldDescriptor.hpp @@ -100,6 +100,7 @@ class fieldDescriptor VALUE_OBJ_CLASS_SPEC { bool is_field_access_watched() const { return access_flags().is_field_access_watched(); } bool is_field_modification_watched() const { return access_flags().is_field_modification_watched(); } + bool has_generic_signature() const { return access_flags().field_has_generic_signature(); } void set_is_field_access_watched(const bool value) { _access_flags.set_is_field_access_watched(value); diff --git a/hotspot/src/share/vm/runtime/reflection.cpp b/hotspot/src/share/vm/runtime/reflection.cpp index 04b896722d1..001d87b2853 100644 --- a/hotspot/src/share/vm/runtime/reflection.cpp +++ b/hotspot/src/share/vm/runtime/reflection.cpp @@ -829,7 +829,7 @@ oop Reflection::new_field(fieldDescriptor* fd, bool intern_name, TRAPS) { java_lang_reflect_Field::set_modifiers(rh(), fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS); java_lang_reflect_Field::set_override(rh(), false); if (java_lang_reflect_Field::has_signature_field() && - fd->generic_signature() != NULL) { + fd->has_generic_signature()) { Symbol* gs = fd->generic_signature(); Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL); java_lang_reflect_Field::set_signature(rh(), sig()); From f4fdc03167bf96619e878e49857caa50c639186e Mon Sep 17 00:00:00 2001 From: Yumin Qi Date: Fri, 22 Jun 2012 15:35:30 -0700 Subject: [PATCH 15/83] 7175133: jinfo failed to get system properties after 6924259 String offset and count fields as fix of 6924259 were removed, and become optional. SA still use offset and count fields to read String contents and failed. Fix if they exist, use them other then use value field only to read, this keeps consistent with the changes in 6924259. Reviewed-by: dholmes, mikael --- .../sun/jvm/hotspot/oops/OopUtilities.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java index edd8a806442..a42d8be68b5 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, 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 @@ -141,18 +141,19 @@ public class OopUtilities implements /* imports */ JVMTIThreadState { public static String stringOopToString(Oop stringOop) { if (offsetField == null) { InstanceKlass k = (InstanceKlass) stringOop.getKlass(); - offsetField = (IntField) k.findField("offset", "I"); - countField = (IntField) k.findField("count", "I"); + offsetField = (IntField) k.findField("offset", "I"); // optional + countField = (IntField) k.findField("count", "I"); // optional valueField = (OopField) k.findField("value", "[C"); if (Assert.ASSERTS_ENABLED) { - Assert.that(offsetField != null && - countField != null && - valueField != null, "must find all java.lang.String fields"); + Assert.that(valueField != null, "Field \'value\' of java.lang.String not found"); } } - return charArrayToString((TypeArray) valueField.getValue(stringOop), - offsetField.getValue(stringOop), - countField.getValue(stringOop)); + if (offsetField != null && countField != null) { + return charArrayToString((TypeArray) valueField.getValue(stringOop), + offsetField.getValue(stringOop), + countField.getValue(stringOop)); + } + return charArrayToString((TypeArray) valueField.getValue(stringOop)); } public static String stringOopToEscapedString(Oop stringOop) { From e742ae2157d2b41861975fa35d8de5483210a801 Mon Sep 17 00:00:00 2001 From: Yumin Qi Date: Fri, 22 Jun 2012 15:39:16 -0700 Subject: [PATCH 16/83] 7177128: SA cannot get correct system properties after 7126277 Bug fix of 7126277 changed hashing algorithm and also changed key as final field, this led SA unable to set correct value for key. Solution by reading key/value and insert them into the new table. Reviewed-by: dholmes, mikael --- .../jvm/hotspot/utilities/ObjectReader.java | 128 ++++++++++++++++-- 1 file changed, 118 insertions(+), 10 deletions(-) diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java index 55cb2995621..1f17a7fdb63 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, 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 @@ -85,6 +85,21 @@ public class ObjectReader { this(new ProcImageClassLoader()); } + static void debugPrintln(String msg) { + if (DEBUG) { + System.err.println("DEBUG>" + msg); + } + } + + static void debugPrintStackTrace(Exception exp) { + if (DEBUG) { + StackTraceElement[] els = exp.getStackTrace(); + for (int i = 0; i < els.length; i++) { + System.err.println("DEBUG>" + els[i].toString()); + } + } + } + public Object readObject(Oop oop) throws ClassNotFoundException { if (oop instanceof Instance) { return readInstance((Instance) oop); @@ -120,13 +135,96 @@ public class ObjectReader { } protected Symbol javaLangString; + protected Symbol javaUtilHashtableEntry; + protected Symbol javaUtilHashtable; + protected Symbol javaUtilProperties; + + protected Symbol getVMSymbol(String name) { + return VM.getVM().getSymbolTable().probe(name); + } + protected Symbol javaLangString() { if (javaLangString == null) { - javaLangString = VM.getVM().getSymbolTable().probe("java/lang/String"); + javaLangString = getVMSymbol("java/lang/String"); } return javaLangString; } + protected Symbol javaUtilHashtableEntry() { + if (javaUtilHashtableEntry == null) { + javaUtilHashtableEntry = getVMSymbol("java/util/Hashtable$Entry"); + } + return javaUtilHashtableEntry; + } + + protected Symbol javaUtilHashtable() { + if (javaUtilHashtable == null) { + javaUtilHashtable = getVMSymbol("java/util/Hashtable"); + } + return javaUtilHashtable; + } + + protected Symbol javaUtilProperties() { + if (javaUtilProperties == null) { + javaUtilProperties = getVMSymbol("java/util/Properties"); + } + return javaUtilProperties; + } + + private void setHashtableEntry(java.util.Hashtable p, Oop oop) { + InstanceKlass ik = (InstanceKlass)oop.getKlass(); + OopField keyField = (OopField)ik.findField("key", "Ljava/lang/Object;"); + OopField valueField = (OopField)ik.findField("value", "Ljava/lang/Object;"); + OopField nextField = (OopField)ik.findField("next", "Ljava/util/Hashtable$Entry;"); + if (DEBUG) { + if (Assert.ASSERTS_ENABLED) { + Assert.that(ik.getName().equals(javaUtilHashtableEntry()), "Not a Hashtable$Entry?"); + Assert.that(keyField != null && valueField != null && nextField != null, "Invalid fields!"); + } + } + + Object key = null; + Object value = null; + Oop next = null; + try { + key = readObject(keyField.getValue(oop)); + value = readObject(valueField.getValue(oop)); + next = (Oop)nextField.getValue(oop); + // For Properties, should use setProperty(k, v). Since it only runs in SA + // using put(k, v) should be OK. + p.put(key, value); + if (next != null) { + setHashtableEntry(p, next); + } + } catch (ClassNotFoundException ce) { + if( DEBUG) { + debugPrintln("Class not found " + ce); + debugPrintStackTrace(ce); + } + } + } + + protected Object getHashtable(Instance oop, boolean isProperties) { + InstanceKlass k = (InstanceKlass)oop.getKlass(); + OopField tableField = (OopField)k.findField("table", "[Ljava/util/Hashtable$Entry;"); + if (tableField == null) { + debugPrintln("Could not find field of [Ljava/util/Hashtable$Entry;"); + return null; + } + java.util.Hashtable table = (isProperties) ? new java.util.Properties() + : new java.util.Hashtable(); + ObjArray kvs = (ObjArray)tableField.getValue(oop); + long size = kvs.getLength(); + debugPrintln("Hashtable$Entry Size = " + size); + for (long i=0; i Date: Mon, 25 Jun 2012 14:34:35 +0200 Subject: [PATCH 17/83] 7178846: IterateThroughHeap: heap_iteration_callback passes a negative size Missing cast caused integer overflow Reviewed-by: rbackman, dholmes --- hotspot/src/share/vm/prims/jvmtiTagMap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp index a425430bf61..3b58f0f087e 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp @@ -585,7 +585,7 @@ class CallbackWrapper : public StackObj { _o = klassOop_if_java_lang_Class(o); // object size - _obj_size = _o->size() * wordSize; + _obj_size = (jlong)_o->size() * wordSize; // record the context _tag_map = tag_map; From 97cc5e6c4453e2264568abfa7cf23d75038a3ae5 Mon Sep 17 00:00:00 2001 From: Dean Long Date: Mon, 25 Jun 2012 15:34:06 -0400 Subject: [PATCH 18/83] 7156729: PPC: R_PPC_REL24 relocation error related to some libraries built without -fPIC Build powerpc with -fPIC Reviewed-by: mikael, vladidan, roland --- hotspot/make/pic.make | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hotspot/make/pic.make b/hotspot/make/pic.make index 4c1e6b1a1b9..79b2ea2f093 100644 --- a/hotspot/make/pic.make +++ b/hotspot/make/pic.make @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, 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 @@ -30,6 +30,13 @@ include $(GAMMADIR)/make/scm.make ifneq ($(OSNAME), windows) ifndef LP64 + PARTIAL_NONPIC=1 + endif + PIC_ARCH = ppc + ifneq ("$(filter $(PIC_ARCH),$(BUILDARCH))","") + PARTIAL_NONPIC=0 + endif + ifeq ($(PARTIAL_NONPIC),1) NONPIC_DIRS = memory oops gc_implementation gc_interface NONPIC_DIRS := $(foreach dir,$(NONPIC_DIRS), $(GAMMADIR)/src/share/vm/$(dir)) # Look for source files under NONPIC_DIRS From 79ee0ab0c240550149075227e3659386ff31743e Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Mon, 25 Jun 2012 16:00:55 -0700 Subject: [PATCH 19/83] 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets Remove the per-thread expansion tables (PosParPRT) and associated expansion and compaction from the fine grain RSet entries. This code has been unused for a while. Reviewed-by: johnc, brutisso --- .../gc_implementation/g1/g1CollectedHeap.cpp | 3 - .../vm/gc_implementation/g1/g1_globals.hpp | 3 + .../gc_implementation/g1/heapRegionRemSet.cpp | 590 ++++-------------- .../gc_implementation/g1/heapRegionRemSet.hpp | 65 +- 4 files changed, 135 insertions(+), 526 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index fdd82c5c9c6..99f95cbb93b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -4750,9 +4750,6 @@ public: _g1h->g1_policy()->record_thread_age_table(pss.age_table()); _g1h->update_surviving_young_words(pss.surviving_young_words()+1); - // Clean up any par-expanded rem sets. - HeapRegionRemSet::par_cleanup(); - if (ParallelGCVerbose) { MutexLocker x(stats_lock()); pss.print_termination_stats(worker_id); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp index 0378688c015..a589739f7d4 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp @@ -53,6 +53,9 @@ develop(bool, G1TraceMarkStackOverflow, false, \ "If true, extra debugging code for CM restart for ovflw.") \ \ + develop(bool, G1TraceHeapRegionRememberedSet, false, \ + "Enables heap region remembered set debug logs") \ + \ diagnostic(bool, G1SummarizeConcMark, false, \ "Summarize concurrent mark info") \ \ diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp index fc275a6edae..7859b591988 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp @@ -30,13 +30,10 @@ #include "gc_implementation/g1/heapRegionSeq.inline.hpp" #include "memory/allocation.hpp" #include "memory/space.inline.hpp" +#include "oops/oop.inline.hpp" #include "utilities/bitMap.inline.hpp" #include "utilities/globalDefinitions.hpp" -#define HRRS_VERBOSE 0 - -#define PRT_COUNT_OCCUPIED 1 - // OtherRegionsTable class PerRegionTable: public CHeapObj { @@ -45,14 +42,10 @@ class PerRegionTable: public CHeapObj { HeapRegion* _hr; BitMap _bm; -#if PRT_COUNT_OCCUPIED jint _occupied; -#endif - PerRegionTable* _next_free; - - PerRegionTable* next_free() { return _next_free; } - void set_next_free(PerRegionTable* prt) { _next_free = prt; } + // next pointer for free/allocated lis + PerRegionTable* _next; static PerRegionTable* _free_list; @@ -69,63 +62,25 @@ protected: // We need access in order to union things into the base table. BitMap* bm() { return &_bm; } -#if PRT_COUNT_OCCUPIED void recount_occupied() { _occupied = (jint) bm()->count_one_bits(); } -#endif PerRegionTable(HeapRegion* hr) : _hr(hr), -#if PRT_COUNT_OCCUPIED _occupied(0), -#endif _bm(HeapRegion::CardsPerRegion, false /* in-resource-area */) {} - static void free(PerRegionTable* prt) { - while (true) { - PerRegionTable* fl = _free_list; - prt->set_next_free(fl); - PerRegionTable* res = - (PerRegionTable*) - Atomic::cmpxchg_ptr(prt, &_free_list, fl); - if (res == fl) return; - } - ShouldNotReachHere(); - } - - static PerRegionTable* alloc(HeapRegion* hr) { - PerRegionTable* fl = _free_list; - while (fl != NULL) { - PerRegionTable* nxt = fl->next_free(); - PerRegionTable* res = - (PerRegionTable*) - Atomic::cmpxchg_ptr(nxt, &_free_list, fl); - if (res == fl) { - fl->init(hr); - return fl; - } else { - fl = _free_list; - } - } - assert(fl == NULL, "Loop condition."); - return new PerRegionTable(hr); - } - void add_card_work(CardIdx_t from_card, bool par) { if (!_bm.at(from_card)) { if (par) { if (_bm.par_at_put(from_card, 1)) { -#if PRT_COUNT_OCCUPIED Atomic::inc(&_occupied); -#endif } } else { _bm.at_put(from_card, 1); -#if PRT_COUNT_OCCUPIED _occupied++; -#endif } } } @@ -134,10 +89,13 @@ protected: // Must make this robust in case "from" is not in "_hr", because of // concurrency. -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT").", - from, *from); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT").", + from, + UseCompressedOops + ? oopDesc::load_decode_heap_oop((narrowOop*)from) + : oopDesc::load_decode_heap_oop((oop*)from)); + } HeapRegion* loc_hr = hr(); // If the test below fails, then this table was reused concurrently @@ -162,23 +120,16 @@ public: HeapRegion* hr() const { return _hr; } -#if PRT_COUNT_OCCUPIED jint occupied() const { // Overkill, but if we ever need it... // guarantee(_occupied == _bm.count_one_bits(), "Check"); return _occupied; } -#else - jint occupied() const { - return _bm.count_one_bits(); - } -#endif void init(HeapRegion* hr) { _hr = hr; -#if PRT_COUNT_OCCUPIED + _next = NULL; _occupied = 0; -#endif _bm.clear(); } @@ -194,9 +145,7 @@ public: HeapWord* hr_bot = hr()->bottom(); size_t hr_first_card_index = ctbs->index_for(hr_bot); bm()->set_intersection_at_offset(*card_bm, hr_first_card_index); -#if PRT_COUNT_OCCUPIED recount_occupied(); -#endif } void add_card(CardIdx_t from_card_index) { @@ -218,16 +167,6 @@ public: return sizeof(this) + _bm.size_in_words() * HeapWordSize; } - static size_t fl_mem_size() { - PerRegionTable* cur = _free_list; - size_t res = 0; - while (cur != NULL) { - res += sizeof(PerRegionTable); - cur = cur->next_free(); - } - return res; - } - // Requires "from" to be in "hr()". bool contains_reference(OopOrNarrowOopStar from) const { assert(hr()->is_in_reserved(from), "Precondition."); @@ -235,122 +174,29 @@ public: CardTableModRefBS::card_size); return _bm.at(card_ind); } -}; -PerRegionTable* PerRegionTable::_free_list = NULL; + PerRegionTable* next() const { return _next; } + void set_next(PerRegionTable* nxt) { _next = nxt; } + PerRegionTable** next_addr() { return &_next; } - -#define COUNT_PAR_EXPANDS 0 - -#if COUNT_PAR_EXPANDS -static jint n_par_expands = 0; -static jint n_par_contracts = 0; -static jint par_expand_list_len = 0; -static jint max_par_expand_list_len = 0; - -static void print_par_expand() { - Atomic::inc(&n_par_expands); - Atomic::inc(&par_expand_list_len); - if (par_expand_list_len > max_par_expand_list_len) { - max_par_expand_list_len = par_expand_list_len; - } - if ((n_par_expands % 10) == 0) { - gclog_or_tty->print_cr("\n\n%d par expands: %d contracts, " - "len = %d, max_len = %d\n.", - n_par_expands, n_par_contracts, par_expand_list_len, - max_par_expand_list_len); - } -} -#endif - -class PosParPRT: public PerRegionTable { - PerRegionTable** _par_tables; - - enum SomePrivateConstants { - ReserveParTableExpansion = 1 - }; - - void par_contract() { - assert(_par_tables != NULL, "Precondition."); - int n = HeapRegionRemSet::num_par_rem_sets()-1; - for (int i = 0; i < n; i++) { - _par_tables[i]->union_bitmap_into(bm()); - PerRegionTable::free(_par_tables[i]); - _par_tables[i] = NULL; - } -#if PRT_COUNT_OCCUPIED - // We must recount the "occupied." - recount_occupied(); -#endif - FREE_C_HEAP_ARRAY(PerRegionTable*, _par_tables); - _par_tables = NULL; -#if COUNT_PAR_EXPANDS - Atomic::inc(&n_par_contracts); - Atomic::dec(&par_expand_list_len); -#endif - } - - static PerRegionTable** _par_table_fl; - - PosParPRT* _next; - - static PosParPRT* _free_list; - - PerRegionTable** par_tables() const { - assert(uintptr_t(NULL) == 0, "Assumption."); - if (uintptr_t(_par_tables) <= ReserveParTableExpansion) - return NULL; - else - return _par_tables; - } - - PosParPRT* _next_par_expanded; - PosParPRT* next_par_expanded() { return _next_par_expanded; } - void set_next_par_expanded(PosParPRT* ppprt) { _next_par_expanded = ppprt; } - static PosParPRT* _par_expanded_list; - -public: - - PosParPRT(HeapRegion* hr) : PerRegionTable(hr), _par_tables(NULL) {} - - jint occupied() const { - jint res = PerRegionTable::occupied(); - if (par_tables() != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - res += par_tables()[i]->occupied(); - } - } - return res; - } - - void init(HeapRegion* hr) { - PerRegionTable::init(hr); - _next = NULL; - if (par_tables() != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - par_tables()[i]->init(hr); - } - } - } - - static void free(PosParPRT* prt) { + static void free(PerRegionTable* prt) { while (true) { - PosParPRT* fl = _free_list; + PerRegionTable* fl = _free_list; prt->set_next(fl); - PosParPRT* res = - (PosParPRT*) + PerRegionTable* res = + (PerRegionTable*) Atomic::cmpxchg_ptr(prt, &_free_list, fl); if (res == fl) return; } ShouldNotReachHere(); } - static PosParPRT* alloc(HeapRegion* hr) { - PosParPRT* fl = _free_list; + static PerRegionTable* alloc(HeapRegion* hr) { + PerRegionTable* fl = _free_list; while (fl != NULL) { - PosParPRT* nxt = fl->next(); - PosParPRT* res = - (PosParPRT*) + PerRegionTable* nxt = fl->next(); + PerRegionTable* res = + (PerRegionTable*) Atomic::cmpxchg_ptr(nxt, &_free_list, fl); if (res == fl) { fl->init(hr); @@ -360,148 +206,26 @@ public: } } assert(fl == NULL, "Loop condition."); - return new PosParPRT(hr); - } - - PosParPRT* next() const { return _next; } - void set_next(PosParPRT* nxt) { _next = nxt; } - PosParPRT** next_addr() { return &_next; } - - bool should_expand(int tid) { - // Given that we now defer RSet updates for after a GC we don't - // really need to expand the tables any more. This code should be - // cleaned up in the future (see CR 6921087). - return false; - } - - void par_expand() { - int n = HeapRegionRemSet::num_par_rem_sets()-1; - if (n <= 0) return; - if (_par_tables == NULL) { - PerRegionTable* res = - (PerRegionTable*) - Atomic::cmpxchg_ptr((PerRegionTable*)ReserveParTableExpansion, - &_par_tables, NULL); - if (res != NULL) return; - // Otherwise, we reserved the right to do the expansion. - - PerRegionTable** ptables = NEW_C_HEAP_ARRAY(PerRegionTable*, n); - for (int i = 0; i < n; i++) { - PerRegionTable* ptable = PerRegionTable::alloc(hr()); - ptables[i] = ptable; - } - // Here we do not need an atomic. - _par_tables = ptables; -#if COUNT_PAR_EXPANDS - print_par_expand(); -#endif - // We must put this table on the expanded list. - PosParPRT* exp_head = _par_expanded_list; - while (true) { - set_next_par_expanded(exp_head); - PosParPRT* res = - (PosParPRT*) - Atomic::cmpxchg_ptr(this, &_par_expanded_list, exp_head); - if (res == exp_head) return; - // Otherwise. - exp_head = res; - } - ShouldNotReachHere(); - } - } - - void add_reference(OopOrNarrowOopStar from, int tid) { - // Expand if necessary. - PerRegionTable** pt = par_tables(); - if (pt != NULL) { - // We always have to assume that mods to table 0 are in parallel, - // because of the claiming scheme in parallel expansion. A thread - // with tid != 0 that finds the table to be NULL, but doesn't succeed - // in claiming the right of expanding it, will end up in the else - // clause of the above if test. That thread could be delayed, and a - // thread 0 add reference could see the table expanded, and come - // here. Both threads would be adding in parallel. But we get to - // not use atomics for tids > 0. - if (tid == 0) { - PerRegionTable::add_reference(from); - } else { - pt[tid-1]->seq_add_reference(from); - } - } else { - // Not expanded -- add to the base table. - PerRegionTable::add_reference(from); - } - } - - void scrub(CardTableModRefBS* ctbs, BitMap* card_bm) { - assert(_par_tables == NULL, "Precondition"); - PerRegionTable::scrub(ctbs, card_bm); - } - - size_t mem_size() const { - size_t res = - PerRegionTable::mem_size() + sizeof(this) - sizeof(PerRegionTable); - if (_par_tables != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - res += _par_tables[i]->mem_size(); - } - } - return res; + return new PerRegionTable(hr); } static size_t fl_mem_size() { - PosParPRT* cur = _free_list; + PerRegionTable* cur = _free_list; size_t res = 0; while (cur != NULL) { - res += sizeof(PosParPRT); + res += sizeof(PerRegionTable); cur = cur->next(); } return res; } - - bool contains_reference(OopOrNarrowOopStar from) const { - if (PerRegionTable::contains_reference(from)) return true; - if (_par_tables != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - if (_par_tables[i]->contains_reference(from)) return true; - } - } - return false; - } - - static void par_contract_all(); }; -void PosParPRT::par_contract_all() { - PosParPRT* hd = _par_expanded_list; - while (hd != NULL) { - PosParPRT* nxt = hd->next_par_expanded(); - PosParPRT* res = - (PosParPRT*) - Atomic::cmpxchg_ptr(nxt, &_par_expanded_list, hd); - if (res == hd) { - // We claimed the right to contract this table. - hd->set_next_par_expanded(NULL); - hd->par_contract(); - hd = _par_expanded_list; - } else { - hd = res; - } - } -} - -PosParPRT* PosParPRT::_free_list = NULL; -PosParPRT* PosParPRT::_par_expanded_list = NULL; - -jint OtherRegionsTable::_cache_probes = 0; -jint OtherRegionsTable::_cache_hits = 0; +PerRegionTable* PerRegionTable::_free_list = NULL; size_t OtherRegionsTable::_max_fine_entries = 0; size_t OtherRegionsTable::_mod_max_fine_entries_mask = 0; -#if SAMPLE_FOR_EVICTION size_t OtherRegionsTable::_fine_eviction_stride = 0; size_t OtherRegionsTable::_fine_eviction_sample_size = 0; -#endif OtherRegionsTable::OtherRegionsTable(HeapRegion* hr) : _g1h(G1CollectedHeap::heap()), @@ -511,34 +235,36 @@ OtherRegionsTable::OtherRegionsTable(HeapRegion* hr) : false /* in-resource-area */), _fine_grain_regions(NULL), _n_fine_entries(0), _n_coarse_entries(0), -#if SAMPLE_FOR_EVICTION _fine_eviction_start(0), -#endif _sparse_table(hr) { - typedef PosParPRT* PosParPRTPtr; + typedef PerRegionTable* PerRegionTablePtr; + if (_max_fine_entries == 0) { assert(_mod_max_fine_entries_mask == 0, "Both or none."); size_t max_entries_log = (size_t)log2_long((jlong)G1RSetRegionEntries); _max_fine_entries = (size_t)(1 << max_entries_log); _mod_max_fine_entries_mask = _max_fine_entries - 1; -#if SAMPLE_FOR_EVICTION + assert(_fine_eviction_sample_size == 0 && _fine_eviction_stride == 0, "All init at same time."); _fine_eviction_sample_size = MAX2((size_t)4, max_entries_log); _fine_eviction_stride = _max_fine_entries / _fine_eviction_sample_size; -#endif } - _fine_grain_regions = new PosParPRTPtr[_max_fine_entries]; - if (_fine_grain_regions == NULL) + + _fine_grain_regions = new PerRegionTablePtr[_max_fine_entries]; + + if (_fine_grain_regions == NULL) { vm_exit_out_of_memory(sizeof(void*)*_max_fine_entries, "Failed to allocate _fine_grain_entries."); + } + for (size_t i = 0; i < _max_fine_entries; i++) { _fine_grain_regions[i] = NULL; } } -int** OtherRegionsTable::_from_card_cache = NULL; +int** OtherRegionsTable::_from_card_cache = NULL; size_t OtherRegionsTable::_from_card_cache_max_regions = 0; size_t OtherRegionsTable::_from_card_cache_mem_size = 0; @@ -579,38 +305,26 @@ void OtherRegionsTable::print_from_card_cache() { void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { size_t cur_hrs_ind = (size_t) hr()->hrs_index(); -#if HRRS_VERBOSE - gclog_or_tty->print_cr("ORT::add_reference_work(" PTR_FORMAT "->" PTR_FORMAT ").", - from, - UseCompressedOops - ? oopDesc::load_decode_heap_oop((narrowOop*)from) - : oopDesc::load_decode_heap_oop((oop*)from)); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr("ORT::add_reference_work(" PTR_FORMAT "->" PTR_FORMAT ").", + from, + UseCompressedOops + ? oopDesc::load_decode_heap_oop((narrowOop*)from) + : oopDesc::load_decode_heap_oop((oop*)from)); + } int from_card = (int)(uintptr_t(from) >> CardTableModRefBS::card_shift); -#if HRRS_VERBOSE - gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = %d)", - hr()->bottom(), from_card, - _from_card_cache[tid][cur_hrs_ind]); -#endif - -#define COUNT_CACHE 0 -#if COUNT_CACHE - jint p = Atomic::add(1, &_cache_probes); - if ((p % 10000) == 0) { - jint hits = _cache_hits; - gclog_or_tty->print_cr("%d/%d = %5.2f%% RS cache hits.", - _cache_hits, p, 100.0* (float)hits/(float)p); + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = %d)", + hr()->bottom(), from_card, + _from_card_cache[tid][cur_hrs_ind]); } -#endif + if (from_card == _from_card_cache[tid][cur_hrs_ind]) { -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" from-card cache hit."); -#endif -#if COUNT_CACHE - Atomic::inc(&_cache_hits); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" from-card cache hit."); + } assert(contains_reference(from), "We just added it!"); return; } else { @@ -623,16 +337,16 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { // If the region is already coarsened, return. if (_coarse_map.at(from_hrs_ind)) { -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" coarse map hit."); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" coarse map hit."); + } assert(contains_reference(from), "We just added it!"); return; } // Otherwise find a per-region table to add it to. size_t ind = from_hrs_ind & _mod_max_fine_entries_mask; - PosParPRT* prt = find_region_table(ind, from_hr); + PerRegionTable* prt = find_region_table(ind, from_hr); if (prt == NULL) { MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag); // Confirm that it's really not there... @@ -649,35 +363,35 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { _sparse_table.add_card(from_hrs_ind, card_index)) { if (G1RecordHRRSOops) { HeapRegionRemSet::record(hr(), from); -#if HRRS_VERBOSE - gclog_or_tty->print(" Added card " PTR_FORMAT " to region " - "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", - align_size_down(uintptr_t(from), - CardTableModRefBS::card_size), - hr()->bottom(), from); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print(" Added card " PTR_FORMAT " to region " + "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", + align_size_down(uintptr_t(from), + CardTableModRefBS::card_size), + hr()->bottom(), from); + } + } + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" added card to sparse table."); } -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" added card to sparse table."); -#endif assert(contains_reference_locked(from), "We just added it!"); return; } else { -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" [tid %d] sparse table entry " - "overflow(f: %d, t: %d)", - tid, from_hrs_ind, cur_hrs_ind); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" [tid %d] sparse table entry " + "overflow(f: %d, t: %d)", + tid, from_hrs_ind, cur_hrs_ind); + } } if (_n_fine_entries == _max_fine_entries) { prt = delete_region_table(); } else { - prt = PosParPRT::alloc(from_hr); + prt = PerRegionTable::alloc(from_hr); } prt->init(from_hr); - PosParPRT* first_prt = _fine_grain_regions[ind]; + PerRegionTable* first_prt = _fine_grain_regions[ind]; prt->set_next(first_prt); // XXX Maybe move to init? _fine_grain_regions[ind] = prt; _n_fine_entries++; @@ -704,38 +418,25 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { // OtherRegionsTable for why this is OK. assert(prt != NULL, "Inv"); - if (prt->should_expand(tid)) { - MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag); - HeapRegion* prt_hr = prt->hr(); - if (prt_hr == from_hr) { - // Make sure the table still corresponds to the same region - prt->par_expand(); - prt->add_reference(from, tid); - } - // else: The table has been concurrently coarsened, evicted, and - // the table data structure re-used for another table. So, we - // don't need to add the reference any more given that the table - // has been coarsened and the whole region will be scanned anyway. - } else { - prt->add_reference(from, tid); - } + prt->add_reference(from); + if (G1RecordHRRSOops) { HeapRegionRemSet::record(hr(), from); -#if HRRS_VERBOSE - gclog_or_tty->print("Added card " PTR_FORMAT " to region " - "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", - align_size_down(uintptr_t(from), - CardTableModRefBS::card_size), - hr()->bottom(), from); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print("Added card " PTR_FORMAT " to region " + "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", + align_size_down(uintptr_t(from), + CardTableModRefBS::card_size), + hr()->bottom(), from); + } } assert(contains_reference(from), "We just added it!"); } -PosParPRT* +PerRegionTable* OtherRegionsTable::find_region_table(size_t ind, HeapRegion* hr) const { assert(0 <= ind && ind < _max_fine_entries, "Preconditions."); - PosParPRT* prt = _fine_grain_regions[ind]; + PerRegionTable* prt = _fine_grain_regions[ind]; while (prt != NULL && prt->hr() != hr) { prt = prt->next(); } @@ -743,32 +444,16 @@ OtherRegionsTable::find_region_table(size_t ind, HeapRegion* hr) const { return prt; } - -#define DRT_CENSUS 0 - -#if DRT_CENSUS -static const int HistoSize = 6; -static int global_histo[HistoSize] = { 0, 0, 0, 0, 0, 0 }; -static int coarsenings = 0; -static int occ_sum = 0; -#endif - jint OtherRegionsTable::_n_coarsenings = 0; -PosParPRT* OtherRegionsTable::delete_region_table() { -#if DRT_CENSUS - int histo[HistoSize] = { 0, 0, 0, 0, 0, 0 }; - const int histo_limits[] = { 1, 4, 16, 64, 256, 2048 }; -#endif - +PerRegionTable* OtherRegionsTable::delete_region_table() { assert(_m.owned_by_self(), "Precondition"); assert(_n_fine_entries == _max_fine_entries, "Precondition"); - PosParPRT* max = NULL; + PerRegionTable* max = NULL; jint max_occ = 0; - PosParPRT** max_prev; + PerRegionTable** max_prev; size_t max_ind; -#if SAMPLE_FOR_EVICTION size_t i = _fine_eviction_start; for (size_t k = 0; k < _fine_eviction_sample_size; k++) { size_t ii = i; @@ -778,8 +463,8 @@ PosParPRT* OtherRegionsTable::delete_region_table() { if (ii == _max_fine_entries) ii = 0; guarantee(ii != i, "We must find one."); } - PosParPRT** prev = &_fine_grain_regions[ii]; - PosParPRT* cur = *prev; + PerRegionTable** prev = &_fine_grain_regions[ii]; + PerRegionTable* cur = *prev; while (cur != NULL) { jint cur_occ = cur->occupied(); if (max == NULL || cur_occ > max_occ) { @@ -794,64 +479,27 @@ PosParPRT* OtherRegionsTable::delete_region_table() { i = i + _fine_eviction_stride; if (i >= _n_fine_entries) i = i - _n_fine_entries; } + _fine_eviction_start++; - if (_fine_eviction_start >= _n_fine_entries) + + if (_fine_eviction_start >= _n_fine_entries) { _fine_eviction_start -= _n_fine_entries; -#else - for (int i = 0; i < _max_fine_entries; i++) { - PosParPRT** prev = &_fine_grain_regions[i]; - PosParPRT* cur = *prev; - while (cur != NULL) { - jint cur_occ = cur->occupied(); -#if DRT_CENSUS - for (int k = 0; k < HistoSize; k++) { - if (cur_occ <= histo_limits[k]) { - histo[k]++; global_histo[k]++; break; - } - } -#endif - if (max == NULL || cur_occ > max_occ) { - max = cur; - max_prev = prev; - max_ind = i; - max_occ = cur_occ; - } - prev = cur->next_addr(); - cur = cur->next(); - } } -#endif - // XXX + guarantee(max != NULL, "Since _n_fine_entries > 0"); -#if DRT_CENSUS - gclog_or_tty->print_cr("In a coarsening: histo of occs:"); - for (int k = 0; k < HistoSize; k++) { - gclog_or_tty->print_cr(" <= %4d: %5d.", histo_limits[k], histo[k]); - } - coarsenings++; - occ_sum += max_occ; - if ((coarsenings % 100) == 0) { - gclog_or_tty->print_cr("\ncoarsenings = %d; global summary:", coarsenings); - for (int k = 0; k < HistoSize; k++) { - gclog_or_tty->print_cr(" <= %4d: %5d.", histo_limits[k], global_histo[k]); - } - gclog_or_tty->print_cr("Avg occ of deleted region = %6.2f.", - (float)occ_sum/(float)coarsenings); - } -#endif // Set the corresponding coarse bit. size_t max_hrs_index = (size_t) max->hr()->hrs_index(); if (!_coarse_map.at(max_hrs_index)) { _coarse_map.at_put(max_hrs_index, true); _n_coarse_entries++; -#if 0 - gclog_or_tty->print("Coarsened entry in region [" PTR_FORMAT "...] " - "for region [" PTR_FORMAT "...] (%d coarse entries).\n", - hr()->bottom(), - max->hr()->bottom(), - _n_coarse_entries); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print("Coarsened entry in region [" PTR_FORMAT "...] " + "for region [" PTR_FORMAT "...] (%d coarse entries).\n", + hr()->bottom(), + max->hr()->bottom(), + _n_coarse_entries); + } } // Unsplice. @@ -883,10 +531,10 @@ void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, // Now do the fine-grained maps. for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; - PosParPRT** prev = &_fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; + PerRegionTable** prev = &_fine_grain_regions[i]; while (cur != NULL) { - PosParPRT* nxt = cur->next(); + PerRegionTable* nxt = cur->next(); // If the entire region is dead, eliminate. if (G1RSScrubVerbose) { gclog_or_tty->print_cr(" For other region %u:", @@ -899,7 +547,7 @@ void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, if (G1RSScrubVerbose) { gclog_or_tty->print_cr(" deleted via region map."); } - PosParPRT::free(cur); + PerRegionTable::free(cur); } else { // Do fine-grain elimination. if (G1RSScrubVerbose) { @@ -914,7 +562,7 @@ void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, *prev = nxt; cur->set_next(NULL); _n_fine_entries--; - PosParPRT::free(cur); + PerRegionTable::free(cur); } else { prev = cur->next_addr(); } @@ -940,7 +588,7 @@ size_t OtherRegionsTable::occupied() const { size_t OtherRegionsTable::occ_fine() const { size_t sum = 0; for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; while (cur != NULL) { sum += cur->occupied(); cur = cur->next(); @@ -962,13 +610,13 @@ size_t OtherRegionsTable::mem_size() const { MutexLockerEx x((Mutex*)&_m, Mutex::_no_safepoint_check_flag); size_t sum = 0; for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; while (cur != NULL) { sum += cur->mem_size(); cur = cur->next(); } } - sum += (sizeof(PosParPRT*) * _max_fine_entries); + sum += (sizeof(PerRegionTable*) * _max_fine_entries); sum += (_coarse_map.size_in_words() * HeapWordSize); sum += (_sparse_table.mem_size()); sum += sizeof(*this) - sizeof(_sparse_table); // Avoid double counting above. @@ -980,7 +628,7 @@ size_t OtherRegionsTable::static_mem_size() { } size_t OtherRegionsTable::fl_mem_size() { - return PerRegionTable::fl_mem_size() + PosParPRT::fl_mem_size(); + return PerRegionTable::fl_mem_size(); } void OtherRegionsTable::clear_fcc() { @@ -992,10 +640,10 @@ void OtherRegionsTable::clear_fcc() { void OtherRegionsTable::clear() { MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag); for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; while (cur != NULL) { - PosParPRT* nxt = cur->next(); - PosParPRT::free(cur); + PerRegionTable* nxt = cur->next(); + PerRegionTable::free(cur); cur = nxt; } _fine_grain_regions[i] = NULL; @@ -1035,8 +683,8 @@ void OtherRegionsTable::clear_incoming_entry(HeapRegion* from_hr) { bool OtherRegionsTable::del_single_region_table(size_t ind, HeapRegion* hr) { assert(0 <= ind && ind < _max_fine_entries, "Preconditions."); - PosParPRT** prev_addr = &_fine_grain_regions[ind]; - PosParPRT* prt = *prev_addr; + PerRegionTable** prev_addr = &_fine_grain_regions[ind]; + PerRegionTable* prt = *prev_addr; while (prt != NULL && prt->hr() != hr) { prev_addr = prt->next_addr(); prt = prt->next(); @@ -1044,7 +692,7 @@ bool OtherRegionsTable::del_single_region_table(size_t ind, if (prt != NULL) { assert(prt->hr() == hr, "Loop postcondition."); *prev_addr = prt->next(); - PosParPRT::free(prt); + PerRegionTable::free(prt); _n_fine_entries--; return true; } else { @@ -1065,7 +713,7 @@ bool OtherRegionsTable::contains_reference_locked(OopOrNarrowOopStar from) const // Is this region in the coarse map? if (_coarse_map.at(hr_ind)) return true; - PosParPRT* prt = find_region_table(hr_ind & _mod_max_fine_entries_mask, + PerRegionTable* prt = find_region_table(hr_ind & _mod_max_fine_entries_mask, hr); if (prt != NULL) { return prt->contains_reference(from); @@ -1145,7 +793,7 @@ void HeapRegionRemSet::print() const { G1CollectedHeap::heap()->bot_shared()->address_for_index(card_index); gclog_or_tty->print_cr(" Card " PTR_FORMAT, card_start); } - // XXX + if (iter.n_yielded() != occupied()) { gclog_or_tty->print_cr("Yielded disagrees with occupied:"); gclog_or_tty->print_cr(" %6d yielded (%6d coarse, %6d fine).", @@ -1163,10 +811,6 @@ void HeapRegionRemSet::cleanup() { SparsePRT::cleanup_all(); } -void HeapRegionRemSet::par_cleanup() { - PosParPRT::par_contract_all(); -} - void HeapRegionRemSet::clear() { _other_regions.clear(); assert(occupied() == 0, "Should be clear."); diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp index 504afa2ef04..2a922aca5b2 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, 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 @@ -35,7 +35,7 @@ class G1CollectedHeap; class G1BlockOffsetSharedArray; class HeapRegion; class HeapRegionRemSetIterator; -class PosParPRT; +class PerRegionTable; class SparsePRT; // Essentially a wrapper around SparsePRTCleanupTask. See @@ -79,15 +79,14 @@ class OtherRegionsTable VALUE_OBJ_CLASS_SPEC { size_t _n_coarse_entries; static jint _n_coarsenings; - PosParPRT** _fine_grain_regions; - size_t _n_fine_entries; + PerRegionTable** _fine_grain_regions; + size_t _n_fine_entries; -#define SAMPLE_FOR_EVICTION 1 -#if SAMPLE_FOR_EVICTION + // Used to sample a subset of the fine grain PRTs to determine which + // PRT to evict and coarsen. size_t _fine_eviction_start; static size_t _fine_eviction_stride; static size_t _fine_eviction_sample_size; -#endif SparsePRT _sparse_table; @@ -98,21 +97,18 @@ class OtherRegionsTable VALUE_OBJ_CLASS_SPEC { // Requires "prt" to be the first element of the bucket list appropriate // for "hr". If this list contains an entry for "hr", return it, // otherwise return "NULL". - PosParPRT* find_region_table(size_t ind, HeapRegion* hr) const; + PerRegionTable* find_region_table(size_t ind, HeapRegion* hr) const; - // Find, delete, and return a candidate PosParPRT, if any exists, + // Find, delete, and return a candidate PerRegionTable, if any exists, // adding the deleted region to the coarse bitmap. Requires the caller // to hold _m, and the fine-grain table to be full. - PosParPRT* delete_region_table(); + PerRegionTable* delete_region_table(); // If a PRT for "hr" is in the bucket list indicated by "ind" (which must // be the correct index for "hr"), delete it and return true; else return // false. bool del_single_region_table(size_t ind, HeapRegion* hr); - static jint _cache_probes; - static jint _cache_hits; - // Indexed by thread X heap region, to minimize thread contention. static int** _from_card_cache; static size_t _from_card_cache_max_regions; @@ -127,10 +123,6 @@ public: // sense. void add_reference(OopOrNarrowOopStar from, int tid); - void add_reference(OopOrNarrowOopStar from) { - return add_reference(from, 0); - } - // Removes any entries shown by the given bitmaps to contain only dead // objects. void scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm); @@ -233,14 +225,12 @@ public: static jint n_coarsenings() { return OtherRegionsTable::n_coarsenings(); } - /* Used in the sequential case. Returns "true" iff this addition causes - the size limit to be reached. */ + // Used in the sequential case. void add_reference(OopOrNarrowOopStar from) { - _other_regions.add_reference(from); + _other_regions.add_reference(from, 0); } - /* Used in the parallel case. Returns "true" iff this addition causes - the size limit to be reached. */ + // Used in the parallel case. void add_reference(OopOrNarrowOopStar from, int tid) { _other_regions.add_reference(from, tid); } @@ -253,15 +243,6 @@ public: // entries for this region in other remsets. void clear(); - // Forget any entries due to pointers from "from_hr". - void clear_incoming_entry(HeapRegion* from_hr) { - _other_regions.clear_incoming_entry(from_hr); - } - -#if 0 - virtual void cleanup() = 0; -#endif - // Attempt to claim the region. Returns true iff this call caused an // atomic transition from Unclaimed to Claimed. bool claim_iter(); @@ -290,12 +271,6 @@ public: // Initialize the given iterator to iterate over this rem set. void init_iterator(HeapRegionRemSetIterator* iter) const; -#if 0 - // Apply the "do_card" method to the start address of every card in the - // rem set. Returns false if some application of the closure aborted. - virtual bool card_iterate(CardClosure* iter) = 0; -#endif - // The actual # of bytes this hr_remset takes up. size_t mem_size() { return _other_regions.mem_size() @@ -322,10 +297,7 @@ public: void print() const; // Called during a stop-world phase to perform any deferred cleanups. - // The second version may be called by parallel threads after then finish - // collection work. static void cleanup(); - static void par_cleanup(); // Declare the heap size (in # of regions) to the HeapRegionRemSet(s). // (Uses it to initialize from_card_cache). @@ -367,7 +339,7 @@ class HeapRegionRemSetIterator : public CHeapObj { // Local caching of HRRS fields. const BitMap* _coarse_map; - PosParPRT** _fine_grain_regions; + PerRegionTable** _fine_grain_regions; G1BlockOffsetSharedArray* _bosa; G1CollectedHeap* _g1h; @@ -404,8 +376,9 @@ class HeapRegionRemSetIterator : public CHeapObj { // Index of bucket-list we're working on. int _fine_array_index; + // Per Region Table we're doing within current bucket list. - PosParPRT* _fine_cur_prt; + PerRegionTable* _fine_cur_prt; /* SparsePRT::*/ SparsePRTIter _sparse_iter; @@ -435,12 +408,4 @@ public: } }; -#if 0 -class CardClosure: public Closure { -public: - virtual void do_card(HeapWord* card_start) = 0; -}; - -#endif - #endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONREMSET_HPP From dc5fe663cbb6a532a72a8348a54f7799d20746e6 Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Mon, 25 Jun 2012 21:33:35 -0400 Subject: [PATCH 20/83] 7178670: runtime/7158800/BadUtf8.java fails in SymbolTable::rehash_table Cannot delete _buckets and HashtableEntries in shared space (CDS) Reviewed-by: acorn, kvn, dlong, dcubed, kamg --- .../src/share/vm/classfile/symbolTable.cpp | 151 ++++++++++++------ .../src/share/vm/classfile/symbolTable.hpp | 4 +- hotspot/src/share/vm/utilities/hashtable.cpp | 22 +++ hotspot/src/share/vm/utilities/hashtable.hpp | 7 +- 4 files changed, 128 insertions(+), 56 deletions(-) diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp index fabe679f3a8..3b6ec7ceb34 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.cpp +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp @@ -46,11 +46,8 @@ bool SymbolTable::_needs_rehashing = false; jint SymbolTable::_seed = 0; Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS) { - // Don't allow symbols to be created which cannot fit in a Symbol*. - if (len > Symbol::max_length()) { - THROW_MSG_0(vmSymbols::java_lang_InternalError(), - "name is too long to represent"); - } + assert (len <= Symbol::max_length(), "should be checked by caller"); + Symbol* sym; // Allocate symbols in the C heap when dumping shared spaces in case there // are temporary symbols we can remove. @@ -95,9 +92,14 @@ void SymbolTable::unlink() { int total = 0; size_t memory_total = 0; for (int i = 0; i < the_table()->table_size(); ++i) { - for (HashtableEntry** p = the_table()->bucket_addr(i); *p != NULL; ) { - HashtableEntry* entry = *p; - if (entry->is_shared()) { + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); + while (entry != NULL) { + // Shared entries are normally at the end of the bucket and if we run into + // a shared entry, then there is nothing more to remove. However, if we + // have rehashed the table, then the shared entries are no longer at the + // end of the bucket. + if (entry->is_shared() && !use_alternate_hashcode()) { break; } Symbol* s = entry->literal(); @@ -106,6 +108,7 @@ void SymbolTable::unlink() { assert(s != NULL, "just checking"); // If reference count is zero, remove. if (s->refcount() == 0) { + assert(!entry->is_shared(), "shared entries should be kept live"); delete s; removed++; *p = entry->next(); @@ -113,6 +116,8 @@ void SymbolTable::unlink() { } else { p = entry->next_addr(); } + // get next entry + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } symbols_removed += removed; @@ -135,7 +140,8 @@ unsigned int SymbolTable::new_hash(Symbol* sym) { // with the existing strings. Set flag to use the alternate hash code afterwards. void SymbolTable::rehash_table() { assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); - assert(!DumpSharedSpaces, "this should never happen with -Xshare:dump"); + // This should never happen with -Xshare:dump but it might in testing mode. + if (DumpSharedSpaces) return; // Create a new symbol table SymbolTable* new_table = new SymbolTable(); @@ -176,12 +182,11 @@ Symbol* SymbolTable::lookup(int index, const char* name, return NULL; } -// Pick hashing algorithm, but return value already given if not using a new -// hash algorithm. -unsigned int SymbolTable::hash_symbol(const char* s, int len, unsigned int hashValue) { +// Pick hashing algorithm. +unsigned int SymbolTable::hash_symbol(const char* s, int len) { return use_alternate_hashcode() ? AltHashing::murmur3_32(seed(), (const jbyte*)s, len) : - (hashValue != 0 ? hashValue : java_lang_String::to_hash(s, len)); + java_lang_String::to_hash(s, len); } @@ -201,6 +206,9 @@ Symbol* SymbolTable::lookup(const char* name, int len, TRAPS) { // Found if (s != NULL) return s; + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + // Otherwise, add to symbol to table return the_table()->basic_add(index, (u1*)name, len, hashValue, true, CHECK_NULL); } @@ -238,6 +246,9 @@ Symbol* SymbolTable::lookup(const Symbol* sym, int begin, int end, TRAPS) { // We can't include the code in No_Safepoint_Verifier because of the // ResourceMark. + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + return the_table()->basic_add(index, (u1*)buffer, len, hashValue, true, CHECK_NULL); } @@ -306,6 +317,9 @@ void SymbolTable::add(Handle class_loader, constantPoolHandle cp, int names_count, const char** names, int* lengths, int* cp_indices, unsigned int* hashValues, TRAPS) { + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + SymbolTable* table = the_table(); bool added = table->basic_add(class_loader, cp, names_count, names, lengths, cp_indices, hashValues, CHECK); @@ -326,22 +340,39 @@ Symbol* SymbolTable::new_permanent_symbol(const char* name, TRAPS) { if (result != NULL) { return result; } + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + SymbolTable* table = the_table(); int index = table->hash_to_index(hash); return table->basic_add(index, (u1*)name, (int)strlen(name), hash, false, THREAD); } -Symbol* SymbolTable::basic_add(int index, u1 *name, int len, +Symbol* SymbolTable::basic_add(int index_arg, u1 *name, int len, unsigned int hashValue_arg, bool c_heap, TRAPS) { assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(), "proposed name of symbol must be stable"); - // Grab SymbolTable_lock first. - MutexLocker ml(SymbolTable_lock, THREAD); + // Don't allow symbols to be created which cannot fit in a Symbol*. + if (len > Symbol::max_length()) { + THROW_MSG_0(vmSymbols::java_lang_InternalError(), + "name is too long to represent"); + } + + // Cannot hit a safepoint in this function because the "this" pointer can move. + No_Safepoint_Verifier nsv; // Check if the symbol table has been rehashed, if so, need to recalculate - // the hash value. - unsigned int hashValue = hash_symbol((const char*)name, len, hashValue_arg); + // the hash value and index. + unsigned int hashValue; + int index; + if (use_alternate_hashcode()) { + hashValue = hash_symbol((const char*)name, len); + index = hash_to_index(hashValue); + } else { + hashValue = hashValue_arg; + index = index_arg; + } // Since look-up was done lock-free, we need to check if another // thread beat us in the race to insert the symbol. @@ -377,13 +408,18 @@ bool SymbolTable::basic_add(Handle class_loader, constantPoolHandle cp, } } - // Hold SymbolTable_lock through the symbol creation - MutexLocker ml(SymbolTable_lock, THREAD); + // Cannot hit a safepoint in this function because the "this" pointer can move. + No_Safepoint_Verifier nsv; for (int i=0; iis_in_reserved(name) || GC_locker::is_active(), - "proposed name of symbol must be stable"); - - Handle string; - // try to reuse the string if possible - if (!string_or_null.is_null() && (!JavaObjectsInPerm || string_or_null()->is_perm())) { - string = string_or_null; - } else { - string = java_lang_String::create_tenured_from_unicode(name, len, CHECK_NULL); - } - - // Allocation must be done before grapping the SymbolTable_lock lock - MutexLocker ml(StringTable_lock, THREAD); assert(java_lang_String::equals(string(), name, len), "string must be properly initialized"); + // Cannot hit a safepoint in this function because the "this" pointer can move. + No_Safepoint_Verifier nsv; // Check if the symbol table has been rehashed, if so, need to recalculate - // the hash value before second lookup. - unsigned int hashValue = hash_string(name, len, hashValue_arg); + // the hash value and index before second lookup. + unsigned int hashValue; + int index; + if (use_alternate_hashcode()) { + hashValue = hash_string(name, len); + index = hash_to_index(hashValue); + } else { + hashValue = hashValue_arg; + index = index_arg; + } // Since look-up was done lock-free, we need to check if another // thread beat us in the race to insert the symbol. @@ -664,13 +696,29 @@ oop StringTable::intern(Handle string_or_null, jchar* name, int len, TRAPS) { unsigned int hashValue = hash_string(name, len); int index = the_table()->hash_to_index(hashValue); - oop string = the_table()->lookup(index, name, len, hashValue); + oop found_string = the_table()->lookup(index, name, len, hashValue); // Found - if (string != NULL) return string; + if (found_string != NULL) return found_string; + + debug_only(StableMemoryChecker smc(name, len * sizeof(name[0]))); + assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(), + "proposed name of symbol must be stable"); + + Handle string; + // try to reuse the string if possible + if (!string_or_null.is_null() && (!JavaObjectsInPerm || string_or_null()->is_perm())) { + string = string_or_null; + } else { + string = java_lang_String::create_tenured_from_unicode(name, len, CHECK_NULL); + } + + // Grab the StringTable_lock before getting the_table() because it could + // change at safepoint. + MutexLocker ml(StringTable_lock, THREAD); // Otherwise, add to symbol to table - return the_table()->basic_add(index, string_or_null, name, len, + return the_table()->basic_add(index, string, name, len, hashValue, CHECK_NULL); } @@ -713,18 +761,24 @@ void StringTable::unlink(BoolObjectClosure* is_alive) { // entries at a safepoint. assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); for (int i = 0; i < the_table()->table_size(); ++i) { - for (HashtableEntry** p = the_table()->bucket_addr(i); *p != NULL; ) { - HashtableEntry* entry = *p; - if (entry->is_shared()) { + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); + while (entry != NULL) { + // Shared entries are normally at the end of the bucket and if we run into + // a shared entry, then there is nothing more to remove. However, if we + // have rehashed the table, then the shared entries are no longer at the + // end of the bucket. + if (entry->is_shared() && !use_alternate_hashcode()) { break; } assert(entry->literal() != NULL, "just checking"); - if (is_alive->do_object_b(entry->literal())) { + if (entry->is_shared() || is_alive->do_object_b(entry->literal())) { p = entry->next_addr(); } else { *p = entry->next(); the_table()->free_entry(entry); } + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } } @@ -795,7 +849,8 @@ unsigned int StringTable::new_hash(oop string) { // with the existing strings. Set flag to use the alternate hash code afterwards. void StringTable::rehash_table() { assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); - assert(!DumpSharedSpaces, "this should never happen with -Xshare:dump"); + // This should never happen with -Xshare:dump but it might in testing mode. + if (DumpSharedSpaces) return; StringTable* new_table = new StringTable(); // Initialize new global seed for hashing. diff --git a/hotspot/src/share/vm/classfile/symbolTable.hpp b/hotspot/src/share/vm/classfile/symbolTable.hpp index 6afc2524498..6e5782cd7ea 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.hpp +++ b/hotspot/src/share/vm/classfile/symbolTable.hpp @@ -156,7 +156,7 @@ public: initialize_symbols(); } - static unsigned int hash_symbol(const char* s, int len, unsigned int hashValue = 0); + static unsigned int hash_symbol(const char* s, int len); static Symbol* lookup(const char* name, int len, TRAPS); // lookup only, won't add. Also calculate hash. @@ -294,7 +294,7 @@ public: // Hashing algorithm, used as the hash value used by the // StringTable for bucket selection and comparison (stored in the // HashtableEntry structures). This is used in the String.intern() method. - static unsigned int hash_string(const jchar* s, int len, unsigned int hashValue = 0); + static unsigned int hash_string(const jchar* s, int len); // Internal test. static void test_alt_hash() PRODUCT_RETURN; diff --git a/hotspot/src/share/vm/utilities/hashtable.cpp b/hotspot/src/share/vm/utilities/hashtable.cpp index 1b722195d8b..877e89533c2 100644 --- a/hotspot/src/share/vm/utilities/hashtable.cpp +++ b/hotspot/src/share/vm/utilities/hashtable.cpp @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "memory/allocation.inline.hpp" +#include "memory/filemap.hpp" #include "memory/resourceArea.hpp" #include "oops/oop.inline.hpp" #include "runtime/safepoint.hpp" @@ -119,8 +120,16 @@ template void Hashtable::move_to(Hashtable* new_table) { // Get a new index relative to the new table (can also change size) int index = new_table->hash_to_index(hashValue); p->set_hash(hashValue); + // Keep the shared bit in the Hashtable entry to indicate that this entry + // can't be deleted. The shared bit is the LSB in the _next field so + // walking the hashtable past these entries requires + // BasicHashtableEntry::make_ptr() call. + bool keep_shared = p->is_shared(); unlink_entry(p); new_table->add_entry(index, p); + if (keep_shared) { + p->set_shared(); + } p = next; } } @@ -135,6 +144,19 @@ template void Hashtable::move_to(Hashtable* new_table) { free_buckets(); } +void BasicHashtable::free_buckets() { + if (NULL != _buckets) { + // Don't delete the buckets in the shared space. They aren't + // allocated by os::malloc + if (!UseSharedSpaces || + !FileMapInfo::current_info()->is_in_shared_space(_buckets)) { + FREE_C_HEAP_ARRAY(HashtableBucket, _buckets); + } + _buckets = NULL; + } +} + + // Reverse the order of elements in the hash buckets. void BasicHashtable::reverse() { diff --git a/hotspot/src/share/vm/utilities/hashtable.hpp b/hotspot/src/share/vm/utilities/hashtable.hpp index 46b9c1bbe62..d31c0ff9484 100644 --- a/hotspot/src/share/vm/utilities/hashtable.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.hpp @@ -217,12 +217,7 @@ protected: } // Free the buckets in this hashtable - void free_buckets() { - if (NULL != _buckets) { - FREE_C_HEAP_ARRAY(HashtableBucket, _buckets); - _buckets = NULL; - } - } + void free_buckets(); public: int table_size() { return _table_size; } From 9e9ac093ae4d2447a5f487341f219521d01d731b Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Tue, 26 Jun 2012 13:46:09 +0400 Subject: [PATCH 21/83] 7142091: [macosx] RFE: Refactoring of peer initialization/disposing Reviewed-by: anthony, art --- .../classes/sun/lwawt/LWButtonPeer.java | 4 +- .../classes/sun/lwawt/LWCheckboxPeer.java | 4 +- .../classes/sun/lwawt/LWChoicePeer.java | 4 +- .../classes/sun/lwawt/LWComponentPeer.java | 80 +++++++++--------- .../macosx/classes/sun/lwawt/LWLabelPeer.java | 4 +- .../macosx/classes/sun/lwawt/LWListPeer.java | 4 +- .../classes/sun/lwawt/LWScrollBarPeer.java | 4 +- .../classes/sun/lwawt/LWScrollPanePeer.java | 4 +- .../classes/sun/lwawt/LWTextAreaPeer.java | 4 +- .../sun/lwawt/LWTextComponentPeer.java | 4 +- .../classes/sun/lwawt/LWTextFieldPeer.java | 4 +- .../classes/sun/lwawt/LWWindowPeer.java | 84 ++++++++----------- .../sun/lwawt/macosx/CPlatformWindow.java | 24 +----- jdk/src/macosx/native/sun/awt/AWTWindow.m | 21 ----- 14 files changed, 100 insertions(+), 149 deletions(-) diff --git a/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java index f0cd54d93b3..e5f8838c8cd 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java @@ -47,8 +47,8 @@ final class LWButtonPeer extends LWComponentPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setLabel(getTarget().getLabel()); synchronized (getDelegateLock()) { getDelegate().addActionListener(this); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java index b639e6c2903..69bce89adae 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java @@ -61,8 +61,8 @@ final class LWCheckboxPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setLabel(getTarget().getLabel()); setState(getTarget().getState()); setCheckboxGroup(getTarget().getCheckboxGroup()); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java b/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java index b0ab9d0e3f0..dc781d3d682 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java @@ -55,8 +55,8 @@ final class LWChoicePeer extends LWComponentPeer> } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final Choice choice = getTarget(); final JComboBox combo = getDelegate(); synchronized (getDelegateLock()) { diff --git a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java index 035cfe1596b..61d0dd060c4 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java @@ -81,19 +81,10 @@ public abstract class LWComponentPeer // lock is not used as there are many peers related ops // to be done on the toolkit thread, and we don't want to // depend on a public lock on this thread - private final static Object peerTreeLock = + private static final Object peerTreeLock = new StringBuilder("LWComponentPeer.peerTreeLock"); - /** - * A custom tree-lock used for the hierarchy of the delegate Swing - * components. - * The lock synchronizes access to the delegate - * internal state. Think of it as a 'virtual EDT'. - */ -// private final Object delegateTreeLock = -// new StringBuilder("LWComponentPeer.delegateTreeLock"); - - private T target; + private final T target; // Container peer. It may not be the peer of the target's direct // parent, for example, in the case of hw/lw mixing. However, @@ -108,10 +99,10 @@ public abstract class LWComponentPeer // be updated when the component is reparented to another container private LWWindowPeer windowPeer; - private AtomicBoolean disposed = new AtomicBoolean(false); + private final AtomicBoolean disposed = new AtomicBoolean(false); // Bounds are relative to parent peer - private Rectangle bounds = new Rectangle(); + private final Rectangle bounds = new Rectangle(); private Region region; // Component state. Should be accessed under the state lock @@ -122,9 +113,11 @@ public abstract class LWComponentPeer private Color foreground; private Font font; - // Paint area to coalesce all the paint events and store - // the target dirty area - private RepaintArea targetPaintArea; + /** + * Paint area to coalesce all the paint events and store the target dirty + * area. + */ + private final RepaintArea targetPaintArea; // private volatile boolean paintPending; private volatile boolean isLayouting; @@ -137,7 +130,7 @@ public abstract class LWComponentPeer private int fNumDropTargets = 0; private CDropTarget fDropTarget = null; - private PlatformComponent platformComponent; + private final PlatformComponent platformComponent; private final class DelegateContainer extends Container { { @@ -175,6 +168,7 @@ public abstract class LWComponentPeer } public LWComponentPeer(T target, PlatformComponent platformComponent) { + targetPaintArea = new LWRepaintArea(); this.target = target; this.platformComponent = platformComponent; @@ -201,10 +195,13 @@ public abstract class LWComponentPeer synchronized (getDelegateLock()) { delegate = createDelegate(); if (delegate != null) { + delegate.setVisible(false); delegateContainer = new DelegateContainer(); delegateContainer.add(delegate); delegateContainer.addNotify(); delegate.addNotify(); + resetColorsAndFont(delegate); + delegate.setOpaque(true); } else { return; } @@ -278,27 +275,28 @@ public abstract class LWComponentPeer return getDelegate(); } - /* - * Initializes this peer by fetching all the properties from the target. - * The call to initialize() is not placed to LWComponentPeer ctor to - * let the subclass ctor to finish completely first. Instead, it's the - * LWToolkit object who is responsible for initialization. + /** + * Initializes this peer. The call to initialize() is not placed to + * LWComponentPeer ctor to let the subclass ctor to finish completely first. + * Instead, it's the LWToolkit object who is responsible for initialization. + * Note that we call setVisible() at the end of initialization. */ - public void initialize() { + public final void initialize() { platformComponent.initialize(target, this, getPlatformWindow()); - targetPaintArea = new LWRepaintArea(); - if (getDelegate() != null) { - synchronized (getDelegateLock()) { - resetColorsAndFont(delegate); - getDelegate().setOpaque(true); - } - } + initializeImpl(); + setVisible(target.isVisible()); + } + + /** + * Fetching general properties from the target. Should be overridden in + * subclasses to initialize specific peers properties. + */ + void initializeImpl() { setBackground(target.getBackground()); setForeground(target.getForeground()); setFont(target.getFont()); setBounds(target.getBounds()); setEnabled(target.isEnabled()); - setVisible(target.isVisible()); } private static void resetColorsAndFont(final Container c) { @@ -314,15 +312,18 @@ public abstract class LWComponentPeer return stateLock; } - // Synchronize all operations with the Swing delegates under - // AWT tree lock, using a new separate lock to synchronize - // access to delegates may lead deadlocks + /** + * Synchronize all operations with the Swing delegates under AWT tree lock, + * using a new separate lock to synchronize access to delegates may lead + * deadlocks. Think of it as a 'virtual EDT'. + * + * @return DelegateLock + */ final Object getDelegateLock() { - //return delegateTreeLock; return getTarget().getTreeLock(); } - protected final static Object getPeerTreeLock() { + protected static final Object getPeerTreeLock() { return peerTreeLock; } @@ -758,14 +759,17 @@ public abstract class LWComponentPeer } @Override - public void setVisible(boolean v) { + public void setVisible(final boolean v) { synchronized (getStateLock()) { if (visible == v) { return; } visible = v; } + setVisibleImpl(v); + } + protected void setVisibleImpl(final boolean v) { final D delegate = getDelegate(); if (delegate != null) { @@ -1355,7 +1359,7 @@ public abstract class LWComponentPeer * * @see #isVisible() */ - protected boolean isShowing() { + protected final boolean isShowing() { synchronized (getPeerTreeLock()) { if (isVisible()) { final LWContainerPeer container = getContainerPeer(); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java index 7577007fa7f..f8c764364cc 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java @@ -60,8 +60,8 @@ final class LWLabelPeer extends LWComponentPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setText(getTarget().getText()); setAlignment(getTarget().getAlignment()); } diff --git a/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java index df705fd5068..1e6154fd64f 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java @@ -49,8 +49,8 @@ final class LWListPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setMultipleMode(getTarget().isMultipleMode()); final int[] selectedIndices = getTarget().getSelectedIndexes(); synchronized (getDelegateLock()) { diff --git a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java index d376a6b1d82..688f9e96f16 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java @@ -54,8 +54,8 @@ final class LWScrollBarPeer extends LWComponentPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final Scrollbar target = getTarget(); setValues(target.getValue(), target.getVisibleAmount(), target.getMinimum(), target.getMaximum()); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java b/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java index 1b1bdf5369e..1e386f25725 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java @@ -70,8 +70,8 @@ final class LWScrollPanePeer extends LWContainerPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final int policy = getTarget().getScrollbarDisplayPolicy(); synchronized (getDelegateLock()) { getDelegate().getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java index ebe97745d49..8517313b741 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java @@ -59,8 +59,8 @@ final class LWTextAreaPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final int visibility = getTarget().getScrollbarVisibility(); synchronized (getDelegateLock()) { setScrollBarVisibility(visibility); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java index 01de62b6c96..f0215d40f75 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java @@ -63,8 +63,8 @@ abstract class LWTextComponentPeer Date: Tue, 26 Jun 2012 13:27:26 +0100 Subject: [PATCH 22/83] 4244896: (process) Provide System.getPid(), System.killProcess(String pid) Reviewed-by: alanb --- jdk/src/share/classes/java/lang/Process.java | 102 ++++++++++- .../classes/java/lang/UNIXProcess.java.bsd | 42 ++++- .../classes/java/lang/UNIXProcess.java.linux | 42 ++++- .../java/lang/UNIXProcess.java.solaris | 42 ++++- .../solaris/native/java/lang/UNIXProcess_md.c | 10 +- .../classes/java/lang/ProcessImpl.java | 36 +++- .../windows/native/java/lang/ProcessImpl_md.c | 31 +++- jdk/test/java/lang/ProcessBuilder/Basic.java | 147 ++++++++++++++- .../java/lang/ProcessBuilder/DestroyTest.java | 172 ++++++++++++++++++ 9 files changed, 598 insertions(+), 26 deletions(-) create mode 100644 jdk/test/java/lang/ProcessBuilder/DestroyTest.java diff --git a/jdk/src/share/classes/java/lang/Process.java b/jdk/src/share/classes/java/lang/Process.java index ec0a661d7ce..4e945382465 100644 --- a/jdk/src/share/classes/java/lang/Process.java +++ b/jdk/src/share/classes/java/lang/Process.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2012, 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 @@ -26,6 +26,7 @@ package java.lang; import java.io.*; +import java.util.concurrent.TimeUnit; /** * The {@link ProcessBuilder#start()} and @@ -91,7 +92,7 @@ public abstract class Process { * @return the output stream connected to the normal input of the * subprocess */ - abstract public OutputStream getOutputStream(); + public abstract OutputStream getOutputStream(); /** * Returns the input stream connected to the normal output of the @@ -117,7 +118,7 @@ public abstract class Process { * @return the input stream connected to the normal output of the * subprocess */ - abstract public InputStream getInputStream(); + public abstract InputStream getInputStream(); /** * Returns the input stream connected to the error output of the @@ -138,7 +139,7 @@ public abstract class Process { * @return the input stream connected to the error output of * the subprocess */ - abstract public InputStream getErrorStream(); + public abstract InputStream getErrorStream(); /** * Causes the current thread to wait, if necessary, until the @@ -156,7 +157,51 @@ public abstract class Process { * thread while it is waiting, then the wait is ended and * an {@link InterruptedException} is thrown. */ - abstract public int waitFor() throws InterruptedException; + public abstract int waitFor() throws InterruptedException; + + /** + * Causes the current thread to wait, if necessary, until the + * subprocess represented by this {@code Process} object has + * terminated, or the specified waiting time elapses. + * + *

If the subprocess has already terminated then this method returns + * immediately with the value {@code true}. If the process has not + * terminated and the timeout value is less than, or equal to, zero, then + * this method returns immediately with the value {@code false}. + * + *

The default implementation of this methods polls the {@code exitValue} + * to check if the process has terminated. Concrete implementations of this + * class are strongly encouraged to override this method with a more + * efficient implementation. + * + * @param timeout the maximum time to wait + * @param unit the time unit of the {@code timeout} argument + * @return {@code true} if the subprocess has exited and {@code false} if + * the waiting time elapsed before the subprocess has exited. + * @throws InterruptedException if the current thread is interrupted + * while waiting. + * @throws NullPointerException if unit is null + * @since 1.8 + */ + public boolean waitFor(long timeout, TimeUnit unit) + throws InterruptedException + { + long startTime = System.nanoTime(); + long rem = unit.toNanos(timeout); + + do { + try { + exitValue(); + return true; + } catch(IllegalThreadStateException ex) { + if (rem > 0) + Thread.sleep( + Math.min(TimeUnit.NANOSECONDS.toMillis(rem) + 1, 100)); + } + rem = unit.toNanos(timeout) - (System.nanoTime() - startTime); + } while (rem > 0); + return false; + } /** * Returns the exit value for the subprocess. @@ -167,11 +212,54 @@ public abstract class Process { * @throws IllegalThreadStateException if the subprocess represented * by this {@code Process} object has not yet terminated */ - abstract public int exitValue(); + public abstract int exitValue(); + + /** + * Kills the subprocess. Whether the subprocess represented by this + * {@code Process} object is forcibly terminated or not is + * implementation dependent. + */ + public abstract void destroy(); /** * Kills the subprocess. The subprocess represented by this * {@code Process} object is forcibly terminated. + * + *

The default implementation of this method invokes {@link #destroy} + * and so may not forcibly terminate the process. Concrete implementations + * of this class are strongly encouraged to override this method with a + * compliant implementation. Invoking this method on {@code Process} + * objects returned by {@link ProcessBuilder#start} and + * {@link Runtime#exec} will forcibly terminate the process. + * + *

Note: The subprocess may not terminate immediately. + * i.e. {@code isAlive()} may return true for a brief period + * after {@code destroyForcibly()} is called. This method + * may be chained to {@code waitFor()} if needed. + * + * @return the {@code Process} object representing the + * subprocess to be forcibly destroyed. + * @since 1.8 */ - abstract public void destroy(); + public Process destroyForcibly() { + destroy(); + return this; + } + + /** + * Tests whether the subprocess represented by this {@code Process} is + * alive. + * + * @return {@code true} if the subprocess represented by this + * {@code Process} object has not yet terminated. + * @since 1.8 + */ + public boolean isAlive() { + try { + exitValue(); + return false; + } catch(IllegalThreadStateException e) { + return true; + } + } } diff --git a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd index 409390820cf..d70c120267a 100644 --- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd +++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2012, 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 @@ -38,6 +38,7 @@ import java.util.Arrays; import java.util.concurrent.Executors; import java.util.concurrent.Executor; import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; import java.security.AccessController; import static java.security.AccessController.doPrivileged; import java.security.PrivilegedAction; @@ -211,6 +212,24 @@ final class UNIXProcess extends Process { } return exitcode; } + + @Override + public synchronized boolean waitFor(long timeout, TimeUnit unit) + throws InterruptedException + { + if (hasExited) return true; + if (timeout <= 0) return false; + + long timeoutAsNanos = unit.toNanos(timeout); + long startTime = System.nanoTime(); + long rem = timeoutAsNanos; + + while (!hasExited && (rem > 0)) { + wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1)); + rem = timeoutAsNanos - (System.nanoTime() - startTime); + } + return hasExited; + } public synchronized int exitValue() { if (!hasExited) { @@ -219,8 +238,8 @@ final class UNIXProcess extends Process { return exitcode; } - private static native void destroyProcess(int pid); - public void destroy() { + private static native void destroyProcess(int pid, boolean force); + private void destroy(boolean force) { // There is a risk that pid will be recycled, causing us to // kill the wrong process! So we only terminate processes // that appear to still be running. Even with this check, @@ -229,13 +248,28 @@ final class UNIXProcess extends Process { // soon, so this is quite safe. synchronized (this) { if (!hasExited) - destroyProcess(pid); + destroyProcess(pid, force); } try { stdin.close(); } catch (IOException ignored) {} try { stdout.close(); } catch (IOException ignored) {} try { stderr.close(); } catch (IOException ignored) {} } + public void destroy() { + destroy(false); + } + + @Override + public Process destroyForcibly() { + destroy(true); + return this; + } + + @Override + public synchronized boolean isAlive() { + return !hasExited; + } + /* This routine initializes JNI field offsets for the class */ private static native void initIDs(); diff --git a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux index 61676e084cf..760ffa7b394 100644 --- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux +++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2012, 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 @@ -38,6 +38,7 @@ import java.util.Arrays; import java.util.concurrent.Executors; import java.util.concurrent.Executor; import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; import java.security.AccessController; import static java.security.AccessController.doPrivileged; import java.security.PrivilegedAction; @@ -212,6 +213,24 @@ final class UNIXProcess extends Process { return exitcode; } + @Override + public synchronized boolean waitFor(long timeout, TimeUnit unit) + throws InterruptedException + { + if (hasExited) return true; + if (timeout <= 0) return false; + + long timeoutAsNanos = unit.toNanos(timeout); + long startTime = System.nanoTime(); + long rem = timeoutAsNanos; + + while (!hasExited && (rem > 0)) { + wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1)); + rem = timeoutAsNanos - (System.nanoTime() - startTime); + } + return hasExited; + } + public synchronized int exitValue() { if (!hasExited) { throw new IllegalThreadStateException("process hasn't exited"); @@ -219,8 +238,8 @@ final class UNIXProcess extends Process { return exitcode; } - private static native void destroyProcess(int pid); - public void destroy() { + private static native void destroyProcess(int pid, boolean force); + private void destroy(boolean force) { // There is a risk that pid will be recycled, causing us to // kill the wrong process! So we only terminate processes // that appear to still be running. Even with this check, @@ -229,13 +248,28 @@ final class UNIXProcess extends Process { // soon, so this is quite safe. synchronized (this) { if (!hasExited) - destroyProcess(pid); + destroyProcess(pid, force); } try { stdin.close(); } catch (IOException ignored) {} try { stdout.close(); } catch (IOException ignored) {} try { stderr.close(); } catch (IOException ignored) {} } + public void destroy() { + destroy(false); + } + + @Override + public Process destroyForcibly() { + destroy(true); + return this; + } + + @Override + public synchronized boolean isAlive() { + return !hasExited; + } + /* This routine initializes JNI field offsets for the class */ private static native void initIDs(); diff --git a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.solaris b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.solaris index 550ce7c2b05..ecdc280a08f 100644 --- a/jdk/src/solaris/classes/java/lang/UNIXProcess.java.solaris +++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.solaris @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2012, 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 @@ -26,6 +26,7 @@ package java.lang; import java.io.*; +import java.util.concurrent.TimeUnit; /* java.lang.Process subclass in the UNIX environment. * @@ -158,6 +159,24 @@ final class UNIXProcess extends Process { return exitcode; } + @Override + public synchronized boolean waitFor(long timeout, TimeUnit unit) + throws InterruptedException + { + if (hasExited) return true; + if (timeout <= 0) return false; + + long timeoutAsNanos = unit.toNanos(timeout); + long startTime = System.nanoTime(); + long rem = timeoutAsNanos; + + while (!hasExited && (rem > 0)) { + wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1)); + rem = timeoutAsNanos - (System.nanoTime() - startTime); + } + return hasExited; + } + public synchronized int exitValue() { if (!hasExited) { throw new IllegalThreadStateException("process hasn't exited"); @@ -165,8 +184,8 @@ final class UNIXProcess extends Process { return exitcode; } - private static native void destroyProcess(int pid); - public synchronized void destroy() { + private static native void destroyProcess(int pid, boolean force); + private synchronized void destroy(boolean force) { // There is a risk that pid will be recycled, causing us to // kill the wrong process! So we only terminate processes // that appear to still be running. Even with this check, @@ -174,7 +193,7 @@ final class UNIXProcess extends Process { // is very small, and OSes try hard to not recycle pids too // soon, so this is quite safe. if (!hasExited) - destroyProcess(pid); + destroyProcess(pid, force); try { stdin_stream.close(); if (stdout_inner_stream != null) @@ -187,6 +206,21 @@ final class UNIXProcess extends Process { } } + public void destroy() { + destroy(false); + } + + @Override + public Process destroyForcibly() { + destroy(true); + return this; + } + + @Override + public synchronized boolean isAlive() { + return !hasExited; + } + // A FileInputStream that supports the deferment of the actual close // operation until the last pending I/O operation on the stream has // finished. This is required on Solaris because we must close the stdin diff --git a/jdk/src/solaris/native/java/lang/UNIXProcess_md.c b/jdk/src/solaris/native/java/lang/UNIXProcess_md.c index 43077ce4509..5aff82fb0c4 100644 --- a/jdk/src/solaris/native/java/lang/UNIXProcess_md.c +++ b/jdk/src/solaris/native/java/lang/UNIXProcess_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2012, 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 @@ -955,7 +955,11 @@ Java_java_lang_UNIXProcess_forkAndExec(JNIEnv *env, } JNIEXPORT void JNICALL -Java_java_lang_UNIXProcess_destroyProcess(JNIEnv *env, jobject junk, jint pid) +Java_java_lang_UNIXProcess_destroyProcess(JNIEnv *env, + jobject junk, + jint pid, + jboolean force) { - kill(pid, SIGTERM); + int sig = (force == JNI_TRUE) ? SIGKILL : SIGTERM; + kill(pid, sig); } diff --git a/jdk/src/windows/classes/java/lang/ProcessImpl.java b/jdk/src/windows/classes/java/lang/ProcessImpl.java index 88486e5f472..d4cdc6c7eec 100644 --- a/jdk/src/windows/classes/java/lang/ProcessImpl.java +++ b/jdk/src/windows/classes/java/lang/ProcessImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2012, 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 @@ -37,6 +37,7 @@ import java.io.BufferedOutputStream; import java.lang.ProcessBuilder.Redirect; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.concurrent.TimeUnit; /* This class is for the exclusive use of ProcessBuilder.start() to * create new processes. @@ -254,11 +255,44 @@ final class ProcessImpl extends Process { throw new InterruptedException(); return exitValue(); } + private static native void waitForInterruptibly(long handle); + @Override + public boolean waitFor(long timeout, TimeUnit unit) + throws InterruptedException + { + if (getExitCodeProcess(handle) != STILL_ACTIVE) return true; + if (timeout <= 0) return false; + + long msTimeout = unit.toMillis(timeout); + + waitForTimeoutInterruptibly(handle, msTimeout); + if (Thread.interrupted()) + throw new InterruptedException(); + return (getExitCodeProcess(handle) != STILL_ACTIVE); + } + + private static native void waitForTimeoutInterruptibly( + long handle, long timeout); + public void destroy() { terminateProcess(handle); } + + @Override + public Process destroyForcibly() { + destroy(); + return this; + } + private static native void terminateProcess(long handle); + @Override + public boolean isAlive() { + return isProcessAlive(handle); + } + + private static native boolean isProcessAlive(long handle); + /** * Create a process using the win32 function CreateProcess. * diff --git a/jdk/src/windows/native/java/lang/ProcessImpl_md.c b/jdk/src/windows/native/java/lang/ProcessImpl_md.c index 89dc8252a3a..ed14eeba1be 100644 --- a/jdk/src/windows/native/java/lang/ProcessImpl_md.c +++ b/jdk/src/windows/native/java/lang/ProcessImpl_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -299,17 +299,44 @@ Java_java_lang_ProcessImpl_waitForInterruptibly(JNIEnv *env, jclass ignored, jlo if (WaitForMultipleObjects(sizeof(events)/sizeof(events[0]), events, FALSE, /* Wait for ANY event */ - INFINITE) /* Wait forever */ + INFINITE) /* Wait forever */ == WAIT_FAILED) win32Error(env, "WaitForMultipleObjects"); } +JNIEXPORT void JNICALL +Java_java_lang_ProcessImpl_waitForTimeoutInterruptibly(JNIEnv *env, + jclass ignored, + jlong handle, + jlong timeout) +{ + HANDLE events[2]; + DWORD dwTimeout = (DWORD)timeout; + DWORD result; + events[0] = (HANDLE) handle; + events[1] = JVM_GetThreadInterruptEvent(); + result = WaitForMultipleObjects(sizeof(events)/sizeof(events[0]), events, + FALSE, /* Wait for ANY event */ + dwTimeout); /* Wait for dwTimeout */ + + if (result == WAIT_FAILED) + win32Error(env, "WaitForMultipleObjects"); +} + JNIEXPORT void JNICALL Java_java_lang_ProcessImpl_terminateProcess(JNIEnv *env, jclass ignored, jlong handle) { TerminateProcess((HANDLE) handle, 1); } +JNIEXPORT jboolean JNICALL +Java_java_lang_ProcessImpl_isProcessAlive(JNIEnv *env, jclass ignored, jlong handle) +{ + DWORD dwExitStatus; + GetExitCodeProcess(handle, &dwExitStatus); + return dwExitStatus == STILL_ACTIVE; +} + JNIEXPORT jboolean JNICALL Java_java_lang_ProcessImpl_closeHandle(JNIEnv *env, jclass ignored, jlong handle) { diff --git a/jdk/test/java/lang/ProcessBuilder/Basic.java b/jdk/test/java/lang/ProcessBuilder/Basic.java index b18a0f66ca2..fe8ff4e2255 100644 --- a/jdk/test/java/lang/ProcessBuilder/Basic.java +++ b/jdk/test/java/lang/ProcessBuilder/Basic.java @@ -26,7 +26,7 @@ * @bug 4199068 4738465 4937983 4930681 4926230 4931433 4932663 4986689 * 5026830 5023243 5070673 4052517 4811767 6192449 6397034 6413313 * 6464154 6523983 6206031 4960438 6631352 6631966 6850957 6850958 - * 4947220 7018606 7034570 + * 4947220 7018606 7034570 4244896 * @summary Basic tests for Process and Environment Variable code * @run main/othervm/timeout=300 Basic * @author Martin Buchholz @@ -38,6 +38,7 @@ import static java.lang.ProcessBuilder.Redirect.*; import java.io.*; import java.util.*; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import java.security.*; import java.util.regex.Pattern; import java.util.regex.Matcher; @@ -636,6 +637,44 @@ public class Basic { static boolean is() { return is; } } + static class DelegatingProcess extends Process { + final Process p; + + DelegatingProcess(Process p) { + this.p = p; + } + + @Override + public void destroy() { + p.destroy(); + } + + @Override + public int exitValue() { + return p.exitValue(); + } + + @Override + public int waitFor() throws InterruptedException { + return p.waitFor(); + } + + @Override + public OutputStream getOutputStream() { + return p.getOutputStream(); + } + + @Override + public InputStream getInputStream() { + return p.getInputStream(); + } + + @Override + public InputStream getErrorStream() { + return p.getErrorStream(); + } + } + private static boolean matches(String str, String regex) { return Pattern.compile(regex).matcher(str).find(); } @@ -2090,6 +2129,112 @@ public class Basic { policy.setPermissions(new RuntimePermission("setSecurityManager")); System.setSecurityManager(null); + //---------------------------------------------------------------- + // Check that Process.isAlive() & + // Process.waitFor(0, TimeUnit.MILLISECONDS) work as expected. + //---------------------------------------------------------------- + try { + List childArgs = new ArrayList(javaChildArgs); + childArgs.add("sleep"); + final Process p = new ProcessBuilder(childArgs).start(); + long start = System.nanoTime(); + if (!p.isAlive() || p.waitFor(0, TimeUnit.MILLISECONDS)) { + fail("Test failed: Process exited prematurely"); + } + long end = System.nanoTime(); + // give waitFor(timeout) a wide berth (100ms) + if ((end - start) > 100000000) + fail("Test failed: waitFor took too long"); + + p.destroy(); + p.waitFor(); + + if (p.isAlive() || + !p.waitFor(0, TimeUnit.MILLISECONDS)) + { + fail("Test failed: Process still alive - please terminate " + + p.toString() + " manually"); + } + } catch (Throwable t) { unexpected(t); } + + //---------------------------------------------------------------- + // Check that Process.waitFor(timeout, TimeUnit.MILLISECONDS) + // works as expected. + //---------------------------------------------------------------- + try { + List childArgs = new ArrayList(javaChildArgs); + childArgs.add("sleep"); + final Process p = new ProcessBuilder(childArgs).start(); + long start = System.nanoTime(); + + p.waitFor(1000, TimeUnit.MILLISECONDS); + + long end = System.nanoTime(); + if ((end - start) < 500000000) + fail("Test failed: waitFor didn't take long enough"); + + p.destroy(); + + start = System.nanoTime(); + p.waitFor(1000, TimeUnit.MILLISECONDS); + end = System.nanoTime(); + if ((end - start) > 100000000) + fail("Test failed: waitFor took too long on a dead process."); + } catch (Throwable t) { unexpected(t); } + + //---------------------------------------------------------------- + // Check that Process.waitFor(timeout, TimeUnit.MILLISECONDS) + // interrupt works as expected. + //---------------------------------------------------------------- + try { + List childArgs = new ArrayList(javaChildArgs); + childArgs.add("sleep"); + final Process p = new ProcessBuilder(childArgs).start(); + final long start = System.nanoTime(); + + final Thread thread = new Thread() { + public void run() { + try { + try { + p.waitFor(10000, TimeUnit.MILLISECONDS); + } catch (InterruptedException e) { + return; + } + fail("waitFor() wasn't interrupted"); + } catch (Throwable t) { unexpected(t); }}}; + + thread.start(); + Thread.sleep(1000); + thread.interrupt(); + p.destroy(); + } catch (Throwable t) { unexpected(t); } + + //---------------------------------------------------------------- + // Check the default implementation for + // Process.waitFor(long, TimeUnit) + //---------------------------------------------------------------- + try { + List childArgs = new ArrayList(javaChildArgs); + childArgs.add("sleep"); + final Process proc = new ProcessBuilder(childArgs).start(); + DelegatingProcess p = new DelegatingProcess(proc); + long start = System.nanoTime(); + + p.waitFor(1000, TimeUnit.MILLISECONDS); + + long end = System.nanoTime(); + if ((end - start) < 500000000) + fail("Test failed: waitFor didn't take long enough"); + + p.destroy(); + + start = System.nanoTime(); + p.waitFor(1000, TimeUnit.MILLISECONDS); + end = System.nanoTime(); + // allow for the less accurate default implementation + if ((end - start) > 200000000) + fail("Test failed: waitFor took too long on a dead process."); + } catch (Throwable t) { unexpected(t); } } static void closeStreams(Process p) { diff --git a/jdk/test/java/lang/ProcessBuilder/DestroyTest.java b/jdk/test/java/lang/ProcessBuilder/DestroyTest.java new file mode 100644 index 00000000000..ebf00e32b79 --- /dev/null +++ b/jdk/test/java/lang/ProcessBuilder/DestroyTest.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2012, 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 + * @bug 4244896 + * @summary Test for the various platform specific implementations of + * destroyForcibly. + */ + +import java.io.*; +import java.util.ArrayList; +import java.util.concurrent.TimeUnit; + +abstract class ProcessTest implements Runnable { + ProcessBuilder bldr; + Process p; + + public Process killProc(boolean force) throws Exception { + if (force) { + p.destroyForcibly(); + } else { + p.destroy(); + } + return p; + } + + public boolean isAlive() { + return p.isAlive(); + } + + public void run() { + try { + String line; + BufferedReader is = + new BufferedReader(new InputStreamReader(p.getInputStream())); + while ((line = is.readLine()) != null) + System.err.println("ProcessTrap: " + line); + } catch(IOException e) { + if (!e.getMessage().matches("[Ss]tream [Cc]losed")) { + throw new RuntimeException(e); + } + } + } + + public abstract void runTest() throws Exception; +} + +class UnixTest extends ProcessTest { + public UnixTest(File script) throws IOException { + script.deleteOnExit(); + createScript(script); + bldr = new ProcessBuilder(script.getCanonicalPath()); + bldr.redirectErrorStream(true); + bldr.directory(new File(".")); + p = bldr.start(); + } + + void createScript(File processTrapScript) throws IOException { + processTrapScript.deleteOnExit(); + FileWriter fstream = new FileWriter(processTrapScript); + try (BufferedWriter out = new BufferedWriter(fstream)) { + out.write("#!/bin/bash\n" + + "echo \\\"ProcessTrap.sh started: trapping SIGTERM/SIGINT\\\"\n" + + "trap bashtrap SIGTERM SIGINT\n" + + "bashtrap()\n" + + "{\n" + + " echo \\\"SIGTERM/SIGINT detected!\\\"\n" + + "}\n" + + "\n" + + "while :\n" + + "do\n" + + " sleep 1;\n" + + "done\n"); + } + processTrapScript.setExecutable(true, true); + } + + @Override + public void runTest() throws Exception { + killProc(false); + Thread.sleep(1000); + if (!p.isAlive()) + throw new RuntimeException("Process terminated prematurely."); + killProc(true).waitFor(); + if (p.isAlive()) + throw new RuntimeException("Problem terminating the process."); + } +} + +class MacTest extends UnixTest { + public MacTest(File script) throws IOException { + super(script); + } + + @Override + public void runTest() throws Exception { + // On Mac, it appears that when we close the processes streams + // after a destroy() call, the process terminates with a + // SIGPIPE even if it was trapping the SIGTERM, so as with + // windows, we skip the trap test and go straight to destroyForcibly(). + killProc(true).waitFor(); + if (p.isAlive()) + throw new RuntimeException("Problem terminating the process."); + } +} + +class WindowsTest extends ProcessTest { + public WindowsTest() throws IOException { + bldr = new ProcessBuilder("ftp"); + bldr.redirectErrorStream(true); + bldr.directory(new File(".")); + p = bldr.start(); + } + + @Override + public void runTest() throws Exception { + killProc(true).waitFor(); + } +} + +public class DestroyTest { + + public static ProcessTest getTest() throws Exception { + String osName = System.getProperty("os.name"); + if (osName.startsWith("Windows")) { + return new WindowsTest(); + } else if (osName.startsWith("Linux") == true) { + return new UnixTest( + File.createTempFile("ProcessTrap-", ".sh",null)); + } else if (osName.startsWith("Mac OS")) { + return new MacTest( + File.createTempFile("ProcessTrap-", ".sh",null)); + } else if (osName.equals("SunOS")) { + return new UnixTest( + File.createTempFile("ProcessTrap-", ".sh",null)); + } + return null; + } + + public static void main(String args[]) throws Exception { + ProcessTest test = getTest(); + if (test == null) { + throw new RuntimeException("Unrecognised OS"); + } else { + new Thread(test).start(); + Thread.sleep(1000); + test.runTest(); + } + } +} + From 9931c2f2b868b3256bb1f8707cd41ebc3b72655b Mon Sep 17 00:00:00 2001 From: Oleg Pekhovskiy Date: Tue, 26 Jun 2012 16:46:00 +0400 Subject: [PATCH 23/83] 7024749: JDK7 b131---a crash in: Java_sun_awt_windows_ThemeReader_isGetThemeTransitionDurationDefined+0x75 Reviewed-by: art, ant --- .../native/sun/windows/awt_Component.cpp | 37 +++++++----- .../native/sun/windows/awt_Component.h | 2 +- .../native/sun/windows/awt_FileDialog.cpp | 1 + .../windows/native/sun/windows/awt_Frame.cpp | 2 - .../native/sun/windows/awt_TextComponent.cpp | 4 +- .../java/awt/Frame/7024749/bug7024749.java | 59 +++++++++++++++++++ 6 files changed, 85 insertions(+), 20 deletions(-) create mode 100644 jdk/test/java/awt/Frame/7024749/bug7024749.java diff --git a/jdk/src/windows/native/sun/windows/awt_Component.cpp b/jdk/src/windows/native/sun/windows/awt_Component.cpp index 9cc2f76e90b..d7b265c44e3 100644 --- a/jdk/src/windows/native/sun/windows/awt_Component.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Component.cpp @@ -1474,9 +1474,7 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) ::GetClientRect( GetHWnd(), &r ); mr = WmSize(static_cast(wParam), r.right - r.left, r.bottom - r.top); //mr = WmSize(wParam, LOWORD(lParam), HIWORD(lParam)); - if (ImmGetContext() != NULL) { - SetCompositionWindow(r); - } + SetCompositionWindow(r); break; } case WM_SIZING: @@ -1535,7 +1533,10 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) // When the window is deactivated, send WM_IME_ENDCOMPOSITION // message to deactivate the composition window so that // it won't receive keyboard input focus. - if (ImmGetContext() != NULL) { + HIMC hIMC; + HWND hwnd = ImmGetHWnd(); + if ((hIMC = ImmGetContext(hwnd)) != NULL) { + ImmReleaseContext(hwnd, hIMC); DefWindowProc(WM_IME_ENDCOMPOSITION, 0, 0); } } @@ -1718,11 +1719,9 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) case WM_IME_SETCONTEXT: // lParam is passed as pointer and it can be modified. mr = WmImeSetContext(static_cast(wParam), &lParam); - CallProxyDefWindowProc(message, wParam, lParam, retValue, mr); break; case WM_IME_NOTIFY: mr = WmImeNotify(wParam, lParam); - CallProxyDefWindowProc(message, wParam, lParam, retValue, mr); break; case WM_IME_STARTCOMPOSITION: mr = WmImeStartComposition(); @@ -3723,12 +3722,14 @@ MsgRouting AwtComponent::WmPaste() // support IME Composition messages void AwtComponent::SetCompositionWindow(RECT& r) { - HIMC hIMC = ImmGetContext(); + HWND hwnd = ImmGetHWnd(); + HIMC hIMC = ImmGetContext(hwnd); if (hIMC == NULL) { return; } COMPOSITIONFORM cf = {CFS_DEFAULT, {0, 0}, {0, 0, 0, 0}}; ImmSetCompositionWindow(hIMC, &cf); + ImmReleaseContext(hwnd, hIMC); } void AwtComponent::OpenCandidateWindow(int x, int y) @@ -3742,16 +3743,16 @@ void AwtComponent::OpenCandidateWindow(int x, int y) SetCandidateWindow(iCandType, x-rc.left, y-rc.top); } if (m_bitsCandType != 0) { - HWND proxy = GetProxyFocusOwner(); // REMIND: is there any chance GetProxyFocusOwner() returns NULL here? - ::DefWindowProc((proxy != NULL) ? proxy : GetHWnd(), + ::DefWindowProc(ImmGetHWnd(), WM_IME_NOTIFY, IMN_OPENCANDIDATE, m_bitsCandType); } } void AwtComponent::SetCandidateWindow(int iCandType, int x, int y) { - HIMC hIMC = ImmGetContext(); + HWND hwnd = ImmGetHWnd(); + HIMC hIMC = ImmGetContext(hwnd); CANDIDATEFORM cf; cf.dwIndex = iCandType; cf.dwStyle = CFS_CANDIDATEPOS; @@ -3759,17 +3760,20 @@ void AwtComponent::SetCandidateWindow(int iCandType, int x, int y) cf.ptCurrentPos.y = y; ImmSetCandidateWindow(hIMC, &cf); + ImmReleaseContext(hwnd, hIMC); } MsgRouting AwtComponent::WmImeSetContext(BOOL fSet, LPARAM *lplParam) { // If the Windows input context is disabled, do not let Windows // display any UIs. - HIMC hIMC = ImmGetContext(); + HWND hwnd = ImmGetHWnd(); + HIMC hIMC = ImmGetContext(hwnd); if (hIMC == NULL) { *lplParam = 0; return mrDoDefault; } + ImmReleaseContext(hwnd, hIMC); if (fSet) { LPARAM lParam = *lplParam; @@ -3824,11 +3828,13 @@ MsgRouting AwtComponent::WmImeComposition(WORD wChar, LPARAM flags) AwtInputTextInfor* textInfor = NULL; try { - HIMC hIMC = ImmGetContext(); + HWND hwnd = ImmGetHWnd(); + HIMC hIMC = ImmGetContext(hwnd); DASSERT(hIMC!=0); textInfor = new AwtInputTextInfor; textInfor->GetContextData(hIMC, flags); + ImmReleaseContext(hwnd, hIMC); jstring jtextString = textInfor->GetText(); /* The conditions to send the input method event to AWT EDT are: @@ -4012,16 +4018,15 @@ void AwtComponent::InquireCandidatePosition() DASSERT(!safe_ExceptionOccurred(env)); } -HIMC AwtComponent::ImmGetContext() +HWND AwtComponent::ImmGetHWnd() { HWND proxy = GetProxyFocusOwner(); - return ::ImmGetContext((proxy != NULL) ? proxy : GetHWnd()); + return (proxy != NULL) ? proxy : GetHWnd(); } HIMC AwtComponent::ImmAssociateContext(HIMC himc) { - HWND proxy = GetProxyFocusOwner(); - return ::ImmAssociateContext((proxy != NULL) ? proxy : GetHWnd(), himc); + return ::ImmAssociateContext(ImmGetHWnd(), himc); } HWND AwtComponent::GetProxyFocusOwner() diff --git a/jdk/src/windows/native/sun/windows/awt_Component.h b/jdk/src/windows/native/sun/windows/awt_Component.h index 3257c517516..75c1b3c9384 100644 --- a/jdk/src/windows/native/sun/windows/awt_Component.h +++ b/jdk/src/windows/native/sun/windows/awt_Component.h @@ -464,7 +464,7 @@ public: int caretPos, int visiblePos); void InquireCandidatePosition(); INLINE LPARAM GetCandidateType() { return m_bitsCandType; } - HIMC ImmGetContext(); + HWND ImmGetHWnd(); HIMC ImmAssociateContext(HIMC himc); HWND GetProxyFocusOwner(); diff --git a/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp b/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp index abd6e120451..d60fbd329b1 100644 --- a/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp +++ b/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp @@ -156,6 +156,7 @@ FileDialogHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam) HIMC hIMC = ::ImmGetContext(hdlg); if (hIMC != NULL) { ::ImmNotifyIME(hIMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0); + ::ImmReleaseContext(hdlg, hIMC); } WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(parent, NativeDialogWndProcProp)); diff --git a/jdk/src/windows/native/sun/windows/awt_Frame.cpp b/jdk/src/windows/native/sun/windows/awt_Frame.cpp index 76811dfec03..da1df839535 100644 --- a/jdk/src/windows/native/sun/windows/awt_Frame.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Frame.cpp @@ -319,8 +319,6 @@ LRESULT AwtFrame::ProxyWindowProc(UINT message, WPARAM wParam, LPARAM lParam, Ms case WM_IME_STARTCOMPOSITION: case WM_IME_ENDCOMPOSITION: case WM_IME_COMPOSITION: - case WM_IME_SETCONTEXT: - case WM_IME_NOTIFY: case WM_IME_CONTROL: case WM_IME_COMPOSITIONFULL: case WM_IME_SELECT: diff --git a/jdk/src/windows/native/sun/windows/awt_TextComponent.cpp b/jdk/src/windows/native/sun/windows/awt_TextComponent.cpp index 17d7c68088c..5ba2efca861 100644 --- a/jdk/src/windows/native/sun/windows/awt_TextComponent.cpp +++ b/jdk/src/windows/native/sun/windows/awt_TextComponent.cpp @@ -336,7 +336,8 @@ AwtTextComponent::WmPaste() //im --- override to over the spot composition void AwtTextComponent::SetCompositionWindow(RECT& rc) { - HIMC hIMC = ImmGetContext(); + HWND hwnd = ImmGetHWnd(); + HIMC hIMC = ImmGetContext(hwnd); // rc is not used for text component. COMPOSITIONFORM cf = { CFS_FORCE_POSITION, {0,0}, {0,0,0,0} }; GetCaretPos(&(cf.ptCurrentPos)); @@ -348,6 +349,7 @@ void AwtTextComponent::SetCompositionWindow(RECT& rc) LOGFONT lf; GetObject(m_hFont, sizeof(LOGFONT), &lf); ImmSetCompositionFont(hIMC, &lf); + ImmReleaseContext(hwnd, hIMC); } //im --- end diff --git a/jdk/test/java/awt/Frame/7024749/bug7024749.java b/jdk/test/java/awt/Frame/7024749/bug7024749.java new file mode 100644 index 00000000000..5eb28b6723d --- /dev/null +++ b/jdk/test/java/awt/Frame/7024749/bug7024749.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7024749 + * @summary JDK7 b131---a crash in: Java_sun_awt_windows_ThemeReader_isGetThemeTransitionDurationDefined+0x75 + * @library ../../../regtesthelpers + * @build Util + * @author Oleg Pekhovskiy: area=awt.toplevel + @run main bug7024749 + */ + +import java.awt.*; +import test.java.awt.regtesthelpers.Util; + +public class bug7024749 { + public static void main(String[] args) { + final Frame f = new Frame("F"); + f.setBounds(0,0,200,200); + f.setEnabled(false); // <- disable the top-level + f.setVisible(true); + + Window w = new Window(f); + w.setBounds(300,300,300,300); + w.add(new TextField(20)); + w.setVisible(true); + + Robot robot = Util.createRobot(); + robot.setAutoDelay(1000); + Util.waitForIdle(robot); + robot.delay(1000); + Util.clickOnTitle(f, robot); + Util.waitForIdle(robot); + + f.dispose(); + System.out.println("Test passed!"); + } +} From 98dba02e885b9a1393a1b6c848a685e8c9a0fe8b Mon Sep 17 00:00:00 2001 From: Anthony Petrov Date: Tue, 26 Jun 2012 17:29:10 +0400 Subject: [PATCH 24/83] 7124326: [macosx] An issue similar to autoshutdown one in two AppContexts situation Don't add SystemTrayPeer to the peers map Reviewed-by: art, leonidr --- jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java | 1 - 1 file changed, 1 deletion(-) diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java index d3565b845ad..524abddcf4f 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java @@ -216,7 +216,6 @@ public class LWCToolkit extends LWToolkit { @Override public SystemTrayPeer createSystemTray(SystemTray target) { SystemTrayPeer peer = new CSystemTray(); - targetCreatedPeer(target, peer); return peer; } From 8c4cefaa96fa51f417abdc4a08996f9aec4e3125 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Tue, 26 Jun 2012 09:06:16 -0700 Subject: [PATCH 25/83] 7179138: Incorrect result with String concatenation optimization Check for and skip diamond shaped NULL check code for the result of toString() Reviewed-by: twisti, roland --- hotspot/src/share/vm/opto/stringopts.cpp | 126 ++++++++++++------ .../test/compiler/7179138/Test7179138_1.java | 66 +++++++++ .../test/compiler/7179138/Test7179138_2.java | 66 +++++++++ 3 files changed, 216 insertions(+), 42 deletions(-) create mode 100644 hotspot/test/compiler/7179138/Test7179138_1.java create mode 100644 hotspot/test/compiler/7179138/Test7179138_2.java diff --git a/hotspot/src/share/vm/opto/stringopts.cpp b/hotspot/src/share/vm/opto/stringopts.cpp index 99498ea9598..d606a7fdad6 100644 --- a/hotspot/src/share/vm/opto/stringopts.cpp +++ b/hotspot/src/share/vm/opto/stringopts.cpp @@ -112,6 +112,7 @@ class StringConcat : public ResourceObj { _arguments->ins_req(0, value); _mode.insert_before(0, mode); } + void push_string(Node* value) { push(value, StringMode); } @@ -125,9 +126,56 @@ class StringConcat : public ResourceObj { push(value, CharMode); } + static bool is_SB_toString(Node* call) { + if (call->is_CallStaticJava()) { + CallStaticJavaNode* csj = call->as_CallStaticJava(); + ciMethod* m = csj->method(); + if (m != NULL && + (m->intrinsic_id() == vmIntrinsics::_StringBuilder_toString || + m->intrinsic_id() == vmIntrinsics::_StringBuffer_toString)) { + return true; + } + } + return false; + } + + static Node* skip_string_null_check(Node* value) { + // Look for a diamond shaped Null check of toString() result + // (could be code from String.valueOf()): + // (Proj == NULL) ? "null":"CastPP(Proj)#NotNULL + if (value->is_Phi()) { + int true_path = value->as_Phi()->is_diamond_phi(); + if (true_path != 0) { + // phi->region->if_proj->ifnode->bool + BoolNode* b = value->in(0)->in(1)->in(0)->in(1)->as_Bool(); + Node* cmp = b->in(1); + Node* v1 = cmp->in(1); + Node* v2 = cmp->in(2); + // Null check of the return of toString which can simply be skipped. + if (b->_test._test == BoolTest::ne && + v2->bottom_type() == TypePtr::NULL_PTR && + value->in(true_path)->Opcode() == Op_CastPP && + value->in(true_path)->in(1) == v1 && + v1->is_Proj() && is_SB_toString(v1->in(0))) { + return v1; + } + } + } + return value; + } + Node* argument(int i) { return _arguments->in(i); } + Node* argument_uncast(int i) { + Node* arg = argument(i); + int amode = mode(i); + if (amode == StringConcat::StringMode || + amode == StringConcat::StringNullCheckMode) { + arg = skip_string_null_check(arg); + } + return arg; + } void set_argument(int i, Node* value) { _arguments->set_req(i, value); } @@ -206,9 +254,11 @@ class StringConcat : public ResourceObj { void StringConcat::eliminate_unneeded_control() { - eliminate_initialize(begin()->initialization()); for (uint i = 0; i < _control.size(); i++) { Node* n = _control.at(i); + if (n->is_Allocate()) { + eliminate_initialize(n->as_Allocate()->initialization()); + } if (n->is_Call()) { if (n != _end) { eliminate_call(n->as_Call()); @@ -239,14 +289,15 @@ StringConcat* StringConcat::merge(StringConcat* other, Node* arg) { assert(result->_control.contains(other->_end), "what?"); assert(result->_control.contains(_begin), "what?"); for (int x = 0; x < num_arguments(); x++) { - if (argument(x) == arg) { + Node* argx = argument_uncast(x); + if (argx == arg) { // replace the toString result with the all the arguments that // made up the other StringConcat for (int y = 0; y < other->num_arguments(); y++) { result->append(other->argument(y), other->mode(y)); } } else { - result->append(argument(x), mode(x)); + result->append(argx, mode(x)); } } result->set_allocation(other->_begin); @@ -327,14 +378,9 @@ Node_List PhaseStringOpts::collect_toString_calls() { while (worklist.size() > 0) { Node* ctrl = worklist.pop(); - if (ctrl->is_CallStaticJava()) { + if (StringConcat::is_SB_toString(ctrl)) { CallStaticJavaNode* csj = ctrl->as_CallStaticJava(); - ciMethod* m = csj->method(); - if (m != NULL && - (m->intrinsic_id() == vmIntrinsics::_StringBuffer_toString || - m->intrinsic_id() == vmIntrinsics::_StringBuilder_toString)) { - string_calls.push(csj); - } + string_calls.push(csj); } if (ctrl->in(0) != NULL && !_visited.test_set(ctrl->in(0)->_idx)) { worklist.push(ctrl->in(0)); @@ -550,44 +596,40 @@ PhaseStringOpts::PhaseStringOpts(PhaseGVN* gvn, Unique_Node_List*): for (int c = 0; c < concats.length(); c++) { StringConcat* sc = concats.at(c); for (int i = 0; i < sc->num_arguments(); i++) { - Node* arg = sc->argument(i); - if (arg->is_Proj() && arg->in(0)->is_CallStaticJava()) { + Node* arg = sc->argument_uncast(i); + if (arg->is_Proj() && StringConcat::is_SB_toString(arg->in(0))) { CallStaticJavaNode* csj = arg->in(0)->as_CallStaticJava(); - if (csj->method() != NULL && - (csj->method()->intrinsic_id() == vmIntrinsics::_StringBuilder_toString || - csj->method()->intrinsic_id() == vmIntrinsics::_StringBuffer_toString)) { - for (int o = 0; o < concats.length(); o++) { - if (c == o) continue; - StringConcat* other = concats.at(o); - if (other->end() == csj) { + for (int o = 0; o < concats.length(); o++) { + if (c == o) continue; + StringConcat* other = concats.at(o); + if (other->end() == csj) { #ifndef PRODUCT - if (PrintOptimizeStringConcat) { - tty->print_cr("considering stacked concats"); - } + if (PrintOptimizeStringConcat) { + tty->print_cr("considering stacked concats"); + } #endif - StringConcat* merged = sc->merge(other, arg); - if (merged->validate_control_flow()) { + StringConcat* merged = sc->merge(other, arg); + if (merged->validate_control_flow()) { #ifndef PRODUCT - if (PrintOptimizeStringConcat) { - tty->print_cr("stacking would succeed"); - } -#endif - if (c < o) { - concats.remove_at(o); - concats.at_put(c, merged); - } else { - concats.remove_at(c); - concats.at_put(o, merged); - } - goto restart; - } else { -#ifndef PRODUCT - if (PrintOptimizeStringConcat) { - tty->print_cr("stacking would fail"); - } -#endif + if (PrintOptimizeStringConcat) { + tty->print_cr("stacking would succeed"); } +#endif + if (c < o) { + concats.remove_at(o); + concats.at_put(c, merged); + } else { + concats.remove_at(c); + concats.at_put(o, merged); + } + goto restart; + } else { +#ifndef PRODUCT + if (PrintOptimizeStringConcat) { + tty->print_cr("stacking would fail"); + } +#endif } } } diff --git a/hotspot/test/compiler/7179138/Test7179138_1.java b/hotspot/test/compiler/7179138/Test7179138_1.java new file mode 100644 index 00000000000..afa830731e3 --- /dev/null +++ b/hotspot/test/compiler/7179138/Test7179138_1.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012 Skip Balk. 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 + * @bug 7179138 + * @summary Incorrect result with String concatenation optimization + * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation Test7179138_1 + * + * @author Skip Balk + */ + +public class Test7179138_1 { + public static void main(String[] args) throws Exception { + System.out.println("Java Version: " + System.getProperty("java.vm.version")); + long[] durations = new long[60]; + for (int i = 0; i < 100000; i++) { + // this empty for-loop is required to reproduce this bug + for (long duration : durations) { + // do nothing + } + { + String s = "test"; + int len = s.length(); + + s = new StringBuilder(String.valueOf(s)).append(s).toString(); + len = len + len; + + s = new StringBuilder(String.valueOf(s)).append(s).toString(); + len = len + len; + + s = new StringBuilder(String.valueOf(s)).append(s).toString(); + len = len + len; + + if (s.length() != len) { + System.out.println("Failed at iteration: " + i); + System.out.println("Length mismatch: " + s.length() + " <> " + len); + System.out.println("Expected: \"" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "\""); + System.out.println("Actual: \"" + s + "\""); + System.exit(97); + } + } + } + } +} + diff --git a/hotspot/test/compiler/7179138/Test7179138_2.java b/hotspot/test/compiler/7179138/Test7179138_2.java new file mode 100644 index 00000000000..615c614fc30 --- /dev/null +++ b/hotspot/test/compiler/7179138/Test7179138_2.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012 Skip Balk. 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 + * @bug 7179138 + * @summary Incorrect result with String concatenation optimization + * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation Test7179138_2 + * + * @author Skip Balk + */ + +public class Test7179138_2 { + public static void main(String[] args) throws Exception { + System.out.println("Java Version: " + System.getProperty("java.vm.version")); + long[] durations = new long[60]; + for (int i = 0; i < 100000; i++) { + // this empty for-loop is required to reproduce this bug + for (long duration : durations) { + // do nothing + } + { + String s = "test"; + int len = s.length(); + + s = s + s; + len = len + len; + + s = s + s; + len = len + len; + + s = s + s; + len = len + len; + + if (s.length() != len) { + System.out.println("Failed at iteration: " + i); + System.out.println("Length mismatch: " + s.length() + " <> " + len); + System.out.println("Expected: \"" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "\""); + System.out.println("Actual: \"" + s + "\""); + System.exit(0); + } + } + } + } +} + From 6b5a5ca0e2569f716958e931b32a2eb2c7ec429e Mon Sep 17 00:00:00 2001 From: Joe Wang Date: Tue, 26 Jun 2012 15:28:21 -0700 Subject: [PATCH 26/83] 7166896: DocumentBuilder.parse(String uri) is not IPv6 enabled. It throws MalformedURLException Skip the added international character handling for general paths Reviewed-by: lancea --- .../xerces/internal/impl/XMLEntityManager.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java index 7f3295d1479..58c1b34018d 100644 --- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java +++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java @@ -2609,6 +2609,18 @@ protected static final String PARSER_SETTINGS = if (str == null) { return str; } + int len = str.length(), i=0, ch; + for (; i < len; i++) { + ch = str.charAt(i); + // if it's not an ASCII 7 character, break here, and use UTF-8 encoding + if (ch >= 128) + break; + } + + // we saw no non-ascii-7 character + if (i == len) { + return str; + } // get UTF-8 bytes for the string StringBuffer buffer = new StringBuffer(); @@ -2620,11 +2632,11 @@ protected static final String PARSER_SETTINGS = // should never happen return str; } - int len = bytes.length; - int ch; + + len = bytes.length; // for each byte - for (int i = 0; i < len; i++) { + for (i = 0; i < len; i++) { b = bytes[i]; // for non-ascii character: make it positive, then escape if (b < 0) { From 45e1021238205071208e243f9133310bd6d9d886 Mon Sep 17 00:00:00 2001 From: Doug Lea Date: Wed, 27 Jun 2012 01:36:28 -0400 Subject: [PATCH 27/83] 7161229: PriorityBlockingQueue keeps hard reference to last removed element Reviewed-by: dholmes, forax, alanb --- .../concurrent/PriorityBlockingQueue.java | 155 ++++++++---------- .../concurrent/BlockingQueue/LastElement.java | 29 +++- 2 files changed, 88 insertions(+), 96 deletions(-) diff --git a/jdk/src/share/classes/java/util/concurrent/PriorityBlockingQueue.java b/jdk/src/share/classes/java/util/concurrent/PriorityBlockingQueue.java index 37b44a1038e..d78cf205525 100644 --- a/jdk/src/share/classes/java/util/concurrent/PriorityBlockingQueue.java +++ b/jdk/src/share/classes/java/util/concurrent/PriorityBlockingQueue.java @@ -35,7 +35,8 @@ package java.util.concurrent; -import java.util.concurrent.locks.*; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.ReentrantLock; import java.util.*; /** @@ -111,7 +112,7 @@ public class PriorityBlockingQueue extends AbstractQueue * java.util.PriorityQueue operations within a lock, as was done * in a previous version of this class. To maintain * interoperability, a plain PriorityQueue is still used during - * serialization, which maintains compatibility at the espense of + * serialization, which maintains compatibility at the expense of * transiently doubling overhead. */ @@ -308,14 +309,13 @@ public class PriorityBlockingQueue extends AbstractQueue /** * Mechanics for poll(). Call only while holding lock. */ - private E extract() { - E result; + private E dequeue() { int n = size - 1; if (n < 0) - result = null; + return null; else { Object[] array = queue; - result = (E) array[0]; + E result = (E) array[0]; E x = (E) array[n]; array[n] = null; Comparator cmp = comparator; @@ -324,8 +324,8 @@ public class PriorityBlockingQueue extends AbstractQueue else siftDownUsingComparator(0, x, array, n, cmp); size = n; + return result; } - return result; } /** @@ -382,39 +382,43 @@ public class PriorityBlockingQueue extends AbstractQueue */ private static void siftDownComparable(int k, T x, Object[] array, int n) { - Comparable key = (Comparable)x; - int half = n >>> 1; // loop while a non-leaf - while (k < half) { - int child = (k << 1) + 1; // assume left child is least - Object c = array[child]; - int right = child + 1; - if (right < n && - ((Comparable) c).compareTo((T) array[right]) > 0) - c = array[child = right]; - if (key.compareTo((T) c) <= 0) - break; - array[k] = c; - k = child; + if (n > 0) { + Comparable key = (Comparable)x; + int half = n >>> 1; // loop while a non-leaf + while (k < half) { + int child = (k << 1) + 1; // assume left child is least + Object c = array[child]; + int right = child + 1; + if (right < n && + ((Comparable) c).compareTo((T) array[right]) > 0) + c = array[child = right]; + if (key.compareTo((T) c) <= 0) + break; + array[k] = c; + k = child; + } + array[k] = key; } - array[k] = key; } private static void siftDownUsingComparator(int k, T x, Object[] array, int n, Comparator cmp) { - int half = n >>> 1; - while (k < half) { - int child = (k << 1) + 1; - Object c = array[child]; - int right = child + 1; - if (right < n && cmp.compare((T) c, (T) array[right]) > 0) - c = array[child = right]; - if (cmp.compare(x, (T) c) <= 0) - break; - array[k] = c; - k = child; + if (n > 0) { + int half = n >>> 1; + while (k < half) { + int child = (k << 1) + 1; + Object c = array[child]; + int right = child + 1; + if (right < n && cmp.compare((T) c, (T) array[right]) > 0) + c = array[child = right]; + if (cmp.compare(x, (T) c) <= 0) + break; + array[k] = c; + k = child; + } + array[k] = x; } - array[k] = x; } /** @@ -520,13 +524,11 @@ public class PriorityBlockingQueue extends AbstractQueue public E poll() { final ReentrantLock lock = this.lock; lock.lock(); - E result; try { - result = extract(); + return dequeue(); } finally { lock.unlock(); } - return result; } public E take() throws InterruptedException { @@ -534,7 +536,7 @@ public class PriorityBlockingQueue extends AbstractQueue lock.lockInterruptibly(); E result; try { - while ( (result = extract()) == null) + while ( (result = dequeue()) == null) notEmpty.await(); } finally { lock.unlock(); @@ -548,7 +550,7 @@ public class PriorityBlockingQueue extends AbstractQueue lock.lockInterruptibly(); E result; try { - while ( (result = extract()) == null && nanos > 0) + while ( (result = dequeue()) == null && nanos > 0) nanos = notEmpty.awaitNanos(nanos); } finally { lock.unlock(); @@ -559,13 +561,11 @@ public class PriorityBlockingQueue extends AbstractQueue public E peek() { final ReentrantLock lock = this.lock; lock.lock(); - E result; try { - result = size > 0 ? (E) queue[0] : null; + return (size == 0) ? null : (E) queue[0]; } finally { lock.unlock(); } - return result; } /** @@ -649,32 +649,28 @@ public class PriorityBlockingQueue extends AbstractQueue * @return {@code true} if this queue changed as a result of the call */ public boolean remove(Object o) { - boolean removed = false; final ReentrantLock lock = this.lock; lock.lock(); try { int i = indexOf(o); - if (i != -1) { - removeAt(i); - removed = true; - } + if (i == -1) + return false; + removeAt(i); + return true; } finally { lock.unlock(); } - return removed; } - /** * Identity-based version for use in Itr.remove */ - private void removeEQ(Object o) { + void removeEQ(Object o) { final ReentrantLock lock = this.lock; lock.lock(); try { Object[] array = queue; - int n = size; - for (int i = 0; i < n; i++) { + for (int i = 0, n = size; i < n; i++) { if (o == array[i]) { removeAt(i); break; @@ -694,15 +690,13 @@ public class PriorityBlockingQueue extends AbstractQueue * @return {@code true} if this queue contains the specified element */ public boolean contains(Object o) { - int index; final ReentrantLock lock = this.lock; lock.lock(); try { - index = indexOf(o); + return indexOf(o) != -1; } finally { lock.unlock(); } - return index != -1; } /** @@ -728,7 +722,6 @@ public class PriorityBlockingQueue extends AbstractQueue } } - public String toString() { final ReentrantLock lock = this.lock; lock.lock(); @@ -739,7 +732,7 @@ public class PriorityBlockingQueue extends AbstractQueue StringBuilder sb = new StringBuilder(); sb.append('['); for (int i = 0; i < n; ++i) { - E e = (E)queue[i]; + Object e = queue[i]; sb.append(e == this ? "(this Collection)" : e); if (i != n - 1) sb.append(',').append(' '); @@ -757,23 +750,7 @@ public class PriorityBlockingQueue extends AbstractQueue * @throws IllegalArgumentException {@inheritDoc} */ public int drainTo(Collection c) { - if (c == null) - throw new NullPointerException(); - if (c == this) - throw new IllegalArgumentException(); - final ReentrantLock lock = this.lock; - lock.lock(); - try { - int n = 0; - E e; - while ( (e = extract()) != null) { - c.add(e); - ++n; - } - return n; - } finally { - lock.unlock(); - } + return drainTo(c, Integer.MAX_VALUE); } /** @@ -792,11 +769,10 @@ public class PriorityBlockingQueue extends AbstractQueue final ReentrantLock lock = this.lock; lock.lock(); try { - int n = 0; - E e; - while (n < maxElements && (e = extract()) != null) { - c.add(e); - ++n; + int n = Math.min(size, maxElements); + for (int i = 0; i < n; i++) { + c.add((E) queue[0]); // In this order, in case add() throws. + dequeue(); } return n; } finally { @@ -844,8 +820,7 @@ public class PriorityBlockingQueue extends AbstractQueue * The following code can be used to dump the queue into a newly * allocated array of {@code String}: * - *

-     *     String[] y = x.toArray(new String[0]);
+ *
 {@code String[] y = x.toArray(new String[0]);}
* * Note that {@code toArray(new Object[0])} is identical in function to * {@code toArray()}. @@ -898,7 +873,7 @@ public class PriorityBlockingQueue extends AbstractQueue */ final class Itr implements Iterator { final Object[] array; // Array of all elements - int cursor; // index of next element to return; + int cursor; // index of next element to return int lastRet; // index of last element, or -1 if no such Itr(Object[] array) { @@ -926,17 +901,18 @@ public class PriorityBlockingQueue extends AbstractQueue } /** - * Saves the state to a stream (that is, serializes it). For - * compatibility with previous version of this class, - * elements are first copied to a java.util.PriorityQueue, - * which is then serialized. + * Saves this queue to a stream (that is, serializes it). + * + * For compatibility with previous version of this class, elements + * are first copied to a java.util.PriorityQueue, which is then + * serialized. */ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { lock.lock(); try { - int n = size; // avoid zero capacity argument - q = new PriorityQueue(n == 0 ? 1 : n, comparator); + // avoid zero capacity argument + q = new PriorityQueue(Math.max(size, 1), comparator); q.addAll(this); s.defaultWriteObject(); } finally { @@ -946,10 +922,7 @@ public class PriorityBlockingQueue extends AbstractQueue } /** - * Reconstitutes the {@code PriorityBlockingQueue} instance from a stream - * (that is, deserializes it). - * - * @param s the stream + * Reconstitutes this queue from a stream (that is, deserializes it). */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { diff --git a/jdk/test/java/util/concurrent/BlockingQueue/LastElement.java b/jdk/test/java/util/concurrent/BlockingQueue/LastElement.java index df50ef0323a..d8cf75fa425 100644 --- a/jdk/test/java/util/concurrent/BlockingQueue/LastElement.java +++ b/jdk/test/java/util/concurrent/BlockingQueue/LastElement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, 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 @@ -23,7 +23,7 @@ /* * @test - * @bug 6215625 + * @bug 6215625 7161229 * @summary Check correct behavior when last element is removed. * @author Martin Buchholz */ @@ -38,9 +38,7 @@ public class LastElement { testQueue(new ArrayBlockingQueue(10, true)); testQueue(new ArrayBlockingQueue(10, false)); testQueue(new LinkedTransferQueue()); - - System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); - if (failed > 0) throw new Exception("Some tests failed"); + testQueue(new PriorityBlockingQueue()); } void testQueue(BlockingQueue q) throws Throwable { @@ -59,6 +57,7 @@ public class LastElement { try {check(q.take() == three);} catch (Throwable t) {unexpected(t);} check(q.isEmpty() && q.size() == 0); + check(noRetention(q)); // iterator().remove() q.clear(); @@ -77,6 +76,26 @@ public class LastElement { check(q.isEmpty() && q.size() == 0); } + boolean noRetention(BlockingQueue q) { + if (q instanceof PriorityBlockingQueue) { + PriorityBlockingQueue pbq = (PriorityBlockingQueue) q; + try { + java.lang.reflect.Field queue = + PriorityBlockingQueue.class.getDeclaredField("queue"); + queue.setAccessible(true); + Object[] a = (Object[]) queue.get(pbq); + return a[0] == null; + } + catch (NoSuchFieldException e) { + unexpected(e); + } + catch (IllegalAccessException e) { + // ignore - security manager must be installed + } + } + return true; + } + //--------------------- Infrastructure --------------------------- volatile int passed = 0, failed = 0; void pass() {passed++;} From 8e42425c921a2ddd27073519c73b943d1c9f73e6 Mon Sep 17 00:00:00 2001 From: Staffan Larsen Date: Wed, 27 Jun 2012 15:23:36 +0200 Subject: [PATCH 28/83] 7178667: ALT_EXPORT_PATH does not export server jvm on macosx Missing .PHONY targets in makefile Reviewed-by: dholmes, dsamersoff --- hotspot/make/bsd/makefiles/universal.gmk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hotspot/make/bsd/makefiles/universal.gmk b/hotspot/make/bsd/makefiles/universal.gmk index 169b70d8772..0cc92758af9 100644 --- a/hotspot/make/bsd/makefiles/universal.gmk +++ b/hotspot/make/bsd/makefiles/universal.gmk @@ -110,4 +110,5 @@ copy_debug_jdk:: .PHONY: universal_product universal_fastdebug universal_debug \ all_product_universal all_fastdebug_universal all_debug_universal \ - universalize export_universal copy_universal + universalize export_universal copy_universal \ + $(UNIVERSAL_LIPO_LIST) $(UNIVERSAL_COPY_LIST) From 55c71e93179a77a198b72b7935ab55777b78aecd Mon Sep 17 00:00:00 2001 From: Sean Coffey Date: Wed, 27 Jun 2012 21:09:29 +0100 Subject: [PATCH 29/83] 7162902: Umbrella port of a number of corba bug fixes from JDK 6 to jdk7u/8 Reviewed-by: lancea --- .../se/impl/encoding/CachedCodeBase.java | 42 +- .../se/impl/interceptors/PIHandlerImpl.java | 27 +- .../impl/interceptors/PINoOpHandlerImpl.java | 5 +- .../MonitoringManagerFactoryImpl.java | 10 +- .../monitoring/MonitoringManagerImpl.java | 19 +- .../com/sun/corba/se/impl/orb/ORBImpl.java | 433 +++++++++++++----- .../orbutil/threadpool/ThreadPoolImpl.java | 397 +++++++++------- .../threadpool/ThreadPoolManagerImpl.java | 116 ++++- .../orbutil/threadpool/WorkQueueImpl.java | 17 +- .../protocol/CorbaMessageMediatorImpl.java | 6 +- .../corba/se/impl/transport/SelectorImpl.java | 6 +- .../sun/corba/se/spi/logging/data/ORBUtil.mc | 27 +- .../se/spi/monitoring/MonitoringManager.java | 5 +- .../monitoring/MonitoringManagerFactory.java | 4 +- .../classes/com/sun/corba/se/spi/orb/ORB.java | 26 +- .../se/spi/orbutil/threadpool/ThreadPool.java | 10 +- .../orbutil/threadpool/ThreadPoolManager.java | 6 +- .../sun/corba/se/spi/protocol/PIHandler.java | 6 +- .../protocol/RequestDispatcherRegistry.java | 40 +- 19 files changed, 837 insertions(+), 365 deletions(-) diff --git a/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java b/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java index 4b08a1ce249..3e698764e8d 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, 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 @@ -22,7 +22,6 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ - package com.sun.corba.se.impl.encoding; import java.util.Hashtable; @@ -32,7 +31,8 @@ import com.sun.org.omg.SendingContext.CodeBaseHelper; import com.sun.org.omg.SendingContext._CodeBaseImplBase; import com.sun.org.omg.SendingContext._CodeBaseStub; import com.sun.corba.se.spi.transport.CorbaConnection; - +import com.sun.corba.se.spi.ior.IOR; +import com.sun.corba.se.spi.orb.ORB; /** * Provides the reading side with a per connection cache of * info obtained via calls to the remote CodeBase. @@ -51,14 +51,24 @@ import com.sun.corba.se.spi.transport.CorbaConnection; * * Needs cache management. */ -// REVISIT: revert to package protected after framework merge. public class CachedCodeBase extends _CodeBaseImplBase { private Hashtable implementations, fvds, bases; - private CodeBase delegate; + private volatile CodeBase delegate; private CorbaConnection conn; - private static Hashtable iorToCodeBaseObjMap = new Hashtable(); + private static Object iorMapLock = new Object(); + private static Hashtable iorMap = new Hashtable<>(); + + public static synchronized void cleanCache( ORB orb ) { + synchronized (iorMapLock) { + for (IOR ior : iorMap.keySet()) { + if (ior.getORB() == orb) { + iorMap.remove(ior); + } + } + } + } public CachedCodeBase(CorbaConnection connection) { conn = connection; @@ -68,7 +78,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return null; } - public String implementation (String repId) { + public synchronized String implementation (String repId) { String urlResult = null; if (implementations == null) @@ -86,7 +96,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return urlResult; } - public String[] implementations (String[] repIds) { + public synchronized String[] implementations (String[] repIds) { String[] urlResults = new String[repIds.length]; for (int i = 0; i < urlResults.length; i++) @@ -95,7 +105,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return urlResults; } - public FullValueDescription meta (String repId) { + public synchronized FullValueDescription meta (String repId) { FullValueDescription result = null; if (fvds == null) @@ -113,7 +123,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return result; } - public FullValueDescription[] metas (String[] repIds) { + public synchronized FullValueDescription[] metas (String[] repIds) { FullValueDescription[] results = new FullValueDescription[repIds.length]; @@ -123,7 +133,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return results; } - public String[] bases (String repId) { + public synchronized String[] bases (String repId) { String[] results = null; @@ -145,7 +155,7 @@ public class CachedCodeBase extends _CodeBaseImplBase // Ensures that we've used the connection's IOR to create // a valid CodeBase delegate. If this returns false, then // it is not valid to access the delegate. - private boolean connectedCodeBase() { + private synchronized boolean connectedCodeBase() { if (delegate != null) return true; @@ -165,7 +175,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return false; } - synchronized(this) { + synchronized(iorMapLock) { // Recheck the condition to make sure another // thread didn't already do this while we waited @@ -173,7 +183,8 @@ public class CachedCodeBase extends _CodeBaseImplBase return true; // Do we have a reference initialized by another connection? - delegate = (CodeBase)CachedCodeBase.iorToCodeBaseObjMap.get(conn.getCodeBaseIOR()); + delegate = CachedCodeBase.iorMap.get(conn.getCodeBaseIOR()); + if (delegate != null) return true; @@ -181,8 +192,7 @@ public class CachedCodeBase extends _CodeBaseImplBase delegate = CodeBaseHelper.narrow(getObjectFromIOR()); // Save it for the benefit of other connections - CachedCodeBase.iorToCodeBaseObjMap.put(conn.getCodeBaseIOR(), - delegate); + CachedCodeBase.iorMap.put(conn.getCodeBaseIOR(), delegate); } // It's now safe to use the delegate diff --git a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java index e8c6d1560fc..e7d7ae27e76 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, 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 @@ -58,7 +58,7 @@ import org.omg.PortableInterceptor.SYSTEM_EXCEPTION; import org.omg.PortableInterceptor.TRANSPORT_RETRY; import org.omg.PortableInterceptor.USER_EXCEPTION; import org.omg.PortableInterceptor.PolicyFactory; -import org.omg.PortableInterceptor.ObjectReferenceTemplate ; +import org.omg.PortableInterceptor.ObjectReferenceTemplate; import com.sun.corba.se.pept.encoding.OutputObject; @@ -112,10 +112,10 @@ public class PIHandlerImpl implements PIHandler } } - private ORB orb ; - InterceptorsSystemException wrapper ; - ORBUtilSystemException orbutilWrapper ; - OMGSystemException omgWrapper ; + private ORB orb; + InterceptorsSystemException wrapper; + ORBUtilSystemException orbutilWrapper; + OMGSystemException omgWrapper; // A unique id used in ServerRequestInfo. // This does not correspond to the GIOP request id. @@ -178,6 +178,21 @@ public class PIHandlerImpl implements PIHandler } }; + public void close() { + orb = null; + wrapper = null; + orbutilWrapper = null; + omgWrapper = null; + codecFactory = null; + arguments = null; + interceptorList = null; + interceptorInvoker = null; + current = null; + policyFactoryTable = null; + threadLocalClientRequestInfoStack = null; + threadLocalServerRequestInfoStack = null; + } + // Class to contain all ThreadLocal data for ClientRequestInfo // maintenance. // diff --git a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java index e6d9e53609f..93c047b76cd 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -69,6 +69,9 @@ public class PINoOpHandlerImpl implements PIHandler public PINoOpHandlerImpl( ) { } + public void close() { + } + public void initialize() { } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java index eb365213270..a88d2f2f697 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -34,14 +34,18 @@ public class MonitoringManagerFactoryImpl implements MonitoringManagerFactory { private HashMap monitoringManagerTable = new HashMap(); public synchronized MonitoringManager createMonitoringManager( - String nameOfTheRoot, String description ) + String nameOfTheRoot, String description) { MonitoringManagerImpl m = null; m = (MonitoringManagerImpl)monitoringManagerTable.get(nameOfTheRoot); if (m == null) { - m = new MonitoringManagerImpl( nameOfTheRoot, description ); + m = new MonitoringManagerImpl(nameOfTheRoot, description); monitoringManagerTable.put(nameOfTheRoot, m); } return m; } + + public synchronized void remove(String nameOfTheRoot) { + monitoringManagerTable.remove(nameOfTheRoot); + } } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java index 4e97a73815c..b7e676eafed 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -26,6 +26,7 @@ package com.sun.corba.se.impl.monitoring; import com.sun.corba.se.spi.monitoring.MonitoringManager; +import com.sun.corba.se.spi.monitoring.MonitoringManagerFactory; import com.sun.corba.se.spi.monitoring.MonitoredObject; import com.sun.corba.se.spi.monitoring.MonitoredObjectFactory; import com.sun.corba.se.spi.monitoring.MonitoringFactories; @@ -33,18 +34,24 @@ import com.sun.corba.se.spi.monitoring.MonitoringFactories; public class MonitoringManagerImpl implements MonitoringManager { private final MonitoredObject rootMonitoredObject; - MonitoringManagerImpl( String nameOfTheRoot, String description ) { + MonitoringManagerImpl(String nameOfTheRoot, String description) { MonitoredObjectFactory f = MonitoringFactories.getMonitoredObjectFactory(); rootMonitoredObject = - f.createMonitoredObject( nameOfTheRoot, description ); + f.createMonitoredObject(nameOfTheRoot, description); } - public void clearState( ) { - rootMonitoredObject.clearState( ); + public void clearState() { + rootMonitoredObject.clearState(); } - public MonitoredObject getRootMonitoredObject( ) { + public MonitoredObject getRootMonitoredObject() { return rootMonitoredObject; } + + public void close() { + MonitoringManagerFactory f = + MonitoringFactories.getMonitoringManagerFactory(); + f.remove(rootMonitoredObject.getName()); + } } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java index 65d8246f7ad..9c03173238b 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, 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 @@ -23,35 +23,37 @@ * questions. */ -package com.sun.corba.se.impl.orb ; +package com.sun.corba.se.impl.orb; import java.applet.Applet; -import java.io.IOException ; +import java.io.IOException; import java.lang.reflect.Constructor; -import java.lang.reflect.Field ; -import java.lang.reflect.Modifier ; -import java.lang.reflect.InvocationTargetException ; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList ; -import java.util.Iterator ; -import java.util.Properties ; -import java.util.Vector ; -import java.util.Hashtable ; -import java.util.Map ; -import java.util.HashMap ; -import java.util.LinkedList ; -import java.util.Collection ; -import java.util.Collections ; -import java.util.StringTokenizer ; -import java.util.Enumeration ; -import java.util.WeakHashMap ; +import java.util.Set; +import java.util.HashSet; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Properties; +import java.util.Vector; +import java.util.Hashtable; +import java.util.Map; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Collection; +import java.util.Collections; +import java.util.StringTokenizer; +import java.util.Enumeration; +import java.util.WeakHashMap; -import java.net.InetAddress ; +import java.net.InetAddress; import java.security.PrivilegedAction; -import java.security.AccessController ; +import java.security.AccessController; import javax.rmi.CORBA.Util; import javax.rmi.CORBA.ValueHandler; @@ -82,18 +84,18 @@ import org.omg.CORBA.ORBPackage.InvalidName; import com.sun.org.omg.SendingContext.CodeBase; import com.sun.corba.se.pept.broker.Broker; -import com.sun.corba.se.pept.protocol.ClientInvocationInfo ; +import com.sun.corba.se.pept.protocol.ClientInvocationInfo; import com.sun.corba.se.pept.transport.ContactInfo; import com.sun.corba.se.pept.transport.ConnectionCache; import com.sun.corba.se.pept.transport.TransportManager; import com.sun.corba.se.spi.ior.IOR; -import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder ; +import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder; import com.sun.corba.se.spi.ior.TaggedComponentFactoryFinder; -import com.sun.corba.se.spi.ior.IORFactories ; -import com.sun.corba.se.spi.ior.ObjectKey ; -import com.sun.corba.se.spi.ior.ObjectKeyFactory ; -import com.sun.corba.se.spi.ior.iiop.IIOPFactories ; +import com.sun.corba.se.spi.ior.IORFactories; +import com.sun.corba.se.spi.ior.ObjectKey; +import com.sun.corba.se.spi.ior.ObjectKeyFactory; +import com.sun.corba.se.spi.ior.iiop.IIOPFactories; import com.sun.corba.se.spi.ior.iiop.GIOPVersion; import com.sun.corba.se.spi.oa.OAInvocationInfo; import com.sun.corba.se.spi.oa.ObjectAdapterFactory; @@ -122,10 +124,10 @@ import com.sun.corba.se.spi.orb.StringPair; import com.sun.corba.se.spi.transport.CorbaContactInfoListFactory; import com.sun.corba.se.spi.transport.CorbaTransportManager; import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketManager; -import com.sun.corba.se.spi.copyobject.CopierManager ; -import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults ; -import com.sun.corba.se.spi.presentation.rmi.PresentationManager ; -import com.sun.corba.se.spi.presentation.rmi.StubAdapter ; +import com.sun.corba.se.spi.copyobject.CopierManager; +import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults; +import com.sun.corba.se.spi.presentation.rmi.PresentationManager; +import com.sun.corba.se.spi.presentation.rmi.StubAdapter; import com.sun.corba.se.spi.servicecontext.ServiceContextRegistry; import com.sun.corba.se.impl.corba.TypeCodeFactory; @@ -140,6 +142,7 @@ import com.sun.corba.se.impl.corba.AnyImpl; import com.sun.corba.se.impl.corba.RequestImpl; import com.sun.corba.se.impl.dynamicany.DynAnyFactoryImpl; import com.sun.corba.se.impl.encoding.EncapsOutputStream; +import com.sun.corba.se.impl.encoding.CachedCodeBase; import com.sun.corba.se.impl.interceptors.PIHandlerImpl; import com.sun.corba.se.impl.interceptors.PINoOpHandlerImpl; import com.sun.corba.se.impl.ior.TaggedComponentFactoryFinderImpl; @@ -185,6 +188,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private java.lang.Object runObj = new java.lang.Object(); private java.lang.Object shutdownObj = new java.lang.Object(); + private java.lang.Object waitForCompletionObj = new java.lang.Object(); private static final byte STATUS_OPERATING = 1; private static final byte STATUS_SHUTTING_DOWN = 2; private static final byte STATUS_SHUTDOWN = 3; @@ -193,6 +197,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // XXX Should we move invocation tracking to the first level server dispatcher? private java.lang.Object invocationObj = new java.lang.Object(); + private int numInvocations = 0; // thread local variable to store a boolean to detect deadlock in // ORB.shutdown(true). @@ -220,8 +225,6 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private int transientServerId ; - private ThreadGroup threadGroup ; - private ServiceContextRegistry serviceContextRegistry ; // Needed here to implement connect/disconnect @@ -265,6 +268,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private final Object urlOperationLock = new java.lang.Object() ; private CorbaServerRequestDispatcher insNamingDelegate ; + // resolverLock must be used for all access to either resolver or // localResolver, since it is possible for the resolver to indirectly // refer to the localResolver. Also used to protect access to @@ -279,6 +283,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private ObjectKeyFactory objectKeyFactory ; + private boolean orbOwnsThreadPoolManager = false ; + private ThreadPoolManager threadpoolMgr; private void dprint( String msg ) @@ -322,11 +328,17 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ORBVersion getORBVersion() { + synchronized (this) { + checkShutdownState(); + } return (ORBVersion)(orbVersionThreadLocal.get()) ; } public void setORBVersion(ORBVersion verObj) { + synchronized (this) { + checkShutdownState(); + } orbVersionThreadLocal.set(verObj); } @@ -347,46 +359,6 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // end of this method. pihandler = new PINoOpHandlerImpl( ); - // See bugs 4916766 and 4936203 - // We intend to create new threads in a reliable thread group. - // This avoids problems if the application/applet - // creates a thread group, makes JavaIDL calls which create a new - // connection and ReaderThread, and then destroys the thread - // group. If our ReaderThreads were to be part of such destroyed thread - // group then it might get killed and cause other invoking threads - // sharing the same connection to get a non-restartable - // CommunicationFailure. We'd like to avoid that. - // - // Our solution is to create all of our threads in the highest thread - // group that we have access to, given our own security clearance. - // - try { - // try to get a thread group that's as high in the threadgroup - // parent-child hierarchy, as we can get to. - // this will prevent an ORB thread created during applet-init from - // being killed when an applet dies. - threadGroup = (ThreadGroup) AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - ThreadGroup tg = Thread.currentThread().getThreadGroup() ; - ThreadGroup ptg = tg ; - try { - while (ptg != null) { - tg = ptg; - ptg = tg.getParent(); - } - } catch (SecurityException se) { - // Discontinue going higher on a security exception. - } - return new ThreadGroup(tg, "ORB ThreadGroup"); - } - } - ); - } catch (SecurityException e) { - // something wrong, we go back to the original code - threadGroup = Thread.currentThread().getThreadGroup(); - } - // This is the unique id of this server (JVM). Multiple incarnations // of this server will get different ids. // Compute transientServerId = milliseconds since Jan 1, 1970 @@ -547,6 +519,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void set_parameters( Properties props ) { + synchronized (this) { + checkShutdownState(); + } preInit( null, props ) ; DataCollector dataCollector = DataCollectorFactory.create( props, getLocalHostName() ) ; @@ -788,6 +763,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void notifyORB() { + synchronized (this) { + checkShutdownState(); + } synchronized (this.svResponseReceived) { this.svResponseReceived.set(); this.svResponseReceived.notify(); @@ -854,6 +832,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // Note that we connect this if we have not already done so. public synchronized IOR getFVDCodeBaseIOR() { + checkShutdownState(); + if (codeBaseIOR != null) // i.e. We are already connected to it return codeBaseIOR; @@ -1118,6 +1098,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public synchronized void setTypeCodeForClass(Class c, TypeCodeImpl tci) { + checkShutdownState(); + if (typeCodeForClassMap == null) typeCodeForClassMap = Collections.synchronizedMap( new WeakHashMap(64)); @@ -1128,6 +1110,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public synchronized TypeCodeImpl getTypeCodeForClass(Class c) { + checkShutdownState(); + if (typeCodeForClassMap == null) return null; return (TypeCodeImpl)typeCodeForClassMap.get(c); @@ -1210,6 +1194,10 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB { CorbaServerRequestDispatcher insnd ; + synchronized (this) { + checkShutdownState(); + } + if ((id == null) || (id.length() == 0)) throw new InvalidName() ; @@ -1253,66 +1241,88 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB } } - public void shutdown(boolean wait_for_completion) - { - // to wait for completion, we would deadlock, so throw a standard - // OMG exception. - if (wait_for_completion && ((Boolean)isProcessingInvocation.get()).booleanValue()) { - throw omgWrapper.shutdownWaitForCompletionDeadlock() ; - } - - boolean doShutdown = false ; + public void shutdown(boolean wait_for_completion) { + boolean wait = false; synchronized (this) { - checkShutdownState() ; + checkShutdownState(); + + // This is to avoid deadlock: don't allow a thread that is + // processing a request to call shutdown( true ), because + // the shutdown would block waiting for the request to complete, + // while the request would block waiting for shutdown to complete. + if (wait_for_completion && + isProcessingInvocation.get() == Boolean.TRUE) { + throw omgWrapper.shutdownWaitForCompletionDeadlock(); + } if (status == STATUS_SHUTTING_DOWN) { - if (!wait_for_completion) - // If we are already shutting down and don't want - // to wait, nothing to do: return. - return ; - } else { - // The ORB status was STATUS_OPERATING, so start the shutdown. - status = STATUS_SHUTTING_DOWN ; - doShutdown = true ; + if (wait_for_completion) { + wait = true; + } else { + return; + } } + + status = STATUS_SHUTTING_DOWN; } - // At this point, status is SHUTTING_DOWN. - // All shutdown calls with wait_for_completion == true must synchronize - // here. Only the first call will be made with doShutdown == true. + // Avoid more than one thread performing shutdown at a time. synchronized (shutdownObj) { - if (doShutdown) { - // shutdownServants will set all POAManagers into the - // INACTIVE state, causing request to be rejected. - // If wait_for_completion is true, this will not return until - // all invocations have completed. + // At this point, the ORB status is certainly STATUS_SHUTTING_DOWN. + // If wait is true, another thread already called shutdown( true ), + // and so we wait for completion + if (wait) { + while (true) { + synchronized (this) { + if (status == STATUS_SHUTDOWN) + break; + } + + try { + shutdownObj.wait(); + } catch (InterruptedException exc) { + // NOP: just loop and wait until state is changed + } + } + } else { + // perform the actual shutdown shutdownServants(wait_for_completion); + if (wait_for_completion) { + synchronized ( waitForCompletionObj ) { + while (numInvocations > 0) { + try { + waitForCompletionObj.wait(); + } catch (InterruptedException ex) {} + } + } + } + synchronized (runObj) { runObj.notifyAll(); } - synchronized (this) { - status = STATUS_SHUTDOWN; - } + status = STATUS_SHUTDOWN; + + shutdownObj.notifyAll(); } } } - /** This method shuts down the ORB and causes orb.run() to return. - * It will cause all POAManagers to be deactivated, which in turn - * will cause all POAs to be deactivated. - */ + // Cause all ObjectAdapaterFactories to clean up all of their internal state, which + // may include activated objects that have associated state and callbacks that must + // complete in order to shutdown. This will cause new request to be rejected. protected void shutdownServants(boolean wait_for_completion) { - Iterator iter = requestDispatcherRegistry.getObjectAdapterFactories().iterator() ; - while (iter.hasNext()) { - ObjectAdapterFactory oaf = (ObjectAdapterFactory)iter.next() ; - oaf.shutdown( wait_for_completion ) ; + Set oaset; + synchronized (this) { + oaset = new HashSet<>(requestDispatcherRegistry.getObjectAdapterFactories()); } + + for (ObjectAdapterFactory oaf : oaset) + oaf.shutdown(wait_for_completion); } - // REVISIT: was protected - made public for framework // Note that the caller must hold the ORBImpl lock. public void checkShutdownState() { @@ -1327,21 +1337,40 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public boolean isDuringDispatch() { + synchronized (this) { + checkShutdownState(); + } Boolean value = (Boolean)(isProcessingInvocation.get()) ; return value.booleanValue() ; } public void startingDispatch() { + synchronized (this) { + checkShutdownState(); + } synchronized (invocationObj) { isProcessingInvocation.set(Boolean.TRUE); + numInvocations++; } } public void finishedDispatch() { + synchronized (this) { + checkShutdownState(); + } synchronized (invocationObj) { - isProcessingInvocation.set(Boolean.FALSE); + numInvocations--; + isProcessingInvocation.set(false); + if (numInvocations == 0) { + synchronized (waitForCompletionObj) { + waitForCompletionObj.notifyAll(); + } + } else if (numInvocations < 0) { + throw wrapper.numInvocationsAlreadyZero( + CompletionStatus.COMPLETED_YES); + } } } @@ -1350,12 +1379,12 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB * not been shut down, it will start the shutdown process and block until * the ORB has shut down before it destroys the ORB." */ - public synchronized void destroy() + public void destroy() { - boolean shutdownFirst = false ; + boolean shutdownFirst = false; synchronized (this) { - shutdownFirst = (status == STATUS_OPERATING) ; + shutdownFirst = (status == STATUS_OPERATING); } if (shutdownFirst) { @@ -1365,11 +1394,76 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB synchronized (this) { if (status < STATUS_DESTROYED) { getCorbaTransportManager().close(); - getPIHandler().destroyInterceptors() ; + getPIHandler().destroyInterceptors(); status = STATUS_DESTROYED; } } + synchronized (threadPoolManagerAccessLock) { + if (orbOwnsThreadPoolManager) { + try { + threadpoolMgr.close(); + threadpoolMgr = null; + } catch (IOException exc) { + wrapper.ioExceptionOnClose(exc); + } + } + } + try { + monitoringManager.close(); + monitoringManager = null; + } catch (IOException exc) { + wrapper.ioExceptionOnClose(exc); + } + + CachedCodeBase.cleanCache(this); + try { + pihandler.close(); + } catch (IOException exc) { + wrapper.ioExceptionOnClose(exc); + } + + super.destroy(); + + badServerIdHandlerAccessLock = null; + clientDelegateFactoryAccessorLock = null; + corbaContactInfoListFactoryAccessLock = null; + + objectKeyFactoryAccessLock = null; + legacyServerSocketManagerAccessLock = null; + threadPoolManagerAccessLock = null; + transportManager = null; + legacyServerSocketManager = null; + OAInvocationInfoStack = null; + clientInvocationInfoStack = null; + codeBaseIOR = null; + dynamicRequests = null; + svResponseReceived = null; + runObj = null; + shutdownObj = null; + waitForCompletionObj = null; + invocationObj = null; + isProcessingInvocation = null; + typeCodeForClassMap = null; + valueFactoryCache = null; + orbVersionThreadLocal = null; + requestDispatcherRegistry = null; + copierManager = null; + toaFactory = null; + poaFactory = null; + pihandler = null; + configData = null; + badServerIdHandler = null; + clientDelegateFactory = null; + corbaContactInfoListFactory = null; + resolver = null; + localResolver = null; + insNamingDelegate = null; + urlOperation = null; + taggedComponentFactoryFinder = null; + taggedProfileFactoryFinder = null; + taggedProfileTemplateFactoryFinder = null; + objectKeyFactory = null; } /** @@ -1434,18 +1528,27 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public OAInvocationInfo peekInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ; return (OAInvocationInfo)(stack.peek()) ; } public void pushInvocationInfo( OAInvocationInfo info ) { + synchronized (this) { + checkShutdownState(); + } StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ; stack.push( info ) ; } public OAInvocationInfo popInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ; return (OAInvocationInfo)(stack.pop()) ; } @@ -1459,6 +1562,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void initBadServerIdHandler() { + synchronized (this) { + checkShutdownState(); + } synchronized (badServerIdHandlerAccessLock) { Class cls = configData.getBadServerIdHandler() ; if (cls != null) { @@ -1477,6 +1583,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setBadServerIdHandler( BadServerIdHandler handler ) { + synchronized (this) { + checkShutdownState(); + } synchronized (badServerIdHandlerAccessLock) { badServerIdHandler = handler; } @@ -1484,6 +1593,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void handleBadServerId( ObjectKey okey ) { + synchronized (this) { + checkShutdownState(); + } synchronized (badServerIdHandlerAccessLock) { if (badServerIdHandler == null) throw wrapper.badServerId() ; @@ -1532,6 +1644,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public int getTransientServerId() { + synchronized (this) { + checkShutdownState(); + } if( configData.getORBServerIdPropertySpecified( ) ) { // ORBServerId is specified then use that value return configData.getPersistentServerId( ); @@ -1541,11 +1656,17 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public RequestDispatcherRegistry getRequestDispatcherRegistry() { + synchronized (this) { + checkShutdownState(); + } return requestDispatcherRegistry; } public ServiceContextRegistry getServiceContextRegistry() { + synchronized (this) { + checkShutdownState(); + } return serviceContextRegistry ; } @@ -1563,12 +1684,18 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // XXX What about multi-homed host? public boolean isLocalHost( String hostName ) { + synchronized (this) { + checkShutdownState(); + } return hostName.equals( configData.getORBServerHost() ) || hostName.equals( getLocalHostName() ) ; } public boolean isLocalServerId( int subcontractId, int serverId ) { + synchronized (this) { + checkShutdownState(); + } if ((subcontractId < ORBConstants.FIRST_POA_SCID) || (subcontractId > ORBConstants.MAX_POA_SCID)) return serverId == getTransientServerId( ) ; @@ -1659,6 +1786,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ClientInvocationInfo createOrIncrementInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl invocationInfoStack = (StackImpl) clientInvocationInfoStack.get(); ClientInvocationInfo clientInvocationInfo = null; @@ -1682,10 +1812,13 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void releaseOrDecrementInvocationInfo() { - StackImpl invocationInfoStack = - (StackImpl)clientInvocationInfoStack.get(); + synchronized (this) { + checkShutdownState(); + } int entryCount = -1; ClientInvocationInfo clientInvocationInfo = null; + StackImpl invocationInfoStack = + (StackImpl)clientInvocationInfoStack.get(); if (!invocationInfoStack.empty()) { clientInvocationInfo = (ClientInvocationInfo)invocationInfoStack.peek(); @@ -1705,6 +1838,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ClientInvocationInfo getInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl invocationInfoStack = (StackImpl) clientInvocationInfoStack.get(); return (ClientInvocationInfo) invocationInfoStack.peek(); @@ -1719,6 +1855,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setClientDelegateFactory( ClientDelegateFactory factory ) { + synchronized (this) { + checkShutdownState(); + } synchronized (clientDelegateFactoryAccessorLock) { clientDelegateFactory = factory ; } @@ -1726,6 +1865,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ClientDelegateFactory getClientDelegateFactory() { + synchronized (this) { + checkShutdownState(); + } synchronized (clientDelegateFactoryAccessorLock) { return clientDelegateFactory ; } @@ -1735,6 +1877,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setCorbaContactInfoListFactory( CorbaContactInfoListFactory factory ) { + synchronized (this) { + checkShutdownState(); + } synchronized (corbaContactInfoListFactoryAccessLock) { corbaContactInfoListFactory = factory ; } @@ -1742,6 +1887,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public synchronized CorbaContactInfoListFactory getCorbaContactInfoListFactory() { + checkShutdownState(); return corbaContactInfoListFactory ; } @@ -1750,6 +1896,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void setResolver( Resolver resolver ) { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { this.resolver = resolver ; } @@ -1760,6 +1909,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public Resolver getResolver() { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { return resolver ; } @@ -1770,6 +1922,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void setLocalResolver( LocalResolver resolver ) { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { this.localResolver = resolver ; } @@ -1780,6 +1935,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public LocalResolver getLocalResolver() { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { return localResolver ; } @@ -1790,6 +1948,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void setURLOperation( Operation stringToObject ) { + synchronized (this) { + checkShutdownState(); + } synchronized (urlOperationLock) { urlOperation = stringToObject ; } @@ -1800,6 +1961,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public Operation getURLOperation() { + synchronized (this) { + checkShutdownState(); + } synchronized (urlOperationLock) { return urlOperation ; } @@ -1807,6 +1971,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setINSDelegate( CorbaServerRequestDispatcher sdel ) { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { insNamingDelegate = sdel ; } @@ -1814,16 +1981,25 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public TaggedComponentFactoryFinder getTaggedComponentFactoryFinder() { + synchronized (this) { + checkShutdownState(); + } return taggedComponentFactoryFinder ; } public IdentifiableFactoryFinder getTaggedProfileFactoryFinder() { + synchronized (this) { + checkShutdownState(); + } return taggedProfileFactoryFinder ; } public IdentifiableFactoryFinder getTaggedProfileTemplateFactoryFinder() { + synchronized (this) { + checkShutdownState(); + } return taggedProfileTemplateFactoryFinder ; } @@ -1831,6 +2007,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ObjectKeyFactory getObjectKeyFactory() { + synchronized (this) { + checkShutdownState(); + } synchronized (objectKeyFactoryAccessLock) { return objectKeyFactory ; } @@ -1838,6 +2017,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setObjectKeyFactory( ObjectKeyFactory factory ) { + synchronized (this) { + checkShutdownState(); + } synchronized (objectKeyFactoryAccessLock) { objectKeyFactory = factory ; } @@ -1864,6 +2046,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public LegacyServerSocketManager getLegacyServerSocketManager() { + synchronized (this) { + checkShutdownState(); + } synchronized (legacyServerSocketManagerAccessLock) { if (legacyServerSocketManager == null) { legacyServerSocketManager = new LegacyServerSocketManagerImpl(this); @@ -1876,6 +2061,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setThreadPoolManager(ThreadPoolManager mgr) { + synchronized (this) { + checkShutdownState(); + } synchronized (threadPoolManagerAccessLock) { threadpoolMgr = mgr; } @@ -1883,9 +2071,13 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ThreadPoolManager getThreadPoolManager() { + synchronized (this) { + checkShutdownState(); + } synchronized (threadPoolManagerAccessLock) { if (threadpoolMgr == null) { - threadpoolMgr = new ThreadPoolManagerImpl( threadGroup ); + threadpoolMgr = new ThreadPoolManagerImpl(); + orbOwnsThreadPoolManager = true; } return threadpoolMgr; } @@ -1893,6 +2085,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public CopierManager getCopierManager() { + synchronized (this) { + checkShutdownState(); + } return copierManager ; } } // Class ORBImpl diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java index f8341f84b0c..f98880bf68d 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -25,6 +25,18 @@ package com.sun.corba.se.impl.orbutil.threadpool; +import java.io.IOException; +import java.io.Closeable; + +import java.security.AccessController; +import java.security.PrivilegedAction; + +import java.util.List; +import java.util.ArrayList; + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + import com.sun.corba.se.spi.orbutil.threadpool.NoSuchWorkQueueException; import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool; import com.sun.corba.se.spi.orbutil.threadpool.Work; @@ -36,12 +48,27 @@ import com.sun.corba.se.impl.orbutil.threadpool.WorkQueueImpl; import com.sun.corba.se.spi.monitoring.MonitoringConstants; import com.sun.corba.se.spi.monitoring.MonitoredObject; import com.sun.corba.se.spi.monitoring.MonitoringFactories; +import com.sun.corba.se.spi.orb.ORB; import com.sun.corba.se.spi.monitoring.LongMonitoredAttributeBase; +import com.sun.corba.se.impl.logging.ORBUtilSystemException; +import com.sun.corba.se.impl.orbutil.ORBConstants; +import com.sun.corba.se.spi.logging.CORBALogDomains; + public class ThreadPoolImpl implements ThreadPool { - private static int threadCounter = 0; // serial counter useful for debugging + // serial counter useful for debugging + private static AtomicInteger threadCounter = new AtomicInteger(0); + private static final ORBUtilSystemException wrapper = + ORBUtilSystemException.get(CORBALogDomains.RPC_TRANSPORT); + + // Any time currentThreadCount and/or availableWorkerThreads is updated + // or accessed this ThreadPool's WorkQueue must be locked. And, it is + // expected that this ThreadPool's WorkQueue is the only object that + // updates and accesses these values directly and indirectly though a + // call to a method in this ThreadPool. If any call to update or access + // those values must synchronized on this ThreadPool's WorkQueue. private WorkQueue workQueue; // Stores the number of available worker threads @@ -65,14 +92,11 @@ public class ThreadPoolImpl implements ThreadPool // Running count of the work items processed // Set the value to 1 so that divide by zero is avoided in // averageWorkCompletionTime() - private long processedCount = 1; + private AtomicLong processedCount = new AtomicLong(1); // Running aggregate of the time taken in millis to execute work items // processed by the threads in the threadpool - private long totalTimeTaken = 0; - - // Lock for protecting state when required - private Object lock = new Object(); + private AtomicLong totalTimeTaken = new AtomicLong(0); // Name of the ThreadPool private String name; @@ -81,7 +105,10 @@ public class ThreadPoolImpl implements ThreadPool private MonitoredObject threadpoolMonitoredObject; // ThreadGroup in which threads should be created - private ThreadGroup threadGroup ; + private ThreadGroup threadGroup; + + Object workersLock = new Object(); + List workers = new ArrayList<>(); /** * This constructor is used to create an unbounded threadpool @@ -90,7 +117,7 @@ public class ThreadPoolImpl implements ThreadPool inactivityTimeout = ORBConstants.DEFAULT_INACTIVITY_TIMEOUT; maxWorkerThreads = Integer.MAX_VALUE; workQueue = new WorkQueueImpl(this); - threadGroup = tg ; + threadGroup = tg; name = threadpoolName; initializeMonitoring(); } @@ -121,6 +148,30 @@ public class ThreadPoolImpl implements ThreadPool initializeMonitoring(); } + // Note that this method should not return until AFTER all threads have died. + public void close() throws IOException { + + // Copy to avoid concurrent modification problems. + List copy = null; + synchronized (workersLock) { + copy = new ArrayList<>(workers); + } + + for (WorkerThread wt : copy) { + wt.close(); + while (wt.getState() != Thread.State.TERMINATED) { + try { + wt.join(); + } catch (InterruptedException exc) { + wrapper.interruptedJoinCallWhileClosingThreadPool(exc, wt, this); + } + } + } + + threadGroup = null; + } + + // Setup monitoring for this threadpool private void initializeMonitoring() { // Get root monitored object @@ -217,8 +268,8 @@ public class ThreadPoolImpl implements ThreadPool * or notify waiting threads on the queue for available work */ void notifyForAvailableWork(WorkQueue aWorkQueue) { - synchronized (lock) { - if (availableWorkerThreads == 0) { + synchronized (aWorkQueue) { + if (availableWorkerThreads < aWorkQueue.workItemsInQueue()) { createWorkerThread(); } else { aWorkQueue.notify(); @@ -227,120 +278,145 @@ public class ThreadPoolImpl implements ThreadPool } - /** - * To be called from the workqueue to create worker threads when none - * available. - */ - void createWorkerThread() { - WorkerThread thread; - - synchronized (lock) { - if (boundedThreadPool) { - if (currentThreadCount < maxWorkerThreads) { - thread = new WorkerThread(threadGroup, getName()); - currentThreadCount++; - } else { - // REVIST - Need to create a thread to monitor the - // the state for deadlock i.e. all threads waiting for - // something which can be got from the item in the - // workqueue, but there is no thread available to - // process that work item - DEADLOCK !! - return; - } - } else { - thread = new WorkerThread(threadGroup, getName()); - currentThreadCount++; - } + private Thread createWorkerThreadHelper( String name ) { + // Thread creation needs to be in a doPrivileged block + // if there is a non-null security manager for two reasons: + // 1. The creation of a thread in a specific ThreadGroup + // is a privileged operation. Lack of a doPrivileged + // block here causes an AccessControlException + // (see bug 6268145). + // 2. We want to make sure that the permissions associated + // with this thread do NOT include the permissions of + // the current thread that is calling this method. + // This leads to problems in the app server where + // some threads in the ThreadPool randomly get + // bad permissions, leading to unpredictable + // permission errors (see bug 6021011). + // + // A Java thread contains a stack of call frames, + // one for each method called that has not yet returned. + // Each method comes from a particular class. The class + // was loaded by a ClassLoader which has an associated + // CodeSource, and this determines the Permissions + // for all methods in that class. The current + // Permissions for the thread are the intersection of + // all Permissions for the methods on the stack. + // This is part of the Security Context of the thread. + // + // When a thread creates a new thread, the new thread + // inherits the security context of the old thread. + // This is bad in a ThreadPool, because different + // creators of threads may have different security contexts. + // This leads to occasional unpredictable errors when + // a thread is re-used in a different security context. + // + // Avoiding this problem is simple: just do the thread + // creation in a doPrivileged block. This sets the + // inherited security context to that of the code source + // for the ORB code itself, which contains all permissions + // in either Java SE or Java EE. + WorkerThread thread = new WorkerThread(threadGroup, name); + synchronized (workersLock) { + workers.add(thread); } // The thread must be set to a daemon thread so the // VM can exit if the only threads left are PooledThreads // or other daemons. We don't want to rely on the // calling thread always being a daemon. + // Note that no exception is possible here since we + // are inside the doPrivileged block. + thread.setDaemon(true); - // Catch exceptions since setDaemon can cause a - // security exception to be thrown under netscape - // in the Applet mode - try { - thread.setDaemon(true); - } catch (Exception e) { - // REVISIT - need to do some logging here - } + wrapper.workerThreadCreated(thread, thread.getContextClassLoader()); thread.start(); + return null; } + /** - * This method will return the minimum number of threads maintained - * by the threadpool. - */ + * To be called from the workqueue to create worker threads when none + * available. + */ + void createWorkerThread() { + final String name = getName(); + synchronized (workQueue) { + try { + if (System.getSecurityManager() == null) { + createWorkerThreadHelper(name); + } else { + // If we get here, we need to create a thread. + AccessController.doPrivileged( + new PrivilegedAction() { + public Object run() { + return createWorkerThreadHelper(name); + } + } + ); + } + } catch (Throwable t) { + // Decrementing the count of current worker threads. + // But, it will be increased in the finally block. + decrementCurrentNumberOfThreads(); + wrapper.workerThreadCreationFailure(t); + } finally { + incrementCurrentNumberOfThreads(); + } + } + } + public int minimumNumberOfThreads() { return minWorkerThreads; } - /** - * This method will return the maximum number of threads in the - * threadpool at any point in time, for the life of the threadpool - */ public int maximumNumberOfThreads() { return maxWorkerThreads; } - /** - * This method will return the time in milliseconds when idle - * threads in the threadpool are removed. - */ public long idleTimeoutForThreads() { return inactivityTimeout; } - /** - * This method will return the total number of threads currently in the - * threadpool. This method returns a value which is not synchronized. - */ public int currentNumberOfThreads() { - synchronized (lock) { + synchronized (workQueue) { return currentThreadCount; } } - /** - * This method will return the number of available threads in the - * threadpool which are waiting for work. This method returns a - * value which is not synchronized. - */ + void decrementCurrentNumberOfThreads() { + synchronized (workQueue) { + currentThreadCount--; + } + } + + void incrementCurrentNumberOfThreads() { + synchronized (workQueue) { + currentThreadCount++; + } + } + public int numberOfAvailableThreads() { - synchronized (lock) { + synchronized (workQueue) { return availableWorkerThreads; } } - /** - * This method will return the number of busy threads in the threadpool - * This method returns a value which is not synchronized. - */ public int numberOfBusyThreads() { - synchronized (lock) { + synchronized (workQueue) { return (currentThreadCount - availableWorkerThreads); } } - /** - * This method returns the average elapsed time taken to complete a Work - * item in milliseconds. - */ public long averageWorkCompletionTime() { - synchronized (lock) { - return (totalTimeTaken / processedCount); + synchronized (workQueue) { + return (totalTimeTaken.get() / processedCount.get()); } } - /** - * This method returns the number of Work items processed by the threadpool - */ public long currentProcessedCount() { - synchronized (lock) { - return processedCount; + synchronized (workQueue) { + return processedCount.get(); } } @@ -357,15 +433,37 @@ public class ThreadPoolImpl implements ThreadPool private static synchronized int getUniqueThreadId() { - return ThreadPoolImpl.threadCounter++; + return ThreadPoolImpl.threadCounter.incrementAndGet(); + } + + /** + * This method will decrement the number of available threads + * in the threadpool which are waiting for work. Called from + * WorkQueueImpl.requestWork() + */ + void decrementNumberOfAvailableThreads() { + synchronized (workQueue) { + availableWorkerThreads--; + } + } + + /** + * This method will increment the number of available threads + * in the threadpool which are waiting for work. Called from + * WorkQueueImpl.requestWork() + */ + void incrementNumberOfAvailableThreads() { + synchronized (workQueue) { + availableWorkerThreads++; + } } - private class WorkerThread extends Thread + private class WorkerThread extends Thread implements Closeable { private Work currentWork; private int threadId = 0; // unique id for the thread - // thread pool this WorkerThread belongs too + private volatile boolean closeCalled = false; private String threadPoolName; // name seen by Thread.getName() private StringBuffer workerThreadName = new StringBuffer(); @@ -377,100 +475,61 @@ public class ThreadPoolImpl implements ThreadPool setName(composeWorkerThreadName(threadPoolName, "Idle")); } + public synchronized void close() { + closeCalled = true; + interrupt(); + } + + private void resetClassLoader() { + + } + + private void performWork() { + long start = System.currentTimeMillis(); + try { + currentWork.doWork(); + } catch (Throwable t) { + wrapper.workerThreadDoWorkThrowable(this, t); + } + long elapsedTime = System.currentTimeMillis() - start; + totalTimeTaken.addAndGet(elapsedTime); + processedCount.incrementAndGet(); + } + public void run() { - while (true) { - try { - - synchronized (lock) { - availableWorkerThreads++; - } - - // Get some work to do - currentWork = ((WorkQueueImpl)workQueue).requestWork(inactivityTimeout); - - synchronized (lock) { - availableWorkerThreads--; - // It is possible in notifyForAvailableWork that the - // check for availableWorkerThreads = 0 may return - // false, because the availableWorkerThreads has not been - // decremented to zero before the producer thread added - // work to the queue. This may create a deadlock, if the - // executing thread needs information which is in the work - // item queued in the workqueue, but has no thread to work - // on it since none was created because availableWorkerThreads = 0 - // returned false. - // The following code will ensure that a thread is always available - // in those situations - if ((availableWorkerThreads == 0) && - (workQueue.workItemsInQueue() > 0)) { - createWorkerThread(); - } - } - - // Set the thread name for debugging. - setName(composeWorkerThreadName(threadPoolName, - Integer.toString(this.threadId))); - - long start = System.currentTimeMillis(); - + try { + while (!closeCalled) { try { - // Do the work - currentWork.doWork(); + currentWork = ((WorkQueueImpl)workQueue).requestWork( + inactivityTimeout); + if (currentWork == null) + continue; + } catch (InterruptedException exc) { + wrapper.workQueueThreadInterrupted( exc, getName(), + Boolean.valueOf(closeCalled)); + + continue ; } catch (Throwable t) { - // Ignore all errors. - ; + wrapper.workerThreadThrowableFromRequestWork(this, t, + workQueue.getName()); + + continue; } - long end = System.currentTimeMillis(); - - - synchronized (lock) { - totalTimeTaken += (end - start); - processedCount++; - } + performWork(); // set currentWork to null so that the work item can be - // garbage collected + // garbage collected without waiting for the next work item. currentWork = null; - setName(composeWorkerThreadName(threadPoolName, "Idle")); - - } catch (TimeoutException e) { - // This thread timed out waiting for something to do. - - synchronized (lock) { - availableWorkerThreads--; - - // This should for both bounded and unbounded case - if (currentThreadCount > minWorkerThreads) { - currentThreadCount--; - // This thread can exit. - return; - } else { - // Go back to waiting on workQueue - continue; - } - } - } catch (InterruptedException ie) { - // InterruptedExceptions are - // caught here. Thus, threads can be forced out of - // requestWork and so they have to reacquire the lock. - // Other options include ignoring or - // letting this thread die. - // Ignoring for now. REVISIT - synchronized (lock) { - availableWorkerThreads--; - } - - } catch (Throwable e) { - - // Ignore any exceptions that currentWork.process - // accidently lets through, but let Errors pass. - // Add debugging output? REVISIT - synchronized (lock) { - availableWorkerThreads--; - } - + resetClassLoader(); + } + } catch (Throwable e) { + // This should not be possible + wrapper.workerThreadCaughtUnexpectedThrowable(this,e); + } finally { + synchronized (workersLock) { + workers.remove(this); } } } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java index 43573fda6ee..40214e816d6 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -25,6 +25,15 @@ package com.sun.corba.se.impl.orbutil.threadpool; +import java.io.IOException; + +import java.security.PrivilegedAction; +import java.security.AccessController; + +import java.util.concurrent.atomic.AtomicInteger; + +import com.sun.corba.se.spi.orb.ORB; + import com.sun.corba.se.spi.orbutil.threadpool.NoSuchThreadPoolException; import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool; import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolManager; @@ -33,21 +42,102 @@ import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolChooser; import com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl; import com.sun.corba.se.impl.orbutil.ORBConstants; +import com.sun.corba.se.impl.logging.ORBUtilSystemException; +import com.sun.corba.se.impl.orbutil.ORBConstants; +import com.sun.corba.se.spi.logging.CORBALogDomains; + + public class ThreadPoolManagerImpl implements ThreadPoolManager { - private ThreadPool threadPool ; + private ThreadPool threadPool; + private ThreadGroup threadGroup; - public ThreadPoolManagerImpl( ThreadGroup tg ) - { - // Use unbounded threadpool in J2SE ORB - // ThreadPoolManager from s1as appserver code base can be set in the - // ORB. ThreadPools in the appserver are bounded. In that situation - // the ThreadPool in this ThreadPoolManager will have its threads - // die after the idle timeout. - // XXX Should there be cleanup when ORB.shutdown is called if the - // ORB owns the ThreadPool? - threadPool = new ThreadPoolImpl( tg, - ORBConstants.THREADPOOL_DEFAULT_NAME ) ; + private static final ORBUtilSystemException wrapper = + ORBUtilSystemException.get(CORBALogDomains.RPC_TRANSPORT); + + public ThreadPoolManagerImpl() { + threadGroup = getThreadGroup(); + threadPool = new ThreadPoolImpl(threadGroup, + ORBConstants.THREADPOOL_DEFAULT_NAME); + } + + private static AtomicInteger tgCount = new AtomicInteger(); + + + private ThreadGroup getThreadGroup() { + ThreadGroup tg; + + // See bugs 4916766 and 4936203 + // We intend to create new threads in a reliable thread group. + // This avoids problems if the application/applet + // creates a thread group, makes JavaIDL calls which create a new + // connection and ReaderThread, and then destroys the thread + // group. If our ReaderThreads were to be part of such destroyed thread + // group then it might get killed and cause other invoking threads + // sharing the same connection to get a non-restartable + // CommunicationFailure. We'd like to avoid that. + // + // Our solution is to create all of our threads in the highest thread + // group that we have access to, given our own security clearance. + // + try { + // try to get a thread group that's as high in the threadgroup + // parent-child hierarchy, as we can get to. + // this will prevent an ORB thread created during applet-init from + // being killed when an applet dies. + tg = AccessController.doPrivileged( + new PrivilegedAction() { + public ThreadGroup run() { + ThreadGroup tg = Thread.currentThread().getThreadGroup(); + ThreadGroup ptg = tg; + try { + while (ptg != null) { + tg = ptg; + ptg = tg.getParent(); + } + } catch (SecurityException se) { + // Discontinue going higher on a security exception. + } + return new ThreadGroup(tg, "ORB ThreadGroup " + tgCount.getAndIncrement()); + } + } + ); + } catch (SecurityException e) { + // something wrong, we go back to the original code + tg = Thread.currentThread().getThreadGroup(); + } + + return tg; + } + + public void close() { + try { + threadPool.close(); + } catch (IOException exc) { + wrapper.threadPoolCloseError(); + } + + try { + boolean isDestroyed = threadGroup.isDestroyed(); + int numThreads = threadGroup.activeCount(); + int numGroups = threadGroup.activeGroupCount(); + + if (isDestroyed) { + wrapper.threadGroupIsDestroyed(threadGroup); + } else { + if (numThreads > 0) + wrapper.threadGroupHasActiveThreadsInClose(threadGroup, numThreads); + + if (numGroups > 0) + wrapper.threadGroupHasSubGroupsInClose(threadGroup, numGroups); + + threadGroup.destroy(); + } + } catch (IllegalThreadStateException exc) { + wrapper.threadGroupDestroyFailed(exc, threadGroup); + } + + threadGroup = null; } /** diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java index 022f2e0c93b..6e2320eeade 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -111,24 +111,23 @@ public class WorkQueueImpl implements WorkQueue return workqueueMonitoredObject; } - public void addWork(Work work) { - synchronized (this) { + public synchronized void addWork(Work work) { workItemsAdded++; work.setEnqueueTime(System.currentTimeMillis()); theWorkQueue.addLast(work); ((ThreadPoolImpl)workerThreadPool).notifyForAvailableWork(this); - } } - Work requestWork(long waitTime) - throws TimeoutException, InterruptedException + synchronized Work requestWork(long waitTime) throws TimeoutException, InterruptedException { Work workItem; - synchronized (this) { + ((ThreadPoolImpl)workerThreadPool).incrementNumberOfAvailableThreads(); + if (theWorkQueue.size() != 0) { workItem = (Work)theWorkQueue.removeFirst(); totalTimeInQueue += System.currentTimeMillis() - workItem.getEnqueueTime(); workItemsDequeued++; + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); return workItem; } @@ -145,6 +144,7 @@ public class WorkQueueImpl implements WorkQueue workItem = (Work)theWorkQueue.removeFirst(); totalTimeInQueue += System.currentTimeMillis() - workItem.getEnqueueTime(); workItemsDequeued++; + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); return workItem; } @@ -152,12 +152,13 @@ public class WorkQueueImpl implements WorkQueue } while (remainingWaitTime > 0); + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); throw new TimeoutException(); } catch (InterruptedException ie) { + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); throw ie; } - } } public void setThreadPool(ThreadPool workerThreadPool) { diff --git a/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java index 038acdb132b..a5ee15ba763 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, 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 @@ -1666,7 +1666,9 @@ public class CorbaMessageMediatorImpl ((CDRInputObject)messageMediator.getInputObject()).unmarshalHeader(); ORB orb = (ORB)messageMediator.getBroker(); - orb.checkShutdownState(); + synchronized (orb) { + orb.checkShutdownState(); + } ObjectKey okey = messageMediator.getObjectKey(); if (orb.subcontractDebugFlag) { diff --git a/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java index 1c60088a7a3..7bd98805ab7 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -69,8 +69,8 @@ public class SelectorImpl private HashMap listenerThreads; private Map readerThreads; private boolean selectorStarted; - private boolean closed; - private ORBUtilSystemException wrapper ; + private volatile boolean closed; + private ORBUtilSystemException wrapper; public SelectorImpl(ORB orb) diff --git a/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc b/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc index e82f724642d..da1ab4de948 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc +++ b/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc @@ -1,6 +1,6 @@ ; -; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. +; Copyright (c) 2003, 2012, 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 @@ -62,6 +62,7 @@ (IS_LOCAL_REQUIRES_STUB 43 WARNING "Call to StubAdapter.isLocal did not pass a stub") (REQUEST_REQUIRES_STUB 44 WARNING "Call to StubAdapter.request did not pass a stub") (BAD_ACTIVATE_TIE_CALL 45 WARNING "Call to StubAdapter.activateTie did not pass a valid Tie") + (IO_EXCEPTION_ON_CLOSE 46 FINE "Useless exception on call to Closeable.close()") ) (BAD_PARAM (NULL_PARAM 1 WARNING "Null parameter") @@ -291,7 +292,31 @@ (JAVA_STREAM_INIT_FAILED 95 WARNING "Java stream initialization failed") (DUPLICATE_ORB_VERSION_SERVICE_CONTEXT 96 WARNING "An ORBVersionServiceContext was already in the service context list") (DUPLICATE_SENDING_CONTEXT_SERVICE_CONTEXT 97 WARNING "A SendingContextServiceContext was already in the service context list") + (WORK_QUEUE_THREAD_INTERRUPTED 98 FINE "Worker Thread from thread pool {0} was interrupted: closeCalled is {1}.") + (WORKER_THREAD_CREATED + 104 FINE "Worker thread {0} has been created with ClassLoader {1}") + (WORKER_THREAD_THROWABLE_FROM_REQUEST_WORK + 109 FINE "Worker thread {0} caught throwable {1} when requesting work from work queue {2}.") + (WORKER_THREAD_NOT_NEEDED + 110 FINE "Worker thread {0} will exit; current thread count, {1}, greater than minunum worker threads needed, {2}.") + (WORKER_THREAD_DO_WORK_THROWABLE + 111 FINE "Worker thread {0} caught throwable {1} while executing work.") + (WORKER_THREAD_CAUGHT_UNEXPECTED_THROWABLE + 112 WARNING "Worker thread {0} caught unexpected throwable {1}.") + (WORKER_THREAD_CREATION_FAILURE + 113 SEVERE "Worker thread creation failure; cause {0}.") + (WORKER_THREAD_SET_NAME_FAILURE + 114 WARNING "Unable to set worker thread {0} name to {1}; cause {2}.") + (WORK_QUEUE_REQUEST_WORK_NO_WORK_FOUND + 116 WARNING "Ignoring unexpected {0} when retrieving of work from work queue, {1}.") + (THREAD_POOL_CLOSE_ERROR 126 WARNING "Error in closing ThreadPool") + (THREAD_GROUP_IS_DESTROYED 127 WARNING "ThreadGroup {0} is already destroyed: can't destroy it") + (THREAD_GROUP_HAS_ACTIVE_THREADS_IN_CLOSE 128 WARNING "ThreadGroup {0} has {1} active threads: destroy may cause exception") + (THREAD_GROUP_HAS_SUB_GROUPS_IN_CLOSE 129 WARNING "ThreadGroup {0} has {1} sub-thread groups: destroy may cause exception") + (THREAD_GROUP_DESTROY_FAILED 130 WARNING "ThreadGroup {0} could not be destroyed") + (INTERRUPTED_JOIN_CALL_WHILE_CLOSING_THREAD_POOL 131 WARNING "Join was interrupted on thread {0} while closing ThreadPool {1}") ) + (MARSHAL (CHUNK_OVERFLOW 1 WARNING "Data read past end of chunk without closing the chunk") (UNEXPECTED_EOF 2 WARNING "Grow buffer strategy called underflow handler") diff --git a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java index 2f5ce1e5343..1a7e6b61f80 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -24,6 +24,7 @@ */ package com.sun.corba.se.spi.monitoring; +import java.io.Closeable; import com.sun.corba.se.spi.orb.ORB; import com.sun.corba.se.spi.monitoring.MonitoredObject; import java.util.*; @@ -39,7 +40,7 @@ import java.util.*; * @author Hemanth Puttaswamy *

*/ -public interface MonitoringManager { +public interface MonitoringManager extends Closeable { /////////////////////////////////////// // operations diff --git a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java index a23dfc3d0d6..88b6238ff53 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -40,4 +40,6 @@ public interface MonitoringManagerFactory { */ MonitoringManager createMonitoringManager( String nameOfTheRoot, String description ); + + void remove(String nameOfTheRoot); } diff --git a/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java b/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java index 0fad97f78ba..22b89e73f22 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, 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 @@ -171,7 +171,7 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB private static Map staticWrapperMap = new ConcurrentHashMap(); - private MonitoringManager monitoringManager; + protected MonitoringManager monitoringManager; // There is only one instance of the PresentationManager // that is shared between all ORBs. This is necessary @@ -226,6 +226,14 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB globalPM.setStubFactoryFactory( true, dynamicStubFactoryFactory ) ; } + public void destroy() { + wrapper = null; + omgWrapper = null; + typeCodeMap = null; + primitiveTypeCodeConstants = null; + byteBufferPool = null; + } + /** Get the single instance of the PresentationManager */ public static PresentationManager getPresentationManager() @@ -302,6 +310,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB // Typecode support: needed in both ORBImpl and ORBSingleton public TypeCodeImpl get_primitive_tc(int kind) { + synchronized (this) { + checkShutdownState(); + } try { return primitiveTypeCodeConstants[kind] ; } catch (Throwable t) { @@ -311,15 +322,20 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB public synchronized void setTypeCode(String id, TypeCodeImpl code) { + checkShutdownState(); typeCodeMap.put(id, code); } public synchronized TypeCodeImpl getTypeCode(String id) { + checkShutdownState(); return (TypeCodeImpl)typeCodeMap.get(id); } public MonitoringManager getMonitoringManager( ) { + synchronized (this) { + checkShutdownState(); + } return monitoringManager; } @@ -434,6 +450,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB */ public Logger getLogger( String domain ) { + synchronized (this) { + checkShutdownState(); + } ORBData odata = getORBData() ; // Determine the correct ORBId. There are 3 cases: @@ -510,6 +529,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB // This method must also be inherited by both ORB and ORBSingleton. public ByteBufferPool getByteBufferPool() { + synchronized (this) { + checkShutdownState(); + } if (byteBufferPool == null) byteBufferPool = new ByteBufferPoolImpl(this); diff --git a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java index a4cc2b6a559..dd61ff22032 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -25,9 +25,15 @@ package com.sun.corba.se.spi.orbutil.threadpool; +import java.io.Closeable; -public interface ThreadPool +/** This interface defines a thread pool execution service. The ORB uses this + * interface, which preceeds the JDK 5 ExecutorService. Note that the close + * method must be called in order to reclaim thread resources. + */ +public interface ThreadPool extends Closeable { + /** * This method will return any instance of the WorkQueue. If the ThreadPool * instance only services one WorkQueue then that WorkQueue instance will diff --git a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java index 9225a90a598..14875f6d20a 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -25,7 +25,9 @@ package com.sun.corba.se.spi.orbutil.threadpool; -public interface ThreadPoolManager +import java.io.Closeable; + +public interface ThreadPoolManager extends Closeable { /** * This method will return an instance of the threadpool given a threadpoolId, diff --git a/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java b/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java index b59062a43be..ac25b79510a 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, 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 @@ -25,6 +25,8 @@ package com.sun.corba.se.spi.protocol; +import java.io.Closeable; + import org.omg.PortableInterceptor.ObjectReferenceTemplate ; import org.omg.PortableInterceptor.Interceptor ; import org.omg.PortableInterceptor.Current ; @@ -51,7 +53,7 @@ import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage ; /** This interface defines the PI interface that is used to interface the rest of the * ORB to the PI implementation. */ -public interface PIHandler { +public interface PIHandler extends Closeable { /** Complete the initialization of the PIHandler. This will execute the methods * on the ORBInitializers, if any are defined. This must be done here so that * the ORB can obtain the PIHandler BEFORE the ORBInitializers run, since they diff --git a/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java b/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java index e4fc9ae4265..f5aae43731d 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, 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 @@ -37,33 +37,59 @@ import com.sun.corba.se.spi.oa.ObjectAdapterFactory ; * This is a registry of all subcontract ID dependent objects. This includes: * LocalClientRequestDispatcherFactory, ClientRequestDispatcher, ServerRequestDispatcher, and * ObjectAdapterFactory. - * XXX Should the registerXXX methods take an scid or not? I think we - * want to do this so that the same instance can be shared across multiple - * scids (and this is already true for ObjectAdapterFactory and LocalClientRequestDispatcherFactory), - * but this will require some changes for ClientRequestDispatcher and ServerRequestDispatcher. */ public interface RequestDispatcherRegistry { - // XXX needs javadocs! + /** Register a ClientRequestDispatcher for a particular subcontract ID. + * The subcontract ID appears in the ObjectKey of an object reference, and is used + * to control how a remote method invocation is processed by the ORB for a + * particular kind of object reference. + */ void registerClientRequestDispatcher( ClientRequestDispatcher csc, int scid) ; + /** Get the ClientRequestDispatcher for subcontract ID scid. + */ ClientRequestDispatcher getClientRequestDispatcher( int scid ) ; + /** Register a LocalClientRequestDispatcher for a particular subcontract ID. + * The subcontract ID appears in the ObjectKey of an object reference, and is used + * to control how a particular kind of colocated request is processed. + */ void registerLocalClientRequestDispatcherFactory( LocalClientRequestDispatcherFactory csc, int scid) ; + /** Get the LocalClientRequestDispatcher for subcontract ID scid. + */ LocalClientRequestDispatcherFactory getLocalClientRequestDispatcherFactory( int scid ) ; + /** Register a CorbaServerRequestDispatcher for a particular subcontract ID. + * The subcontract ID appears in the ObjectKey of an object reference, and is used + * to control how a particular kind of request is processed when received by the ORB. + */ void registerServerRequestDispatcher( CorbaServerRequestDispatcher ssc, int scid) ; + /** Get the CorbaServerRequestDispatcher for subcontract ID scid. + */ CorbaServerRequestDispatcher getServerRequestDispatcher(int scid) ; + /** Register a CorbaServerRequestDispatcher for handling an explicit object key name. + * This is used for non-standard invocations such as INS and the bootstrap name service. + */ void registerServerRequestDispatcher( CorbaServerRequestDispatcher ssc, String name ) ; + /** Get the CorbaServerRequestDispatcher for a particular object key. + */ CorbaServerRequestDispatcher getServerRequestDispatcher( String name ) ; + /** Register an ObjectAdapterFactory for a particular subcontract ID. + * This controls how Object references are created and managed. + */ void registerObjectAdapterFactory( ObjectAdapterFactory oaf, int scid) ; + /** Get the ObjectAdapterFactory for a particular subcontract ID scid. + */ ObjectAdapterFactory getObjectAdapterFactory( int scid ) ; - Set getObjectAdapterFactories() ; + /** Return the set of all ObjectAdapterFactory instances that are registered. + */ + Set getObjectAdapterFactories(); } From fed8efa873981e93e32f42d7496b2a7c743090fc Mon Sep 17 00:00:00 2001 From: Sean Coffey Date: Wed, 27 Jun 2012 21:10:26 +0100 Subject: [PATCH 30/83] 6893617: JDK 6 CNCtx always uses the default ORB Reviewed-by: lancea --- .../classes/com/sun/jndi/cosnaming/CNCtx.java | 110 +++++++++--------- 1 file changed, 53 insertions(+), 57 deletions(-) diff --git a/jdk/src/share/classes/com/sun/jndi/cosnaming/CNCtx.java b/jdk/src/share/classes/com/sun/jndi/cosnaming/CNCtx.java index e2665373c91..800c0a53643 100644 --- a/jdk/src/share/classes/com/sun/jndi/cosnaming/CNCtx.java +++ b/jdk/src/share/classes/com/sun/jndi/cosnaming/CNCtx.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, 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 @@ -58,8 +58,22 @@ public class CNCtx implements javax.naming.Context { private final static boolean debug = false; + /* + * Implement one shared ORB among all CNCtx. However, there is a public constructor + * accepting an ORB, so we need the option of using a given ORB. + */ + private static ORB _defaultOrb; ORB _orb; // used by ExceptionMapper and RMI/IIOP factory public NamingContext _nc; // public for accessing underlying NamingContext + + private synchronized static ORB getDefaultOrb() { + if (_defaultOrb == null) { + _defaultOrb = CorbaUtils.getOrb(null, -1, + new Hashtable()); + } + return _defaultOrb; + } + private NameComponent[] _name = null; Hashtable _env; // used by ExceptionMapper @@ -114,8 +128,9 @@ public class CNCtx implements javax.naming.Context { // rest is the INS name // Return the parsed form to prevent subsequent lookup // from parsing the string as a composite name - // The caller should be aware that a toString() of the name - // will yield its INS syntax, rather than a composite syntax + // The caller should be aware that a toString() of the name, + // which came from the environment will yield its INS syntax, + // rather than a composite syntax return new ResolveResult(ctx, parser.parse(rest)); } @@ -135,10 +150,10 @@ public class CNCtx implements javax.naming.Context { if (orb == null || nctx == null) throw new ConfigurationException( "Must supply ORB or NamingContext"); - _orb = orb; - orbTracker = tracker; - if (orbTracker != null) { - orbTracker.incRefCount(); + if (orb != null) { + _orb = orb; + } else { + _orb = getDefaultOrb(); } _nc = nctx; _env = env; @@ -212,10 +227,13 @@ public class CNCtx implements javax.naming.Context { org.omg.CORBA.ORB inOrb = null; String ncIor = null; - if (env != null) { + if (inOrb == null && env != null) { inOrb = (org.omg.CORBA.ORB) env.get("java.naming.corba.orb"); } + if (inOrb == null) + inOrb = getDefaultOrb(); // will create a default ORB if none exists + // Extract PROVIDER_URL from environment String provUrl = null; if (env != null) { @@ -226,13 +244,6 @@ public class CNCtx implements javax.naming.Context { // Initialize the root naming context by using the IOR supplied // in the PROVIDER_URL ncIor = getStringifiedIor(provUrl); - - if (inOrb == null) { - - // no ORB instance specified; create one using env and defaults - inOrb = CorbaUtils.getOrb(null, -1, env); - orbTracker = new OrbReuseTracker(inOrb); - } setOrbAndRootContext(inOrb, ncIor); } else if (provUrl != null) { // Initialize the root naming context by using the URL supplied @@ -258,14 +269,8 @@ public class CNCtx implements javax.naming.Context { } } else { // No PROVIDER_URL supplied; initialize using defaults - if (inOrb == null) { - - // No ORB instance specified; create one using env and defaults - inOrb = CorbaUtils.getOrb(null, -1, env); - orbTracker = new OrbReuseTracker(inOrb); - if (debug) { - System.err.println("Getting default ORB: " + inOrb + env); - } + if (debug) { + System.err.println("Getting default ORB: " + inOrb + env); } setOrbAndRootContext(inOrb, (String)null); } @@ -286,6 +291,10 @@ public class CNCtx implements javax.naming.Context { */ private String initUsingIiopUrl(ORB defOrb, String url, Hashtable env) throws NamingException { + + if (defOrb == null) + defOrb = getDefaultOrb(); + try { IiopUrl parsedUrl = new IiopUrl(url); @@ -294,19 +303,17 @@ public class CNCtx implements javax.naming.Context { for (IiopUrl.Address addr : parsedUrl.getAddresses()) { try { - if (defOrb != null) { - try { - String tmpUrl = "corbaloc:iiop:" + addr.host - + ":" + addr.port + "/NameService"; - if (debug) { - System.err.println("Using url: " + tmpUrl); - } - org.omg.CORBA.Object rootCtx = - defOrb.string_to_object(tmpUrl); - setOrbAndRootContext(defOrb, rootCtx); - return parsedUrl.getStringName(); - } catch (Exception e) {} // keep going - } + try { + String tmpUrl = "corbaloc:iiop:" + addr.host + + ":" + addr.port + "/NameService"; + if (debug) { + System.err.println("Using url: " + tmpUrl); + } + org.omg.CORBA.Object rootCtx = + defOrb.string_to_object(tmpUrl); + setOrbAndRootContext(defOrb, rootCtx); + return parsedUrl.getStringName(); + } catch (Exception e) {} // keep going // Get ORB if (debug) { @@ -314,12 +321,8 @@ public class CNCtx implements javax.naming.Context { + " and port " + addr.port); } - // Get ORB - ORB orb = CorbaUtils.getOrb(addr.host, addr.port, env); - orbTracker = new OrbReuseTracker(orb); - // Assign to fields - setOrbAndRootContext(orb, (String)null); + setOrbAndRootContext(defOrb, (String)null); return parsedUrl.getStringName(); } catch (NamingException ne) { @@ -341,18 +344,16 @@ public class CNCtx implements javax.naming.Context { */ private String initUsingCorbanameUrl(ORB orb, String url, Hashtable env) throws NamingException { + + if (orb == null) + orb = getDefaultOrb(); + try { CorbanameUrl parsedUrl = new CorbanameUrl(url); String corbaloc = parsedUrl.getLocation(); String cosName = parsedUrl.getStringName(); - if (orb == null) { - - // No ORB instance specified; create one using env and defaults - orb = CorbaUtils.getOrb(null, -1, env); - orbTracker = new OrbReuseTracker(orb); - } setOrbAndRootContext(orb, corbaloc); return parsedUrl.getStringName(); @@ -1117,9 +1118,6 @@ public class CNCtx implements javax.naming.Context { } synchronized public void incEnumCount() { - if (orbTracker == null) { - return; - } enumCount++; if (debug) { System.out.println("incEnumCount, new count:" + enumCount); @@ -1128,9 +1126,6 @@ public class CNCtx implements javax.naming.Context { synchronized public void decEnumCount() throws NamingException { - if (orbTracker == null) { - return; - } enumCount--; if (debug) { System.out.println("decEnumCount, new count:" + enumCount + @@ -1142,14 +1137,15 @@ public class CNCtx implements javax.naming.Context { } synchronized public void close() throws NamingException { - if (orbTracker == null) { - return; - } + if (enumCount > 0) { isCloseCalled = true; return; } - orbTracker.decRefCount(); + + // Never destroy an orb in CNCtx. + // The orb we have is either the shared/default orb, or one passed in to a constructor + // from elsewhere, so that orb is somebody else's reponsibility. } protected void finalize() { From a39b17624a65f5cff09a88a5bcddbf97e36cc9c3 Mon Sep 17 00:00:00 2001 From: Zhengyu Gu Date: Thu, 28 Jun 2012 17:03:16 -0400 Subject: [PATCH 31/83] 6995781: Native Memory Tracking (Phase 1) 7151532: DCmd for hotspot native memory tracking Implementation of native memory tracking phase 1, which tracks VM native memory usage, and related DCmd Reviewed-by: acorn, coleenp, fparain --- .../jvm/hotspot/utilities/BasicHashtable.java | 4 +- .../utilities/BasicHashtableEntry.java | 2 +- .../sun/jvm/hotspot/utilities/Hashtable.java | 2 +- .../hotspot/utilities/HashtableBucket.java | 2 +- .../jvm/hotspot/utilities/HashtableEntry.java | 2 +- hotspot/make/bsd/makefiles/jvmg.make | 4 +- hotspot/make/linux/makefiles/jvmg.make | 6 +- hotspot/make/solaris/makefiles/jvmg.make | 3 +- hotspot/make/windows/makefiles/debug.make | 3 +- hotspot/src/os/bsd/vm/os_bsd.cpp | 30 +- hotspot/src/os/bsd/vm/os_bsd.hpp | 4 +- hotspot/src/os/bsd/vm/os_bsd.inline.hpp | 2 +- hotspot/src/os/bsd/vm/perfMemory_bsd.cpp | 66 +- hotspot/src/os/linux/vm/os_linux.cpp | 40 +- hotspot/src/os/linux/vm/os_linux.hpp | 4 +- hotspot/src/os/linux/vm/os_linux.inline.hpp | 2 +- hotspot/src/os/linux/vm/perfMemory_linux.cpp | 66 +- hotspot/src/os/posix/vm/os_posix.cpp | 18 + hotspot/src/os/solaris/dtrace/hs_private.d | 1 - hotspot/src/os/solaris/vm/os_solaris.cpp | 60 +- hotspot/src/os/solaris/vm/os_solaris.hpp | 4 +- .../src/os/solaris/vm/os_solaris.inline.hpp | 2 +- .../src/os/solaris/vm/perfMemory_solaris.cpp | 66 +- hotspot/src/os/windows/vm/os_windows.cpp | 117 ++-- hotspot/src/os/windows/vm/os_windows.hpp | 8 +- .../src/os/windows/vm/perfMemory_windows.cpp | 106 +-- hotspot/src/share/vm/asm/codeBuffer.cpp | 8 +- hotspot/src/share/vm/c1/c1_CFGPrinter.cpp | 4 +- hotspot/src/share/vm/c1/c1_Compiler.cpp | 2 +- hotspot/src/share/vm/c1/c1_LinearScan.cpp | 12 +- hotspot/src/share/vm/ci/ciObjectFactory.cpp | 2 +- .../share/vm/classfile/classFileParser.cpp | 2 +- .../src/share/vm/classfile/classLoader.cpp | 40 +- .../src/share/vm/classfile/classLoader.hpp | 8 +- hotspot/src/share/vm/classfile/dictionary.cpp | 20 +- hotspot/src/share/vm/classfile/dictionary.hpp | 38 +- .../src/share/vm/classfile/javaAssertions.cpp | 2 +- .../src/share/vm/classfile/javaAssertions.hpp | 2 +- .../share/vm/classfile/loaderConstraints.cpp | 16 +- .../share/vm/classfile/loaderConstraints.hpp | 14 +- .../src/share/vm/classfile/placeholders.cpp | 6 +- .../src/share/vm/classfile/placeholders.hpp | 16 +- .../share/vm/classfile/resolutionErrors.cpp | 6 +- .../share/vm/classfile/resolutionErrors.hpp | 15 +- .../src/share/vm/classfile/symbolTable.cpp | 56 +- .../src/share/vm/classfile/symbolTable.hpp | 39 +- .../share/vm/classfile/systemDictionary.cpp | 4 +- .../share/vm/classfile/systemDictionary.hpp | 5 +- hotspot/src/share/vm/code/codeBlob.cpp | 4 +- hotspot/src/share/vm/code/codeCache.cpp | 4 +- hotspot/src/share/vm/code/codeCache.hpp | 3 + hotspot/src/share/vm/code/nmethod.hpp | 2 +- hotspot/src/share/vm/code/stubs.hpp | 4 +- .../share/vm/compiler/abstractCompiler.hpp | 2 +- .../src/share/vm/compiler/compileBroker.cpp | 6 +- .../src/share/vm/compiler/compileBroker.hpp | 6 +- hotspot/src/share/vm/compiler/compileLog.cpp | 8 +- .../src/share/vm/compiler/compilerOracle.cpp | 2 +- hotspot/src/share/vm/compiler/oopMap.cpp | 4 +- .../compactibleFreeListSpace.hpp | 2 +- .../concurrentMarkSweepGeneration.cpp | 28 +- .../concurrentMarkSweepGeneration.hpp | 10 +- .../g1/collectionSetChooser.hpp | 2 +- .../g1/concurrentG1Refine.cpp | 22 +- .../g1/concurrentG1Refine.hpp | 2 +- .../gc_implementation/g1/concurrentMark.cpp | 17 +- .../gc_implementation/g1/concurrentMark.hpp | 6 +- .../gc_implementation/g1/dirtyCardQueue.hpp | 2 +- .../g1/g1BlockOffsetTable.cpp | 4 + .../g1/g1BlockOffsetTable.hpp | 2 +- .../gc_implementation/g1/g1CollectedHeap.cpp | 20 +- .../gc_implementation/g1/g1CollectedHeap.hpp | 8 +- .../g1/g1CollectorPolicy.hpp | 6 +- .../vm/gc_implementation/g1/g1MMUTracker.hpp | 2 +- .../g1/g1MonitoringSupport.hpp | 2 +- .../vm/gc_implementation/g1/g1RemSet.cpp | 8 +- .../vm/gc_implementation/g1/g1RemSet.hpp | 2 +- .../gc_implementation/g1/heapRegionRemSet.cpp | 20 +- .../gc_implementation/g1/heapRegionRemSet.hpp | 4 +- .../vm/gc_implementation/g1/heapRegionSeq.cpp | 2 +- .../vm/gc_implementation/g1/heapRegionSeq.hpp | 2 +- .../vm/gc_implementation/g1/ptrQueue.cpp | 4 +- .../vm/gc_implementation/g1/satbQueue.cpp | 2 +- .../vm/gc_implementation/g1/sparsePRT.cpp | 8 +- .../vm/gc_implementation/g1/sparsePRT.hpp | 4 +- .../vm/gc_implementation/g1/survRateGroup.cpp | 14 +- .../vm/gc_implementation/g1/survRateGroup.hpp | 2 +- .../parNew/parCardTableModRefBS.cpp | 4 +- .../parNew/parGCAllocBuffer.hpp | 2 +- .../parNew/parNewGeneration.cpp | 21 +- .../parNew/parNewGeneration.hpp | 10 +- .../parNew/parOopClosures.hpp | 2 +- .../parallelScavenge/adjoiningGenerations.hpp | 2 +- .../parallelScavenge/gcTaskManager.cpp | 22 +- .../parallelScavenge/gcTaskManager.hpp | 6 +- .../parallelScavenge/gcTaskThread.cpp | 4 +- .../parallelScavenge/gcTaskThread.hpp | 2 +- .../parallelScavenge/objectStartArray.cpp | 6 + .../parallelScavenge/objectStartArray.hpp | 2 +- .../parallelScavenge/parMarkBitMap.cpp | 4 + .../parallelScavenge/parMarkBitMap.hpp | 2 +- .../parallelScavenge/parallelScavengeHeap.cpp | 3 + .../parallelScavenge/psCompactionManager.cpp | 6 +- .../parallelScavenge/psCompactionManager.hpp | 18 +- .../parallelScavenge/psGenerationCounters.cpp | 2 +- .../parallelScavenge/psMarkSweepDecorator.hpp | 2 +- .../parallelScavenge/psOldGen.hpp | 2 +- .../parallelScavenge/psParallelCompact.cpp | 8 +- .../parallelScavenge/psPromotionLAB.hpp | 2 +- .../parallelScavenge/psPromotionManager.cpp | 2 +- .../parallelScavenge/psPromotionManager.hpp | 4 +- .../parallelScavenge/psScavenge.cpp | 4 +- .../parallelScavenge/psScavenge.hpp | 4 +- .../parallelScavenge/psVirtualspace.hpp | 2 +- .../parallelScavenge/psYoungGen.hpp | 2 +- .../shared/adaptiveSizePolicy.hpp | 2 +- .../shared/cSpaceCounters.cpp | 2 +- .../shared/cSpaceCounters.hpp | 4 +- .../shared/collectorCounters.cpp | 2 +- .../shared/collectorCounters.hpp | 4 +- .../shared/gSpaceCounters.cpp | 2 +- .../shared/gSpaceCounters.hpp | 4 +- .../shared/gcPolicyCounters.hpp | 2 +- .../vm/gc_implementation/shared/gcStats.hpp | 2 +- .../vm/gc_implementation/shared/gcUtil.hpp | 6 +- .../shared/generationCounters.cpp | 2 +- .../shared/generationCounters.hpp | 4 +- .../shared/hSpaceCounters.cpp | 2 +- .../shared/hSpaceCounters.hpp | 4 +- .../shared/immutableSpace.hpp | 2 +- .../vm/gc_implementation/shared/markSweep.cpp | 14 +- .../vm/gc_implementation/shared/markSweep.hpp | 12 +- .../shared/mutableNUMASpace.cpp | 6 +- .../shared/mutableNUMASpace.hpp | 2 +- .../shared/spaceCounters.cpp | 2 +- .../shared/spaceCounters.hpp | 4 +- .../shared/spaceDecorator.hpp | 2 +- .../share/vm/gc_interface/collectedHeap.hpp | 2 +- .../vm/interpreter/interpreterRuntime.cpp | 4 +- .../src/share/vm/interpreter/oopMapCache.cpp | 12 +- .../src/share/vm/interpreter/oopMapCache.hpp | 2 +- hotspot/src/share/vm/libadt/set.cpp | 6 +- hotspot/src/share/vm/libadt/vectset.cpp | 2 +- hotspot/src/share/vm/memory/allocation.cpp | 111 +++- hotspot/src/share/vm/memory/allocation.hpp | 135 +++- .../src/share/vm/memory/allocation.inline.hpp | 55 +- hotspot/src/share/vm/memory/barrierSet.hpp | 2 +- .../src/share/vm/memory/blockOffsetTable.cpp | 4 + .../src/share/vm/memory/blockOffsetTable.hpp | 2 +- .../src/share/vm/memory/cardTableModRefBS.cpp | 13 +- .../src/share/vm/memory/collectorPolicy.hpp | 2 +- .../src/share/vm/memory/defNewGeneration.hpp | 6 +- hotspot/src/share/vm/memory/filemap.hpp | 2 +- .../share/vm/memory/freeBlockDictionary.hpp | 2 +- hotspot/src/share/vm/memory/genMarkSweep.cpp | 24 +- .../src/share/vm/memory/genOopClosures.hpp | 8 +- hotspot/src/share/vm/memory/genRemSet.hpp | 2 +- hotspot/src/share/vm/memory/generation.hpp | 2 +- .../src/share/vm/memory/generationSpec.hpp | 4 +- hotspot/src/share/vm/memory/heap.cpp | 5 +- hotspot/src/share/vm/memory/heap.hpp | 2 +- .../src/share/vm/memory/heapInspection.cpp | 6 +- .../src/share/vm/memory/heapInspection.hpp | 4 +- hotspot/src/share/vm/memory/memRegion.hpp | 4 +- hotspot/src/share/vm/memory/permGen.hpp | 2 +- .../src/share/vm/memory/referencePolicy.hpp | 2 +- .../share/vm/memory/referenceProcessor.cpp | 3 +- .../share/vm/memory/referenceProcessor.hpp | 2 +- hotspot/src/share/vm/memory/resourceArea.hpp | 23 +- hotspot/src/share/vm/memory/restore.cpp | 8 +- hotspot/src/share/vm/memory/space.hpp | 2 +- .../src/share/vm/memory/tenuredGeneration.cpp | 2 +- .../vm/memory/threadLocalAllocBuffer.hpp | 4 +- hotspot/src/share/vm/memory/universe.cpp | 4 +- hotspot/src/share/vm/memory/universe.hpp | 4 +- hotspot/src/share/vm/oops/constantPoolOop.hpp | 8 +- hotspot/src/share/vm/oops/instanceKlass.cpp | 16 +- hotspot/src/share/vm/oops/instanceKlass.hpp | 6 +- hotspot/src/share/vm/oops/methodOop.hpp | 2 +- hotspot/src/share/vm/oops/symbol.cpp | 2 +- .../src/share/vm/opto/idealGraphPrinter.cpp | 8 +- hotspot/src/share/vm/opto/macro.cpp | 2 +- hotspot/src/share/vm/opto/runtime.hpp | 2 +- hotspot/src/share/vm/opto/type.cpp | 2 +- hotspot/src/share/vm/prims/jni.cpp | 9 +- hotspot/src/share/vm/prims/jniCheck.cpp | 6 +- .../vm/prims/jvmtiClassFileReconstituter.hpp | 4 +- .../share/vm/prims/jvmtiCodeBlobEvents.cpp | 4 +- hotspot/src/share/vm/prims/jvmtiEnv.cpp | 4 +- hotspot/src/share/vm/prims/jvmtiEnvBase.cpp | 4 +- hotspot/src/share/vm/prims/jvmtiEnvBase.hpp | 6 +- .../share/vm/prims/jvmtiEnvThreadState.cpp | 2 +- .../share/vm/prims/jvmtiEnvThreadState.hpp | 4 +- hotspot/src/share/vm/prims/jvmtiExport.cpp | 8 +- hotspot/src/share/vm/prims/jvmtiExport.hpp | 2 +- .../src/share/vm/prims/jvmtiExtensions.cpp | 4 +- .../share/vm/prims/jvmtiGetLoadedClasses.cpp | 2 +- hotspot/src/share/vm/prims/jvmtiImpl.cpp | 8 +- hotspot/src/share/vm/prims/jvmtiImpl.hpp | 8 +- .../src/share/vm/prims/jvmtiRawMonitor.cpp | 4 +- .../share/vm/prims/jvmtiRedefineClasses.cpp | 2 +- hotspot/src/share/vm/prims/jvmtiTagMap.cpp | 30 +- hotspot/src/share/vm/prims/jvmtiTagMap.hpp | 2 +- .../src/share/vm/prims/jvmtiThreadState.hpp | 2 +- hotspot/src/share/vm/prims/jvmtiUtil.cpp | 2 +- hotspot/src/share/vm/prims/unsafe.cpp | 16 +- hotspot/src/share/vm/runtime/arguments.cpp | 67 +- hotspot/src/share/vm/runtime/arguments.hpp | 16 +- .../src/share/vm/runtime/biasedLocking.cpp | 4 +- .../share/vm/runtime/compilationPolicy.hpp | 2 +- .../src/share/vm/runtime/deoptimization.cpp | 12 +- .../src/share/vm/runtime/deoptimization.hpp | 2 +- hotspot/src/share/vm/runtime/dtraceJSDT.hpp | 6 +- hotspot/src/share/vm/runtime/fprofiler.cpp | 14 +- hotspot/src/share/vm/runtime/fprofiler.hpp | 2 +- hotspot/src/share/vm/runtime/globals.cpp | 16 +- hotspot/src/share/vm/runtime/globals.hpp | 4 +- hotspot/src/share/vm/runtime/handles.cpp | 4 +- hotspot/src/share/vm/runtime/handles.hpp | 3 +- .../src/share/vm/runtime/handles.inline.hpp | 2 +- hotspot/src/share/vm/runtime/java.cpp | 2 +- hotspot/src/share/vm/runtime/jniHandles.hpp | 2 +- hotspot/src/share/vm/runtime/monitorChunk.cpp | 2 +- hotspot/src/share/vm/runtime/monitorChunk.hpp | 2 +- hotspot/src/share/vm/runtime/mutex.hpp | 2 +- hotspot/src/share/vm/runtime/os.cpp | 135 +++- hotspot/src/share/vm/runtime/os.hpp | 37 +- hotspot/src/share/vm/runtime/osThread.hpp | 2 +- hotspot/src/share/vm/runtime/park.cpp | 2 +- hotspot/src/share/vm/runtime/perfData.cpp | 12 +- hotspot/src/share/vm/runtime/perfData.hpp | 6 +- hotspot/src/share/vm/runtime/perfMemory.cpp | 8 +- .../src/share/vm/runtime/reflectionUtils.cpp | 2 +- hotspot/src/share/vm/runtime/safepoint.cpp | 7 +- hotspot/src/share/vm/runtime/safepoint.hpp | 2 +- .../src/share/vm/runtime/sharedRuntime.cpp | 28 +- .../src/share/vm/runtime/sharedRuntime.hpp | 4 +- .../share/vm/runtime/stubCodeGenerator.hpp | 2 +- hotspot/src/share/vm/runtime/sweeper.cpp | 2 +- hotspot/src/share/vm/runtime/task.hpp | 2 +- hotspot/src/share/vm/runtime/thread.cpp | 86 ++- hotspot/src/share/vm/runtime/thread.hpp | 30 +- .../src/share/vm/runtime/unhandledOops.cpp | 2 +- hotspot/src/share/vm/runtime/vframeArray.cpp | 2 +- hotspot/src/share/vm/runtime/vframeArray.hpp | 2 +- hotspot/src/share/vm/runtime/vframe_hp.cpp | 4 +- hotspot/src/share/vm/runtime/vframe_hp.hpp | 4 +- hotspot/src/share/vm/runtime/virtualspace.cpp | 10 + hotspot/src/share/vm/runtime/vmStructs.cpp | 59 +- hotspot/src/share/vm/runtime/vmThread.hpp | 2 +- .../src/share/vm/runtime/vm_operations.hpp | 2 +- .../src/share/vm/services/attachListener.cpp | 2 +- .../src/share/vm/services/attachListener.hpp | 2 +- .../share/vm/services/diagnosticArgument.cpp | 4 +- .../share/vm/services/diagnosticArgument.hpp | 8 +- .../share/vm/services/diagnosticFramework.hpp | 4 +- hotspot/src/share/vm/services/gcNotifier.cpp | 2 +- hotspot/src/share/vm/services/gcNotifier.hpp | 2 +- hotspot/src/share/vm/services/heapDumper.cpp | 12 +- .../share/vm/services/lowMemoryDetector.hpp | 4 +- hotspot/src/share/vm/services/management.cpp | 2 + hotspot/src/share/vm/services/memBaseline.cpp | 387 +++++++++++ hotspot/src/share/vm/services/memBaseline.hpp | 447 +++++++++++++ hotspot/src/share/vm/services/memPtr.cpp | 74 +++ hotspot/src/share/vm/services/memPtr.hpp | 509 +++++++++++++++ hotspot/src/share/vm/services/memPtrArray.hpp | 310 +++++++++ hotspot/src/share/vm/services/memRecorder.cpp | 162 +++++ hotspot/src/share/vm/services/memRecorder.hpp | 267 ++++++++ hotspot/src/share/vm/services/memReporter.cpp | 560 ++++++++++++++++ hotspot/src/share/vm/services/memReporter.hpp | 268 ++++++++ hotspot/src/share/vm/services/memSnapshot.cpp | 463 +++++++++++++ hotspot/src/share/vm/services/memSnapshot.hpp | 286 ++++++++ .../src/share/vm/services/memTrackWorker.cpp | 199 ++++++ .../src/share/vm/services/memTrackWorker.hpp | 74 +++ hotspot/src/share/vm/services/memTracker.cpp | 617 ++++++++++++++++++ hotspot/src/share/vm/services/memTracker.hpp | 384 +++++++++++ .../src/share/vm/services/memoryManager.cpp | 12 +- .../src/share/vm/services/memoryManager.hpp | 2 +- hotspot/src/share/vm/services/memoryPool.hpp | 2 +- .../src/share/vm/services/memoryService.cpp | 4 +- hotspot/src/share/vm/services/nmtDCmd.cpp | 172 +++++ hotspot/src/share/vm/services/nmtDCmd.hpp | 60 ++ .../src/share/vm/services/threadService.cpp | 10 +- .../src/share/vm/services/threadService.hpp | 12 +- hotspot/src/share/vm/utilities/array.cpp | 10 +- hotspot/src/share/vm/utilities/array.hpp | 4 +- hotspot/src/share/vm/utilities/bitMap.cpp | 8 +- hotspot/src/share/vm/utilities/decoder.hpp | 2 +- hotspot/src/share/vm/utilities/elfFile.cpp | 2 +- hotspot/src/share/vm/utilities/elfFile.hpp | 2 +- .../src/share/vm/utilities/elfStringTable.cpp | 2 +- .../src/share/vm/utilities/elfStringTable.hpp | 2 +- .../src/share/vm/utilities/elfSymbolTable.cpp | 2 +- .../src/share/vm/utilities/elfSymbolTable.hpp | 2 +- hotspot/src/share/vm/utilities/events.hpp | 2 +- hotspot/src/share/vm/utilities/exceptions.hpp | 2 +- .../src/share/vm/utilities/growableArray.cpp | 2 +- .../src/share/vm/utilities/growableArray.hpp | 18 +- hotspot/src/share/vm/utilities/hashtable.cpp | 115 ++-- hotspot/src/share/vm/utilities/hashtable.hpp | 80 +-- .../share/vm/utilities/hashtable.inline.hpp | 25 +- hotspot/src/share/vm/utilities/histogram.cpp | 2 +- hotspot/src/share/vm/utilities/histogram.hpp | 4 +- hotspot/src/share/vm/utilities/intHisto.cpp | 2 +- hotspot/src/share/vm/utilities/intHisto.hpp | 2 +- hotspot/src/share/vm/utilities/numberSeq.cpp | 4 +- hotspot/src/share/vm/utilities/numberSeq.hpp | 4 +- hotspot/src/share/vm/utilities/ostream.cpp | 30 +- hotspot/src/share/vm/utilities/stack.hpp | 33 +- .../src/share/vm/utilities/stack.inline.hpp | 158 ++--- hotspot/src/share/vm/utilities/taskqueue.hpp | 150 +++-- hotspot/src/share/vm/utilities/vmError.cpp | 4 + hotspot/src/share/vm/utilities/workgroup.cpp | 7 +- hotspot/src/share/vm/utilities/workgroup.hpp | 4 +- hotspot/src/share/vm/utilities/xmlstream.cpp | 8 +- 315 files changed, 7245 insertions(+), 1477 deletions(-) create mode 100644 hotspot/src/share/vm/services/memBaseline.cpp create mode 100644 hotspot/src/share/vm/services/memBaseline.hpp create mode 100644 hotspot/src/share/vm/services/memPtr.cpp create mode 100644 hotspot/src/share/vm/services/memPtr.hpp create mode 100644 hotspot/src/share/vm/services/memPtrArray.hpp create mode 100644 hotspot/src/share/vm/services/memRecorder.cpp create mode 100644 hotspot/src/share/vm/services/memRecorder.hpp create mode 100644 hotspot/src/share/vm/services/memReporter.cpp create mode 100644 hotspot/src/share/vm/services/memReporter.hpp create mode 100644 hotspot/src/share/vm/services/memSnapshot.cpp create mode 100644 hotspot/src/share/vm/services/memSnapshot.hpp create mode 100644 hotspot/src/share/vm/services/memTrackWorker.cpp create mode 100644 hotspot/src/share/vm/services/memTrackWorker.hpp create mode 100644 hotspot/src/share/vm/services/memTracker.cpp create mode 100644 hotspot/src/share/vm/services/memTracker.hpp create mode 100644 hotspot/src/share/vm/services/nmtDCmd.cpp create mode 100644 hotspot/src/share/vm/services/nmtDCmd.hpp diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java index bb296a509d2..0f4da3a9218 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java @@ -41,10 +41,10 @@ public class BasicHashtable extends VMObject { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("BasicHashtable"); + Type type = db.lookupType("BasicHashtable"); tableSizeField = type.getCIntegerField("_table_size"); bucketsField = type.getAddressField("_buckets"); - bucketSize = db.lookupType("HashtableBucket").getSize(); + bucketSize = db.lookupType("HashtableBucket").getSize(); } // Fields diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java index 192c1dd9fa0..0296dcbd651 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java @@ -41,7 +41,7 @@ public class BasicHashtableEntry extends VMObject { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("BasicHashtableEntry"); + Type type = db.lookupType("BasicHashtableEntry"); hashField = type.getCIntegerField("_hash"); nextField = type.getAddressField("_next"); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java index 3c2e0f965c2..70709f02b84 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java @@ -40,7 +40,7 @@ public class Hashtable extends BasicHashtable { private static synchronized void initialize(TypeDataBase db) { // just to confirm that type exists - Type type = db.lookupType("Hashtable"); + Type type = db.lookupType("IntptrHashtable"); } // derived class may return Class diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java index 2e86b9a8318..44f78e49dd8 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java @@ -39,7 +39,7 @@ public class HashtableBucket extends VMObject { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("HashtableBucket"); + Type type = db.lookupType("HashtableBucket"); entryField = type.getAddressField("_entry"); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java index 73932a43033..38c5968720d 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java @@ -41,7 +41,7 @@ public class HashtableEntry extends BasicHashtableEntry { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("HashtableEntry"); + Type type = db.lookupType("IntptrHashtableEntry"); literalField = type.getAddressField("_literal"); } diff --git a/hotspot/make/bsd/makefiles/jvmg.make b/hotspot/make/bsd/makefiles/jvmg.make index 8c56368d4dc..b5be2967edc 100644 --- a/hotspot/make/bsd/makefiles/jvmg.make +++ b/hotspot/make/bsd/makefiles/jvmg.make @@ -27,7 +27,9 @@ # Compiler specific DEBUG_CFLAGS are passed in from gcc.make, sparcWorks.make DEBUG_CFLAGS/DEFAULT= $(DEBUG_CFLAGS) DEBUG_CFLAGS/BYFILE = $(DEBUG_CFLAGS/$@)$(DEBUG_CFLAGS/DEFAULT$(DEBUG_CFLAGS/$@)) -CFLAGS += $(DEBUG_CFLAGS/BYFILE) + +# _NMT_NOINLINE_ informs NMT that no inlining by Compiler +CFLAGS += $(DEBUG_CFLAGS/BYFILE) -D_NMT_NOINLINE_ # Set the environment variable HOTSPARC_GENERIC to "true" # to inhibit the effect of the previous line on CFLAGS. diff --git a/hotspot/make/linux/makefiles/jvmg.make b/hotspot/make/linux/makefiles/jvmg.make index db10608c142..3c0ae3a628e 100644 --- a/hotspot/make/linux/makefiles/jvmg.make +++ b/hotspot/make/linux/makefiles/jvmg.make @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 2012, 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 @@ -27,7 +27,9 @@ # Compiler specific DEBUG_CFLAGS are passed in from gcc.make, sparcWorks.make DEBUG_CFLAGS/DEFAULT= $(DEBUG_CFLAGS) DEBUG_CFLAGS/BYFILE = $(DEBUG_CFLAGS/$@)$(DEBUG_CFLAGS/DEFAULT$(DEBUG_CFLAGS/$@)) -CFLAGS += $(DEBUG_CFLAGS/BYFILE) + +# _NMT_NOINLINE_ informs NMT that no inlining by Compiler +CFLAGS += $(DEBUG_CFLAGS/BYFILE) -D_NMT_NOINLINE_ # Set the environment variable HOTSPARC_GENERIC to "true" # to inhibit the effect of the previous line on CFLAGS. diff --git a/hotspot/make/solaris/makefiles/jvmg.make b/hotspot/make/solaris/makefiles/jvmg.make index 8e1db865e33..821c0a13850 100644 --- a/hotspot/make/solaris/makefiles/jvmg.make +++ b/hotspot/make/solaris/makefiles/jvmg.make @@ -37,7 +37,8 @@ ifeq ($(COMPILER_REV_NUMERIC),508) endif endif -CFLAGS += $(DEBUG_CFLAGS/BYFILE) +# _NMT_NOINLINE_ informs NMT that no inlining by Compiler +CFLAGS += $(DEBUG_CFLAGS/BYFILE) -D_NMT_NOINLINE_ # Set the environment variable HOTSPARC_GENERIC to "true" # to inhibit the effect of the previous line on CFLAGS. diff --git a/hotspot/make/windows/makefiles/debug.make b/hotspot/make/windows/makefiles/debug.make index 9f434729d76..36a12dc9de2 100644 --- a/hotspot/make/windows/makefiles/debug.make +++ b/hotspot/make/windows/makefiles/debug.make @@ -38,7 +38,8 @@ default:: $(BUILD_PCH_FILE) $(AOUT) launcher checkAndBuildSA wb !include ../local.make !include compile.make -CXX_FLAGS=$(CXX_FLAGS) $(DEBUG_OPT_OPTION) +# _NMT_NOINLINE_ informs NMT that no inlining by Compiler +CXX_FLAGS=$(CXX_FLAGS) $(DEBUG_OPT_OPTION) /D "_NMT_NOINLINE_" !include $(WorkSpace)/make/windows/makefiles/vm.make !include local.make diff --git a/hotspot/src/os/bsd/vm/os_bsd.cpp b/hotspot/src/os/bsd/vm/os_bsd.cpp index f9b21acb464..0305b3df0de 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.cpp +++ b/hotspot/src/os/bsd/vm/os_bsd.cpp @@ -440,7 +440,7 @@ void os::init_system_properties_values() { // code needs to be changed accordingly. // The next few definitions allow the code to be verbatim: -#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n)) +#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal) #define getenv(n) ::getenv(n) /* @@ -1913,11 +1913,11 @@ void os::dll_build_name(char* buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { snprintf(buffer, buflen, "%s/" JNI_LIB_PREFIX "%s" JNI_LIB_SUFFIX, pname, fname); @@ -2766,7 +2766,7 @@ void bsd_wrap_code(char* base, size_t size) { // All it does is to check if there are enough free pages // left at the time of mmap(). This could be a potential // problem. -bool os::commit_memory(char* addr, size_t size, bool exec) { +bool os::pd_commit_memory(char* addr, size_t size, bool exec) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; #ifdef __OpenBSD__ // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD @@ -2790,7 +2790,7 @@ bool os::commit_memory(char* addr, size_t size, bool exec) { #endif #endif -bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, bool exec) { #ifndef _ALLBSD_SOURCE if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { @@ -2806,7 +2806,7 @@ bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, return commit_memory(addr, size, exec); } -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { #ifndef _ALLBSD_SOURCE if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { // We don't check the return value: madvise(MADV_HUGEPAGE) may not @@ -2816,7 +2816,7 @@ void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { #endif } -void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { ::madvise(addr, bytes, MADV_DONTNEED); } @@ -2958,7 +2958,7 @@ os::Bsd::numa_interleave_memory_func_t os::Bsd::_numa_interleave_memory; unsigned long* os::Bsd::_numa_all_nodes; #endif -bool os::uncommit_memory(char* addr, size_t size) { +bool os::pd_uncommit_memory(char* addr, size_t size) { #ifdef __OpenBSD__ // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD return ::mprotect(addr, size, PROT_NONE) == 0; @@ -2969,7 +2969,7 @@ bool os::uncommit_memory(char* addr, size_t size) { #endif } -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { return os::commit_memory(addr, size); } @@ -3023,12 +3023,12 @@ static int anon_munmap(char * addr, size_t size) { return ::munmap(addr, size) == 0; } -char* os::reserve_memory(size_t bytes, char* requested_addr, +char* os::pd_reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { return anon_mmap(requested_addr, bytes, (requested_addr != NULL)); } -bool os::release_memory(char* addr, size_t size) { +bool os::pd_release_memory(char* addr, size_t size) { return anon_munmap(addr, size); } @@ -3331,7 +3331,7 @@ bool os::can_execute_large_page_memory() { // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { const int max_tries = 10; char* base[max_tries]; size_t size[max_tries]; @@ -4987,7 +4987,7 @@ int os::socket_available(int fd, jint *pbytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { int prot; @@ -5019,7 +5019,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // same as map_memory() on this OS @@ -5029,7 +5029,7 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // Unmap a block of memory. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { return munmap(addr, bytes) == 0; } diff --git a/hotspot/src/os/bsd/vm/os_bsd.hpp b/hotspot/src/os/bsd/vm/os_bsd.hpp index 271d1e291e9..bb8fe3f211e 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.hpp +++ b/hotspot/src/os/bsd/vm/os_bsd.hpp @@ -312,7 +312,7 @@ public: }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _mutex is sole occupant of cache line volatile int _Event ; @@ -347,7 +347,7 @@ class PlatformEvent : public CHeapObj { void SetAssociation (Thread * a) { _Assoc = a ; } } ; -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: pthread_mutex_t _mutex [1] ; pthread_cond_t _cond [1] ; diff --git a/hotspot/src/os/bsd/vm/os_bsd.inline.hpp b/hotspot/src/os/bsd/vm/os_bsd.inline.hpp index c582a45315a..9980d4631a2 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.inline.hpp +++ b/hotspot/src/os/bsd/vm/os_bsd.inline.hpp @@ -95,7 +95,7 @@ inline bool os::allocate_stack_guard_pages() { // On Bsd, reservations are made on a page by page basis, nothing to do. -inline void os::split_reserved_memory(char *base, size_t size, +inline void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { } diff --git a/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp b/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp index c93289e5909..e9db634135f 100644 --- a/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp +++ b/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp @@ -126,7 +126,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } @@ -153,7 +153,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); @@ -246,7 +246,7 @@ static char* get_user_name(uid_t uid) { if (bufsize == -1) bufsize = 1024; - char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize); + char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); // POSIX interface to getpwuid_r is used on LINUX struct passwd* p; @@ -278,14 +278,14 @@ static char* get_user_name(uid_t uid) { "pw_name zero length"); } } - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return NULL; } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1, mtInternal); strcpy(user_name, p->pw_name); - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return user_name; } @@ -328,7 +328,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -338,7 +338,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); @@ -346,7 +346,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -357,13 +357,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -372,7 +372,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { int result; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "/"); @@ -381,13 +381,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // don't follow symbolic links for the file RESTARTABLE(::lstat(filename, &statbuf), result); if (result == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if (!S_ISREG(statbuf.st_mode)) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -397,23 +397,23 @@ static char* get_user_name_slow(int vmid, TRAPS) { if (statbuf.st_ctime > oldest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user); - oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user, mtInternal); + oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(oldest_user, user); oldest_ctime = statbuf.st_ctime; } } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(oldest_user); } @@ -434,7 +434,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a null terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); snprintf(name, nbytes, "%s/%d", dirname, vmid); return name; @@ -472,7 +472,7 @@ static void remove_file(const char* path) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "/"); @@ -480,7 +480,7 @@ static void remove_file(const char* dirname, const char* filename) { remove_file(path); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } @@ -517,7 +517,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -556,7 +556,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // make the user specific temporary directory. Returns true if @@ -723,11 +723,11 @@ static char* mmap_create_shared(size_t size) { fd = create_sharedmem_resources(dirname, filename, size); - FREE_C_HEAP_ARRAY(char, user_name); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, user_name, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (fd == -1) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -743,7 +743,7 @@ static char* mmap_create_shared(size_t size) { warning("mmap failed - %s\n", strerror(errno)); } remove_file(filename); - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -869,7 +869,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor // store file, we don't follow them when attaching either. // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -884,9 +884,9 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor strcpy(rfilename, filename); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); // open the shared memory file for the give vmid fd = open_sharedmem_file(rfilename, file_flags, CHECK); diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp index 53457ec8db9..ce7c71b9d43 100644 --- a/hotspot/src/os/linux/vm/os_linux.cpp +++ b/hotspot/src/os/linux/vm/os_linux.cpp @@ -371,7 +371,7 @@ void os::init_system_properties_values() { // code needs to be changed accordingly. // The next few definitions allow the code to be verbatim: -#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n)) +#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal) #define getenv(n) ::getenv(n) /* @@ -639,7 +639,7 @@ void os::Linux::libpthread_init() { size_t n = confstr(_CS_GNU_LIBC_VERSION, NULL, 0); if (n > 0) { - char *str = (char *)malloc(n); + char *str = (char *)malloc(n, mtInternal); confstr(_CS_GNU_LIBC_VERSION, str, n); os::Linux::set_glibc_version(str); } else { @@ -652,7 +652,7 @@ void os::Linux::libpthread_init() { n = confstr(_CS_GNU_LIBPTHREAD_VERSION, NULL, 0); if (n > 0) { - char *str = (char *)malloc(n); + char *str = (char *)malloc(n, mtInternal); confstr(_CS_GNU_LIBPTHREAD_VERSION, str, n); // Vanilla RH-9 (glibc 2.3.2) has a bug that confstr() always tells // us "NPTL-0.29" even we are running with LinuxThreads. Check if this @@ -1685,11 +1685,11 @@ void os::dll_build_name(char* buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { snprintf(buffer, buflen, "%s/lib%s.so", pname, fname); @@ -2469,7 +2469,7 @@ void linux_wrap_code(char* base, size_t size) { // All it does is to check if there are enough free pages // left at the time of mmap(). This could be a potential // problem. -bool os::commit_memory(char* addr, size_t size, bool exec) { +bool os::pd_commit_memory(char* addr, size_t size, bool exec) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; uintptr_t res = (uintptr_t) ::mmap(addr, size, prot, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0); @@ -2492,7 +2492,7 @@ bool os::commit_memory(char* addr, size_t size, bool exec) { #define MADV_HUGEPAGE 14 #endif -bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, bool exec) { if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; @@ -2516,7 +2516,7 @@ bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, return false; } -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { // We don't check the return value: madvise(MADV_HUGEPAGE) may not // be supported or the memory may already be backed by huge pages. @@ -2524,7 +2524,7 @@ void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { } } -void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { // This method works by doing an mmap over an existing mmaping and effectively discarding // the existing pages. However it won't work for SHM-based large pages that cannot be // uncommitted at all. We don't do anything in this case to avoid creating a segment with @@ -2646,7 +2646,7 @@ bool os::Linux::libnuma_init() { if (numa_available() != -1) { set_numa_all_nodes((unsigned long*)libnuma_dlsym(handle, "numa_all_nodes")); // Create a cpu -> node mapping - _cpu_to_node = new (ResourceObj::C_HEAP) GrowableArray(0, true); + _cpu_to_node = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(0, true); rebuild_cpu_to_node_map(); return true; } @@ -2676,7 +2676,7 @@ void os::Linux::rebuild_cpu_to_node_map() { cpu_to_node()->at_grow(cpu_num - 1); size_t node_num = numa_get_groups_num(); - unsigned long *cpu_map = NEW_C_HEAP_ARRAY(unsigned long, cpu_map_size); + unsigned long *cpu_map = NEW_C_HEAP_ARRAY(unsigned long, cpu_map_size, mtInternal); for (size_t i = 0; i < node_num; i++) { if (numa_node_to_cpus(i, cpu_map, cpu_map_size * sizeof(unsigned long)) != -1) { for (size_t j = 0; j < cpu_map_valid_size; j++) { @@ -2690,7 +2690,7 @@ void os::Linux::rebuild_cpu_to_node_map() { } } } - FREE_C_HEAP_ARRAY(unsigned long, cpu_map); + FREE_C_HEAP_ARRAY(unsigned long, cpu_map, mtInternal); } int os::Linux::get_node_by_cpu(int cpu_id) { @@ -2709,7 +2709,7 @@ os::Linux::numa_tonode_memory_func_t os::Linux::_numa_tonode_memory; os::Linux::numa_interleave_memory_func_t os::Linux::_numa_interleave_memory; unsigned long* os::Linux::_numa_all_nodes; -bool os::uncommit_memory(char* addr, size_t size) { +bool os::pd_uncommit_memory(char* addr, size_t size) { uintptr_t res = (uintptr_t) ::mmap(addr, size, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_NORESERVE|MAP_ANONYMOUS, -1, 0); return res != (uintptr_t) MAP_FAILED; @@ -2774,7 +2774,7 @@ bool get_stack_bounds(uintptr_t *bottom, uintptr_t *top) { // munmap() the guard pages we don't leave a hole in the stack // mapping. This only affects the main/initial thread, but guard // against future OS changes -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { uintptr_t stack_extent, stack_base; bool chk_bounds = NOT_DEBUG(os::Linux::is_initial_thread()) DEBUG_ONLY(true); if (chk_bounds && get_stack_bounds(&stack_extent, &stack_base)) { @@ -2847,12 +2847,12 @@ static int anon_munmap(char * addr, size_t size) { return ::munmap(addr, size) == 0; } -char* os::reserve_memory(size_t bytes, char* requested_addr, +char* os::pd_reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { return anon_mmap(requested_addr, bytes, (requested_addr != NULL)); } -bool os::release_memory(char* addr, size_t size) { +bool os::pd_release_memory(char* addr, size_t size) { return anon_munmap(addr, size); } @@ -3149,7 +3149,7 @@ bool os::can_execute_large_page_memory() { // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { const int max_tries = 10; char* base[max_tries]; size_t size[max_tries]; @@ -4671,7 +4671,7 @@ int os::socket_available(int fd, jint *pbytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { int prot; @@ -4701,7 +4701,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // same as map_memory() on this OS @@ -4711,7 +4711,7 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // Unmap a block of memory. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { return munmap(addr, bytes) == 0; } diff --git a/hotspot/src/os/linux/vm/os_linux.hpp b/hotspot/src/os/linux/vm/os_linux.hpp index 7c19517e21e..0f0fa214a04 100644 --- a/hotspot/src/os/linux/vm/os_linux.hpp +++ b/hotspot/src/os/linux/vm/os_linux.hpp @@ -287,7 +287,7 @@ public: }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _mutex is sole occupant of cache line volatile int _Event ; @@ -322,7 +322,7 @@ class PlatformEvent : public CHeapObj { void SetAssociation (Thread * a) { _Assoc = a ; } } ; -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: pthread_mutex_t _mutex [1] ; pthread_cond_t _cond [1] ; diff --git a/hotspot/src/os/linux/vm/os_linux.inline.hpp b/hotspot/src/os/linux/vm/os_linux.inline.hpp index 566c0ad3168..c663c9b6961 100644 --- a/hotspot/src/os/linux/vm/os_linux.inline.hpp +++ b/hotspot/src/os/linux/vm/os_linux.inline.hpp @@ -99,7 +99,7 @@ inline bool os::allocate_stack_guard_pages() { // On Linux, reservations are made on a page by page basis, nothing to do. -inline void os::split_reserved_memory(char *base, size_t size, +inline void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { } diff --git a/hotspot/src/os/linux/vm/perfMemory_linux.cpp b/hotspot/src/os/linux/vm/perfMemory_linux.cpp index 1cd430cfbc7..8839aac6c10 100644 --- a/hotspot/src/os/linux/vm/perfMemory_linux.cpp +++ b/hotspot/src/os/linux/vm/perfMemory_linux.cpp @@ -126,7 +126,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } @@ -153,7 +153,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); @@ -246,7 +246,7 @@ static char* get_user_name(uid_t uid) { if (bufsize == -1) bufsize = 1024; - char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize); + char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); // POSIX interface to getpwuid_r is used on LINUX struct passwd* p; @@ -278,14 +278,14 @@ static char* get_user_name(uid_t uid) { "pw_name zero length"); } } - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return NULL; } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1, mtInternal); strcpy(user_name, p->pw_name); - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return user_name; } @@ -328,7 +328,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -338,7 +338,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); @@ -346,7 +346,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -357,13 +357,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -372,7 +372,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { int result; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "/"); @@ -381,13 +381,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // don't follow symbolic links for the file RESTARTABLE(::lstat(filename, &statbuf), result); if (result == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if (!S_ISREG(statbuf.st_mode)) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -397,23 +397,23 @@ static char* get_user_name_slow(int vmid, TRAPS) { if (statbuf.st_ctime > oldest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user); - oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user, mtInternal); + oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(oldest_user, user); oldest_ctime = statbuf.st_ctime; } } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(oldest_user); } @@ -434,7 +434,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a null terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); snprintf(name, nbytes, "%s/%d", dirname, vmid); return name; @@ -472,7 +472,7 @@ static void remove_file(const char* path) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "/"); @@ -480,7 +480,7 @@ static void remove_file(const char* dirname, const char* filename) { remove_file(path); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } @@ -517,7 +517,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -556,7 +556,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // make the user specific temporary directory. Returns true if @@ -723,11 +723,11 @@ static char* mmap_create_shared(size_t size) { fd = create_sharedmem_resources(dirname, filename, size); - FREE_C_HEAP_ARRAY(char, user_name); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, user_name, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (fd == -1) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -743,7 +743,7 @@ static char* mmap_create_shared(size_t size) { warning("mmap failed - %s\n", strerror(errno)); } remove_file(filename); - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -869,7 +869,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor // store file, we don't follow them when attaching either. // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -884,9 +884,9 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor strcpy(rfilename, filename); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); // open the shared memory file for the give vmid fd = open_sharedmem_file(rfilename, file_flags, CHECK); diff --git a/hotspot/src/os/posix/vm/os_posix.cpp b/hotspot/src/os/posix/vm/os_posix.cpp index 9f05a74a4a0..3e49b8b9ddd 100644 --- a/hotspot/src/os/posix/vm/os_posix.cpp +++ b/hotspot/src/os/posix/vm/os_posix.cpp @@ -23,6 +23,7 @@ */ #include "prims/jvm.h" +#include "runtime/frame.inline.hpp" #include "runtime/os.hpp" #include "utilities/vmError.hpp" @@ -61,6 +62,23 @@ void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* VMError::report_coredump_status(buffer, success); } +address os::get_caller_pc(int n) { +#ifdef _NMT_NOINLINE_ + n ++; +#endif + frame fr = os::current_frame(); + while (n > 0 && fr.pc() && + !os::is_first_C_frame(&fr) && fr.sender_pc()) { + fr = os::get_sender_for_C_frame(&fr); + n --; + } + if (n == 0) { + return fr.pc(); + } else { + return NULL; + } +} + int os::get_last_error() { return errno; } diff --git a/hotspot/src/os/solaris/dtrace/hs_private.d b/hotspot/src/os/solaris/dtrace/hs_private.d index 23463a409b3..df395e5c045 100644 --- a/hotspot/src/os/solaris/dtrace/hs_private.d +++ b/hotspot/src/os/solaris/dtrace/hs_private.d @@ -23,7 +23,6 @@ */ provider hs_private { - probe hashtable__new_entry(void*, uintptr_t, void*); probe safepoint__begin(); probe safepoint__end(); probe cms__initmark__begin(); diff --git a/hotspot/src/os/solaris/vm/os_solaris.cpp b/hotspot/src/os/solaris/vm/os_solaris.cpp index c3389a47764..1d241d650e8 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.cpp +++ b/hotspot/src/os/solaris/vm/os_solaris.cpp @@ -546,7 +546,7 @@ static bool find_processors_in_pset(psetid_t pset, // Find the number of processors in the processor set. if (pset_info(pset, NULL, id_length, NULL) == 0) { // Make up an array to hold their ids. - *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length); + *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length, mtInternal); // Fill in the array with their processor ids. if (pset_info(pset, NULL, id_length, *id_array) == 0) { result = true; @@ -577,7 +577,7 @@ static bool find_processors_online(processorid_t** id_array, // Find the number of processors online. *id_length = sysconf(_SC_NPROCESSORS_ONLN); // Make up an array to hold their ids. - *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length); + *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length, mtInternal); // Processors need not be numbered consecutively. long found = 0; processorid_t next = 0; @@ -629,7 +629,7 @@ static bool assign_distribution(processorid_t* id_array, // The next id, to limit loops. const processorid_t limit_id = max_id + 1; // Make up markers for available processors. - bool* available_id = NEW_C_HEAP_ARRAY(bool, limit_id); + bool* available_id = NEW_C_HEAP_ARRAY(bool, limit_id, mtInternal); for (uint c = 0; c < limit_id; c += 1) { available_id[c] = false; } @@ -666,7 +666,7 @@ static bool assign_distribution(processorid_t* id_array, } } if (available_id != NULL) { - FREE_C_HEAP_ARRAY(bool, available_id); + FREE_C_HEAP_ARRAY(bool, available_id, mtInternal); } return true; } @@ -698,7 +698,7 @@ bool os::distribute_processes(uint length, uint* distribution) { } } if (id_array != NULL) { - FREE_C_HEAP_ARRAY(processorid_t, id_array); + FREE_C_HEAP_ARRAY(processorid_t, id_array, mtInternal); } return result; } @@ -771,8 +771,8 @@ void os::init_system_properties_values() { // code needs to be changed accordingly. // The next few definitions allow the code to be verbatim: -#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n)) -#define free(p) FREE_C_HEAP_ARRAY(char, p) +#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal) +#define free(p) FREE_C_HEAP_ARRAY(char, p, mtInternal) #define getenv(n) ::getenv(n) #define EXTENSIONS_DIR "/lib/ext" @@ -1927,11 +1927,11 @@ void os::dll_build_name(char* buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { snprintf(buffer, buflen, "%s/lib%s.so", pname, fname); @@ -2662,17 +2662,17 @@ void os::Solaris::init_signal_mem() { // pending_signals has one int per signal // The additional signal is for SIGEXIT - exit signal to signal_thread - pending_signals = (jint *)os::malloc(sizeof(jint) * (Sigexit+1)); + pending_signals = (jint *)os::malloc(sizeof(jint) * (Sigexit+1), mtInternal); memset(pending_signals, 0, (sizeof(jint) * (Sigexit+1))); if (UseSignalChaining) { chainedsigactions = (struct sigaction *)malloc(sizeof(struct sigaction) - * (Maxsignum + 1)); + * (Maxsignum + 1), mtInternal); memset(chainedsigactions, 0, (sizeof(struct sigaction) * (Maxsignum + 1))); - preinstalled_sigs = (int *)os::malloc(sizeof(int) * (Maxsignum + 1)); + preinstalled_sigs = (int *)os::malloc(sizeof(int) * (Maxsignum + 1), mtInternal); memset(preinstalled_sigs, 0, (sizeof(int) * (Maxsignum + 1))); } - ourSigFlags = (int*)malloc(sizeof(int) * (Maxsignum + 1 )); + ourSigFlags = (int*)malloc(sizeof(int) * (Maxsignum + 1 ), mtInternal); memset(ourSigFlags, 0, sizeof(int) * (Maxsignum + 1)); } @@ -2760,7 +2760,7 @@ int os::vm_allocation_granularity() { return page_size; } -bool os::commit_memory(char* addr, size_t bytes, bool exec) { +bool os::pd_commit_memory(char* addr, size_t bytes, bool exec) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; size_t size = bytes; char *res = Solaris::mmap_chunk(addr, size, MAP_PRIVATE|MAP_FIXED, prot); @@ -2773,7 +2773,7 @@ bool os::commit_memory(char* addr, size_t bytes, bool exec) { return false; } -bool os::commit_memory(char* addr, size_t bytes, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t bytes, size_t alignment_hint, bool exec) { if (commit_memory(addr, bytes, exec)) { if (UseMPSS && alignment_hint > (size_t)vm_page_size()) { @@ -2803,14 +2803,14 @@ bool os::commit_memory(char* addr, size_t bytes, size_t alignment_hint, } // Uncommit the pages in a specified region. -void os::free_memory(char* addr, size_t bytes, size_t alignment_hint) { +void os::pd_free_memory(char* addr, size_t bytes, size_t alignment_hint) { if (madvise(addr, bytes, MADV_FREE) < 0) { debug_only(warning("MADV_FREE failed.")); return; } } -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { return os::commit_memory(addr, size); } @@ -2819,7 +2819,7 @@ bool os::remove_stack_guard_pages(char* addr, size_t size) { } // Change the page size in a given range. -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { assert((intptr_t)addr % alignment_hint == 0, "Address should be aligned."); assert((intptr_t)(addr + bytes) % alignment_hint == 0, "End should be aligned."); if (UseLargePages && UseMPSS) { @@ -3006,7 +3006,7 @@ char *os::scan_pages(char *start, char* end, page_info* page_expected, page_info return end; } -bool os::uncommit_memory(char* addr, size_t bytes) { +bool os::pd_uncommit_memory(char* addr, size_t bytes) { size_t size = bytes; // Map uncommitted pages PROT_NONE so we fail early if we touch an // uncommitted page. Otherwise, the read/write might succeed if we @@ -3045,7 +3045,7 @@ char* os::Solaris::anon_mmap(char* requested_addr, size_t bytes, size_t alignmen return mmap_chunk(addr, bytes, flags, PROT_NONE); } -char* os::reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { +char* os::pd_reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { char* addr = Solaris::anon_mmap(requested_addr, bytes, alignment_hint, (requested_addr != NULL)); guarantee(requested_addr == NULL || requested_addr == addr, @@ -3056,7 +3056,7 @@ char* os::reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hi // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { const int max_tries = 10; char* base[max_tries]; size_t size[max_tries]; @@ -3178,7 +3178,7 @@ char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { return (i < max_tries) ? requested_addr : NULL; } -bool os::release_memory(char* addr, size_t bytes) { +bool os::pd_release_memory(char* addr, size_t bytes) { size_t size = bytes; return munmap(addr, size) == 0; } @@ -4792,7 +4792,7 @@ bool isT2_libthread() { lwpSize = 16*1024; for (;;) { ::lseek64 (lwpFile, 0, SEEK_SET); - lwpArray = (prheader_t *)NEW_C_HEAP_ARRAY(char, lwpSize); + lwpArray = (prheader_t *)NEW_C_HEAP_ARRAY(char, lwpSize, mtInternal); if (::read(lwpFile, lwpArray, lwpSize) < 0) { if (ThreadPriorityVerbose) warning("Error reading /proc/self/lstatus\n"); break; @@ -4810,10 +4810,10 @@ bool isT2_libthread() { break; } lwpSize = lwpArray->pr_nent * lwpArray->pr_entsize; - FREE_C_HEAP_ARRAY(char, lwpArray); // retry. + FREE_C_HEAP_ARRAY(char, lwpArray, mtInternal); // retry. } - FREE_C_HEAP_ARRAY(char, lwpArray); + FREE_C_HEAP_ARRAY(char, lwpArray, mtInternal); ::close (lwpFile); if (ThreadPriorityVerbose) { if (isT2) tty->print_cr("We are running with a T2 libthread\n"); @@ -5137,9 +5137,9 @@ jint os::init_2(void) { UseNUMA = false; } else { size_t lgrp_limit = os::numa_get_groups_num(); - int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit); + int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit, mtInternal); size_t lgrp_num = os::numa_get_leaf_groups(lgrp_ids, lgrp_limit); - FREE_C_HEAP_ARRAY(int, lgrp_ids); + FREE_C_HEAP_ARRAY(int, lgrp_ids, mtInternal); if (lgrp_num < 2) { // There's only one locality group, disable NUMA. UseNUMA = false; @@ -5485,7 +5485,7 @@ int os::available(int fd, jlong *bytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { int prot; @@ -5517,7 +5517,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // same as map_memory() on this OS @@ -5527,7 +5527,7 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // Unmap a block of memory. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { return munmap(addr, bytes) == 0; } diff --git a/hotspot/src/os/solaris/vm/os_solaris.hpp b/hotspot/src/os/solaris/vm/os_solaris.hpp index 340aa4b7775..174f2529dbe 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.hpp +++ b/hotspot/src/os/solaris/vm/os_solaris.hpp @@ -346,7 +346,7 @@ class Solaris { }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _mutex is sole occupant of cache line volatile int _Event ; @@ -383,7 +383,7 @@ class PlatformEvent : public CHeapObj { void unpark () ; } ; -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: mutex_t _mutex [1] ; cond_t _cond [1] ; diff --git a/hotspot/src/os/solaris/vm/os_solaris.inline.hpp b/hotspot/src/os/solaris/vm/os_solaris.inline.hpp index 7b63badc434..2468100fc43 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.inline.hpp +++ b/hotspot/src/os/solaris/vm/os_solaris.inline.hpp @@ -71,7 +71,7 @@ inline bool os::allocate_stack_guard_pages() { // On Solaris, reservations are made on a page by page basis, nothing to do. -inline void os::split_reserved_memory(char *base, size_t size, +inline void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { } diff --git a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp index 1d1ff260cd8..c841ff8a1b6 100644 --- a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp +++ b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp @@ -128,7 +128,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } @@ -155,7 +155,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); @@ -248,7 +248,7 @@ static char* get_user_name(uid_t uid) { if (bufsize == -1) bufsize = 1024; - char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize); + char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); #ifdef _GNU_SOURCE struct passwd* p = NULL; @@ -269,14 +269,14 @@ static char* get_user_name(uid_t uid) { "pw_name zero length"); } } - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return NULL; } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1, mtInternal); strcpy(user_name, p->pw_name); - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return user_name; } @@ -319,7 +319,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -329,7 +329,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); @@ -337,7 +337,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -348,13 +348,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -363,7 +363,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { int result; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "/"); @@ -372,13 +372,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // don't follow symbolic links for the file RESTARTABLE(::lstat(filename, &statbuf), result); if (result == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if (!S_ISREG(statbuf.st_mode)) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -388,23 +388,23 @@ static char* get_user_name_slow(int vmid, TRAPS) { if (statbuf.st_ctime > oldest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user); - oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user, mtInternal); + oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(oldest_user, user); oldest_ctime = statbuf.st_ctime; } } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(oldest_user); } @@ -471,7 +471,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a NULL terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); snprintf(name, nbytes, "%s/%d", dirname, vmid); return name; @@ -509,7 +509,7 @@ static void remove_file(const char* path) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "/"); @@ -517,7 +517,7 @@ static void remove_file(const char* dirname, const char* filename) { remove_file(path); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } @@ -554,7 +554,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -593,7 +593,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // make the user specific temporary directory. Returns true if @@ -738,11 +738,11 @@ static char* mmap_create_shared(size_t size) { fd = create_sharedmem_resources(dirname, filename, size); - FREE_C_HEAP_ARRAY(char, user_name); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, user_name, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (fd == -1) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -758,7 +758,7 @@ static char* mmap_create_shared(size_t size) { warning("mmap failed - %s\n", strerror(errno)); } remove_file(filename); - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -884,7 +884,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor // store file, we don't follow them when attaching either. // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -899,9 +899,9 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor strcpy(rfilename, filename); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); // open the shared memory file for the give vmid fd = open_sharedmem_file(rfilename, file_flags, CHECK); diff --git a/hotspot/src/os/windows/vm/os_windows.cpp b/hotspot/src/os/windows/vm/os_windows.cpp index 440b8026233..5534a1ea0a1 100644 --- a/hotspot/src/os/windows/vm/os_windows.cpp +++ b/hotspot/src/os/windows/vm/os_windows.cpp @@ -96,7 +96,6 @@ #include #include // For _beginthreadex(), _endthreadex() #include // For os::dll_address_to_function_name - /* for enumerating dll libraries */ #include @@ -214,13 +213,13 @@ void os::init_system_properties_values() { } } - home_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + 1); + home_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + 1, mtInternal); if (home_path == NULL) return; strcpy(home_path, home_dir); Arguments::set_java_home(home_path); - dll_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + strlen(bin) + 1); + dll_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + strlen(bin) + 1, mtInternal); if (dll_path == NULL) return; strcpy(dll_path, home_dir); @@ -251,7 +250,7 @@ void os::init_system_properties_values() { char *path_str = ::getenv("PATH"); library_path = NEW_C_HEAP_ARRAY(char, MAX_PATH * 5 + sizeof(PACKAGE_DIR) + - sizeof(BIN_DIR) + (path_str ? strlen(path_str) : 0) + 10); + sizeof(BIN_DIR) + (path_str ? strlen(path_str) : 0) + 10, mtInternal); library_path[0] = '\0'; @@ -280,7 +279,7 @@ void os::init_system_properties_values() { strcat(library_path, ";."); Arguments::set_library_path(library_path); - FREE_C_HEAP_ARRAY(char, library_path); + FREE_C_HEAP_ARRAY(char, library_path, mtInternal); } /* Default extensions directory */ @@ -300,7 +299,7 @@ void os::init_system_properties_values() { { #define ENDORSED_DIR "\\lib\\endorsed" size_t len = strlen(Arguments::get_java_home()) + sizeof(ENDORSED_DIR); - char * buf = NEW_C_HEAP_ARRAY(char, len); + char * buf = NEW_C_HEAP_ARRAY(char, len, mtInternal); sprintf(buf, "%s%s", Arguments::get_java_home(), ENDORSED_DIR); Arguments::set_endorsed_dirs(buf); #undef ENDORSED_DIR @@ -324,6 +323,23 @@ extern "C" void breakpoint() { os::breakpoint(); } +/* + * RtlCaptureStackBackTrace Windows API may not exist prior to Windows XP. + * So far, this method is only used by Native Memory Tracking, which is + * only supported on Windows XP or later. + */ +address os::get_caller_pc(int n) { +#ifdef _NMT_NOINLINE_ + n ++; +#endif + address pc; + if (os::Kernel32Dll::RtlCaptureStackBackTrace(n + 1, 1, (PVOID*)&pc, NULL) == 1) { + return pc; + } + return NULL; +} + + // os::current_stack_base() // // Returns the base of the stack, which is the stack's @@ -1014,7 +1030,7 @@ DIR * os::opendir(const char *dirname) { assert(dirname != NULL, "just checking"); // hotspot change - DIR *dirp = (DIR *)malloc(sizeof(DIR)); + DIR *dirp = (DIR *)malloc(sizeof(DIR), mtInternal); DWORD fattr; // hotspot change char alt_dirname[4] = { 0, 0, 0, 0 }; @@ -1036,9 +1052,9 @@ os::opendir(const char *dirname) dirname = alt_dirname; } - dirp->path = (char *)malloc(strlen(dirname) + 5); + dirp->path = (char *)malloc(strlen(dirname) + 5, mtInternal); if (dirp->path == 0) { - free(dirp); + free(dirp, mtInternal); errno = ENOMEM; return 0; } @@ -1046,13 +1062,13 @@ os::opendir(const char *dirname) fattr = GetFileAttributes(dirp->path); if (fattr == 0xffffffff) { - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); errno = ENOENT; return 0; } else if ((fattr & FILE_ATTRIBUTE_DIRECTORY) == 0) { - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); errno = ENOTDIR; return 0; } @@ -1070,8 +1086,8 @@ os::opendir(const char *dirname) dirp->handle = FindFirstFile(dirp->path, &dirp->find_data); if (dirp->handle == INVALID_HANDLE_VALUE) { if (GetLastError() != ERROR_FILE_NOT_FOUND) { - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); errno = EACCES; return 0; } @@ -1114,8 +1130,8 @@ os::closedir(DIR *dirp) } dirp->handle = INVALID_HANDLE_VALUE; } - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); return 0; } @@ -1176,11 +1192,11 @@ void os::dll_build_name(char *buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { jio_snprintf(buffer, buflen, "%s\\%s.dll", pname, fname); @@ -2637,7 +2653,7 @@ private: void free_node_list() { if (_numa_used_node_list != NULL) { - FREE_C_HEAP_ARRAY(int, _numa_used_node_list); + FREE_C_HEAP_ARRAY(int, _numa_used_node_list, mtInternal); } } @@ -2659,7 +2675,7 @@ public: ULONG highest_node_number; if (!os::Kernel32Dll::GetNumaHighestNodeNumber(&highest_node_number)) return false; free_node_list(); - _numa_used_node_list = NEW_C_HEAP_ARRAY(int, highest_node_number + 1); + _numa_used_node_list = NEW_C_HEAP_ARRAY(int, highest_node_number + 1, mtInternal); for (unsigned int i = 0; i <= highest_node_number; i++) { ULONGLONG proc_mask_numa_node; if (!os::Kernel32Dll::GetNumaNodeProcessorMask(i, &proc_mask_numa_node)) return false; @@ -2918,7 +2934,7 @@ void os::large_page_init() { // On win32, one cannot release just a part of reserved memory, it's an // all or nothing deal. When we split a reservation, we must break the // reservation into two reservations. -void os::split_reserved_memory(char *base, size_t size, size_t split, +void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { if (size > 0) { release_memory(base, size); @@ -2931,7 +2947,7 @@ void os::split_reserved_memory(char *base, size_t size, size_t split, } } -char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { +char* os::pd_reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { assert((size_t)addr % os::vm_allocation_granularity() == 0, "reserve alignment"); assert(bytes % os::vm_allocation_granularity() == 0, "reserve block size"); @@ -2964,7 +2980,7 @@ char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { // Windows os::reserve_memory() fails of the requested address range is // not avilable. return reserve_memory(bytes, requested_addr); @@ -3027,7 +3043,7 @@ bool os::release_memory_special(char* base, size_t bytes) { void os::print_statistics() { } -bool os::commit_memory(char* addr, size_t bytes, bool exec) { +bool os::pd_commit_memory(char* addr, size_t bytes, bool exec) { if (bytes == 0) { // Don't bother the OS with noops. return true; @@ -3075,26 +3091,26 @@ bool os::commit_memory(char* addr, size_t bytes, bool exec) { return true; } -bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, bool exec) { return commit_memory(addr, size, exec); } -bool os::uncommit_memory(char* addr, size_t bytes) { +bool os::pd_uncommit_memory(char* addr, size_t bytes) { if (bytes == 0) { // Don't bother the OS with noops. return true; } assert((size_t) addr % os::vm_page_size() == 0, "uncommit on page boundaries"); assert(bytes % os::vm_page_size() == 0, "uncommit in page-sized chunks"); - return VirtualFree(addr, bytes, MEM_DECOMMIT) != 0; + return (VirtualFree(addr, bytes, MEM_DECOMMIT) != 0); } -bool os::release_memory(char* addr, size_t bytes) { +bool os::pd_release_memory(char* addr, size_t bytes) { return VirtualFree(addr, 0, MEM_RELEASE) != 0; } -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { return os::commit_memory(addr, size); } @@ -3141,8 +3157,8 @@ bool os::unguard_memory(char* addr, size_t bytes) { return VirtualProtect(addr, bytes, PAGE_READWRITE, &old_status) != 0; } -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { } -void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { } +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { } +void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { } void os::numa_make_global(char *addr, size_t bytes) { } void os::numa_make_local(char *addr, size_t bytes, int lgrp_hint) { } bool os::numa_topology_changed() { return false; } @@ -4276,14 +4292,14 @@ static int stdinAvailable(int fd, long *pbytes) { numEvents = MAX_INPUT_EVENTS; } - lpBuffer = (INPUT_RECORD *)os::malloc(numEvents * sizeof(INPUT_RECORD)); + lpBuffer = (INPUT_RECORD *)os::malloc(numEvents * sizeof(INPUT_RECORD), mtInternal); if (lpBuffer == NULL) { return FALSE; } error = ::PeekConsoleInput(han, lpBuffer, numEvents, &numEventsRead); if (error == 0) { - os::free(lpBuffer); + os::free(lpBuffer, mtInternal); return FALSE; } @@ -4304,7 +4320,7 @@ static int stdinAvailable(int fd, long *pbytes) { } if(lpBuffer != NULL) { - os::free(lpBuffer); + os::free(lpBuffer, mtInternal); } *pbytes = (long) actualLength; @@ -4312,7 +4328,7 @@ static int stdinAvailable(int fd, long *pbytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { HANDLE hFile; @@ -4432,7 +4448,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // This OS does not allow existing memory maps to be remapped so we @@ -4445,15 +4461,15 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // call above and the map_memory() call below where a thread in native // code may be able to access an address that is no longer mapped. - return os::map_memory(fd, file_name, file_offset, addr, bytes, read_only, - allow_exec); + return os::map_memory(fd, file_name, file_offset, addr, bytes, + read_only, allow_exec); } // Unmap a block of memory. // Returns true=success, otherwise false. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { BOOL result = UnmapViewOfFile(addr); if (result == 0) { if (PrintMiscellaneous && Verbose) { @@ -4931,11 +4947,15 @@ typedef SIZE_T (WINAPI* GetLargePageMinimum_Fn)(void); typedef LPVOID (WINAPI *VirtualAllocExNuma_Fn) (HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD); typedef BOOL (WINAPI *GetNumaHighestNodeNumber_Fn) (PULONG); typedef BOOL (WINAPI *GetNumaNodeProcessorMask_Fn) (UCHAR, PULONGLONG); +typedef USHORT (WINAPI* RtlCaptureStackBackTrace_Fn)(ULONG, ULONG, PVOID*, PULONG); GetLargePageMinimum_Fn os::Kernel32Dll::_GetLargePageMinimum = NULL; VirtualAllocExNuma_Fn os::Kernel32Dll::_VirtualAllocExNuma = NULL; GetNumaHighestNodeNumber_Fn os::Kernel32Dll::_GetNumaHighestNodeNumber = NULL; GetNumaNodeProcessorMask_Fn os::Kernel32Dll::_GetNumaNodeProcessorMask = NULL; +RtlCaptureStackBackTrace_Fn os::Kernel32Dll::_RtlCaptureStackBackTrace = NULL; + + BOOL os::Kernel32Dll::initialized = FALSE; SIZE_T os::Kernel32Dll::GetLargePageMinimum() { assert(initialized && _GetLargePageMinimum != NULL, @@ -4978,6 +4998,19 @@ BOOL os::Kernel32Dll::GetNumaNodeProcessorMask(UCHAR node, PULONGLONG proc_mask) return _GetNumaNodeProcessorMask(node, proc_mask); } +USHORT os::Kernel32Dll::RtlCaptureStackBackTrace(ULONG FrameToSkip, + ULONG FrameToCapture, PVOID* BackTrace, PULONG BackTraceHash) { + if (!initialized) { + initialize(); + } + + if (_RtlCaptureStackBackTrace != NULL) { + return _RtlCaptureStackBackTrace(FrameToSkip, FrameToCapture, + BackTrace, BackTraceHash); + } else { + return 0; + } +} void os::Kernel32Dll::initializeCommon() { if (!initialized) { @@ -4987,6 +5020,7 @@ void os::Kernel32Dll::initializeCommon() { _VirtualAllocExNuma = (VirtualAllocExNuma_Fn)::GetProcAddress(handle, "VirtualAllocExNuma"); _GetNumaHighestNodeNumber = (GetNumaHighestNodeNumber_Fn)::GetProcAddress(handle, "GetNumaHighestNodeNumber"); _GetNumaNodeProcessorMask = (GetNumaNodeProcessorMask_Fn)::GetProcAddress(handle, "GetNumaNodeProcessorMask"); + _RtlCaptureStackBackTrace = (RtlCaptureStackBackTrace_Fn)::GetProcAddress(handle, "RtlCaptureStackBackTrace"); initialized = TRUE; } } @@ -5101,7 +5135,6 @@ Module32First_Fn os::Kernel32Dll::_Module32First = NULL; Module32Next_Fn os::Kernel32Dll::_Module32Next = NULL; GetNativeSystemInfo_Fn os::Kernel32Dll::_GetNativeSystemInfo = NULL; - void os::Kernel32Dll::initialize() { if (!initialized) { HMODULE handle = ::GetModuleHandle("Kernel32.dll"); @@ -5179,8 +5212,6 @@ void os::Kernel32Dll::GetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo) { _GetNativeSystemInfo(lpSystemInfo); } - - // PSAPI API diff --git a/hotspot/src/os/windows/vm/os_windows.hpp b/hotspot/src/os/windows/vm/os_windows.hpp index e0692e5f2f7..33ea7064ba6 100644 --- a/hotspot/src/os/windows/vm/os_windows.hpp +++ b/hotspot/src/os/windows/vm/os_windows.hpp @@ -98,7 +98,7 @@ class win32 { static LONG WINAPI serialize_fault_filter(struct _EXCEPTION_POINTERS* e); }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _Event is sole occupant of cache line volatile int _Event ; @@ -124,7 +124,7 @@ class PlatformEvent : public CHeapObj { -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: HANDLE _ParkEvent ; @@ -182,6 +182,9 @@ public: static BOOL GetNumaHighestNodeNumber(PULONG); static BOOL GetNumaNodeProcessorMask(UCHAR, PULONGLONG); + // Stack walking + static USHORT RtlCaptureStackBackTrace(ULONG, ULONG, PVOID*, PULONG); + private: // GetLargePageMinimum available on Windows Vista/Windows Server 2003 // and later @@ -191,6 +194,7 @@ private: static LPVOID (WINAPI *_VirtualAllocExNuma) (HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD); static BOOL (WINAPI *_GetNumaHighestNodeNumber) (PULONG); static BOOL (WINAPI *_GetNumaNodeProcessorMask) (UCHAR, PULONGLONG); + static USHORT (WINAPI *_RtlCaptureStackBackTrace)(ULONG, ULONG, PVOID*, PULONG); static BOOL initialized; static void initialize(); diff --git a/hotspot/src/os/windows/vm/perfMemory_windows.cpp b/hotspot/src/os/windows/vm/perfMemory_windows.cpp index 4f3280d5906..2358171b78a 100644 --- a/hotspot/src/os/windows/vm/perfMemory_windows.cpp +++ b/hotspot/src/os/windows/vm/perfMemory_windows.cpp @@ -120,7 +120,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } // Shared Memory Implementation Details @@ -157,7 +157,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory _snprintf(dirname, nbytes, "%s\\%s_%s", tmpdir, perfdir, user); @@ -281,7 +281,7 @@ static char* get_user_name() { } } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(user_name, user); return user_name; @@ -315,7 +315,7 @@ static char* get_user_name_slow(int vmid) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -325,7 +325,7 @@ static char* get_user_name_slow(int vmid) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "\\"); strcat(usrdir_name, dentry->d_name); @@ -333,7 +333,7 @@ static char* get_user_name_slow(int vmid) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -344,13 +344,13 @@ static char* get_user_name_slow(int vmid) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -358,20 +358,20 @@ static char* get_user_name_slow(int vmid) { struct stat statbuf; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "\\"); strcat(filename, udentry->d_name); if (::stat(filename, &statbuf) == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if ((statbuf.st_mode & S_IFMT) != S_IFREG) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -393,22 +393,22 @@ static char* get_user_name_slow(int vmid) { if (statbuf.st_ctime > latest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (latest_user != NULL) FREE_C_HEAP_ARRAY(char, latest_user); - latest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (latest_user != NULL) FREE_C_HEAP_ARRAY(char, latest_user, mtInternal); + latest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(latest_user, user); latest_ctime = statbuf.st_ctime; } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(latest_user); } @@ -453,7 +453,7 @@ static char *get_sharedmem_objectname(const char* user, int vmid) { // about a name containing a '-' characters. // nbytes += UINT_CHARS; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); _snprintf(name, nbytes, "%s_%s_%u", PERFDATA_NAME, user, vmid); return name; @@ -469,7 +469,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a null terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); _snprintf(name, nbytes, "%s\\%d", dirname, vmid); return name; @@ -485,7 +485,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "\\"); @@ -500,7 +500,7 @@ static void remove_file(const char* dirname, const char* filename) { } } - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } // returns true if the process represented by pid is alive, otherwise @@ -638,7 +638,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -681,7 +681,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // create a file mapping object with the requested name, and size @@ -747,11 +747,11 @@ static void free_security_desc(PSECURITY_DESCRIPTOR pSD) { // be an ACL we enlisted. free the resources. // if (success && exists && pACL != NULL && !isdefault) { - FREE_C_HEAP_ARRAY(char, pACL); + FREE_C_HEAP_ARRAY(char, pACL, mtInternal); } // free the security descriptor - FREE_C_HEAP_ARRAY(char, pSD); + FREE_C_HEAP_ARRAY(char, pSD, mtInternal); } } @@ -766,7 +766,7 @@ static void free_security_attr(LPSECURITY_ATTRIBUTES lpSA) { lpSA->lpSecurityDescriptor = NULL; // free the security attributes structure - FREE_C_HEAP_ARRAY(char, lpSA); + FREE_C_HEAP_ARRAY(char, lpSA, mtInternal); } } @@ -805,7 +805,7 @@ static PSID get_user_sid(HANDLE hProcess) { } } - token_buf = (PTOKEN_USER) NEW_C_HEAP_ARRAY(char, rsize); + token_buf = (PTOKEN_USER) NEW_C_HEAP_ARRAY(char, rsize, mtInternal); // get the user token information if (!GetTokenInformation(hAccessToken, TokenUser, token_buf, rsize, &rsize)) { @@ -813,28 +813,28 @@ static PSID get_user_sid(HANDLE hProcess) { warning("GetTokenInformation failure: lasterror = %d," " rsize = %d\n", GetLastError(), rsize); } - FREE_C_HEAP_ARRAY(char, token_buf); + FREE_C_HEAP_ARRAY(char, token_buf, mtInternal); CloseHandle(hAccessToken); return NULL; } DWORD nbytes = GetLengthSid(token_buf->User.Sid); - PSID pSID = NEW_C_HEAP_ARRAY(char, nbytes); + PSID pSID = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); if (!CopySid(nbytes, pSID, token_buf->User.Sid)) { if (PrintMiscellaneous && Verbose) { warning("GetTokenInformation failure: lasterror = %d," " rsize = %d\n", GetLastError(), rsize); } - FREE_C_HEAP_ARRAY(char, token_buf); - FREE_C_HEAP_ARRAY(char, pSID); + FREE_C_HEAP_ARRAY(char, token_buf, mtInternal); + FREE_C_HEAP_ARRAY(char, pSID, mtInternal); CloseHandle(hAccessToken); return NULL; } // close the access token. CloseHandle(hAccessToken); - FREE_C_HEAP_ARRAY(char, token_buf); + FREE_C_HEAP_ARRAY(char, token_buf, mtInternal); return pSID; } @@ -912,13 +912,13 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, } // create the new ACL - newACL = (PACL) NEW_C_HEAP_ARRAY(char, newACLsize); + newACL = (PACL) NEW_C_HEAP_ARRAY(char, newACLsize, mtInternal); if (!InitializeAcl(newACL, newACLsize, ACL_REVISION)) { if (PrintMiscellaneous && Verbose) { warning("InitializeAcl failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } @@ -931,7 +931,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("InitializeAcl failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } if (((ACCESS_ALLOWED_ACE *)ace)->Header.AceFlags && INHERITED_ACE) { @@ -958,7 +958,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("AddAce failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } } @@ -974,7 +974,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, warning("AddAccessAllowedAce failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } } @@ -989,7 +989,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("InitializeAcl failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } if (!AddAce(newACL, ACL_REVISION, MAXDWORD, ace, @@ -997,7 +997,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("AddAce failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } ace_index++; @@ -1010,7 +1010,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, warning("SetSecurityDescriptorDacl failure:" " lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } @@ -1030,7 +1030,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, warning("SetSecurityDescriptorControl failure:" " lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } } @@ -1054,7 +1054,7 @@ static LPSECURITY_ATTRIBUTES make_security_attr(ace_data_t aces[], int count) { // allocate space for a security descriptor PSECURITY_DESCRIPTOR pSD = (PSECURITY_DESCRIPTOR) - NEW_C_HEAP_ARRAY(char, SECURITY_DESCRIPTOR_MIN_LENGTH); + NEW_C_HEAP_ARRAY(char, SECURITY_DESCRIPTOR_MIN_LENGTH, mtInternal); // initialize the security descriptor if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)) { @@ -1076,7 +1076,7 @@ static LPSECURITY_ATTRIBUTES make_security_attr(ace_data_t aces[], int count) { // return it to the caller. // LPSECURITY_ATTRIBUTES lpSA = (LPSECURITY_ATTRIBUTES) - NEW_C_HEAP_ARRAY(char, sizeof(SECURITY_ATTRIBUTES)); + NEW_C_HEAP_ARRAY(char, sizeof(SECURITY_ATTRIBUTES), mtInternal); lpSA->nLength = sizeof(SECURITY_ATTRIBUTES); lpSA->lpSecurityDescriptor = pSD; lpSA->bInheritHandle = FALSE; @@ -1147,7 +1147,7 @@ static LPSECURITY_ATTRIBUTES make_user_everybody_admin_security_attr( // create a security attributes structure with access control // entries as initialized above. LPSECURITY_ATTRIBUTES lpSA = make_security_attr(aces, 3); - FREE_C_HEAP_ARRAY(char, aces[0].pSid); + FREE_C_HEAP_ARRAY(char, aces[0].pSid, mtInternal); FreeSid(everybodySid); FreeSid(administratorsSid); return(lpSA); @@ -1462,15 +1462,15 @@ static char* mapping_create_shared(size_t size) { assert(((size != 0) && (size % os::vm_page_size() == 0)), "unexpected PerfMemry region size"); - FREE_C_HEAP_ARRAY(char, user); + FREE_C_HEAP_ARRAY(char, user, mtInternal); // create the shared memory resources sharedmem_fileMapHandle = create_sharedmem_resources(dirname, filename, objectname, size); - FREE_C_HEAP_ARRAY(char, filename); - FREE_C_HEAP_ARRAY(char, objectname); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); + FREE_C_HEAP_ARRAY(char, objectname, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (sharedmem_fileMapHandle == NULL) { return NULL; @@ -1621,7 +1621,7 @@ static void open_file_mapping(const char* user, int vmid, // store file, we also don't following them when attaching // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -1640,10 +1640,10 @@ static void open_file_mapping(const char* user, int vmid, strcpy(robjectname, objectname); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); - FREE_C_HEAP_ARRAY(char, objectname); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); + FREE_C_HEAP_ARRAY(char, objectname, mtInternal); if (*sizep == 0) { size = sharedmem_filesize(rfilename, CHECK); diff --git a/hotspot/src/share/vm/asm/codeBuffer.cpp b/hotspot/src/share/vm/asm/codeBuffer.cpp index f52b942df2c..8235786b40a 100644 --- a/hotspot/src/share/vm/asm/codeBuffer.cpp +++ b/hotspot/src/share/vm/asm/codeBuffer.cpp @@ -261,7 +261,7 @@ address CodeBuffer::decode_begin() { GrowableArray* CodeBuffer::create_patch_overflow() { if (_overflow_arena == NULL) { - _overflow_arena = new Arena(); + _overflow_arena = new (mtCode) Arena(); } return new (_overflow_arena) GrowableArray(_overflow_arena, 8, 0, 0); } @@ -910,7 +910,7 @@ void CodeBuffer::block_comment(intptr_t offset, const char * comment) { _comments.add_comment(offset, comment); } -class CodeComment: public CHeapObj { +class CodeComment: public CHeapObj { private: friend class CodeComments; intptr_t _offset; @@ -919,13 +919,13 @@ class CodeComment: public CHeapObj { ~CodeComment() { assert(_next == NULL, "wrong interface for freeing list"); - os::free((void*)_comment); + os::free((void*)_comment, mtCode); } public: CodeComment(intptr_t offset, const char * comment) { _offset = offset; - _comment = os::strdup(comment); + _comment = os::strdup(comment, mtCode); _next = NULL; } diff --git a/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp b/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp index 4964ebd683e..66a7e225ebd 100644 --- a/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp +++ b/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp @@ -33,7 +33,7 @@ #ifndef PRODUCT -class CFGPrinterOutput : public CHeapObj { +class CFGPrinterOutput : public CHeapObj { private: outputStream* _output; @@ -106,7 +106,7 @@ void CFGPrinter::print_intervals(IntervalList* intervals, const char* name) { CFGPrinterOutput::CFGPrinterOutput() - : _output(new(ResourceObj::C_HEAP) fileStream("output.cfg")) + : _output(new(ResourceObj::C_HEAP, mtCompiler) fileStream("output.cfg")) { } diff --git a/hotspot/src/share/vm/c1/c1_Compiler.cpp b/hotspot/src/share/vm/c1/c1_Compiler.cpp index 41b5eb572e6..7e55ce30fd6 100644 --- a/hotspot/src/share/vm/c1/c1_Compiler.cpp +++ b/hotspot/src/share/vm/c1/c1_Compiler.cpp @@ -55,7 +55,7 @@ Compiler::~Compiler() { void Compiler::initialize_all() { BufferBlob* buffer_blob = CompilerThread::current()->get_buffer_blob(); - Arena* arena = new Arena(); + Arena* arena = new (mtCompiler) Arena(); Runtime1::initialize(buffer_blob); FrameMap::initialize(); // initialize data structures diff --git a/hotspot/src/share/vm/c1/c1_LinearScan.cpp b/hotspot/src/share/vm/c1/c1_LinearScan.cpp index 56f94636586..bd4061ec787 100644 --- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp +++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp @@ -2467,12 +2467,12 @@ void LinearScan::compute_oop_map(IntervalWalker* iw, const LIR_OpVisitState &vis // Allocate them with new so they are never destroyed (otherwise, a // forced exit could destroy these objects while they are still in // use). -ConstantOopWriteValue* LinearScan::_oop_null_scope_value = new (ResourceObj::C_HEAP) ConstantOopWriteValue(NULL); -ConstantIntValue* LinearScan::_int_m1_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(-1); -ConstantIntValue* LinearScan::_int_0_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(0); -ConstantIntValue* LinearScan::_int_1_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(1); -ConstantIntValue* LinearScan::_int_2_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(2); -LocationValue* _illegal_value = new (ResourceObj::C_HEAP) LocationValue(Location()); +ConstantOopWriteValue* LinearScan::_oop_null_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantOopWriteValue(NULL); +ConstantIntValue* LinearScan::_int_m1_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(-1); +ConstantIntValue* LinearScan::_int_0_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(0); +ConstantIntValue* LinearScan::_int_1_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(1); +ConstantIntValue* LinearScan::_int_2_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(2); +LocationValue* _illegal_value = new (ResourceObj::C_HEAP, mtCompiler) LocationValue(Location()); void LinearScan::init_compute_debug_info() { // cache for frequently used scope values diff --git a/hotspot/src/share/vm/ci/ciObjectFactory.cpp b/hotspot/src/share/vm/ci/ciObjectFactory.cpp index 9aa6b261118..a68fb1259ce 100644 --- a/hotspot/src/share/vm/ci/ciObjectFactory.cpp +++ b/hotspot/src/share/vm/ci/ciObjectFactory.cpp @@ -111,7 +111,7 @@ void ciObjectFactory::initialize() { // This Arena is long lived and exists in the resource mark of the // compiler thread that initializes the initial ciObjectFactory which // creates the shared ciObjects that all later ciObjectFactories use. - Arena* arena = new Arena(); + Arena* arena = new (mtCompiler) Arena(); ciEnv initial(arena); ciEnv* env = ciEnv::current(); env->_factory->init_shared_objects(); diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp index b2330e61e37..1be1c7bf19c 100644 --- a/hotspot/src/share/vm/classfile/classFileParser.cpp +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp @@ -1368,7 +1368,7 @@ class Classfile_LVT_Element VALUE_OBJ_CLASS_SPEC { }; -class LVT_Hash: public CHeapObj { +class LVT_Hash: public CHeapObj { public: LocalVariableTableElement *_elem; // element LVT_Hash* _next; // Next entry in hash table diff --git a/hotspot/src/share/vm/classfile/classLoader.cpp b/hotspot/src/share/vm/classfile/classLoader.cpp index df42dc75d42..a2e61a4ad3b 100644 --- a/hotspot/src/share/vm/classfile/classLoader.cpp +++ b/hotspot/src/share/vm/classfile/classLoader.cpp @@ -153,7 +153,7 @@ MetaIndex::MetaIndex(char** meta_package_names, int num_meta_package_names) { _meta_package_names = NULL; _num_meta_package_names = 0; } else { - _meta_package_names = NEW_C_HEAP_ARRAY(char*, num_meta_package_names); + _meta_package_names = NEW_C_HEAP_ARRAY(char*, num_meta_package_names, mtClass); _num_meta_package_names = num_meta_package_names; memcpy(_meta_package_names, meta_package_names, num_meta_package_names * sizeof(char*)); } @@ -161,7 +161,7 @@ MetaIndex::MetaIndex(char** meta_package_names, int num_meta_package_names) { MetaIndex::~MetaIndex() { - FREE_C_HEAP_ARRAY(char*, _meta_package_names); + FREE_C_HEAP_ARRAY(char*, _meta_package_names, mtClass); } @@ -192,7 +192,7 @@ bool ClassPathEntry::is_lazy() { } ClassPathDirEntry::ClassPathDirEntry(char* dir) : ClassPathEntry() { - _dir = NEW_C_HEAP_ARRAY(char, strlen(dir)+1); + _dir = NEW_C_HEAP_ARRAY(char, strlen(dir)+1, mtClass); strcpy(_dir, dir); } @@ -229,7 +229,7 @@ ClassFileStream* ClassPathDirEntry::open_stream(const char* name) { ClassPathZipEntry::ClassPathZipEntry(jzfile* zip, const char* zip_name) : ClassPathEntry() { _zip = zip; - _zip_name = NEW_C_HEAP_ARRAY(char, strlen(zip_name)+1); + _zip_name = NEW_C_HEAP_ARRAY(char, strlen(zip_name)+1, mtClass); strcpy(_zip_name, zip_name); } @@ -237,7 +237,7 @@ ClassPathZipEntry::~ClassPathZipEntry() { if (ZipClose != NULL) { (*ZipClose)(_zip); } - FREE_C_HEAP_ARRAY(char, _zip_name); + FREE_C_HEAP_ARRAY(char, _zip_name, mtClass); } ClassFileStream* ClassPathZipEntry::open_stream(const char* name) { @@ -454,11 +454,11 @@ void ClassLoader::setup_bootstrap_search_path() { while (sys_class_path[end] && sys_class_path[end] != os::path_separator()[0]) { end++; } - char* path = NEW_C_HEAP_ARRAY(char, end-start+1); + char* path = NEW_C_HEAP_ARRAY(char, end-start+1, mtClass); strncpy(path, &sys_class_path[start], end-start); path[end-start] = '\0'; update_class_path_entry_list(path, false); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtClass); while (sys_class_path[end] == os::path_separator()[0]) { end++; } @@ -652,13 +652,13 @@ void ClassLoader::load_zip_library() { // in the classpath must be the same files, in the same order, even // though the exact name is not the same. -class PackageInfo: public BasicHashtableEntry { +class PackageInfo: public BasicHashtableEntry { public: const char* _pkgname; // Package name int _classpath_index; // Index of directory or JAR file loaded from PackageInfo* next() { - return (PackageInfo*)BasicHashtableEntry::next(); + return (PackageInfo*)BasicHashtableEntry::next(); } const char* pkgname() { return _pkgname; } @@ -674,7 +674,7 @@ public: }; -class PackageHashtable : public BasicHashtable { +class PackageHashtable : public BasicHashtable { private: inline unsigned int compute_hash(const char *s, int n) { unsigned int val = 0; @@ -685,7 +685,7 @@ private: } PackageInfo* bucket(int index) { - return (PackageInfo*)BasicHashtable::bucket(index); + return (PackageInfo*)BasicHashtable::bucket(index); } PackageInfo* get_entry(int index, unsigned int hash, @@ -702,10 +702,10 @@ private: public: PackageHashtable(int table_size) - : BasicHashtable(table_size, sizeof(PackageInfo)) {} + : BasicHashtable(table_size, sizeof(PackageInfo)) {} - PackageHashtable(int table_size, HashtableBucket* t, int number_of_entries) - : BasicHashtable(table_size, sizeof(PackageInfo), t, number_of_entries) {} + PackageHashtable(int table_size, HashtableBucket* t, int number_of_entries) + : BasicHashtable(table_size, sizeof(PackageInfo), t, number_of_entries) {} PackageInfo* get_entry(const char* pkgname, int n) { unsigned int hash = compute_hash(pkgname, n); @@ -715,14 +715,14 @@ public: PackageInfo* new_entry(char* pkgname, int n) { unsigned int hash = compute_hash(pkgname, n); PackageInfo* pp; - pp = (PackageInfo*)BasicHashtable::new_entry(hash); + pp = (PackageInfo*)BasicHashtable::new_entry(hash); pp->set_pkgname(pkgname); return pp; } void add_entry(PackageInfo* pp) { int index = hash_to_index(pp->hash()); - BasicHashtable::add_entry(index, pp); + BasicHashtable::add_entry(index, pp); } void copy_pkgnames(const char** packages) { @@ -742,7 +742,7 @@ public: void PackageHashtable::copy_table(char** top, char* end, PackageHashtable* table) { // Copy (relocate) the table to the shared space. - BasicHashtable::copy_table(top, end); + BasicHashtable::copy_table(top, end); // Calculate the space needed for the package name strings. int i; @@ -815,7 +815,7 @@ bool ClassLoader::add_package(const char *pkgname, int classpath_index, TRAPS) { // Package prefix found int n = cp - pkgname + 1; - char* new_pkgname = NEW_C_HEAP_ARRAY(char, n + 1); + char* new_pkgname = NEW_C_HEAP_ARRAY(char, n + 1, mtClass); if (new_pkgname == NULL) { return false; } @@ -929,10 +929,10 @@ instanceKlassHandle ClassLoader::load_classfile(Symbol* h_name, TRAPS) { } -void ClassLoader::create_package_info_table(HashtableBucket *t, int length, +void ClassLoader::create_package_info_table(HashtableBucket *t, int length, int number_of_entries) { assert(_package_hash_table == NULL, "One package info table allowed."); - assert(length == package_hash_table_size * sizeof(HashtableBucket), + assert(length == package_hash_table_size * sizeof(HashtableBucket), "bad shared package info size."); _package_hash_table = new PackageHashtable(package_hash_table_size, t, number_of_entries); diff --git a/hotspot/src/share/vm/classfile/classLoader.hpp b/hotspot/src/share/vm/classfile/classLoader.hpp index 6f816837ae7..ee58550b61e 100644 --- a/hotspot/src/share/vm/classfile/classLoader.hpp +++ b/hotspot/src/share/vm/classfile/classLoader.hpp @@ -33,7 +33,7 @@ // Meta-index (optional, to be able to skip opening boot classpath jar files) -class MetaIndex: public CHeapObj { +class MetaIndex: public CHeapObj { private: char** _meta_package_names; int _num_meta_package_names; @@ -46,7 +46,7 @@ class MetaIndex: public CHeapObj { // Class path entry (directory or zip file) -class ClassPathEntry: public CHeapObj { +class ClassPathEntry: public CHeapObj { private: ClassPathEntry* _next; public: @@ -141,7 +141,7 @@ class LazyClassPathEntry: public ClassPathEntry { class PackageHashtable; class PackageInfo; -class HashtableBucket; +template class HashtableBucket; class ClassLoader: AllStatic { public: @@ -299,7 +299,7 @@ class ClassLoader: AllStatic { // Initialization static void initialize(); static void create_package_info_table(); - static void create_package_info_table(HashtableBucket *t, int length, + static void create_package_info_table(HashtableBucket *t, int length, int number_of_entries); static int compute_Object_vtable(); diff --git a/hotspot/src/share/vm/classfile/dictionary.cpp b/hotspot/src/share/vm/classfile/dictionary.cpp index 4458f46d7a9..78e76cc1f67 100644 --- a/hotspot/src/share/vm/classfile/dictionary.cpp +++ b/hotspot/src/share/vm/classfile/dictionary.cpp @@ -36,16 +36,16 @@ int Dictionary::_current_class_index = 0; Dictionary::Dictionary(int table_size) - : TwoOopHashtable(table_size, sizeof(DictionaryEntry)) { + : TwoOopHashtable(table_size, sizeof(DictionaryEntry)) { _current_class_index = 0; _current_class_entry = NULL; }; -Dictionary::Dictionary(int table_size, HashtableBucket* t, +Dictionary::Dictionary(int table_size, HashtableBucket* t, int number_of_entries) - : TwoOopHashtable(table_size, sizeof(DictionaryEntry), t, number_of_entries) { + : TwoOopHashtable(table_size, sizeof(DictionaryEntry), t, number_of_entries) { _current_class_index = 0; _current_class_entry = NULL; }; @@ -54,7 +54,7 @@ Dictionary::Dictionary(int table_size, HashtableBucket* t, DictionaryEntry* Dictionary::new_entry(unsigned int hash, klassOop klass, oop loader) { DictionaryEntry* entry; - entry = (DictionaryEntry*)Hashtable::new_entry(hash, klass); + entry = (DictionaryEntry*)Hashtable::new_entry(hash, klass); entry->set_loader(loader); entry->set_pd_set(NULL); return entry; @@ -62,7 +62,7 @@ DictionaryEntry* Dictionary::new_entry(unsigned int hash, klassOop klass, DictionaryEntry* Dictionary::new_entry() { - DictionaryEntry* entry = (DictionaryEntry*)Hashtable::new_entry(0L, NULL); + DictionaryEntry* entry = (DictionaryEntry*)Hashtable::new_entry(0L, NULL); entry->set_loader(NULL); entry->set_pd_set(NULL); return entry; @@ -76,7 +76,7 @@ void Dictionary::free_entry(DictionaryEntry* entry) { entry->set_pd_set(to_delete->next()); delete to_delete; } - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } @@ -554,12 +554,12 @@ void Dictionary::reorder_dictionary() { } SymbolPropertyTable::SymbolPropertyTable(int table_size) - : Hashtable(table_size, sizeof(SymbolPropertyEntry)) + : Hashtable(table_size, sizeof(SymbolPropertyEntry)) { } -SymbolPropertyTable::SymbolPropertyTable(int table_size, HashtableBucket* t, +SymbolPropertyTable::SymbolPropertyTable(int table_size, HashtableBucket* t, int number_of_entries) - : Hashtable(table_size, sizeof(SymbolPropertyEntry), t, number_of_entries) + : Hashtable(table_size, sizeof(SymbolPropertyEntry), t, number_of_entries) { } @@ -584,7 +584,7 @@ SymbolPropertyEntry* SymbolPropertyTable::add_entry(int index, unsigned int hash assert(find_entry(index, hash, sym, sym_mode) == NULL, "no double entry"); SymbolPropertyEntry* p = new_entry(hash, sym, sym_mode); - Hashtable::add_entry(index, p); + Hashtable::add_entry(index, p); return p; } diff --git a/hotspot/src/share/vm/classfile/dictionary.hpp b/hotspot/src/share/vm/classfile/dictionary.hpp index 98e01695001..bd33760b721 100644 --- a/hotspot/src/share/vm/classfile/dictionary.hpp +++ b/hotspot/src/share/vm/classfile/dictionary.hpp @@ -36,7 +36,7 @@ class DictionaryEntry; // The data structure for the system dictionary (and the shared system // dictionary). -class Dictionary : public TwoOopHashtable { +class Dictionary : public TwoOopHashtable { friend class VMStructs; private: // current iteration index. @@ -48,22 +48,22 @@ private: Symbol* name, Handle loader); DictionaryEntry* bucket(int i) { - return (DictionaryEntry*)Hashtable::bucket(i); + return (DictionaryEntry*)Hashtable::bucket(i); } // The following method is not MT-safe and must be done under lock. DictionaryEntry** bucket_addr(int i) { - return (DictionaryEntry**)Hashtable::bucket_addr(i); + return (DictionaryEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, DictionaryEntry* new_entry) { - Hashtable::add_entry(index, (HashtableEntry*)new_entry); + Hashtable::add_entry(index, (HashtableEntry*)new_entry); } public: Dictionary(int table_size); - Dictionary(int table_size, HashtableBucket* t, int number_of_entries); + Dictionary(int table_size, HashtableBucket* t, int number_of_entries); DictionaryEntry* new_entry(unsigned int hash, klassOop klass, oop loader); @@ -129,7 +129,7 @@ public: // The following classes can be in dictionary.cpp, but we need these // to be in header file so that SA's vmStructs can access. -class ProtectionDomainEntry :public CHeapObj { +class ProtectionDomainEntry :public CHeapObj { friend class VMStructs; public: ProtectionDomainEntry* _next; @@ -147,7 +147,7 @@ class ProtectionDomainEntry :public CHeapObj { // An entry in the system dictionary, this describes a class as // { klassOop, loader, protection_domain }. -class DictionaryEntry : public HashtableEntry { +class DictionaryEntry : public HashtableEntry { friend class VMStructs; private: // Contains the set of approved protection domains that can access @@ -166,11 +166,11 @@ class DictionaryEntry : public HashtableEntry { klassOop* klass_addr() { return (klassOop*)literal_addr(); } DictionaryEntry* next() const { - return (DictionaryEntry*)HashtableEntry::next(); + return (DictionaryEntry*)HashtableEntry::next(); } DictionaryEntry** next_addr() { - return (DictionaryEntry**)HashtableEntry::next_addr(); + return (DictionaryEntry**)HashtableEntry::next_addr(); } oop loader() const { return _loader; } @@ -228,7 +228,7 @@ class DictionaryEntry : public HashtableEntry { // Entry in a SymbolPropertyTable, mapping a single Symbol* // to a managed and an unmanaged pointer. -class SymbolPropertyEntry : public HashtableEntry { +class SymbolPropertyEntry : public HashtableEntry { friend class VMStructs; private: intptr_t _symbol_mode; // secondary key @@ -248,11 +248,11 @@ class SymbolPropertyEntry : public HashtableEntry { void set_property_data(address p) { _property_data = p; } SymbolPropertyEntry* next() const { - return (SymbolPropertyEntry*)HashtableEntry::next(); + return (SymbolPropertyEntry*)HashtableEntry::next(); } SymbolPropertyEntry** next_addr() { - return (SymbolPropertyEntry**)HashtableEntry::next_addr(); + return (SymbolPropertyEntry**)HashtableEntry::next_addr(); } oop* property_oop_addr() { return &_property_oop; } @@ -278,16 +278,16 @@ class SymbolPropertyEntry : public HashtableEntry { // A system-internal mapping of symbols to pointers, both managed // and unmanaged. Used to record the auto-generation of each method // MethodHandle.invoke(S)T, for all signatures (S)T. -class SymbolPropertyTable : public Hashtable { +class SymbolPropertyTable : public Hashtable { friend class VMStructs; private: SymbolPropertyEntry* bucket(int i) { - return (SymbolPropertyEntry*) Hashtable::bucket(i); + return (SymbolPropertyEntry*) Hashtable::bucket(i); } // The following method is not MT-safe and must be done under lock. SymbolPropertyEntry** bucket_addr(int i) { - return (SymbolPropertyEntry**) Hashtable::bucket_addr(i); + return (SymbolPropertyEntry**) Hashtable::bucket_addr(i); } void add_entry(int index, SymbolPropertyEntry* new_entry) { @@ -298,7 +298,7 @@ private: } SymbolPropertyEntry* new_entry(unsigned int hash, Symbol* symbol, intptr_t symbol_mode) { - SymbolPropertyEntry* entry = (SymbolPropertyEntry*) Hashtable::new_entry(hash, symbol); + SymbolPropertyEntry* entry = (SymbolPropertyEntry*) Hashtable::new_entry(hash, symbol); // Hashtable with Symbol* literal must increment and decrement refcount. symbol->increment_refcount(); entry->set_symbol_mode(symbol_mode); @@ -309,17 +309,17 @@ private: public: SymbolPropertyTable(int table_size); - SymbolPropertyTable(int table_size, HashtableBucket* t, int number_of_entries); + SymbolPropertyTable(int table_size, HashtableBucket* t, int number_of_entries); void free_entry(SymbolPropertyEntry* entry) { // decrement Symbol refcount here because hashtable doesn't. entry->literal()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } unsigned int compute_hash(Symbol* sym, intptr_t symbol_mode) { // Use the regular identity_hash. - return Hashtable::compute_hash(sym) ^ symbol_mode; + return Hashtable::compute_hash(sym) ^ symbol_mode; } int index_for(Symbol* name, intptr_t symbol_mode) { diff --git a/hotspot/src/share/vm/classfile/javaAssertions.cpp b/hotspot/src/share/vm/classfile/javaAssertions.cpp index 7884881dedc..3e6a8ce6041 100644 --- a/hotspot/src/share/vm/classfile/javaAssertions.cpp +++ b/hotspot/src/share/vm/classfile/javaAssertions.cpp @@ -58,7 +58,7 @@ void JavaAssertions::addOption(const char* name, bool enable) { // it is never freed, so will be leaked (along with other option strings - // e.g., bootclasspath) if a process creates/destroys multiple VMs. int len = (int)strlen(name); - char *name_copy = NEW_C_HEAP_ARRAY(char, len + 1); + char *name_copy = NEW_C_HEAP_ARRAY(char, len + 1, mtClass); strcpy(name_copy, name); // Figure out which list the new item should go on. Names that end in "..." diff --git a/hotspot/src/share/vm/classfile/javaAssertions.hpp b/hotspot/src/share/vm/classfile/javaAssertions.hpp index b0fb21a2d07..d06d9010f00 100644 --- a/hotspot/src/share/vm/classfile/javaAssertions.hpp +++ b/hotspot/src/share/vm/classfile/javaAssertions.hpp @@ -68,7 +68,7 @@ private: static OptionList* _packages; // Options for package trees. }; -class JavaAssertions::OptionList: public CHeapObj { +class JavaAssertions::OptionList: public CHeapObj { public: inline OptionList(const char* name, bool enable, OptionList* next); diff --git a/hotspot/src/share/vm/classfile/loaderConstraints.cpp b/hotspot/src/share/vm/classfile/loaderConstraints.cpp index 5e25e4cbd02..8650cd98db6 100644 --- a/hotspot/src/share/vm/classfile/loaderConstraints.cpp +++ b/hotspot/src/share/vm/classfile/loaderConstraints.cpp @@ -31,7 +31,7 @@ #include "utilities/hashtable.inline.hpp" LoaderConstraintTable::LoaderConstraintTable(int nof_buckets) - : Hashtable(nof_buckets, sizeof(LoaderConstraintEntry)) {}; + : Hashtable(nof_buckets, sizeof(LoaderConstraintEntry)) {}; LoaderConstraintEntry* LoaderConstraintTable::new_entry( @@ -39,7 +39,7 @@ LoaderConstraintEntry* LoaderConstraintTable::new_entry( klassOop klass, int num_loaders, int max_loaders) { LoaderConstraintEntry* entry; - entry = (LoaderConstraintEntry*)Hashtable::new_entry(hash, klass); + entry = (LoaderConstraintEntry*)Hashtable::new_entry(hash, klass); entry->set_name(name); entry->set_num_loaders(num_loaders); entry->set_max_loaders(max_loaders); @@ -49,7 +49,7 @@ LoaderConstraintEntry* LoaderConstraintTable::new_entry( void LoaderConstraintTable::free_entry(LoaderConstraintEntry *entry) { // decrement name refcount before freeing entry->name()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } @@ -164,7 +164,7 @@ void LoaderConstraintTable::purge_loader_constraints(BoolObjectClosure* is_alive // Purge entry *p = probe->next(); - FREE_C_HEAP_ARRAY(oop, probe->loaders()); + FREE_C_HEAP_ARRAY(oop, probe->loaders(), mtClass); free_entry(probe); } else { #ifdef ASSERT @@ -224,7 +224,7 @@ bool LoaderConstraintTable::add_entry(Symbol* class_name, int index = hash_to_index(hash); LoaderConstraintEntry* p; p = new_entry(hash, class_name, klass, 2, 2); - p->set_loaders(NEW_C_HEAP_ARRAY(oop, 2)); + p->set_loaders(NEW_C_HEAP_ARRAY(oop, 2, mtClass)); p->set_loader(0, class_loader1()); p->set_loader(1, class_loader2()); p->set_klass(klass); @@ -340,10 +340,10 @@ void LoaderConstraintTable::ensure_loader_constraint_capacity( int nfree) { if (p->max_loaders() - p->num_loaders() < nfree) { int n = nfree + p->num_loaders(); - oop* new_loaders = NEW_C_HEAP_ARRAY(oop, n); + oop* new_loaders = NEW_C_HEAP_ARRAY(oop, n, mtClass); memcpy(new_loaders, p->loaders(), sizeof(oop) * p->num_loaders()); p->set_max_loaders(n); - FREE_C_HEAP_ARRAY(oop, p->loaders()); + FREE_C_HEAP_ARRAY(oop, p->loaders(), mtClass); p->set_loaders(new_loaders); } } @@ -425,7 +425,7 @@ void LoaderConstraintTable::merge_loader_constraints( } *pp2 = p2->next(); - FREE_C_HEAP_ARRAY(oop, p2->loaders()); + FREE_C_HEAP_ARRAY(oop, p2->loaders(), mtClass); free_entry(p2); return; } diff --git a/hotspot/src/share/vm/classfile/loaderConstraints.hpp b/hotspot/src/share/vm/classfile/loaderConstraints.hpp index 60612f5dba3..d01b2c4d63f 100644 --- a/hotspot/src/share/vm/classfile/loaderConstraints.hpp +++ b/hotspot/src/share/vm/classfile/loaderConstraints.hpp @@ -31,7 +31,7 @@ class LoaderConstraintEntry; -class LoaderConstraintTable : public Hashtable { +class LoaderConstraintTable : public Hashtable { friend class VMStructs; private: @@ -53,11 +53,11 @@ public: void free_entry(LoaderConstraintEntry *entry); LoaderConstraintEntry* bucket(int i) { - return (LoaderConstraintEntry*)Hashtable::bucket(i); + return (LoaderConstraintEntry*)Hashtable::bucket(i); } LoaderConstraintEntry** bucket_addr(int i) { - return (LoaderConstraintEntry**)Hashtable::bucket_addr(i); + return (LoaderConstraintEntry**)Hashtable::bucket_addr(i); } // GC support @@ -94,7 +94,7 @@ public: #endif }; -class LoaderConstraintEntry : public HashtableEntry { +class LoaderConstraintEntry : public HashtableEntry { friend class VMStructs; private: Symbol* _name; // class name @@ -109,14 +109,14 @@ public: void set_klass(klassOop k) { set_literal(k); } LoaderConstraintEntry* next() { - return (LoaderConstraintEntry*)HashtableEntry::next(); + return (LoaderConstraintEntry*)HashtableEntry::next(); } LoaderConstraintEntry** next_addr() { - return (LoaderConstraintEntry**)HashtableEntry::next_addr(); + return (LoaderConstraintEntry**)HashtableEntry::next_addr(); } void set_next(LoaderConstraintEntry* next) { - HashtableEntry::set_next(next); + HashtableEntry::set_next(next); } Symbol* name() { return _name; } diff --git a/hotspot/src/share/vm/classfile/placeholders.cpp b/hotspot/src/share/vm/classfile/placeholders.cpp index ef877b1033e..d3f425b241a 100644 --- a/hotspot/src/share/vm/classfile/placeholders.cpp +++ b/hotspot/src/share/vm/classfile/placeholders.cpp @@ -34,7 +34,7 @@ PlaceholderEntry* PlaceholderTable::new_entry(int hash, Symbol* name, oop loader, bool havesupername, Symbol* supername) { - PlaceholderEntry* entry = (PlaceholderEntry*)Hashtable::new_entry(hash, name); + PlaceholderEntry* entry = (PlaceholderEntry*)Hashtable::new_entry(hash, name); // Hashtable with Symbol* literal must increment and decrement refcount. name->increment_refcount(); entry->set_loader(loader); @@ -52,7 +52,7 @@ void PlaceholderTable::free_entry(PlaceholderEntry* entry) { // decrement Symbol refcount here because Hashtable doesn't. entry->literal()->decrement_refcount(); if (entry->supername() != NULL) entry->supername()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } @@ -166,7 +166,7 @@ void PlaceholderTable::find_and_remove(int index, unsigned int hash, } PlaceholderTable::PlaceholderTable(int table_size) - : TwoOopHashtable(table_size, sizeof(PlaceholderEntry)) { + : TwoOopHashtable(table_size, sizeof(PlaceholderEntry)) { } diff --git a/hotspot/src/share/vm/classfile/placeholders.hpp b/hotspot/src/share/vm/classfile/placeholders.hpp index 667c59b8c70..4dea3a6804c 100644 --- a/hotspot/src/share/vm/classfile/placeholders.hpp +++ b/hotspot/src/share/vm/classfile/placeholders.hpp @@ -34,7 +34,7 @@ class PlaceholderEntry; // being loaded, as well as arrays of primitives. // -class PlaceholderTable : public TwoOopHashtable { +class PlaceholderTable : public TwoOopHashtable { friend class VMStructs; public: @@ -44,15 +44,15 @@ public: void free_entry(PlaceholderEntry* entry); PlaceholderEntry* bucket(int i) { - return (PlaceholderEntry*)Hashtable::bucket(i); + return (PlaceholderEntry*)Hashtable::bucket(i); } PlaceholderEntry** bucket_addr(int i) { - return (PlaceholderEntry**)Hashtable::bucket_addr(i); + return (PlaceholderEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, PlaceholderEntry* new_entry) { - Hashtable::add_entry(index, (HashtableEntry*)new_entry); + Hashtable::add_entry(index, (HashtableEntry*)new_entry); } void add_entry(int index, unsigned int hash, Symbol* name, @@ -116,7 +116,7 @@ public: // For DEFINE_CLASS, the head of the queue owns the // define token and the rest of the threads wait to return the // result the first thread gets. -class SeenThread: public CHeapObj { +class SeenThread: public CHeapObj { private: Thread *_thread; SeenThread* _stnext; @@ -152,7 +152,7 @@ public: // on store ordering here. // The system dictionary is the only user of this class. -class PlaceholderEntry : public HashtableEntry { +class PlaceholderEntry : public HashtableEntry { friend class VMStructs; @@ -206,11 +206,11 @@ class PlaceholderEntry : public HashtableEntry { void set_defineThreadQ(SeenThread* SeenThread) { _defineThreadQ = SeenThread; } PlaceholderEntry* next() const { - return (PlaceholderEntry*)HashtableEntry::next(); + return (PlaceholderEntry*)HashtableEntry::next(); } PlaceholderEntry** next_addr() { - return (PlaceholderEntry**)HashtableEntry::next_addr(); + return (PlaceholderEntry**)HashtableEntry::next_addr(); } // Test for equality diff --git a/hotspot/src/share/vm/classfile/resolutionErrors.cpp b/hotspot/src/share/vm/classfile/resolutionErrors.cpp index ed31224e010..e94ffa288ab 100644 --- a/hotspot/src/share/vm/classfile/resolutionErrors.cpp +++ b/hotspot/src/share/vm/classfile/resolutionErrors.cpp @@ -67,7 +67,7 @@ void ResolutionErrorEntry::set_error(Symbol* e) { ResolutionErrorEntry* ResolutionErrorTable::new_entry(int hash, constantPoolOop pool, int cp_index, Symbol* error) { - ResolutionErrorEntry* entry = (ResolutionErrorEntry*)Hashtable::new_entry(hash, pool); + ResolutionErrorEntry* entry = (ResolutionErrorEntry*)Hashtable::new_entry(hash, pool); entry->set_cp_index(cp_index); NOT_PRODUCT(entry->set_error(NULL);) entry->set_error(error); @@ -79,13 +79,13 @@ void ResolutionErrorTable::free_entry(ResolutionErrorEntry *entry) { // decrement error refcount assert(entry->error() != NULL, "error should be set"); entry->error()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } // create resolution error table ResolutionErrorTable::ResolutionErrorTable(int table_size) - : Hashtable(table_size, sizeof(ResolutionErrorEntry)) { + : Hashtable(table_size, sizeof(ResolutionErrorEntry)) { } // GC support diff --git a/hotspot/src/share/vm/classfile/resolutionErrors.hpp b/hotspot/src/share/vm/classfile/resolutionErrors.hpp index 03fcf4957bb..a18a55a2340 100644 --- a/hotspot/src/share/vm/classfile/resolutionErrors.hpp +++ b/hotspot/src/share/vm/classfile/resolutionErrors.hpp @@ -33,7 +33,7 @@ class ResolutionErrorEntry; // ResolutionError objects are used to record errors encountered during // constant pool resolution (JVMS 5.4.3). -class ResolutionErrorTable : public Hashtable { +class ResolutionErrorTable : public Hashtable { public: ResolutionErrorTable(int table_size); @@ -42,15 +42,16 @@ public: void free_entry(ResolutionErrorEntry *entry); ResolutionErrorEntry* bucket(int i) { - return (ResolutionErrorEntry*)Hashtable::bucket(i); + return (ResolutionErrorEntry*)Hashtable::bucket(i); } ResolutionErrorEntry** bucket_addr(int i) { - return (ResolutionErrorEntry**)Hashtable::bucket_addr(i); + return (ResolutionErrorEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, ResolutionErrorEntry* new_entry) { - Hashtable::add_entry(index, (HashtableEntry*)new_entry); + Hashtable::add_entry(index, + (HashtableEntry*)new_entry); } void add_entry(int index, unsigned int hash, @@ -74,7 +75,7 @@ public: }; -class ResolutionErrorEntry : public HashtableEntry { +class ResolutionErrorEntry : public HashtableEntry { private: int _cp_index; Symbol* _error; @@ -90,11 +91,11 @@ class ResolutionErrorEntry : public HashtableEntry { void set_error(Symbol* e); ResolutionErrorEntry* next() const { - return (ResolutionErrorEntry*)HashtableEntry::next(); + return (ResolutionErrorEntry*)HashtableEntry::next(); } ResolutionErrorEntry** next_addr() { - return (ResolutionErrorEntry**)HashtableEntry::next_addr(); + return (ResolutionErrorEntry**)HashtableEntry::next_addr(); } // GC support diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp index 3b6ec7ceb34..85cc5002d10 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.cpp +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp @@ -64,9 +64,9 @@ Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS void SymbolTable::initialize_symbols(int arena_alloc_size) { // Initialize the arena for global symbols, size passed in depends on CDS. if (arena_alloc_size == 0) { - _arena = new Arena(); + _arena = new (mtSymbol) Arena(); } else { - _arena = new Arena(arena_alloc_size); + _arena = new (mtSymbol) Arena(arena_alloc_size); } } @@ -74,7 +74,7 @@ void SymbolTable::initialize_symbols(int arena_alloc_size) { void SymbolTable::symbols_do(SymbolClosure *cl) { const int n = the_table()->table_size(); for (int i = 0; i < n; i++) { - for (HashtableEntry* p = the_table()->bucket(i); + for (HashtableEntry* p = the_table()->bucket(i); p != NULL; p = p->next()) { cl->do_symbol(p->literal_addr()); @@ -92,8 +92,8 @@ void SymbolTable::unlink() { int total = 0; size_t memory_total = 0; for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry** p = the_table()->bucket_addr(i); - HashtableEntry* entry = the_table()->bucket(i); + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); while (entry != NULL) { // Shared entries are normally at the end of the bucket and if we run into // a shared entry, then there is nothing more to remove. However, if we @@ -117,7 +117,7 @@ void SymbolTable::unlink() { p = entry->next_addr(); } // get next entry - entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } symbols_removed += removed; @@ -164,7 +164,7 @@ void SymbolTable::rehash_table() { Symbol* SymbolTable::lookup(int index, const char* name, int len, unsigned int hash) { int count = 0; - for (HashtableEntry* e = bucket(index); e != NULL; e = e->next()) { + for (HashtableEntry* e = bucket(index); e != NULL; e = e->next()) { count++; // count all entries in this bucket, not just ones with same hash if (e->hash() == hash) { Symbol* sym = e->literal(); @@ -176,7 +176,7 @@ Symbol* SymbolTable::lookup(int index, const char* name, } } // If the bucket size is too deep check if this hash code is insufficient. - if (count >= BasicHashtable::rehash_count && !needs_rehashing()) { + if (count >= BasicHashtable::rehash_count && !needs_rehashing()) { _needs_rehashing = check_rehash_table(count); } return NULL; @@ -268,7 +268,7 @@ Symbol** SymbolTable::lookup_symbol_addr(Symbol* sym){ unsigned int hash = hash_symbol((char*)sym->bytes(), sym->utf8_length()); int index = the_table()->hash_to_index(hash); - for (HashtableEntry* e = the_table()->bucket(index); e != NULL; e = e->next()) { + for (HashtableEntry* e = the_table()->bucket(index); e != NULL; e = e->next()) { if (e->hash() == hash) { Symbol* literal_sym = e->literal(); if (sym == literal_sym) { @@ -387,7 +387,7 @@ Symbol* SymbolTable::basic_add(int index_arg, u1 *name, int len, Symbol* sym = allocate_symbol(name, len, c_heap, CHECK_NULL); assert(sym->equals((char*)name, len), "symbol must be properly initialized"); - HashtableEntry* entry = new_entry(hashValue, sym); + HashtableEntry* entry = new_entry(hashValue, sym); add_entry(index, entry); return sym; } @@ -435,7 +435,7 @@ bool SymbolTable::basic_add(Handle class_loader, constantPoolHandle cp, bool c_heap = class_loader() != NULL; Symbol* sym = allocate_symbol((const u1*)names[i], lengths[i], c_heap, CHECK_(false)); assert(sym->equals(names[i], lengths[i]), "symbol must be properly initialized"); // why wouldn't it be??? - HashtableEntry* entry = new_entry(hashValue, sym); + HashtableEntry* entry = new_entry(hashValue, sym); add_entry(index, entry); cp->symbol_at_put(cp_indices[i], sym); } @@ -446,7 +446,7 @@ bool SymbolTable::basic_add(Handle class_loader, constantPoolHandle cp, void SymbolTable::verify() { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry* p = the_table()->bucket(i); + HashtableEntry* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { Symbol* s = (Symbol*)(p->literal()); guarantee(s != NULL, "symbol is NULL"); @@ -462,7 +462,7 @@ void SymbolTable::dump(outputStream* st) { NumberSeq summary; for (int i = 0; i < the_table()->table_size(); ++i) { int count = 0; - for (HashtableEntry* e = the_table()->bucket(i); + for (HashtableEntry* e = the_table()->bucket(i); e != NULL; e = e->next()) { count++; } @@ -499,7 +499,7 @@ void SymbolTable::print_histogram() { int memory_total = 0; int count = 0; for (i = 0; i < the_table()->table_size(); i++) { - HashtableEntry* p = the_table()->bucket(i); + HashtableEntry* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { memory_total += p->literal()->object_size(); count++; @@ -560,15 +560,15 @@ void SymbolTable::print_histogram() { void SymbolTable::print() { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry** p = the_table()->bucket_addr(i); - HashtableEntry* entry = the_table()->bucket(i); + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); if (entry != NULL) { while (entry != NULL) { tty->print(PTR_FORMAT " ", entry->literal()); entry->literal()->print(); tty->print(" %d", entry->literal()->refcount()); p = entry->next_addr(); - entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } tty->cr(); } @@ -631,7 +631,7 @@ unsigned int StringTable::hash_string(const jchar* s, int len) { oop StringTable::lookup(int index, jchar* name, int len, unsigned int hash) { int count = 0; - for (HashtableEntry* l = bucket(index); l != NULL; l = l->next()) { + for (HashtableEntry* l = bucket(index); l != NULL; l = l->next()) { count++; if (l->hash() == hash) { if (java_lang_String::equals(l->literal(), name, len)) { @@ -640,7 +640,7 @@ oop StringTable::lookup(int index, jchar* name, } } // If the bucket size is too deep check if this hash code is insufficient. - if (count >= BasicHashtable::rehash_count && !needs_rehashing()) { + if (count >= BasicHashtable::rehash_count && !needs_rehashing()) { _needs_rehashing = check_rehash_table(count); } return NULL; @@ -676,7 +676,7 @@ oop StringTable::basic_add(int index_arg, Handle string, jchar* name, return test; } - HashtableEntry* entry = new_entry(hashValue, string()); + HashtableEntry* entry = new_entry(hashValue, string()); add_entry(index, entry); return string(); } @@ -761,8 +761,8 @@ void StringTable::unlink(BoolObjectClosure* is_alive) { // entries at a safepoint. assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry** p = the_table()->bucket_addr(i); - HashtableEntry* entry = the_table()->bucket(i); + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); while (entry != NULL) { // Shared entries are normally at the end of the bucket and if we run into // a shared entry, then there is nothing more to remove. However, if we @@ -778,15 +778,15 @@ void StringTable::unlink(BoolObjectClosure* is_alive) { *p = entry->next(); the_table()->free_entry(entry); } - entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } } void StringTable::oops_do(OopClosure* f) { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry** p = the_table()->bucket_addr(i); - HashtableEntry* entry = the_table()->bucket(i); + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); while (entry != NULL) { f->do_oop((oop*)entry->literal_addr()); @@ -798,14 +798,14 @@ void StringTable::oops_do(OopClosure* f) { } else { p = entry->next_addr(); } - entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } } void StringTable::verify() { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry* p = the_table()->bucket(i); + HashtableEntry* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { oop s = p->literal(); guarantee(s != NULL, "interned string is NULL"); @@ -821,7 +821,7 @@ void StringTable::verify() { void StringTable::dump(outputStream* st) { NumberSeq summary; for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry* p = the_table()->bucket(i); + HashtableEntry* p = the_table()->bucket(i); int count = 0; for ( ; p != NULL; p = p->next()) { count++; diff --git a/hotspot/src/share/vm/classfile/symbolTable.hpp b/hotspot/src/share/vm/classfile/symbolTable.hpp index 6e5782cd7ea..f63de80280e 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.hpp +++ b/hotspot/src/share/vm/classfile/symbolTable.hpp @@ -71,7 +71,7 @@ class TempNewSymbol : public StackObj { operator Symbol*() { return _temp; } }; -class SymbolTable : public Hashtable { +class SymbolTable : public Hashtable { friend class VMStructs; friend class ClassFileParser; @@ -113,10 +113,10 @@ private: Symbol* lookup(int index, const char* name, int len, unsigned int hash); SymbolTable() - : Hashtable(symbol_table_size, sizeof (HashtableEntry)) {} + : Hashtable(symbol_table_size, sizeof (HashtableEntry)) {} - SymbolTable(HashtableBucket* t, int number_of_entries) - : Hashtable(symbol_table_size, sizeof (HashtableEntry), t, + SymbolTable(HashtableBucket* t, int number_of_entries) + : Hashtable(symbol_table_size, sizeof (HashtableEntry), t, number_of_entries) {} // Arena for permanent symbols (null class loader) that are never unloaded @@ -145,10 +145,10 @@ public: initialize_symbols(symbol_alloc_arena_size); } - static void create_table(HashtableBucket* t, int length, + static void create_table(HashtableBucket* t, int length, int number_of_entries) { assert(_the_table == NULL, "One symbol table allowed."); - assert(length == symbol_table_size * sizeof(HashtableBucket), + assert(length == symbol_table_size * sizeof(HashtableBucket), "bad shared symbol size."); _the_table = new SymbolTable(t, number_of_entries); // if CDS give symbol table a default arena size since most symbols @@ -224,13 +224,13 @@ public: // Sharing static void copy_buckets(char** top, char*end) { - the_table()->Hashtable::copy_buckets(top, end); + the_table()->Hashtable::copy_buckets(top, end); } static void copy_table(char** top, char*end) { - the_table()->Hashtable::copy_table(top, end); + the_table()->Hashtable::copy_table(top, end); } static void reverse(void* boundary = NULL) { - the_table()->Hashtable::reverse(boundary); + the_table()->Hashtable::reverse(boundary); } // Rehash the symbol table if it gets out of balance @@ -238,8 +238,7 @@ public: static bool needs_rehashing() { return _needs_rehashing; } }; - -class StringTable : public Hashtable { +class StringTable : public Hashtable { friend class VMStructs; private: @@ -256,11 +255,11 @@ private: oop lookup(int index, jchar* chars, int length, unsigned int hashValue); - StringTable() : Hashtable((int)StringTableSize, - sizeof (HashtableEntry)) {} + StringTable() : Hashtable((int)StringTableSize, + sizeof (HashtableEntry)) {} - StringTable(HashtableBucket* t, int number_of_entries) - : Hashtable((int)StringTableSize, sizeof (HashtableEntry), t, + StringTable(HashtableBucket* t, int number_of_entries) + : Hashtable((int)StringTableSize, sizeof (HashtableEntry), t, number_of_entries) {} static bool use_alternate_hashcode() { return _seed != 0; } @@ -276,10 +275,10 @@ public: _the_table = new StringTable(); } - static void create_table(HashtableBucket* t, int length, + static void create_table(HashtableBucket* t, int length, int number_of_entries) { assert(_the_table == NULL, "One string table allowed."); - assert((size_t)length == StringTableSize * sizeof(HashtableBucket), + assert((size_t)length == StringTableSize * sizeof(HashtableBucket), "bad shared string size."); _the_table = new StringTable(t, number_of_entries); } @@ -313,13 +312,13 @@ public: // Sharing static void copy_buckets(char** top, char*end) { - the_table()->Hashtable::copy_buckets(top, end); + the_table()->Hashtable::copy_buckets(top, end); } static void copy_table(char** top, char*end) { - the_table()->Hashtable::copy_table(top, end); + the_table()->Hashtable::copy_table(top, end); } static void reverse() { - the_table()->Hashtable::reverse(); + the_table()->Hashtable::reverse(); } // Rehash the symbol table if it gets out of balance diff --git a/hotspot/src/share/vm/classfile/systemDictionary.cpp b/hotspot/src/share/vm/classfile/systemDictionary.cpp index 78c854f3058..74901574d54 100644 --- a/hotspot/src/share/vm/classfile/systemDictionary.cpp +++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp @@ -1168,9 +1168,9 @@ klassOop SystemDictionary::resolve_from_stream(Symbol* class_name, } -void SystemDictionary::set_shared_dictionary(HashtableBucket* t, int length, +void SystemDictionary::set_shared_dictionary(HashtableBucket* t, int length, int number_of_entries) { - assert(length == _nof_buckets * sizeof(HashtableBucket), + assert(length == _nof_buckets * sizeof(HashtableBucket), "bad shared dictionary size."); _shared_dictionary = new Dictionary(_nof_buckets, t, number_of_entries); } diff --git a/hotspot/src/share/vm/classfile/systemDictionary.hpp b/hotspot/src/share/vm/classfile/systemDictionary.hpp index 72be344383b..7b59f075021 100644 --- a/hotspot/src/share/vm/classfile/systemDictionary.hpp +++ b/hotspot/src/share/vm/classfile/systemDictionary.hpp @@ -32,6 +32,7 @@ #include "runtime/java.hpp" #include "runtime/reflectionUtils.hpp" #include "utilities/hashtable.hpp" +#include "utilities/hashtable.inline.hpp" // The system dictionary stores all loaded classes and maps: // @@ -72,7 +73,7 @@ class Dictionary; class PlaceholderTable; class LoaderConstraintTable; -class HashtableBucket; +template class HashtableBucket; class ResolutionErrorTable; class SymbolPropertyTable; @@ -363,7 +364,7 @@ public: static void copy_buckets(char** top, char* end); static void copy_table(char** top, char* end); static void reverse(); - static void set_shared_dictionary(HashtableBucket* t, int length, + static void set_shared_dictionary(HashtableBucket* t, int length, int number_of_entries); // Printing static void print() PRODUCT_RETURN; diff --git a/hotspot/src/share/vm/code/codeBlob.cpp b/hotspot/src/share/vm/code/codeBlob.cpp index 244c32043f3..aa20f1d1bb9 100644 --- a/hotspot/src/share/vm/code/codeBlob.cpp +++ b/hotspot/src/share/vm/code/codeBlob.cpp @@ -144,7 +144,7 @@ void CodeBlob::set_oop_maps(OopMapSet* p) { // chunk of memory, its your job to free it. if (p != NULL) { // We need to allocate a chunk big enough to hold the OopMapSet and all of its OopMaps - _oop_maps = (OopMapSet* )NEW_C_HEAP_ARRAY(unsigned char, p->heap_size()); + _oop_maps = (OopMapSet* )NEW_C_HEAP_ARRAY(unsigned char, p->heap_size(), mtCode); p->copy_to((address)_oop_maps); } else { _oop_maps = NULL; @@ -180,7 +180,7 @@ void CodeBlob::trace_new_stub(CodeBlob* stub, const char* name1, const char* nam void CodeBlob::flush() { if (_oop_maps) { - FREE_C_HEAP_ARRAY(unsigned char, _oop_maps); + FREE_C_HEAP_ARRAY(unsigned char, _oop_maps, mtCode); _oop_maps = NULL; } _comments.free(); diff --git a/hotspot/src/share/vm/code/codeCache.cpp b/hotspot/src/share/vm/code/codeCache.cpp index 8e82aaad056..ffef685f96d 100644 --- a/hotspot/src/share/vm/code/codeCache.cpp +++ b/hotspot/src/share/vm/code/codeCache.cpp @@ -856,7 +856,7 @@ void CodeCache::print_internals() { int bucketSize = 512; int bucketLimit = maxCodeSize / bucketSize + 1; - int *buckets = NEW_C_HEAP_ARRAY(int, bucketLimit); + int *buckets = NEW_C_HEAP_ARRAY(int, bucketLimit, mtCode); memset(buckets,0,sizeof(int) * bucketLimit); for (cb = first(); cb != NULL; cb = next(cb)) { @@ -893,7 +893,7 @@ void CodeCache::print_internals() { } } - FREE_C_HEAP_ARRAY(int, buckets); + FREE_C_HEAP_ARRAY(int, buckets, mtCode); } void CodeCache::print() { diff --git a/hotspot/src/share/vm/code/codeCache.hpp b/hotspot/src/share/vm/code/codeCache.hpp index bdd128e9813..6c97cc79bd1 100644 --- a/hotspot/src/share/vm/code/codeCache.hpp +++ b/hotspot/src/share/vm/code/codeCache.hpp @@ -88,6 +88,9 @@ class CodeCache : AllStatic { // Lookup that does not fail if you lookup a zombie method (if you call this, be sure to know // what you are doing) static CodeBlob* find_blob_unsafe(void* start) { + // NMT can walk the stack before code cache is created + if (_heap == NULL) return NULL; + CodeBlob* result = (CodeBlob*)_heap->find_start(start); // this assert is too strong because the heap code will return the // heapblock containing start. That block can often be larger than diff --git a/hotspot/src/share/vm/code/nmethod.hpp b/hotspot/src/share/vm/code/nmethod.hpp index 33f44a919b5..75e8940aa8e 100644 --- a/hotspot/src/share/vm/code/nmethod.hpp +++ b/hotspot/src/share/vm/code/nmethod.hpp @@ -31,7 +31,7 @@ // This class is used internally by nmethods, to cache // exception/pc/handler information. -class ExceptionCache : public CHeapObj { +class ExceptionCache : public CHeapObj { friend class VMStructs; private: enum { cache_size = 16 }; diff --git a/hotspot/src/share/vm/code/stubs.hpp b/hotspot/src/share/vm/code/stubs.hpp index 328ad8bf76e..afc8f04d46c 100644 --- a/hotspot/src/share/vm/code/stubs.hpp +++ b/hotspot/src/share/vm/code/stubs.hpp @@ -101,7 +101,7 @@ class Stub VALUE_OBJ_CLASS_SPEC { // of the concrete stub (see also macro below). There's exactly // one stub interface instance required per stub queue. -class StubInterface: public CHeapObj { +class StubInterface: public CHeapObj { public: // Initialization/finalization virtual void initialize(Stub* self, int size) = 0; // called after creation (called twice if allocated via (request, commit)) @@ -152,7 +152,7 @@ class StubInterface: public CHeapObj { // A StubQueue maintains a queue of stubs. // Note: All sizes (spaces) are given in bytes. -class StubQueue: public CHeapObj { +class StubQueue: public CHeapObj { friend class VMStructs; private: StubInterface* _stub_interface; // the interface prototype diff --git a/hotspot/src/share/vm/compiler/abstractCompiler.hpp b/hotspot/src/share/vm/compiler/abstractCompiler.hpp index 380dfe7bda0..55303a01fad 100644 --- a/hotspot/src/share/vm/compiler/abstractCompiler.hpp +++ b/hotspot/src/share/vm/compiler/abstractCompiler.hpp @@ -29,7 +29,7 @@ typedef void (*initializer)(void); -class AbstractCompiler : public CHeapObj { +class AbstractCompiler : public CHeapObj { private: bool _is_initialized; // Mark whether compiler object is initialized diff --git a/hotspot/src/share/vm/compiler/compileBroker.cpp b/hotspot/src/share/vm/compiler/compileBroker.cpp index 8729e056221..2c2e64b3862 100644 --- a/hotspot/src/share/vm/compiler/compileBroker.cpp +++ b/hotspot/src/share/vm/compiler/compileBroker.cpp @@ -951,7 +951,7 @@ void CompileBroker::init_compiler_threads(int c1_compiler_count, int c2_compiler int compiler_count = c1_compiler_count + c2_compiler_count; _method_threads = - new (ResourceObj::C_HEAP) GrowableArray(compiler_count, true); + new (ResourceObj::C_HEAP, mtCompiler) GrowableArray(compiler_count, true); char name_buffer[256]; for (int i = 0; i < c2_compiler_count; i++) { @@ -1627,7 +1627,7 @@ void CompileBroker::init_compiler_thread_log() { } fp = fopen(fileBuf, "at"); if (fp != NULL) { - file = NEW_C_HEAP_ARRAY(char, strlen(fileBuf)+1); + file = NEW_C_HEAP_ARRAY(char, strlen(fileBuf)+1, mtCompiler); strcpy(file, fileBuf); break; } @@ -1637,7 +1637,7 @@ void CompileBroker::init_compiler_thread_log() { } else { if (LogCompilation && Verbose) tty->print_cr("Opening compilation log %s", file); - CompileLog* log = new(ResourceObj::C_HEAP) CompileLog(file, fp, thread_id); + CompileLog* log = new(ResourceObj::C_HEAP, mtCompiler) CompileLog(file, fp, thread_id); thread->init_log(log); if (xtty != NULL) { diff --git a/hotspot/src/share/vm/compiler/compileBroker.hpp b/hotspot/src/share/vm/compiler/compileBroker.hpp index 1ee2c5419f9..8d28f8c8224 100644 --- a/hotspot/src/share/vm/compiler/compileBroker.hpp +++ b/hotspot/src/share/vm/compiler/compileBroker.hpp @@ -36,7 +36,7 @@ class nmethodLocker; // // An entry in the compile queue. It represents a pending or current // compilation. -class CompileTask : public CHeapObj { +class CompileTask : public CHeapObj { friend class VMStructs; private: @@ -131,7 +131,7 @@ public: // // Per Compiler Performance Counters. // -class CompilerCounters : public CHeapObj { +class CompilerCounters : public CHeapObj { public: enum { @@ -175,7 +175,7 @@ class CompilerCounters : public CHeapObj { // CompileQueue // // A list of CompileTasks. -class CompileQueue : public CHeapObj { +class CompileQueue : public CHeapObj { private: const char* _name; Monitor* _lock; diff --git a/hotspot/src/share/vm/compiler/compileLog.cpp b/hotspot/src/share/vm/compiler/compileLog.cpp index a306117f965..2e0fe86bc47 100644 --- a/hotspot/src/share/vm/compiler/compileLog.cpp +++ b/hotspot/src/share/vm/compiler/compileLog.cpp @@ -37,14 +37,14 @@ CompileLog* CompileLog::_first = NULL; CompileLog::CompileLog(const char* file, FILE* fp, intx thread_id) : _context(_context_buffer, sizeof(_context_buffer)) { - initialize(new(ResourceObj::C_HEAP) fileStream(fp)); + initialize(new(ResourceObj::C_HEAP, mtCompiler) fileStream(fp)); _file = file; _file_end = 0; _thread_id = thread_id; _identities_limit = 0; _identities_capacity = 400; - _identities = NEW_C_HEAP_ARRAY(char, _identities_capacity); + _identities = NEW_C_HEAP_ARRAY(char, _identities_capacity, mtCompiler); // link into the global list { MutexLocker locker(CompileTaskAlloc_lock); @@ -56,7 +56,7 @@ CompileLog::CompileLog(const char* file, FILE* fp, intx thread_id) CompileLog::~CompileLog() { delete _out; _out = NULL; - FREE_C_HEAP_ARRAY(char, _identities); + FREE_C_HEAP_ARRAY(char, _identities, mtCompiler); } @@ -109,7 +109,7 @@ int CompileLog::identify(ciObject* obj) { if (id >= _identities_capacity) { int new_cap = _identities_capacity * 2; if (new_cap <= id) new_cap = id + 100; - _identities = REALLOC_C_HEAP_ARRAY(char, _identities, new_cap); + _identities = REALLOC_C_HEAP_ARRAY(char, _identities, new_cap, mtCompiler); _identities_capacity = new_cap; } while (id >= _identities_limit) { diff --git a/hotspot/src/share/vm/compiler/compilerOracle.cpp b/hotspot/src/share/vm/compiler/compilerOracle.cpp index 6ac45b41345..286a9ec16a8 100644 --- a/hotspot/src/share/vm/compiler/compilerOracle.cpp +++ b/hotspot/src/share/vm/compiler/compilerOracle.cpp @@ -34,7 +34,7 @@ #include "runtime/handles.inline.hpp" #include "runtime/jniHandles.hpp" -class MethodMatcher : public CHeapObj { +class MethodMatcher : public CHeapObj { public: enum Mode { Exact, diff --git a/hotspot/src/share/vm/compiler/oopMap.cpp b/hotspot/src/share/vm/compiler/oopMap.cpp index 9c1195cecff..2cd212d277f 100644 --- a/hotspot/src/share/vm/compiler/oopMap.cpp +++ b/hotspot/src/share/vm/compiler/oopMap.cpp @@ -599,7 +599,7 @@ void OopMapSet::print_on(outputStream* st) const { #ifdef COMPILER2 -class DerivedPointerEntry : public CHeapObj { +class DerivedPointerEntry : public CHeapObj { private: oop* _location; // Location of derived pointer (also pointing to the base) intptr_t _offset; // Offset from base pointer @@ -621,7 +621,7 @@ void DerivedPointerTable::clear() { assert (!_active, "should not be active"); assert(_list == NULL || _list->length() == 0, "table not empty"); if (_list == NULL) { - _list = new (ResourceObj::C_HEAP) GrowableArray(10, true); // Allocated on C heap + _list = new (ResourceObj::C_HEAP, mtCompiler) GrowableArray(10, true); // Allocated on C heap } _active = true; } diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp index 663b747fd77..3b7bb9aefb4 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp @@ -617,7 +617,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { // A parallel-GC-thread-local allocation buffer for allocation into a // CompactibleFreeListSpace. -class CFLS_LAB : public CHeapObj { +class CFLS_LAB : public CHeapObj { // The space that this buffer allocates into. CompactibleFreeListSpace* _cfls; diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp index 938e94efcff..e8e33ff8f8a 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp @@ -174,7 +174,7 @@ NOT_PRODUCT(CompactibleFreeListSpace* debug_cms_space;) // This struct contains per-thread things necessary to support parallel // young-gen collection. -class CMSParGCThreadState: public CHeapObj { +class CMSParGCThreadState: public CHeapObj { public: CFLS_LAB lab; PromotionInfo promo; @@ -229,7 +229,7 @@ ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration( if (CollectedHeap::use_parallel_gc_threads()) { typedef CMSParGCThreadState* CMSParGCThreadStatePtr; _par_gc_thread_states = - NEW_C_HEAP_ARRAY(CMSParGCThreadStatePtr, ParallelGCThreads); + NEW_C_HEAP_ARRAY(CMSParGCThreadStatePtr, ParallelGCThreads, mtGC); if (_par_gc_thread_states == NULL) { vm_exit_during_initialization("Could not allocate par gc structs"); } @@ -687,7 +687,7 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, warning("task_queues allocation failure."); return; } - _hash_seed = NEW_C_HEAP_ARRAY(int, num_queues); + _hash_seed = NEW_C_HEAP_ARRAY(int, num_queues, mtGC); if (_hash_seed == NULL) { warning("_hash_seed array allocation failure"); return; @@ -737,7 +737,7 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, assert(_young_gen != NULL, "no _young_gen"); _eden_chunk_index = 0; _eden_chunk_capacity = (_young_gen->max_capacity()+CMSSamplingGrain)/CMSSamplingGrain; - _eden_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, _eden_chunk_capacity); + _eden_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, _eden_chunk_capacity, mtGC); if (_eden_chunk_array == NULL) { _eden_chunk_capacity = 0; warning("GC/CMS: _eden_chunk_array allocation failure"); @@ -750,35 +750,35 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, const size_t max_plab_samples = ((DefNewGeneration*)_young_gen)->max_survivor_size()/MinTLABSize; - _survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads); - _survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples); - _cursor = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads); + _survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads, mtGC); + _survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples, mtGC); + _cursor = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads, mtGC); if (_survivor_plab_array == NULL || _survivor_chunk_array == NULL || _cursor == NULL) { warning("Failed to allocate survivor plab/chunk array"); if (_survivor_plab_array != NULL) { - FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array); + FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array, mtGC); _survivor_plab_array = NULL; } if (_survivor_chunk_array != NULL) { - FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array); + FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array, mtGC); _survivor_chunk_array = NULL; } if (_cursor != NULL) { - FREE_C_HEAP_ARRAY(size_t, _cursor); + FREE_C_HEAP_ARRAY(size_t, _cursor, mtGC); _cursor = NULL; } } else { _survivor_chunk_capacity = 2*max_plab_samples; for (uint i = 0; i < ParallelGCThreads; i++) { - HeapWord** vec = NEW_C_HEAP_ARRAY(HeapWord*, max_plab_samples); + HeapWord** vec = NEW_C_HEAP_ARRAY(HeapWord*, max_plab_samples, mtGC); if (vec == NULL) { warning("Failed to allocate survivor plab array"); for (int j = i; j > 0; j--) { - FREE_C_HEAP_ARRAY(HeapWord*, _survivor_plab_array[j-1].array()); + FREE_C_HEAP_ARRAY(HeapWord*, _survivor_plab_array[j-1].array(), mtGC); } - FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array); - FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array); + FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array, mtGC); + FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array, mtGC); _survivor_plab_array = NULL; _survivor_chunk_array = NULL; _survivor_chunk_capacity = 0; diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp index ecc60cc3ead..3db4f11f785 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp @@ -161,7 +161,7 @@ class CMSBitMap VALUE_OBJ_CLASS_SPEC { // Represents a marking stack used by the CMS collector. // Ideally this should be GrowableArray<> just like MSC's marking stack(s). -class CMSMarkStack: public CHeapObj { +class CMSMarkStack: public CHeapObj { // friend class CMSCollector; // to get at expasion stats further below // @@ -265,7 +265,7 @@ class ModUnionClosurePar: public ModUnionClosure { // Survivor Chunk Array in support of parallelization of // Survivor Space rescan. -class ChunkArray: public CHeapObj { +class ChunkArray: public CHeapObj { size_t _index; size_t _capacity; size_t _overflows; @@ -506,7 +506,7 @@ private: }; -class CMSCollector: public CHeapObj { +class CMSCollector: public CHeapObj { friend class VMStructs; friend class ConcurrentMarkSweepThread; friend class ConcurrentMarkSweepGeneration; @@ -553,8 +553,8 @@ class CMSCollector: public CHeapObj { // The following array-pair keeps track of mark words // displaced for accomodating overflow list above. // This code will likely be revisited under RFE#4922830. - Stack _preserved_oop_stack; - Stack _preserved_mark_stack; + Stack _preserved_oop_stack; + Stack _preserved_mark_stack; int* _hash_seed; diff --git a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp index e52476586c5..44ee2ad3476 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp @@ -28,7 +28,7 @@ #include "gc_implementation/g1/heapRegion.hpp" #include "utilities/growableArray.hpp" -class CollectionSetChooser: public CHeapObj { +class CollectionSetChooser: public CHeapObj { GrowableArray _regions; diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp index a7b24607064..cb802770ff7 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp @@ -79,7 +79,7 @@ ConcurrentG1Refine::ConcurrentG1Refine() : _n_threads = _n_worker_threads + 1; reset_threshold_step(); - _threads = NEW_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _n_threads); + _threads = NEW_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _n_threads, mtGC); int worker_id_offset = (int)DirtyCardQueueSet::num_par_ids(); ConcurrentG1RefineThread *next = NULL; for (int i = _n_threads - 1; i >= 0; i--) { @@ -157,7 +157,7 @@ void ConcurrentG1Refine::init() { _def_use_cache = true; _use_cache = true; _hot_cache_size = (1 << G1ConcRSLogCacheSize); - _hot_cache = NEW_C_HEAP_ARRAY(jbyte*, _hot_cache_size); + _hot_cache = NEW_C_HEAP_ARRAY(jbyte*, _hot_cache_size, mtGC); _n_hot = 0; _hot_cache_idx = 0; @@ -191,18 +191,18 @@ ConcurrentG1Refine::~ConcurrentG1Refine() { // Please see the comment in allocate_card_count_cache // for why we call os::malloc() and os::free() directly. assert(_card_counts != NULL, "Logic"); - os::free(_card_counts); + os::free(_card_counts, mtGC); assert(_card_epochs != NULL, "Logic"); - os::free(_card_epochs); + os::free(_card_epochs, mtGC); assert(_hot_cache != NULL, "Logic"); - FREE_C_HEAP_ARRAY(jbyte*, _hot_cache); + FREE_C_HEAP_ARRAY(jbyte*, _hot_cache, mtGC); } if (_threads != NULL) { for (int i = 0; i < _n_threads; i++) { delete _threads[i]; } - FREE_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _threads); + FREE_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _threads, mtGC); } } @@ -436,17 +436,17 @@ bool ConcurrentG1Refine::allocate_card_count_cache(size_t n, size_t counts_size = n * sizeof(CardCountCacheEntry); size_t epochs_size = n * sizeof(CardEpochCacheEntry); - *counts = (CardCountCacheEntry*) os::malloc(counts_size); + *counts = (CardCountCacheEntry*) os::malloc(counts_size, mtGC); if (*counts == NULL) { // allocation was unsuccessful return false; } - *epochs = (CardEpochCacheEntry*) os::malloc(epochs_size); + *epochs = (CardEpochCacheEntry*) os::malloc(epochs_size, mtGC); if (*epochs == NULL) { // allocation was unsuccessful - free counts array assert(*counts != NULL, "must be"); - os::free(*counts); + os::free(*counts, mtGC); *counts = NULL; return false; } @@ -479,8 +479,8 @@ bool ConcurrentG1Refine::expand_card_count_cache(int cache_size_idx) { // Allocation was successful. // We can just free the old arrays; we're // not interested in preserving the contents - if (_card_counts != NULL) os::free(_card_counts); - if (_card_epochs != NULL) os::free(_card_epochs); + if (_card_counts != NULL) os::free(_card_counts, mtGC); + if (_card_epochs != NULL) os::free(_card_epochs, mtGC); // Cache the size of the arrays and the index that got us there. _n_card_counts = cache_size; diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp index 2379e189f9f..46a7d309cdc 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp @@ -34,7 +34,7 @@ class ConcurrentG1RefineThread; class G1RemSet; -class ConcurrentG1Refine: public CHeapObj { +class ConcurrentG1Refine: public CHeapObj { ConcurrentG1RefineThread** _threads; int _n_threads; int _n_worker_threads; diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp index fd228964f7d..85ea7ce3a65 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp @@ -42,6 +42,7 @@ #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" // Concurrent marking bit map wrapper @@ -53,6 +54,8 @@ CMBitMapRO::CMBitMapRO(ReservedSpace rs, int shifter) : ReservedSpace brs(ReservedSpace::allocation_align_size_up( (_bmWordSize >> (_shifter + LogBitsPerByte)) + 1)); + MemTracker::record_virtual_memory_type((address)brs.base(), mtGC); + guarantee(brs.is_reserved(), "couldn't allocate concurrent marking bit map"); // For now we'll just commit all of the bit map up fromt. // Later on we'll try to be more parsimonious with swap. @@ -161,7 +164,7 @@ CMMarkStack::CMMarkStack(ConcurrentMark* cm) : {} void CMMarkStack::allocate(size_t size) { - _base = NEW_C_HEAP_ARRAY(oop, size); + _base = NEW_C_HEAP_ARRAY(oop, size, mtGC); if (_base == NULL) { vm_exit_during_initialization("Failed to allocate CM region mark stack"); } @@ -173,7 +176,7 @@ void CMMarkStack::allocate(size_t size) { CMMarkStack::~CMMarkStack() { if (_base != NULL) { - FREE_C_HEAP_ARRAY(oop, _base); + FREE_C_HEAP_ARRAY(oop, _base, mtGC); } } @@ -480,11 +483,11 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs, uint max_regions) : _root_regions.init(_g1h, this); - _tasks = NEW_C_HEAP_ARRAY(CMTask*, _max_task_num); - _accum_task_vtime = NEW_C_HEAP_ARRAY(double, _max_task_num); + _tasks = NEW_C_HEAP_ARRAY(CMTask*, _max_task_num, mtGC); + _accum_task_vtime = NEW_C_HEAP_ARRAY(double, _max_task_num, mtGC); - _count_card_bitmaps = NEW_C_HEAP_ARRAY(BitMap, _max_task_num); - _count_marked_bytes = NEW_C_HEAP_ARRAY(size_t*, _max_task_num); + _count_card_bitmaps = NEW_C_HEAP_ARRAY(BitMap, _max_task_num, mtGC); + _count_marked_bytes = NEW_C_HEAP_ARRAY(size_t*, _max_task_num, mtGC); BitMap::idx_t card_bm_size = _card_bm.size(); @@ -496,7 +499,7 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs, uint max_regions) : _task_queues->register_queue(i, task_queue); _count_card_bitmaps[i] = BitMap(card_bm_size, false); - _count_marked_bytes[i] = NEW_C_HEAP_ARRAY(size_t, (size_t) max_regions); + _count_marked_bytes[i] = NEW_C_HEAP_ARRAY(size_t, (size_t) max_regions, mtGC); _tasks[i] = new CMTask(i, this, _count_marked_bytes[i], diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp index ac1eff7aa40..c448e34fa2d 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp @@ -30,8 +30,8 @@ class G1CollectedHeap; class CMTask; -typedef GenericTaskQueue CMTaskQueue; -typedef GenericTaskQueueSet CMTaskQueueSet; +typedef GenericTaskQueue CMTaskQueue; +typedef GenericTaskQueueSet CMTaskQueueSet; // Closure used by CM during concurrent reference discovery // and reference processing (during remarking) to determine @@ -343,7 +343,7 @@ public: class ConcurrentMarkThread; -class ConcurrentMark : public CHeapObj { +class ConcurrentMark: public CHeapObj { friend class ConcurrentMarkThread; friend class CMTask; friend class CMBitMapClosure; diff --git a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp b/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp index 88d47dbe16b..7a0b71356f7 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp @@ -32,7 +32,7 @@ class FreeIdSet; // A closure class for processing card table entries. Note that we don't // require these closure objects to be stack-allocated. -class CardTableEntryClosure: public CHeapObj { +class CardTableEntryClosure: public CHeapObj { public: // Process the card whose card table entry is "card_ptr". If returns // "false", terminate the iteration early. diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp index d16685a7ebc..79f28250141 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp @@ -27,6 +27,7 @@ #include "memory/space.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" ////////////////////////////////////////////////////////////////////// // G1BlockOffsetSharedArray @@ -44,6 +45,9 @@ G1BlockOffsetSharedArray::G1BlockOffsetSharedArray(MemRegion reserved, if (!_vs.initialize(rs, 0)) { vm_exit_during_initialization("Could not reserve enough space for heap offset array"); } + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + _offset_array = (u_char*)_vs.low_boundary(); resize(init_word_size); if (TraceBlockOffsetTable) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp index b6a42c73eba..5621fd27ec8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp @@ -117,7 +117,7 @@ public: // Here is the shared array type. -class G1BlockOffsetSharedArray: public CHeapObj { +class G1BlockOffsetSharedArray: public CHeapObj { friend class G1BlockOffsetArray; friend class G1BlockOffsetArrayContigSpace; friend class VMStructs; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index fdd82c5c9c6..6952628e0b6 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -1916,14 +1916,14 @@ G1CollectedHeap::G1CollectedHeap(G1CollectorPolicy* policy_) : assert(n_rem_sets > 0, "Invariant."); HeapRegionRemSetIterator** iter_arr = - NEW_C_HEAP_ARRAY(HeapRegionRemSetIterator*, n_queues); + NEW_C_HEAP_ARRAY(HeapRegionRemSetIterator*, n_queues, mtGC); for (int i = 0; i < n_queues; i++) { iter_arr[i] = new HeapRegionRemSetIterator(); } _rem_set_iterator = iter_arr; - _worker_cset_start_region = NEW_C_HEAP_ARRAY(HeapRegion*, n_queues); - _worker_cset_start_region_time_stamp = NEW_C_HEAP_ARRAY(unsigned int, n_queues); + _worker_cset_start_region = NEW_C_HEAP_ARRAY(HeapRegion*, n_queues, mtGC); + _worker_cset_start_region_time_stamp = NEW_C_HEAP_ARRAY(unsigned int, n_queues, mtGC); for (int i = 0; i < n_queues; i++) { RefToScanQueue* q = new RefToScanQueue(); @@ -2082,7 +2082,7 @@ jint G1CollectedHeap::initialize() { _in_cset_fast_test_length = max_regions(); _in_cset_fast_test_base = - NEW_C_HEAP_ARRAY(bool, (size_t) _in_cset_fast_test_length); + NEW_C_HEAP_ARRAY(bool, (size_t) _in_cset_fast_test_length, mtGC); // We're biasing _in_cset_fast_test to avoid subtracting the // beginning of the heap every time we want to index; basically @@ -3505,7 +3505,7 @@ void G1CollectedHeap::setup_surviving_young_words() { assert(_surviving_young_words == NULL, "pre-condition"); uint array_length = g1_policy()->young_cset_region_length(); - _surviving_young_words = NEW_C_HEAP_ARRAY(size_t, (size_t) array_length); + _surviving_young_words = NEW_C_HEAP_ARRAY(size_t, (size_t) array_length, mtGC); if (_surviving_young_words == NULL) { vm_exit_out_of_memory(sizeof(size_t) * array_length, "Not enough space for young surv words summary."); @@ -3530,7 +3530,7 @@ G1CollectedHeap::update_surviving_young_words(size_t* surv_young_words) { void G1CollectedHeap::cleanup_surviving_young_words() { guarantee( _surviving_young_words != NULL, "pre-condition" ); - FREE_C_HEAP_ARRAY(size_t, _surviving_young_words); + FREE_C_HEAP_ARRAY(size_t, _surviving_young_words, mtGC); _surviving_young_words = NULL; } @@ -4073,7 +4073,7 @@ void G1CollectedHeap::abandon_gc_alloc_regions() { void G1CollectedHeap::init_for_evac_failure(OopsInHeapRegionClosure* cl) { _drain_in_progress = false; set_evac_failure_closure(cl); - _evac_failure_scan_stack = new (ResourceObj::C_HEAP) GrowableArray(40, true); + _evac_failure_scan_stack = new (ResourceObj::C_HEAP, mtGC) GrowableArray(40, true); } void G1CollectedHeap::finalize_for_evac_failure() { @@ -4207,9 +4207,9 @@ void G1CollectedHeap::preserve_mark_if_necessary(oop obj, markOop m) { if (_objs_with_preserved_marks == NULL) { assert(_preserved_marks_of_objs == NULL, "Both or none."); _objs_with_preserved_marks = - new (ResourceObj::C_HEAP) GrowableArray(40, true); + new (ResourceObj::C_HEAP, mtGC) GrowableArray(40, true); _preserved_marks_of_objs = - new (ResourceObj::C_HEAP) GrowableArray(40, true); + new (ResourceObj::C_HEAP, mtGC) GrowableArray(40, true); } _objs_with_preserved_marks->push(obj); _preserved_marks_of_objs->push(m); @@ -4269,7 +4269,7 @@ G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num) uint array_length = PADDING_ELEM_NUM + real_length + PADDING_ELEM_NUM; - _surviving_young_words_base = NEW_C_HEAP_ARRAY(size_t, array_length); + _surviving_young_words_base = NEW_C_HEAP_ARRAY(size_t, array_length, mtGC); if (_surviving_young_words_base == NULL) vm_exit_out_of_memory(array_length * sizeof(size_t), "Not enough space for young surv histo."); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp index d3f5382d03a..611cdd0b5ca 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp @@ -62,8 +62,8 @@ class ConcurrentMarkThread; class ConcurrentG1Refine; class GenerationCounters; -typedef OverflowTaskQueue RefToScanQueue; -typedef GenericTaskQueueSet RefToScanQueueSet; +typedef OverflowTaskQueue RefToScanQueue; +typedef GenericTaskQueueSet RefToScanQueueSet; typedef int RegionIdx_t; // needs to hold [ 0..max_regions() ) typedef int CardIdx_t; // needs to hold [ 0..CardsPerRegion ) @@ -74,7 +74,7 @@ enum GCAllocPurpose { GCAllocPurposeCount }; -class YoungList : public CHeapObj { +class YoungList : public CHeapObj { private: G1CollectedHeap* _g1h; @@ -1772,7 +1772,7 @@ public: G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num); ~G1ParScanThreadState() { - FREE_C_HEAP_ARRAY(size_t, _surviving_young_words_base); + FREE_C_HEAP_ARRAY(size_t, _surviving_young_words_base, mtGC); } RefToScanQueue* refs() { return _refs; } diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp index b3b839752b9..1d2cc9f189c 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp @@ -40,7 +40,7 @@ class CollectionSetChooser; // TraceGen0Time collects data on _both_ young and mixed evacuation pauses // (the latter may contain non-young regions - i.e. regions that are // technically in Gen1) while TraceGen1Time collects data about full GCs. -class TraceGen0TimeData : public CHeapObj { +class TraceGen0TimeData : public CHeapObj { private: unsigned _young_pause_num; unsigned _mixed_pause_num; @@ -86,7 +86,7 @@ public: void print() const; }; -class TraceGen1TimeData : public CHeapObj { +class TraceGen1TimeData : public CHeapObj { private: NumberSeq _all_full_gc_times; @@ -131,7 +131,7 @@ class TraceGen1TimeData : public CHeapObj { // // NewSize and MaxNewSize override NewRatio. So, NewRatio is ignored if it is // combined with either NewSize or MaxNewSize. (A warning message is printed.) -class G1YoungGenSizer : public CHeapObj { +class G1YoungGenSizer : public CHeapObj { private: enum SizerKind { SizerDefaults, diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp index a13c62eb782..a8146c92386 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp @@ -34,7 +34,7 @@ /***** ALL TIMES ARE IN SECS!!!!!!! *****/ // this is the "interface" -class G1MMUTracker: public CHeapObj { +class G1MMUTracker: public CHeapObj { protected: double _time_slice; double _max_gc_time; // this is per time slice diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp index 61e278a7ff7..4e1761e260b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp @@ -112,7 +112,7 @@ class G1CollectedHeap; // do which is important as we want to keep the eden region allocation // path as low-overhead as possible. -class G1MonitoringSupport : public CHeapObj { +class G1MonitoringSupport : public CHeapObj { friend class VMStructs; G1CollectedHeap* _g1h; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp index 1f366c8c676..b2bcbae937f 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp @@ -75,7 +75,7 @@ G1RemSet::G1RemSet(G1CollectedHeap* g1, CardTableModRefBS* ct_bs) { _seq_task = new SubTasksDone(NumSeqTasks); guarantee(n_workers() > 0, "There should be some workers"); - _cset_rs_update_cl = NEW_C_HEAP_ARRAY(OopsInHeapRegionClosure*, n_workers()); + _cset_rs_update_cl = NEW_C_HEAP_ARRAY(OopsInHeapRegionClosure*, n_workers(), mtGC); for (uint i = 0; i < n_workers(); i++) { _cset_rs_update_cl[i] = NULL; } @@ -86,7 +86,7 @@ G1RemSet::~G1RemSet() { for (uint i = 0; i < n_workers(); i++) { assert(_cset_rs_update_cl[i] == NULL, "it should be"); } - FREE_C_HEAP_ARRAY(OopsInHeapRegionClosure*, _cset_rs_update_cl); + FREE_C_HEAP_ARRAY(OopsInHeapRegionClosure*, _cset_rs_update_cl, mtGC); } void CountNonCleanMemRegionClosure::do_MemRegion(MemRegion mr) { @@ -416,7 +416,7 @@ void G1RemSet::prepare_for_oops_into_collection_set_do() { // _seq_task->set_n_termination((int)n_workers()); } guarantee( _cards_scanned == NULL, "invariant" ); - _cards_scanned = NEW_C_HEAP_ARRAY(size_t, n_workers()); + _cards_scanned = NEW_C_HEAP_ARRAY(size_t, n_workers(), mtGC); for (uint i = 0; i < n_workers(); ++i) { _cards_scanned[i] = 0; } @@ -487,7 +487,7 @@ void G1RemSet::cleanup_after_oops_into_collection_set_do() { for (uint i = 0; i < n_workers(); ++i) { _total_cards_scanned += _cards_scanned[i]; } - FREE_C_HEAP_ARRAY(size_t, _cards_scanned); + FREE_C_HEAP_ARRAY(size_t, _cards_scanned, mtGC); _cards_scanned = NULL; // Cleanup after copy _g1->set_refine_cte_cl_concurrency(true); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp index 9c869055afd..edf28a0536b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp @@ -36,7 +36,7 @@ class ConcurrentG1Refine; // external heap references into it. Uses a mod ref bs to track updates, // so that they can be used to update the individual region remsets. -class G1RemSet: public CHeapObj { +class G1RemSet: public CHeapObj { protected: G1CollectedHeap* _g1; unsigned _conc_refine_cards; diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp index fc275a6edae..16dc0e4a2db 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp @@ -39,7 +39,7 @@ // OtherRegionsTable -class PerRegionTable: public CHeapObj { +class PerRegionTable: public CHeapObj { friend class OtherRegionsTable; friend class HeapRegionRemSetIterator; @@ -282,7 +282,7 @@ class PosParPRT: public PerRegionTable { // We must recount the "occupied." recount_occupied(); #endif - FREE_C_HEAP_ARRAY(PerRegionTable*, _par_tables); + FREE_C_HEAP_ARRAY(PerRegionTable*, _par_tables, mtGC); _par_tables = NULL; #if COUNT_PAR_EXPANDS Atomic::inc(&n_par_contracts); @@ -385,7 +385,7 @@ public: if (res != NULL) return; // Otherwise, we reserved the right to do the expansion. - PerRegionTable** ptables = NEW_C_HEAP_ARRAY(PerRegionTable*, n); + PerRegionTable** ptables = NEW_C_HEAP_ARRAY(PerRegionTable*, n, mtGC); for (int i = 0; i < n; i++) { PerRegionTable* ptable = PerRegionTable::alloc(hr()); ptables[i] = ptable; @@ -546,9 +546,9 @@ void OtherRegionsTable::init_from_card_cache(size_t max_regions) { _from_card_cache_max_regions = max_regions; int n_par_rs = HeapRegionRemSet::num_par_rem_sets(); - _from_card_cache = NEW_C_HEAP_ARRAY(int*, n_par_rs); + _from_card_cache = NEW_C_HEAP_ARRAY(int*, n_par_rs, mtGC); for (int i = 0; i < n_par_rs; i++) { - _from_card_cache[i] = NEW_C_HEAP_ARRAY(int, max_regions); + _from_card_cache[i] = NEW_C_HEAP_ARRAY(int, max_regions, mtGC); for (size_t j = 0; j < max_regions; j++) { _from_card_cache[i][j] = -1; // An invalid value. } @@ -1333,9 +1333,9 @@ void HeapRegionRemSet::record(HeapRegion* hr, OopOrNarrowOopStar f) { && _recorded_cards == NULL && _recorded_regions == NULL, "Inv"); - _recorded_oops = NEW_C_HEAP_ARRAY(OopOrNarrowOopStar, MaxRecorded); - _recorded_cards = NEW_C_HEAP_ARRAY(HeapWord*, MaxRecorded); - _recorded_regions = NEW_C_HEAP_ARRAY(HeapRegion*, MaxRecorded); + _recorded_oops = NEW_C_HEAP_ARRAY(OopOrNarrowOopStar, MaxRecorded, mtGC); + _recorded_cards = NEW_C_HEAP_ARRAY(HeapWord*, MaxRecorded, mtGC); + _recorded_regions = NEW_C_HEAP_ARRAY(HeapRegion*, MaxRecorded, mtGC); } if (_n_recorded == MaxRecorded) { gclog_or_tty->print_cr("Filled up 'recorded' (%d).", MaxRecorded); @@ -1356,8 +1356,8 @@ void HeapRegionRemSet::record_event(Event evnt) { assert(_n_recorded_events == 0 && _recorded_event_index == NULL, "Inv"); - _recorded_events = NEW_C_HEAP_ARRAY(Event, MaxRecordedEvents); - _recorded_event_index = NEW_C_HEAP_ARRAY(int, MaxRecordedEvents); + _recorded_events = NEW_C_HEAP_ARRAY(Event, MaxRecordedEvents, mtGC); + _recorded_event_index = NEW_C_HEAP_ARRAY(int, MaxRecordedEvents, mtGC); } if (_n_recorded_events == MaxRecordedEvents) { gclog_or_tty->print_cr("Filled up 'recorded_events' (%d).", MaxRecordedEvents); diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp index 504afa2ef04..f0d4d165952 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp @@ -173,7 +173,7 @@ public: static void print_from_card_cache(); }; -class HeapRegionRemSet : public CHeapObj { +class HeapRegionRemSet : public CHeapObj { friend class VMStructs; friend class HeapRegionRemSetIterator; @@ -360,7 +360,7 @@ public: #endif }; -class HeapRegionRemSetIterator : public CHeapObj { +class HeapRegionRemSetIterator : public CHeapObj { // The region over which we're iterating. const HeapRegionRemSet* _hrrs; diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp index dfac7d47d29..fcee7cb354b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp @@ -86,7 +86,7 @@ void HeapRegionSeq::initialize(HeapWord* bottom, HeapWord* end, _allocated_length = 0; _max_length = max_length; - _regions = NEW_C_HEAP_ARRAY(HeapRegion*, max_length); + _regions = NEW_C_HEAP_ARRAY(HeapRegion*, max_length, mtGC); memset(_regions, 0, (size_t) max_length * sizeof(HeapRegion*)); _regions_biased = _regions - ((uintx) bottom >> _region_shift); diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp index 94f4c0f7699..b1da14f6bc5 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp @@ -53,7 +53,7 @@ class FreeRegionList; // // and maintain that: _length <= _allocated_length <= _max_length -class HeapRegionSeq: public CHeapObj { +class HeapRegionSeq: public CHeapObj { friend class VMStructs; // The array that holds the HeapRegions. diff --git a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp b/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp index 7bf8fec644f..1a756aa3122 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp @@ -126,7 +126,7 @@ void** PtrQueueSet::allocate_buffer() { return res; } else { // Allocate space for the BufferNode in front of the buffer. - char *b = NEW_C_HEAP_ARRAY(char, _sz + BufferNode::aligned_size()); + char *b = NEW_C_HEAP_ARRAY(char, _sz + BufferNode::aligned_size(), mtGC); return BufferNode::make_buffer_from_block(b); } } @@ -149,7 +149,7 @@ void PtrQueueSet::reduce_free_list() { assert(_buf_free_list != NULL, "_buf_free_list_sz must be wrong."); void* b = BufferNode::make_block_from_node(_buf_free_list); _buf_free_list = _buf_free_list->next(); - FREE_C_HEAP_ARRAY(char, b); + FREE_C_HEAP_ARRAY(char, b, mtGC); _buf_free_list_sz --; n--; } diff --git a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp index 69b01bc69f5..c87f12dad3e 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp @@ -208,7 +208,7 @@ void SATBMarkQueueSet::initialize(Monitor* cbl_mon, Mutex* fl_lock, PtrQueueSet::initialize(cbl_mon, fl_lock, process_completed_threshold, -1); _shared_satb_queue.set_lock(lock); if (ParallelGCThreads > 0) { - _par_closures = NEW_C_HEAP_ARRAY(ObjectClosure*, ParallelGCThreads); + _par_closures = NEW_C_HEAP_ARRAY(ObjectClosure*, ParallelGCThreads, mtGC); } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp index 64b1be2460f..0daa63512a3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp @@ -148,8 +148,8 @@ void SparsePRTEntry::copy_cards(SparsePRTEntry* e) const { RSHashTable::RSHashTable(size_t capacity) : _capacity(capacity), _capacity_mask(capacity-1), _occupied_entries(0), _occupied_cards(0), - _entries((SparsePRTEntry*)NEW_C_HEAP_ARRAY(char, SparsePRTEntry::size() * capacity)), - _buckets(NEW_C_HEAP_ARRAY(int, capacity)), + _entries((SparsePRTEntry*)NEW_C_HEAP_ARRAY(char, SparsePRTEntry::size() * capacity, mtGC)), + _buckets(NEW_C_HEAP_ARRAY(int, capacity, mtGC)), _free_list(NullEntry), _free_region(0) { clear(); @@ -157,11 +157,11 @@ RSHashTable::RSHashTable(size_t capacity) : RSHashTable::~RSHashTable() { if (_entries != NULL) { - FREE_C_HEAP_ARRAY(SparsePRTEntry, _entries); + FREE_C_HEAP_ARRAY(SparsePRTEntry, _entries, mtGC); _entries = NULL; } if (_buckets != NULL) { - FREE_C_HEAP_ARRAY(int, _buckets); + FREE_C_HEAP_ARRAY(int, _buckets, mtGC); _buckets = NULL; } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp index 6780086795f..6a860295745 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp @@ -42,7 +42,7 @@ // insertions only enqueue old versions for deletions, but do not delete // old versions synchronously. -class SparsePRTEntry: public CHeapObj { +class SparsePRTEntry: public CHeapObj { public: enum SomePublicConstants { NullEntry = -1, @@ -101,7 +101,7 @@ public: }; -class RSHashTable : public CHeapObj { +class RSHashTable : public CHeapObj { friend class RSHashTableIter; diff --git a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp index ec44c8e70a8..1232cf390e8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp @@ -43,7 +43,7 @@ SurvRateGroup::SurvRateGroup(G1CollectorPolicy* g1p, reset(); if (summary_surv_rates_len > 0) { size_t length = summary_surv_rates_len; - _summary_surv_rates = NEW_C_HEAP_ARRAY(NumberSeq*, length); + _summary_surv_rates = NEW_C_HEAP_ARRAY(NumberSeq*, length, mtGC); for (size_t i = 0; i < length; ++i) { _summary_surv_rates[i] = new NumberSeq(); } @@ -90,9 +90,9 @@ SurvRateGroup::stop_adding_regions() { double* old_accum_surv_rate_pred = _accum_surv_rate_pred; TruncatedSeq** old_surv_rate_pred = _surv_rate_pred; - _surv_rate = NEW_C_HEAP_ARRAY(double, _region_num); - _accum_surv_rate_pred = NEW_C_HEAP_ARRAY(double, _region_num); - _surv_rate_pred = NEW_C_HEAP_ARRAY(TruncatedSeq*, _region_num); + _surv_rate = NEW_C_HEAP_ARRAY(double, _region_num, mtGC); + _accum_surv_rate_pred = NEW_C_HEAP_ARRAY(double, _region_num, mtGC); + _surv_rate_pred = NEW_C_HEAP_ARRAY(TruncatedSeq*, _region_num, mtGC); for (size_t i = 0; i < _stats_arrays_length; ++i) { _surv_rate_pred[i] = old_surv_rate_pred[i]; @@ -104,13 +104,13 @@ SurvRateGroup::stop_adding_regions() { _stats_arrays_length = _region_num; if (old_surv_rate != NULL) { - FREE_C_HEAP_ARRAY(double, old_surv_rate); + FREE_C_HEAP_ARRAY(double, old_surv_rate, mtGC); } if (old_accum_surv_rate_pred != NULL) { - FREE_C_HEAP_ARRAY(double, old_accum_surv_rate_pred); + FREE_C_HEAP_ARRAY(double, old_accum_surv_rate_pred, mtGC); } if (old_surv_rate_pred != NULL) { - FREE_C_HEAP_ARRAY(TruncatedSeq*, old_surv_rate_pred); + FREE_C_HEAP_ARRAY(TruncatedSeq*, old_surv_rate_pred, mtGC); } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp index c9617f2ed2e..abac3e00a72 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp @@ -29,7 +29,7 @@ class G1CollectorPolicy; -class SurvRateGroup : public CHeapObj { +class SurvRateGroup : public CHeapObj { private: G1CollectorPolicy* _g1p; const char* _name; diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp index 25be723aa98..b4b62fc77f9 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp @@ -457,12 +457,12 @@ get_LNC_array_for_space(Space* sp, if (_lowest_non_clean[i] != NULL) { assert(n_chunks != _lowest_non_clean_chunk_size[i], "logical consequence"); - FREE_C_HEAP_ARRAY(CardPtr, _lowest_non_clean[i]); + FREE_C_HEAP_ARRAY(CardPtr, _lowest_non_clean[i], mtGC); _lowest_non_clean[i] = NULL; } // Now allocate a new one if necessary. if (_lowest_non_clean[i] == NULL) { - _lowest_non_clean[i] = NEW_C_HEAP_ARRAY(CardPtr, n_chunks); + _lowest_non_clean[i] = NEW_C_HEAP_ARRAY(CardPtr, n_chunks, mtGC); _lowest_non_clean_chunk_size[i] = n_chunks; _lowest_non_clean_base_chunk_index[i] = addr_to_chunk_index(covered.start()); for (int j = 0; j < (int)n_chunks; j++) diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp index 6d1504a8653..ea2fbf6170e 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp @@ -35,7 +35,7 @@ class PLABStats; // A per-thread allocation buffer used during GC. -class ParGCAllocBuffer: public CHeapObj { +class ParGCAllocBuffer: public CHeapObj { protected: char head[32]; size_t _word_sz; // in HeapWord units diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp index 96ae468f0bf..12472f6ad93 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp @@ -59,7 +59,7 @@ ParScanThreadState::ParScanThreadState(Space* to_space_, Generation* old_gen_, int thread_num_, ObjToScanQueueSet* work_queue_set_, - Stack* overflow_stacks_, + Stack* overflow_stacks_, size_t desired_plab_sz_, ParallelTaskTerminator& term_) : _to_space(to_space_), _old_gen(old_gen_), _young_gen(gen_), _thread_num(thread_num_), @@ -184,7 +184,7 @@ bool ParScanThreadState::take_from_overflow_stack() { assert(ParGCUseLocalOverflow, "Else should not call"); assert(young_gen()->overflow_list() == NULL, "Error"); ObjToScanQueue* queue = work_queue(); - Stack* const of_stack = overflow_stack(); + Stack* const of_stack = overflow_stack(); const size_t num_overflow_elems = of_stack->size(); const size_t space_available = queue->max_elems() - queue->size(); const size_t num_take_elems = MIN3(space_available / 4, @@ -297,7 +297,7 @@ public: ParNewGeneration& gen, Generation& old_gen, ObjToScanQueueSet& queue_set, - Stack* overflow_stacks_, + Stack* overflow_stacks_, size_t desired_plab_sz, ParallelTaskTerminator& term); @@ -331,7 +331,7 @@ private: ParScanThreadStateSet::ParScanThreadStateSet( int num_threads, Space& to_space, ParNewGeneration& gen, Generation& old_gen, ObjToScanQueueSet& queue_set, - Stack* overflow_stacks, + Stack* overflow_stacks, size_t desired_plab_sz, ParallelTaskTerminator& term) : ResourceArray(sizeof(ParScanThreadState), num_threads), _gen(gen), _next_gen(old_gen), _term(term) @@ -649,9 +649,14 @@ ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level) _overflow_stacks = NULL; if (ParGCUseLocalOverflow) { - _overflow_stacks = NEW_C_HEAP_ARRAY(Stack, ParallelGCThreads); + + // typedef to workaround NEW_C_HEAP_ARRAY macro, which can not deal + // with ',' + typedef Stack GCOopStack; + + _overflow_stacks = NEW_C_HEAP_ARRAY(GCOopStack, ParallelGCThreads, mtGC); for (size_t i = 0; i < ParallelGCThreads; ++i) { - new (_overflow_stacks + i) Stack(); + new (_overflow_stacks + i) Stack(); } } @@ -1401,7 +1406,7 @@ void ParNewGeneration::push_on_overflow_list(oop from_space_obj, ParScanThreadSt assert(_num_par_pushes > 0, "Tautology"); #endif if (from_space_obj->forwardee() == from_space_obj) { - oopDesc* listhead = NEW_C_HEAP_ARRAY(oopDesc, 1); + oopDesc* listhead = NEW_C_HEAP_ARRAY(oopDesc, 1, mtGC); listhead->forward_to(from_space_obj); from_space_obj = listhead; } @@ -1553,7 +1558,7 @@ bool ParNewGeneration::take_from_overflow_list_work(ParScanThreadState* par_scan // This can become a scaling bottleneck when there is work queue overflow coincident // with promotion failure. oopDesc* f = cur; - FREE_C_HEAP_ARRAY(oopDesc, f); + FREE_C_HEAP_ARRAY(oopDesc, f, mtGC); } else if (par_scan_state->should_be_partially_scanned(obj_to_push, cur)) { assert(arrayOop(cur)->length() == 0, "entire array remaining to be scanned"); obj_to_push = cur; diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp index 75eac033b06..5b124a953fd 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp @@ -41,7 +41,7 @@ class ParEvacuateFollowersClosure; // in genOopClosures.inline.hpp. typedef Padded ObjToScanQueue; -typedef GenericTaskQueueSet ObjToScanQueueSet; +typedef GenericTaskQueueSet ObjToScanQueueSet; class ParKeepAliveClosure: public DefNewGeneration::KeepAliveClosure { private: @@ -59,7 +59,7 @@ class ParScanThreadState { friend class ParScanThreadStateSet; private: ObjToScanQueue *_work_queue; - Stack* const _overflow_stack; + Stack* const _overflow_stack; ParGCAllocBuffer _to_space_alloc_buffer; @@ -127,7 +127,7 @@ class ParScanThreadState { ParScanThreadState(Space* to_space_, ParNewGeneration* gen_, Generation* old_gen_, int thread_num_, ObjToScanQueueSet* work_queue_set_, - Stack* overflow_stacks_, + Stack* overflow_stacks_, size_t desired_plab_sz_, ParallelTaskTerminator& term_); @@ -151,7 +151,7 @@ class ParScanThreadState { void trim_queues(int max_size); // Private overflow stack usage - Stack* overflow_stack() { return _overflow_stack; } + Stack* overflow_stack() { return _overflow_stack; } bool take_from_overflow_stack(); void push_on_overflow_stack(oop p); @@ -312,7 +312,7 @@ class ParNewGeneration: public DefNewGeneration { ObjToScanQueueSet* _task_queues; // Per-worker-thread local overflow stacks - Stack* _overflow_stacks; + Stack* _overflow_stacks; // Desired size of survivor space plab's PLABStats _plab_stats; diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp index 747868fc5f5..4a727e9357a 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp @@ -32,7 +32,7 @@ class ParScanThreadState; class ParNewGeneration; typedef Padded ObjToScanQueue; -typedef GenericTaskQueueSet ObjToScanQueueSet; +typedef GenericTaskQueueSet ObjToScanQueueSet; class ParallelTaskTerminator; class ParScanClosure: public OopsInGenClosure { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp index 77fe9e022e5..3018805fe69 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp @@ -40,7 +40,7 @@ // must be shrunk. Adjusting the boundary between the generations // is called for in this class. -class AdjoiningGenerations : public CHeapObj { +class AdjoiningGenerations : public CHeapObj { friend class VMStructs; private: // The young generation and old generation, respectively diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp index 04424aa5208..b32007eded5 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp @@ -116,7 +116,7 @@ GCTaskQueue* GCTaskQueue::create() { } GCTaskQueue* GCTaskQueue::create_on_c_heap() { - GCTaskQueue* result = new(ResourceObj::C_HEAP) GCTaskQueue(true); + GCTaskQueue* result = new(ResourceObj::C_HEAP, mtGC) GCTaskQueue(true); if (TraceGCTaskQueue) { tty->print_cr("GCTaskQueue::create_on_c_heap()" " returns " INTPTR_FORMAT, @@ -403,19 +403,19 @@ void GCTaskManager::initialize() { _queue = SynchronizedGCTaskQueue::create(unsynchronized_queue, lock()); _noop_task = NoopGCTask::create_on_c_heap(); _idle_inactive_task = WaitForBarrierGCTask::create_on_c_heap(); - _resource_flag = NEW_C_HEAP_ARRAY(bool, workers()); + _resource_flag = NEW_C_HEAP_ARRAY(bool, workers(), mtGC); { // Set up worker threads. // Distribute the workers among the available processors, // unless we were told not to, or if the os doesn't want to. - uint* processor_assignment = NEW_C_HEAP_ARRAY(uint, workers()); + uint* processor_assignment = NEW_C_HEAP_ARRAY(uint, workers(), mtGC); if (!BindGCTaskThreadsToCPUs || !os::distribute_processes(workers(), processor_assignment)) { for (uint a = 0; a < workers(); a += 1) { processor_assignment[a] = sentinel_worker(); } } - _thread = NEW_C_HEAP_ARRAY(GCTaskThread*, workers()); + _thread = NEW_C_HEAP_ARRAY(GCTaskThread*, workers(), mtGC); for (uint t = 0; t < workers(); t += 1) { set_thread(t, GCTaskThread::create(this, t, processor_assignment[t])); } @@ -426,7 +426,7 @@ void GCTaskManager::initialize() { } tty->cr(); } - FREE_C_HEAP_ARRAY(uint, processor_assignment); + FREE_C_HEAP_ARRAY(uint, processor_assignment, mtGC); } reset_busy_workers(); set_unblocked(); @@ -455,11 +455,11 @@ GCTaskManager::~GCTaskManager() { GCTaskThread::destroy(thread(i)); set_thread(i, NULL); } - FREE_C_HEAP_ARRAY(GCTaskThread*, _thread); + FREE_C_HEAP_ARRAY(GCTaskThread*, _thread, mtGC); _thread = NULL; } if (_resource_flag != NULL) { - FREE_C_HEAP_ARRAY(bool, _resource_flag); + FREE_C_HEAP_ARRAY(bool, _resource_flag, mtGC); _resource_flag = NULL; } if (queue() != NULL) { @@ -817,7 +817,7 @@ NoopGCTask* NoopGCTask::create() { } NoopGCTask* NoopGCTask::create_on_c_heap() { - NoopGCTask* result = new(ResourceObj::C_HEAP) NoopGCTask(true); + NoopGCTask* result = new(ResourceObj::C_HEAP, mtGC) NoopGCTask(true); return result; } @@ -848,7 +848,7 @@ IdleGCTask* IdleGCTask::create() { } IdleGCTask* IdleGCTask::create_on_c_heap() { - IdleGCTask* result = new(ResourceObj::C_HEAP) IdleGCTask(true); + IdleGCTask* result = new(ResourceObj::C_HEAP, mtGC) IdleGCTask(true); assert(UseDynamicNumberOfGCThreads, "Should only be used with dynamic GC thread"); return result; @@ -984,7 +984,7 @@ WaitForBarrierGCTask* WaitForBarrierGCTask::create() { WaitForBarrierGCTask* WaitForBarrierGCTask::create_on_c_heap() { WaitForBarrierGCTask* result = - new (ResourceObj::C_HEAP) WaitForBarrierGCTask(true); + new (ResourceObj::C_HEAP, mtGC) WaitForBarrierGCTask(true); return result; } @@ -1114,7 +1114,7 @@ Monitor* MonitorSupply::reserve() { // Lazy initialization. if (freelist() == NULL) { _freelist = - new(ResourceObj::C_HEAP) GrowableArray(ParallelGCThreads, + new(ResourceObj::C_HEAP, mtGC) GrowableArray(ParallelGCThreads, true); } if (! freelist()->is_empty()) { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp index 65a8458d3b9..b64f7d9557e 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp @@ -216,7 +216,7 @@ protected: // A GCTaskQueue that can be synchronized. // This "has-a" GCTaskQueue and a mutex to do the exclusion. -class SynchronizedGCTaskQueue : public CHeapObj { +class SynchronizedGCTaskQueue : public CHeapObj { private: // Instance state. GCTaskQueue* _unsynchronized_queue; // Has-a unsynchronized queue. @@ -278,7 +278,7 @@ protected: // This is an abstract base class for getting notifications // when a GCTaskManager is done. -class NotifyDoneClosure : public CHeapObj { +class NotifyDoneClosure : public CHeapObj { public: // The notification callback method. virtual void notify(GCTaskManager* manager) = 0; @@ -355,7 +355,7 @@ protected: // held in the GCTaskThread** _thread array in GCTaskManager. -class GCTaskManager : public CHeapObj { +class GCTaskManager : public CHeapObj { friend class ParCompactionManager; friend class PSParallelCompact; friend class PSScavenge; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp index 976d879d5f6..9bbdf49ed75 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp @@ -46,7 +46,7 @@ GCTaskThread::GCTaskThread(GCTaskManager* manager, vm_exit_out_of_memory(0, "Cannot create GC thread. Out of system resources."); if (PrintGCTaskTimeStamps) { - _time_stamps = NEW_C_HEAP_ARRAY(GCTaskTimeStamp, GCTaskTimeStampEntries ); + _time_stamps = NEW_C_HEAP_ARRAY(GCTaskTimeStamp, GCTaskTimeStampEntries, mtGC); guarantee(_time_stamps != NULL, "Sanity"); } @@ -56,7 +56,7 @@ GCTaskThread::GCTaskThread(GCTaskManager* manager, GCTaskThread::~GCTaskThread() { if (_time_stamps != NULL) { - FREE_C_HEAP_ARRAY(GCTaskTimeStamp, _time_stamps); + FREE_C_HEAP_ARRAY(GCTaskTimeStamp, _time_stamps, mtGC); } } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp index c8406545e9b..1a77fe060c4 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp @@ -90,7 +90,7 @@ protected: void set_is_working(bool v) { _is_working = v; } }; -class GCTaskTimeStamp : public CHeapObj +class GCTaskTimeStamp : public CHeapObj { private: jlong _entry_time; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp index 1b80839213d..8a852cc95e9 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp @@ -28,6 +28,7 @@ #include "memory/cardTableModRefBS.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" void ObjectStartArray::initialize(MemRegion reserved_region) { // We're based on the assumption that we use the same @@ -50,6 +51,7 @@ void ObjectStartArray::initialize(MemRegion reserved_region) { if (!backing_store.is_reserved()) { vm_exit_during_initialization("Could not reserve space for ObjectStartArray"); } + MemTracker::record_virtual_memory_type((address)backing_store.base(), mtGC); // We do not commit any memory initially if (!_virtual_space.initialize(backing_store, 0)) { @@ -57,10 +59,14 @@ void ObjectStartArray::initialize(MemRegion reserved_region) { } _raw_base = (jbyte*)_virtual_space.low_boundary(); + if (_raw_base == NULL) { vm_exit_during_initialization("Could not get raw_base address"); } + MemTracker::record_virtual_memory_type((address)_raw_base, mtGC); + + _offset_base = _raw_base - (size_t(reserved_region.start()) >> block_shift); _covered_region.set_start(reserved_region.start()); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp index cea680b58b1..cbd671a06c4 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp @@ -35,7 +35,7 @@ // covered region. // -class ObjectStartArray : public CHeapObj { +class ObjectStartArray : public CHeapObj { friend class VerifyObjectStartArrayClosure; private: diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp index 4496a6987de..44ddcba440f 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp @@ -29,6 +29,7 @@ #include "oops/oop.inline.hpp" #include "runtime/os.hpp" #include "utilities/bitMap.inline.hpp" +#include "services/memTracker.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" #endif @@ -61,6 +62,9 @@ ParMarkBitMap::initialize(MemRegion covered_region) ReservedSpace rs(bytes, rs_align, rs_align > 0); os::trace_page_sizes("par bitmap", raw_bytes, raw_bytes, page_sz, rs.base(), rs.size()); + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + _virtual_space = new PSVirtualSpace(rs, page_sz); if (_virtual_space != NULL && _virtual_space->expand_by(bytes)) { _region_start = covered_region.start(); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp index e6a07310dbf..9523b7923f6 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp @@ -32,7 +32,7 @@ class oopDesc; class ParMarkBitMapClosure; -class ParMarkBitMap: public CHeapObj +class ParMarkBitMap: public CHeapObj { public: typedef BitMap::idx_t idx_t; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp index 9a8848d5399..a1031a76a61 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp @@ -40,6 +40,7 @@ #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" #include "runtime/vmThread.hpp" +#include "services/memTracker.hpp" #include "utilities/vmError.hpp" PSYoungGen* ParallelScavengeHeap::_young_gen = NULL; @@ -161,6 +162,8 @@ jint ParallelScavengeHeap::initialize() { } } + MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtJavaHeap); + os::trace_page_sizes("ps perm", pg_min_size, pg_max_size, pg_page_sz, heap_rs.base(), pg_max_size); os::trace_page_sizes("ps main", og_min_size + yg_min_size, diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp index ab4ad84796b..fc66dcf52a9 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp @@ -81,14 +81,14 @@ void ParCompactionManager::initialize(ParMarkBitMap* mbm) { uint parallel_gc_threads = PSParallelCompact::gc_task_manager()->workers(); assert(_manager_array == NULL, "Attempt to initialize twice"); - _manager_array = NEW_C_HEAP_ARRAY(ParCompactionManager*, parallel_gc_threads+1 ); + _manager_array = NEW_C_HEAP_ARRAY(ParCompactionManager*, parallel_gc_threads+1, mtGC); guarantee(_manager_array != NULL, "Could not allocate manager_array"); _region_list = NEW_C_HEAP_ARRAY(RegionTaskQueue*, - parallel_gc_threads+1); + parallel_gc_threads+1, mtGC); guarantee(_region_list != NULL, "Could not initialize promotion manager"); - _recycled_stack_index = NEW_C_HEAP_ARRAY(uint, parallel_gc_threads); + _recycled_stack_index = NEW_C_HEAP_ARRAY(uint, parallel_gc_threads, mtGC); // parallel_gc-threads + 1 to be consistent with the number of // compaction managers. diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp index a864ac8edf1..73849bebaaf 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp @@ -41,7 +41,7 @@ class ObjectStartArray; class ParallelCompactData; class ParMarkBitMap; -class ParCompactionManager : public CHeapObj { +class ParCompactionManager : public CHeapObj { friend class ParallelTaskTerminator; friend class ParMarkBitMap; friend class PSParallelCompact; @@ -66,8 +66,8 @@ class ParCompactionManager : public CHeapObj { private: // 32-bit: 4K * 8 = 32KiB; 64-bit: 8K * 16 = 128KiB #define QUEUE_SIZE (1 << NOT_LP64(12) LP64_ONLY(13)) - typedef OverflowTaskQueue ObjArrayTaskQueue; - typedef GenericTaskQueueSet ObjArrayTaskQueueSet; + typedef OverflowTaskQueue ObjArrayTaskQueue; + typedef GenericTaskQueueSet ObjArrayTaskQueueSet; #undef QUEUE_SIZE static ParCompactionManager** _manager_array; @@ -78,7 +78,7 @@ class ParCompactionManager : public CHeapObj { static PSOldGen* _old_gen; private: - OverflowTaskQueue _marking_stack; + OverflowTaskQueue _marking_stack; ObjArrayTaskQueue _objarray_stack; // Is there a way to reuse the _marking_stack for the @@ -110,8 +110,8 @@ private: // popped. If -1, there has not been any entry popped. static int _recycled_bottom; - Stack _revisit_klass_stack; - Stack _revisit_mdo_stack; + Stack _revisit_klass_stack; + Stack _revisit_mdo_stack; static ParMarkBitMap* _mark_bitmap; @@ -126,7 +126,7 @@ private: protected: // Array of tasks. Needed by the ParallelTaskTerminator. static RegionTaskQueueSet* region_array() { return _region_array; } - OverflowTaskQueue* marking_stack() { return &_marking_stack; } + OverflowTaskQueue* marking_stack() { return &_marking_stack; } // Pushes onto the marking stack. If the marking stack is full, // pushes onto the overflow stack. @@ -175,8 +175,8 @@ private: bool should_update(); bool should_copy(); - Stack* revisit_klass_stack() { return &_revisit_klass_stack; } - Stack* revisit_mdo_stack() { return &_revisit_mdo_stack; } + Stack* revisit_klass_stack() { return &_revisit_klass_stack; } + Stack* revisit_mdo_stack() { return &_revisit_mdo_stack; } // Save for later processing. Must not fail. inline void push(oop obj) { _marking_stack.push(obj); } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp index 67378de145e..ccb4298f883 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp @@ -40,7 +40,7 @@ PSGenerationCounters::PSGenerationCounters(const char* name, const char* cns = PerfDataManager::name_space("generation", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp index 9d721d61bc4..ae92f3690fe 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp @@ -34,7 +34,7 @@ class ObjectStartArray; -class PSMarkSweepDecorator: public CHeapObj { +class PSMarkSweepDecorator: public CHeapObj { private: static PSMarkSweepDecorator* _destination_decorator; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp index ce45376f01e..c07b381bc62 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp @@ -34,7 +34,7 @@ class PSMarkSweepDecorator; -class PSOldGen : public CHeapObj { +class PSOldGen : public CHeapObj { friend class VMStructs; friend class PSPromotionManager; // Uses the cas_allocate methods friend class ParallelScavengeHeap; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp index 8e7c74e4495..2633197b067 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @@ -53,6 +53,7 @@ #include "runtime/vmThread.hpp" #include "services/management.hpp" #include "services/memoryService.hpp" +#include "services/memTracker.hpp" #include "utilities/events.hpp" #include "utilities/stack.inline.hpp" @@ -405,6 +406,9 @@ ParallelCompactData::create_vspace(size_t count, size_t element_size) ReservedSpace rs(bytes, rs_align, rs_align > 0); os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(), rs.size()); + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz); if (vspace != 0) { if (vspace->expand_by(bytes)) { @@ -2732,7 +2736,7 @@ PSParallelCompact::follow_weak_klass_links() { for (uint i = 0; i < ParallelGCThreads + 1; i++) { ParCompactionManager* cm = ParCompactionManager::manager_array(i); KeepAliveClosure keep_alive_closure(cm); - Stack* const rks = cm->revisit_klass_stack(); + Stack* const rks = cm->revisit_klass_stack(); if (PrintRevisitStats) { gclog_or_tty->print_cr("Revisit klass stack[%u] length = " SIZE_FORMAT, i, rks->size()); @@ -2765,7 +2769,7 @@ void PSParallelCompact::follow_mdo_weak_refs() { } for (uint i = 0; i < ParallelGCThreads + 1; i++) { ParCompactionManager* cm = ParCompactionManager::manager_array(i); - Stack* rms = cm->revisit_mdo_stack(); + Stack* rms = cm->revisit_mdo_stack(); if (PrintRevisitStats) { gclog_or_tty->print_cr("Revisit MDO stack[%u] size = " SIZE_FORMAT, i, rms->size()); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp index fd6a7bf561b..e11ce406eec 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp @@ -36,7 +36,7 @@ class ObjectStartArray; -class PSPromotionLAB : public CHeapObj { +class PSPromotionLAB : public CHeapObj { protected: static size_t filler_header_size; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp index f7249690539..b3f91d51f99 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp @@ -45,7 +45,7 @@ void PSPromotionManager::initialize() { _young_space = heap->young_gen()->to_space(); assert(_manager_array == NULL, "Attempt to initialize twice"); - _manager_array = NEW_C_HEAP_ARRAY(PSPromotionManager*, ParallelGCThreads+1 ); + _manager_array = NEW_C_HEAP_ARRAY(PSPromotionManager*, ParallelGCThreads+1, mtGC); guarantee(_manager_array != NULL, "Could not initialize promotion manager"); _stack_array_depth = new OopStarTaskQueueSet(ParallelGCThreads); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp index 360640eba07..0e429edc660 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp @@ -49,7 +49,7 @@ class MutableSpace; class PSOldGen; class ParCompactionManager; -class PSPromotionManager : public CHeapObj { +class PSPromotionManager : public CHeapObj { friend class PSScavenge; friend class PSRefProcTaskExecutor; private: @@ -77,7 +77,7 @@ class PSPromotionManager : public CHeapObj { bool _old_gen_is_full; OopStarTaskQueue _claimed_stack_depth; - OverflowTaskQueue _claimed_stack_breadth; + OverflowTaskQueue _claimed_stack_breadth; bool _totally_drain; uint _target_stack_size; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp index 65ece052d16..38d74422deb 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp @@ -62,8 +62,8 @@ bool PSScavenge::_survivor_overflow = false; int PSScavenge::_tenuring_threshold = 0; HeapWord* PSScavenge::_young_generation_boundary = NULL; elapsedTimer PSScavenge::_accumulated_time; -Stack PSScavenge::_preserved_mark_stack; -Stack PSScavenge::_preserved_oop_stack; +Stack PSScavenge::_preserved_mark_stack; +Stack PSScavenge::_preserved_oop_stack; CollectorCounters* PSScavenge::_counters = NULL; bool PSScavenge::_promotion_failed = false; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp index 2ff201e4e8b..25416d01141 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp @@ -71,8 +71,8 @@ class PSScavenge: AllStatic { static HeapWord* _young_generation_boundary; // The lowest address possible for the young_gen. // This is used to decide if an oop should be scavenged, // cards should be marked, etc. - static Stack _preserved_mark_stack; // List of marks to be restored after failed promotion - static Stack _preserved_oop_stack; // List of oops that need their mark restored. + static Stack _preserved_mark_stack; // List of marks to be restored after failed promotion + static Stack _preserved_oop_stack; // List of oops that need their mark restored. static CollectorCounters* _counters; // collector performance counters static bool _promotion_failed; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp index da452cab0dc..b90ed979b4e 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp @@ -32,7 +32,7 @@ // VirtualSpace is data structure for committing a previously reserved address // range in smaller chunks. -class PSVirtualSpace : public CHeapObj { +class PSVirtualSpace : public CHeapObj { friend class VMStructs; protected: // The space is committed/uncommited in chunks of size _alignment. The diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp index b5a2a14bbbf..7f1c297cc58 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp @@ -33,7 +33,7 @@ class PSMarkSweepDecorator; -class PSYoungGen : public CHeapObj { +class PSYoungGen : public CHeapObj { friend class VMStructs; friend class ParallelScavengeHeap; friend class AdjoiningGenerations; diff --git a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp index dd1895e9e06..4becadce84b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp @@ -38,7 +38,7 @@ class elapsedTimer; class CollectorPolicy; -class AdaptiveSizePolicy : public CHeapObj { +class AdaptiveSizePolicy : public CHeapObj { friend class GCAdaptivePolicyCounters; friend class PSGCAdaptivePolicyCounters; friend class CMSGCAdaptivePolicyCounters; diff --git a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp index e6820723007..2319ca1a7a2 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp @@ -37,7 +37,7 @@ CSpaceCounters::CSpaceCounters(const char* name, int ordinal, size_t max_size, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp index d4a860eb842..c113a3338fd 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp @@ -32,7 +32,7 @@ // A CSpaceCounters is a holder class for performance counters // that track a space; -class CSpaceCounters: public CHeapObj { +class CSpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -52,7 +52,7 @@ class CSpaceCounters: public CHeapObj { ContiguousSpace* s, GenerationCounters* gc); ~CSpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtInternal); } inline void update_capacity() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp index 91dad5e66e1..d5aff5c5d09 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp @@ -34,7 +34,7 @@ CollectorCounters::CollectorCounters(const char* name, int ordinal) { const char* cns = PerfDataManager::name_space("collector", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp index b793f7b24db..52eb44396ad 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp @@ -30,7 +30,7 @@ // CollectorCounters is a holder class for performance counters // that track a collector -class CollectorCounters: public CHeapObj { +class CollectorCounters: public CHeapObj { friend class VMStructs; private: @@ -50,7 +50,7 @@ class CollectorCounters: public CHeapObj { CollectorCounters(const char* name, int ordinal); ~CollectorCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline PerfCounter* invocation_counter() const { return _invocations; } diff --git a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp index 3d95950e834..00a96703d57 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp @@ -41,7 +41,7 @@ GSpaceCounters::GSpaceCounters(const char* name, int ordinal, size_t max_size, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp index 85764c4f743..8b901e2e9e0 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp @@ -34,7 +34,7 @@ // A GSpaceCounter is a holder class for performance counters // that track a space; -class GSpaceCounters: public CHeapObj { +class GSpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -54,7 +54,7 @@ class GSpaceCounters: public CHeapObj { GenerationCounters* gc, bool sampled=true); ~GSpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline void update_capacity() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp index 6d4494c0f4d..10a7bac5144 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp @@ -30,7 +30,7 @@ // GCPolicyCounters is a holder class for performance counters // that track a generation -class GCPolicyCounters: public CHeapObj { +class GCPolicyCounters: public CHeapObj { friend class VMStructs; private: diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp index 070300e9b1a..af16ca63ecf 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp @@ -27,7 +27,7 @@ #include "gc_implementation/shared/gcUtil.hpp" -class GCStats : public CHeapObj { +class GCStats : public CHeapObj { protected: // Avg amount promoted; used for avoiding promotion undo // This class does not update deviations if the sample is zero. diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp index 86daba64c3f..ba97f7cfd3a 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp @@ -43,7 +43,7 @@ // // This serves as our best estimate of a future unknown. // -class AdaptiveWeightedAverage : public CHeapObj { +class AdaptiveWeightedAverage : public CHeapObj { private: float _average; // The last computed average unsigned _sample_count; // How often we've sampled this average @@ -146,7 +146,7 @@ class AdaptivePaddedAverage : public AdaptiveWeightedAverage { // Placement support void* operator new(size_t ignored, void* p) { return p; } // Allocator - void* operator new(size_t size) { return CHeapObj::operator new(size); } + void* operator new(size_t size) { return CHeapObj::operator new(size); } // Accessor float padded_average() const { return _padded_avg; } @@ -192,7 +192,7 @@ public: // equation. // y = intercept + slope * x -class LinearLeastSquareFit : public CHeapObj { +class LinearLeastSquareFit : public CHeapObj { double _sum_x; // sum of all independent data points x double _sum_x_squared; // sum of all independent data points x**2 double _sum_y; // sum of all dependent data points y diff --git a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp index 68ab6ffc17e..8cbfac19bee 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp @@ -35,7 +35,7 @@ void GenerationCounters::initialize(const char* name, int ordinal, int spaces, const char* cns = PerfDataManager::name_space("generation", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp index f399b955819..78c00769101 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp @@ -31,7 +31,7 @@ // A GenerationCounter is a holder class for performance counters // that track a generation -class GenerationCounters: public CHeapObj { +class GenerationCounters: public CHeapObj { friend class VMStructs; private: @@ -69,7 +69,7 @@ private: VirtualSpace* v); ~GenerationCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } virtual void update_all(); diff --git a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp index 17a69fa832e..cc4cccb3bdc 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp @@ -40,7 +40,7 @@ HSpaceCounters::HSpaceCounters(const char* name, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp index a55d443a91f..d33a103fb32 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp @@ -37,7 +37,7 @@ class HeapSpaceUsedHelper; class G1SpaceMonitoringSupport; -class HSpaceCounters: public CHeapObj { +class HSpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -55,7 +55,7 @@ class HSpaceCounters: public CHeapObj { size_t initial_capacity, GenerationCounters* gc); ~HSpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline void update_capacity(size_t v) { diff --git a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp index 7d6be0d9f85..6152e64e4c9 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp @@ -33,7 +33,7 @@ // Invariant: bottom() and end() are on page_size boundaries and // bottom() <= end() -class ImmutableSpace: public CHeapObj { +class ImmutableSpace: public CHeapObj { friend class VMStructs; protected: HeapWord* _bottom; diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp index 584c24c821a..77678293653 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp @@ -30,13 +30,13 @@ #include "oops/objArrayKlass.inline.hpp" #include "oops/oop.inline.hpp" -Stack MarkSweep::_marking_stack; -Stack MarkSweep::_revisit_mdo_stack; -Stack MarkSweep::_revisit_klass_stack; -Stack MarkSweep::_objarray_stack; +Stack MarkSweep::_marking_stack; +Stack MarkSweep::_revisit_mdo_stack; +Stack MarkSweep::_revisit_klass_stack; +Stack MarkSweep::_objarray_stack; -Stack MarkSweep::_preserved_oop_stack; -Stack MarkSweep::_preserved_mark_stack; +Stack MarkSweep::_preserved_oop_stack; +Stack MarkSweep::_preserved_mark_stack; size_t MarkSweep::_preserved_count = 0; size_t MarkSweep::_preserved_count_max = 0; PreservedMark* MarkSweep::_preserved_marks = NULL; @@ -166,7 +166,7 @@ void MarkSweep::adjust_marks() { } // deal with the overflow stack - StackIterator iter(_preserved_oop_stack); + StackIterator iter(_preserved_oop_stack); while (!iter.is_empty()) { oop* p = iter.next_addr(); adjust_pointer(p); diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp index 19bee0ed34e..4decbddc7fd 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp @@ -122,16 +122,16 @@ class MarkSweep : AllStatic { // protected: // Traversal stacks used during phase1 - static Stack _marking_stack; - static Stack _objarray_stack; + static Stack _marking_stack; + static Stack _objarray_stack; // Stack for live klasses to revisit at end of marking phase - static Stack _revisit_klass_stack; + static Stack _revisit_klass_stack; // Set (stack) of MDO's to revisit at end of marking phase - static Stack _revisit_mdo_stack; + static Stack _revisit_mdo_stack; // Space for storing/restoring mark word - static Stack _preserved_mark_stack; - static Stack _preserved_oop_stack; + static Stack _preserved_mark_stack; + static Stack _preserved_oop_stack; static size_t _preserved_count; static size_t _preserved_count_max; static PreservedMark* _preserved_marks; diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp index f0f6a49d958..d930b00674b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp @@ -43,7 +43,7 @@ MutableNUMASpace::MutableNUMASpace(size_t alignment) : MutableSpace(alignment) { - _lgrp_spaces = new (ResourceObj::C_HEAP) GrowableArray(0, true); + _lgrp_spaces = new (ResourceObj::C_HEAP, mtGC) GrowableArray(0, true); _page_size = os::vm_page_size(); _adaptation_cycles = 0; _samples_count = 0; @@ -231,7 +231,7 @@ bool MutableNUMASpace::update_layout(bool force) { if (force || changed) { // Compute lgrp intersection. Add/remove spaces. int lgrp_limit = (int)os::numa_get_groups_num(); - int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit); + int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit, mtGC); int lgrp_num = (int)os::numa_get_leaf_groups(lgrp_ids, lgrp_limit); assert(lgrp_num > 0, "There should be at least one locality group"); // Add new spaces for the new nodes @@ -265,7 +265,7 @@ bool MutableNUMASpace::update_layout(bool force) { } } - FREE_C_HEAP_ARRAY(int, lgrp_ids); + FREE_C_HEAP_ARRAY(int, lgrp_ids, mtGC); if (changed) { for (JavaThread *thread = Threads::first(); thread; thread = thread->next()) { diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp index db7207cc24b..8b8f8d65e21 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp @@ -63,7 +63,7 @@ class MutableNUMASpace : public MutableSpace { friend class VMStructs; - class LGRPSpace : public CHeapObj { + class LGRPSpace : public CHeapObj { int _lgrp_id; MutableSpace* _space; MemRegion _invalid_region; diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp index a5815c921cd..44fc6e16b70 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp @@ -39,7 +39,7 @@ SpaceCounters::SpaceCounters(const char* name, int ordinal, size_t max_size, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp index f75a9f26c1e..1369ee0c313 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp @@ -35,7 +35,7 @@ // A SpaceCounter is a holder class for performance counters // that track a space; -class SpaceCounters: public CHeapObj { +class SpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -55,7 +55,7 @@ class SpaceCounters: public CHeapObj { MutableSpace* m, GenerationCounters* gc); ~SpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline void update_capacity() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp b/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp index c41a5eb591b..513735ddf08 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp @@ -70,7 +70,7 @@ class SpaceDecorator: public AllStatic { // These subclasses abstract the differences in the types of spaces used // by each heap. -class SpaceMangler: public CHeapObj { +class SpaceMangler: public CHeapObj { friend class VMStructs; // High water mark for allocations. Typically, the space above diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp index 105e1ea8f24..be42500031d 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp @@ -74,7 +74,7 @@ class GCHeapLog : public EventLogBase { // G1CollectedHeap // ParallelScavengeHeap // -class CollectedHeap : public CHeapObj { +class CollectedHeap : public CHeapObj { friend class VMStructs; friend class IsGCActiveMark; // Block structured external access to _is_gc_active friend class constantPoolCacheKlass; // allocate() method inserts is_conc_safe diff --git a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp index 6f5511f9fcc..956dbf86917 100644 --- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp +++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp @@ -1118,8 +1118,8 @@ void SignatureHandlerLibrary::initialize() { SignatureHandlerLibrary::buffer_size); _buffer = bb->code_begin(); - _fingerprints = new(ResourceObj::C_HEAP)GrowableArray(32, true); - _handlers = new(ResourceObj::C_HEAP)GrowableArray
(32, true); + _fingerprints = new(ResourceObj::C_HEAP, mtCode)GrowableArray(32, true); + _handlers = new(ResourceObj::C_HEAP, mtCode)GrowableArray
(32, true); } address SignatureHandlerLibrary::set_handler(CodeBuffer* buffer) { diff --git a/hotspot/src/share/vm/interpreter/oopMapCache.cpp b/hotspot/src/share/vm/interpreter/oopMapCache.cpp index f5ff6f6c917..01d5753547b 100644 --- a/hotspot/src/share/vm/interpreter/oopMapCache.cpp +++ b/hotspot/src/share/vm/interpreter/oopMapCache.cpp @@ -348,7 +348,7 @@ void OopMapCacheEntry::allocate_bit_mask() { if (mask_size() > small_mask_limit) { assert(_bit_mask[0] == 0, "bit mask should be new or just flushed"); _bit_mask[0] = (intptr_t) - NEW_C_HEAP_ARRAY(uintptr_t, mask_word_size()); + NEW_C_HEAP_ARRAY(uintptr_t, mask_word_size(), mtClass); } } @@ -356,7 +356,7 @@ void OopMapCacheEntry::deallocate_bit_mask() { if (mask_size() > small_mask_limit && _bit_mask[0] != 0) { assert(!Thread::current()->resource_area()->contains((void*)_bit_mask[0]), "This bit mask should not be in the resource area"); - FREE_C_HEAP_ARRAY(uintptr_t, _bit_mask[0]); + FREE_C_HEAP_ARRAY(uintptr_t, _bit_mask[0], mtClass); debug_only(_bit_mask[0] = 0;) } } @@ -506,7 +506,7 @@ inline unsigned int OopMapCache::hash_value_for(methodHandle method, int bci) { OopMapCache::OopMapCache() : _mut(Mutex::leaf, "An OopMapCache lock", true) { - _array = NEW_C_HEAP_ARRAY(OopMapCacheEntry, _size); + _array = NEW_C_HEAP_ARRAY(OopMapCacheEntry, _size, mtClass); // Cannot call flush for initialization, since flush // will check if memory should be deallocated for(int i = 0; i < _size; i++) _array[i].initialize(); @@ -520,7 +520,7 @@ OopMapCache::~OopMapCache() { flush(); // Deallocate array NOT_PRODUCT(_total_memory_usage -= sizeof(OopMapCache) + (sizeof(OopMapCacheEntry) * _size);) - FREE_C_HEAP_ARRAY(OopMapCacheEntry, _array); + FREE_C_HEAP_ARRAY(OopMapCacheEntry, _array, mtClass); } OopMapCacheEntry* OopMapCache::entry_at(int i) const { @@ -639,9 +639,9 @@ void OopMapCache::lookup(methodHandle method, void OopMapCache::compute_one_oop_map(methodHandle method, int bci, InterpreterOopMap* entry) { // Due to the invariants above it's tricky to allocate a temporary OopMapCacheEntry on the stack - OopMapCacheEntry* tmp = NEW_C_HEAP_ARRAY(OopMapCacheEntry, 1); + OopMapCacheEntry* tmp = NEW_C_HEAP_ARRAY(OopMapCacheEntry, 1, mtClass); tmp->initialize(); tmp->fill(method, bci); entry->resource_copy(tmp); - FREE_C_HEAP_ARRAY(OopMapCacheEntry, tmp); + FREE_C_HEAP_ARRAY(OopMapCacheEntry, tmp, mtInternal); } diff --git a/hotspot/src/share/vm/interpreter/oopMapCache.hpp b/hotspot/src/share/vm/interpreter/oopMapCache.hpp index 068e4d3b982..fea9ec09ca9 100644 --- a/hotspot/src/share/vm/interpreter/oopMapCache.hpp +++ b/hotspot/src/share/vm/interpreter/oopMapCache.hpp @@ -156,7 +156,7 @@ class InterpreterOopMap: ResourceObj { #endif }; -class OopMapCache : public CHeapObj { +class OopMapCache : public CHeapObj { private: enum { _size = 32, // Use fixed size for now _probe_depth = 3 // probe depth in case of collisions diff --git a/hotspot/src/share/vm/libadt/set.cpp b/hotspot/src/share/vm/libadt/set.cpp index 1849b13b294..c475a21f700 100644 --- a/hotspot/src/share/vm/libadt/set.cpp +++ b/hotspot/src/share/vm/libadt/set.cpp @@ -71,7 +71,7 @@ char *Set::setstr() const set.Sort(); // Sort elements for in-order retrieval uint len = 128; // Total string space - char *buf = NEW_C_HEAP_ARRAY(char,len);// Some initial string space + char *buf = NEW_C_HEAP_ARRAY(char,len, mtCompiler);// Some initial string space register char *s = buf; // Current working string pointer *s++ = '{'; @@ -86,7 +86,7 @@ char *Set::setstr() const if( buf+len-s < 25 ) { // Generous trailing space for upcoming numbers int offset = (int)(s-buf);// Not enuf space; compute offset into buffer len <<= 1; // Double string size - buf = REALLOC_C_HEAP_ARRAY(char,buf,len); // Reallocate doubled size + buf = REALLOC_C_HEAP_ARRAY(char,buf,len, mtCompiler); // Reallocate doubled size s = buf+offset; // Get working pointer into new bigger buffer } if( lo != (uint)-2 ) { // Startup? No! Then print previous range. @@ -101,7 +101,7 @@ char *Set::setstr() const if( buf+len-s < 25 ) { // Generous trailing space for upcoming numbers int offset = (int)(s-buf);// Not enuf space; compute offset into buffer len <<= 1; // Double string size - buf = (char*)ReallocateHeap(buf,len); // Reallocate doubled size + buf = (char*)ReallocateHeap(buf,len, mtCompiler); // Reallocate doubled size s = buf+offset; // Get working pointer into new bigger buffer } if( lo != hi ) sprintf(s,"%d-%d}",lo,hi); diff --git a/hotspot/src/share/vm/libadt/vectset.cpp b/hotspot/src/share/vm/libadt/vectset.cpp index 0042ca762fd..de7bcd81e80 100644 --- a/hotspot/src/share/vm/libadt/vectset.cpp +++ b/hotspot/src/share/vm/libadt/vectset.cpp @@ -362,7 +362,7 @@ public: }; SetI_ *VectorSet::iterate(uint &elem) const { - return new(ResourceObj::C_HEAP) VSetI_(this, elem); + return new(ResourceObj::C_HEAP, mtInternal) VSetI_(this, elem); } //============================================================================= diff --git a/hotspot/src/share/vm/memory/allocation.cpp b/hotspot/src/share/vm/memory/allocation.cpp index 0479e73378f..dfd061214f7 100644 --- a/hotspot/src/share/vm/memory/allocation.cpp +++ b/hotspot/src/share/vm/memory/allocation.cpp @@ -26,10 +26,13 @@ #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" #include "memory/resourceArea.hpp" +#include "runtime/atomic.hpp" #include "runtime/os.hpp" #include "runtime/task.hpp" #include "runtime/threadCritical.hpp" +#include "services/memTracker.hpp" #include "utilities/ostream.hpp" + #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" #endif @@ -43,32 +46,16 @@ # include "os_bsd.inline.hpp" #endif -void* CHeapObj::operator new(size_t size){ - return (void *) AllocateHeap(size, "CHeapObj-new"); -} - -void* CHeapObj::operator new (size_t size, const std::nothrow_t& nothrow_constant) { - char* p = (char*) os::malloc(size); -#ifdef ASSERT - if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p); -#endif - return p; -} - -void CHeapObj::operator delete(void* p){ - FreeHeap(p); -} - void* StackObj::operator new(size_t size) { ShouldNotCallThis(); return 0; }; void StackObj::operator delete(void* p) { ShouldNotCallThis(); }; void* _ValueObj::operator new(size_t size) { ShouldNotCallThis(); return 0; }; void _ValueObj::operator delete(void* p) { ShouldNotCallThis(); }; -void* ResourceObj::operator new(size_t size, allocation_type type) { +void* ResourceObj::operator new(size_t size, allocation_type type, MEMFLAGS flags) { address res; switch (type) { case C_HEAP: - res = (address)AllocateHeap(size, "C_Heap: ResourceOBJ"); + res = (address)AllocateHeap(size, flags, CALLER_PC); DEBUG_ONLY(set_allocation_type(res, C_HEAP);) break; case RESOURCE_AREA: @@ -184,7 +171,7 @@ bool warn_new_operator = false; // see vm_main // MT-safe pool of chunks to reduce malloc/free thrashing // NB: not using Mutex because pools are used before Threads are initialized -class ChunkPool { +class ChunkPool: public CHeapObj { Chunk* _first; // first cached Chunk; its first word points to next chunk size_t _num_chunks; // number of unused chunks in pool size_t _num_used; // number of chunks currently checked out @@ -210,14 +197,16 @@ class ChunkPool { ChunkPool(size_t size) : _size(size) { _first = NULL; _num_chunks = _num_used = 0; } // Allocate a new chunk from the pool (might expand the pool) - void* allocate(size_t bytes) { + _NOINLINE_ void* allocate(size_t bytes) { assert(bytes == _size, "bad size"); void* p = NULL; + // No VM lock can be taken inside ThreadCritical lock, so os::malloc + // should be done outside ThreadCritical lock due to NMT { ThreadCritical tc; _num_used++; p = get_first(); - if (p == NULL) p = os::malloc(bytes); } + if (p == NULL) p = os::malloc(bytes, mtChunk, CURRENT_PC); if (p == NULL) vm_exit_out_of_memory(bytes, "ChunkPool::allocate"); @@ -238,28 +227,34 @@ class ChunkPool { // Prune the pool void free_all_but(size_t n) { + Chunk* cur = NULL; + Chunk* next; + { // if we have more than n chunks, free all of them ThreadCritical tc; if (_num_chunks > n) { // free chunks at end of queue, for better locality - Chunk* cur = _first; + cur = _first; for (size_t i = 0; i < (n - 1) && cur != NULL; i++) cur = cur->next(); if (cur != NULL) { - Chunk* next = cur->next(); + next = cur->next(); cur->set_next(NULL); cur = next; - // Free all remaining chunks - while(cur != NULL) { - next = cur->next(); - os::free(cur); - _num_chunks--; - cur = next; + _num_chunks = n; } } } - } + + // Free all remaining chunks, outside of ThreadCritical + // to avoid deadlock with NMT + while(cur != NULL) { + next = cur->next(); + os::free(cur, mtChunk); + cur = next; + } + } // Accessors to preallocated pool's static ChunkPool* large_pool() { assert(_large_pool != NULL, "must be initialized"); return _large_pool; } @@ -323,7 +318,7 @@ void* Chunk::operator new(size_t requested_size, size_t length) { case Chunk::medium_size: return ChunkPool::medium_pool()->allocate(bytes); case Chunk::init_size: return ChunkPool::small_pool()->allocate(bytes); default: { - void *p = os::malloc(bytes); + void *p = os::malloc(bytes, mtChunk, CALLER_PC); if (p == NULL) vm_exit_out_of_memory(bytes, "Chunk::new"); return p; @@ -337,7 +332,7 @@ void Chunk::operator delete(void* p) { case Chunk::size: ChunkPool::large_pool()->free(c); break; case Chunk::medium_size: ChunkPool::medium_pool()->free(c); break; case Chunk::init_size: ChunkPool::small_pool()->free(c); break; - default: os::free(c); + default: os::free(c, mtChunk); } } @@ -374,6 +369,7 @@ void Chunk::start_chunk_pool_cleaner_task() { } //------------------------------Arena------------------------------------------ +NOT_PRODUCT(volatile jint Arena::_instance_count = 0;) Arena::Arena(size_t init_size) { size_t round_size = (sizeof (char *)) - 1; @@ -382,6 +378,7 @@ Arena::Arena(size_t init_size) { _hwm = _chunk->bottom(); // Save the cached hwm, max _max = _chunk->top(); set_size_in_bytes(init_size); + NOT_PRODUCT(Atomic::inc(&_instance_count);) } Arena::Arena() { @@ -389,12 +386,15 @@ Arena::Arena() { _hwm = _chunk->bottom(); // Save the cached hwm, max _max = _chunk->top(); set_size_in_bytes(Chunk::init_size); + NOT_PRODUCT(Atomic::inc(&_instance_count);) } Arena::Arena(Arena *a) : _chunk(a->_chunk), _hwm(a->_hwm), _max(a->_max), _first(a->_first) { set_size_in_bytes(a->size_in_bytes()); + NOT_PRODUCT(Atomic::inc(&_instance_count);) } + Arena *Arena::move_contents(Arena *copy) { copy->destruct_contents(); copy->_chunk = _chunk; @@ -409,6 +409,42 @@ Arena *Arena::move_contents(Arena *copy) { Arena::~Arena() { destruct_contents(); + NOT_PRODUCT(Atomic::dec(&_instance_count);) +} + +void* Arena::operator new(size_t size) { + assert(false, "Use dynamic memory type binding"); + return NULL; +} + +void* Arena::operator new (size_t size, const std::nothrow_t& nothrow_constant) { + assert(false, "Use dynamic memory type binding"); + return NULL; +} + + // dynamic memory type binding +void* Arena::operator new(size_t size, MEMFLAGS flags) { +#ifdef ASSERT + void* p = (void*)AllocateHeap(size, flags|otArena, CALLER_PC); + if (PrintMallocFree) trace_heap_malloc(size, "Arena-new", p); + return p; +#else + return (void *) AllocateHeap(size, flags|otArena, CALLER_PC); +#endif +} + +void* Arena::operator new(size_t size, const std::nothrow_t& nothrow_constant, MEMFLAGS flags) { +#ifdef ASSERT + void* p = os::malloc(size, flags|otArena, CALLER_PC); + if (PrintMallocFree) trace_heap_malloc(size, "Arena-new", p); + return p; +#else + return os::malloc(size, flags|otArena, CALLER_PC); +#endif +} + +void Arena::operator delete(void* p) { + FreeHeap(p); } // Destroy this arenas contents and reset to empty @@ -421,6 +457,14 @@ void Arena::destruct_contents() { reset(); } +// This is high traffic method, but many calls actually don't +// change the size +void Arena::set_size_in_bytes(size_t size) { + if (_size_in_bytes != size) { + _size_in_bytes = size; + MemTracker::record_arena_size((address)this, size); + } +} // Total of all Chunks in arena size_t Arena::used() const { @@ -448,7 +492,6 @@ void* Arena::grow( size_t x ) { if (_chunk == NULL) { signal_out_of_memory(len * Chunk::aligned_overhead_size(), "Arena::grow"); } - if (k) k->set_next(_chunk); // Append new chunk to end of linked list else _first = _chunk; _hwm = _chunk->bottom(); // Save the cached hwm, max @@ -538,7 +581,7 @@ void* Arena::malloc(size_t size) { assert(UseMallocOnly, "shouldn't call"); // use malloc, but save pointer in res. area for later freeing char** save = (char**)internal_malloc_4(sizeof(char*)); - return (*save = (char*)os::malloc(size)); + return (*save = (char*)os::malloc(size, mtChunk)); } // for debugging with UseMallocOnly diff --git a/hotspot/src/share/vm/memory/allocation.hpp b/hotspot/src/share/vm/memory/allocation.hpp index 4c2f1e8c836..4f0338af983 100644 --- a/hotspot/src/share/vm/memory/allocation.hpp +++ b/hotspot/src/share/vm/memory/allocation.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -40,6 +40,18 @@ #define ARENA_ALIGN_MASK (~((size_t)ARENA_ALIGN_M1)) #define ARENA_ALIGN(x) ((((size_t)(x)) + ARENA_ALIGN_M1) & ARENA_ALIGN_MASK) + +// noinline attribute +#ifdef _WINDOWS + #define _NOINLINE_ __declspec(noinline) +#else + #if __GNUC__ < 3 // gcc 2.x does not support noinline attribute + #define _NOINLINE_ + #else + #define _NOINLINE_ __attribute__ ((noinline)) + #endif +#endif + // All classes in the virtual machine must be subclassed // by one of the following allocation classes: // @@ -98,12 +110,72 @@ class AllocatedObj { }; #endif -class CHeapObj ALLOCATION_SUPER_CLASS_SPEC { + +/* + * MemoryType bitmap layout: + * | 16 15 14 13 12 11 10 09 | 08 07 06 05 | 04 03 02 01 | + * | memory type | object | reserved | + * | | type | | + */ +enum MemoryType { + // Memory type by sub systems. It occupies lower byte. + mtNone = 0x0000, // undefined + mtClass = 0x0100, // memory class for Java classes + mtThread = 0x0200, // memory for thread objects + mtThreadStack = 0x0300, + mtCode = 0x0400, // memory for generated code + mtGC = 0x0500, // memory for GC + mtCompiler = 0x0600, // memory for compiler + mtInternal = 0x0700, // memory used by VM, but does not belong to + // any of above categories, and not used for + // native memory tracking + mtOther = 0x0800, // memory not used by VM + mtSymbol = 0x0900, // symbol + mtNMT = 0x0A00, // memory used by native memory tracking + mtChunk = 0x0B00, // chunk that holds content of arenas + mtJavaHeap = 0x0C00, // Java heap + mtDontTrack = 0x0D00, // memory we donot or cannot track + mt_number_of_types = 0x000C, // number of memory types + mt_masks = 0x7F00, + + // object type mask + otArena = 0x0010, // an arena object + otNMTRecorder = 0x0020, // memory recorder object + ot_masks = 0x00F0 +}; + +#define IS_MEMORY_TYPE(flags, type) ((flags & mt_masks) == type) +#define HAS_VALID_MEMORY_TYPE(flags)((flags & mt_masks) != mtNone) +#define FLAGS_TO_MEMORY_TYPE(flags) (flags & mt_masks) + +#define IS_ARENA_OBJ(flags) ((flags & ot_masks) == otArena) +#define IS_NMT_RECORDER(flags) ((flags & ot_masks) == otNMTRecorder) +#define NMT_CAN_TRACK(flags) (!IS_NMT_RECORDER(flags) && !(IS_MEMORY_TYPE(flags, mtDontTrack))) + +typedef unsigned short MEMFLAGS; + +extern bool NMT_track_callsite; + +// debug build does not inline +#if defined(_DEBUG_) + #define CURRENT_PC (NMT_track_callsite ? os::get_caller_pc(1) : 0) + #define CALLER_PC (NMT_track_callsite ? os::get_caller_pc(2) : 0) + #define CALLER_CALLER_PC (NMT_track_callsite ? os::get_caller_pc(3) : 0) +#else + #define CURRENT_PC (NMT_track_callsite? os::get_caller_pc(0) : 0) + #define CALLER_PC (NMT_track_callsite ? os::get_caller_pc(1) : 0) + #define CALLER_CALLER_PC (NMT_track_callsite ? os::get_caller_pc(2) : 0) +#endif + + + +template class CHeapObj ALLOCATION_SUPER_CLASS_SPEC { public: - void* operator new(size_t size); - void* operator new (size_t size, const std::nothrow_t& nothrow_constant); + _NOINLINE_ void* operator new(size_t size, address caller_pc = 0); + _NOINLINE_ void* operator new (size_t size, const std::nothrow_t& nothrow_constant, + address caller_pc = 0); + void operator delete(void* p); - void* new_array(size_t size); }; // Base class for objects allocated on the stack only. @@ -150,7 +222,7 @@ class AllStatic { //------------------------------Chunk------------------------------------------ // Linked list of raw memory chunks -class Chunk: public CHeapObj { +class Chunk: CHeapObj { friend class VMStructs; protected: @@ -197,7 +269,7 @@ class Chunk: public CHeapObj { //------------------------------Arena------------------------------------------ // Fast allocation of memory -class Arena: public CHeapObj { +class Arena : public CHeapObj { protected: friend class ResourceMark; friend class HandleMark; @@ -208,7 +280,8 @@ protected: Chunk *_chunk; // current chunk char *_hwm, *_max; // High water mark and max in current chunk void* grow(size_t x); // Get a new Chunk of at least size x - NOT_PRODUCT(size_t _size_in_bytes;) // Size of arena (used for memory usage tracing) + size_t _size_in_bytes; // Size of arena (used for native memory tracking) + NOT_PRODUCT(static julong _bytes_allocated;) // total #bytes allocated since start friend class AllocStats; debug_only(void* malloc(size_t size);) @@ -231,6 +304,15 @@ protected: void destruct_contents(); char* hwm() const { return _hwm; } + // new operators + void* operator new (size_t size); + void* operator new (size_t size, const std::nothrow_t& nothrow_constant); + + // dynamic memory type tagging + void* operator new(size_t size, MEMFLAGS flags); + void* operator new(size_t size, const std::nothrow_t& nothrow_constant, MEMFLAGS flags); + void operator delete(void* p); + // Fast allocate in the arena. Common case is: pointer test + increment. void* Amalloc(size_t x) { assert(is_power_of_2(ARENA_AMALLOC_ALIGNMENT) , "should be a power of 2"); @@ -306,16 +388,20 @@ protected: size_t used() const; // Total # of bytes used - size_t size_in_bytes() const NOT_PRODUCT({ return _size_in_bytes; }) PRODUCT_RETURN0; - void set_size_in_bytes(size_t size) NOT_PRODUCT({ _size_in_bytes = size; }) PRODUCT_RETURN; + size_t size_in_bytes() const { return _size_in_bytes; }; + void set_size_in_bytes(size_t size); + static void free_malloced_objects(Chunk* chunk, char* hwm, char* max, char* hwm2) PRODUCT_RETURN; static void free_all(char** start, char** end) PRODUCT_RETURN; + // how many arena instances + NOT_PRODUCT(static volatile jint _instance_count;) private: // Reset this Arena to empty, access will trigger grow if necessary void reset(void) { _first = _chunk = NULL; _hwm = _max = NULL; + set_size_in_bytes(0); } }; @@ -373,7 +459,7 @@ class ResourceObj ALLOCATION_SUPER_CLASS_SPEC { #endif // ASSERT public: - void* operator new(size_t size, allocation_type type); + void* operator new(size_t size, allocation_type type, MEMFLAGS flags); void* operator new(size_t size, Arena *arena) { address res = (address)arena->Amalloc(size); DEBUG_ONLY(set_allocation_type(res, ARENA);) @@ -409,17 +495,28 @@ class ResourceObj ALLOCATION_SUPER_CLASS_SPEC { #define NEW_RESOURCE_OBJ(type)\ NEW_RESOURCE_ARRAY(type, 1) -#define NEW_C_HEAP_ARRAY(type, size)\ - (type*) (AllocateHeap((size) * sizeof(type), XSTR(type) " in " __FILE__)) +#define NEW_C_HEAP_ARRAY(type, size, memflags)\ + (type*) (AllocateHeap((size) * sizeof(type), memflags)) -#define REALLOC_C_HEAP_ARRAY(type, old, size)\ - (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), XSTR(type) " in " __FILE__)) +#define REALLOC_C_HEAP_ARRAY(type, old, size, memflags)\ + (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), memflags)) -#define FREE_C_HEAP_ARRAY(type,old) \ - FreeHeap((char*)(old)) +#define FREE_C_HEAP_ARRAY(type,old,memflags) \ + FreeHeap((char*)(old), memflags) + +#define NEW_C_HEAP_OBJ(type, memflags)\ + NEW_C_HEAP_ARRAY(type, 1, memflags) + + +#define NEW_C_HEAP_ARRAY2(type, size, memflags, pc)\ + (type*) (AllocateHeap((size) * sizeof(type), memflags, pc)) + +#define REALLOC_C_HEAP_ARRAY2(type, old, size, memflags, pc)\ + (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), memflags, pc)) + +#define NEW_C_HEAP_OBJ2(type, memflags, pc)\ + NEW_C_HEAP_ARRAY2(type, 1, memflags, pc) -#define NEW_C_HEAP_OBJ(type)\ - NEW_C_HEAP_ARRAY(type, 1) extern bool warn_new_operator; diff --git a/hotspot/src/share/vm/memory/allocation.inline.hpp b/hotspot/src/share/vm/memory/allocation.inline.hpp index 795016df838..21e8a3bc94e 100644 --- a/hotspot/src/share/vm/memory/allocation.inline.hpp +++ b/hotspot/src/share/vm/memory/allocation.inline.hpp @@ -48,33 +48,60 @@ inline void inc_stat_counter(volatile julong* dest, julong add_value) { #endif // allocate using malloc; will fail if no memory available -inline char* AllocateHeap(size_t size, const char* name = NULL) { - char* p = (char*) os::malloc(size); +inline char* AllocateHeap(size_t size, MEMFLAGS flags, address pc = 0) { + if (pc == 0) { + pc = CURRENT_PC; + } + char* p = (char*) os::malloc(size, flags, pc); #ifdef ASSERT - if (PrintMallocFree) trace_heap_malloc(size, name, p); - #else - Unused_Variable(name); + if (PrintMallocFree) trace_heap_malloc(size, "AllocateHeap", p); #endif - if (p == NULL) vm_exit_out_of_memory(size, name); + if (p == NULL) vm_exit_out_of_memory(size, "AllocateHeap"); return p; } -inline char* ReallocateHeap(char *old, size_t size, const char* name = NULL) { - char* p = (char*) os::realloc(old,size); +inline char* ReallocateHeap(char *old, size_t size, MEMFLAGS flags) { + char* p = (char*) os::realloc(old, size, flags, CURRENT_PC); #ifdef ASSERT - if (PrintMallocFree) trace_heap_malloc(size, name, p); - #else - Unused_Variable(name); + if (PrintMallocFree) trace_heap_malloc(size, "ReallocateHeap", p); #endif - if (p == NULL) vm_exit_out_of_memory(size, name); + if (p == NULL) vm_exit_out_of_memory(size, "ReallocateHeap"); return p; } -inline void FreeHeap(void* p) { +inline void FreeHeap(void* p, MEMFLAGS memflags = mtInternal) { #ifdef ASSERT if (PrintMallocFree) trace_heap_free(p); #endif - os::free(p); + os::free(p, memflags); } + +template void* CHeapObj::operator new(size_t size, + address caller_pc){ +#ifdef ASSERT + void* p = (void*)AllocateHeap(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); + if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p); + return p; +#else + return (void *) AllocateHeap(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); +#endif + } + +template void* CHeapObj::operator new (size_t size, + const std::nothrow_t& nothrow_constant, address caller_pc) { +#ifdef ASSERT + void* p = os::malloc(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); + if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p); + return p; +#else + return os::malloc(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); +#endif +} + +template void CHeapObj::operator delete(void* p){ + FreeHeap(p, F); +} + + #endif // SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/barrierSet.hpp b/hotspot/src/share/vm/memory/barrierSet.hpp index d9cf3c29394..bd92616f802 100644 --- a/hotspot/src/share/vm/memory/barrierSet.hpp +++ b/hotspot/src/share/vm/memory/barrierSet.hpp @@ -31,7 +31,7 @@ // This class provides the interface between a barrier implementation and // the rest of the system. -class BarrierSet: public CHeapObj { +class BarrierSet: public CHeapObj { friend class VMStructs; public: enum Name { diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.cpp b/hotspot/src/share/vm/memory/blockOffsetTable.cpp index d40965ea813..0d607db803b 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.cpp +++ b/hotspot/src/share/vm/memory/blockOffsetTable.cpp @@ -30,6 +30,7 @@ #include "memory/universe.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" ////////////////////////////////////////////////////////////////////// // BlockOffsetSharedArray @@ -44,6 +45,9 @@ BlockOffsetSharedArray::BlockOffsetSharedArray(MemRegion reserved, if (!rs.is_reserved()) { vm_exit_during_initialization("Could not reserve enough space for heap offset array"); } + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + if (!_vs.initialize(rs, 0)) { vm_exit_during_initialization("Could not reserve enough space for heap offset array"); } diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.hpp b/hotspot/src/share/vm/memory/blockOffsetTable.hpp index 16f329bddcf..b31865c93aa 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.hpp +++ b/hotspot/src/share/vm/memory/blockOffsetTable.hpp @@ -100,7 +100,7 @@ public: ////////////////////////////////////////////////////////////////////////// // BlockOffsetSharedArray ////////////////////////////////////////////////////////////////////////// -class BlockOffsetSharedArray: public CHeapObj { +class BlockOffsetSharedArray: public CHeapObj { friend class BlockOffsetArray; friend class BlockOffsetArrayNonContigSpace; friend class BlockOffsetArrayContigSpace; diff --git a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp index acf6413c411..496b2cbbf7d 100644 --- a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp +++ b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp @@ -33,6 +33,7 @@ #include "runtime/java.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/virtualspace.hpp" +#include "services/memTracker.hpp" #ifdef COMPILER1 #include "c1/c1_LIR.hpp" #include "c1/c1_LIRGenerator.hpp" @@ -90,6 +91,9 @@ CardTableModRefBS::CardTableModRefBS(MemRegion whole_heap, const size_t rs_align = _page_size == (size_t) os::vm_page_size() ? 0 : MAX2(_page_size, (size_t) os::vm_allocation_granularity()); ReservedSpace heap_rs(_byte_map_size, rs_align, false); + + MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtGC); + os::trace_page_sizes("card table", _guard_index + 1, _guard_index + 1, _page_size, heap_rs.base(), heap_rs.size()); if (!heap_rs.is_reserved()) { @@ -113,16 +117,17 @@ CardTableModRefBS::CardTableModRefBS(MemRegion whole_heap, // Do better than this for Merlin vm_exit_out_of_memory(_page_size, "card table last card"); } + *guard_card = last_card; _lowest_non_clean = - NEW_C_HEAP_ARRAY(CardArr, max_covered_regions); + NEW_C_HEAP_ARRAY(CardArr, max_covered_regions, mtGC); _lowest_non_clean_chunk_size = - NEW_C_HEAP_ARRAY(size_t, max_covered_regions); + NEW_C_HEAP_ARRAY(size_t, max_covered_regions, mtGC); _lowest_non_clean_base_chunk_index = - NEW_C_HEAP_ARRAY(uintptr_t, max_covered_regions); + NEW_C_HEAP_ARRAY(uintptr_t, max_covered_regions, mtGC); _last_LNC_resizing_collection = - NEW_C_HEAP_ARRAY(int, max_covered_regions); + NEW_C_HEAP_ARRAY(int, max_covered_regions, mtGC); if (_lowest_non_clean == NULL || _lowest_non_clean_chunk_size == NULL || _lowest_non_clean_base_chunk_index == NULL diff --git a/hotspot/src/share/vm/memory/collectorPolicy.hpp b/hotspot/src/share/vm/memory/collectorPolicy.hpp index 7030eb7b58f..9b6b2d47c29 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.hpp +++ b/hotspot/src/share/vm/memory/collectorPolicy.hpp @@ -56,7 +56,7 @@ class GCPolicyCounters; class PermanentGenerationSpec; class MarkSweepPolicy; -class CollectorPolicy : public CHeapObj { +class CollectorPolicy : public CHeapObj { protected: PermanentGenerationSpec *_permanent_generation; GCPolicyCounters* _gc_policy_counters; diff --git a/hotspot/src/share/vm/memory/defNewGeneration.hpp b/hotspot/src/share/vm/memory/defNewGeneration.hpp index 1d5a4859041..4f959d674af 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.hpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.hpp @@ -89,8 +89,8 @@ protected: // Together, these keep pairs. // They should always contain the same number of elements. - Stack _objs_with_preserved_marks; - Stack _preserved_marks_of_objs; + Stack _objs_with_preserved_marks; + Stack _preserved_marks_of_objs; // Promotion failure handling OopClosure *_promo_failure_scan_stack_closure; @@ -98,7 +98,7 @@ protected: _promo_failure_scan_stack_closure = scan_stack_closure; } - Stack _promo_failure_scan_stack; + Stack _promo_failure_scan_stack; void drain_promo_failure_scan_stack(void); bool _promo_failure_drain_in_progress; diff --git a/hotspot/src/share/vm/memory/filemap.hpp b/hotspot/src/share/vm/memory/filemap.hpp index 8d239b8413e..5c03ae38874 100644 --- a/hotspot/src/share/vm/memory/filemap.hpp +++ b/hotspot/src/share/vm/memory/filemap.hpp @@ -44,7 +44,7 @@ static const int JVM_ARCH_MAX = 12; -class FileMapInfo : public CHeapObj { +class FileMapInfo : public CHeapObj { private: enum { _invalid_version = -1, diff --git a/hotspot/src/share/vm/memory/freeBlockDictionary.hpp b/hotspot/src/share/vm/memory/freeBlockDictionary.hpp index 9e3e20a7794..66ce2be57f3 100644 --- a/hotspot/src/share/vm/memory/freeBlockDictionary.hpp +++ b/hotspot/src/share/vm/memory/freeBlockDictionary.hpp @@ -34,7 +34,7 @@ // A FreeBlockDictionary is an abstract superclass that will allow // a number of alternative implementations in the future. template -class FreeBlockDictionary: public CHeapObj { +class FreeBlockDictionary: public CHeapObj { public: enum Dither { atLeast, diff --git a/hotspot/src/share/vm/memory/genMarkSweep.cpp b/hotspot/src/share/vm/memory/genMarkSweep.cpp index 4d13fbb22dd..e7097db9dcf 100644 --- a/hotspot/src/share/vm/memory/genMarkSweep.cpp +++ b/hotspot/src/share/vm/memory/genMarkSweep.cpp @@ -203,21 +203,21 @@ void GenMarkSweep::allocate_stacks() { #ifdef VALIDATE_MARK_SWEEP if (ValidateMarkSweep) { - _root_refs_stack = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _other_refs_stack = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _adjusted_pointers = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _live_oops = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _live_oops_moved_to = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _live_oops_size = new (ResourceObj::C_HEAP) GrowableArray(100, true); + _root_refs_stack = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _other_refs_stack = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _adjusted_pointers = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _live_oops = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _live_oops_moved_to = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _live_oops_size = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); } if (RecordMarkSweepCompaction) { if (_cur_gc_live_oops == NULL) { - _cur_gc_live_oops = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _cur_gc_live_oops_moved_to = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _cur_gc_live_oops_size = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _last_gc_live_oops = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _last_gc_live_oops_moved_to = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _last_gc_live_oops_size = new(ResourceObj::C_HEAP) GrowableArray(100, true); + _cur_gc_live_oops = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _cur_gc_live_oops_moved_to = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _cur_gc_live_oops_size = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _last_gc_live_oops = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _last_gc_live_oops_moved_to = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _last_gc_live_oops_size = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); } else { _cur_gc_live_oops->clear(); _cur_gc_live_oops_moved_to->clear(); diff --git a/hotspot/src/share/vm/memory/genOopClosures.hpp b/hotspot/src/share/vm/memory/genOopClosures.hpp index 2c9b5ad0d0b..ded9c6262a2 100644 --- a/hotspot/src/share/vm/memory/genOopClosures.hpp +++ b/hotspot/src/share/vm/memory/genOopClosures.hpp @@ -34,10 +34,10 @@ class CardTableRS; class CardTableModRefBS; class DefNewGeneration; -template class GenericTaskQueue; -typedef GenericTaskQueue OopTaskQueue; -template class GenericTaskQueueSet; -typedef GenericTaskQueueSet OopTaskQueueSet; +template class GenericTaskQueue; +typedef GenericTaskQueue OopTaskQueue; +template class GenericTaskQueueSet; +typedef GenericTaskQueueSet OopTaskQueueSet; // Closure for iterating roots from a particular generation // Note: all classes deriving from this MUST call this do_barrier diff --git a/hotspot/src/share/vm/memory/genRemSet.hpp b/hotspot/src/share/vm/memory/genRemSet.hpp index bf0535f83db..9306d452543 100644 --- a/hotspot/src/share/vm/memory/genRemSet.hpp +++ b/hotspot/src/share/vm/memory/genRemSet.hpp @@ -35,7 +35,7 @@ class BarrierSet; class OopsInGenClosure; class CardTableRS; -class GenRemSet: public CHeapObj { +class GenRemSet: public CHeapObj { friend class Generation; BarrierSet* _bs; diff --git a/hotspot/src/share/vm/memory/generation.hpp b/hotspot/src/share/vm/memory/generation.hpp index 5c62e8bf2de..96becb638b6 100644 --- a/hotspot/src/share/vm/memory/generation.hpp +++ b/hotspot/src/share/vm/memory/generation.hpp @@ -86,7 +86,7 @@ struct ScratchBlock { }; -class Generation: public CHeapObj { +class Generation: public CHeapObj { friend class VMStructs; private: jlong _time_of_last_gc; // time when last gc on this generation happened (ms) diff --git a/hotspot/src/share/vm/memory/generationSpec.hpp b/hotspot/src/share/vm/memory/generationSpec.hpp index 5aff302b9c9..e602ef7976c 100644 --- a/hotspot/src/share/vm/memory/generationSpec.hpp +++ b/hotspot/src/share/vm/memory/generationSpec.hpp @@ -32,7 +32,7 @@ // some generation-specific behavior. This is done here rather than as a // virtual function of Generation because these methods are needed in // initialization of the Generations. -class GenerationSpec : public CHeapObj { +class GenerationSpec : public CHeapObj { friend class VMStructs; private: Generation::Name _name; @@ -71,7 +71,7 @@ typedef GenerationSpec* GenerationSpecPtr; // The specification of a permanent generation. This class is very // similar to GenerationSpec in use. Due to PermGen's not being a // true Generation, we cannot combine the spec classes either. -class PermanentGenerationSpec : public CHeapObj { +class PermanentGenerationSpec : public CHeapObj { friend class VMStructs; private: PermGen::Name _name; diff --git a/hotspot/src/share/vm/memory/heap.cpp b/hotspot/src/share/vm/memory/heap.cpp index dcf1e41e0e4..95c99082cad 100644 --- a/hotspot/src/share/vm/memory/heap.cpp +++ b/hotspot/src/share/vm/memory/heap.cpp @@ -26,7 +26,7 @@ #include "memory/heap.hpp" #include "oops/oop.inline.hpp" #include "runtime/os.hpp" - +#include "services/memTracker.hpp" size_t CodeHeap::header_size() { return sizeof(HeapBlock); @@ -130,6 +130,9 @@ bool CodeHeap::reserve(size_t reserved_size, size_t committed_size, if (!_segmap.initialize(align_to_page_size(_number_of_reserved_segments), align_to_page_size(_number_of_committed_segments))) { return false; } + + MemTracker::record_virtual_memory_type((address)_segmap.low_boundary(), mtCode); + assert(_segmap.committed_size() >= (size_t) _number_of_committed_segments, "could not commit enough space for segment map"); assert(_segmap.reserved_size() >= (size_t) _number_of_reserved_segments , "could not reserve enough space for segment map"); assert(_segmap.reserved_size() >= _segmap.committed_size() , "just checking"); diff --git a/hotspot/src/share/vm/memory/heap.hpp b/hotspot/src/share/vm/memory/heap.hpp index 4f592a20ce2..74f68ae054a 100644 --- a/hotspot/src/share/vm/memory/heap.hpp +++ b/hotspot/src/share/vm/memory/heap.hpp @@ -77,7 +77,7 @@ class FreeBlock: public HeapBlock { void set_link(FreeBlock* link) { _link = link; } }; -class CodeHeap : public CHeapObj { +class CodeHeap : public CHeapObj { friend class VMStructs; private: VirtualSpace _memory; // the memory holding the blocks diff --git a/hotspot/src/share/vm/memory/heapInspection.cpp b/hotspot/src/share/vm/memory/heapInspection.cpp index 1042ff43b94..998a1ecc56c 100644 --- a/hotspot/src/share/vm/memory/heapInspection.cpp +++ b/hotspot/src/share/vm/memory/heapInspection.cpp @@ -116,7 +116,7 @@ void KlassInfoBucket::empty() { KlassInfoTable::KlassInfoTable(int size, HeapWord* ref) { _size = 0; _ref = ref; - _buckets = NEW_C_HEAP_ARRAY(KlassInfoBucket, size); + _buckets = NEW_C_HEAP_ARRAY(KlassInfoBucket, size, mtInternal); if (_buckets != NULL) { _size = size; for (int index = 0; index < _size; index++) { @@ -130,7 +130,7 @@ KlassInfoTable::~KlassInfoTable() { for (int index = 0; index < _size; index++) { _buckets[index].empty(); } - FREE_C_HEAP_ARRAY(KlassInfoBucket, _buckets); + FREE_C_HEAP_ARRAY(KlassInfoBucket, _buckets, mtInternal); _size = 0; } } @@ -179,7 +179,7 @@ int KlassInfoHisto::sort_helper(KlassInfoEntry** e1, KlassInfoEntry** e2) { KlassInfoHisto::KlassInfoHisto(const char* title, int estimatedCount) : _title(title) { - _elements = new (ResourceObj::C_HEAP) GrowableArray(estimatedCount,true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(estimatedCount,true); } KlassInfoHisto::~KlassInfoHisto() { diff --git a/hotspot/src/share/vm/memory/heapInspection.hpp b/hotspot/src/share/vm/memory/heapInspection.hpp index 6d2f544b461..779ff072557 100644 --- a/hotspot/src/share/vm/memory/heapInspection.hpp +++ b/hotspot/src/share/vm/memory/heapInspection.hpp @@ -44,7 +44,7 @@ // to KlassInfoEntry's and is used to sort // the entries. -class KlassInfoEntry: public CHeapObj { +class KlassInfoEntry: public CHeapObj { private: KlassInfoEntry* _next; klassOop _klass; @@ -72,7 +72,7 @@ class KlassInfoClosure: public StackObj { virtual void do_cinfo(KlassInfoEntry* cie) = 0; }; -class KlassInfoBucket: public CHeapObj { +class KlassInfoBucket: public CHeapObj { private: KlassInfoEntry* _list; KlassInfoEntry* list() { return _list; } diff --git a/hotspot/src/share/vm/memory/memRegion.hpp b/hotspot/src/share/vm/memory/memRegion.hpp index 4ed33d7312b..e8de140c654 100644 --- a/hotspot/src/share/vm/memory/memRegion.hpp +++ b/hotspot/src/share/vm/memory/memRegion.hpp @@ -99,8 +99,8 @@ public: class MemRegionClosureRO: public MemRegionClosure { public: - void* operator new(size_t size, ResourceObj::allocation_type type) { - return ResourceObj::operator new(size, type); + void* operator new(size_t size, ResourceObj::allocation_type type, MEMFLAGS flags) { + return ResourceObj::operator new(size, type, flags); } void* operator new(size_t size, Arena *arena) { return ResourceObj::operator new(size, arena); diff --git a/hotspot/src/share/vm/memory/permGen.hpp b/hotspot/src/share/vm/memory/permGen.hpp index 7400ed65f46..a6e2c8a6f0a 100644 --- a/hotspot/src/share/vm/memory/permGen.hpp +++ b/hotspot/src/share/vm/memory/permGen.hpp @@ -42,7 +42,7 @@ class CSpaceCounters; // PermGen models the part of the heap used to allocate class meta-data. -class PermGen : public CHeapObj { +class PermGen : public CHeapObj { friend class VMStructs; protected: size_t _capacity_expansion_limit; // maximum expansion allowed without a diff --git a/hotspot/src/share/vm/memory/referencePolicy.hpp b/hotspot/src/share/vm/memory/referencePolicy.hpp index 6616f253c19..99015d01aff 100644 --- a/hotspot/src/share/vm/memory/referencePolicy.hpp +++ b/hotspot/src/share/vm/memory/referencePolicy.hpp @@ -29,7 +29,7 @@ // should be cleared. -class ReferencePolicy : public CHeapObj { +class ReferencePolicy : public CHeapObj { public: virtual bool should_clear_reference(oop p, jlong timestamp_clock) { ShouldNotReachHere(); diff --git a/hotspot/src/share/vm/memory/referenceProcessor.cpp b/hotspot/src/share/vm/memory/referenceProcessor.cpp index 2699ecd0f5d..f103dc97944 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.cpp +++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp @@ -108,7 +108,8 @@ ReferenceProcessor::ReferenceProcessor(MemRegion span, _num_q = MAX2(1U, mt_processing_degree); _max_num_q = MAX2(_num_q, mt_discovery_degree); _discovered_refs = NEW_C_HEAP_ARRAY(DiscoveredList, - _max_num_q * number_of_subclasses_of_ref()); + _max_num_q * number_of_subclasses_of_ref(), mtGC); + if (_discovered_refs == NULL) { vm_exit_during_initialization("Could not allocated RefProc Array"); } diff --git a/hotspot/src/share/vm/memory/referenceProcessor.hpp b/hotspot/src/share/vm/memory/referenceProcessor.hpp index bfa3bdffa9e..9df15bd4d3d 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.hpp +++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp @@ -203,7 +203,7 @@ public: } }; -class ReferenceProcessor : public CHeapObj { +class ReferenceProcessor : public CHeapObj { protected: // Compatibility with pre-4965777 JDK's static bool _pending_list_uses_discovered_field; diff --git a/hotspot/src/share/vm/memory/resourceArea.hpp b/hotspot/src/share/vm/memory/resourceArea.hpp index 3d312489769..567f41d400a 100644 --- a/hotspot/src/share/vm/memory/resourceArea.hpp +++ b/hotspot/src/share/vm/memory/resourceArea.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, 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 @@ -75,7 +75,7 @@ public: if (UseMallocOnly) { // use malloc, but save pointer in res. area for later freeing char** save = (char**)internal_malloc_4(sizeof(char*)); - return (*save = (char*)os::malloc(size)); + return (*save = (char*)os::malloc(size, mtThread)); } #endif return (char*)Amalloc(size); @@ -93,18 +93,17 @@ protected: ResourceArea *_area; // Resource area to stack allocate Chunk *_chunk; // saved arena chunk char *_hwm, *_max; - NOT_PRODUCT(size_t _size_in_bytes;) + size_t _size_in_bytes; void initialize(Thread *thread) { _area = thread->resource_area(); _chunk = _area->_chunk; _hwm = _area->_hwm; _max= _area->_max; - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = _area->size_in_bytes(); debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } - public: #ifndef ASSERT @@ -120,7 +119,7 @@ protected: ResourceMark( ResourceArea *r ) : _area(r), _chunk(r->_chunk), _hwm(r->_hwm), _max(r->_max) { - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = r->_size_in_bytes; debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } @@ -148,7 +147,7 @@ protected: private: void free_malloced_objects() PRODUCT_RETURN; - size_t size_in_bytes() NOT_PRODUCT({ return _size_in_bytes; }) PRODUCT_RETURN0; + size_t size_in_bytes() { return _size_in_bytes; } }; //------------------------------DeoptResourceMark----------------------------------- @@ -180,19 +179,19 @@ protected: // and they would be stack allocated. This leaves open the possibilty of accidental // misuse so we simple duplicate the ResourceMark functionality here. -class DeoptResourceMark: public CHeapObj { +class DeoptResourceMark: public CHeapObj { protected: ResourceArea *_area; // Resource area to stack allocate Chunk *_chunk; // saved arena chunk char *_hwm, *_max; - NOT_PRODUCT(size_t _size_in_bytes;) + size_t _size_in_bytes; void initialize(Thread *thread) { _area = thread->resource_area(); _chunk = _area->_chunk; _hwm = _area->_hwm; _max= _area->_max; - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = _area->size_in_bytes(); debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } @@ -212,7 +211,7 @@ protected: DeoptResourceMark( ResourceArea *r ) : _area(r), _chunk(r->_chunk), _hwm(r->_hwm), _max(r->_max) { - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = _area->size_in_bytes(); debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } @@ -240,7 +239,7 @@ protected: private: void free_malloced_objects() PRODUCT_RETURN; - size_t size_in_bytes() NOT_PRODUCT({ return _size_in_bytes; }) PRODUCT_RETURN0; + size_t size_in_bytes() { return _size_in_bytes; }; }; #endif // SHARE_VM_MEMORY_RESOURCEAREA_HPP diff --git a/hotspot/src/share/vm/memory/restore.cpp b/hotspot/src/share/vm/memory/restore.cpp index 263867e6fff..e2f8b6a6dce 100644 --- a/hotspot/src/share/vm/memory/restore.cpp +++ b/hotspot/src/share/vm/memory/restore.cpp @@ -132,7 +132,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); int number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - SymbolTable::create_table((HashtableBucket*)buffer, symbolTableLen, + SymbolTable::create_table((HashtableBucket*)buffer, symbolTableLen, number_of_entries); buffer += symbolTableLen; @@ -144,7 +144,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - StringTable::create_table((HashtableBucket*)buffer, stringTableLen, + StringTable::create_table((HashtableBucket*)buffer, stringTableLen, number_of_entries); buffer += stringTableLen; @@ -157,7 +157,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - SystemDictionary::set_shared_dictionary((HashtableBucket*)buffer, + SystemDictionary::set_shared_dictionary((HashtableBucket*)buffer, sharedDictionaryLen, number_of_entries); buffer += sharedDictionaryLen; @@ -171,7 +171,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - ClassLoader::create_package_info_table((HashtableBucket*)buffer, pkgInfoLen, + ClassLoader::create_package_info_table((HashtableBucket*)buffer, pkgInfoLen, number_of_entries); buffer += pkgInfoLen; ClassLoader::verify(); diff --git a/hotspot/src/share/vm/memory/space.hpp b/hotspot/src/share/vm/memory/space.hpp index f81c293a4bf..ef2f2c6e559 100644 --- a/hotspot/src/share/vm/memory/space.hpp +++ b/hotspot/src/share/vm/memory/space.hpp @@ -105,7 +105,7 @@ class SpaceMemRegionOopsIterClosure: public OopClosure { // bottom() <= top() <= end() // top() is inclusive and end() is exclusive. -class Space: public CHeapObj { +class Space: public CHeapObj { friend class VMStructs; protected: HeapWord* _bottom; diff --git a/hotspot/src/share/vm/memory/tenuredGeneration.cpp b/hotspot/src/share/vm/memory/tenuredGeneration.cpp index b88f315ed16..50b2615baea 100644 --- a/hotspot/src/share/vm/memory/tenuredGeneration.cpp +++ b/hotspot/src/share/vm/memory/tenuredGeneration.cpp @@ -65,7 +65,7 @@ TenuredGeneration::TenuredGeneration(ReservedSpace rs, if (UseParNewGC && ParallelGCThreads > 0) { typedef ParGCAllocBufferWithBOT* ParGCAllocBufferWithBOTPtr; _alloc_buffers = NEW_C_HEAP_ARRAY(ParGCAllocBufferWithBOTPtr, - ParallelGCThreads); + ParallelGCThreads, mtGC); if (_alloc_buffers == NULL) vm_exit_during_initialization("Could not allocate alloc_buffers"); for (uint i = 0; i < ParallelGCThreads; i++) { diff --git a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp index 1b8bb0a3ca7..c85a59de14e 100644 --- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp +++ b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp @@ -36,7 +36,7 @@ class GlobalTLABStats; // It is thread-private at any time, but maybe multiplexed over // time across multiple threads. The park()/unpark() pair is // used to make it avaiable for such multiplexing. -class ThreadLocalAllocBuffer: public CHeapObj { +class ThreadLocalAllocBuffer: public CHeapObj { friend class VMStructs; private: HeapWord* _start; // address of TLAB @@ -172,7 +172,7 @@ public: void verify(); }; -class GlobalTLABStats: public CHeapObj { +class GlobalTLABStats: public CHeapObj { private: // Accumulate perfdata in private variables because diff --git a/hotspot/src/share/vm/memory/universe.cpp b/hotspot/src/share/vm/memory/universe.cpp index 9282828a7e9..4ed723afa57 100644 --- a/hotspot/src/share/vm/memory/universe.cpp +++ b/hotspot/src/share/vm/memory/universe.cpp @@ -764,7 +764,7 @@ jint universe_init() { FileMapInfo* mapinfo = NULL; if (UseSharedSpaces) { - mapinfo = NEW_C_HEAP_OBJ(FileMapInfo); + mapinfo = NEW_C_HEAP_OBJ(FileMapInfo, mtInternal); memset(mapinfo, 0, sizeof(FileMapInfo)); // Open the shared archive file, read and validate the header. If @@ -1546,7 +1546,7 @@ void ActiveMethodOopsCache::add_previous_version(const methodOop method) { // This is the first previous version so make some space. // Start with 2 elements under the assumption that the class // won't be redefined much. - _prev_methods = new (ResourceObj::C_HEAP) GrowableArray(2, true); + _prev_methods = new (ResourceObj::C_HEAP, mtClass) GrowableArray(2, true); } // RC_TRACE macro has an embedded ResourceMark diff --git a/hotspot/src/share/vm/memory/universe.hpp b/hotspot/src/share/vm/memory/universe.hpp index 073a5c2ca75..6f268b3f10b 100644 --- a/hotspot/src/share/vm/memory/universe.hpp +++ b/hotspot/src/share/vm/memory/universe.hpp @@ -43,7 +43,7 @@ class DeferredObjAllocEvent; // Common parts of a methodOop cache. This cache safely interacts with // the RedefineClasses API. // -class CommonMethodOopCache : public CHeapObj { +class CommonMethodOopCache : public CHeapObj { // We save the klassOop and the idnum of methodOop in order to get // the current cached methodOop. private: @@ -455,7 +455,7 @@ class Universe: AllStatic { static int base_vtable_size() { return _base_vtable_size; } }; -class DeferredObjAllocEvent : public CHeapObj { +class DeferredObjAllocEvent : public CHeapObj { private: oop _oop; size_t _bytesize; diff --git a/hotspot/src/share/vm/oops/constantPoolOop.hpp b/hotspot/src/share/vm/oops/constantPoolOop.hpp index c2f985d7750..a2c046859df 100644 --- a/hotspot/src/share/vm/oops/constantPoolOop.hpp +++ b/hotspot/src/share/vm/oops/constantPoolOop.hpp @@ -764,7 +764,7 @@ class constantPoolOopDesc : public oopDesc { unsigned char *bytes); }; -class SymbolHashMapEntry : public CHeapObj { +class SymbolHashMapEntry : public CHeapObj { private: unsigned int _hash; // 32-bit hash for item SymbolHashMapEntry* _next; // Next element in the linked list for this bucket @@ -790,7 +790,7 @@ class SymbolHashMapEntry : public CHeapObj { }; // End SymbolHashMapEntry class -class SymbolHashMapBucket : public CHeapObj { +class SymbolHashMapBucket : public CHeapObj { private: SymbolHashMapEntry* _entry; @@ -803,7 +803,7 @@ public: }; // End SymbolHashMapBucket class -class SymbolHashMap: public CHeapObj { +class SymbolHashMap: public CHeapObj { private: // Default number of entries in the table @@ -816,7 +816,7 @@ class SymbolHashMap: public CHeapObj { void initialize_table(int table_size) { _table_size = table_size; - _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size); + _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size, mtSymbol); for (int index = 0; index < table_size; index++) { _buckets[index].clear(); } diff --git a/hotspot/src/share/vm/oops/instanceKlass.cpp b/hotspot/src/share/vm/oops/instanceKlass.cpp index 794a7e2809f..b742889b66b 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceKlass.cpp @@ -989,7 +989,7 @@ void instanceKlass::do_nonstatic_fields(FieldClosure* cl) { fieldDescriptor fd; int length = java_fields_count(); // In DebugInfo nonstatic fields are sorted by offset. - int* fields_sorted = NEW_C_HEAP_ARRAY(int, 2*(length+1)); + int* fields_sorted = NEW_C_HEAP_ARRAY(int, 2*(length+1), mtClass); int j = 0; for (int i = 0; i < length; i += 1) { fd.initialize(as_klassOop(), i); @@ -1009,7 +1009,7 @@ void instanceKlass::do_nonstatic_fields(FieldClosure* cl) { cl->do_field(&fd); } } - FREE_C_HEAP_ARRAY(int, fields_sorted); + FREE_C_HEAP_ARRAY(int, fields_sorted, mtClass); } @@ -1236,7 +1236,7 @@ jmethodID instanceKlass::get_jmethod_id(instanceKlassHandle ik_h, methodHandle m if (length <= idnum) { // allocate a new cache that might be used size_t size = MAX2(idnum+1, (size_t)ik_h->idnum_allocated_count()); - new_jmeths = NEW_C_HEAP_ARRAY(jmethodID, size+1); + new_jmeths = NEW_C_HEAP_ARRAY(jmethodID, size+1, mtClass); memset(new_jmeths, 0, (size+1)*sizeof(jmethodID)); // cache size is stored in element[0], other elements offset by one new_jmeths[0] = (jmethodID)size; @@ -1397,7 +1397,7 @@ void instanceKlass::set_cached_itable_index(size_t idnum, int index) { // cache size is stored in element[0], other elements offset by one if (indices == NULL || (length = (size_t)indices[0]) <= idnum) { size_t size = MAX2(idnum+1, (size_t)idnum_allocated_count()); - int* new_indices = NEW_C_HEAP_ARRAY(int, size+1); + int* new_indices = NEW_C_HEAP_ARRAY(int, size+1, mtClass); new_indices[0] = (int)size; // copy any existing entries size_t i; @@ -1933,7 +1933,7 @@ void instanceKlass::release_C_heap_structures() { // deallocate the cached class file if (_cached_class_file_bytes != NULL) { - os::free(_cached_class_file_bytes); + os::free(_cached_class_file_bytes, mtClass); _cached_class_file_bytes = NULL; _cached_class_file_len = 0; } @@ -2530,7 +2530,7 @@ void instanceKlass::add_previous_version(instanceKlassHandle ikh, // This is the first previous version so make some space. // Start with 2 elements under the assumption that the class // won't be redefined much. - _previous_versions = new (ResourceObj::C_HEAP) + _previous_versions = new (ResourceObj::C_HEAP, mtClass) GrowableArray(2, true); } @@ -2556,7 +2556,7 @@ void instanceKlass::add_previous_version(instanceKlassHandle ikh, ("add: all methods are obsolete; flushing any EMCP weak refs")); } else { int local_count = 0; - GrowableArray* method_refs = new (ResourceObj::C_HEAP) + GrowableArray* method_refs = new (ResourceObj::C_HEAP, mtClass) GrowableArray(emcp_method_count, true); for (int i = 0; i < old_methods->length(); i++) { if (emcp_methods->at(i)) { @@ -2948,7 +2948,7 @@ PreviousVersionInfo* PreviousVersionWalker::next_previous_version() { while (_current_index < length) { PreviousVersionNode * pv_node = _previous_versions->at(_current_index++); - PreviousVersionInfo * pv_info = new (ResourceObj::C_HEAP) + PreviousVersionInfo * pv_info = new (ResourceObj::C_HEAP, mtClass) PreviousVersionInfo(pv_node); constantPoolHandle cp_h = pv_info->prev_constant_pool_handle(); diff --git a/hotspot/src/share/vm/oops/instanceKlass.hpp b/hotspot/src/share/vm/oops/instanceKlass.hpp index 229750bce64..93e804c281e 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.hpp +++ b/hotspot/src/share/vm/oops/instanceKlass.hpp @@ -1008,7 +1008,7 @@ inline u2 instanceKlass::next_method_idnum() { /* JNIid class for jfieldIDs only */ -class JNIid: public CHeapObj { +class JNIid: public CHeapObj { friend class VMStructs; private: klassOop _holder; @@ -1059,7 +1059,7 @@ class BreakpointInfo; // reference must be used because a weak reference would be seen as // collectible. A GrowableArray of PreviousVersionNodes is attached // to the instanceKlass as needed. See PreviousVersionWalker below. -class PreviousVersionNode : public CHeapObj { +class PreviousVersionNode : public CHeapObj { private: // A shared ConstantPool is never collected so we'll always have // a reference to it so we can update items in the cache. We'll @@ -1154,7 +1154,7 @@ class PreviousVersionWalker : public StackObj { // noticed since an nmethod should be removed as many times are it's // added. // -class nmethodBucket: public CHeapObj { +class nmethodBucket: public CHeapObj { friend class VMStructs; private: nmethod* _nmethod; diff --git a/hotspot/src/share/vm/oops/methodOop.hpp b/hotspot/src/share/vm/oops/methodOop.hpp index de10b7c96f0..822a47c9356 100644 --- a/hotspot/src/share/vm/oops/methodOop.hpp +++ b/hotspot/src/share/vm/oops/methodOop.hpp @@ -801,7 +801,7 @@ class CompressedLineNumberReadStream: public CompressedReadStream { // breakpoints are written only at safepoints, and are read // concurrently only outside of safepoints. -class BreakpointInfo : public CHeapObj { +class BreakpointInfo : public CHeapObj { friend class VMStructs; private: Bytecodes::Code _orig_bytecode; diff --git a/hotspot/src/share/vm/oops/symbol.cpp b/hotspot/src/share/vm/oops/symbol.cpp index 8db92d1e2fd..cc52c7adb2d 100644 --- a/hotspot/src/share/vm/oops/symbol.cpp +++ b/hotspot/src/share/vm/oops/symbol.cpp @@ -38,7 +38,7 @@ Symbol::Symbol(const u1* name, int length, int refcount) : _refcount(refcount), void* Symbol::operator new(size_t sz, int len, TRAPS) { int alloc_size = object_size(len)*HeapWordSize; - address res = (address) AllocateHeap(alloc_size, "symbol"); + address res = (address) AllocateHeap(alloc_size, mtSymbol); DEBUG_ONLY(set_allocation_type(res, ResourceObj::C_HEAP);) return res; } diff --git a/hotspot/src/share/vm/opto/idealGraphPrinter.cpp b/hotspot/src/share/vm/opto/idealGraphPrinter.cpp index f9f40a37d7a..3344ce29c8e 100644 --- a/hotspot/src/share/vm/opto/idealGraphPrinter.cpp +++ b/hotspot/src/share/vm/opto/idealGraphPrinter.cpp @@ -130,15 +130,15 @@ IdealGraphPrinter::IdealGraphPrinter() { } else { st.print("%s%d", PrintIdealGraphFile, _file_count); } - fileStream *stream = new (ResourceObj::C_HEAP) fileStream(st.as_string()); + fileStream *stream = new (ResourceObj::C_HEAP, mtCompiler) fileStream(st.as_string()); _output = stream; } else { - fileStream *stream = new (ResourceObj::C_HEAP) fileStream(PrintIdealGraphFile); + fileStream *stream = new (ResourceObj::C_HEAP, mtCompiler) fileStream(PrintIdealGraphFile); _output = stream; } _file_count++; } else { - _stream = new (ResourceObj::C_HEAP) networkStream(); + _stream = new (ResourceObj::C_HEAP, mtCompiler) networkStream(); // Try to connect to visualizer if (_stream->connect(PrintIdealGraphAddress, PrintIdealGraphPort)) { @@ -160,7 +160,7 @@ IdealGraphPrinter::IdealGraphPrinter() { } } - _xml = new (ResourceObj::C_HEAP) xmlStream(_output); + _xml = new (ResourceObj::C_HEAP, mtCompiler) xmlStream(_output); head(TOP_ELEMENT); } diff --git a/hotspot/src/share/vm/opto/macro.cpp b/hotspot/src/share/vm/opto/macro.cpp index b4d54f7e9af..fee17c48a95 100644 --- a/hotspot/src/share/vm/opto/macro.cpp +++ b/hotspot/src/share/vm/opto/macro.cpp @@ -409,7 +409,7 @@ Node *PhaseMacroExpand::value_from_mem_phi(Node *mem, BasicType ft, const Type * Node *alloc_mem = alloc->in(TypeFunc::Memory); uint length = mem->req(); - GrowableArray values(length, length, NULL); + GrowableArray values(length, length, NULL, false); // create a new Phi for the value PhiNode *phi = new (C, length) PhiNode(mem->in(0), phi_type, NULL, instance_id, alias_idx, offset); diff --git a/hotspot/src/share/vm/opto/runtime.hpp b/hotspot/src/share/vm/opto/runtime.hpp index 11b5434a54d..6037d19f2bc 100644 --- a/hotspot/src/share/vm/opto/runtime.hpp +++ b/hotspot/src/share/vm/opto/runtime.hpp @@ -55,7 +55,7 @@ class CallInfo; // code in various ways. Currently they are used by the lock coarsening code // -class NamedCounter : public CHeapObj { +class NamedCounter : public CHeapObj { public: enum CounterTag { NoTag, diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp index af118139e2b..b22473bada9 100644 --- a/hotspot/src/share/vm/opto/type.cpp +++ b/hotspot/src/share/vm/opto/type.cpp @@ -208,7 +208,7 @@ void Type::Initialize_shared(Compile* current) { // locking. Arena* save = current->type_arena(); - Arena* shared_type_arena = new Arena(); + Arena* shared_type_arena = new (mtCompiler)Arena(); current->set_type_arena(shared_type_arena); _shared_type_dict = diff --git a/hotspot/src/share/vm/prims/jni.cpp b/hotspot/src/share/vm/prims/jni.cpp index 166bbd6079d..cf032489568 100644 --- a/hotspot/src/share/vm/prims/jni.cpp +++ b/hotspot/src/share/vm/prims/jni.cpp @@ -33,6 +33,7 @@ #ifndef SERIALGC #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" #endif // SERIALGC +#include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" #include "memory/gcLocker.inline.hpp" #include "memory/oopFactory.hpp" @@ -3270,7 +3271,7 @@ JNI_QUICK_ENTRY(const jchar*, jni_GetStringChars( int s_len = java_lang_String::length(s); typeArrayOop s_value = java_lang_String::value(s); int s_offset = java_lang_String::offset(s); - jchar* buf = NEW_C_HEAP_ARRAY(jchar, s_len + 1); // add one for zero termination + jchar* buf = NEW_C_HEAP_ARRAY(jchar, s_len + 1, mtInternal); // add one for zero termination if (s_len > 0) { memcpy(buf, s_value->char_at_addr(s_offset), sizeof(jchar)*s_len); } @@ -3363,7 +3364,7 @@ JNI_ENTRY(const char*, jni_GetStringUTFChars(JNIEnv *env, jstring string, jboole #endif /* USDT2 */ oop java_string = JNIHandles::resolve_non_null(string); size_t length = java_lang_String::utf8_length(java_string); - char* result = AllocateHeap(length + 1, "GetStringUTFChars"); + char* result = AllocateHeap(length + 1, mtInternal); java_lang_String::as_utf8_string(java_string, result, (int) length + 1); if (isCopy != NULL) *isCopy = JNI_TRUE; #ifndef USDT2 @@ -3619,7 +3620,7 @@ JNI_QUICK_ENTRY(ElementType*, \ * Avoid asserts in typeArrayOop. */ \ result = (ElementType*)get_bad_address(); \ } else { \ - result = NEW_C_HEAP_ARRAY(ElementType, len); \ + result = NEW_C_HEAP_ARRAY(ElementType, len, mtInternal); \ /* copy the array to the c chunk */ \ memcpy(result, a->Tag##_at_addr(0), sizeof(ElementType)*len); \ } \ @@ -3656,7 +3657,7 @@ JNI_QUICK_ENTRY(ElementType*, \ * Avoid asserts in typeArrayOop. */ \ result = (ElementType*)get_bad_address(); \ } else { \ - result = NEW_C_HEAP_ARRAY(ElementType, len); \ + result = NEW_C_HEAP_ARRAY(ElementType, len, mtInternal); \ /* copy the array to the c chunk */ \ memcpy(result, a->Tag##_at_addr(0), sizeof(ElementType)*len); \ } \ diff --git a/hotspot/src/share/vm/prims/jniCheck.cpp b/hotspot/src/share/vm/prims/jniCheck.cpp index 3bf4ecd1a7f..7e30b58828f 100644 --- a/hotspot/src/share/vm/prims/jniCheck.cpp +++ b/hotspot/src/share/vm/prims/jniCheck.cpp @@ -1308,7 +1308,7 @@ JNI_ENTRY_CHECKED(const jchar *, assert (isCopy == NULL || *isCopy == JNI_TRUE, "GetStringChars didn't return a copy as expected"); size_t len = UNCHECKED()->GetStringLength(env,str) + 1; // + 1 for NULL termination - jint* tagLocation = (jint*) AllocateHeap(len * sizeof(jchar) + sizeof(jint), "checked_jni_GetStringChars"); + jint* tagLocation = (jint*) AllocateHeap(len * sizeof(jchar) + sizeof(jint), mtInternal); *tagLocation = STRING_TAG; jchar* newResult = (jchar*) (tagLocation + 1); memcpy(newResult, result, len * sizeof(jchar)); @@ -1378,13 +1378,13 @@ JNI_ENTRY_CHECKED(const char *, assert (isCopy == NULL || *isCopy == JNI_TRUE, "GetStringUTFChars didn't return a copy as expected"); size_t len = strlen(result) + 1; // + 1 for NULL termination - jint* tagLocation = (jint*) AllocateHeap(len + sizeof(jint), "checked_jni_GetStringUTFChars"); + jint* tagLocation = (jint*) AllocateHeap(len + sizeof(jint), mtInternal); *tagLocation = STRING_UTF_TAG; char* newResult = (char*) (tagLocation + 1); strcpy(newResult, result); // Avoiding call to UNCHECKED()->ReleaseStringUTFChars() since that will fire unexpected dtrace probes // Note that the dtrace arguments for the allocated memory will not match up with this solution. - FreeHeap((char*)result); + FreeHeap((char*)result, mtInternal); functionExit(env); return newResult; diff --git a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.hpp b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.hpp index 565c6fe8401..64caf38631f 100644 --- a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.hpp +++ b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.hpp @@ -68,11 +68,11 @@ class JvmtiConstantPoolReconstituter : public StackObj { ~JvmtiConstantPoolReconstituter() { if (_symmap != NULL) { - os::free(_symmap); + os::free(_symmap, mtClass); _symmap = NULL; } if (_classmap != NULL) { - os::free(_classmap); + os::free(_classmap, mtClass); _classmap = NULL; } } diff --git a/hotspot/src/share/vm/prims/jvmtiCodeBlobEvents.cpp b/hotspot/src/share/vm/prims/jvmtiCodeBlobEvents.cpp index 7f20ec3ae86..3a9a4ea1c55 100644 --- a/hotspot/src/share/vm/prims/jvmtiCodeBlobEvents.cpp +++ b/hotspot/src/share/vm/prims/jvmtiCodeBlobEvents.cpp @@ -157,7 +157,7 @@ void CodeBlobCollector::collect() { assert(_global_code_blobs == NULL, "checking"); // create the global list - _global_code_blobs = new (ResourceObj::C_HEAP) GrowableArray(50,true); + _global_code_blobs = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(50,true); // iterate over the stub code descriptors and put them in the list first. int index = 0; @@ -247,7 +247,7 @@ void JvmtiCodeBlobEvents::build_jvmti_addr_location_map(nmethod *nm, int pcds_in_method; pcds_in_method = (nm->scopes_pcs_end() - nm->scopes_pcs_begin()); - map = NEW_C_HEAP_ARRAY(jvmtiAddrLocationMap, pcds_in_method); + map = NEW_C_HEAP_ARRAY(jvmtiAddrLocationMap, pcds_in_method, mtInternal); address scopes_data = nm->scopes_data_begin(); for( pcd = nm->scopes_pcs_begin(); pcd < nm->scopes_pcs_end(); ++pcd ) { diff --git a/hotspot/src/share/vm/prims/jvmtiEnv.cpp b/hotspot/src/share/vm/prims/jvmtiEnv.cpp index 46519bb5796..637b6a3ce36 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp @@ -1012,7 +1012,7 @@ JvmtiEnv::GetOwnedMonitorInfo(JavaThread* java_thread, jint* owned_monitor_count // growable array of jvmti monitors info on the C-heap GrowableArray *owned_monitors_list = - new (ResourceObj::C_HEAP) GrowableArray(1, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); uint32_t debug_bits = 0; if (is_thread_fully_suspended(java_thread, true, &debug_bits)) { @@ -1057,7 +1057,7 @@ JvmtiEnv::GetOwnedMonitorStackDepthInfo(JavaThread* java_thread, jint* monitor_i // growable array of jvmti monitors info on the C-heap GrowableArray *owned_monitors_list = - new (ResourceObj::C_HEAP) GrowableArray(1, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); uint32_t debug_bits = 0; if (is_thread_fully_suspended(java_thread, true, &debug_bits)) { diff --git a/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp b/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp index fd426422b13..2a6fd143b90 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp @@ -381,7 +381,7 @@ JvmtiEnvBase::set_native_method_prefixes(jint prefix_count, char** prefixes) { _native_method_prefixes = NULL; } else { // there are prefixes, allocate an array to hold them, and fill it - char** new_prefixes = (char**)os::malloc((prefix_count) * sizeof(char*)); + char** new_prefixes = (char**)os::malloc((prefix_count) * sizeof(char*), mtInternal); if (new_prefixes == NULL) { return JVMTI_ERROR_OUT_OF_MEMORY; } @@ -1150,7 +1150,7 @@ JvmtiEnvBase::get_object_monitor_usage(JavaThread* calling_thread, jobject objec ResourceTracker::ResourceTracker(JvmtiEnv* env) { _env = env; - _allocations = new (ResourceObj::C_HEAP) GrowableArray(20, true); + _allocations = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(20, true); _failed = false; } ResourceTracker::~ResourceTracker() { diff --git a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp index ba0374648e5..29604db13b7 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp @@ -52,7 +52,7 @@ class JvmtiTagMap; // done via JNI GetEnv() call. Multiple attachments are // allowed in jvmti. -class JvmtiEnvBase : public CHeapObj { +class JvmtiEnvBase : public CHeapObj { private: @@ -175,7 +175,7 @@ class JvmtiEnvBase : public CHeapObj { if (size == 0) { *mem_ptr = NULL; } else { - *mem_ptr = (unsigned char *)os::malloc((size_t)size); + *mem_ptr = (unsigned char *)os::malloc((size_t)size, mtInternal); if (*mem_ptr == NULL) { return JVMTI_ERROR_OUT_OF_MEMORY; } @@ -185,7 +185,7 @@ class JvmtiEnvBase : public CHeapObj { jvmtiError deallocate(unsigned char* mem) { if (mem != NULL) { - os::free(mem); + os::free(mem, mtInternal); } return JVMTI_ERROR_NONE; } diff --git a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp index 9df767eb681..8e5214002c2 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp @@ -95,7 +95,7 @@ JvmtiFramePops::clear_to(JvmtiFramePop& fp) { // JvmtiFramePops::JvmtiFramePops() { - _pops = new (ResourceObj::C_HEAP) GrowableArray (2, true); + _pops = new (ResourceObj::C_HEAP, mtInternal) GrowableArray (2, true); } JvmtiFramePops::~JvmtiFramePops() { diff --git a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp index e2273df0835..f9e686c0874 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp @@ -76,7 +76,7 @@ class JvmtiFramePop VALUE_OBJ_CLASS_SPEC { // It records what frames on a threads stack should post frame_pop events when they're exited. // -class JvmtiFramePops : public CHeapObj { +class JvmtiFramePops : public CHeapObj { private: GrowableArray* _pops; @@ -107,7 +107,7 @@ class JvmtiFramePops : public CHeapObj { // 3: Location of last executed instruction, used to filter out duplicate // events due to instruction rewriting. -class JvmtiEnvThreadState : public CHeapObj { +class JvmtiEnvThreadState : public CHeapObj { private: friend class JvmtiEnv; JavaThread *_thread; diff --git a/hotspot/src/share/vm/prims/jvmtiExport.cpp b/hotspot/src/share/vm/prims/jvmtiExport.cpp index 5325073b620..70c5c71c9c9 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.cpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp @@ -617,7 +617,7 @@ class JvmtiClassFileLoadHookPoster : public StackObj { if (caching_needed && *_cached_data_ptr == NULL) { // data has been changed by the new retransformable agent // and it hasn't already been cached, cache it - *_cached_data_ptr = (unsigned char *)os::malloc(_curr_len); + *_cached_data_ptr = (unsigned char *)os::malloc(_curr_len, mtInternal); memcpy(*_cached_data_ptr, _curr_data, _curr_len); *_cached_length_ptr = _curr_len; } @@ -720,7 +720,7 @@ class JvmtiCompiledMethodLoadEventMark : public JvmtiMethodEventMark { JvmtiCodeBlobEvents::build_jvmti_addr_location_map(nm, &_map, &_map_length); } ~JvmtiCompiledMethodLoadEventMark() { - FREE_C_HEAP_ARRAY(jvmtiAddrLocationMap, _map); + FREE_C_HEAP_ARRAY(jvmtiAddrLocationMap, _map, mtInternal); } jint code_size() { return _code_size; } @@ -2323,7 +2323,7 @@ JvmtiDynamicCodeEventCollector::~JvmtiDynamicCodeEventCollector() { // register a stub void JvmtiDynamicCodeEventCollector::register_stub(const char* name, address start, address end) { if (_code_blobs == NULL) { - _code_blobs = new (ResourceObj::C_HEAP) GrowableArray(1,true); + _code_blobs = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); } _code_blobs->append(new JvmtiCodeBlobDesc(name, start, end)); } @@ -2357,7 +2357,7 @@ JvmtiVMObjectAllocEventCollector::~JvmtiVMObjectAllocEventCollector() { void JvmtiVMObjectAllocEventCollector::record_allocation(oop obj) { assert(is_enabled(), "VM object alloc event collector is not enabled"); if (_allocated == NULL) { - _allocated = new (ResourceObj::C_HEAP) GrowableArray(1, true); + _allocated = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); } _allocated->push(obj); } diff --git a/hotspot/src/share/vm/prims/jvmtiExport.hpp b/hotspot/src/share/vm/prims/jvmtiExport.hpp index 31ee1ec93e8..4f6e6c6ae49 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.hpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.hpp @@ -350,7 +350,7 @@ class JvmtiExport : public AllStatic { // Support class used by JvmtiDynamicCodeEventCollector and others. It // describes a single code blob by name and address range. -class JvmtiCodeBlobDesc : public CHeapObj { +class JvmtiCodeBlobDesc : public CHeapObj { private: char _name[64]; address _code_begin; diff --git a/hotspot/src/share/vm/prims/jvmtiExtensions.cpp b/hotspot/src/share/vm/prims/jvmtiExtensions.cpp index 00f99720101..9f6a1b101ec 100644 --- a/hotspot/src/share/vm/prims/jvmtiExtensions.cpp +++ b/hotspot/src/share/vm/prims/jvmtiExtensions.cpp @@ -49,8 +49,8 @@ static jvmtiError JNICALL IsClassUnloadingEnabled(const jvmtiEnv* env, jboolean* // event. The function and the event are registered here. // void JvmtiExtensions::register_extensions() { - _ext_functions = new (ResourceObj::C_HEAP) GrowableArray(1,true); - _ext_events = new (ResourceObj::C_HEAP) GrowableArray(1,true); + _ext_functions = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); + _ext_events = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); // register our extension function static jvmtiParamInfo func_params[] = { diff --git a/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp b/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp index dd07a295ad1..050aa60177e 100644 --- a/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp @@ -152,7 +152,7 @@ class JvmtiGetLoadedClassesClosure : public StackObj { // Public methods that get called within the scope of the closure void allocate() { - _list = NEW_C_HEAP_ARRAY(Handle, _count); + _list = NEW_C_HEAP_ARRAY(Handle, _count, mtInternal); assert(_list != NULL, "Out of memory"); if (_list == NULL) { _count = 0; diff --git a/hotspot/src/share/vm/prims/jvmtiImpl.cpp b/hotspot/src/share/vm/prims/jvmtiImpl.cpp index e0d809d4541..2244d81d9d7 100644 --- a/hotspot/src/share/vm/prims/jvmtiImpl.cpp +++ b/hotspot/src/share/vm/prims/jvmtiImpl.cpp @@ -98,8 +98,8 @@ JvmtiAgentThread::call_start_function() { void GrowableCache::recache() { int len = _elements->length(); - FREE_C_HEAP_ARRAY(address, _cache); - _cache = NEW_C_HEAP_ARRAY(address,len+1); + FREE_C_HEAP_ARRAY(address, _cache, mtInternal); + _cache = NEW_C_HEAP_ARRAY(address,len+1, mtInternal); for (int i=0; iat(i)->getCacheValue(); @@ -142,13 +142,13 @@ GrowableCache::GrowableCache() { GrowableCache::~GrowableCache() { clear(); delete _elements; - FREE_C_HEAP_ARRAY(address, _cache); + FREE_C_HEAP_ARRAY(address, _cache, mtInternal); } void GrowableCache::initialize(void *this_obj, void listener_fun(void *, address*) ) { _this_obj = this_obj; _listener_fun = listener_fun; - _elements = new (ResourceObj::C_HEAP) GrowableArray(5,true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(5,true); recache(); } diff --git a/hotspot/src/share/vm/prims/jvmtiImpl.hpp b/hotspot/src/share/vm/prims/jvmtiImpl.hpp index 704d287a8f3..f80d63144d4 100644 --- a/hotspot/src/share/vm/prims/jvmtiImpl.hpp +++ b/hotspot/src/share/vm/prims/jvmtiImpl.hpp @@ -64,7 +64,7 @@ class JvmtiBreakpoints; // to update its pointer to the address cache. // -class GrowableElement : public CHeapObj { +class GrowableElement : public CHeapObj { public: virtual address getCacheValue() =0; virtual bool equals(GrowableElement* e) =0; @@ -130,7 +130,7 @@ public: // Note : typesafe wrapper for GrowableCache of JvmtiBreakpoint // -class JvmtiBreakpointCache : public CHeapObj { +class JvmtiBreakpointCache : public CHeapObj { private: GrowableCache _cache; @@ -258,7 +258,7 @@ public: // CHeap allocated to emphasize its similarity to JvmtiFramePops. // -class JvmtiBreakpoints : public CHeapObj { +class JvmtiBreakpoints : public CHeapObj { private: JvmtiBreakpointCache _bps; @@ -496,7 +496,7 @@ class JvmtiDeferredEvent VALUE_OBJ_CLASS_SPEC { class JvmtiDeferredEventQueue : AllStatic { friend class JvmtiDeferredEvent; private: - class QueueNode : public CHeapObj { + class QueueNode : public CHeapObj { private: JvmtiDeferredEvent _event; QueueNode* _next; diff --git a/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp b/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp index 89cac00bb5c..9031bbb290a 100644 --- a/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp +++ b/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp @@ -27,7 +27,7 @@ #include "runtime/interfaceSupport.hpp" #include "runtime/thread.hpp" -GrowableArray *JvmtiPendingMonitors::_monitors = new (ResourceObj::C_HEAP) GrowableArray(1,true); +GrowableArray *JvmtiPendingMonitors::_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); void JvmtiPendingMonitors::transition_raw_monitors() { assert((Threads::number_of_threads()==1), @@ -53,7 +53,7 @@ is running. Raw monitor transition will not work"); JvmtiRawMonitor::JvmtiRawMonitor(const char *name) { #ifdef ASSERT - _name = strcpy(NEW_C_HEAP_ARRAY(char, strlen(name) + 1), name); + _name = strcpy(NEW_C_HEAP_ARRAY(char, strlen(name) + 1, mtInternal), name); #else _name = NULL; #endif diff --git a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp index 2caecf680bb..0eb188a6371 100644 --- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp @@ -831,7 +831,7 @@ bool VM_RedefineClasses::is_unresolved_string_mismatch(constantPoolHandle cp1, jvmtiError VM_RedefineClasses::load_new_class_versions(TRAPS) { // For consistency allocate memory using os::malloc wrapper. _scratch_classes = (instanceKlassHandle *) - os::malloc(sizeof(instanceKlassHandle) * _class_count); + os::malloc(sizeof(instanceKlassHandle) * _class_count, mtInternal); if (_scratch_classes == NULL) { return JVMTI_ERROR_OUT_OF_MEMORY; } diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp index 3b58f0f087e..ba77093a7f8 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp @@ -55,7 +55,7 @@ // and the tag value. In addition an entry includes a next pointer which // is used to chain entries together. -class JvmtiTagHashmapEntry : public CHeapObj { +class JvmtiTagHashmapEntry : public CHeapObj { private: friend class JvmtiTagMap; @@ -106,7 +106,7 @@ class JvmtiTagHashmapEntry : public CHeapObj { // entries. It also provides a function to iterate over all entries // in the hashmap. -class JvmtiTagHashmap : public CHeapObj { +class JvmtiTagHashmap : public CHeapObj { private: friend class JvmtiTagMap; @@ -150,7 +150,7 @@ class JvmtiTagHashmap : public CHeapObj { _resize_threshold = (int)(_load_factor * _size); _resizing_enabled = true; size_t s = initial_size * sizeof(JvmtiTagHashmapEntry*); - _table = (JvmtiTagHashmapEntry**)os::malloc(s); + _table = (JvmtiTagHashmapEntry**)os::malloc(s, mtInternal); if (_table == NULL) { vm_exit_out_of_memory(s, "unable to allocate initial hashtable for jvmti object tags"); } @@ -188,7 +188,7 @@ class JvmtiTagHashmap : public CHeapObj { // allocate new table size_t s = new_size * sizeof(JvmtiTagHashmapEntry*); - JvmtiTagHashmapEntry** new_table = (JvmtiTagHashmapEntry**)os::malloc(s); + JvmtiTagHashmapEntry** new_table = (JvmtiTagHashmapEntry**)os::malloc(s, mtInternal); if (new_table == NULL) { warning("unable to allocate larger hashtable for jvmti object tags"); set_resizing_enabled(false); @@ -776,7 +776,7 @@ jlong JvmtiTagMap::get_tag(jobject object) { // For each field it holds the field index (as defined by the JVMTI specification), // the field type, and the offset. -class ClassFieldDescriptor: public CHeapObj { +class ClassFieldDescriptor: public CHeapObj { private: int _field_index; int _field_offset; @@ -790,7 +790,7 @@ class ClassFieldDescriptor: public CHeapObj { int field_offset() const { return _field_offset; } }; -class ClassFieldMap: public CHeapObj { +class ClassFieldMap: public CHeapObj { private: enum { initial_field_count = 5 @@ -821,7 +821,8 @@ class ClassFieldMap: public CHeapObj { }; ClassFieldMap::ClassFieldMap() { - _fields = new (ResourceObj::C_HEAP) GrowableArray(initial_field_count, true); + _fields = new (ResourceObj::C_HEAP, mtInternal) + GrowableArray(initial_field_count, true); } ClassFieldMap::~ClassFieldMap() { @@ -892,7 +893,7 @@ ClassFieldMap* ClassFieldMap::create_map_of_instance_fields(oop obj) { // heap iteration and avoid creating a field map for each object in the heap // (only need to create the map when the first instance of a class is encountered). // -class JvmtiCachedClassFieldMap : public CHeapObj { +class JvmtiCachedClassFieldMap : public CHeapObj { private: enum { initial_class_count = 200 @@ -957,7 +958,8 @@ bool ClassFieldMapCacheMark::_is_active; // record that the given instanceKlass is caching a field map void JvmtiCachedClassFieldMap::add_to_class_list(instanceKlass* ik) { if (_class_list == NULL) { - _class_list = new (ResourceObj::C_HEAP) GrowableArray(initial_class_count, true); + _class_list = new (ResourceObj::C_HEAP, mtInternal) + GrowableArray(initial_class_count, true); } _class_list->push(ik); } @@ -1526,8 +1528,8 @@ class TagObjectCollector : public JvmtiTagHashmapEntryClosure { _env = env; _tags = (jlong*)tags; _tag_count = tag_count; - _object_results = new (ResourceObj::C_HEAP) GrowableArray(1,true); - _tag_results = new (ResourceObj::C_HEAP) GrowableArray(1,true); + _object_results = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); + _tag_results = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); } ~TagObjectCollector() { @@ -1672,8 +1674,8 @@ void ObjectMarker::init() { Universe::heap()->ensure_parsability(false); // no need to retire TLABs // create stacks for interesting headers - _saved_mark_stack = new (ResourceObj::C_HEAP) GrowableArray(4000, true); - _saved_oop_stack = new (ResourceObj::C_HEAP) GrowableArray(4000, true); + _saved_mark_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(4000, true); + _saved_oop_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(4000, true); if (UseBiasedLocking) { BiasedLocking::preserve_marks(); @@ -2712,7 +2714,7 @@ class VM_HeapWalkOperation: public VM_Operation { bool _reporting_string_values; GrowableArray* create_visit_stack() { - return new (ResourceObj::C_HEAP) GrowableArray(initial_visit_stack_size, true); + return new (ResourceObj::C_HEAP, mtInternal) GrowableArray(initial_visit_stack_size, true); } // accessors diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp index 2a460edc1e0..ede639efe7e 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp @@ -41,7 +41,7 @@ class JvmtiTagHashmap; class JvmtiTagHashmapEntry; class JvmtiTagHashmapEntryClosure; -class JvmtiTagMap : public CHeapObj { +class JvmtiTagMap : public CHeapObj { private: enum{ diff --git a/hotspot/src/share/vm/prims/jvmtiThreadState.hpp b/hotspot/src/share/vm/prims/jvmtiThreadState.hpp index 87d2f0b03a4..6cc4e275d85 100644 --- a/hotspot/src/share/vm/prims/jvmtiThreadState.hpp +++ b/hotspot/src/share/vm/prims/jvmtiThreadState.hpp @@ -72,7 +72,7 @@ class JvmtiEnvThreadStateIterator : public StackObj { // // The Jvmti state for each thread (across all JvmtiEnv): // 1. Local table of enabled events. -class JvmtiThreadState : public CHeapObj { +class JvmtiThreadState : public CHeapObj { private: friend class JvmtiEnv; JavaThread *_thread; diff --git a/hotspot/src/share/vm/prims/jvmtiUtil.cpp b/hotspot/src/share/vm/prims/jvmtiUtil.cpp index 6671d48e995..425ca1d9803 100644 --- a/hotspot/src/share/vm/prims/jvmtiUtil.cpp +++ b/hotspot/src/share/vm/prims/jvmtiUtil.cpp @@ -40,7 +40,7 @@ ResourceArea* JvmtiUtil::single_threaded_resource_area() { if (_single_threaded_resource_area == NULL) { // lazily create the single threaded resource area // pick a size which is not a standard since the pools don't exist yet - _single_threaded_resource_area = new ResourceArea(Chunk::non_pool_size); + _single_threaded_resource_area = new (mtInternal) ResourceArea(Chunk::non_pool_size); } return _single_threaded_resource_area; } diff --git a/hotspot/src/share/vm/prims/unsafe.cpp b/hotspot/src/share/vm/prims/unsafe.cpp index 19f77a5f160..e3202eaaf39 100644 --- a/hotspot/src/share/vm/prims/unsafe.cpp +++ b/hotspot/src/share/vm/prims/unsafe.cpp @@ -596,7 +596,7 @@ UNSAFE_ENTRY(jlong, Unsafe_AllocateMemory(JNIEnv *env, jobject unsafe, jlong siz return 0; } sz = round_to(sz, HeapWordSize); - void* x = os::malloc(sz); + void* x = os::malloc(sz, mtInternal); if (x == NULL) { THROW_0(vmSymbols::java_lang_OutOfMemoryError()); } @@ -616,7 +616,7 @@ UNSAFE_ENTRY(jlong, Unsafe_ReallocateMemory(JNIEnv *env, jobject unsafe, jlong a return 0; } sz = round_to(sz, HeapWordSize); - void* x = (p == NULL) ? os::malloc(sz) : os::realloc(p, sz); + void* x = (p == NULL) ? os::malloc(sz, mtInternal) : os::realloc(p, sz, mtInternal); if (x == NULL) { THROW_0(vmSymbols::java_lang_OutOfMemoryError()); } @@ -877,7 +877,7 @@ static jclass Unsafe_DefineClass(JNIEnv *env, jstring name, jbyteArray data, int return 0; } - body = NEW_C_HEAP_ARRAY(jbyte, length); + body = NEW_C_HEAP_ARRAY(jbyte, length, mtInternal); if (body == 0) { throw_new(env, "OutOfMemoryError"); @@ -893,7 +893,7 @@ static jclass Unsafe_DefineClass(JNIEnv *env, jstring name, jbyteArray data, int uint len = env->GetStringUTFLength(name); int unicode_len = env->GetStringLength(name); if (len >= sizeof(buf)) { - utfName = NEW_C_HEAP_ARRAY(char, len + 1); + utfName = NEW_C_HEAP_ARRAY(char, len + 1, mtInternal); if (utfName == NULL) { throw_new(env, "OutOfMemoryError"); goto free_body; @@ -913,10 +913,10 @@ static jclass Unsafe_DefineClass(JNIEnv *env, jstring name, jbyteArray data, int result = JVM_DefineClass(env, utfName, loader, body, length, pd); if (utfName && utfName != buf) - FREE_C_HEAP_ARRAY(char, utfName); + FREE_C_HEAP_ARRAY(char, utfName, mtInternal); free_body: - FREE_C_HEAP_ARRAY(jbyte, body); + FREE_C_HEAP_ARRAY(jbyte, body, mtInternal); return result; } } @@ -1011,7 +1011,7 @@ Unsafe_DefineAnonymousClass_impl(JNIEnv *env, jint length = typeArrayOop(JNIHandles::resolve_non_null(data))->length(); jint word_length = (length + sizeof(HeapWord)-1) / sizeof(HeapWord); - HeapWord* body = NEW_C_HEAP_ARRAY(HeapWord, word_length); + HeapWord* body = NEW_C_HEAP_ARRAY(HeapWord, word_length, mtInternal); if (body == NULL) { THROW_0(vmSymbols::java_lang_OutOfMemoryError()); } @@ -1095,7 +1095,7 @@ UNSAFE_ENTRY(jclass, Unsafe_DefineAnonymousClass(JNIEnv *env, jobject unsafe, jc // try/finally clause: if (temp_alloc != NULL) { - FREE_C_HEAP_ARRAY(HeapWord, temp_alloc); + FREE_C_HEAP_ARRAY(HeapWord, temp_alloc, mtInternal); } return (jclass) res_jh; diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index d319fddfe51..b93ef053bed 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -35,6 +35,7 @@ #include "runtime/globals_extension.hpp" #include "runtime/java.hpp" #include "services/management.hpp" +#include "services/memTracker.hpp" #include "utilities/defaultStream.hpp" #include "utilities/taskqueue.hpp" #ifdef TARGET_OS_FAMILY_linux @@ -368,7 +369,7 @@ inline void SysClassPath::add_suffix(const char* suffix) { inline void SysClassPath::reset_item_at(int index) { assert(index < _scp_nitems && index != _scp_base, "just checking"); if (_items[index] != NULL) { - FREE_C_HEAP_ARRAY(char, _items[index]); + FREE_C_HEAP_ARRAY(char, _items[index], mtInternal); _items[index] = NULL; } } @@ -400,11 +401,11 @@ void SysClassPath::expand_endorsed() { expanded_path = add_jars_to_path(expanded_path, path); path = end; } else { - char* dirpath = NEW_C_HEAP_ARRAY(char, tmp_end - path + 1); + char* dirpath = NEW_C_HEAP_ARRAY(char, tmp_end - path + 1, mtInternal); memcpy(dirpath, path, tmp_end - path); dirpath[tmp_end - path] = '\0'; expanded_path = add_jars_to_path(expanded_path, dirpath); - FREE_C_HEAP_ARRAY(char, dirpath); + FREE_C_HEAP_ARRAY(char, dirpath, mtInternal); path = tmp_end + 1; } } @@ -435,7 +436,7 @@ char* SysClassPath::combined_path() { assert(total_len > 0, "empty sysclasspath not allowed"); // Copy the _items to a single string. - char* cp = NEW_C_HEAP_ARRAY(char, total_len); + char* cp = NEW_C_HEAP_ARRAY(char, total_len, mtInternal); char* cp_tmp = cp; for (i = 0; i < _scp_nitems; ++i) { if (_items[i] != NULL) { @@ -456,7 +457,7 @@ SysClassPath::add_to_path(const char* path, const char* str, bool prepend) { assert(str != NULL, "just checking"); if (path == NULL) { size_t len = strlen(str) + 1; - cp = NEW_C_HEAP_ARRAY(char, len); + cp = NEW_C_HEAP_ARRAY(char, len, mtInternal); memcpy(cp, str, len); // copy the trailing null } else { const char separator = *os::path_separator(); @@ -465,15 +466,15 @@ SysClassPath::add_to_path(const char* path, const char* str, bool prepend) { size_t len = old_len + str_len + 2; if (prepend) { - cp = NEW_C_HEAP_ARRAY(char, len); + cp = NEW_C_HEAP_ARRAY(char, len, mtInternal); char* cp_tmp = cp; memcpy(cp_tmp, str, str_len); cp_tmp += str_len; *cp_tmp = separator; memcpy(++cp_tmp, path, old_len + 1); // copy the trailing null - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } else { - cp = REALLOC_C_HEAP_ARRAY(char, path, len); + cp = REALLOC_C_HEAP_ARRAY(char, path, len, mtInternal); char* cp_tmp = cp + old_len; *cp_tmp = separator; memcpy(++cp_tmp, str, str_len + 1); // copy the trailing null @@ -495,7 +496,7 @@ char* SysClassPath::add_jars_to_path(char* path, const char* directory) { /* Scan the directory for jars/zips, appending them to path. */ struct dirent *entry; - char *dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(directory)); + char *dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(directory), mtInternal); while ((entry = os::readdir(dir, (dirent *) dbuf)) != NULL) { const char* name = entry->d_name; const char* ext = name + strlen(name) - 4; @@ -503,13 +504,13 @@ char* SysClassPath::add_jars_to_path(char* path, const char* directory) { (os::file_name_strcmp(ext, ".jar") == 0 || os::file_name_strcmp(ext, ".zip") == 0); if (isJarOrZip) { - char* jarpath = NEW_C_HEAP_ARRAY(char, directory_len + 2 + strlen(name)); + char* jarpath = NEW_C_HEAP_ARRAY(char, directory_len + 2 + strlen(name), mtInternal); sprintf(jarpath, "%s%s%s", directory, dir_sep, name); path = add_to_path(path, jarpath, false); - FREE_C_HEAP_ARRAY(char, jarpath); + FREE_C_HEAP_ARRAY(char, jarpath, mtInternal); } } - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); os::closedir(dir); return path; } @@ -631,7 +632,7 @@ static bool set_numeric_flag(char* name, char* value, FlagValueOrigin origin) { static bool set_string_flag(char* name, const char* value, FlagValueOrigin origin) { if (!CommandLineFlags::ccstrAtPut(name, &value, origin)) return false; // Contract: CommandLineFlags always returns a pointer that needs freeing. - FREE_C_HEAP_ARRAY(char, value); + FREE_C_HEAP_ARRAY(char, value, mtInternal); return true; } @@ -647,7 +648,7 @@ static bool append_to_string_flag(char* name, const char* new_value, FlagValueOr } else if (new_len == 0) { value = old_value; } else { - char* buf = NEW_C_HEAP_ARRAY(char, old_len + 1 + new_len + 1); + char* buf = NEW_C_HEAP_ARRAY(char, old_len + 1 + new_len + 1, mtInternal); // each new setting adds another LINE to the switch: sprintf(buf, "%s\n%s", old_value, new_value); value = buf; @@ -655,10 +656,10 @@ static bool append_to_string_flag(char* name, const char* new_value, FlagValueOr } (void) CommandLineFlags::ccstrAtPut(name, &value, origin); // CommandLineFlags always returns a pointer that needs freeing. - FREE_C_HEAP_ARRAY(char, value); + FREE_C_HEAP_ARRAY(char, value, mtInternal); if (free_this_too != NULL) { // CommandLineFlags made its own copy, so I must delete my own temp. buffer. - FREE_C_HEAP_ARRAY(char, free_this_too); + FREE_C_HEAP_ARRAY(char, free_this_too, mtInternal); } return true; } @@ -735,9 +736,9 @@ void Arguments::add_string(char*** bldarray, int* count, const char* arg) { // expand the array and add arg to the last element (*count)++; if (*bldarray == NULL) { - *bldarray = NEW_C_HEAP_ARRAY(char*, *count); + *bldarray = NEW_C_HEAP_ARRAY(char*, *count, mtInternal); } else { - *bldarray = REALLOC_C_HEAP_ARRAY(char*, *bldarray, *count); + *bldarray = REALLOC_C_HEAP_ARRAY(char*, *bldarray, *count, mtInternal); } (*bldarray)[index] = strdup(arg); } @@ -917,13 +918,13 @@ bool Arguments::add_property(const char* prop) { char* value = (char *)ns; size_t key_len = (eq == NULL) ? strlen(prop) : (eq - prop); - key = AllocateHeap(key_len + 1, "add_property"); + key = AllocateHeap(key_len + 1, mtInternal); strncpy(key, prop, key_len); key[key_len] = '\0'; if (eq != NULL) { size_t value_len = strlen(prop) - key_len - 1; - value = AllocateHeap(value_len + 1, "add_property"); + value = AllocateHeap(value_len + 1, mtInternal); strncpy(value, &prop[key_len + 1], value_len + 1); } @@ -2058,12 +2059,12 @@ jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) { const char* altclasses_jar = "alt-rt.jar"; size_t altclasses_path_len = strlen(get_meta_index_dir()) + 1 + strlen(altclasses_jar); - char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len); + char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len, mtInternal); strcpy(altclasses_path, get_meta_index_dir()); strcat(altclasses_path, altclasses_jar); scp.add_suffix_to_prefix(altclasses_path); scp_assembly_required = true; - FREE_C_HEAP_ARRAY(char, altclasses_path); + FREE_C_HEAP_ARRAY(char, altclasses_path, mtInternal); } if (WhiteBoxAPI) { @@ -2071,12 +2072,12 @@ jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) { const char* wb_jar = "wb.jar"; size_t wb_path_len = strlen(get_meta_index_dir()) + 1 + strlen(wb_jar); - char* wb_path = NEW_C_HEAP_ARRAY(char, wb_path_len); + char* wb_path = NEW_C_HEAP_ARRAY(char, wb_path_len, mtInternal); strcpy(wb_path, get_meta_index_dir()); strcat(wb_path, wb_jar); scp.add_suffix(wb_path); scp_assembly_required = true; - FREE_C_HEAP_ARRAY(char, wb_path); + FREE_C_HEAP_ARRAY(char, wb_path, mtInternal); } // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM) @@ -2161,13 +2162,13 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, if (tail != NULL) { const char* pos = strchr(tail, ':'); size_t len = (pos == NULL) ? strlen(tail) : pos - tail; - char* name = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len + 1), tail, len); + char* name = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len); name[len] = '\0'; char *options = NULL; if(pos != NULL) { size_t len2 = strlen(pos+1) + 1; // options start after ':'. Final zero must be copied. - options = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len2), pos+1, len2); + options = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len2, mtInternal), pos+1, len2); } #ifdef JVMTI_KERNEL if ((strcmp(name, "hprof") == 0) || (strcmp(name, "jdwp") == 0)) { @@ -2182,12 +2183,12 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, if(tail != NULL) { const char* pos = strchr(tail, '='); size_t len = (pos == NULL) ? strlen(tail) : pos - tail; - char* name = strncpy(NEW_C_HEAP_ARRAY(char, len + 1), tail, len); + char* name = strncpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len); name[len] = '\0'; char *options = NULL; if(pos != NULL) { - options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(pos + 1) + 1), pos + 1); + options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(pos + 1) + 1, mtInternal), pos + 1); } #ifdef JVMTI_KERNEL if ((strcmp(name, "hprof") == 0) || (strcmp(name, "jdwp") == 0)) { @@ -2200,7 +2201,7 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, // -javaagent } else if (match_option(option, "-javaagent:", &tail)) { if(tail != NULL) { - char *options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(tail) + 1), tail); + char *options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(tail) + 1, mtInternal), tail); add_init_agent("instrument", options, false); } // -Xnoclassgc @@ -2958,7 +2959,7 @@ jint Arguments::parse(const JavaVMInitArgs* args) { char *end = strrchr(jvm_path, *os::file_separator()); if (end != NULL) *end = '\0'; char *shared_archive_path = NEW_C_HEAP_ARRAY(char, strlen(jvm_path) + - strlen(os::file_separator()) + 20); + strlen(os::file_separator()) + 20, mtInternal); if (shared_archive_path == NULL) return JNI_ENOMEM; strcpy(shared_archive_path, jvm_path); strcat(shared_archive_path, os::file_separator()); @@ -2996,6 +2997,10 @@ jint Arguments::parse(const JavaVMInitArgs* args) { CommandLineFlags::printFlags(tty, false); vm_exit(0); } + if (match_option(option, "-XX:NativeMemoryTracking", &tail)) { + MemTracker::init_tracking_options(tail); + } + #ifndef PRODUCT if (match_option(option, "-XX:+PrintFlagsWithComments", &tail)) { @@ -3331,7 +3336,7 @@ char *Arguments::get_kernel_properties() { } } // Add one for null terminator. - char *props = AllocateHeap(length + 1, "get_kernel_properties"); + char *props = AllocateHeap(length + 1, mtInternal); if (length != 0) { int pos = 0; for (prop = _system_properties; prop != NULL; prop = prop->next()) { diff --git a/hotspot/src/share/vm/runtime/arguments.hpp b/hotspot/src/share/vm/runtime/arguments.hpp index 076b4861db1..e78e45c912c 100644 --- a/hotspot/src/share/vm/runtime/arguments.hpp +++ b/hotspot/src/share/vm/runtime/arguments.hpp @@ -44,7 +44,7 @@ class SysClassPath; // Element describing System and User (-Dkey=value flags) defined property. -class SystemProperty: public CHeapObj { +class SystemProperty: public CHeapObj { private: char* _key; char* _value; @@ -63,7 +63,7 @@ class SystemProperty: public CHeapObj { if (_value != NULL) { FreeHeap(_value); } - _value = AllocateHeap(strlen(value)+1); + _value = AllocateHeap(strlen(value)+1, mtInternal); if (_value != NULL) { strcpy(_value, value); } @@ -80,7 +80,7 @@ class SystemProperty: public CHeapObj { if (_value != NULL) { len += strlen(_value); } - sp = AllocateHeap(len+2); + sp = AllocateHeap(len+2, mtInternal); if (sp != NULL) { if (_value != NULL) { strcpy(sp, _value); @@ -100,13 +100,13 @@ class SystemProperty: public CHeapObj { if (key == NULL) { _key = NULL; } else { - _key = AllocateHeap(strlen(key)+1); + _key = AllocateHeap(strlen(key)+1, mtInternal); strcpy(_key, key); } if (value == NULL) { _value = NULL; } else { - _value = AllocateHeap(strlen(value)+1); + _value = AllocateHeap(strlen(value)+1, mtInternal); strcpy(_value, value); } _next = NULL; @@ -116,7 +116,7 @@ class SystemProperty: public CHeapObj { // For use by -agentlib, -agentpath and -Xrun -class AgentLibrary : public CHeapObj { +class AgentLibrary : public CHeapObj { friend class AgentLibraryList; private: char* _name; @@ -136,12 +136,12 @@ class AgentLibrary : public CHeapObj { // Constructor AgentLibrary(const char* name, const char* options, bool is_absolute_path, void* os_lib) { - _name = AllocateHeap(strlen(name)+1); + _name = AllocateHeap(strlen(name)+1, mtInternal); strcpy(_name, name); if (options == NULL) { _options = NULL; } else { - _options = AllocateHeap(strlen(options)+1); + _options = AllocateHeap(strlen(options)+1, mtInternal); strcpy(_options, options); } _is_absolute_path = is_absolute_path; diff --git a/hotspot/src/share/vm/runtime/biasedLocking.cpp b/hotspot/src/share/vm/runtime/biasedLocking.cpp index ba49d80de08..de739ecafb1 100644 --- a/hotspot/src/share/vm/runtime/biasedLocking.cpp +++ b/hotspot/src/share/vm/runtime/biasedLocking.cpp @@ -687,8 +687,8 @@ void BiasedLocking::preserve_marks() { // monitors in a prepass and, if they are biased, preserve their // mark words here. This should be a relatively small set of objects // especially compared to the number of objects in the heap. - _preserved_mark_stack = new (ResourceObj::C_HEAP) GrowableArray(10, true); - _preserved_oop_stack = new (ResourceObj::C_HEAP) GrowableArray(10, true); + _preserved_mark_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(10, true); + _preserved_oop_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(10, true); ResourceMark rm; Thread* cur = Thread::current(); diff --git a/hotspot/src/share/vm/runtime/compilationPolicy.hpp b/hotspot/src/share/vm/runtime/compilationPolicy.hpp index 1d8427cf2fd..a0912beaf5a 100644 --- a/hotspot/src/share/vm/runtime/compilationPolicy.hpp +++ b/hotspot/src/share/vm/runtime/compilationPolicy.hpp @@ -37,7 +37,7 @@ class CompileTask; class CompileQueue; -class CompilationPolicy : public CHeapObj { +class CompilationPolicy : public CHeapObj { static CompilationPolicy* _policy; // Accumulated time static elapsedTimer _accumulated_time; diff --git a/hotspot/src/share/vm/runtime/deoptimization.cpp b/hotspot/src/share/vm/runtime/deoptimization.cpp index 0e2a9839bc5..bbb5bc3cc81 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.cpp +++ b/hotspot/src/share/vm/runtime/deoptimization.cpp @@ -101,7 +101,7 @@ Deoptimization::UnrollBlock::UnrollBlock(int size_of_deoptimized_frame, _number_of_frames = number_of_frames; _frame_sizes = frame_sizes; _frame_pcs = frame_pcs; - _register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2); + _register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2, mtCompiler); _return_type = return_type; _initial_info = 0; // PD (x86 only) @@ -114,9 +114,9 @@ Deoptimization::UnrollBlock::UnrollBlock(int size_of_deoptimized_frame, Deoptimization::UnrollBlock::~UnrollBlock() { - FREE_C_HEAP_ARRAY(intptr_t, _frame_sizes); - FREE_C_HEAP_ARRAY(intptr_t, _frame_pcs); - FREE_C_HEAP_ARRAY(intptr_t, _register_block); + FREE_C_HEAP_ARRAY(intptr_t, _frame_sizes, mtCompiler); + FREE_C_HEAP_ARRAY(intptr_t, _frame_pcs, mtCompiler); + FREE_C_HEAP_ARRAY(intptr_t, _register_block, mtCompiler); } @@ -358,9 +358,9 @@ Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread // Compute the vframes' sizes. Note that frame_sizes[] entries are ordered from outermost to innermost // virtual activation, which is the reverse of the elements in the vframes array. - intptr_t* frame_sizes = NEW_C_HEAP_ARRAY(intptr_t, number_of_frames); + intptr_t* frame_sizes = NEW_C_HEAP_ARRAY(intptr_t, number_of_frames, mtCompiler); // +1 because we always have an interpreter return address for the final slot. - address* frame_pcs = NEW_C_HEAP_ARRAY(address, number_of_frames + 1); + address* frame_pcs = NEW_C_HEAP_ARRAY(address, number_of_frames + 1, mtCompiler); int popframe_extra_args = 0; // Create an interpreter return address for the stub to use as its return // address so the skeletal frames are perfectly walkable diff --git a/hotspot/src/share/vm/runtime/deoptimization.hpp b/hotspot/src/share/vm/runtime/deoptimization.hpp index 18225467921..23870b4e8a6 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.hpp +++ b/hotspot/src/share/vm/runtime/deoptimization.hpp @@ -129,7 +129,7 @@ class Deoptimization : AllStatic { // UnrollBlock is returned by fetch_unroll_info() to the deoptimization handler (blob). // This is only a CheapObj to ease debugging after a deopt failure - class UnrollBlock : public CHeapObj { + class UnrollBlock : public CHeapObj { private: int _size_of_deoptimized_frame; // Size, in bytes, of current deoptimized frame int _caller_adjustment; // Adjustment, in bytes, to caller's SP by initial interpreted frame diff --git a/hotspot/src/share/vm/runtime/dtraceJSDT.hpp b/hotspot/src/share/vm/runtime/dtraceJSDT.hpp index bff43108439..670eabfef44 100644 --- a/hotspot/src/share/vm/runtime/dtraceJSDT.hpp +++ b/hotspot/src/share/vm/runtime/dtraceJSDT.hpp @@ -63,7 +63,7 @@ class DTraceJSDT : AllStatic { static jboolean is_supported(); }; -class RegisteredProbes : public CHeapObj { +class RegisteredProbes : public CHeapObj { private: nmethod** _nmethods; // all the probe methods size_t _count; // number of probe methods @@ -72,7 +72,7 @@ class RegisteredProbes : public CHeapObj { public: RegisteredProbes(size_t count) { _count = count; - _nmethods = NEW_C_HEAP_ARRAY(nmethod*, count); + _nmethods = NEW_C_HEAP_ARRAY(nmethod*, count, mtInternal); } ~RegisteredProbes() { @@ -81,7 +81,7 @@ class RegisteredProbes : public CHeapObj { _nmethods[i]->make_not_entrant(); _nmethods[i]->method()->clear_code(); } - FREE_C_HEAP_ARRAY(nmethod*, _nmethods); + FREE_C_HEAP_ARRAY(nmethod*, _nmethods, mtInternal); _nmethods = NULL; _count = 0; } diff --git a/hotspot/src/share/vm/runtime/fprofiler.cpp b/hotspot/src/share/vm/runtime/fprofiler.cpp index 3c100aa4c98..9901fb9fa80 100644 --- a/hotspot/src/share/vm/runtime/fprofiler.cpp +++ b/hotspot/src/share/vm/runtime/fprofiler.cpp @@ -70,12 +70,12 @@ IntervalData* FlatProfiler::interval_data = NULL; ThreadProfiler::ThreadProfiler() { // Space for the ProfilerNodes const int area_size = 1 * ProfilerNodeSize * 1024; - area_bottom = AllocateHeap(area_size, "fprofiler"); + area_bottom = AllocateHeap(area_size, mtInternal); area_top = area_bottom; area_limit = area_bottom + area_size; // ProfilerNode pointer table - table = NEW_C_HEAP_ARRAY(ProfilerNode*, table_size); + table = NEW_C_HEAP_ARRAY(ProfilerNode*, table_size, mtInternal); initialize(); engaged = false; } @@ -157,7 +157,7 @@ address PCRecorder::base = NULL; void PCRecorder::init() { MutexLockerEx lm(CodeCache_lock, Mutex::_no_safepoint_check_flag); int s = size(); - counters = NEW_C_HEAP_ARRAY(int, s); + counters = NEW_C_HEAP_ARRAY(int, s, mtInternal); for (int index = 0; index < s; index++) { counters[index] = 0; } @@ -850,7 +850,7 @@ void FlatProfiler::record_thread_ticks() { if (Threads_lock->try_lock()) { { // Threads_lock scope maxthreads = Threads::number_of_threads(); - threadsList = NEW_C_HEAP_ARRAY(JavaThread *, maxthreads); + threadsList = NEW_C_HEAP_ARRAY(JavaThread *, maxthreads, mtInternal); suspendedthreadcount = 0; for (JavaThread* tp = Threads::first(); tp != NULL; tp = tp->next()) { if (tp->is_Compiler_thread()) { @@ -1195,8 +1195,8 @@ void ThreadProfiler::reset() { void FlatProfiler::allocate_table() { { // Bytecode table - bytecode_ticks = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes); - bytecode_ticks_stub = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes); + bytecode_ticks = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes, mtInternal); + bytecode_ticks_stub = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes, mtInternal); for(int index = 0; index < Bytecodes::number_of_codes; index++) { bytecode_ticks[index] = 0; bytecode_ticks_stub[index] = 0; @@ -1205,7 +1205,7 @@ void FlatProfiler::allocate_table() { if (ProfilerRecordPC) PCRecorder::init(); - interval_data = NEW_C_HEAP_ARRAY(IntervalData, interval_print_size); + interval_data = NEW_C_HEAP_ARRAY(IntervalData, interval_print_size, mtInternal); FlatProfiler::interval_reset(); } diff --git a/hotspot/src/share/vm/runtime/fprofiler.hpp b/hotspot/src/share/vm/runtime/fprofiler.hpp index 2f8d6158c29..25c2f2a10dc 100644 --- a/hotspot/src/share/vm/runtime/fprofiler.hpp +++ b/hotspot/src/share/vm/runtime/fprofiler.hpp @@ -121,7 +121,7 @@ public: }; #endif // FPROF_KERNEL -class ThreadProfiler: public CHeapObj { +class ThreadProfiler: public CHeapObj { public: ThreadProfiler() KERNEL_RETURN; ~ThreadProfiler() KERNEL_RETURN; diff --git a/hotspot/src/share/vm/runtime/globals.cpp b/hotspot/src/share/vm/runtime/globals.cpp index 474090a2a4b..3dad7a0f05d 100644 --- a/hotspot/src/share/vm/runtime/globals.cpp +++ b/hotspot/src/share/vm/runtime/globals.cpp @@ -465,13 +465,13 @@ bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, FlagValu ccstr old_value = result->get_ccstr(); char* new_value = NULL; if (*value != NULL) { - new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1); + new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1, mtInternal); strcpy(new_value, *value); } result->set_ccstr(new_value); if (result->origin == DEFAULT && old_value != NULL) { // Prior value is NOT heap allocated, but was a literal constant. - char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1); + char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1, mtInternal); strcpy(old_value_to_free, old_value); old_value = old_value_to_free; } @@ -485,12 +485,12 @@ void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, F Flag* faddr = address_of_flag(flag); guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type"); ccstr old_value = faddr->get_ccstr(); - char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1); + char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal); strcpy(new_value, value); faddr->set_ccstr(new_value); if (faddr->origin != DEFAULT && old_value != NULL) { // Prior value is heap allocated so free it. - FREE_C_HEAP_ARRAY(char, old_value); + FREE_C_HEAP_ARRAY(char, old_value, mtInternal); } faddr->origin = origin; } @@ -511,7 +511,7 @@ void CommandLineFlags::printSetFlags(outputStream* out) { while (flagTable[length].name != NULL) length++; // Sort - Flag** array = NEW_C_HEAP_ARRAY(Flag*, length); + Flag** array = NEW_C_HEAP_ARRAY(Flag*, length, mtInternal); for (int index = 0; index < length; index++) { array[index] = &flagTable[index]; } @@ -525,7 +525,7 @@ void CommandLineFlags::printSetFlags(outputStream* out) { } } out->cr(); - FREE_C_HEAP_ARRAY(Flag*, array); + FREE_C_HEAP_ARRAY(Flag*, array, mtInternal); } #ifndef PRODUCT @@ -547,7 +547,7 @@ void CommandLineFlags::printFlags(outputStream* out, bool withComments) { while (flagTable[length].name != NULL) length++; // Sort - Flag** array = NEW_C_HEAP_ARRAY(Flag*, length); + Flag** array = NEW_C_HEAP_ARRAY(Flag*, length, mtInternal); for (int index = 0; index < length; index++) { array[index] = &flagTable[index]; } @@ -560,5 +560,5 @@ void CommandLineFlags::printFlags(outputStream* out, bool withComments) { array[i]->print_on(out, withComments); } } - FREE_C_HEAP_ARRAY(Flag*, array); + FREE_C_HEAP_ARRAY(Flag*, array, mtInternal); } diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index a961a151c35..504c4061cc5 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -190,7 +190,6 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G); #endif // no compilers - // string type aliases used only in this file typedef const char* ccstr; typedef const char* ccstrlist; // represents string arguments which accumulate @@ -896,6 +895,9 @@ class CommandLineFlags { develop(bool, UseFakeTimers, false, \ "Tells whether the VM should use system time or a fake timer") \ \ + product(ccstr, NativeMemoryTracking, "off", \ + "Native memory tracking options") \ + \ diagnostic(bool, LogCompilation, false, \ "Log compilation activity in detail to hotspot.log or LogFile") \ \ diff --git a/hotspot/src/share/vm/runtime/handles.cpp b/hotspot/src/share/vm/runtime/handles.cpp index 3c24f81ce0d..1ddbacc444b 100644 --- a/hotspot/src/share/vm/runtime/handles.cpp +++ b/hotspot/src/share/vm/runtime/handles.cpp @@ -111,7 +111,7 @@ void HandleMark::initialize(Thread* thread) { _chunk = _area->_chunk; _hwm = _area->_hwm; _max = _area->_max; - NOT_PRODUCT(_size_in_bytes = _area->_size_in_bytes;) + _size_in_bytes = _area->_size_in_bytes; debug_only(_area->_handle_mark_nesting++); assert(_area->_handle_mark_nesting > 0, "must stack allocate HandleMarks"); debug_only(Atomic::inc(&_nof_handlemarks);) @@ -159,7 +159,7 @@ HandleMark::~HandleMark() { area->_chunk = _chunk; area->_hwm = _hwm; area->_max = _max; - NOT_PRODUCT(area->set_size_in_bytes(_size_in_bytes);) + area->set_size_in_bytes(_size_in_bytes); #ifdef ASSERT // clear out first chunk (to detect allocation bugs) if (ZapVMHandleArea) { diff --git a/hotspot/src/share/vm/runtime/handles.hpp b/hotspot/src/share/vm/runtime/handles.hpp index d9d71e67010..e2b2d49713e 100644 --- a/hotspot/src/share/vm/runtime/handles.hpp +++ b/hotspot/src/share/vm/runtime/handles.hpp @@ -238,7 +238,6 @@ DEF_KLASS_HANDLE(constantPoolCacheKlass, oop_is_constantPool ) //------------------------------------------------------------------------------------------------------------------------ // Thread local handle area - class HandleArea: public Arena { friend class HandleMark; friend class NoHandleMark; @@ -312,7 +311,7 @@ class HandleMark { HandleArea *_area; // saved handle area Chunk *_chunk; // saved arena chunk char *_hwm, *_max; // saved arena info - NOT_PRODUCT(size_t _size_in_bytes;) // size of handle area + size_t _size_in_bytes; // size of handle area // Link to previous active HandleMark in thread HandleMark* _previous_handle_mark; diff --git a/hotspot/src/share/vm/runtime/handles.inline.hpp b/hotspot/src/share/vm/runtime/handles.inline.hpp index 3bd42fb2e17..806d66fca9b 100644 --- a/hotspot/src/share/vm/runtime/handles.inline.hpp +++ b/hotspot/src/share/vm/runtime/handles.inline.hpp @@ -85,7 +85,7 @@ inline void HandleMark::pop_and_restore() { area->_chunk = _chunk; area->_hwm = _hwm; area->_max = _max; - NOT_PRODUCT(area->set_size_in_bytes(_size_in_bytes);) + area->set_size_in_bytes(_size_in_bytes); debug_only(area->_handle_mark_nesting--); } diff --git a/hotspot/src/share/vm/runtime/java.cpp b/hotspot/src/share/vm/runtime/java.cpp index f256e515e9c..70c9e2895bc 100644 --- a/hotspot/src/share/vm/runtime/java.cpp +++ b/hotspot/src/share/vm/runtime/java.cpp @@ -384,7 +384,7 @@ extern "C" { typedef void (*__exit_proc)(void); } -class ExitProc : public CHeapObj { +class ExitProc : public CHeapObj { private: __exit_proc _proc; // void (*_proc)(void); diff --git a/hotspot/src/share/vm/runtime/jniHandles.hpp b/hotspot/src/share/vm/runtime/jniHandles.hpp index a3b2f9c4c29..71bb1dd8949 100644 --- a/hotspot/src/share/vm/runtime/jniHandles.hpp +++ b/hotspot/src/share/vm/runtime/jniHandles.hpp @@ -109,7 +109,7 @@ class JNIHandles : AllStatic { // JNI handle blocks holding local/global JNI handles -class JNIHandleBlock : public CHeapObj { +class JNIHandleBlock : public CHeapObj { friend class VMStructs; friend class CppInterpreter; diff --git a/hotspot/src/share/vm/runtime/monitorChunk.cpp b/hotspot/src/share/vm/runtime/monitorChunk.cpp index 1a4be7920e8..f8793fdeaee 100644 --- a/hotspot/src/share/vm/runtime/monitorChunk.cpp +++ b/hotspot/src/share/vm/runtime/monitorChunk.cpp @@ -29,7 +29,7 @@ MonitorChunk::MonitorChunk(int number_on_monitors) { _number_of_monitors = number_on_monitors; - _monitors = NEW_C_HEAP_ARRAY(BasicObjectLock, number_on_monitors); + _monitors = NEW_C_HEAP_ARRAY(BasicObjectLock, number_on_monitors, mtInternal); _next = NULL; } diff --git a/hotspot/src/share/vm/runtime/monitorChunk.hpp b/hotspot/src/share/vm/runtime/monitorChunk.hpp index 66d62438c57..eca92a6b4a7 100644 --- a/hotspot/src/share/vm/runtime/monitorChunk.hpp +++ b/hotspot/src/share/vm/runtime/monitorChunk.hpp @@ -30,7 +30,7 @@ // Data structure for holding monitors for one activation during // deoptimization. -class MonitorChunk: public CHeapObj { +class MonitorChunk: public CHeapObj { private: int _number_of_monitors; BasicObjectLock* _monitors; diff --git a/hotspot/src/share/vm/runtime/mutex.hpp b/hotspot/src/share/vm/runtime/mutex.hpp index 66a3295c857..7d2cd82724f 100644 --- a/hotspot/src/share/vm/runtime/mutex.hpp +++ b/hotspot/src/share/vm/runtime/mutex.hpp @@ -84,7 +84,7 @@ class ParkEvent ; // The default length of monitor name is chosen to be 64 to avoid false sharing. static const int MONITOR_NAME_LEN = 64; -class Monitor : public CHeapObj { +class Monitor : public CHeapObj { public: // A special lock: Is a lock where you are guaranteed not to block while you are diff --git a/hotspot/src/share/vm/runtime/os.cpp b/hotspot/src/share/vm/runtime/os.cpp index 33495d66d43..d9395b3ad0c 100644 --- a/hotspot/src/share/vm/runtime/os.cpp +++ b/hotspot/src/share/vm/runtime/os.cpp @@ -45,6 +45,7 @@ #include "runtime/os.hpp" #include "runtime/stubRoutines.hpp" #include "services/attachListener.hpp" +#include "services/memTracker.hpp" #include "services/threadService.hpp" #include "utilities/defaultStream.hpp" #include "utilities/events.hpp" @@ -433,9 +434,9 @@ void* os::native_java_library() { // --------------------- heap allocation utilities --------------------- -char *os::strdup(const char *str) { +char *os::strdup(const char *str, MEMFLAGS flags) { size_t size = strlen(str); - char *dup_str = (char *)malloc(size + 1); + char *dup_str = (char *)malloc(size + 1, flags); if (dup_str == NULL) return NULL; strcpy(dup_str, str); return dup_str; @@ -559,7 +560,7 @@ void verify_block(void* memblock) { } #endif -void* os::malloc(size_t size) { +void* os::malloc(size_t size, MEMFLAGS memflags, address caller) { NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); @@ -571,6 +572,7 @@ void* os::malloc(size_t size) { NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap()); u_char* ptr = (u_char*)::malloc(size + space_before + space_after); + #ifdef ASSERT if (ptr == NULL) return NULL; if (MallocCushion) { @@ -589,18 +591,29 @@ void* os::malloc(size_t size) { } debug_only(if (paranoid) verify_block(memblock)); if (PrintMalloc && tty != NULL) tty->print_cr("os::malloc " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, memblock); + + // we do not track MallocCushion memory + if (MemTracker::is_on()) { + MemTracker::record_malloc((address)memblock, size, memflags, caller == 0 ? CALLER_PC : caller); + } + return memblock; } -void* os::realloc(void *memblock, size_t size) { +void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, address caller) { #ifndef ASSERT NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); - return ::realloc(memblock, size); + void* ptr = ::realloc(memblock, size); + if (ptr != NULL && MemTracker::is_on()) { + MemTracker::record_realloc((address)memblock, (address)ptr, size, memflags, + caller == 0 ? CALLER_PC : caller); + } + return ptr; #else if (memblock == NULL) { - return malloc(size); + return malloc(size, memflags, (caller == 0 ? CALLER_PC : caller)); } if ((intptr_t)memblock == (intptr_t)MallocCatchPtr) { tty->print_cr("os::realloc caught " PTR_FORMAT, memblock); @@ -610,7 +623,7 @@ void* os::realloc(void *memblock, size_t size) { NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap()); if (size == 0) return NULL; // always move the block - void* ptr = malloc(size); + void* ptr = malloc(size, memflags, caller == 0 ? CALLER_PC : caller); if (PrintMalloc) tty->print_cr("os::remalloc " SIZE_FORMAT " bytes, " PTR_FORMAT " --> " PTR_FORMAT, size, memblock, ptr); // Copy to new memory if malloc didn't fail if ( ptr != NULL ) { @@ -627,7 +640,7 @@ void* os::realloc(void *memblock, size_t size) { } -void os::free(void *memblock) { +void os::free(void *memblock, MEMFLAGS memflags) { NOT_PRODUCT(inc_stat_counter(&num_frees, 1)); #ifdef ASSERT if (memblock == NULL) return; @@ -660,6 +673,8 @@ void os::free(void *memblock) { fprintf(stderr, "os::free " PTR_FORMAT "\n", (uintptr_t)memblock); } #endif + MemTracker::record_free((address)memblock, memflags); + ::free((char*)memblock - space_before); } @@ -1048,7 +1063,7 @@ char* os::format_boot_path(const char* format_string, ++formatted_path_len; } - char* formatted_path = NEW_C_HEAP_ARRAY(char, formatted_path_len + 1); + char* formatted_path = NEW_C_HEAP_ARRAY(char, formatted_path_len + 1, mtInternal); if (formatted_path == NULL) { return NULL; } @@ -1127,7 +1142,7 @@ char** os::split_path(const char* path, int* n) { return NULL; } const char psepchar = *os::path_separator(); - char* inpath = (char*)NEW_C_HEAP_ARRAY(char, strlen(path) + 1); + char* inpath = (char*)NEW_C_HEAP_ARRAY(char, strlen(path) + 1, mtInternal); if (inpath == NULL) { return NULL; } @@ -1140,7 +1155,7 @@ char** os::split_path(const char* path, int* n) { p++; p = strchr(p, psepchar); } - char** opath = (char**) NEW_C_HEAP_ARRAY(char*, count); + char** opath = (char**) NEW_C_HEAP_ARRAY(char*, count, mtInternal); if (opath == NULL) { return NULL; } @@ -1153,7 +1168,7 @@ char** os::split_path(const char* path, int* n) { return NULL; } // allocate the string and add terminator storage - char* s = (char*)NEW_C_HEAP_ARRAY(char, len + 1); + char* s = (char*)NEW_C_HEAP_ARRAY(char, len + 1, mtInternal); if (s == NULL) { return NULL; } @@ -1162,7 +1177,7 @@ char** os::split_path(const char* path, int* n) { opath[i] = s; p += len + 1; } - FREE_C_HEAP_ARRAY(char, inpath); + FREE_C_HEAP_ARRAY(char, inpath, mtInternal); *n = count; return opath; } @@ -1366,3 +1381,97 @@ int os::get_line_chars(int fd, char* buf, const size_t bsize){ return (int) i; } + +bool os::create_stack_guard_pages(char* addr, size_t bytes) { + return os::pd_create_stack_guard_pages(addr, bytes); +} + + +char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { + char* result = pd_reserve_memory(bytes, addr, alignment_hint); + if (result != NULL && MemTracker::is_on()) { + MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } + + return result; +} +char* os::attempt_reserve_memory_at(size_t bytes, char* addr) { + char* result = pd_attempt_reserve_memory_at(bytes, addr); + if (result != NULL && MemTracker::is_on()) { + MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } + return result; +} + +void os::split_reserved_memory(char *base, size_t size, + size_t split, bool realloc) { + pd_split_reserved_memory(base, size, split, realloc); +} + +bool os::commit_memory(char* addr, size_t bytes, bool executable) { + bool res = pd_commit_memory(addr, bytes, executable); + if (res && MemTracker::is_on()) { + MemTracker::record_virtual_memory_commit((address)addr, bytes, CALLER_PC); + } + return res; +} + +bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, + bool executable) { + bool res = os::pd_commit_memory(addr, size, alignment_hint, executable); + if (res && MemTracker::is_on()) { + MemTracker::record_virtual_memory_commit((address)addr, size, CALLER_PC); + } + return res; +} + +bool os::uncommit_memory(char* addr, size_t bytes) { + bool res = pd_uncommit_memory(addr, bytes); + if (res) { + MemTracker::record_virtual_memory_uncommit((address)addr, bytes); + } + return res; +} + +bool os::release_memory(char* addr, size_t bytes) { + bool res = pd_release_memory(addr, bytes); + if (res) { + MemTracker::record_virtual_memory_release((address)addr, bytes); + } + return res; +} + + +char* os::map_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec) { + char* result = pd_map_memory(fd, file_name, file_offset, addr, bytes, read_only, allow_exec); + if (result != NULL && MemTracker::is_on()) { + MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } + return result; +} + +char* os::remap_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec) { + return pd_remap_memory(fd, file_name, file_offset, addr, bytes, + read_only, allow_exec); +} + +bool os::unmap_memory(char *addr, size_t bytes) { + bool result = pd_unmap_memory(addr, bytes); + if (result) { + MemTracker::record_virtual_memory_release((address)addr, bytes); + } + return result; +} + +void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { + pd_free_memory(addr, bytes, alignment_hint); +} + +void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { + pd_realign_memory(addr, bytes, alignment_hint); +} + diff --git a/hotspot/src/share/vm/runtime/os.hpp b/hotspot/src/share/vm/runtime/os.hpp index 68f8a3ab62a..3be7248a911 100644 --- a/hotspot/src/share/vm/runtime/os.hpp +++ b/hotspot/src/share/vm/runtime/os.hpp @@ -99,6 +99,28 @@ class os: AllStatic { _page_sizes[1] = 0; // sentinel } + static char* pd_reserve_memory(size_t bytes, char* addr = 0, + size_t alignment_hint = 0); + static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr); + static void pd_split_reserved_memory(char *base, size_t size, + size_t split, bool realloc); + static bool pd_commit_memory(char* addr, size_t bytes, bool executable = false); + static bool pd_commit_memory(char* addr, size_t size, size_t alignment_hint, + bool executable = false); + static bool pd_uncommit_memory(char* addr, size_t bytes); + static bool pd_release_memory(char* addr, size_t bytes); + + static char* pd_map_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only = false, + bool allow_exec = false); + static char* pd_remap_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec); + static bool pd_unmap_memory(char *addr, size_t bytes); + static void pd_free_memory(char *addr, size_t bytes, size_t alignment_hint); + static void pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint); + + public: static void init(void); // Called before command line parsing static jint init_2(void); // Called after command line parsing @@ -236,8 +258,7 @@ class os: AllStatic { static char* attempt_reserve_memory_at(size_t bytes, char* addr); static void split_reserved_memory(char *base, size_t size, size_t split, bool realloc); - static bool commit_memory(char* addr, size_t bytes, - bool executable = false); + static bool commit_memory(char* addr, size_t bytes, bool executable = false); static bool commit_memory(char* addr, size_t size, size_t alignment_hint, bool executable = false); static bool uncommit_memory(char* addr, size_t bytes); @@ -250,6 +271,7 @@ class os: AllStatic { static bool guard_memory(char* addr, size_t bytes); static bool unguard_memory(char* addr, size_t bytes); static bool create_stack_guard_pages(char* addr, size_t bytes); + static bool pd_create_stack_guard_pages(char* addr, size_t bytes); static bool remove_stack_guard_pages(char* addr, size_t bytes); static char* map_memory(int fd, const char* file_name, size_t file_offset, @@ -573,12 +595,15 @@ class os: AllStatic { static void* thread_local_storage_at(int index); static void free_thread_local_storage(int index); + // Stack walk + static address get_caller_pc(int n = 0); + // General allocation (must be MT-safe) - static void* malloc (size_t size); - static void* realloc (void *memblock, size_t size); - static void free (void *memblock); + static void* malloc (size_t size, MEMFLAGS flags, address caller_pc = 0); + static void* realloc (void *memblock, size_t size, MEMFLAGS flags, address caller_pc = 0); + static void free (void *memblock, MEMFLAGS flags = mtNone); static bool check_heap(bool force = false); // verify C heap integrity - static char* strdup(const char *); // Like strdup + static char* strdup(const char *, MEMFLAGS flags = mtInternal); // Like strdup #ifndef PRODUCT static julong num_mallocs; // # of calls to malloc/realloc diff --git a/hotspot/src/share/vm/runtime/osThread.hpp b/hotspot/src/share/vm/runtime/osThread.hpp index c0f2b1932c9..1dfcb376163 100644 --- a/hotspot/src/share/vm/runtime/osThread.hpp +++ b/hotspot/src/share/vm/runtime/osThread.hpp @@ -58,7 +58,7 @@ enum ThreadState { // the main thread into its own Thread at will. -class OSThread: public CHeapObj { +class OSThread: public CHeapObj { friend class VMStructs; private: OSThreadStartFunc _start_proc; // Thread start routine diff --git a/hotspot/src/share/vm/runtime/park.cpp b/hotspot/src/share/vm/runtime/park.cpp index 1be5733321a..8d91d0b6887 100644 --- a/hotspot/src/share/vm/runtime/park.cpp +++ b/hotspot/src/share/vm/runtime/park.cpp @@ -141,7 +141,7 @@ void ParkEvent::Release (ParkEvent * ev) { // although Niagara's hash function should help. void * ParkEvent::operator new (size_t sz) { - return (void *) ((intptr_t (CHeapObj::operator new (sz + 256)) + 256) & -256) ; + return (void *) ((intptr_t (AllocateHeap(sz + 256, mtInternal, CALLER_PC)) + 256) & -256) ; } void ParkEvent::operator delete (void * a) { diff --git a/hotspot/src/share/vm/runtime/perfData.cpp b/hotspot/src/share/vm/runtime/perfData.cpp index 04631ec260b..3d4bf2da8a4 100644 --- a/hotspot/src/share/vm/runtime/perfData.cpp +++ b/hotspot/src/share/vm/runtime/perfData.cpp @@ -81,7 +81,7 @@ PerfData::PerfData(CounterNS ns, const char* name, Units u, Variability v) const char* prefix = PerfDataManager::ns_to_string(ns); - _name = NEW_C_HEAP_ARRAY(char, strlen(name) + strlen(prefix) + 2); + _name = NEW_C_HEAP_ARRAY(char, strlen(name) + strlen(prefix) + 2, mtInternal); assert(_name != NULL && strlen(name) != 0, "invalid name"); if (ns == NULL_NS) { @@ -111,10 +111,10 @@ PerfData::PerfData(CounterNS ns, const char* name, Units u, Variability v) PerfData::~PerfData() { if (_name != NULL) { - FREE_C_HEAP_ARRAY(char, _name); + FREE_C_HEAP_ARRAY(char, _name, mtInternal); } if (is_on_c_heap()) { - FREE_C_HEAP_ARRAY(PerfDataEntry, _pdep); + FREE_C_HEAP_ARRAY(PerfDataEntry, _pdep, mtInternal); } } @@ -137,7 +137,7 @@ void PerfData::create_entry(BasicType dtype, size_t dsize, size_t vlen) { if (psmp == NULL) { // out of PerfMemory memory resources. allocate on the C heap // to avoid vm termination. - psmp = NEW_C_HEAP_ARRAY(char, size); + psmp = NEW_C_HEAP_ARRAY(char, size, mtInternal); _on_c_heap = true; } @@ -559,12 +559,12 @@ PerfLongCounter* PerfDataManager::create_long_counter(CounterNS ns, PerfDataList::PerfDataList(int length) { - _set = new(ResourceObj::C_HEAP) PerfDataArray(length, true); + _set = new(ResourceObj::C_HEAP, mtInternal) PerfDataArray(length, true); } PerfDataList::PerfDataList(PerfDataList* p) { - _set = new(ResourceObj::C_HEAP) PerfDataArray(p->length(), true); + _set = new(ResourceObj::C_HEAP, mtInternal) PerfDataArray(p->length(), true); _set->appendAll(p->get_impl()); } diff --git a/hotspot/src/share/vm/runtime/perfData.hpp b/hotspot/src/share/vm/runtime/perfData.hpp index 2f84ee62008..2552fe8badb 100644 --- a/hotspot/src/share/vm/runtime/perfData.hpp +++ b/hotspot/src/share/vm/runtime/perfData.hpp @@ -240,7 +240,7 @@ enum CounterNS { * be removed from the product in the future. * */ -class PerfData : public CHeapObj { +class PerfData : public CHeapObj { friend class StatSampler; // for access to protected void sample() friend class PerfDataManager; // for access to protected destructor @@ -342,7 +342,7 @@ class PerfData : public CHeapObj { * invoke the take_sample() method and write the value returned to its * appropriate location in the PerfData memory region. */ -class PerfLongSampleHelper : public CHeapObj { +class PerfLongSampleHelper : public CHeapObj { public: virtual jlong take_sample() = 0; }; @@ -591,7 +591,7 @@ class PerfStringVariable : public PerfString { * some other implementation, as long as that implementation provides * a mechanism to iterate over the container by index. */ -class PerfDataList : public CHeapObj { +class PerfDataList : public CHeapObj { private: diff --git a/hotspot/src/share/vm/runtime/perfMemory.cpp b/hotspot/src/share/vm/runtime/perfMemory.cpp index 0855b38c97f..26ef55e5f58 100644 --- a/hotspot/src/share/vm/runtime/perfMemory.cpp +++ b/hotspot/src/share/vm/runtime/perfMemory.cpp @@ -112,7 +112,7 @@ void PerfMemory::initialize() { warning("Could not create PerfData Memory region, reverting to malloc"); } - _prologue = NEW_C_HEAP_OBJ(PerfDataPrologue); + _prologue = NEW_C_HEAP_OBJ(PerfDataPrologue, mtInternal); } else { @@ -244,10 +244,10 @@ char* PerfMemory::get_perfdata_file_path() { if (PerfDataSaveFile != NULL) { // dest_file_name stores the validated file name if file_name // contains %p which will be replaced by pid. - dest_file = NEW_C_HEAP_ARRAY(char, JVM_MAXPATHLEN); + dest_file = NEW_C_HEAP_ARRAY(char, JVM_MAXPATHLEN, mtInternal); if(!Arguments::copy_expand_pid(PerfDataSaveFile, strlen(PerfDataSaveFile), dest_file, JVM_MAXPATHLEN)) { - FREE_C_HEAP_ARRAY(char, dest_file); + FREE_C_HEAP_ARRAY(char, dest_file, mtInternal); if (PrintMiscellaneous && Verbose) { warning("Invalid performance data file path name specified, "\ "fall back to a default name"); @@ -257,7 +257,7 @@ char* PerfMemory::get_perfdata_file_path() { } } // create the name of the file for retaining the instrumentation memory. - dest_file = NEW_C_HEAP_ARRAY(char, PERFDATA_FILENAME_LEN); + dest_file = NEW_C_HEAP_ARRAY(char, PERFDATA_FILENAME_LEN, mtInternal); jio_snprintf(dest_file, PERFDATA_FILENAME_LEN, "%s_%d", PERFDATA_NAME, os::current_process_id()); diff --git a/hotspot/src/share/vm/runtime/reflectionUtils.cpp b/hotspot/src/share/vm/runtime/reflectionUtils.cpp index 6c6e8c361b6..e8a986ab346 100644 --- a/hotspot/src/share/vm/runtime/reflectionUtils.cpp +++ b/hotspot/src/share/vm/runtime/reflectionUtils.cpp @@ -59,7 +59,7 @@ bool KlassStream::eos() { GrowableArray *FilteredFieldsMap::_filtered_fields = - new (ResourceObj::C_HEAP) GrowableArray(3,true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(3,true); void FilteredFieldsMap::initialize() { diff --git a/hotspot/src/share/vm/runtime/safepoint.cpp b/hotspot/src/share/vm/runtime/safepoint.cpp index c29d257cc3f..31b33e320ec 100644 --- a/hotspot/src/share/vm/runtime/safepoint.cpp +++ b/hotspot/src/share/vm/runtime/safepoint.cpp @@ -48,6 +48,7 @@ #include "runtime/stubRoutines.hpp" #include "runtime/sweeper.hpp" #include "runtime/synchronizer.hpp" +#include "services/memTracker.hpp" #include "services/runtimeService.hpp" #include "utilities/events.hpp" #ifdef TARGET_ARCH_x86 @@ -546,6 +547,10 @@ void SafepointSynchronize::do_cleanup_tasks() { if (UseGCLogFileRotation) { gclog_or_tty->rotate_log(); } + + if (MemTracker::is_on()) { + MemTracker::sync(); + } } @@ -1157,7 +1162,7 @@ void SafepointSynchronize::deferred_initialize_stat() { stats_array_size = PrintSafepointStatisticsCount; } _safepoint_stats = (SafepointStats*)os::malloc(stats_array_size - * sizeof(SafepointStats)); + * sizeof(SafepointStats), mtInternal); guarantee(_safepoint_stats != NULL, "not enough memory for safepoint instrumentation data"); diff --git a/hotspot/src/share/vm/runtime/safepoint.hpp b/hotspot/src/share/vm/runtime/safepoint.hpp index 71255a27d48..005ea4d0360 100644 --- a/hotspot/src/share/vm/runtime/safepoint.hpp +++ b/hotspot/src/share/vm/runtime/safepoint.hpp @@ -190,7 +190,7 @@ public: }; // State class for a thread suspended at a safepoint -class ThreadSafepointState: public CHeapObj { +class ThreadSafepointState: public CHeapObj { public: // These states are maintained by VM thread while threads are being brought // to a safepoint. After SafepointSynchronize::end(), they are reset to diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.cpp b/hotspot/src/share/vm/runtime/sharedRuntime.cpp index 503ad0719fd..7c74f493008 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp @@ -2117,7 +2117,7 @@ void SharedRuntime::print_call_statistics(int comp_total) { // A simple wrapper class around the calling convention information // that allows sharing of adapters for the same calling convention. -class AdapterFingerPrint : public CHeapObj { +class AdapterFingerPrint : public CHeapObj { private: union { int _compact[3]; @@ -2174,7 +2174,7 @@ class AdapterFingerPrint : public CHeapObj { ptr = _value._compact; } else { _length = len; - _value._fingerprint = NEW_C_HEAP_ARRAY(int, _length); + _value._fingerprint = NEW_C_HEAP_ARRAY(int, _length, mtCode); ptr = _value._fingerprint; } @@ -2193,7 +2193,7 @@ class AdapterFingerPrint : public CHeapObj { ~AdapterFingerPrint() { if (_length > 0) { - FREE_C_HEAP_ARRAY(int, _value._fingerprint); + FREE_C_HEAP_ARRAY(int, _value._fingerprint, mtCode); } } @@ -2251,7 +2251,7 @@ class AdapterFingerPrint : public CHeapObj { // A hashtable mapping from AdapterFingerPrints to AdapterHandlerEntries -class AdapterHandlerTable : public BasicHashtable { +class AdapterHandlerTable : public BasicHashtable { friend class AdapterHandlerTableIterator; private: @@ -2265,16 +2265,16 @@ class AdapterHandlerTable : public BasicHashtable { #endif AdapterHandlerEntry* bucket(int i) { - return (AdapterHandlerEntry*)BasicHashtable::bucket(i); + return (AdapterHandlerEntry*)BasicHashtable::bucket(i); } public: AdapterHandlerTable() - : BasicHashtable(293, sizeof(AdapterHandlerEntry)) { } + : BasicHashtable(293, sizeof(AdapterHandlerEntry)) { } // Create a new entry suitable for insertion in the table AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry) { - AdapterHandlerEntry* entry = (AdapterHandlerEntry*)BasicHashtable::new_entry(fingerprint->compute_hash()); + AdapterHandlerEntry* entry = (AdapterHandlerEntry*)BasicHashtable::new_entry(fingerprint->compute_hash()); entry->init(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry); return entry; } @@ -2287,7 +2287,7 @@ class AdapterHandlerTable : public BasicHashtable { void free_entry(AdapterHandlerEntry* entry) { entry->deallocate(); - BasicHashtable::free_entry(entry); + BasicHashtable::free_entry(entry); } // Find a entry with the same fingerprint if it exists @@ -2572,8 +2572,8 @@ void AdapterHandlerEntry::relocate(address new_base) { void AdapterHandlerEntry::deallocate() { delete _fingerprint; #ifdef ASSERT - if (_saved_code) FREE_C_HEAP_ARRAY(unsigned char, _saved_code); - if (_saved_sig) FREE_C_HEAP_ARRAY(Basictype, _saved_sig); + if (_saved_code) FREE_C_HEAP_ARRAY(unsigned char, _saved_code, mtCode); + if (_saved_sig) FREE_C_HEAP_ARRAY(Basictype, _saved_sig, mtCode); #endif } @@ -2583,11 +2583,11 @@ void AdapterHandlerEntry::deallocate() { // against other versions. If the code is captured after relocation // then relative instructions won't be equivalent. void AdapterHandlerEntry::save_code(unsigned char* buffer, int length, int total_args_passed, BasicType* sig_bt) { - _saved_code = NEW_C_HEAP_ARRAY(unsigned char, length); + _saved_code = NEW_C_HEAP_ARRAY(unsigned char, length, mtCode); _code_length = length; memcpy(_saved_code, buffer, length); _total_args_passed = total_args_passed; - _saved_sig = NEW_C_HEAP_ARRAY(BasicType, _total_args_passed); + _saved_sig = NEW_C_HEAP_ARRAY(BasicType, _total_args_passed, mtCode); memcpy(_saved_sig, sig_bt, _total_args_passed * sizeof(BasicType)); } @@ -2893,7 +2893,7 @@ JRT_LEAF(intptr_t*, SharedRuntime::OSR_migration_begin( JavaThread *thread) ) int max_locals = moop->max_locals(); // Allocate temp buffer, 1 word per local & 2 per active monitor int buf_size_words = max_locals + active_monitor_count*2; - intptr_t *buf = NEW_C_HEAP_ARRAY(intptr_t,buf_size_words); + intptr_t *buf = NEW_C_HEAP_ARRAY(intptr_t,buf_size_words, mtCode); // Copy the locals. Order is preserved so that loading of longs works. // Since there's no GC I can copy the oops blindly. @@ -2923,7 +2923,7 @@ JRT_LEAF(intptr_t*, SharedRuntime::OSR_migration_begin( JavaThread *thread) ) JRT_END JRT_LEAF(void, SharedRuntime::OSR_migration_end( intptr_t* buf) ) - FREE_C_HEAP_ARRAY(intptr_t,buf); + FREE_C_HEAP_ARRAY(intptr_t,buf, mtCode); JRT_END bool AdapterHandlerLibrary::contains(CodeBlob* b) { diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.hpp b/hotspot/src/share/vm/runtime/sharedRuntime.hpp index 9650c6e11c7..cb955c46db2 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.hpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.hpp @@ -610,7 +610,7 @@ class SharedRuntime: AllStatic { // used by the adapters. The code generation happens here because it's very // similar to what the adapters have to do. -class AdapterHandlerEntry : public BasicHashtableEntry { +class AdapterHandlerEntry : public BasicHashtableEntry { friend class AdapterHandlerTable; private: @@ -656,7 +656,7 @@ class AdapterHandlerEntry : public BasicHashtableEntry { AdapterFingerPrint* fingerprint() { return _fingerprint; } AdapterHandlerEntry* next() { - return (AdapterHandlerEntry*)BasicHashtableEntry::next(); + return (AdapterHandlerEntry*)BasicHashtableEntry::next(); } #ifdef ASSERT diff --git a/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp b/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp index bc81f5a30ec..3fb5161f8fa 100644 --- a/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp +++ b/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp @@ -36,7 +36,7 @@ // Currently, code descriptors are simply chained in a linked list, // this may have to change if searching becomes too slow. -class StubCodeDesc: public CHeapObj { +class StubCodeDesc: public CHeapObj { protected: static StubCodeDesc* _list; // the list of all descriptors static int _count; // length of list diff --git a/hotspot/src/share/vm/runtime/sweeper.cpp b/hotspot/src/share/vm/runtime/sweeper.cpp index 7f8561b6b3b..2dea6d7ba7c 100644 --- a/hotspot/src/share/vm/runtime/sweeper.cpp +++ b/hotspot/src/share/vm/runtime/sweeper.cpp @@ -228,7 +228,7 @@ void NMethodSweeper::possibly_sweep() { #ifdef ASSERT if (LogSweeper && _records == NULL) { // Create the ring buffer for the logging code - _records = NEW_C_HEAP_ARRAY(SweeperRecord, SweeperLogEntries); + _records = NEW_C_HEAP_ARRAY(SweeperRecord, SweeperLogEntries, mtGC); memset(_records, 0, sizeof(SweeperRecord) * SweeperLogEntries); } #endif diff --git a/hotspot/src/share/vm/runtime/task.hpp b/hotspot/src/share/vm/runtime/task.hpp index 2357e835fb0..206442d765b 100644 --- a/hotspot/src/share/vm/runtime/task.hpp +++ b/hotspot/src/share/vm/runtime/task.hpp @@ -35,7 +35,7 @@ // ... // pf.disenroll(); -class PeriodicTask: public CHeapObj { +class PeriodicTask: public CHeapObj { public: // Useful constants. // The interval constants are used to ensure the declared interval diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp index 76865f6ff2c..13f617db25f 100644 --- a/hotspot/src/share/vm/runtime/thread.cpp +++ b/hotspot/src/share/vm/runtime/thread.cpp @@ -73,6 +73,7 @@ #include "runtime/vm_operations.hpp" #include "services/attachListener.hpp" #include "services/management.hpp" +#include "services/memTracker.hpp" #include "services/threadService.hpp" #include "trace/traceEventTypes.hpp" #include "utilities/defaultStream.hpp" @@ -159,6 +160,7 @@ HS_DTRACE_PROBE_DECL5(hotspot, thread__stop, char*, intptr_t, #endif // ndef DTRACE_ENABLED + // Class hierarchy // - Thread // - VMThread @@ -168,13 +170,13 @@ HS_DTRACE_PROBE_DECL5(hotspot, thread__stop, char*, intptr_t, // - CompilerThread // ======= Thread ======== - // Support for forcing alignment of thread objects for biased locking -void* Thread::operator new(size_t size) { +void* Thread::allocate(size_t size, bool throw_excpt, MEMFLAGS flags) { if (UseBiasedLocking) { const int alignment = markOopDesc::biased_lock_alignment; size_t aligned_size = size + (alignment - sizeof(intptr_t)); - void* real_malloc_addr = CHeapObj::operator new(aligned_size); + void* real_malloc_addr = throw_excpt? AllocateHeap(aligned_size, flags, CURRENT_PC) + : os::malloc(aligned_size, flags, CURRENT_PC); void* aligned_addr = (void*) align_size_up((intptr_t) real_malloc_addr, alignment); assert(((uintptr_t) aligned_addr + (uintptr_t) size) <= ((uintptr_t) real_malloc_addr + (uintptr_t) aligned_size), @@ -187,16 +189,17 @@ void* Thread::operator new(size_t size) { ((Thread*) aligned_addr)->_real_malloc_address = real_malloc_addr; return aligned_addr; } else { - return CHeapObj::operator new(size); + return throw_excpt? AllocateHeap(size, flags, CURRENT_PC) + : os::malloc(size, flags, CURRENT_PC); } } void Thread::operator delete(void* p) { if (UseBiasedLocking) { void* real_malloc_addr = ((Thread*) p)->_real_malloc_address; - CHeapObj::operator delete(real_malloc_addr); + FreeHeap(real_malloc_addr, mtThread); } else { - CHeapObj::operator delete(p); + FreeHeap(p, mtThread); } } @@ -214,8 +217,8 @@ Thread::Thread() { // allocated data structures set_osthread(NULL); - set_resource_area(new ResourceArea()); - set_handle_area(new HandleArea(NULL)); + set_resource_area(new (mtThread)ResourceArea()); + set_handle_area(new (mtThread) HandleArea(NULL)); set_active_handles(NULL); set_free_handle_block(NULL); set_last_handle_mark(NULL); @@ -306,12 +309,17 @@ void Thread::initialize_thread_local_storage() { // set up any platform-specific state. os::initialize_thread(); - } void Thread::record_stack_base_and_size() { set_stack_base(os::current_stack_base()); set_stack_size(os::current_stack_size()); + + // record thread's native stack, stack grows downward + address vm_base = _stack_base - _stack_size; + MemTracker::record_virtual_memory_reserve(vm_base, _stack_size, + CURRENT_PC, this); + MemTracker::record_virtual_memory_type(vm_base, mtThreadStack); } @@ -319,6 +327,9 @@ Thread::~Thread() { // Reclaim the objectmonitors from the omFreeList of the moribund thread. ObjectSynchronizer::omFlush (this) ; + MemTracker::record_virtual_memory_release((_stack_base - _stack_size), + _stack_size, this); + // deallocate data structures delete resource_area(); // since the handle marks are using the handle area, we have to deallocated the root @@ -1105,14 +1116,14 @@ NamedThread::NamedThread() : Thread() { NamedThread::~NamedThread() { if (_name != NULL) { - FREE_C_HEAP_ARRAY(char, _name); + FREE_C_HEAP_ARRAY(char, _name, mtThread); _name = NULL; } } void NamedThread::set_name(const char* format, ...) { guarantee(_name == NULL, "Only get to set name once."); - _name = NEW_C_HEAP_ARRAY(char, max_name_len); + _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread); guarantee(_name != NULL, "alloc failure"); va_list ap; va_start(ap, format); @@ -1295,6 +1306,7 @@ void JavaThread::initialize() { set_monitor_chunks(NULL); set_next(NULL); set_thread_state(_thread_new); + set_recorder(NULL); _terminated = _not_terminated; _privileged_stack_top = NULL; _array_for_gc = NULL; @@ -1370,6 +1382,7 @@ JavaThread::JavaThread(bool is_attaching_via_jni) : _jni_attach_state = _not_attaching_via_jni; } assert(_deferred_card_mark.is_empty(), "Default MemRegion ctor"); + _safepoint_visible = false; } bool JavaThread::reguard_stack(address cur_sp) { @@ -1432,7 +1445,7 @@ JavaThread::JavaThread(ThreadFunction entry_point, size_t stack_sz) : thr_type = entry_point == &compiler_thread_entry ? os::compiler_thread : os::java_thread; os::create_thread(this, thr_type, stack_sz); - + _safepoint_visible = false; // The _osthread may be NULL here because we ran out of memory (too many threads active). // We need to throw and OutOfMemoryError - however we cannot do this here because the caller // may hold a lock and all locks must be unlocked before throwing the exception (throwing @@ -1450,6 +1463,11 @@ JavaThread::~JavaThread() { tty->print_cr("terminate thread %p", this); } + // Info NMT that this JavaThread is exiting, its memory + // recorder should be collected + assert(!is_safepoint_visible(), "wrong state"); + MemTracker::thread_exiting(this); + // JSR166 -- return the parker to the free list Parker::Release(_parker); _parker = NULL ; @@ -2892,7 +2910,7 @@ void JavaThread::print_stack_on(outputStream* st) { void JavaThread::popframe_preserve_args(ByteSize size_in_bytes, void* start) { assert(_popframe_preserved_args == NULL, "should not wipe out old PopFrame preserved arguments"); if (in_bytes(size_in_bytes) != 0) { - _popframe_preserved_args = NEW_C_HEAP_ARRAY(char, in_bytes(size_in_bytes)); + _popframe_preserved_args = NEW_C_HEAP_ARRAY(char, in_bytes(size_in_bytes), mtThread); _popframe_preserved_args_size = in_bytes(size_in_bytes); Copy::conjoint_jbytes(start, _popframe_preserved_args, _popframe_preserved_args_size); } @@ -2914,7 +2932,7 @@ WordSize JavaThread::popframe_preserved_args_size_in_words() { void JavaThread::popframe_free_preserved_args() { assert(_popframe_preserved_args != NULL, "should not free PopFrame preserved arguments twice"); - FREE_C_HEAP_ARRAY(char, (char*) _popframe_preserved_args); + FREE_C_HEAP_ARRAY(char, (char*) _popframe_preserved_args, mtThread); _popframe_preserved_args = NULL; _popframe_preserved_args_size = 0; } @@ -3163,6 +3181,14 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { jint os_init_2_result = os::init_2(); if (os_init_2_result != JNI_OK) return os_init_2_result; + // intialize TLS + ThreadLocalStorage::init(); + + // Bootstrap native memory tracking, so it can start recording memory + // activities before worker thread is started. This is the first phase + // of bootstrapping, VM is currently running in single-thread mode. + MemTracker::bootstrap_single_thread(); + // Initialize output stream logging ostream_init_log(); @@ -3182,9 +3208,6 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { _number_of_threads = 0; _number_of_non_daemon_threads = 0; - // Initialize TLS - ThreadLocalStorage::init(); - // Initialize global data structures and create system classes in heap vm_init_globals(); @@ -3216,6 +3239,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // Initialize Java-Level synchronization subsystem ObjectMonitor::Initialize() ; + // Second phase of bootstrapping, VM is about entering multi-thread mode + MemTracker::bootstrap_multi_thread(); + // Initialize global modules jint status = init_globals(); if (status != JNI_OK) { @@ -3243,6 +3269,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { Universe::verify(); // make sure we're starting with a clean slate } + // Fully start NMT + MemTracker::start(); + // Create the VMThread { TraceTime timer("Start VMThread", TraceStartupTime); VMThread::create(); @@ -3544,11 +3573,11 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym if (library == NULL) { const char *sub_msg = " in absolute path, with error: "; size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1; - char *buf = NEW_C_HEAP_ARRAY(char, len); + char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread); jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf); // If we can't find the agent, exit. vm_exit_during_initialization(buf, NULL); - FREE_C_HEAP_ARRAY(char, buf); + FREE_C_HEAP_ARRAY(char, buf, mtThread); } } else { // Try to load the agent from the standard dll directory @@ -3562,7 +3591,7 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym const char *fmt = "%s/bin/java %s -Dkernel.background.download=false" " sun.jkernel.DownloadManager -download client_jvm"; size_t length = strlen(props) + strlen(home) + strlen(fmt) + 1; - char *cmd = NEW_C_HEAP_ARRAY(char, length); + char *cmd = NEW_C_HEAP_ARRAY(char, length, mtThread); jio_snprintf(cmd, length, fmt, home, props); int status = os::fork_and_exec(cmd); FreeHeap(props); @@ -3571,7 +3600,7 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym vm_exit_during_initialization("fork_and_exec failed: %s", strerror(errno)); } - FREE_C_HEAP_ARRAY(char, cmd); + FREE_C_HEAP_ARRAY(char, cmd, mtThread); // when this comes back the instrument.dll should be where it belongs. library = os::dll_load(buffer, ebuf, sizeof ebuf); } @@ -3583,11 +3612,11 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym if (library == NULL) { const char *sub_msg = " on the library path, with error: "; size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1; - char *buf = NEW_C_HEAP_ARRAY(char, len); + char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread); jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf); // If we can't find the agent, exit. vm_exit_during_initialization(buf, NULL); - FREE_C_HEAP_ARRAY(char, buf); + FREE_C_HEAP_ARRAY(char, buf, mtThread); } } } @@ -3756,6 +3785,7 @@ void JavaThread::invoke_shutdown_hooks() { // and VM_Exit op at VM level. // // Shutdown sequence: +// + Shutdown native memory tracking if it is on // + Wait until we are the last non-daemon thread to execute // <-- every thing is still working at this moment --> // + Call java.lang.Shutdown.shutdown(), which will invoke Java level @@ -3801,6 +3831,10 @@ bool Threads::destroy_vm() { Mutex::_as_suspend_equivalent_flag); } + // Shutdown NMT before exit. Otherwise, + // it will run into trouble when system destroys static variables. + MemTracker::shutdown(MemTracker::NMT_normal); + // Hang forever on exit if we are reporting an error. if (ShowMessageBoxOnError && is_error_reported()) { os::infinite_sleep(); @@ -3907,6 +3941,8 @@ void Threads::add(JavaThread* p, bool force_daemon) { daemon = false; } + p->set_safepoint_visible(true); + ThreadService::add_thread(p, daemon); // Possible GC point. @@ -3952,6 +3988,10 @@ void Threads::remove(JavaThread* p) { // to do callbacks into the safepoint code. However, the safepoint code is not aware // of this thread since it is removed from the queue. p->set_terminated_value(); + + // Now, this thread is not visible to safepoint + p->set_safepoint_visible(false); + } // unlock Threads_lock // Since Events::log uses a lock, we grab it outside the Threads_lock diff --git a/hotspot/src/share/vm/runtime/thread.hpp b/hotspot/src/share/vm/runtime/thread.hpp index 7846cc07058..a375f264ff8 100644 --- a/hotspot/src/share/vm/runtime/thread.hpp +++ b/hotspot/src/share/vm/runtime/thread.hpp @@ -41,6 +41,7 @@ #include "runtime/stubRoutines.hpp" #include "runtime/threadLocalStorage.hpp" #include "runtime/unhandledOops.hpp" +#include "services/memRecorder.hpp" #include "trace/tracing.hpp" #include "utilities/exceptions.hpp" #include "utilities/top.hpp" @@ -100,12 +101,16 @@ class Thread: public ThreadShadow { //oop _pending_exception; // pending exception for current thread // const char* _exception_file; // file information for exception (debugging only) // int _exception_line; // line information for exception (debugging only) - + protected: // Support for forcing alignment of thread objects for biased locking void* _real_malloc_address; public: - void* operator new(size_t size); + void* operator new(size_t size) { return allocate(size, true); } + void* operator new(size_t size, std::nothrow_t& nothrow_constant) { return allocate(size, false); } void operator delete(void* p); + + protected: + static void* allocate(size_t size, bool throw_excpt, MEMFLAGS flags = mtThread); private: // *************************************************************** @@ -548,7 +553,6 @@ public: virtual void print_on_error(outputStream* st, char* buf, int buflen) const; // Debug-only code - #ifdef ASSERT private: // Deadlock detection support for Mutex locks. List of locks own by thread. @@ -1027,9 +1031,15 @@ class JavaThread: public Thread { bool do_not_unlock_if_synchronized() { return _do_not_unlock_if_synchronized; } void set_do_not_unlock_if_synchronized(bool val) { _do_not_unlock_if_synchronized = val; } + // native memory tracking + inline MemRecorder* get_recorder() const { return (MemRecorder*)_recorder; } + inline void set_recorder(MemRecorder* rc) { _recorder = (volatile MemRecorder*)rc; } + + private: + // per-thread memory recorder + volatile MemRecorder* _recorder; // Suspend/resume support for JavaThread - private: void set_ext_suspended() { set_suspend_flag (_ext_suspended); } void clear_ext_suspended() { clear_suspend_flag(_ext_suspended); } @@ -1453,6 +1463,18 @@ public: return result; } + // NMT (Native memory tracking) support. + // This flag helps NMT to determine if this JavaThread will be blocked + // at safepoint. If not, ThreadCritical is needed for writing memory records. + // JavaThread is only safepoint visible when it is in Threads' thread list, + // it is not visible until it is added to the list and becomes invisible + // once it is removed from the list. + public: + bool is_safepoint_visible() const { return _safepoint_visible; } + void set_safepoint_visible(bool visible) { _safepoint_visible = visible; } + private: + bool _safepoint_visible; + // Static operations public: // Returns the running thread as a JavaThread diff --git a/hotspot/src/share/vm/runtime/unhandledOops.cpp b/hotspot/src/share/vm/runtime/unhandledOops.cpp index 9b7211c8d1d..3216da1f2c0 100644 --- a/hotspot/src/share/vm/runtime/unhandledOops.cpp +++ b/hotspot/src/share/vm/runtime/unhandledOops.cpp @@ -37,7 +37,7 @@ const int free_list_size = 256; UnhandledOops::UnhandledOops(Thread* thread) { _thread = thread; - _oop_list = new (ResourceObj::C_HEAP) + _oop_list = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(free_list_size, true); _level = 0; } diff --git a/hotspot/src/share/vm/runtime/vframeArray.cpp b/hotspot/src/share/vm/runtime/vframeArray.cpp index 52b08099922..742197394d8 100644 --- a/hotspot/src/share/vm/runtime/vframeArray.cpp +++ b/hotspot/src/share/vm/runtime/vframeArray.cpp @@ -443,7 +443,7 @@ vframeArray* vframeArray::allocate(JavaThread* thread, int frame_size, GrowableA // Allocate the vframeArray vframeArray * result = (vframeArray*) AllocateHeap(sizeof(vframeArray) + // fixed part sizeof(vframeArrayElement) * (chunk->length() - 1), // variable part - "vframeArray::allocate"); + mtCompiler); result->_frames = chunk->length(); result->_owner_thread = thread; result->_sender = sender; diff --git a/hotspot/src/share/vm/runtime/vframeArray.hpp b/hotspot/src/share/vm/runtime/vframeArray.hpp index 6f8d436c6ca..2eeeb39e60e 100644 --- a/hotspot/src/share/vm/runtime/vframeArray.hpp +++ b/hotspot/src/share/vm/runtime/vframeArray.hpp @@ -108,7 +108,7 @@ class vframeArrayElement : public _ValueObj { // but it does make debugging easier even if we can't look // at the data in each vframeElement -class vframeArray: public CHeapObj { +class vframeArray: public CHeapObj { friend class VMStructs; private: diff --git a/hotspot/src/share/vm/runtime/vframe_hp.cpp b/hotspot/src/share/vm/runtime/vframe_hp.cpp index 274bfc604ce..4f63575d9d6 100644 --- a/hotspot/src/share/vm/runtime/vframe_hp.cpp +++ b/hotspot/src/share/vm/runtime/vframe_hp.cpp @@ -154,7 +154,7 @@ void compiledVFrame::update_local(BasicType type, int index, jvalue value) { } else { // No deferred updates pending for this thread. // allocate in C heap - deferred = new(ResourceObj::C_HEAP) GrowableArray (1, true); + deferred = new(ResourceObj::C_HEAP, mtCompiler) GrowableArray (1, true); thread()->set_deferred_locals(deferred); } deferred->push(new jvmtiDeferredLocalVariableSet(method(), bci(), fr().id())); @@ -323,7 +323,7 @@ jvmtiDeferredLocalVariableSet::jvmtiDeferredLocalVariableSet(methodOop method, i _bci = bci; _id = id; // Alway will need at least one, must be on C heap - _locals = new(ResourceObj::C_HEAP) GrowableArray (1, true); + _locals = new(ResourceObj::C_HEAP, mtCompiler) GrowableArray (1, true); } jvmtiDeferredLocalVariableSet::~jvmtiDeferredLocalVariableSet() { diff --git a/hotspot/src/share/vm/runtime/vframe_hp.hpp b/hotspot/src/share/vm/runtime/vframe_hp.hpp index 6d0bd376482..4edb53bc888 100644 --- a/hotspot/src/share/vm/runtime/vframe_hp.hpp +++ b/hotspot/src/share/vm/runtime/vframe_hp.hpp @@ -89,7 +89,7 @@ class compiledVFrame: public javaVFrame { // any updated locals. class jvmtiDeferredLocalVariable; -class jvmtiDeferredLocalVariableSet : public CHeapObj { +class jvmtiDeferredLocalVariableSet : public CHeapObj { private: methodOop _method; // must be GC'd @@ -119,7 +119,7 @@ private: }; -class jvmtiDeferredLocalVariable : public CHeapObj { +class jvmtiDeferredLocalVariable : public CHeapObj { public: jvmtiDeferredLocalVariable(int index, BasicType type, jvalue value); diff --git a/hotspot/src/share/vm/runtime/virtualspace.cpp b/hotspot/src/share/vm/runtime/virtualspace.cpp index c7e6bf80f4b..38f434dce40 100644 --- a/hotspot/src/share/vm/runtime/virtualspace.cpp +++ b/hotspot/src/share/vm/runtime/virtualspace.cpp @@ -26,6 +26,7 @@ #include "oops/markOop.hpp" #include "oops/oop.inline.hpp" #include "runtime/virtualspace.hpp" +#include "services/memTracker.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" #endif @@ -489,6 +490,10 @@ ReservedHeapSpace::ReservedHeapSpace(size_t size, size_t alignment, (UseCompressedOops && (Universe::narrow_oop_base() != NULL) && Universe::narrow_oop_use_implicit_null_checks()) ? lcm(os::vm_page_size(), alignment) : 0) { + if (base() > 0) { + MemTracker::record_virtual_memory_type((address)base(), mtJavaHeap); + } + // Only reserved space for the java heap should have a noaccess_prefix // if using compressed oops. protect_noaccess_prefix(size); @@ -504,6 +509,10 @@ ReservedHeapSpace::ReservedHeapSpace(const size_t prefix_size, (UseCompressedOops && (Universe::narrow_oop_base() != NULL) && Universe::narrow_oop_use_implicit_null_checks()) ? lcm(os::vm_page_size(), prefix_align) : 0) { + if (base() > 0) { + MemTracker::record_virtual_memory_type((address)base(), mtJavaHeap); + } + protect_noaccess_prefix(prefix_size+suffix_size); } @@ -513,6 +522,7 @@ ReservedCodeSpace::ReservedCodeSpace(size_t r_size, size_t rs_align, bool large) : ReservedSpace(r_size, rs_align, large, /*executable*/ true) { + MemTracker::record_virtual_memory_type((address)base(), mtCode); } // VirtualSpace diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index 7045fa8b3ce..57fab336962 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -235,7 +235,6 @@ #ifndef REG_COUNT #define REG_COUNT 0 #endif - // whole purpose of this function is to work around bug c++/27724 in gcc 4.1.1 // with optimization turned on it doesn't affect produced code static inline uint64_t cast_uint64_t(size_t x) @@ -244,6 +243,16 @@ static inline uint64_t cast_uint64_t(size_t x) } +typedef HashtableEntry IntptrHashtableEntry; +typedef Hashtable IntptrHashtable; +typedef Hashtable SymbolHashtable; +typedef HashtableEntry SymbolHashtableEntry; +typedef Hashtable StringHashtable; +typedef TwoOopHashtable klassOopTwoOopHashtable; +typedef Hashtable klassOopHashtable; +typedef HashtableEntry klassHashtableEntry; +typedef TwoOopHashtable SymbolTwoOopHashtable; + //-------------------------------------------------------------------------------- // VM_STRUCTS // @@ -711,26 +720,26 @@ static inline uint64_t cast_uint64_t(size_t x) /* HashtableBucket */ \ /*******************/ \ \ - nonstatic_field(HashtableBucket, _entry, BasicHashtableEntry*) \ + nonstatic_field(HashtableBucket, _entry, BasicHashtableEntry*) \ \ /******************/ \ /* HashtableEntry */ \ /******************/ \ \ - nonstatic_field(BasicHashtableEntry, _next, BasicHashtableEntry*) \ - nonstatic_field(BasicHashtableEntry, _hash, unsigned int) \ - nonstatic_field(HashtableEntry, _literal, intptr_t) \ + nonstatic_field(BasicHashtableEntry, _next, BasicHashtableEntry*) \ + nonstatic_field(BasicHashtableEntry, _hash, unsigned int) \ + nonstatic_field(IntptrHashtableEntry, _literal, intptr_t) \ \ /*************/ \ /* Hashtable */ \ /*************/ \ \ - nonstatic_field(BasicHashtable, _table_size, int) \ - nonstatic_field(BasicHashtable, _buckets, HashtableBucket*) \ - nonstatic_field(BasicHashtable, _free_list, BasicHashtableEntry*) \ - nonstatic_field(BasicHashtable, _first_free_entry, char*) \ - nonstatic_field(BasicHashtable, _end_block, char*) \ - nonstatic_field(BasicHashtable, _entry_size, int) \ + nonstatic_field(BasicHashtable, _table_size, int) \ + nonstatic_field(BasicHashtable, _buckets, HashtableBucket*) \ + nonstatic_field(BasicHashtable, _free_list, BasicHashtableEntry*) \ + nonstatic_field(BasicHashtable, _first_free_entry, char*) \ + nonstatic_field(BasicHashtable, _end_block, char*) \ + nonstatic_field(BasicHashtable, _entry_size, int) \ \ /*******************/ \ /* DictionaryEntry */ \ @@ -1538,20 +1547,20 @@ static inline uint64_t cast_uint64_t(size_t x) /* SymbolTable, SystemDictionary */ \ /*********************************/ \ \ - declare_toplevel_type(BasicHashtable) \ - declare_type(Hashtable, BasicHashtable) \ - declare_type(SymbolTable, Hashtable) \ - declare_type(StringTable, Hashtable) \ - declare_type(LoaderConstraintTable, Hashtable) \ - declare_type(TwoOopHashtable, Hashtable) \ - declare_type(Dictionary, TwoOopHashtable) \ - declare_type(PlaceholderTable, TwoOopHashtable) \ - declare_toplevel_type(BasicHashtableEntry) \ - declare_type(HashtableEntry, BasicHashtableEntry) \ - declare_type(DictionaryEntry, HashtableEntry) \ - declare_type(PlaceholderEntry, HashtableEntry) \ - declare_type(LoaderConstraintEntry, HashtableEntry) \ - declare_toplevel_type(HashtableBucket) \ + declare_toplevel_type(BasicHashtable) \ + declare_type(IntptrHashtable, BasicHashtable) \ + declare_type(SymbolTable, SymbolHashtable) \ + declare_type(StringTable, StringHashtable) \ + declare_type(LoaderConstraintTable, klassOopHashtable) \ + declare_type(klassOopTwoOopHashtable, klassOopHashtable) \ + declare_type(Dictionary, klassOopTwoOopHashtable) \ + declare_type(PlaceholderTable, SymbolTwoOopHashtable) \ + declare_toplevel_type(BasicHashtableEntry) \ + declare_type(IntptrHashtableEntry, BasicHashtableEntry) \ + declare_type(DictionaryEntry, klassHashtableEntry) \ + declare_type(PlaceholderEntry, SymbolHashtableEntry) \ + declare_type(LoaderConstraintEntry, klassHashtableEntry) \ + declare_toplevel_type(HashtableBucket) \ declare_toplevel_type(SystemDictionary) \ declare_toplevel_type(vmSymbols) \ declare_toplevel_type(ProtectionDomainEntry) \ diff --git a/hotspot/src/share/vm/runtime/vmThread.hpp b/hotspot/src/share/vm/runtime/vmThread.hpp index f78449676b7..acf95842bf1 100644 --- a/hotspot/src/share/vm/runtime/vmThread.hpp +++ b/hotspot/src/share/vm/runtime/vmThread.hpp @@ -46,7 +46,7 @@ // Encapsulates both queue management and // and priority policy // -class VMOperationQueue : public CHeapObj { +class VMOperationQueue : public CHeapObj { private: enum Priorities { SafepointPriority, // Highest priority (operation executed at a safepoint) diff --git a/hotspot/src/share/vm/runtime/vm_operations.hpp b/hotspot/src/share/vm/runtime/vm_operations.hpp index 081c428a62b..ccbad94b728 100644 --- a/hotspot/src/share/vm/runtime/vm_operations.hpp +++ b/hotspot/src/share/vm/runtime/vm_operations.hpp @@ -96,7 +96,7 @@ template(JFRCheckpoint) \ template(Exit) \ -class VM_Operation: public CHeapObj { +class VM_Operation: public CHeapObj { public: enum Mode { _safepoint, // blocking, safepoint, vm_op C-heap allocated diff --git a/hotspot/src/share/vm/services/attachListener.cpp b/hotspot/src/share/vm/services/attachListener.cpp index 3753a64cc95..14b4aa08eca 100644 --- a/hotspot/src/share/vm/services/attachListener.cpp +++ b/hotspot/src/share/vm/services/attachListener.cpp @@ -320,7 +320,7 @@ static jint set_ccstr_flag(const char* name, AttachOperation* op, outputStream* } bool res = CommandLineFlags::ccstrAtPut((char*)name, &value, ATTACH_ON_DEMAND); if (res) { - FREE_C_HEAP_ARRAY(char, value); + FREE_C_HEAP_ARRAY(char, value, mtInternal); } else { out->print_cr("setting flag %s failed", name); } diff --git a/hotspot/src/share/vm/services/attachListener.hpp b/hotspot/src/share/vm/services/attachListener.hpp index ba8fb93227b..e39c3fde3f9 100644 --- a/hotspot/src/share/vm/services/attachListener.hpp +++ b/hotspot/src/share/vm/services/attachListener.hpp @@ -98,7 +98,7 @@ class AttachListener: AllStatic { }; #ifndef SERVICES_KERNEL -class AttachOperation: public CHeapObj { +class AttachOperation: public CHeapObj { public: enum { name_length_max = 16, // maximum length of name diff --git a/hotspot/src/share/vm/services/diagnosticArgument.cpp b/hotspot/src/share/vm/services/diagnosticArgument.cpp index e2ced389105..23267fae520 100644 --- a/hotspot/src/share/vm/services/diagnosticArgument.cpp +++ b/hotspot/src/share/vm/services/diagnosticArgument.cpp @@ -140,7 +140,7 @@ template <> void DCmdArgument::parse_value(const char* str, if (str == NULL) { _value = NULL; } else { - _value = NEW_C_HEAP_ARRAY(char, len+1); + _value = NEW_C_HEAP_ARRAY(char, len+1, mtInternal); strncpy(_value, str, len); _value[len] = 0; } @@ -159,7 +159,7 @@ template <> void DCmdArgument::init_value(TRAPS) { template <> void DCmdArgument::destroy_value() { if (_value != NULL) { - FREE_C_HEAP_ARRAY(char, _value); + FREE_C_HEAP_ARRAY(char, _value, mtInternal); set_value(NULL); } } diff --git a/hotspot/src/share/vm/services/diagnosticArgument.hpp b/hotspot/src/share/vm/services/diagnosticArgument.hpp index 8881e99556c..596353b0752 100644 --- a/hotspot/src/share/vm/services/diagnosticArgument.hpp +++ b/hotspot/src/share/vm/services/diagnosticArgument.hpp @@ -31,17 +31,17 @@ #include "runtime/thread.hpp" #include "utilities/exceptions.hpp" -class StringArrayArgument : public CHeapObj { +class StringArrayArgument : public CHeapObj { private: GrowableArray* _array; public: StringArrayArgument() { - _array = new(ResourceObj::C_HEAP)GrowableArray(32, true); + _array = new(ResourceObj::C_HEAP, mtInternal)GrowableArray(32, true); assert(_array != NULL, "Sanity check"); } void add(const char* str, size_t len) { if (str != NULL) { - char* ptr = NEW_C_HEAP_ARRAY(char, len+1); + char* ptr = NEW_C_HEAP_ARRAY(char, len+1, mtInternal); strncpy(ptr, str, len); ptr[len] = 0; _array->append(ptr); @@ -53,7 +53,7 @@ public: ~StringArrayArgument() { for (int i=0; i<_array->length(); i++) { if(_array->at(i) != NULL) { // Safety check - FREE_C_HEAP_ARRAY(char, _array->at(i)); + FREE_C_HEAP_ARRAY(char, _array->at(i), mtInternal); } } delete _array; diff --git a/hotspot/src/share/vm/services/diagnosticFramework.hpp b/hotspot/src/share/vm/services/diagnosticFramework.hpp index f9ea562344c..f6863e4775e 100644 --- a/hotspot/src/share/vm/services/diagnosticFramework.hpp +++ b/hotspot/src/share/vm/services/diagnosticFramework.hpp @@ -310,7 +310,7 @@ public: // manages the status of the diagnostic command (hidden, enabled). A DCmdFactory // has to be registered to make the diagnostic command available (see // management.cpp) -class DCmdFactory: public CHeapObj { +class DCmdFactory: public CHeapObj { private: static Mutex* _dcmdFactory_lock; // Pointer to the next factory in the singly-linked list of registered @@ -368,7 +368,7 @@ public: DCmdFactory(DCmdClass::num_arguments(), enabled, hidden) { } // Returns a C-heap allocated instance virtual DCmd* create_Cheap_instance(outputStream* output) { - return new (ResourceObj::C_HEAP) DCmdClass(output, true); + return new (ResourceObj::C_HEAP, mtInternal) DCmdClass(output, true); } // Returns a resourceArea allocated instance virtual DCmd* create_resource_instance(outputStream* output) { diff --git a/hotspot/src/share/vm/services/gcNotifier.cpp b/hotspot/src/share/vm/services/gcNotifier.cpp index c43dadead0b..abb2dd6e798 100644 --- a/hotspot/src/share/vm/services/gcNotifier.cpp +++ b/hotspot/src/share/vm/services/gcNotifier.cpp @@ -45,7 +45,7 @@ void GCNotifier::pushNotification(GCMemoryManager *mgr, const char *action, cons // GC may occur between now and the creation of the notification int num_pools = MemoryService::num_memory_pools(); // stat is deallocated inside GCNotificationRequest - GCStatInfo* stat = new(ResourceObj::C_HEAP) GCStatInfo(num_pools); + GCStatInfo* stat = new(ResourceObj::C_HEAP, mtGC) GCStatInfo(num_pools); mgr->get_last_gc_stat(stat); GCNotificationRequest *request = new GCNotificationRequest(os::javaTimeMillis(),mgr,action,cause,stat); addRequest(request); diff --git a/hotspot/src/share/vm/services/gcNotifier.hpp b/hotspot/src/share/vm/services/gcNotifier.hpp index c26765e824e..1ac807ba592 100644 --- a/hotspot/src/share/vm/services/gcNotifier.hpp +++ b/hotspot/src/share/vm/services/gcNotifier.hpp @@ -30,7 +30,7 @@ #include "services/memoryService.hpp" #include "services/memoryManager.hpp" -class GCNotificationRequest : public CHeapObj { +class GCNotificationRequest : public CHeapObj { friend class GCNotifier; GCNotificationRequest *next; jlong timestamp; diff --git a/hotspot/src/share/vm/services/heapDumper.cpp b/hotspot/src/share/vm/services/heapDumper.cpp index 3cc0e5b6813..73f4a9b6120 100644 --- a/hotspot/src/share/vm/services/heapDumper.cpp +++ b/hotspot/src/share/vm/services/heapDumper.cpp @@ -436,7 +436,7 @@ DumpWriter::DumpWriter(const char* path) { // sufficient memory then reduce size until we can allocate something. _size = io_buffer_size; do { - _buffer = (char*)os::malloc(_size); + _buffer = (char*)os::malloc(_size, mtInternal); if (_buffer == NULL) { _size = _size >> 1; } @@ -1405,7 +1405,7 @@ class VM_HeapDumper : public VM_GC_Operation { _gc_before_heap_dump = gc_before_heap_dump; _is_segmented_dump = false; _dump_start = (jlong)-1; - _klass_map = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_CLASS_COUNT, true); + _klass_map = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_CLASS_COUNT, true); _stack_traces = NULL; _num_threads = 0; if (oome) { @@ -1426,7 +1426,7 @@ class VM_HeapDumper : public VM_GC_Operation { for (int i=0; i < _num_threads; i++) { delete _stack_traces[i]; } - FREE_C_HEAP_ARRAY(ThreadStackTrace*, _stack_traces); + FREE_C_HEAP_ARRAY(ThreadStackTrace*, _stack_traces, mtInternal); } delete _klass_map; } @@ -1806,7 +1806,7 @@ void VM_HeapDumper::dump_stack_traces() { writer()->write_u4(0); // thread number writer()->write_u4(0); // frame count - _stack_traces = NEW_C_HEAP_ARRAY(ThreadStackTrace*, Threads::number_of_threads()); + _stack_traces = NEW_C_HEAP_ARRAY(ThreadStackTrace*, Threads::number_of_threads(), mtInternal); int frame_serial_num = 0; for (JavaThread* thread = Threads::first(); thread != NULL ; thread = thread->next()) { oop threadObj = thread->threadObj(); @@ -2005,7 +2005,7 @@ void HeapDumper::dump_heap(bool oome) { dump_file_name, os::current_process_id(), dump_file_ext); } const size_t len = strlen(base_path) + 1; - my_path = (char*)os::malloc(len); + my_path = (char*)os::malloc(len, mtInternal); if (my_path == NULL) { warning("Cannot create heap dump file. Out of system memory."); return; @@ -2014,7 +2014,7 @@ void HeapDumper::dump_heap(bool oome) { } else { // Append a sequence number id for dumps following the first const size_t len = strlen(base_path) + max_digit_chars + 2; // for '.' and \0 - my_path = (char*)os::malloc(len); + my_path = (char*)os::malloc(len, mtInternal); if (my_path == NULL) { warning("Cannot create heap dump file. Out of system memory."); return; diff --git a/hotspot/src/share/vm/services/lowMemoryDetector.hpp b/hotspot/src/share/vm/services/lowMemoryDetector.hpp index ce15bad2e21..311a3a418f6 100644 --- a/hotspot/src/share/vm/services/lowMemoryDetector.hpp +++ b/hotspot/src/share/vm/services/lowMemoryDetector.hpp @@ -63,7 +63,7 @@ class OopClosure; class MemoryPool; -class ThresholdSupport : public CHeapObj { +class ThresholdSupport : public CHeapObj { private: bool _support_high_threshold; bool _support_low_threshold; @@ -112,7 +112,7 @@ class ThresholdSupport : public CHeapObj { } }; -class SensorInfo : public CHeapObj { +class SensorInfo : public CHeapObj { private: instanceOop _sensor_obj; bool _sensor_on; diff --git a/hotspot/src/share/vm/services/management.cpp b/hotspot/src/share/vm/services/management.cpp index 48a5b6a0997..7d917e7217d 100644 --- a/hotspot/src/share/vm/services/management.cpp +++ b/hotspot/src/share/vm/services/management.cpp @@ -47,6 +47,7 @@ #include "services/jmm.h" #include "services/lowMemoryDetector.hpp" #include "services/gcNotifier.hpp" +#include "services/nmtDCmd.hpp" #include "services/management.hpp" #include "services/memoryManager.hpp" #include "services/memoryPool.hpp" @@ -121,6 +122,7 @@ void Management::init() { // Registration of the diagnostic commands DCmdRegistrant::register_dcmds(); DCmdRegistrant::register_dcmds_ext(); + DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(true, false)); } void Management::initialize(TRAPS) { diff --git a/hotspot/src/share/vm/services/memBaseline.cpp b/hotspot/src/share/vm/services/memBaseline.cpp new file mode 100644 index 00000000000..5b829751649 --- /dev/null +++ b/hotspot/src/share/vm/services/memBaseline.cpp @@ -0,0 +1,387 @@ +/* + * Copyright (c) 2012, 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. + * + */ +#include "precompiled.hpp" +#include "classfile/systemDictionary.hpp" +#include "memory/allocation.hpp" +#include "services/memBaseline.hpp" +#include "services/memTracker.hpp" + +MemType2Name MemBaseline::MemType2NameMap[NUMBER_OF_MEMORY_TYPE] = { + {mtJavaHeap, "Java Heap"}, + {mtClass, "Class"}, + {mtThreadStack,"Thread Stack"}, + {mtThread, "Thread"}, + {mtCode, "Code"}, + {mtGC, "GC"}, + {mtCompiler, "Compiler"}, + {mtInternal, "Internal"}, + {mtOther, "Other"}, + {mtSymbol, "Symbol"}, + {mtNMT, "Memory Tracking"}, + {mtChunk, "Pooled Free Chunks"}, + {mtNone, "Unknown"} // It can happen when type tagging records are lagging + // behind +}; + +MemBaseline::MemBaseline() { + _baselined = false; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + _malloc_data[index].set_type(MemType2NameMap[index]._flag); + _vm_data[index].set_type(MemType2NameMap[index]._flag); + _arena_data[index].set_type(MemType2NameMap[index]._flag); + } + + _malloc_cs = NULL; + _vm_cs = NULL; + + _number_of_classes = 0; + _number_of_threads = 0; +} + + +void MemBaseline::clear() { + if (_malloc_cs != NULL) { + delete _malloc_cs; + _malloc_cs = NULL; + } + + if (_vm_cs != NULL) { + delete _vm_cs; + _vm_cs = NULL; + } + + reset(); +} + + +void MemBaseline::reset() { + _baselined = false; + _total_vm_reserved = 0; + _total_vm_committed = 0; + _total_malloced = 0; + _number_of_classes = 0; + + if (_malloc_cs != NULL) _malloc_cs->clear(); + if (_vm_cs != NULL) _vm_cs->clear(); + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + _malloc_data[index].clear(); + _vm_data[index].clear(); + _arena_data[index].clear(); + } +} + +MemBaseline::~MemBaseline() { + if (_malloc_cs != NULL) { + delete _malloc_cs; + } + + if (_vm_cs != NULL) { + delete _vm_cs; + } +} + +// baseline malloc'd memory records, generate overall summary and summaries by +// memory types +bool MemBaseline::baseline_malloc_summary(const MemPointerArray* malloc_records) { + MemPointerArrayIteratorImpl mItr((MemPointerArray*)malloc_records); + MemPointerRecord* mptr = (MemPointerRecord*)mItr.current(); + size_t used_arena_size = 0; + int index; + while (mptr != NULL) { + index = flag2index(FLAGS_TO_MEMORY_TYPE(mptr->flags())); + size_t size = mptr->size(); + _total_malloced += size; + _malloc_data[index].inc(size); + if (MemPointerRecord::is_arena_record(mptr->flags())) { + // see if arena size record present + MemPointerRecord* next_p = (MemPointerRecordEx*)mItr.peek_next(); + if (MemPointerRecord::is_arena_size_record(next_p->flags())) { + assert(next_p->is_size_record_of_arena(mptr), "arena records do not match"); + size = next_p->size(); + _arena_data[index].inc(size); + used_arena_size += size; + mItr.next(); + } + } + mptr = (MemPointerRecordEx*)mItr.next(); + } + + // substract used arena size to get size of arena chunk in free list + index = flag2index(mtChunk); + _malloc_data[index].reduce(used_arena_size); + // we really don't know how many chunks in free list, so just set to + // 0 + _malloc_data[index].overwrite_counter(0); + + return true; +} + +// baseline mmap'd memory records, generate overall summary and summaries by +// memory types +bool MemBaseline::baseline_vm_summary(const MemPointerArray* vm_records) { + MemPointerArrayIteratorImpl vItr((MemPointerArray*)vm_records); + VMMemRegion* vptr = (VMMemRegion*)vItr.current(); + int index; + while (vptr != NULL) { + index = flag2index(FLAGS_TO_MEMORY_TYPE(vptr->flags())); + + // we use the number of thread stack to count threads + if (IS_MEMORY_TYPE(vptr->flags(), mtThreadStack)) { + _number_of_threads ++; + } + _total_vm_reserved += vptr->reserved_size(); + _total_vm_committed += vptr->committed_size(); + _vm_data[index].inc(vptr->reserved_size(), vptr->committed_size()); + vptr = (VMMemRegion*)vItr.next(); + } + return true; +} + +// baseline malloc'd memory by callsites, but only the callsites with memory allocation +// over 1KB are stored. +bool MemBaseline::baseline_malloc_details(const MemPointerArray* malloc_records) { + assert(MemTracker::track_callsite(), "detail tracking is off"); + + MemPointerArrayIteratorImpl mItr((MemPointerArray*)malloc_records); + MemPointerRecordEx* mptr = (MemPointerRecordEx*)mItr.current(); + MallocCallsitePointer mp; + + if (_malloc_cs == NULL) { + _malloc_cs = new (std::nothrow) MemPointerArrayImpl(64); + // out of native memory + if (_malloc_cs == NULL) { + return false; + } + } else { + _malloc_cs->clear(); + } + + // baseline memory that is totaled over 1 KB + while (mptr != NULL) { + if (!MemPointerRecord::is_arena_size_record(mptr->flags())) { + // skip thread stacks + if (!IS_MEMORY_TYPE(mptr->flags(), mtThreadStack)) { + if (mp.addr() != mptr->pc()) { + if ((mp.amount()/K) > 0) { + if (!_malloc_cs->append(&mp)) { + return false; + } + } + mp = MallocCallsitePointer(mptr->pc()); + } + mp.inc(mptr->size()); + } + } + mptr = (MemPointerRecordEx*)mItr.next(); + } + + if (mp.addr() != 0 && (mp.amount()/K) > 0) { + if (!_malloc_cs->append(&mp)) { + return false; + } + } + return true; +} + +// baseline mmap'd memory by callsites +bool MemBaseline::baseline_vm_details(const MemPointerArray* vm_records) { + assert(MemTracker::track_callsite(), "detail tracking is off"); + + VMCallsitePointer vp; + MemPointerArrayIteratorImpl vItr((MemPointerArray*)vm_records); + VMMemRegionEx* vptr = (VMMemRegionEx*)vItr.current(); + + if (_vm_cs == NULL) { + _vm_cs = new (std::nothrow) MemPointerArrayImpl(64); + if (_vm_cs == NULL) { + return false; + } + } else { + _vm_cs->clear(); + } + + while (vptr != NULL) { + if (vp.addr() != vptr->pc()) { + if (!_vm_cs->append(&vp)) { + return false; + } + vp = VMCallsitePointer(vptr->pc()); + } + vp.inc(vptr->size(), vptr->committed_size()); + vptr = (VMMemRegionEx*)vItr.next(); + } + if (vp.addr() != 0) { + if (!_vm_cs->append(&vp)) { + return false; + } + } + return true; +} + +// baseline a snapshot. If summary_only = false, memory usages aggregated by +// callsites are also baselined. +bool MemBaseline::baseline(MemSnapshot& snapshot, bool summary_only) { + MutexLockerEx snapshot_locker(snapshot._lock, true); + reset(); + _baselined = baseline_malloc_summary(snapshot._alloc_ptrs) && + baseline_vm_summary(snapshot._vm_ptrs); + _number_of_classes = SystemDictionary::number_of_classes(); + + if (!summary_only && MemTracker::track_callsite() && _baselined) { + ((MemPointerArray*)snapshot._alloc_ptrs)->sort((FN_SORT)malloc_sort_by_pc); + ((MemPointerArray*)snapshot._vm_ptrs)->sort((FN_SORT)vm_sort_by_pc); + _baselined = baseline_malloc_details(snapshot._alloc_ptrs) && + baseline_vm_details(snapshot._vm_ptrs); + ((MemPointerArray*)snapshot._alloc_ptrs)->sort((FN_SORT)malloc_sort_by_addr); + ((MemPointerArray*)snapshot._vm_ptrs)->sort((FN_SORT)vm_sort_by_addr); + } + return _baselined; +} + + +int MemBaseline::flag2index(MEMFLAGS flag) const { + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + if (MemType2NameMap[index]._flag == flag) { + return index; + } + } + assert(false, "no type"); + return -1; +} + +const char* MemBaseline::type2name(MEMFLAGS type) { + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + if (MemType2NameMap[index]._flag == type) { + return MemType2NameMap[index]._name; + } + } + assert(false, "no type"); + return NULL; +} + + +MemBaseline& MemBaseline::operator=(const MemBaseline& other) { + _total_malloced = other._total_malloced; + _total_vm_reserved = other._total_vm_reserved; + _total_vm_committed = other._total_vm_committed; + + _baselined = other._baselined; + _number_of_classes = other._number_of_classes; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + _malloc_data[index] = other._malloc_data[index]; + _vm_data[index] = other._vm_data[index]; + _arena_data[index] = other._arena_data[index]; + } + + if (MemTracker::track_callsite()) { + assert(_malloc_cs != NULL && _vm_cs != NULL, "out of memory"); + assert(other._malloc_cs != NULL && other._vm_cs != NULL, + "not properly baselined"); + _malloc_cs->clear(); + _vm_cs->clear(); + int index; + for (index = 0; index < other._malloc_cs->length(); index ++) { + _malloc_cs->append(other._malloc_cs->at(index)); + } + + for (index = 0; index < other._vm_cs->length(); index ++) { + _vm_cs->append(other._vm_cs->at(index)); + } + } + return *this; +} + +/* compare functions for sorting */ + +// sort snapshot malloc'd records in callsite pc order +int MemBaseline::malloc_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::track_callsite(),"Just check"); + const MemPointerRecordEx* mp1 = (const MemPointerRecordEx*)p1; + const MemPointerRecordEx* mp2 = (const MemPointerRecordEx*)p2; + return UNSIGNED_COMPARE(mp1->pc(), mp2->pc()); +} + +// sort baselined malloc'd records in size order +int MemBaseline::bl_malloc_sort_by_size(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const MallocCallsitePointer* mp1 = (const MallocCallsitePointer*)p1; + const MallocCallsitePointer* mp2 = (const MallocCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp2->amount(), mp1->amount()); +} + +// sort baselined malloc'd records in callsite pc order +int MemBaseline::bl_malloc_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const MallocCallsitePointer* mp1 = (const MallocCallsitePointer*)p1; + const MallocCallsitePointer* mp2 = (const MallocCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); +} + +// sort snapshot mmap'd records in callsite pc order +int MemBaseline::vm_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::track_callsite(),"Just check"); + const VMMemRegionEx* mp1 = (const VMMemRegionEx*)p1; + const VMMemRegionEx* mp2 = (const VMMemRegionEx*)p2; + return UNSIGNED_COMPARE(mp1->pc(), mp2->pc()); +} + +// sort baselined mmap'd records in size (reserved size) order +int MemBaseline::bl_vm_sort_by_size(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const VMCallsitePointer* mp1 = (const VMCallsitePointer*)p1; + const VMCallsitePointer* mp2 = (const VMCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp2->reserved_amount(), mp1->reserved_amount()); +} + +// sort baselined mmap'd records in callsite pc order +int MemBaseline::bl_vm_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const VMCallsitePointer* mp1 = (const VMCallsitePointer*)p1; + const VMCallsitePointer* mp2 = (const VMCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); +} + + +// sort snapshot malloc'd records in memory block address order +int MemBaseline::malloc_sort_by_addr(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const MemPointerRecord* mp1 = (const MemPointerRecord*)p1; + const MemPointerRecord* mp2 = (const MemPointerRecord*)p2; + int delta = UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); + assert(delta != 0, "dup pointer"); + return delta; +} + +// sort snapshot mmap'd records in memory block address order +int MemBaseline::vm_sort_by_addr(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const VMMemRegion* mp1 = (const VMMemRegion*)p1; + const VMMemRegion* mp2 = (const VMMemRegion*)p2; + int delta = UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); + assert(delta != 0, "dup pointer"); + return delta; +} diff --git a/hotspot/src/share/vm/services/memBaseline.hpp b/hotspot/src/share/vm/services/memBaseline.hpp new file mode 100644 index 00000000000..2affa2b96ca --- /dev/null +++ b/hotspot/src/share/vm/services/memBaseline.hpp @@ -0,0 +1,447 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_BASELINE_HPP +#define SHARE_VM_SERVICES_MEM_BASELINE_HPP + +#include "memory/allocation.hpp" +#include "runtime/mutex.hpp" +#include "services/memPtr.hpp" +#include "services/memSnapshot.hpp" + +// compare unsigned number +#define UNSIGNED_COMPARE(a, b) ((a > b) ? 1 : ((a == b) ? 0 : -1)) + +/* + * MallocCallsitePointer and VMCallsitePointer are used + * to baseline memory blocks with their callsite information. + * They are only available when detail tracking is turned + * on. + */ + +/* baselined malloc record aggregated by callsite */ +class MallocCallsitePointer : public MemPointer { + private: + size_t _count; // number of malloc invocation from this callsite + size_t _amount; // total amount of memory malloc-ed from this callsite + + public: + MallocCallsitePointer() { + _count = 0; + _amount = 0; + } + + MallocCallsitePointer(address pc) : MemPointer(pc) { + _count = 0; + _amount = 0; + } + + MallocCallsitePointer& operator=(const MallocCallsitePointer& p) { + MemPointer::operator=(p); + _count = p.count(); + _amount = p.amount(); + return *this; + } + + inline void inc(size_t size) { + _count ++; + _amount += size; + }; + + inline size_t count() const { + return _count; + } + + inline size_t amount() const { + return _amount; + } +}; + +// baselined virtual memory record aggregated by callsite +class VMCallsitePointer : public MemPointer { + private: + size_t _count; // number of invocation from this callsite + size_t _reserved_amount; // total reserved amount + size_t _committed_amount; // total committed amount + + public: + VMCallsitePointer() { + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + VMCallsitePointer(address pc) : MemPointer(pc) { + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + VMCallsitePointer& operator=(const VMCallsitePointer& p) { + MemPointer::operator=(p); + _count = p.count(); + _reserved_amount = p.reserved_amount(); + _committed_amount = p.committed_amount(); + return *this; + } + + inline void inc(size_t reserved, size_t committed) { + _count ++; + _reserved_amount += reserved; + _committed_amount += committed; + } + + inline size_t count() const { + return _count; + } + + inline size_t reserved_amount() const { + return _reserved_amount; + } + + inline size_t committed_amount() const { + return _committed_amount; + } +}; + +// maps a memory type flag to readable name +typedef struct _memType2Name { + MEMFLAGS _flag; + const char* _name; +} MemType2Name; + + +// This class aggregates malloc'd records by memory type +class MallocMem : public _ValueObj { + private: + MEMFLAGS _type; + + size_t _count; + size_t _amount; + + public: + MallocMem() { + _type = mtNone; + _count = 0; + _amount = 0; + } + + MallocMem(MEMFLAGS flags) { + assert(HAS_VALID_MEMORY_TYPE(flags), "no type"); + _type = FLAGS_TO_MEMORY_TYPE(flags); + _count = 0; + _amount = 0; + } + + inline void set_type(MEMFLAGS flag) { + _type = flag; + } + + inline void clear() { + _count = 0; + _amount = 0; + _type = mtNone; + } + + MallocMem& operator=(const MallocMem& m) { + assert(_type == m.type(), "different type"); + _count = m.count(); + _amount = m.amount(); + return *this; + } + + inline void inc(size_t amt) { + _amount += amt; + _count ++; + } + + inline void reduce(size_t amt) { + assert(_amount >= amt, "Just check"); + _amount -= amt; + } + + inline void overwrite_counter(size_t count) { + _count = count; + } + + inline MEMFLAGS type() const { + return _type; + } + + inline bool is_type(MEMFLAGS flags) const { + return FLAGS_TO_MEMORY_TYPE(flags) == _type; + } + + inline size_t count() const { + return _count; + } + + inline size_t amount() const { + return _amount; + } +}; + +// This class records live arena's memory usage +class ArenaMem : public MallocMem { + public: + ArenaMem(MEMFLAGS typeflag): MallocMem(typeflag) { + } + ArenaMem() { } +}; + +// This class aggregates virtual memory by its memory type +class VMMem : public _ValueObj { + private: + MEMFLAGS _type; + + size_t _count; + size_t _reserved_amount; + size_t _committed_amount; + + public: + VMMem() { + _type = mtNone; + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + VMMem(MEMFLAGS flags) { + assert(HAS_VALID_MEMORY_TYPE(flags), "no type"); + _type = FLAGS_TO_MEMORY_TYPE(flags); + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + inline void clear() { + _type = mtNone; + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + inline void set_type(MEMFLAGS flags) { + _type = FLAGS_TO_MEMORY_TYPE(flags); + } + + VMMem& operator=(const VMMem& m) { + assert(_type == m.type(), "different type"); + + _count = m.count(); + _reserved_amount = m.reserved_amount(); + _committed_amount = m.committed_amount(); + return *this; + } + + + inline MEMFLAGS type() const { + return _type; + } + + inline bool is_type(MEMFLAGS flags) const { + return FLAGS_TO_MEMORY_TYPE(flags) == _type; + } + + inline void inc(size_t reserved_amt, size_t committed_amt) { + _reserved_amount += reserved_amt; + _committed_amount += committed_amt; + _count ++; + } + + inline size_t count() const { + return _count; + } + + inline size_t reserved_amount() const { + return _reserved_amount; + } + + inline size_t committed_amount() const { + return _committed_amount; + } +}; + + + +#define NUMBER_OF_MEMORY_TYPE (mt_number_of_types + 1) + +class BaselineReporter; +class BaselineComparisonReporter; + +/* + * This class baselines current memory snapshot. + * A memory baseline summarizes memory usage by memory type, + * aggregates memory usage by callsites when detail tracking + * is on. + */ +class MemBaseline : public _ValueObj { + friend class BaselineReporter; + friend class BaselineComparisonReporter; + + private: + // overall summaries + size_t _total_malloced; + size_t _total_vm_reserved; + size_t _total_vm_committed; + size_t _number_of_classes; + size_t _number_of_threads; + + // if it has properly baselined + bool _baselined; + + // we categorize memory into three categories within the memory type + MallocMem _malloc_data[NUMBER_OF_MEMORY_TYPE]; + VMMem _vm_data[NUMBER_OF_MEMORY_TYPE]; + ArenaMem _arena_data[NUMBER_OF_MEMORY_TYPE]; + + // memory records that aggregate memory usage by callsites. + // only available when detail tracking is on. + MemPointerArray* _malloc_cs; + MemPointerArray* _vm_cs; + + private: + static MemType2Name MemType2NameMap[NUMBER_OF_MEMORY_TYPE]; + + private: + // should not use copy constructor + MemBaseline(MemBaseline& copy) { ShouldNotReachHere(); } + + public: + // create a memory baseline + MemBaseline(); + + virtual ~MemBaseline(); + + inline bool baselined() const { + return _baselined; + } + + MemBaseline& operator=(const MemBaseline& other); + + // reset the baseline for reuse + void clear(); + + // baseline the snapshot + bool baseline(MemSnapshot& snapshot, bool summary_only = true); + + bool baseline(const MemPointerArray* malloc_records, + const MemPointerArray* vm_records, + bool summary_only = true); + + // total malloc'd memory of specified memory type + inline size_t malloc_amount(MEMFLAGS flag) const { + return _malloc_data[flag2index(flag)].amount(); + } + // number of malloc'd memory blocks of specified memory type + inline size_t malloc_count(MEMFLAGS flag) const { + return _malloc_data[flag2index(flag)].count(); + } + // total memory used by arenas of specified memory type + inline size_t arena_amount(MEMFLAGS flag) const { + return _arena_data[flag2index(flag)].amount(); + } + // number of arenas of specified memory type + inline size_t arena_count(MEMFLAGS flag) const { + return _arena_data[flag2index(flag)].count(); + } + // total reserved memory of specified memory type + inline size_t reserved_amount(MEMFLAGS flag) const { + return _vm_data[flag2index(flag)].reserved_amount(); + } + // total committed memory of specified memory type + inline size_t committed_amount(MEMFLAGS flag) const { + return _vm_data[flag2index(flag)].committed_amount(); + } + // total memory (malloc'd + mmap'd + arena) of specified + // memory type + inline size_t total_amount(MEMFLAGS flag) const { + int index = flag2index(flag); + return _malloc_data[index].amount() + + _vm_data[index].reserved_amount() + + _arena_data[index].amount(); + } + + /* overall summaries */ + + // total malloc'd memory in snapshot + inline size_t total_malloc_amount() const { + return _total_malloced; + } + // total mmap'd memory in snapshot + inline size_t total_reserved_amount() const { + return _total_vm_reserved; + } + // total committed memory in snapshot + inline size_t total_committed_amount() const { + return _total_vm_committed; + } + // number of loaded classes + inline size_t number_of_classes() const { + return _number_of_classes; + } + // number of running threads + inline size_t number_of_threads() const { + return _number_of_threads; + } + // lookup human readable name of a memory type + static const char* type2name(MEMFLAGS type); + + private: + // convert memory flag to the index to mapping table + int flag2index(MEMFLAGS flag) const; + + // reset baseline values + void reset(); + + // summarize the records in global snapshot + bool baseline_malloc_summary(const MemPointerArray* malloc_records); + bool baseline_vm_summary(const MemPointerArray* vm_records); + bool baseline_malloc_details(const MemPointerArray* malloc_records); + bool baseline_vm_details(const MemPointerArray* vm_records); + + // print a line of malloc'd memory aggregated by callsite + void print_malloc_callsite(outputStream* st, address pc, size_t size, + size_t count, int diff_amt, int diff_count) const; + // print a line of mmap'd memory aggregated by callsite + void print_vm_callsite(outputStream* st, address pc, size_t rsz, + size_t csz, int diff_rsz, int diff_csz) const; + + // sorting functions for raw records + static int malloc_sort_by_pc(const void* p1, const void* p2); + static int malloc_sort_by_addr(const void* p1, const void* p2); + + static int vm_sort_by_pc(const void* p1, const void* p2); + static int vm_sort_by_addr(const void* p1, const void* p2); + + private: + // sorting functions for baselined records + static int bl_malloc_sort_by_size(const void* p1, const void* p2); + static int bl_vm_sort_by_size(const void* p1, const void* p2); + static int bl_malloc_sort_by_pc(const void* p1, const void* p2); + static int bl_vm_sort_by_pc(const void* p1, const void* p2); +}; + + +#endif // SHARE_VM_SERVICES_MEM_BASELINE_HPP diff --git a/hotspot/src/share/vm/services/memPtr.cpp b/hotspot/src/share/vm/services/memPtr.cpp new file mode 100644 index 00000000000..c11c374fd14 --- /dev/null +++ b/hotspot/src/share/vm/services/memPtr.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#include "precompiled.hpp" +#include "services/memPtr.hpp" +#include "services/memTracker.hpp" + +volatile jint SequenceGenerator::_seq_number = 1; +DEBUG_ONLY(jint SequenceGenerator::_max_seq_number = 1;) +DEBUG_ONLY(volatile unsigned long SequenceGenerator::_generation = 0;) + +jint SequenceGenerator::next() { + jint seq = Atomic::add(1, &_seq_number); + if (seq < 0) { + MemTracker::shutdown(MemTracker::NMT_sequence_overflow); + } + assert(seq > 0, "counter overflow"); + DEBUG_ONLY(_max_seq_number = (seq > _max_seq_number) ? seq : _max_seq_number;) + return seq; +} + + + +bool VMMemRegion::contains(const VMMemRegion* mr) const { + assert(base() != 0, "no base address"); + assert(size() != 0 || committed_size() != 0, + "no range"); + address base_addr = base(); + address end_addr = base_addr + + (is_reserve_record()? reserved_size(): committed_size()); + if (mr->is_reserve_record()) { + if (mr->base() == base_addr && mr->size() == size()) { + // the same range + return true; + } + return false; + } else if (mr->is_commit_record() || mr->is_uncommit_record()) { + assert(mr->base() != 0 && mr->committed_size() > 0, + "bad record"); + return (mr->base() >= base_addr && + (mr->base() + mr->committed_size()) <= end_addr); + } else if (mr->is_type_tagging_record()) { + assert(mr->base() != 0, "no base"); + return mr->base() == base_addr; + } else if (mr->is_release_record()) { + assert(mr->base() != 0 && mr->size() > 0, + "bad record"); + return (mr->base() == base_addr && mr->size() == size()); + } else { + assert(false, "what happened?"); + return false; + } +} diff --git a/hotspot/src/share/vm/services/memPtr.hpp b/hotspot/src/share/vm/services/memPtr.hpp new file mode 100644 index 00000000000..b8b41c326f1 --- /dev/null +++ b/hotspot/src/share/vm/services/memPtr.hpp @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_PTR_HPP +#define SHARE_VM_SERVICES_MEM_PTR_HPP + +#include "memory/allocation.hpp" +#include "runtime/atomic.hpp" +#include "runtime/os.hpp" +#include "runtime/safepoint.hpp" + +/* + * global sequence generator that generates sequence numbers to serialize + * memory records. + */ +class SequenceGenerator : AllStatic { + public: + static jint next(); + + // peek last sequence number + static jint peek() { + return _seq_number; + } + + // reset sequence number + static void reset() { + assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); + _seq_number = 1; + DEBUG_ONLY(_generation ++;) + }; + + DEBUG_ONLY(static unsigned long current_generation() { return (unsigned long)_generation; }) + DEBUG_ONLY(static jint max_seq_num() { return _max_seq_number; }) + + private: + static volatile jint _seq_number; + DEBUG_ONLY(static jint _max_seq_number; ) + DEBUG_ONLY(static volatile unsigned long _generation; ) +}; + +/* + * followings are the classes that are used to hold memory activity records in different stages. + * MemPointer + * |--------MemPointerRecord + * | + * |----MemPointerRecordEx + * | | + * | |-------SeqMemPointerRecordEx + * | + * |----SeqMemPointerRecord + * | + * |----VMMemRegion + * | + * |-----VMMemRegionEx + * + * + * prefix 'Seq' - sequenced, the record contains a sequence number + * surfix 'Ex' - extension, the record contains a caller's pc + * + * per-thread recorder : SeqMemPointerRecord(Ex) + * snapshot staging : SeqMemPointerRecord(Ex) + * snapshot : MemPointerRecord(Ex) and VMMemRegion(Ex) + * + */ + +/* + * class that wraps an address to a memory block, + * the memory pointer either points to a malloc'd + * memory block, or a mmap'd memory block + */ +class MemPointer : public _ValueObj { + public: + MemPointer(): _addr(0) { } + MemPointer(address addr): _addr(addr) { } + + MemPointer(const MemPointer& copy_from) { + _addr = copy_from.addr(); + } + + inline address addr() const { + return _addr; + } + + inline operator address() const { + return addr(); + } + + inline bool operator == (const MemPointer& other) const { + return addr() == other.addr(); + } + + inline MemPointer& operator = (const MemPointer& other) { + _addr = other.addr(); + return *this; + } + + protected: + inline void set_addr(address addr) { _addr = addr; } + + protected: + // memory address + address _addr; +}; + +/* MemPointerRecord records an activityand associated + * attributes on a memory block. + */ +class MemPointerRecord : public MemPointer { + private: + MEMFLAGS _flags; + size_t _size; + +public: + /* extension of MemoryType enum + * see share/vm/memory/allocation.hpp for details. + * + * The tag values are associated to sorting orders, so be + * careful if changes are needed. + * The allocation records should be sorted ahead of tagging + * records, which in turn ahead of deallocation records + */ + enum MemPointerTags { + tag_alloc = 0x0001, // malloc or reserve record + tag_commit = 0x0002, // commit record + tag_type = 0x0003, // tag virtual memory to a memory type + tag_uncommit = 0x0004, // uncommit record + tag_release = 0x0005, // free or release record + tag_size = 0x0006, // arena size + tag_masks = 0x0007, // all tag bits + vmBit = 0x0008 + }; + + /* helper functions to interpret the tagging flags */ + + inline static bool is_allocation_record(MEMFLAGS flags) { + return (flags & tag_masks) == tag_alloc; + } + + inline static bool is_deallocation_record(MEMFLAGS flags) { + return (flags & tag_masks) == tag_release; + } + + inline static bool is_arena_record(MEMFLAGS flags) { + return (flags & (otArena | tag_size)) == otArena; + } + + inline static bool is_arena_size_record(MEMFLAGS flags) { + return (flags & (otArena | tag_size)) == (otArena | tag_size); + } + + inline static bool is_virtual_memory_record(MEMFLAGS flags) { + return (flags & vmBit) != 0; + } + + inline static bool is_virtual_memory_reserve_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_alloc | vmBit); + } + + inline static bool is_virtual_memory_commit_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_commit | vmBit); + } + + inline static bool is_virtual_memory_uncommit_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_uncommit | vmBit); + } + + inline static bool is_virtual_memory_release_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_release | vmBit); + } + + inline static bool is_virtual_memory_type_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_type | vmBit); + } + + /* tagging flags */ + inline static MEMFLAGS malloc_tag() { return tag_alloc; } + inline static MEMFLAGS free_tag() { return tag_release; } + inline static MEMFLAGS arena_size_tag() { return tag_size | otArena; } + inline static MEMFLAGS virtual_memory_tag() { return vmBit; } + inline static MEMFLAGS virtual_memory_reserve_tag() { return (tag_alloc | vmBit); } + inline static MEMFLAGS virtual_memory_commit_tag() { return (tag_commit | vmBit); } + inline static MEMFLAGS virtual_memory_uncommit_tag(){ return (tag_uncommit | vmBit); } + inline static MEMFLAGS virtual_memory_release_tag() { return (tag_release | vmBit); } + inline static MEMFLAGS virtual_memory_type_tag() { return (tag_type | vmBit); } + + public: + MemPointerRecord(): _size(0), _flags(mtNone) { } + + MemPointerRecord(address addr, MEMFLAGS memflags, size_t size = 0): + MemPointer(addr), _flags(memflags), _size(size) { } + + MemPointerRecord(const MemPointerRecord& copy_from): + MemPointer(copy_from), _flags(copy_from.flags()), + _size(copy_from.size()) { + } + + /* MemPointerRecord is not sequenced, it always return + * 0 to indicate non-sequenced + */ + virtual jint seq() const { return 0; } + + inline size_t size() const { return _size; } + inline void set_size(size_t size) { _size = size; } + + inline MEMFLAGS flags() const { return _flags; } + inline void set_flags(MEMFLAGS flags) { _flags = flags; } + + MemPointerRecord& operator= (const MemPointerRecord& ptr) { + MemPointer::operator=(ptr); + _flags = ptr.flags(); +#ifdef ASSERT + if (IS_ARENA_OBJ(_flags)) { + assert(!is_vm_pointer(), "wrong flags"); + assert((_flags & ot_masks) == otArena, "wrong flags"); + } +#endif + _size = ptr.size(); + return *this; + } + + // if the pointer represents a malloc-ed memory address + inline bool is_malloced_pointer() const { + return !is_vm_pointer(); + } + + // if the pointer represents a virtual memory address + inline bool is_vm_pointer() const { + return is_virtual_memory_record(_flags); + } + + // if this record records a 'malloc' or virtual memory + // 'reserve' call + inline bool is_allocation_record() const { + return is_allocation_record(_flags); + } + + // if this record records a size information of an arena + inline bool is_arena_size_record() const { + return is_arena_size_record(_flags); + } + + // if this pointer represents an address to an arena object + inline bool is_arena_record() const { + return is_arena_record(_flags); + } + + // if this record represents a size information of specific arena + inline bool is_size_record_of_arena(const MemPointerRecord* arena_rc) { + assert(is_arena_size_record(), "not size record"); + assert(arena_rc->is_arena_record(), "not arena record"); + return (arena_rc->addr() + sizeof(void*)) == addr(); + } + + // if this record records a 'free' or virtual memory 'free' call + inline bool is_deallocation_record() const { + return is_deallocation_record(_flags); + } + + // if this record records a virtual memory 'commit' call + inline bool is_commit_record() const { + return is_virtual_memory_commit_record(_flags); + } + + // if this record records a virtual memory 'uncommit' call + inline bool is_uncommit_record() const { + return is_virtual_memory_uncommit_record(_flags); + } + + // if this record is a tagging record of a virtual memory block + inline bool is_type_tagging_record() const { + return is_virtual_memory_type_record(_flags); + } +}; + +// MemPointerRecordEx also records callsite pc, from where +// the memory block is allocated +class MemPointerRecordEx : public MemPointerRecord { + private: + address _pc; // callsite pc + + public: + MemPointerRecordEx(): _pc(0) { } + + MemPointerRecordEx(address addr, MEMFLAGS memflags, size_t size = 0, address pc = 0): + MemPointerRecord(addr, memflags, size), _pc(pc) {} + + MemPointerRecordEx(const MemPointerRecordEx& copy_from): + MemPointerRecord(copy_from), _pc(copy_from.pc()) {} + + inline address pc() const { return _pc; } + + void init(const MemPointerRecordEx* mpe) { + MemPointerRecord::operator=(*mpe); + _pc = mpe->pc(); + } + + void init(const MemPointerRecord* mp) { + MemPointerRecord::operator=(*mp); + _pc = 0; + } +}; + +// a virtual memory region +class VMMemRegion : public MemPointerRecord { + private: + // committed size + size_t _committed_size; + +public: + VMMemRegion(): _committed_size(0) { } + + void init(const MemPointerRecord* mp) { + assert(mp->is_vm_pointer(), "not virtual memory pointer"); + _addr = mp->addr(); + if (mp->is_commit_record() || mp->is_uncommit_record()) { + _committed_size = mp->size(); + set_size(_committed_size); + } else { + set_size(mp->size()); + _committed_size = 0; + } + set_flags(mp->flags()); + } + + VMMemRegion& operator=(const VMMemRegion& other) { + MemPointerRecord::operator=(other); + _committed_size = other.committed_size(); + return *this; + } + + inline bool is_reserve_record() const { + return is_virtual_memory_reserve_record(flags()); + } + + inline bool is_release_record() const { + return is_virtual_memory_release_record(flags()); + } + + // resize reserved VM range + inline void set_reserved_size(size_t new_size) { + assert(new_size >= committed_size(), "resize"); + set_size(new_size); + } + + inline void commit(size_t size) { + _committed_size += size; + } + + inline void uncommit(size_t size) { + if (_committed_size >= size) { + _committed_size -= size; + } else { + _committed_size = 0; + } + } + + /* + * if this virtual memory range covers whole range of + * the other VMMemRegion + */ + bool contains(const VMMemRegion* mr) const; + + /* base address of this virtual memory range */ + inline address base() const { + return addr(); + } + + /* tag this virtual memory range to the specified memory type */ + inline void tag(MEMFLAGS f) { + set_flags(flags() | (f & mt_masks)); + } + + // release part of memory range + inline void partial_release(address add, size_t sz) { + assert(add >= addr() && add < addr() + size(), "not valid address"); + // for now, it can partially release from the both ends, + // but not in the middle + assert(add == addr() || (add + sz) == (addr() + size()), + "release in the middle"); + if (add == addr()) { + set_addr(add + sz); + set_size(size() - sz); + } else { + set_size(size() - sz); + } + } + + // the committed size of the virtual memory block + inline size_t committed_size() const { + return _committed_size; + } + + // the reserved size of the virtual memory block + inline size_t reserved_size() const { + return size(); + } +}; + +class VMMemRegionEx : public VMMemRegion { + private: + jint _seq; // sequence number + + public: + VMMemRegionEx(): _pc(0) { } + + void init(const MemPointerRecordEx* mpe) { + VMMemRegion::init(mpe); + _pc = mpe->pc(); + } + + void init(const MemPointerRecord* mpe) { + VMMemRegion::init(mpe); + _pc = 0; + } + + VMMemRegionEx& operator=(const VMMemRegionEx& other) { + VMMemRegion::operator=(other); + _pc = other.pc(); + return *this; + } + + inline address pc() const { return _pc; } + private: + address _pc; +}; + +/* + * Sequenced memory record + */ +class SeqMemPointerRecord : public MemPointerRecord { + private: + jint _seq; // sequence number + + public: + SeqMemPointerRecord(): _seq(0){ } + + SeqMemPointerRecord(address addr, MEMFLAGS flags, size_t size) + : MemPointerRecord(addr, flags, size) { + _seq = SequenceGenerator::next(); + } + + SeqMemPointerRecord(const SeqMemPointerRecord& copy_from) + : MemPointerRecord(copy_from) { + _seq = copy_from.seq(); + } + + SeqMemPointerRecord& operator= (const SeqMemPointerRecord& ptr) { + MemPointerRecord::operator=(ptr); + _seq = ptr.seq(); + return *this; + } + + inline jint seq() const { + return _seq; + } +}; + + + +class SeqMemPointerRecordEx : public MemPointerRecordEx { + private: + jint _seq; // sequence number + + public: + SeqMemPointerRecordEx(): _seq(0) { } + + SeqMemPointerRecordEx(address addr, MEMFLAGS flags, size_t size, + address pc): MemPointerRecordEx(addr, flags, size, pc) { + _seq = SequenceGenerator::next(); + } + + SeqMemPointerRecordEx(const SeqMemPointerRecordEx& copy_from) + : MemPointerRecordEx(copy_from) { + _seq = copy_from.seq(); + } + + SeqMemPointerRecordEx& operator= (const SeqMemPointerRecordEx& ptr) { + MemPointerRecordEx::operator=(ptr); + _seq = ptr.seq(); + return *this; + } + + inline jint seq() const { + return _seq; + } +}; + +#endif // SHARE_VM_SERVICES_MEM_PTR_HPP diff --git a/hotspot/src/share/vm/services/memPtrArray.hpp b/hotspot/src/share/vm/services/memPtrArray.hpp new file mode 100644 index 00000000000..1b1b570ac0f --- /dev/null +++ b/hotspot/src/share/vm/services/memPtrArray.hpp @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2012, 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. + * + */ +#ifndef SHARE_VM_UTILITIES_MEM_PTR_ARRAY_HPP +#define SHARE_VM_UTILITIES_MEM_PTR_ARRAY_HPP + +#include "memory/allocation.hpp" +#include "services/memPtr.hpp" + +class MemPtr; +class MemRecorder; +class ArenaInfo; +class MemSnapshot; + +extern "C" { + typedef int (*FN_SORT)(const void *, const void *); +} + + +// Memory pointer array interface. This array is used by NMT to hold +// various memory block information. +// The memory pointer arrays are usually walked with their iterators. + +class MemPointerArray : public CHeapObj { + public: + virtual ~MemPointerArray() { } + + // return true if it can not allocate storage for the data + virtual bool out_of_memory() const = 0; + virtual bool is_empty() const = 0; + virtual bool is_full() = 0; + virtual int length() const = 0; + virtual void clear() = 0; + virtual bool append(MemPointer* ptr) = 0; + virtual bool insert_at(MemPointer* ptr, int pos) = 0; + virtual bool remove_at(int pos) = 0; + virtual MemPointer* at(int index) const = 0; + virtual void sort(FN_SORT fn) = 0; + virtual size_t instance_size() const = 0; + virtual bool shrink() = 0; + + debug_only(virtual int capacity() const = 0;) +}; + +// Iterator interface +class MemPointerArrayIterator VALUE_OBJ_CLASS_SPEC { + public: + // return the pointer at current position + virtual MemPointer* current() const = 0; + // return the next pointer and advance current position + virtual MemPointer* next() = 0; + // return next pointer without advancing current position + virtual MemPointer* peek_next() const = 0; + // return previous pointer without changing current position + virtual MemPointer* peek_prev() const = 0; + // remove the pointer at current position + virtual void remove() = 0; + // insert the pointer at current position + virtual bool insert(MemPointer* ptr) = 0; + // insert specified element after current position and + // move current position to newly inserted position + virtual bool insert_after(MemPointer* ptr) = 0; +}; + +// implementation class +class MemPointerArrayIteratorImpl : public MemPointerArrayIterator { +#ifdef ASSERT + protected: +#else + private: +#endif + MemPointerArray* _array; + int _pos; + + public: + MemPointerArrayIteratorImpl(MemPointerArray* arr) { + assert(arr != NULL, "Parameter check"); + _array = arr; + _pos = 0; + } + + virtual MemPointer* current() const { + if (_pos < _array->length()) { + return _array->at(_pos); + } + return NULL; + } + + virtual MemPointer* next() { + if (_pos + 1 < _array->length()) { + return _array->at(++_pos); + } + _pos = _array->length(); + return NULL; + } + + virtual MemPointer* peek_next() const { + if (_pos + 1 < _array->length()) { + return _array->at(_pos + 1); + } + return NULL; + } + + virtual MemPointer* peek_prev() const { + if (_pos > 0) { + return _array->at(_pos - 1); + } + return NULL; + } + + virtual void remove() { + if (_pos < _array->length()) { + _array->remove_at(_pos); + } + } + + virtual bool insert(MemPointer* ptr) { + return _array->insert_at(ptr, _pos); + } + + virtual bool insert_after(MemPointer* ptr) { + if (_array->insert_at(ptr, _pos + 1)) { + _pos ++; + return true; + } + return false; + } +}; + + + +// Memory pointer array implementation. +// This implementation implements expandable array +#define DEFAULT_PTR_ARRAY_SIZE 1024 + +template class MemPointerArrayImpl : public MemPointerArray { + private: + int _max_size; + int _size; + bool _init_elements; + E* _data; + + public: + MemPointerArrayImpl(int initial_size = DEFAULT_PTR_ARRAY_SIZE, bool init_elements = true): + _max_size(initial_size), _size(0), _init_elements(init_elements) { + _data = (E*)raw_allocate(sizeof(E), initial_size); + if (_init_elements) { + for (int index = 0; index < _max_size; index ++) { + ::new ((void*)&_data[index]) E(); + } + } + } + + virtual ~MemPointerArrayImpl() { + if (_data != NULL) { + raw_free(_data); + } + } + + public: + bool out_of_memory() const { + return (_data == NULL); + } + + size_t instance_size() const { + return sizeof(MemPointerArrayImpl) + _max_size * sizeof(E); + } + + bool is_empty() const { + assert(_data != NULL, "Just check"); + return _size == 0; + } + + bool is_full() { + assert(_data != NULL, "Just check"); + if (_size < _max_size) { + return false; + } else { + return !expand_array(); + } + } + + int length() const { + assert(_data != NULL, "Just check"); + return _size; + } + + debug_only(int capacity() const { return _max_size; }) + + void clear() { + assert(_data != NULL, "Just check"); + _size = 0; + } + + bool append(MemPointer* ptr) { + assert(_data != NULL, "Just check"); + if (is_full()) { + return false; + } + _data[_size ++] = *(E*)ptr; + return true; + } + + bool insert_at(MemPointer* ptr, int pos) { + assert(_data != NULL, "Just check"); + if (is_full()) { + return false; + } + for (int index = _size; index > pos; index --) { + _data[index] = _data[index - 1]; + } + _data[pos] = *(E*)ptr; + _size ++; + return true; + } + + bool remove_at(int pos) { + assert(_data != NULL, "Just check"); + if (_size <= pos && pos >= 0) { + return false; + } + -- _size; + + for (int index = pos; index < _size; index ++) { + _data[index] = _data[index + 1]; + } + return true; + } + + MemPointer* at(int index) const { + assert(_data != NULL, "Just check"); + assert(index >= 0 && index < _size, "illegal index"); + return &_data[index]; + } + + bool shrink() { + float used = ((float)_size) / ((float)_max_size); + if (used < 0.40) { + E* old_ptr = _data; + int new_size = ((_max_size) / (2 * DEFAULT_PTR_ARRAY_SIZE) + 1) * DEFAULT_PTR_ARRAY_SIZE; + _data = (E*)raw_reallocate(_data, sizeof(E), new_size); + if (_data == NULL) { + _data = old_ptr; + return false; + } else { + _max_size = new_size; + return true; + } + } + return false; + } + + void sort(FN_SORT fn) { + assert(_data != NULL, "Just check"); + qsort((void*)_data, _size, sizeof(E), fn); + } + + private: + bool expand_array() { + assert(_data != NULL, "Not yet allocated"); + E* old_ptr = _data; + if ((_data = (E*)raw_reallocate((void*)_data, sizeof(E), + _max_size + DEFAULT_PTR_ARRAY_SIZE)) == NULL) { + _data = old_ptr; + return false; + } else { + _max_size += DEFAULT_PTR_ARRAY_SIZE; + if (_init_elements) { + for (int index = _size; index < _max_size; index ++) { + ::new ((void*)&_data[index]) E(); + } + } + return true; + } + } + + void* raw_allocate(size_t elementSize, int items) { + return os::malloc(elementSize * items, mtNMT); + } + + void* raw_reallocate(void* ptr, size_t elementSize, int items) { + return os::realloc(ptr, elementSize * items, mtNMT); + } + + void raw_free(void* ptr) { + os::free(ptr, mtNMT); + } +}; + +#endif // SHARE_VM_UTILITIES_MEM_PTR_ARRAY_HPP diff --git a/hotspot/src/share/vm/services/memRecorder.cpp b/hotspot/src/share/vm/services/memRecorder.cpp new file mode 100644 index 00000000000..52b2eae62a0 --- /dev/null +++ b/hotspot/src/share/vm/services/memRecorder.cpp @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#include "precompiled.hpp" + +#include "runtime/atomic.hpp" +#include "services/memBaseline.hpp" +#include "services/memRecorder.hpp" +#include "services/memPtr.hpp" +#include "services/memTracker.hpp" + +MemPointer* SequencedRecordIterator::next_record() { + MemPointer* itr_cur = _itr.current(); + if (itr_cur == NULL) return NULL; + MemPointer* itr_next = _itr.next(); + + while (itr_next != NULL && + same_kind((MemPointerRecord*)itr_cur, (MemPointerRecord*)itr_next)) { + itr_cur = itr_next; + itr_next = _itr.next(); + } + + return itr_cur; +} + + +debug_only(volatile jint MemRecorder::_instance_count = 0;) + +MemRecorder::MemRecorder() { + assert(MemTracker::is_on(), "Native memory tracking is off"); + debug_only(Atomic::inc(&_instance_count);) + debug_only(set_generation();) + + if (MemTracker::track_callsite()) { + _pointer_records = new (std::nothrow)FixedSizeMemPointerArray(); + } else { + _pointer_records = new (std::nothrow)FixedSizeMemPointerArray(); + } + _next = NULL; + + + if (_pointer_records != NULL) { + // recode itself + record((address)this, (MemPointerRecord::malloc_tag()|mtNMT|otNMTRecorder), + sizeof(MemRecorder), CALLER_PC); + record((address)_pointer_records, (MemPointerRecord::malloc_tag()|mtNMT|otNMTRecorder), + _pointer_records->instance_size(),CURRENT_PC); + } +} + +MemRecorder::~MemRecorder() { + if (_pointer_records != NULL) { + if (MemTracker::is_on()) { + MemTracker::record_free((address)_pointer_records, mtNMT); + MemTracker::record_free((address)this, mtNMT); + } + delete _pointer_records; + } + if (_next != NULL) { + delete _next; + } + +#ifdef ASSERT + Atomic::dec(&_instance_count); +#endif +} + +// Sorting order: +// 1. memory block address +// 2. mem pointer record tags +// 3. sequence number +int MemRecorder::sort_record_fn(const void* e1, const void* e2) { + const MemPointerRecord* p1 = (const MemPointerRecord*)e1; + const MemPointerRecord* p2 = (const MemPointerRecord*)e2; + int delta = UNSIGNED_COMPARE(p1->addr(), p2->addr()); + if (delta == 0) { + int df = UNSIGNED_COMPARE((p1->flags() & MemPointerRecord::tag_masks), + (p2->flags() & MemPointerRecord::tag_masks)); + if (df == 0) { + assert(p1->seq() != p2->seq(), "dup seq"); + return p1->seq() - p2->seq(); + } else { + return df; + } + } else { + return delta; + } +} + +bool MemRecorder::record(address p, MEMFLAGS flags, size_t size, address pc) { +#ifdef ASSERT + if (MemPointerRecord::is_virtual_memory_record(flags)) { + assert((flags & MemPointerRecord::tag_masks) != 0, "bad virtual memory record"); + } else { + assert((flags & MemPointerRecord::tag_masks) == MemPointerRecord::malloc_tag() || + (flags & MemPointerRecord::tag_masks) == MemPointerRecord::free_tag() || + IS_ARENA_OBJ(flags), + "bad malloc record"); + } + // a recorder should only hold records within the same generation + unsigned long cur_generation = SequenceGenerator::current_generation(); + assert(cur_generation == _generation, + "this thread did not enter sync point"); +#endif + + if (MemTracker::track_callsite()) { + SeqMemPointerRecordEx ap(p, flags, size, pc); + debug_only(check_dup_seq(ap.seq());) + return _pointer_records->append(&ap); + } else { + SeqMemPointerRecord ap(p, flags, size); + debug_only(check_dup_seq(ap.seq());) + return _pointer_records->append(&ap); + } +} + + // iterator for alloc pointers +SequencedRecordIterator MemRecorder::pointer_itr() { + assert(_pointer_records != NULL, "just check"); + _pointer_records->sort((FN_SORT)sort_record_fn); + return SequencedRecordIterator(_pointer_records); +} + + +#ifdef ASSERT +void MemRecorder::set_generation() { + _generation = SequenceGenerator::current_generation(); +} + +void MemRecorder::check_dup_seq(jint seq) const { + MemPointerArrayIteratorImpl itr(_pointer_records); + MemPointerRecord* rc = (MemPointerRecord*)itr.current(); + while (rc != NULL) { + assert(rc->seq() != seq, "dup seq"); + rc = (MemPointerRecord*)itr.next(); + } +} + +#endif diff --git a/hotspot/src/share/vm/services/memRecorder.hpp b/hotspot/src/share/vm/services/memRecorder.hpp new file mode 100644 index 00000000000..c243564db94 --- /dev/null +++ b/hotspot/src/share/vm/services/memRecorder.hpp @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_RECORDER_HPP +#define SHARE_VM_SERVICES_MEM_RECORDER_HPP + +#include "memory/allocation.hpp" +#include "runtime/os.hpp" +#include "services/memPtrArray.hpp" + +class MemSnapshot; +class MemTracker; +class MemTrackWorker; + +// Fixed size memory pointer array implementation +template class FixedSizeMemPointerArray : + public MemPointerArray { + // This implementation is for memory recorder only + friend class MemRecorder; + + private: + E _data[SIZE]; + int _size; + + protected: + FixedSizeMemPointerArray(bool init_elements = false): + _size(0){ + if (init_elements) { + for (int index = 0; index < SIZE; index ++) { + ::new ((void*)&_data[index]) E(); + } + } + } + + void* operator new(size_t size, const std::nothrow_t& nothrow_constant) { + // the instance is part of memRecorder, needs to be tagged with 'otNMTRecorder' + // to avoid recursion + return os::malloc(size, (mtNMT | otNMTRecorder)); + } + + void* operator new(size_t size) { + assert(false, "use nothrow version"); + return NULL; + } + + void operator delete(void* p) { + os::free(p, (mtNMT | otNMTRecorder)); + } + + // instance size + inline size_t instance_size() const { + return sizeof(FixedSizeMemPointerArray); + } + + debug_only(int capacity() const { return SIZE; }) + + public: + // implementation of public interface + bool out_of_memory() const { return false; } + bool is_empty() const { return _size == 0; } + bool is_full() { return length() >= SIZE; } + int length() const { return _size; } + + void clear() { + _size = 0; + } + + bool append(MemPointer* ptr) { + if (is_full()) return false; + _data[_size ++] = *(E*)ptr; + return true; + } + + virtual bool insert_at(MemPointer* p, int pos) { + assert(false, "append only"); + return false; + } + + virtual bool remove_at(int pos) { + assert(false, "not supported"); + return false; + } + + MemPointer* at(int index) const { + assert(index >= 0 && index < length(), + "parameter check"); + return ((E*)&_data[index]); + } + + void sort(FN_SORT fn) { + qsort((void*)_data, _size, sizeof(E), fn); + } + + bool shrink() { + return false; + } +}; + + +// This iterator requires pre-sorted MemPointerArray, which is sorted by: +// 1. address +// 2. allocation type +// 3. sequence number +// During the array walking, iterator collapses pointers with the same +// address and allocation type, and only returns the one with highest +// sequence number. +// +// This is read-only iterator, update methods are asserted. +class SequencedRecordIterator : public MemPointerArrayIterator { + private: + MemPointerArrayIteratorImpl _itr; + MemPointer* _cur; + + public: + SequencedRecordIterator(const MemPointerArray* arr): + _itr(const_cast(arr)) { + _cur = next_record(); + } + + SequencedRecordIterator(const SequencedRecordIterator& itr): + _itr(itr._itr) { + _cur = next_record(); + } + + // return the pointer at current position + virtual MemPointer* current() const { + return _cur; + }; + + // return the next pointer and advance current position + virtual MemPointer* next() { + _cur = next_record(); + return _cur; + } + + // return the next pointer without advancing current position + virtual MemPointer* peek_next() const { + assert(false, "not implemented"); + return NULL; + + } + // return the previous pointer without changing current position + virtual MemPointer* peek_prev() const { + assert(false, "not implemented"); + return NULL; + } + + // remove the pointer at current position + virtual void remove() { + assert(false, "read-only iterator"); + }; + // insert the pointer at current position + virtual bool insert(MemPointer* ptr) { + assert(false, "read-only iterator"); + return false; + } + + virtual bool insert_after(MemPointer* ptr) { + assert(false, "read-only iterator"); + return false; + } + private: + // collapse the 'same kind' of records, and return this 'kind' of + // record with highest sequence number + MemPointer* next_record(); + + // Test if the two records are the same kind: the same memory block and allocation + // type. + inline bool same_kind(const MemPointerRecord* p1, const MemPointerRecord* p2) const { + return (p1->addr() == p2->addr() && + (p1->flags() &MemPointerRecord::tag_masks) == + (p2->flags() & MemPointerRecord::tag_masks)); + } +}; + + + +#define DEFAULT_RECORDER_PTR_ARRAY_SIZE 512 + +class MemRecorder : public CHeapObj { + friend class MemSnapshot; + friend class MemTracker; + friend class MemTrackWorker; + + protected: + // the array that holds memory records + MemPointerArray* _pointer_records; + + private: + // used for linked list + MemRecorder* _next; + // active recorder can only record a certain generation data + debug_only(unsigned long _generation;) + + protected: + _NOINLINE_ MemRecorder(); + ~MemRecorder(); + + // record a memory operation + bool record(address addr, MEMFLAGS flags, size_t size, address caller_pc = 0); + + // linked list support + inline void set_next(MemRecorder* rec) { + _next = rec; + } + + inline MemRecorder* next() const { + return _next; + } + + // if the recorder is full + inline bool is_full() const { + assert(_pointer_records != NULL, "just check"); + return _pointer_records->is_full(); + } + + // if running out of memory when initializing recorder's internal + // data + inline bool out_of_memory() const { + return (_pointer_records == NULL || + _pointer_records->out_of_memory()); + } + + inline void clear() { + assert(_pointer_records != NULL, "Just check"); + _pointer_records->clear(); + } + + SequencedRecordIterator pointer_itr(); + + public: + // number of MemRecorder instance + debug_only(static volatile jint _instance_count;) + + private: + // sorting function, sort records into following order + // 1. memory address + // 2. allocation type + // 3. sequence number + static int sort_record_fn(const void* e1, const void* e2); + + debug_only(void check_dup_seq(jint seq) const;) + debug_only(void set_generation();) +}; + +#endif // SHARE_VM_SERVICES_MEM_RECORDER_HPP diff --git a/hotspot/src/share/vm/services/memReporter.cpp b/hotspot/src/share/vm/services/memReporter.cpp new file mode 100644 index 00000000000..783d951de14 --- /dev/null +++ b/hotspot/src/share/vm/services/memReporter.cpp @@ -0,0 +1,560 @@ +/* + * Copyright (c) 2012 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. + * + */ +#include "precompiled.hpp" +#include "classfile/systemDictionary.hpp" +#include "runtime/os.hpp" +#include "services/memReporter.hpp" +#include "services/memPtrArray.hpp" +#include "services/memTracker.hpp" + +const char* BaselineOutputer::memory_unit(size_t scale) { + switch(scale) { + case K: return "KB"; + case M: return "MB"; + case G: return "GB"; + } + ShouldNotReachHere(); + return NULL; +} + + +void BaselineReporter::report_baseline(const MemBaseline& baseline, bool summary_only) { + assert(MemTracker::is_on(), "Native memory tracking is off"); + _outputer.start(scale()); + _outputer.total_usage( + amount_in_current_scale(baseline.total_malloc_amount() + baseline.total_reserved_amount()), + amount_in_current_scale(baseline.total_malloc_amount() + baseline.total_committed_amount())); + + _outputer.num_of_classes(baseline.number_of_classes()); + _outputer.num_of_threads(baseline.number_of_threads()); + + report_summaries(baseline); + if (!summary_only && MemTracker::track_callsite()) { + report_callsites(baseline); + } + _outputer.done(); +} + +void BaselineReporter::report_summaries(const MemBaseline& baseline) { + _outputer.start_category_summary(); + MEMFLAGS type; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + type = MemBaseline::MemType2NameMap[index]._flag; + _outputer.category_summary(type, + amount_in_current_scale(baseline.reserved_amount(type)), + amount_in_current_scale(baseline.committed_amount(type)), + amount_in_current_scale(baseline.malloc_amount(type)), + baseline.malloc_count(type), + amount_in_current_scale(baseline.arena_amount(type)), + baseline.arena_count(type)); + } + + _outputer.done_category_summary(); +} + +void BaselineReporter::report_callsites(const MemBaseline& baseline) { + _outputer.start_callsite(); + MemBaseline* pBL = const_cast(&baseline); + + pBL->_malloc_cs->sort((FN_SORT)MemBaseline::bl_malloc_sort_by_size); + pBL->_vm_cs->sort((FN_SORT)MemBaseline::bl_vm_sort_by_size); + + // walk malloc callsites + MemPointerArrayIteratorImpl malloc_itr(pBL->_malloc_cs); + MallocCallsitePointer* malloc_callsite = + (MallocCallsitePointer*)malloc_itr.current(); + while (malloc_callsite != NULL) { + _outputer.malloc_callsite(malloc_callsite->addr(), + amount_in_current_scale(malloc_callsite->amount()), malloc_callsite->count()); + malloc_callsite = (MallocCallsitePointer*)malloc_itr.next(); + } + + // walk virtual memory callsite + MemPointerArrayIteratorImpl vm_itr(pBL->_vm_cs); + VMCallsitePointer* vm_callsite = (VMCallsitePointer*)vm_itr.current(); + while (vm_callsite != NULL) { + _outputer.virtual_memory_callsite(vm_callsite->addr(), + amount_in_current_scale(vm_callsite->reserved_amount()), + amount_in_current_scale(vm_callsite->committed_amount())); + vm_callsite = (VMCallsitePointer*)vm_itr.next(); + } + pBL->_malloc_cs->sort((FN_SORT)MemBaseline::bl_malloc_sort_by_pc); + pBL->_vm_cs->sort((FN_SORT)MemBaseline::bl_vm_sort_by_pc); + _outputer.done_callsite(); +} + +void BaselineReporter::diff_baselines(const MemBaseline& cur, const MemBaseline& prev, + bool summary_only) { + assert(MemTracker::is_on(), "Native memory tracking is off"); + _outputer.start(scale()); + size_t total_reserved = cur.total_malloc_amount() + cur.total_reserved_amount(); + size_t total_committed = cur.total_malloc_amount() + cur.total_committed_amount(); + + _outputer.diff_total_usage( + amount_in_current_scale(total_reserved), amount_in_current_scale(total_committed), + diff_in_current_scale(total_reserved, (prev.total_malloc_amount() + prev.total_reserved_amount())), + diff_in_current_scale(total_committed, (prev.total_committed_amount() + prev.total_malloc_amount()))); + + _outputer.diff_num_of_classes(cur.number_of_classes(), + diff(cur.number_of_classes(), prev.number_of_classes())); + _outputer.diff_num_of_threads(cur.number_of_threads(), + diff(cur.number_of_threads(), prev.number_of_threads())); + + diff_summaries(cur, prev); + if (!summary_only && MemTracker::track_callsite()) { + diff_callsites(cur, prev); + } + _outputer.done(); +} + +void BaselineReporter::diff_summaries(const MemBaseline& cur, const MemBaseline& prev) { + _outputer.start_category_summary(); + MEMFLAGS type; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + type = MemBaseline::MemType2NameMap[index]._flag; + _outputer.diff_category_summary(type, + amount_in_current_scale(cur.reserved_amount(type)), + amount_in_current_scale(cur.committed_amount(type)), + amount_in_current_scale(cur.malloc_amount(type)), + cur.malloc_count(type), + amount_in_current_scale(cur.arena_amount(type)), + cur.arena_count(type), + diff_in_current_scale(cur.reserved_amount(type), prev.reserved_amount(type)), + diff_in_current_scale(cur.committed_amount(type), prev.committed_amount(type)), + diff_in_current_scale(cur.malloc_amount(type), prev.malloc_amount(type)), + diff(cur.malloc_count(type), prev.malloc_count(type)), + diff_in_current_scale(cur.arena_amount(type), prev.arena_amount(type)), + diff(cur.arena_count(type), prev.arena_count(type))); + } + + _outputer.done_category_summary(); +} + +void BaselineReporter::diff_callsites(const MemBaseline& cur, const MemBaseline& prev) { + _outputer.start_callsite(); + MemBaseline* pBL_cur = const_cast(&cur); + MemBaseline* pBL_prev = const_cast(&prev); + + // walk malloc callsites + MemPointerArrayIteratorImpl cur_malloc_itr(pBL_cur->_malloc_cs); + MemPointerArrayIteratorImpl prev_malloc_itr(pBL_prev->_malloc_cs); + + MallocCallsitePointer* cur_malloc_callsite = + (MallocCallsitePointer*)cur_malloc_itr.current(); + MallocCallsitePointer* prev_malloc_callsite = + (MallocCallsitePointer*)prev_malloc_itr.current(); + + while (cur_malloc_callsite != NULL || prev_malloc_callsite != NULL) { + if (prev_malloc_callsite == NULL || + cur_malloc_callsite->addr() < prev_malloc_callsite->addr()) { + _outputer.diff_malloc_callsite(cur_malloc_callsite->addr(), + amount_in_current_scale(cur_malloc_callsite->amount()), + cur_malloc_callsite->count(), + diff_in_current_scale(cur_malloc_callsite->amount(), 0), + diff(cur_malloc_callsite->count(), 0)); + cur_malloc_callsite = (MallocCallsitePointer*)cur_malloc_itr.next(); + } else if (prev_malloc_callsite == NULL || + cur_malloc_callsite->addr() > prev_malloc_callsite->addr()) { + _outputer.diff_malloc_callsite(cur_malloc_callsite->addr(), + amount_in_current_scale(prev_malloc_callsite->amount()), + prev_malloc_callsite->count(), + diff_in_current_scale(0, prev_malloc_callsite->amount()), + diff(0, prev_malloc_callsite->count())); + prev_malloc_callsite = (MallocCallsitePointer*)prev_malloc_itr.next(); + } else { // the same callsite + _outputer.diff_malloc_callsite(cur_malloc_callsite->addr(), + amount_in_current_scale(cur_malloc_callsite->amount()), + cur_malloc_callsite->count(), + diff_in_current_scale(cur_malloc_callsite->amount(), prev_malloc_callsite->amount()), + diff(cur_malloc_callsite->count(), prev_malloc_callsite->count())); + cur_malloc_callsite = (MallocCallsitePointer*)cur_malloc_itr.next(); + prev_malloc_callsite = (MallocCallsitePointer*)prev_malloc_itr.next(); + } + } + + // walk virtual memory callsite + MemPointerArrayIteratorImpl cur_vm_itr(pBL_cur->_vm_cs); + MemPointerArrayIteratorImpl prev_vm_itr(pBL_prev->_vm_cs); + VMCallsitePointer* cur_vm_callsite = (VMCallsitePointer*)cur_vm_itr.current(); + VMCallsitePointer* prev_vm_callsite = (VMCallsitePointer*)prev_vm_itr.current(); + while (cur_vm_callsite != NULL || prev_vm_callsite != NULL) { + if (prev_vm_callsite == NULL || cur_vm_callsite->addr() < prev_vm_callsite->addr()) { + _outputer.diff_virtual_memory_callsite(cur_vm_callsite->addr(), + amount_in_current_scale(cur_vm_callsite->reserved_amount()), + amount_in_current_scale(cur_vm_callsite->committed_amount()), + diff_in_current_scale(cur_vm_callsite->reserved_amount(), 0), + diff_in_current_scale(cur_vm_callsite->committed_amount(), 0)); + cur_vm_callsite = (VMCallsitePointer*)cur_vm_itr.next(); + } else if (cur_vm_callsite == NULL || cur_vm_callsite->addr() > prev_vm_callsite->addr()) { + _outputer.diff_virtual_memory_callsite(prev_vm_callsite->addr(), + amount_in_current_scale(prev_vm_callsite->reserved_amount()), + amount_in_current_scale(prev_vm_callsite->committed_amount()), + diff_in_current_scale(0, prev_vm_callsite->reserved_amount()), + diff_in_current_scale(0, prev_vm_callsite->committed_amount())); + prev_vm_callsite = (VMCallsitePointer*)prev_vm_itr.next(); + } else { // the same callsite + _outputer.diff_virtual_memory_callsite(cur_vm_callsite->addr(), + amount_in_current_scale(cur_vm_callsite->reserved_amount()), + amount_in_current_scale(cur_vm_callsite->committed_amount()), + diff_in_current_scale(cur_vm_callsite->reserved_amount(), prev_vm_callsite->reserved_amount()), + diff_in_current_scale(cur_vm_callsite->committed_amount(), prev_vm_callsite->committed_amount())); + cur_vm_callsite = (VMCallsitePointer*)cur_vm_itr.next(); + prev_vm_callsite = (VMCallsitePointer*)prev_vm_itr.next(); + } + } + + _outputer.done_callsite(); +} + +size_t BaselineReporter::amount_in_current_scale(size_t amt) const { + return (size_t)(((float)amt/(float)_scale) + 0.5); +} + +int BaselineReporter::diff_in_current_scale(size_t value1, size_t value2) const { + return (int)(((float)value1 - (float)value2)/((float)_scale) + 0.5); +} + +int BaselineReporter::diff(size_t value1, size_t value2) const { + return ((int)value1 - (int)value2); +} + +void BaselineTTYOutputer::start(size_t scale, bool report_diff) { + _scale = scale; + _output->print_cr(" "); + _output->print_cr("Native Memory Tracking:"); + _output->print_cr(" "); +} + +void BaselineTTYOutputer::done() { + +} + +void BaselineTTYOutputer::total_usage(size_t total_reserved, size_t total_committed) { + const char* unit = memory_unit(_scale); + _output->print_cr("Total: reserved=%d%s, committed=%d%s", + total_reserved, unit, total_committed, unit); +} + +void BaselineTTYOutputer::start_category_summary() { + _output->print_cr(" "); +} + +/** + * report a summary of memory type + */ +void BaselineTTYOutputer::category_summary(MEMFLAGS type, + size_t reserved_amt, size_t committed_amt, size_t malloc_amt, + size_t malloc_count, size_t arena_amt, size_t arena_count) { + + // we report mtThreadStack under mtThread category + if (type == mtThreadStack) { + assert(malloc_amt == 0 && malloc_count == 0 && arena_amt == 0, + "Just check"); + _thread_stack_reserved = reserved_amt; + _thread_stack_committed = committed_amt; + } else { + const char* unit = memory_unit(_scale); + size_t total_reserved = (reserved_amt + malloc_amt + arena_amt); + size_t total_committed = (committed_amt + malloc_amt + arena_amt); + if (type == mtThread) { + total_reserved += _thread_stack_reserved; + total_committed += _thread_stack_committed; + } + + if (total_reserved > 0) { + _output->print_cr("-%26s (reserved=%d%s, committed=%d%s)", + MemBaseline::type2name(type), total_reserved, unit, + total_committed, unit); + + if (type == mtClass) { + _output->print_cr("%27s (classes #%d)", " ", _num_of_classes); + } else if (type == mtThread) { + _output->print_cr("%27s (thread #%d)", " ", _num_of_threads); + _output->print_cr("%27s (stack: reserved=%d%s, committed=%d%s)", " ", + _thread_stack_reserved, unit, _thread_stack_committed, unit); + } + + if (malloc_amt > 0) { + if (type != mtChunk) { + _output->print_cr("%27s (malloc=%d%s, #%d)", " ", malloc_amt, unit, + malloc_count); + } else { + _output->print_cr("%27s (malloc=%d%s)", " ", malloc_amt, unit); + } + } + + if (reserved_amt > 0) { + _output->print_cr("%27s (mmap: reserved=%d%s, committed=%d%s)", + " ", reserved_amt, unit, committed_amt, unit); + } + + if (arena_amt > 0) { + _output->print_cr("%27s (arena=%d%s, #%d)", " ", arena_amt, unit, arena_count); + } + + _output->print_cr(" "); + } + } +} + +void BaselineTTYOutputer::done_category_summary() { + _output->print_cr(" "); +} + +void BaselineTTYOutputer::start_callsite() { + _output->print_cr("Details:"); + _output->print_cr(" "); +} + +void BaselineTTYOutputer::done_callsite() { + _output->print_cr(" "); +} + +void BaselineTTYOutputer::malloc_callsite(address pc, size_t malloc_amt, + size_t malloc_count) { + if (malloc_amt > 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print("[BOOTSTRAP]%18s", " "); + } else if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", pc, " "); + } + + _output->print_cr("(malloc=%d%s #%d)", malloc_amt, unit, malloc_count); + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::virtual_memory_callsite(address pc, size_t reserved_amt, + size_t committed_amt) { + if (reserved_amt > 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print("[BOOTSTRAP]%18s", " "); + } else if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", " "); + } + + _output->print_cr("(mmap: reserved=%d%s, committed=%d%s)", + reserved_amt, unit, committed_amt, unit); + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::diff_total_usage(size_t total_reserved, + size_t total_committed, int reserved_diff, int committed_diff) { + const char* unit = memory_unit(_scale); + _output->print_cr("Total: reserved=%d%s %+d%s, committed=%d%s %+d%s", + total_reserved, unit, reserved_diff, unit, total_committed, unit, + committed_diff, unit); +} + +void BaselineTTYOutputer::diff_category_summary(MEMFLAGS type, + size_t cur_reserved_amt, size_t cur_committed_amt, + size_t cur_malloc_amt, size_t cur_malloc_count, + size_t cur_arena_amt, size_t cur_arena_count, + int reserved_diff, int committed_diff, int malloc_diff, + int malloc_count_diff, int arena_diff, int arena_count_diff) { + + if (type == mtThreadStack) { + assert(cur_malloc_amt == 0 && cur_malloc_count == 0 && + cur_arena_amt == 0, "Just check"); + _thread_stack_reserved = cur_reserved_amt; + _thread_stack_committed = cur_committed_amt; + _thread_stack_reserved_diff = reserved_diff; + _thread_stack_committed_diff = committed_diff; + } else { + const char* unit = memory_unit(_scale); + size_t total_reserved = (cur_reserved_amt + cur_malloc_amt + cur_arena_amt); + // nothing to report in this category + if (total_reserved == 0) { + return; + } + int diff_reserved = (reserved_diff + malloc_diff + arena_diff); + + // category summary + _output->print("-%26s (reserved=%d%s", MemBaseline::type2name(type), + total_reserved, unit); + + if (diff_reserved != 0) { + _output->print(" %+d%s", diff_reserved, unit); + } + + size_t total_committed = cur_committed_amt + cur_malloc_amt + cur_arena_amt; + _output->print(", committed=%d%s", total_committed, unit); + + int total_committed_diff = committed_diff + malloc_diff + arena_diff; + if (total_committed_diff != 0) { + _output->print(" %+d%s", total_committed_diff, unit); + } + + _output->print_cr(")"); + + // special cases + if (type == mtClass) { + _output->print("%27s (classes #%d", " ", _num_of_classes); + if (_num_of_classes_diff != 0) { + _output->print(" %+d", _num_of_classes_diff); + } + _output->print_cr(")"); + } else if (type == mtThread) { + // thread count + _output->print("%27s (thread #%d", " ", _num_of_threads); + if (_num_of_threads_diff != 0) { + _output->print_cr(" %+d)", _num_of_threads_diff); + } else { + _output->print_cr(")"); + } + _output->print("%27s (stack: reserved=%d%s", " ", _thread_stack_reserved, unit); + if (_thread_stack_reserved_diff != 0) { + _output->print(" %+d%s", _thread_stack_reserved_diff, unit); + } + + _output->print(", committed=%d%s", _thread_stack_committed, unit); + if (_thread_stack_committed_diff != 0) { + _output->print(" %+d%s",_thread_stack_committed_diff, unit); + } + + _output->print_cr(")"); + } + + // malloc'd memory + if (cur_malloc_amt > 0) { + _output->print("%27s (malloc=%d%s", " ", cur_malloc_amt, unit); + if (malloc_diff != 0) { + _output->print(" %+d%s", malloc_diff, unit); + } + if (type != mtChunk) { + _output->print(", #%d", cur_malloc_count); + if (malloc_count_diff) { + _output->print(" %+d", malloc_count_diff); + } + } + _output->print_cr(")"); + } + + // mmap'd memory + if (cur_reserved_amt > 0) { + _output->print("%27s (mmap: reserved=%d%s", " ", cur_reserved_amt, unit); + if (reserved_diff != 0) { + _output->print(" %+d%s", reserved_diff, unit); + } + + _output->print(", committed=%d%s", cur_committed_amt, unit); + if (committed_diff != 0) { + _output->print(" %+d%s", committed_diff, unit); + } + _output->print_cr(")"); + } + + // arena memory + if (cur_arena_amt > 0) { + _output->print("%27s (arena=%d%s", " ", cur_arena_amt, unit); + if (arena_diff != 0) { + _output->print(" %+d%s", arena_diff, unit); + } + _output->print(", #%d", cur_arena_count); + if (arena_count_diff != 0) { + _output->print(" %+d", arena_count_diff); + } + _output->print_cr(")"); + } + + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::diff_malloc_callsite(address pc, + size_t cur_malloc_amt, size_t cur_malloc_count, + int malloc_diff, int malloc_count_diff) { + if (malloc_diff != 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print_cr("[BOOTSTRAP]%18s", " "); + } else { + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", pc, " "); + } + } + + _output->print("(malloc=%d%s", cur_malloc_amt, unit); + if (malloc_diff != 0) { + _output->print(" %+d%s", malloc_diff, unit); + } + _output->print(", #%d", cur_malloc_count); + if (malloc_count_diff != 0) { + _output->print(" %+d", malloc_count_diff); + } + _output->print_cr(")"); + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::diff_virtual_memory_callsite(address pc, + size_t cur_reserved_amt, size_t cur_committed_amt, + int reserved_diff, int committed_diff) { + if (reserved_diff != 0 || committed_diff != 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print_cr("[BOOSTRAP]%18s", " "); + } else { + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", " "); + } + } + + _output->print("(mmap: reserved=%d%s", cur_reserved_amt, unit); + if (reserved_diff != 0) { + _output->print(" %+d%s", reserved_diff, unit); + } + _output->print(", committed=%d%s", cur_committed_amt, unit); + if (committed_diff != 0) { + _output->print(" %+d%s", committed_diff, unit); + } + _output->print_cr(")"); + _output->print_cr(" "); + } +} diff --git a/hotspot/src/share/vm/services/memReporter.hpp b/hotspot/src/share/vm/services/memReporter.hpp new file mode 100644 index 00000000000..4ce64ba2d31 --- /dev/null +++ b/hotspot/src/share/vm/services/memReporter.hpp @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2012 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. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_REPORTER_HPP +#define SHARE_VM_SERVICES_MEM_REPORTER_HPP + +#include "runtime/mutexLocker.hpp" +#include "services/memBaseline.hpp" +#include "services/memTracker.hpp" +#include "utilities/ostream.hpp" + +/* + * MemBaselineReporter reports data to this outputer class, + * ReportOutputer is responsible for format, store and redirect + * the data to the final destination. + */ +class BaselineOutputer : public StackObj { + public: + // start to report memory usage in specified scale. + // if report_diff = true, the reporter reports baseline comparison + // information. + + virtual void start(size_t scale, bool report_diff = false) = 0; + // Done reporting + virtual void done() = 0; + + /* report baseline summary information */ + virtual void total_usage(size_t total_reserved, + size_t total_committed) = 0; + virtual void num_of_classes(size_t classes) = 0; + virtual void num_of_threads(size_t threads) = 0; + + virtual void thread_info(size_t stack_reserved_amt, size_t stack_committed_amt) = 0; + + /* report baseline summary comparison */ + virtual void diff_total_usage(size_t total_reserved, + size_t total_committed, + int reserved_diff, + int committed_diff) = 0; + virtual void diff_num_of_classes(size_t classes, int diff) = 0; + virtual void diff_num_of_threads(size_t threads, int diff) = 0; + + virtual void diff_thread_info(size_t stack_reserved, size_t stack_committed, + int stack_reserved_diff, int stack_committed_diff) = 0; + + + /* + * memory summary by memory types. + * for each memory type, following summaries are reported: + * - reserved amount, committed amount + * - malloc'd amount, malloc count + * - arena amount, arena count + */ + + // start reporting memory summary by memory type + virtual void start_category_summary() = 0; + + virtual void category_summary(MEMFLAGS type, size_t reserved_amt, + size_t committed_amt, + size_t malloc_amt, size_t malloc_count, + size_t arena_amt, size_t arena_count) = 0; + + virtual void diff_category_summary(MEMFLAGS type, size_t cur_reserved_amt, + size_t cur_committed_amt, + size_t cur_malloc_amt, size_t cur_malloc_count, + size_t cur_arena_amt, size_t cur_arena_count, + int reserved_diff, int committed_diff, int malloc_diff, + int malloc_count_diff, int arena_diff, + int arena_count_diff) = 0; + + virtual void done_category_summary() = 0; + + /* + * Report callsite information + */ + virtual void start_callsite() = 0; + virtual void malloc_callsite(address pc, size_t malloc_amt, size_t malloc_count) = 0; + virtual void virtual_memory_callsite(address pc, size_t reserved_amt, size_t committed_amt) = 0; + + virtual void diff_malloc_callsite(address pc, size_t cur_malloc_amt, size_t cur_malloc_count, + int malloc_diff, int malloc_count_diff) = 0; + virtual void diff_virtual_memory_callsite(address pc, size_t cur_reserved_amt, size_t cur_committed_amt, + int reserved_diff, int committed_diff) = 0; + + virtual void done_callsite() = 0; + + // return current scale in "KB", "MB" or "GB" + static const char* memory_unit(size_t scale); +}; + +/* + * This class reports processed data from a baseline or + * the changes between the two baseline. + */ +class BaselineReporter : public StackObj { + private: + BaselineOutputer& _outputer; + size_t _scale; + + public: + // construct a reporter that reports memory usage + // in specified scale + BaselineReporter(BaselineOutputer& outputer, size_t scale = K): + _outputer(outputer) { + _scale = scale; + } + virtual void report_baseline(const MemBaseline& baseline, bool summary_only = false); + virtual void diff_baselines(const MemBaseline& cur, const MemBaseline& prev, + bool summary_only = false); + + void set_scale(size_t scale); + size_t scale() const { return _scale; } + + private: + void report_summaries(const MemBaseline& baseline); + void report_callsites(const MemBaseline& baseline); + + void diff_summaries(const MemBaseline& cur, const MemBaseline& prev); + void diff_callsites(const MemBaseline& cur, const MemBaseline& prev); + + // calculate memory size in current memory scale + size_t amount_in_current_scale(size_t amt) const; + // diff two unsigned values in current memory scale + int diff_in_current_scale(size_t value1, size_t value2) const; + // diff two unsigned value + int diff(size_t value1, size_t value2) const; +}; + +/* + * tty output implementation. Native memory tracking + * DCmd uses this outputer. + */ +class BaselineTTYOutputer : public BaselineOutputer { + private: + size_t _scale; + + size_t _num_of_classes; + size_t _num_of_threads; + size_t _thread_stack_reserved; + size_t _thread_stack_committed; + + int _num_of_classes_diff; + int _num_of_threads_diff; + int _thread_stack_reserved_diff; + int _thread_stack_committed_diff; + + outputStream* _output; + + public: + BaselineTTYOutputer(outputStream* st) { + _scale = K; + _num_of_classes = 0; + _num_of_threads = 0; + _thread_stack_reserved = 0; + _thread_stack_committed = 0; + _num_of_classes_diff = 0; + _num_of_threads_diff = 0; + _thread_stack_reserved_diff = 0; + _thread_stack_committed_diff = 0; + _output = st; + } + + // begin reporting memory usage in specified scale + void start(size_t scale, bool report_diff = false); + // done reporting + void done(); + + // total memory usage + void total_usage(size_t total_reserved, + size_t total_committed); + // report total loaded classes + void num_of_classes(size_t classes) { + _num_of_classes = classes; + } + + void num_of_threads(size_t threads) { + _num_of_threads = threads; + } + + void thread_info(size_t stack_reserved_amt, size_t stack_committed_amt) { + _thread_stack_reserved = stack_reserved_amt; + _thread_stack_committed = stack_committed_amt; + } + + void diff_total_usage(size_t total_reserved, + size_t total_committed, + int reserved_diff, + int committed_diff); + + void diff_num_of_classes(size_t classes, int diff) { + _num_of_classes = classes; + _num_of_classes_diff = diff; + } + + void diff_num_of_threads(size_t threads, int diff) { + _num_of_threads = threads; + _num_of_threads_diff = diff; + } + + void diff_thread_info(size_t stack_reserved_amt, size_t stack_committed_amt, + int stack_reserved_diff, int stack_committed_diff) { + _thread_stack_reserved = stack_reserved_amt; + _thread_stack_committed = stack_committed_amt; + _thread_stack_reserved_diff = stack_reserved_diff; + _thread_stack_committed_diff = stack_committed_diff; + } + + /* + * Report memory summary categoriuzed by memory types. + * For each memory type, following summaries are reported: + * - reserved amount, committed amount + * - malloc-ed amount, malloc count + * - arena amount, arena count + */ + // start reporting memory summary by memory type + void start_category_summary(); + void category_summary(MEMFLAGS type, size_t reserved_amt, size_t committed_amt, + size_t malloc_amt, size_t malloc_count, + size_t arena_amt, size_t arena_count); + + void diff_category_summary(MEMFLAGS type, size_t cur_reserved_amt, + size_t cur_committed_amt, + size_t cur_malloc_amt, size_t cur_malloc_count, + size_t cur_arena_amt, size_t cur_arena_count, + int reserved_diff, int committed_diff, int malloc_diff, + int malloc_count_diff, int arena_diff, + int arena_count_diff); + + void done_category_summary(); + + /* + * Report callsite information + */ + void start_callsite(); + void malloc_callsite(address pc, size_t malloc_amt, size_t malloc_count); + void virtual_memory_callsite(address pc, size_t reserved_amt, size_t committed_amt); + + void diff_malloc_callsite(address pc, size_t cur_malloc_amt, size_t cur_malloc_count, + int malloc_diff, int malloc_count_diff); + void diff_virtual_memory_callsite(address pc, size_t cur_reserved_amt, size_t cur_committed_amt, + int reserved_diff, int committed_diff); + + void done_callsite(); +}; + + +#endif // SHARE_VM_SERVICES_MEM_REPORTER_HPP diff --git a/hotspot/src/share/vm/services/memSnapshot.cpp b/hotspot/src/share/vm/services/memSnapshot.cpp new file mode 100644 index 00000000000..4c2a6c2664b --- /dev/null +++ b/hotspot/src/share/vm/services/memSnapshot.cpp @@ -0,0 +1,463 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#include "precompiled.hpp" +#include "runtime/mutexLocker.hpp" +#include "utilities/decoder.hpp" +#include "services/memBaseline.hpp" +#include "services/memPtr.hpp" +#include "services/memPtrArray.hpp" +#include "services/memSnapshot.hpp" +#include "services/memTracker.hpp" + + +// stagging data groups the data of a VM memory range, so we can consolidate +// them into one record during the walk +bool StagingWalker::consolidate_vm_records(VMMemRegionEx* vm_rec) { + MemPointerRecord* cur = (MemPointerRecord*)_itr.current(); + assert(cur != NULL && cur->is_vm_pointer(), "not a virtual memory pointer"); + + jint cur_seq; + jint next_seq; + + bool trackCallsite = MemTracker::track_callsite(); + + if (trackCallsite) { + vm_rec->init((MemPointerRecordEx*)cur); + cur_seq = ((SeqMemPointerRecordEx*)cur)->seq(); + } else { + vm_rec->init((MemPointerRecord*)cur); + cur_seq = ((SeqMemPointerRecord*)cur)->seq(); + } + + // only can consolidate when we have allocation record, + // which contains virtual memory range + if (!cur->is_allocation_record()) { + _itr.next(); + return true; + } + + // allocation range + address base = cur->addr(); + address end = base + cur->size(); + + MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next(); + // if the memory range is alive + bool live_vm_rec = true; + while (next != NULL && next->is_vm_pointer()) { + if (next->is_allocation_record()) { + assert(next->addr() >= base, "sorting order or overlapping"); + break; + } + + if (trackCallsite) { + next_seq = ((SeqMemPointerRecordEx*)next)->seq(); + } else { + next_seq = ((SeqMemPointerRecord*)next)->seq(); + } + + if (next_seq < cur_seq) { + _itr.next(); + next = (MemPointerRecord*)_itr.peek_next(); + continue; + } + + if (next->is_deallocation_record()) { + if (next->addr() == base && next->size() == cur->size()) { + // the virtual memory range has been released + _itr.next(); + live_vm_rec = false; + break; + } else if (next->addr() < end) { // partial release + vm_rec->partial_release(next->addr(), next->size()); + _itr.next(); + } else { + break; + } + } else if (next->is_commit_record()) { + if (next->addr() >= base && next->addr() + next->size() <= end) { + vm_rec->commit(next->size()); + _itr.next(); + } else { + assert(next->addr() >= base, "sorting order or overlapping"); + break; + } + } else if (next->is_uncommit_record()) { + if (next->addr() >= base && next->addr() + next->size() <= end) { + vm_rec->uncommit(next->size()); + _itr.next(); + } else { + assert(next->addr() >= end, "sorting order or overlapping"); + break; + } + } else if (next->is_type_tagging_record()) { + if (next->addr() >= base && next->addr() < end ) { + vm_rec->tag(next->flags()); + _itr.next(); + } else { + break; + } + } else { + assert(false, "unknown record type"); + } + next = (MemPointerRecord*)_itr.peek_next(); + } + _itr.next(); + return live_vm_rec; +} + +MemPointer* StagingWalker::next() { + MemPointerRecord* cur_p = (MemPointerRecord*)_itr.current(); + if (cur_p == NULL) { + _end_of_array = true; + return NULL; + } + + MemPointerRecord* next_p; + if (cur_p->is_vm_pointer()) { + _is_vm_record = true; + if (!consolidate_vm_records(&_vm_record)) { + return next(); + } + } else { // malloc-ed pointer + _is_vm_record = false; + next_p = (MemPointerRecord*)_itr.peek_next(); + if (next_p != NULL && next_p->addr() == cur_p->addr()) { + assert(cur_p->is_allocation_record(), "sorting order"); + assert(!next_p->is_allocation_record(), "sorting order"); + _itr.next(); + if (cur_p->seq() < next_p->seq()) { + cur_p = next_p; + } + } + if (MemTracker::track_callsite()) { + _malloc_record.init((MemPointerRecordEx*)cur_p); + } else { + _malloc_record.init((MemPointerRecord*)cur_p); + } + + _itr.next(); + } + return current(); +} + +MemSnapshot::MemSnapshot() { + if (MemTracker::track_callsite()) { + _alloc_ptrs = new (std::nothrow) MemPointerArrayImpl(); + _vm_ptrs = new (std::nothrow)MemPointerArrayImpl(64, true); + _staging_area = new (std::nothrow)MemPointerArrayImpl(); + } else { + _alloc_ptrs = new (std::nothrow) MemPointerArrayImpl(); + _vm_ptrs = new (std::nothrow)MemPointerArrayImpl(64, true); + _staging_area = new (std::nothrow)MemPointerArrayImpl(); + } + + _lock = new (std::nothrow) Mutex(Monitor::native, "memSnapshotLock"); + NOT_PRODUCT(_untracked_count = 0;) +} + +MemSnapshot::~MemSnapshot() { + assert(MemTracker::shutdown_in_progress(), "native memory tracking still on"); + { + MutexLockerEx locker(_lock); + if (_staging_area != NULL) { + delete _staging_area; + _staging_area = NULL; + } + + if (_alloc_ptrs != NULL) { + delete _alloc_ptrs; + _alloc_ptrs = NULL; + } + + if (_vm_ptrs != NULL) { + delete _vm_ptrs; + _vm_ptrs = NULL; + } + } + + if (_lock != NULL) { + delete _lock; + _lock = NULL; + } +} + +void MemSnapshot::copy_pointer(MemPointerRecord* dest, const MemPointerRecord* src) { + assert(dest != NULL && src != NULL, "Just check"); + assert(dest->addr() == src->addr(), "Just check"); + + MEMFLAGS flags = dest->flags(); + + if (MemTracker::track_callsite()) { + *(MemPointerRecordEx*)dest = *(MemPointerRecordEx*)src; + } else { + *dest = *src; + } +} + + +// merge a per-thread memory recorder to the staging area +bool MemSnapshot::merge(MemRecorder* rec) { + assert(rec != NULL && !rec->out_of_memory(), "Just check"); + + // out of memory + if (_staging_area == NULL || _staging_area->out_of_memory()) { + return false; + } + + SequencedRecordIterator itr(rec->pointer_itr()); + + MutexLockerEx lock(_lock, true); + MemPointerIterator staging_itr(_staging_area); + MemPointerRecord *p1, *p2; + p1 = (MemPointerRecord*) itr.current(); + while (p1 != NULL) { + p2 = (MemPointerRecord*)staging_itr.locate(p1->addr()); + // we have not seen this memory block, so just add to staging area + if (p2 == NULL) { + if (!staging_itr.insert(p1)) { + return false; + } + } else if (p1->addr() == p2->addr()) { + MemPointerRecord* staging_next = (MemPointerRecord*)staging_itr.peek_next(); + // a memory block can have many tagging records, find right one to replace or + // right position to insert + while (staging_next != NULL && staging_next->addr() == p1->addr()) { + if ((staging_next->flags() & MemPointerRecord::tag_masks) <= + (p1->flags() & MemPointerRecord::tag_masks)) { + p2 = (MemPointerRecord*)staging_itr.next(); + staging_next = (MemPointerRecord*)staging_itr.peek_next(); + } else { + break; + } + } + int df = (p1->flags() & MemPointerRecord::tag_masks) - + (p2->flags() & MemPointerRecord::tag_masks); + if (df == 0) { + assert(p1->seq() > 0, "not sequenced"); + assert(p2->seq() > 0, "not sequenced"); + if (p1->seq() > p2->seq()) { + copy_pointer(p2, p1); + } + } else if (df < 0) { + if (!staging_itr.insert(p1)) { + return false; + } + } else { + if (!staging_itr.insert_after(p1)) { + return false; + } + } + } else if (p1->addr() < p2->addr()) { + if (!staging_itr.insert(p1)) { + return false; + } + } else { + if (!staging_itr.insert_after(p1)) { + return false; + } + } + p1 = (MemPointerRecord*)itr.next(); + } + NOT_PRODUCT(void check_staging_data();) + return true; +} + + + +// promote data to next generation +void MemSnapshot::promote() { + assert(_alloc_ptrs != NULL && _staging_area != NULL && _vm_ptrs != NULL, + "Just check"); + MutexLockerEx lock(_lock, true); + StagingWalker walker(_staging_area); + MemPointerIterator malloc_itr(_alloc_ptrs); + VMMemPointerIterator vm_itr(_vm_ptrs); + MemPointer* cur = walker.current(); + while (cur != NULL) { + if (walker.is_vm_record()) { + VMMemRegion* cur_vm = (VMMemRegion*)cur; + VMMemRegion* p = (VMMemRegion*)vm_itr.locate(cur_vm->addr()); + cur_vm = (VMMemRegion*)cur; + if (p != NULL && (p->contains(cur_vm) || p->base() == cur_vm->base())) { + assert(p->is_reserve_record() || + p->is_commit_record(), "wrong vm record type"); + // resize existing reserved range + if (cur_vm->is_reserve_record() && p->base() == cur_vm->base()) { + assert(cur_vm->size() >= p->committed_size(), "incorrect resizing"); + p->set_reserved_size(cur_vm->size()); + } else if (cur_vm->is_commit_record()) { + p->commit(cur_vm->committed_size()); + } else if (cur_vm->is_uncommit_record()) { + p->uncommit(cur_vm->committed_size()); + if (!p->is_reserve_record() && p->committed_size() == 0) { + vm_itr.remove(); + } + } else if (cur_vm->is_type_tagging_record()) { + p->tag(cur_vm->flags()); + } else if (cur_vm->is_release_record()) { + if (cur_vm->base() == p->base() && cur_vm->size() == p->size()) { + // release the whole range + vm_itr.remove(); + } else { + // partial release + p->partial_release(cur_vm->base(), cur_vm->size()); + } + } else { + // we do see multiple reserver on the same vm range + assert((cur_vm->is_commit_record() || cur_vm->is_reserve_record()) && + cur_vm->base() == p->base() && cur_vm->size() == p->size(), "bad record"); + p->tag(cur_vm->flags()); + } + } else { + if(cur_vm->is_reserve_record()) { + if (p == NULL || p->base() > cur_vm->base()) { + vm_itr.insert(cur_vm); + } else { + vm_itr.insert_after(cur_vm); + } + } else { +#ifdef ASSERT + // In theory, we should assert without conditions. However, in case of native + // thread stack, NMT explicitly releases the thread stack in Thread's destructor, + // due to platform dependent behaviors. On some platforms, we see uncommit/release + // native thread stack, but some, we don't. + if (!cur_vm->is_uncommit_record() && !cur_vm->is_deallocation_record()) { + ShouldNotReachHere(); + } +#endif + } + } + } else { + MemPointerRecord* cur_p = (MemPointerRecord*)cur; + MemPointerRecord* p = (MemPointerRecord*)malloc_itr.locate(cur->addr()); + if (p != NULL && cur_p->addr() == p->addr()) { + assert(p->is_allocation_record() || p->is_arena_size_record(), "untracked"); + if (cur_p->is_allocation_record() || cur_p->is_arena_size_record()) { + copy_pointer(p, cur_p); + } else { // deallocation record + assert(cur_p->is_deallocation_record(), "wrong record type"); + + // we are removing an arena record, we also need to remove its 'size' + // record behind it + if (p->is_arena_record()) { + MemPointerRecord* next_p = (MemPointerRecord*)malloc_itr.peek_next(); + if (next_p->is_arena_size_record()) { + assert(next_p->is_size_record_of_arena(p), "arena records dont match"); + malloc_itr.remove(); + } + } + malloc_itr.remove(); + } + } else { + if (cur_p->is_arena_size_record()) { + MemPointerRecord* prev_p = (MemPointerRecord*)malloc_itr.peek_prev(); + if (prev_p != NULL && + (!prev_p->is_arena_record() || !cur_p->is_size_record_of_arena(prev_p))) { + // arena already deallocated + cur_p = NULL; + } + } + if (cur_p != NULL) { + if (cur_p->is_allocation_record() || cur_p->is_arena_size_record()) { + if (p != NULL && cur_p->addr() > p->addr()) { + malloc_itr.insert_after(cur); + } else { + malloc_itr.insert(cur); + } + } +#ifndef PRODUCT + else if (!has_allocation_record(cur_p->addr())){ + // NMT can not track some startup memory, which allocated before NMT + // is enabled + _untracked_count ++; + } +#endif + } + } + } + + cur = walker.next(); + } + NOT_PRODUCT(check_malloc_pointers();) + _staging_area->shrink(); + _staging_area->clear(); +} + + +#ifdef ASSERT +void MemSnapshot::print_snapshot_stats(outputStream* st) { + st->print_cr("Snapshot:"); + st->print_cr("\tMalloced: %d/%d [%5.2f%%] %dKB", _alloc_ptrs->length(), _alloc_ptrs->capacity(), + (100.0 * (float)_alloc_ptrs->length()) / (float)_alloc_ptrs->capacity(), _alloc_ptrs->instance_size()/K); + + st->print_cr("\tVM: %d/%d [%5.2f%%] %dKB", _vm_ptrs->length(), _vm_ptrs->capacity(), + (100.0 * (float)_vm_ptrs->length()) / (float)_vm_ptrs->capacity(), _vm_ptrs->instance_size()/K); + + st->print_cr("\tStaging: %d/%d [%5.2f%%] %dKB", _staging_area->length(), _staging_area->capacity(), + (100.0 * (float)_staging_area->length()) / (float)_staging_area->capacity(), _staging_area->instance_size()/K); + + st->print_cr("\tUntracked allocation: %d", _untracked_count); +} + +void MemSnapshot::check_malloc_pointers() { + MemPointerArrayIteratorImpl mItr(_alloc_ptrs); + MemPointerRecord* p = (MemPointerRecord*)mItr.current(); + MemPointerRecord* prev = NULL; + while (p != NULL) { + if (prev != NULL) { + assert(p->addr() >= prev->addr(), "sorting order"); + } + prev = p; + p = (MemPointerRecord*)mItr.next(); + } +} + +void MemSnapshot::check_staging_data() { + MemPointerArrayIteratorImpl itr(_staging_area); + MemPointerRecord* cur = (MemPointerRecord*)itr.current(); + MemPointerRecord* next = (MemPointerRecord*)itr.next(); + while (next != NULL) { + assert((next->addr() > cur->addr()) || + ((next->flags() & MemPointerRecord::tag_masks) > + (cur->flags() & MemPointerRecord::tag_masks)), + "sorting order"); + cur = next; + next = (MemPointerRecord*)itr.next(); + } +} + +bool MemSnapshot::has_allocation_record(address addr) { + MemPointerArrayIteratorImpl itr(_staging_area); + MemPointerRecord* cur = (MemPointerRecord*)itr.current(); + while (cur != NULL) { + if (cur->addr() == addr && cur->is_allocation_record()) { + return true; + } + cur = (MemPointerRecord*)itr.next(); + } + return false; +} + +#endif diff --git a/hotspot/src/share/vm/services/memSnapshot.hpp b/hotspot/src/share/vm/services/memSnapshot.hpp new file mode 100644 index 00000000000..8b2376e5f79 --- /dev/null +++ b/hotspot/src/share/vm/services/memSnapshot.hpp @@ -0,0 +1,286 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP +#define SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP + +#include "memory/allocation.hpp" +#include "runtime/mutex.hpp" +#include "runtime/mutexLocker.hpp" +#include "services/memBaseline.hpp" +#include "services/memPtrArray.hpp" + + +// Snapshot pointer array iterator + +// The pointer array contains malloc-ed pointers +class MemPointerIterator : public MemPointerArrayIteratorImpl { + public: + MemPointerIterator(MemPointerArray* arr): + MemPointerArrayIteratorImpl(arr) { + assert(arr != NULL, "null array"); + } + +#ifdef ASSERT + virtual bool is_dup_pointer(const MemPointer* ptr1, + const MemPointer* ptr2) const { + MemPointerRecord* p1 = (MemPointerRecord*)ptr1; + MemPointerRecord* p2 = (MemPointerRecord*)ptr2; + + if (p1->addr() != p2->addr()) return false; + if ((p1->flags() & MemPointerRecord::tag_masks) != + (p2->flags() & MemPointerRecord::tag_masks)) { + return false; + } + // we do see multiple commit/uncommit on the same memory, it is ok + return (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_alloc || + (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_release; + } + + virtual bool insert(MemPointer* ptr) { + if (_pos > 0) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos - 1); + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + if (_pos < _array->length() -1) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos + 1); + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + return _array->insert_at(ptr, _pos); + } + + virtual bool insert_after(MemPointer* ptr) { + if (_pos > 0) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos - 1); + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + if (_pos < _array->length() - 1) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos + 1); + + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + if (_array->insert_at(ptr, _pos + 1)) { + _pos ++; + return true; + } + return false; + } +#endif + + virtual MemPointer* locate(address addr) { + MemPointer* cur = current(); + while (cur != NULL && cur->addr() < addr) { + cur = next(); + } + return cur; + } +}; + +class VMMemPointerIterator : public MemPointerIterator { + public: + VMMemPointerIterator(MemPointerArray* arr): + MemPointerIterator(arr) { + } + + // locate an exiting record that contains specified address, or + // the record, where the record with specified address, should + // be inserted + virtual MemPointer* locate(address addr) { + VMMemRegion* cur = (VMMemRegion*)current(); + VMMemRegion* next_p; + + while (cur != NULL) { + if (cur->base() > addr) { + return cur; + } else { + // find nearest existing range that has base address <= addr + next_p = (VMMemRegion*)peek_next(); + if (next_p != NULL && next_p->base() <= addr) { + cur = (VMMemRegion*)next(); + continue; + } + } + + if (cur->is_reserve_record() && + cur->base() <= addr && + (cur->base() + cur->size() > addr)) { + return cur; + } else if (cur->is_commit_record() && + cur->base() <= addr && + (cur->base() + cur->committed_size() > addr)) { + return cur; + } + cur = (VMMemRegion*)next(); + } + return NULL; + } + +#ifdef ASSERT + virtual bool is_dup_pointer(const MemPointer* ptr1, + const MemPointer* ptr2) const { + VMMemRegion* p1 = (VMMemRegion*)ptr1; + VMMemRegion* p2 = (VMMemRegion*)ptr2; + + if (p1->addr() != p2->addr()) return false; + if ((p1->flags() & MemPointerRecord::tag_masks) != + (p2->flags() & MemPointerRecord::tag_masks)) { + return false; + } + // we do see multiple commit/uncommit on the same memory, it is ok + return (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_alloc || + (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_release; + } +#endif +}; + +class StagingWalker : public MemPointerArrayIterator { + private: + MemPointerArrayIteratorImpl _itr; + bool _is_vm_record; + bool _end_of_array; + VMMemRegionEx _vm_record; + MemPointerRecordEx _malloc_record; + + public: + StagingWalker(MemPointerArray* arr): _itr(arr) { + _end_of_array = false; + next(); + } + + // return the pointer at current position + MemPointer* current() const { + if (_end_of_array) { + return NULL; + } + if (is_vm_record()) { + return (MemPointer*)&_vm_record; + } else { + return (MemPointer*)&_malloc_record; + } + } + + // return the next pointer and advance current position + MemPointer* next(); + + // type of 'current' record + bool is_vm_record() const { + return _is_vm_record; + } + + // return the next poinger without advancing current position + MemPointer* peek_next() const { + assert(false, "not supported"); + return NULL; + } + + MemPointer* peek_prev() const { + assert(false, "not supported"); + return NULL; + } + // remove the pointer at current position + void remove() { + assert(false, "not supported"); + } + + // insert the pointer at current position + bool insert(MemPointer* ptr) { + assert(false, "not supported"); + return false; + } + + bool insert_after(MemPointer* ptr) { + assert(false, "not supported"); + return false; + } + + private: + // consolidate all records referring to this vm region + bool consolidate_vm_records(VMMemRegionEx* vm_rec); +}; + +class MemBaseline; + +class MemSnapshot : public CHeapObj { + private: + // the following two arrays contain records of all known lived memory blocks + // live malloc-ed memory pointers + MemPointerArray* _alloc_ptrs; + // live virtual memory pointers + MemPointerArray* _vm_ptrs; + + // stagging a generation's data, before + // it can be prompted to snapshot + MemPointerArray* _staging_area; + + // the lock to protect this snapshot + Monitor* _lock; + + NOT_PRODUCT(size_t _untracked_count;) + friend class MemBaseline; + + public: + MemSnapshot(); + virtual ~MemSnapshot(); + + // if we are running out of native memory + bool out_of_memory() const { + return (_alloc_ptrs == NULL || _staging_area == NULL || + _vm_ptrs == NULL || _lock == NULL || + _alloc_ptrs->out_of_memory() || + _staging_area->out_of_memory() || + _vm_ptrs->out_of_memory()); + } + + // merge a per-thread memory recorder into staging area + bool merge(MemRecorder* rec); + // promote staged data to snapshot + void promote(); + + + void wait(long timeout) { + assert(_lock != NULL, "Just check"); + MonitorLockerEx locker(_lock); + locker.wait(true, timeout); + } + + NOT_PRODUCT(void print_snapshot_stats(outputStream* st);) + NOT_PRODUCT(void check_staging_data();) + NOT_PRODUCT(void check_malloc_pointers();) + NOT_PRODUCT(bool has_allocation_record(address addr);) + + private: + // copy pointer data from src to dest + void copy_pointer(MemPointerRecord* dest, const MemPointerRecord* src); +}; + + +#endif // SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP diff --git a/hotspot/src/share/vm/services/memTrackWorker.cpp b/hotspot/src/share/vm/services/memTrackWorker.cpp new file mode 100644 index 00000000000..b82a305ed72 --- /dev/null +++ b/hotspot/src/share/vm/services/memTrackWorker.cpp @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#include "precompiled.hpp" +#include "runtime/threadCritical.hpp" +#include "services/memTracker.hpp" +#include "services/memTrackWorker.hpp" +#include "utilities/decoder.hpp" +#include "utilities/vmError.hpp" + +MemTrackWorker::MemTrackWorker() { + // create thread uses cgc thread type for now. We should revisit + // the option, or create new thread type. + _has_error = !os::create_thread(this, os::cgc_thread); + set_name("MemTrackWorker", 0); + + // initial generation circuit buffer + if (!has_error()) { + _head = _tail = 0; + for(int index = 0; index < MAX_GENERATIONS; index ++) { + _gen[index] = NULL; + } + } + NOT_PRODUCT(_sync_point_count = 0;) + NOT_PRODUCT(_merge_count = 0;) + NOT_PRODUCT(_last_gen_in_use = 0;) +} + +MemTrackWorker::~MemTrackWorker() { + for (int index = 0; index < MAX_GENERATIONS; index ++) { + MemRecorder* rc = _gen[index]; + if (rc != NULL) { + delete rc; + } + } +} + +void* MemTrackWorker::operator new(size_t size) { + assert(false, "use nothrow version"); + return NULL; +} + +void* MemTrackWorker::operator new(size_t size, const std::nothrow_t& nothrow_constant) { + return allocate(size, false, mtNMT); +} + +void MemTrackWorker::start() { + os::start_thread(this); +} + +/* + * Native memory tracking worker thread loop: + * 1. merge one generation of memory recorders to staging area + * 2. promote staging data to memory snapshot + * + * This thread can run through safepoint. + */ + +void MemTrackWorker::run() { + assert(MemTracker::is_on(), "native memory tracking is off"); + this->initialize_thread_local_storage(); + this->record_stack_base_and_size(); + MemSnapshot* snapshot = MemTracker::get_snapshot(); + assert(snapshot != NULL, "Worker should not be started"); + MemRecorder* rec; + + while (!MemTracker::shutdown_in_progress()) { + NOT_PRODUCT(_last_gen_in_use = generations_in_use();) + { + // take a recorder from earliest generation in buffer + ThreadCritical tc; + rec = _gen[_head]; + if (rec != NULL) { + _gen[_head] = rec->next(); + } + assert(count_recorder(_gen[_head]) <= MemRecorder::_instance_count, + "infinite loop after dequeue"); + } + if (rec != NULL) { + // merge the recorder into staging area + bool result = snapshot->merge(rec); + assert(result, "merge failed"); + debug_only(_merge_count ++;) + MemTracker::release_thread_recorder(rec); + } else { + // no more recorder to merge, promote staging area + // to snapshot + if (_head != _tail) { + { + ThreadCritical tc; + if (_gen[_head] != NULL || _head == _tail) { + continue; + } + // done with this generation, increment _head pointer + _head = (_head + 1) % MAX_GENERATIONS; + } + // promote this generation data to snapshot + snapshot->promote(); + } else { + snapshot->wait(1000); + ThreadCritical tc; + // check if more data arrived + if (_gen[_head] == NULL) { + _gen[_head] = MemTracker::get_pending_recorders(); + } + } + } + } + assert(MemTracker::shutdown_in_progress(), "just check"); + + // transites to final shutdown + MemTracker::final_shutdown(); +} + +// at synchronization point, where 'safepoint visible' Java threads are blocked +// at a safepoint, and the rest of threads are blocked on ThreadCritical lock. +// The caller MemTracker::sync() already takes ThreadCritical before calling this +// method. +// +// Following tasks are performed: +// 1. add all recorders in pending queue to current generation +// 2. increase generation + +void MemTrackWorker::at_sync_point(MemRecorder* rec) { + NOT_PRODUCT(_sync_point_count ++;) + assert(count_recorder(rec) <= MemRecorder::_instance_count, + "pending queue has infinite loop"); + + bool out_of_generation_buffer = false; + // check shutdown state inside ThreadCritical + if (MemTracker::shutdown_in_progress()) return; + // append the recorders to the end of the generation + if( rec != NULL) { + MemRecorder* cur_head = _gen[_tail]; + if (cur_head == NULL) { + _gen[_tail] = rec; + } else { + while (cur_head->next() != NULL) { + cur_head = cur_head->next(); + } + cur_head->set_next(rec); + } + } + assert(count_recorder(rec) <= MemRecorder::_instance_count, + "after add to current generation has infinite loop"); + // we have collected all recorders for this generation. If there is data, + // we need to increment _tail to start a new generation. + if (_gen[_tail] != NULL || _head == _tail) { + _tail = (_tail + 1) % MAX_GENERATIONS; + out_of_generation_buffer = (_tail == _head); + } + + if (out_of_generation_buffer) { + MemTracker::shutdown(MemTracker::NMT_out_of_generation); + } +} + +#ifndef PRODUCT +int MemTrackWorker::count_recorder(const MemRecorder* head) { + int count = 0; + while(head != NULL) { + count ++; + head = head->next(); + } + return count; +} + +int MemTrackWorker::count_pending_recorders() const { + int count = 0; + for (int index = 0; index < MAX_GENERATIONS; index ++) { + MemRecorder* head = _gen[index]; + if (head != NULL) { + count += count_recorder(head); + } + } + return count; +} +#endif diff --git a/hotspot/src/share/vm/services/memTrackWorker.hpp b/hotspot/src/share/vm/services/memTrackWorker.hpp new file mode 100644 index 00000000000..6c236784e53 --- /dev/null +++ b/hotspot/src/share/vm/services/memTrackWorker.hpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_TRACK_WORKER_HPP +#define SHARE_VM_SERVICES_MEM_TRACK_WORKER_HPP + +#include "memory/allocation.hpp" +#include "runtime/thread.hpp" +#include "services/memRecorder.hpp" + +// Maximum MAX_GENERATIONS generation data can be tracked. +#define MAX_GENERATIONS 512 + + +class MemTrackWorker : public NamedThread { + private: + // circular buffer. This buffer contains recorders to be merged into global + // snaphsot. + // Each slot holds a linked list of memory recorders, that contains one + // generation of memory data. + MemRecorder* _gen[MAX_GENERATIONS]; + int _head, _tail; // head and tail pointers to above circular buffer + + bool _has_error; + + public: + MemTrackWorker(); + ~MemTrackWorker(); + _NOINLINE_ void* operator new(size_t size); + _NOINLINE_ void* operator new(size_t size, const std::nothrow_t& nothrow_constant); + + void start(); + void run(); + + inline bool has_error() const { return _has_error; } + + // task at synchronization point + void at_sync_point(MemRecorder* pending_recorders); + + // for debugging purpose, they are not thread safe. + NOT_PRODUCT(static int count_recorder(const MemRecorder* head);) + NOT_PRODUCT(int count_pending_recorders() const;) + + NOT_PRODUCT(int _sync_point_count;) + NOT_PRODUCT(int _merge_count;) + NOT_PRODUCT(int _last_gen_in_use;) + + inline int generations_in_use() const { + return (_tail <= _head ? (_head - _tail + 1) : (MAX_GENERATIONS - (_tail - _head) + 1)); + } +}; + +#endif // SHARE_VM_SERVICES_MEM_TRACK_WORKER_HPP diff --git a/hotspot/src/share/vm/services/memTracker.cpp b/hotspot/src/share/vm/services/memTracker.cpp new file mode 100644 index 00000000000..55c98596584 --- /dev/null +++ b/hotspot/src/share/vm/services/memTracker.cpp @@ -0,0 +1,617 @@ +/* + * Copyright (c) 2012, 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. + * + */ +#include "precompiled.hpp" + +#include "runtime/atomic.hpp" +#include "runtime/interfaceSupport.hpp" +#include "runtime/mutexLocker.hpp" +#include "runtime/safepoint.hpp" +#include "runtime/threadCritical.hpp" +#include "services/memPtr.hpp" +#include "services/memReporter.hpp" +#include "services/memTracker.hpp" +#include "utilities/decoder.hpp" +#include "utilities/globalDefinitions.hpp" + +bool NMT_track_callsite = false; + +// walk all 'known' threads at NMT sync point, and collect their recorders +void SyncThreadRecorderClosure::do_thread(Thread* thread) { + assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); + if (thread->is_Java_thread()) { + JavaThread* javaThread = (JavaThread*)thread; + MemRecorder* recorder = javaThread->get_recorder(); + if (recorder != NULL) { + MemTracker::enqueue_pending_recorder(recorder); + javaThread->set_recorder(NULL); + } + } + _thread_count ++; +} + + +MemRecorder* MemTracker::_global_recorder = NULL; +MemSnapshot* MemTracker::_snapshot = NULL; +MemBaseline MemTracker::_baseline; +Mutex MemTracker::_query_lock(Monitor::native, "NMT_queryLock"); +volatile MemRecorder* MemTracker::_merge_pending_queue = NULL; +volatile MemRecorder* MemTracker::_pooled_recorders = NULL; +MemTrackWorker* MemTracker::_worker_thread = NULL; +int MemTracker::_sync_point_skip_count = 0; +MemTracker::NMTLevel MemTracker::_tracking_level = MemTracker::NMT_off; +volatile MemTracker::NMTStates MemTracker::_state = NMT_uninited; +MemTracker::ShutdownReason MemTracker::_reason = NMT_shutdown_none; +int MemTracker::_thread_count = 255; +volatile jint MemTracker::_pooled_recorder_count = 0; +debug_only(intx MemTracker::_main_thread_tid = 0;) +debug_only(volatile jint MemTracker::_pending_recorder_count = 0;) + +void MemTracker::init_tracking_options(const char* option_line) { + _tracking_level = NMT_off; + if (strncmp(option_line, "=summary", 8) == 0) { + _tracking_level = NMT_summary; + } else if (strncmp(option_line, "=detail", 8) == 0) { + _tracking_level = NMT_detail; + } +} + +// first phase of bootstrapping, when VM is still in single-threaded mode. +void MemTracker::bootstrap_single_thread() { + if (_tracking_level > NMT_off) { + assert(_state == NMT_uninited, "wrong state"); + + // NMT is not supported with UseMallocOnly is on. NMT can NOT + // handle the amount of malloc data without significantly impacting + // runtime performance when this flag is on. + if (UseMallocOnly) { + shutdown(NMT_use_malloc_only); + return; + } + + debug_only(_main_thread_tid = os::current_thread_id();) + _state = NMT_bootstrapping_single_thread; + NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); + } +} + +// second phase of bootstrapping, when VM is about to or already entered multi-theaded mode. +void MemTracker::bootstrap_multi_thread() { + if (_tracking_level > NMT_off && _state == NMT_bootstrapping_single_thread) { + // create nmt lock for multi-thread execution + assert(_main_thread_tid == os::current_thread_id(), "wrong thread"); + _state = NMT_bootstrapping_multi_thread; + NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); + } +} + +// fully start nmt +void MemTracker::start() { + // Native memory tracking is off from command line option + if (_tracking_level == NMT_off || shutdown_in_progress()) return; + + assert(_main_thread_tid == os::current_thread_id(), "wrong thread"); + assert(_state == NMT_bootstrapping_multi_thread, "wrong state"); + + _snapshot = new (std::nothrow)MemSnapshot(); + if (_snapshot != NULL && !_snapshot->out_of_memory()) { + if (start_worker()) { + _state = NMT_started; + NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); + return; + } + } + + // fail to start native memory tracking, shut it down + shutdown(NMT_initialization); +} + +/** + * Shutting down native memory tracking. + * We can not shutdown native memory tracking immediately, so we just + * setup shutdown pending flag, every native memory tracking component + * should orderly shut itself down. + * + * The shutdown sequences: + * 1. MemTracker::shutdown() sets MemTracker to shutdown pending state + * 2. Worker thread calls MemTracker::final_shutdown(), which transites + * MemTracker to final shutdown state. + * 3. At sync point, MemTracker does final cleanup, before sets memory + * tracking level to off to complete shutdown. + */ +void MemTracker::shutdown(ShutdownReason reason) { + if (_tracking_level == NMT_off) return; + + if (_state <= NMT_bootstrapping_single_thread) { + // we still in single thread mode, there is not contention + _state = NMT_shutdown_pending; + _reason = reason; + } else { + // we want to know who initialized shutdown + if ((jint)NMT_started == Atomic::cmpxchg((jint)NMT_shutdown_pending, + (jint*)&_state, (jint)NMT_started)) { + _reason = reason; + } + } +} + +// final phase of shutdown +void MemTracker::final_shutdown() { + // delete all pending recorders and pooled recorders + delete_all_pending_recorders(); + delete_all_pooled_recorders(); + + { + // shared baseline and snapshot are the only objects needed to + // create query results + MutexLockerEx locker(&_query_lock, true); + // cleanup baseline data and snapshot + _baseline.clear(); + delete _snapshot; + _snapshot = NULL; + } + + // shutdown shared decoder instance, since it is only + // used by native memory tracking so far. + Decoder::shutdown(); + + MemTrackWorker* worker = NULL; + { + ThreadCritical tc; + // can not delete worker inside the thread critical + if (_worker_thread != NULL && Thread::current() == _worker_thread) { + worker = _worker_thread; + _worker_thread = NULL; + } + } + if (worker != NULL) { + delete worker; + } + _state = NMT_final_shutdown; +} + +// delete all pooled recorders +void MemTracker::delete_all_pooled_recorders() { + // free all pooled recorders + volatile MemRecorder* cur_head = _pooled_recorders; + if (cur_head != NULL) { + MemRecorder* null_ptr = NULL; + while (cur_head != NULL && (void*)cur_head != Atomic::cmpxchg_ptr((void*)null_ptr, + (void*)&_pooled_recorders, (void*)cur_head)) { + cur_head = _pooled_recorders; + } + if (cur_head != NULL) { + delete cur_head; + _pooled_recorder_count = 0; + } + } +} + +// delete all recorders in pending queue +void MemTracker::delete_all_pending_recorders() { + // free all pending recorders + MemRecorder* pending_head = get_pending_recorders(); + if (pending_head != NULL) { + delete pending_head; + } +} + +/* + * retrieve per-thread recorder of specified thread. + * if thread == NULL, it means global recorder + */ +MemRecorder* MemTracker::get_thread_recorder(JavaThread* thread) { + if (shutdown_in_progress()) return NULL; + + MemRecorder* rc; + if (thread == NULL) { + rc = _global_recorder; + } else { + rc = thread->get_recorder(); + } + + if (rc != NULL && rc->is_full()) { + enqueue_pending_recorder(rc); + rc = NULL; + } + + if (rc == NULL) { + rc = get_new_or_pooled_instance(); + if (thread == NULL) { + _global_recorder = rc; + } else { + thread->set_recorder(rc); + } + } + return rc; +} + +/* + * get a per-thread recorder from pool, or create a new one if + * there is not one available. + */ +MemRecorder* MemTracker::get_new_or_pooled_instance() { + MemRecorder* cur_head = const_cast (_pooled_recorders); + if (cur_head == NULL) { + MemRecorder* rec = new (std::nothrow)MemRecorder(); + if (rec == NULL || rec->out_of_memory()) { + shutdown(NMT_out_of_memory); + if (rec != NULL) { + delete rec; + rec = NULL; + } + } + return rec; + } else { + MemRecorder* next_head = cur_head->next(); + if ((void*)cur_head != Atomic::cmpxchg_ptr((void*)next_head, (void*)&_pooled_recorders, + (void*)cur_head)) { + return get_new_or_pooled_instance(); + } + cur_head->set_next(NULL); + Atomic::dec(&_pooled_recorder_count); + debug_only(cur_head->set_generation();) + return cur_head; + } +} + +/* + * retrieve all recorders in pending queue, and empty the queue + */ +MemRecorder* MemTracker::get_pending_recorders() { + MemRecorder* cur_head = const_cast(_merge_pending_queue); + MemRecorder* null_ptr = NULL; + while ((void*)cur_head != Atomic::cmpxchg_ptr((void*)null_ptr, (void*)&_merge_pending_queue, + (void*)cur_head)) { + cur_head = const_cast(_merge_pending_queue); + } + debug_only(Atomic::store(0, &_pending_recorder_count)); + return cur_head; +} + +/* + * release a recorder to recorder pool. + */ +void MemTracker::release_thread_recorder(MemRecorder* rec) { + assert(rec != NULL, "null recorder"); + // we don't want to pool too many recorders + rec->set_next(NULL); + if (shutdown_in_progress() || _pooled_recorder_count > _thread_count * 2) { + delete rec; + return; + } + + rec->clear(); + MemRecorder* cur_head = const_cast(_pooled_recorders); + rec->set_next(cur_head); + while ((void*)cur_head != Atomic::cmpxchg_ptr((void*)rec, (void*)&_pooled_recorders, + (void*)cur_head)) { + cur_head = const_cast(_pooled_recorders); + rec->set_next(cur_head); + } + Atomic::inc(&_pooled_recorder_count); +} + +/* + * This is the most important method in whole nmt implementation. + * + * Create a memory record. + * 1. When nmt is in single-threaded bootstrapping mode, no lock is needed as VM + * still in single thread mode. + * 2. For all threads other than JavaThread, ThreadCritical is needed + * to write to recorders to global recorder. + * 3. For JavaThreads that are not longer visible by safepoint, also + * need to take ThreadCritical and records are written to global + * recorders, since these threads are NOT walked by Threads.do_thread(). + * 4. JavaThreads that are running in native state, have to transition + * to VM state before writing to per-thread recorders. + * 5. JavaThreads that are running in VM state do not need any lock and + * records are written to per-thread recorders. + * 6. For a thread has yet to attach VM 'Thread', they need to take + * ThreadCritical to write to global recorder. + * + * Important note: + * NO LOCK should be taken inside ThreadCritical lock !!! + */ +void MemTracker::create_memory_record(address addr, MEMFLAGS flags, + size_t size, address pc, Thread* thread) { + if (!shutdown_in_progress()) { + // single thread, we just write records direct to global recorder,' + // with any lock + if (_state == NMT_bootstrapping_single_thread) { + assert(_main_thread_tid == os::current_thread_id(), "wrong thread"); + thread = NULL; + } else { + if (thread == NULL) { + // don't use Thread::current(), since it is possible that + // the calling thread has yet to attach to VM 'Thread', + // which will result assertion failure + thread = ThreadLocalStorage::thread(); + } + } + + if (thread != NULL) { +#ifdef ASSERT + // cause assertion on stack base. This ensures that threads call + // Thread::record_stack_base_and_size() method, which will create + // thread native stack records. + thread->stack_base(); +#endif + // for a JavaThread, if it is running in native state, we need to transition it to + // VM state, so it can stop at safepoint. JavaThread running in VM state does not + // need lock to write records. + if (thread->is_Java_thread() && ((JavaThread*)thread)->is_safepoint_visible()) { + if (((JavaThread*)thread)->thread_state() == _thread_in_native) { + ThreadInVMfromNative trans((JavaThread*)thread); + create_record_in_recorder(addr, flags, size, pc, thread); + } else { + create_record_in_recorder(addr, flags, size, pc, thread); + } + } else { + // other threads, such as worker and watcher threads, etc. need to + // take ThreadCritical to write to global recorder + ThreadCritical tc; + create_record_in_recorder(addr, flags, size, pc, NULL); + } + } else { + if (_state == NMT_bootstrapping_single_thread) { + // single thread, no lock needed + create_record_in_recorder(addr, flags, size, pc, NULL); + } else { + // for thread has yet to attach VM 'Thread', we can not use VM mutex. + // use native thread critical instead + ThreadCritical tc; + create_record_in_recorder(addr, flags, size, pc, NULL); + } + } + } +} + +// write a record to proper recorder. No lock can be taken from this method +// down. +void MemTracker::create_record_in_recorder(address addr, MEMFLAGS flags, + size_t size, address pc, Thread* thread) { + assert(thread == NULL || thread->is_Java_thread(), "wrong thread"); + + MemRecorder* rc = get_thread_recorder((JavaThread*)thread); + if (rc != NULL) { + rc->record(addr, flags, size, pc); + } +} + +/** + * enqueue a recorder to pending queue + */ +void MemTracker::enqueue_pending_recorder(MemRecorder* rec) { + assert(rec != NULL, "null recorder"); + + // we are shutting down, so just delete it + if (shutdown_in_progress()) { + rec->set_next(NULL); + delete rec; + return; + } + + MemRecorder* cur_head = const_cast(_merge_pending_queue); + rec->set_next(cur_head); + while ((void*)cur_head != Atomic::cmpxchg_ptr((void*)rec, (void*)&_merge_pending_queue, + (void*)cur_head)) { + cur_head = const_cast(_merge_pending_queue); + rec->set_next(cur_head); + } + debug_only(Atomic::inc(&_pending_recorder_count);) +} + +/* + * The method is called at global safepoint + * during it synchronization process. + * 1. enqueue all JavaThreads' per-thread recorders + * 2. enqueue global recorder + * 3. retrieve all pending recorders + * 4. reset global sequence number generator + * 5. call worker's sync + */ +#define MAX_SAFEPOINTS_TO_SKIP 128 +#define SAFE_SEQUENCE_THRESHOLD 30 +#define HIGH_GENERATION_THRESHOLD 60 + +void MemTracker::sync() { + assert(_tracking_level > NMT_off, "NMT is not enabled"); + assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); + + // Some GC tests hit large number of safepoints in short period of time + // without meaningful activities. We should prevent going to + // sync point in these cases, which can potentially exhaust generation buffer. + // Here is the factots to determine if we should go into sync point: + // 1. not to overflow sequence number + // 2. if we are in danger to overflow generation buffer + // 3. how many safepoints we already skipped sync point + if (_state == NMT_started) { + // worker thread is not ready, no one can manage generation + // buffer, so skip this safepoint + if (_worker_thread == NULL) return; + + if (_sync_point_skip_count < MAX_SAFEPOINTS_TO_SKIP) { + int per_seq_in_use = SequenceGenerator::peek() * 100 / max_jint; + int per_gen_in_use = _worker_thread->generations_in_use() * 100 / MAX_GENERATIONS; + if (per_seq_in_use < SAFE_SEQUENCE_THRESHOLD && per_gen_in_use >= HIGH_GENERATION_THRESHOLD) { + _sync_point_skip_count ++; + return; + } + } + _sync_point_skip_count = 0; + // walk all JavaThreads to collect recorders + SyncThreadRecorderClosure stc; + Threads::threads_do(&stc); + + _thread_count = stc.get_thread_count(); + MemRecorder* pending_recorders = get_pending_recorders(); + + { + // This method is running at safepoint, with ThreadCritical lock, + // it should guarantee that NMT is fully sync-ed. + ThreadCritical tc; + if (_global_recorder != NULL) { + _global_recorder->set_next(pending_recorders); + pending_recorders = _global_recorder; + _global_recorder = NULL; + } + SequenceGenerator::reset(); + // check _worker_thread with lock to avoid racing condition + if (_worker_thread != NULL) { + _worker_thread->at_sync_point(pending_recorders); + } + } + } + + // now, it is the time to shut whole things off + if (_state == NMT_final_shutdown) { + _tracking_level = NMT_off; + + // walk all JavaThreads to delete all recorders + SyncThreadRecorderClosure stc; + Threads::threads_do(&stc); + // delete global recorder + { + ThreadCritical tc; + if (_global_recorder != NULL) { + delete _global_recorder; + _global_recorder = NULL; + } + } + + _state = NMT_shutdown; + } +} + +/* + * Start worker thread. + */ +bool MemTracker::start_worker() { + assert(_worker_thread == NULL, "Just Check"); + _worker_thread = new (std::nothrow) MemTrackWorker(); + if (_worker_thread == NULL || _worker_thread->has_error()) { + shutdown(NMT_initialization); + return false; + } + _worker_thread->start(); + return true; +} + +/* + * We need to collect a JavaThread's per-thread recorder + * before it exits. + */ +void MemTracker::thread_exiting(JavaThread* thread) { + if (is_on()) { + MemRecorder* rec = thread->get_recorder(); + if (rec != NULL) { + enqueue_pending_recorder(rec); + thread->set_recorder(NULL); + } + } +} + +// baseline current memory snapshot +bool MemTracker::baseline() { + MutexLockerEx lock(&_query_lock, true); + MemSnapshot* snapshot = get_snapshot(); + if (snapshot != NULL) { + return _baseline.baseline(*snapshot, false); + } + return false; +} + +// print memory usage from current snapshot +bool MemTracker::print_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) { + MemBaseline baseline; + MutexLockerEx lock(&_query_lock, true); + MemSnapshot* snapshot = get_snapshot(); + if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) { + BaselineReporter reporter(out, unit); + reporter.report_baseline(baseline, summary_only); + return true; + } + return false; +} + +// compare memory usage between current snapshot and baseline +bool MemTracker::compare_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) { + MutexLockerEx lock(&_query_lock, true); + if (_baseline.baselined()) { + MemBaseline baseline; + MemSnapshot* snapshot = get_snapshot(); + if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) { + BaselineReporter reporter(out, unit); + reporter.diff_baselines(baseline, _baseline, summary_only); + return true; + } + } + return false; +} + +#ifndef PRODUCT +void MemTracker::walk_stack(int toSkip, char* buf, int len) { + int cur_len = 0; + char tmp[1024]; + address pc; + + while (cur_len < len) { + pc = os::get_caller_pc(toSkip + 1); + if (pc != NULL && os::dll_address_to_function_name(pc, tmp, sizeof(tmp), NULL)) { + jio_snprintf(&buf[cur_len], (len - cur_len), "%s\n", tmp); + cur_len = (int)strlen(buf); + } else { + buf[cur_len] = '\0'; + break; + } + toSkip ++; + } +} + +void MemTracker::print_tracker_stats(outputStream* st) { + st->print_cr("\nMemory Tracker Stats:"); + st->print_cr("\tMax sequence number = %d", SequenceGenerator::max_seq_num()); + st->print_cr("\tthead count = %d", _thread_count); + st->print_cr("\tArena instance = %d", Arena::_instance_count); + st->print_cr("\tpooled recorder count = %d", _pooled_recorder_count); + st->print_cr("\tqueued recorder count = %d", _pending_recorder_count); + st->print_cr("\tmemory recorder instance count = %d", MemRecorder::_instance_count); + if (_worker_thread != NULL) { + st->print_cr("\tWorker thread:"); + st->print_cr("\t\tSync point count = %d", _worker_thread->_sync_point_count); + st->print_cr("\t\tpending recorder count = %d", _worker_thread->count_pending_recorders()); + st->print_cr("\t\tmerge count = %d", _worker_thread->_merge_count); + } else { + st->print_cr("\tWorker thread is not started"); + } + st->print_cr(" "); + + if (_snapshot != NULL) { + _snapshot->print_snapshot_stats(st); + } else { + st->print_cr("No snapshot"); + } +} +#endif + diff --git a/hotspot/src/share/vm/services/memTracker.hpp b/hotspot/src/share/vm/services/memTracker.hpp new file mode 100644 index 00000000000..b5607c1a0f8 --- /dev/null +++ b/hotspot/src/share/vm/services/memTracker.hpp @@ -0,0 +1,384 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_TRACKER_HPP +#define SHARE_VM_SERVICES_MEM_TRACKER_HPP + +#include "memory/allocation.hpp" +#include "runtime/globals.hpp" +#include "runtime/mutex.hpp" +#include "runtime/os.hpp" +#include "runtime/thread.hpp" +#include "services/memPtr.hpp" +#include "services/memRecorder.hpp" +#include "services/memSnapshot.hpp" +#include "services/memTrackWorker.hpp" + +#ifdef SOLARIS +#include "thread_solaris.inline.hpp" +#endif + +#ifdef _DEBUG_ + #define DEBUG_CALLER_PC os::get_caller_pc(3) +#else + #define DEBUG_CALLER_PC 0 +#endif + +// The thread closure walks threads to collect per-thread +// memory recorders at NMT sync point +class SyncThreadRecorderClosure : public ThreadClosure { + private: + int _thread_count; + + public: + SyncThreadRecorderClosure() { + _thread_count =0; + } + + void do_thread(Thread* thread); + int get_thread_count() const { + return _thread_count; + } +}; + +class BaselineOutputer; +class MemSnapshot; +class MemTrackWorker; +class Thread; +/* + * MemTracker is the 'gate' class to native memory tracking runtime. + */ +class MemTracker : AllStatic { + friend class MemTrackWorker; + friend class MemSnapshot; + friend class SyncThreadRecorderClosure; + + // NMT state + enum NMTStates { + NMT_uninited, // not yet initialized + NMT_bootstrapping_single_thread, // bootstrapping, VM is in single thread mode + NMT_bootstrapping_multi_thread, // bootstrapping, VM is about to enter multi-thread mode + NMT_started, // NMT fully started + NMT_shutdown_pending, // shutdown pending + NMT_final_shutdown, // in final phase of shutdown + NMT_shutdown // shutdown + }; + + + // native memory tracking level + enum NMTLevel { + NMT_off, // native memory tracking is off + NMT_summary, // don't track callsite + NMT_detail // track callsite also + }; + + public: + enum ShutdownReason { + NMT_shutdown_none, // no shutdown requested + NMT_shutdown_user, // user requested shutdown + NMT_normal, // normal shutdown, process exit + NMT_out_of_memory, // shutdown due to out of memory + NMT_initialization, // shutdown due to initialization failure + NMT_use_malloc_only, // can not combine NMT with UseMallocOnly flag + NMT_error_reporting, // shutdown by vmError::report_and_die() + NMT_out_of_generation, // running out of generation queue + NMT_sequence_overflow // overflow the sequence number + }; + + public: + // initialize NMT tracking level from command line options, called + // from VM command line parsing code + static void init_tracking_options(const char* option_line); + + // if NMT is enabled to record memory activities + static inline bool is_on() { + return (_tracking_level >= NMT_summary && + _state >= NMT_bootstrapping_single_thread); + } + + // user readable reason for shutting down NMT + static const char* reason() { + switch(_reason) { + case NMT_shutdown_none: + return "Native memory tracking is not enabled"; + case NMT_shutdown_user: + return "Native memory tracking has been shutdown by user"; + case NMT_normal: + return "Native memory tracking has been shutdown due to process exiting"; + case NMT_initialization: + return "Native memory tracking failed to initialize"; + case NMT_error_reporting: + return "Native memory tracking has been shutdown due to error reporting"; + case NMT_out_of_generation: + return "Native memory tracking has been shutdown due to running out of generation buffer"; + case NMT_sequence_overflow: + return "Native memory tracking has been shutdown due to overflow the sequence number"; + case NMT_use_malloc_only: + return "Native memory tracking is not supported when UseMallocOnly is on"; + default: + ShouldNotReachHere(); + return NULL; + } + } + + // test if we can walk native stack + static bool can_walk_stack() { + // native stack is not walkable during bootstrapping on sparc +#if defined(SPARC) + return (_state == NMT_started); +#else + return (_state >= NMT_bootstrapping_single_thread && _state <= NMT_started); +#endif + } + + // if native memory tracking tracks callsite + static inline bool track_callsite() { return _tracking_level == NMT_detail; } + + // shutdown native memory tracking capability. Native memory tracking + // can be shutdown by VM when it encounters low memory scenarios. + // Memory tracker should gracefully shutdown itself, and preserve the + // latest memory statistics for post morten diagnosis. + static void shutdown(ShutdownReason reason); + + // if there is shutdown requested + static inline bool shutdown_in_progress() { + return (_state >= NMT_shutdown_pending); + } + + // bootstrap native memory tracking, so it can start to collect raw data + // before worker thread can start + + // the first phase of bootstrapping, when VM still in single-threaded mode + static void bootstrap_single_thread(); + // the second phase of bootstrapping, VM is about or already in multi-threaded mode + static void bootstrap_multi_thread(); + + + // start() has to be called when VM still in single thread mode, but after + // command line option parsing is done. + static void start(); + + // record a 'malloc' call + static inline void record_malloc(address addr, size_t size, MEMFLAGS flags, + address pc = 0, Thread* thread = NULL) { + assert(is_on(), "check by caller"); + if (NMT_CAN_TRACK(flags)) { + create_memory_record(addr, (flags|MemPointerRecord::malloc_tag()), size, pc, thread); + } + } + // record a 'free' call + static inline void record_free(address addr, MEMFLAGS flags, Thread* thread = NULL) { + if (is_on() && NMT_CAN_TRACK(flags)) { + create_memory_record(addr, MemPointerRecord::free_tag(), 0, 0, thread); + } + } + // record a 'realloc' call + static inline void record_realloc(address old_addr, address new_addr, size_t size, + MEMFLAGS flags, address pc = 0, Thread* thread = NULL) { + if (is_on()) { + record_free(old_addr, flags, thread); + record_malloc(new_addr, size, flags, pc, thread); + } + } + + // record arena size + static inline void record_arena_size(address addr, size_t size) { + // we add a positive offset to arena address, so we can have arena size record + // sorted after arena record + if (is_on() && !UseMallocOnly) { + create_memory_record((addr + sizeof(void*)), MemPointerRecord::arena_size_tag(), size, + 0, NULL); + } + } + + // record a virtual memory 'reserve' call + static inline void record_virtual_memory_reserve(address addr, size_t size, + address pc = 0, Thread* thread = NULL) { + if (is_on()) { + assert(size > 0, "reserve szero size"); + create_memory_record(addr, MemPointerRecord::virtual_memory_reserve_tag(), + size, pc, thread); + } + } + + // record a virtual memory 'commit' call + static inline void record_virtual_memory_commit(address addr, size_t size, + address pc = 0, Thread* thread = NULL) { + if (is_on()) { + create_memory_record(addr, MemPointerRecord::virtual_memory_commit_tag(), + size, pc, thread); + } + } + + // record a virtual memory 'uncommit' call + static inline void record_virtual_memory_uncommit(address addr, size_t size, + Thread* thread = NULL) { + if (is_on()) { + create_memory_record(addr, MemPointerRecord::virtual_memory_uncommit_tag(), + size, 0, thread); + } + } + + // record a virtual memory 'release' call + static inline void record_virtual_memory_release(address addr, size_t size, + Thread* thread = NULL) { + if (is_on()) { + create_memory_record(addr, MemPointerRecord::virtual_memory_release_tag(), + size, 0, thread); + } + } + + // record memory type on virtual memory base address + static inline void record_virtual_memory_type(address base, MEMFLAGS flags, + Thread* thread = NULL) { + if (is_on()) { + assert(base > 0, "wrong base address"); + assert((flags & (~mt_masks)) == 0, "memory type only"); + create_memory_record(base, (flags | MemPointerRecord::virtual_memory_type_tag()), + 0, 0, thread); + } + } + + + // create memory baseline of current memory snapshot + static bool baseline(); + // is there a memory baseline + static bool has_baseline() { + return _baseline.baselined(); + } + + // print memory usage from current snapshot + static bool print_memory_usage(BaselineOutputer& out, size_t unit, + bool summary_only = true); + // compare memory usage between current snapshot and baseline + static bool compare_memory_usage(BaselineOutputer& out, size_t unit, + bool summary_only = true); + + // sync is called within global safepoint to synchronize nmt data + static void sync(); + + // called when a thread is about to exit + static void thread_exiting(JavaThread* thread); + + // retrieve global snapshot + static MemSnapshot* get_snapshot() { + assert(is_on(), "native memory tracking is off"); + if (shutdown_in_progress()) { + return NULL; + } + return _snapshot; + } + + // print tracker stats + NOT_PRODUCT(static void print_tracker_stats(outputStream* st);) + NOT_PRODUCT(static void walk_stack(int toSkip, char* buf, int len);) + + private: + // start native memory tracking worker thread + static bool start_worker(); + + // called by worker thread to complete shutdown process + static void final_shutdown(); + + protected: + // retrieve per-thread recorder of the specified thread. + // if the recorder is full, it will be enqueued to overflow + // queue, a new recorder is acquired from recorder pool or a + // new instance is created. + // when thread == NULL, it means global recorder + static MemRecorder* get_thread_recorder(JavaThread* thread); + + // per-thread recorder pool + static void release_thread_recorder(MemRecorder* rec); + static void delete_all_pooled_recorders(); + + // pending recorder queue. Recorders are queued to pending queue + // when they are overflowed or collected at nmt sync point. + static void enqueue_pending_recorder(MemRecorder* rec); + static MemRecorder* get_pending_recorders(); + static void delete_all_pending_recorders(); + + private: + // retrieve a pooled memory record or create new one if there is not + // one available + static MemRecorder* get_new_or_pooled_instance(); + static void create_memory_record(address addr, MEMFLAGS type, + size_t size, address pc, Thread* thread); + static void create_record_in_recorder(address addr, MEMFLAGS type, + size_t size, address pc, Thread* thread); + + private: + // global memory snapshot + static MemSnapshot* _snapshot; + + // a memory baseline of snapshot + static MemBaseline _baseline; + + // query lock + static Mutex _query_lock; + + // a thread can start to allocate memory before it is attached + // to VM 'Thread', those memory activities are recorded here. + // ThreadCritical is required to guard this global recorder. + static MemRecorder* _global_recorder; + + // main thread id + debug_only(static intx _main_thread_tid;) + + // pending recorders to be merged + static volatile MemRecorder* _merge_pending_queue; + + NOT_PRODUCT(static volatile jint _pending_recorder_count;) + + // pooled memory recorders + static volatile MemRecorder* _pooled_recorders; + + // memory recorder pool management, uses following + // counter to determine if a released memory recorder + // should be pooled + + // latest thread count + static int _thread_count; + // pooled recorder count + static volatile jint _pooled_recorder_count; + + + // worker thread to merge pending recorders into snapshot + static MemTrackWorker* _worker_thread; + + // how many safepoints we skipped without entering sync point + static int _sync_point_skip_count; + + // if the tracker is properly intialized + static bool _is_tracker_ready; + // tracking level (off, summary and detail) + static enum NMTLevel _tracking_level; + + // current nmt state + static volatile enum NMTStates _state; + // the reason for shutting down nmt + static enum ShutdownReason _reason; +}; + +#endif // SHARE_VM_SERVICES_MEM_TRACKER_HPP diff --git a/hotspot/src/share/vm/services/memoryManager.cpp b/hotspot/src/share/vm/services/memoryManager.cpp index 0666223bed5..8852f9ffc4b 100644 --- a/hotspot/src/share/vm/services/memoryManager.cpp +++ b/hotspot/src/share/vm/services/memoryManager.cpp @@ -166,15 +166,15 @@ void MemoryManager::oops_do(OopClosure* f) { GCStatInfo::GCStatInfo(int num_pools) { // initialize the arrays for memory usage - _before_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools); - _after_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools); + _before_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools, mtInternal); + _after_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools, mtInternal); _usage_array_size = num_pools; clear(); } GCStatInfo::~GCStatInfo() { - FREE_C_HEAP_ARRAY(MemoryUsage*, _before_gc_usage_array); - FREE_C_HEAP_ARRAY(MemoryUsage*, _after_gc_usage_array); + FREE_C_HEAP_ARRAY(MemoryUsage*, _before_gc_usage_array, mtInternal); + FREE_C_HEAP_ARRAY(MemoryUsage*, _after_gc_usage_array, mtInternal); } void GCStatInfo::set_gc_usage(int pool_index, MemoryUsage usage, bool before_gc) { @@ -214,8 +214,8 @@ GCMemoryManager::~GCMemoryManager() { void GCMemoryManager::initialize_gc_stat_info() { assert(MemoryService::num_memory_pools() > 0, "should have one or more memory pools"); - _last_gc_stat = new(ResourceObj::C_HEAP) GCStatInfo(MemoryService::num_memory_pools()); - _current_gc_stat = new(ResourceObj::C_HEAP) GCStatInfo(MemoryService::num_memory_pools()); + _last_gc_stat = new(ResourceObj::C_HEAP, mtGC) GCStatInfo(MemoryService::num_memory_pools()); + _current_gc_stat = new(ResourceObj::C_HEAP, mtGC) GCStatInfo(MemoryService::num_memory_pools()); // tracking concurrent collections we need two objects: one to update, and one to // hold the publicly available "last (completed) gc" information. } diff --git a/hotspot/src/share/vm/services/memoryManager.hpp b/hotspot/src/share/vm/services/memoryManager.hpp index eb0d9699c1f..bb6a8112d4a 100644 --- a/hotspot/src/share/vm/services/memoryManager.hpp +++ b/hotspot/src/share/vm/services/memoryManager.hpp @@ -40,7 +40,7 @@ class MemoryPool; class GCMemoryManager; class OopClosure; -class MemoryManager : public CHeapObj { +class MemoryManager : public CHeapObj { private: enum { max_num_pools = 10 diff --git a/hotspot/src/share/vm/services/memoryPool.hpp b/hotspot/src/share/vm/services/memoryPool.hpp index 441df25915c..db560dbeded 100644 --- a/hotspot/src/share/vm/services/memoryPool.hpp +++ b/hotspot/src/share/vm/services/memoryPool.hpp @@ -50,7 +50,7 @@ class PSPermGen; class PermGen; class ThresholdSupport; -class MemoryPool : public CHeapObj { +class MemoryPool : public CHeapObj { friend class MemoryManager; public: enum PoolType { diff --git a/hotspot/src/share/vm/services/memoryService.cpp b/hotspot/src/share/vm/services/memoryService.cpp index d1bb9c2d60e..621cb7ab01f 100644 --- a/hotspot/src/share/vm/services/memoryService.cpp +++ b/hotspot/src/share/vm/services/memoryService.cpp @@ -58,9 +58,9 @@ #endif GrowableArray* MemoryService::_pools_list = - new (ResourceObj::C_HEAP) GrowableArray(init_pools_list_size, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(init_pools_list_size, true); GrowableArray* MemoryService::_managers_list = - new (ResourceObj::C_HEAP) GrowableArray(init_managers_list_size, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(init_managers_list_size, true); GCMemoryManager* MemoryService::_minor_gc_manager = NULL; GCMemoryManager* MemoryService::_major_gc_manager = NULL; diff --git a/hotspot/src/share/vm/services/nmtDCmd.cpp b/hotspot/src/share/vm/services/nmtDCmd.cpp new file mode 100644 index 00000000000..47f460e6e97 --- /dev/null +++ b/hotspot/src/share/vm/services/nmtDCmd.cpp @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2012, 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. + * + */ +#include "precompiled.hpp" +#include "services/nmtDCmd.hpp" +#include "services/memReporter.hpp" +#include "services/memTracker.hpp" +#include "utilities/globalDefinitions.hpp" + +NMTDCmd::NMTDCmd(outputStream* output, + bool heap): DCmdWithParser(output, heap), + _summary("summary", "request runtime to report current memory summary, " \ + "which includes total reserved and committed memory, along " \ + "with memory usage summary by each subsytem.", + "BOOLEAN", false, "false"), + _detail("detail", "request runtime to report memory allocation >= " + "1K by each callsite.", + "BOOLEAN", false, "false"), + _baseline("baseline", "request runtime to baseline current memory usage, " \ + "so it can be compared against in later time.", + "BOOLEAN", false, "false"), + _summary_diff("summary.diff", "request runtime to report memory summary " \ + "comparison against previous baseline.", + "BOOLEAN", false, "false"), + _detail_diff("detail.diff", "request runtime to report memory detail " \ + "comparison against previous baseline, which shows the memory " \ + "allocation activities at different callsites.", + "BOOLEAN", false, "false"), + _shutdown("shutdown", "request runtime to shutdown itself and free the " \ + "memory used by runtime.", + "BOOLEAN", false, "false"), +#ifndef PRODUCT + _debug("debug", "print tracker statistics. Debug only, not thread safe", \ + "BOOLEAN", false, "false"), +#endif + _scale("scale", "Memory usage in which scale, KB, MB or GB", + "STRING", false, "KB") { + _dcmdparser.add_dcmd_option(&_summary); + _dcmdparser.add_dcmd_option(&_detail); + _dcmdparser.add_dcmd_option(&_baseline); + _dcmdparser.add_dcmd_option(&_summary_diff); + _dcmdparser.add_dcmd_option(&_detail_diff); + _dcmdparser.add_dcmd_option(&_shutdown); +#ifndef PRODUCT + _dcmdparser.add_dcmd_option(&_debug); +#endif + _dcmdparser.add_dcmd_option(&_scale); +} + +void NMTDCmd::execute(TRAPS) { + const char* scale_value = _scale.value(); + size_t scale_unit; + if (strcmp(scale_value, "KB") == 0 || strcmp(scale_value, "kb") == 0) { + scale_unit = K; + } else if (strcmp(scale_value, "MB") == 0 || + strcmp(scale_value, "mb") == 0) { + scale_unit = M; + } else if (strcmp(scale_value, "GB") == 0 || + strcmp(scale_value, "gb") == 0) { + scale_unit = G; + } else { + output()->print_cr("Incorrect scale value: %s", scale_value); + return; + } + + int nopt = 0; + if(_summary.is_set()) { ++nopt; } + if(_detail.is_set()) { ++nopt; } + if(_baseline.is_set()) { ++nopt; } + if(_summary_diff.is_set()) { ++nopt; } + if(_detail_diff.is_set()) { ++nopt; } + if(_shutdown.is_set()) { ++nopt; } +#ifndef PRODUCT + if(_debug.is_set()) { ++nopt; } +#endif + + if(nopt > 1) { + output()->print_cr("At most one of the following option can be specified: " \ + "summary, detail, baseline, summary.diff, detail.diff, shutdown" +#ifndef PRODUCT + " ,debug" +#endif + ); + return; + } + + if(nopt == 0) { + _summary.set_value(true); + } + +#ifndef PRODUCT + if (_debug.value()) { + output()->print_cr("debug command is NOT thread-safe, may cause crash"); + MemTracker::print_tracker_stats(output()); + return; + } +#endif + + // native memory tracking has to be on + if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) { + // if it is not on, what's the reason? + output()->print_cr(MemTracker::reason()); + return; + } + + if (_summary.value()) { + BaselineTTYOutputer outputer(output()); + MemTracker::print_memory_usage(outputer, scale_unit, true); + } else if (_detail.value()) { + BaselineTTYOutputer outputer(output()); + MemTracker::print_memory_usage(outputer, scale_unit, false); + } else if (_baseline.value()) { + if (MemTracker::baseline()) { + output()->print_cr("Successfully baselined."); + } else { + output()->print_cr("Baseline failed."); + } + } else if (_summary_diff.value()) { + if (MemTracker::has_baseline()) { + BaselineTTYOutputer outputer(output()); + MemTracker::compare_memory_usage(outputer, scale_unit, true); + } else { + output()->print_cr("No baseline to compare, run 'baseline' command first"); + } + } else if (_detail_diff.value()) { + if (MemTracker::has_baseline()) { + BaselineTTYOutputer outputer(output()); + MemTracker::compare_memory_usage(outputer, scale_unit, false); + } else { + output()->print_cr("No baseline to compare to, run 'baseline' command first"); + } + } else if (_shutdown.value()) { + MemTracker::shutdown(MemTracker::NMT_shutdown_user); + output()->print_cr("Shutdown is in progress, it will take a few moments to " \ + "completely shutdown"); + } else { + ShouldNotReachHere(); + output()->print_cr("Unknown command"); + } +} + +int NMTDCmd::num_arguments() { + ResourceMark rm; + NMTDCmd* dcmd = new NMTDCmd(NULL, false); + if (dcmd != NULL) { + DCmdMark mark(dcmd); + return dcmd->_dcmdparser.num_arguments(); + } else { + return 0; + } +} + diff --git a/hotspot/src/share/vm/services/nmtDCmd.hpp b/hotspot/src/share/vm/services/nmtDCmd.hpp new file mode 100644 index 00000000000..0c8c8657a72 --- /dev/null +++ b/hotspot/src/share/vm/services/nmtDCmd.hpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +#ifndef SHARE_VM_SERVICES_NMT_DCMD_HPP +#define SHARE_VM_SERVICES_NMT_DCMD_HPP + +#include "services/diagnosticArgument.hpp" +#include "services/diagnosticFramework.hpp" + +/** + * Native memory tracking DCmd implementation + */ +class NMTDCmd: public DCmdWithParser { + protected: + DCmdArgument _summary; + DCmdArgument _detail; + DCmdArgument _baseline; + DCmdArgument _summary_diff; + DCmdArgument _detail_diff; + DCmdArgument _shutdown; +#ifndef PRODUCT + DCmdArgument _debug; +#endif + DCmdArgument _scale; + + public: + NMTDCmd(outputStream* output, bool heap); + static const char* name() { return "VM.native_memory"; } + static const char* description() { + return "Print native memory usage"; + } + static const char* impact() { + return "Medium:"; + } + static int num_arguments(); + virtual void execute(TRAPS); +}; + +#endif // SHARE_VM_SERVICES_NMT_DCMD_HPP diff --git a/hotspot/src/share/vm/services/threadService.cpp b/hotspot/src/share/vm/services/threadService.cpp index 5c70fe99baa..325c236b5f7 100644 --- a/hotspot/src/share/vm/services/threadService.cpp +++ b/hotspot/src/share/vm/services/threadService.cpp @@ -437,7 +437,7 @@ StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) { GrowableArray* list = jvf->locked_monitors(); int length = list->length(); if (length > 0) { - _locked_monitors = new (ResourceObj::C_HEAP) GrowableArray(length, true); + _locked_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(length, true); for (int i = 0; i < length; i++) { MonitorInfo* monitor = list->at(i); assert(monitor->owner(), "This monitor must have an owning object"); @@ -491,11 +491,11 @@ public: ThreadStackTrace::ThreadStackTrace(JavaThread* t, bool with_locked_monitors) { _thread = t; - _frames = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _frames = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); _depth = 0; _with_locked_monitors = with_locked_monitors; if (_with_locked_monitors) { - _jni_locked_monitors = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _jni_locked_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); } else { _jni_locked_monitors = NULL; } @@ -689,7 +689,7 @@ void ConcurrentLocksDump::print_locks_on(JavaThread* t, outputStream* st) { ThreadConcurrentLocks::ThreadConcurrentLocks(JavaThread* thread) { _thread = thread; - _owned_locks = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _owned_locks = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); _next = NULL; } @@ -803,7 +803,7 @@ void ThreadSnapshot::oops_do(OopClosure* f) { DeadlockCycle::DeadlockCycle() { _is_deadlock = false; - _threads = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _threads = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); _next = NULL; } diff --git a/hotspot/src/share/vm/services/threadService.hpp b/hotspot/src/share/vm/services/threadService.hpp index bd1395a7d4b..9f91edf7a60 100644 --- a/hotspot/src/share/vm/services/threadService.hpp +++ b/hotspot/src/share/vm/services/threadService.hpp @@ -116,7 +116,7 @@ public: }; // Per-thread Statistics for synchronization -class ThreadStatistics : public CHeapObj { +class ThreadStatistics : public CHeapObj { private: // The following contention statistics are only updated by // the thread owning these statistics when contention occurs. @@ -186,7 +186,7 @@ public: }; // Thread snapshot to represent the thread state and statistics -class ThreadSnapshot : public CHeapObj { +class ThreadSnapshot : public CHeapObj { private: JavaThread* _thread; oop _threadObj; @@ -244,7 +244,7 @@ public: void oops_do(OopClosure* f); }; -class ThreadStackTrace : public CHeapObj { +class ThreadStackTrace : public CHeapObj { private: JavaThread* _thread; int _depth; // number of stack frames added @@ -275,7 +275,7 @@ class ThreadStackTrace : public CHeapObj { // StackFrameInfo for keeping methodOop and bci during // stack walking for later construction of StackTraceElement[] // Java instances -class StackFrameInfo : public CHeapObj { +class StackFrameInfo : public CHeapObj { private: methodOop _method; int _bci; @@ -299,7 +299,7 @@ class StackFrameInfo : public CHeapObj { void print_on(outputStream* st) const; }; -class ThreadConcurrentLocks : public CHeapObj { +class ThreadConcurrentLocks : public CHeapObj { private: GrowableArray* _owned_locks; ThreadConcurrentLocks* _next; @@ -356,7 +356,7 @@ class ThreadDumpResult : public StackObj { void oops_do(OopClosure* f); }; -class DeadlockCycle : public CHeapObj { +class DeadlockCycle : public CHeapObj { private: bool _is_deadlock; GrowableArray* _threads; diff --git a/hotspot/src/share/vm/utilities/array.cpp b/hotspot/src/share/vm/utilities/array.cpp index 44782ea8937..b1c7a61d970 100644 --- a/hotspot/src/share/vm/utilities/array.cpp +++ b/hotspot/src/share/vm/utilities/array.cpp @@ -49,7 +49,7 @@ void ResourceArray::init_nesting() { void ResourceArray::sort(size_t esize, ftype f) { if (!is_empty()) qsort(_data, length(), esize, f); } -void CHeapArray::sort(size_t esize, ftype f) { +template void CHeapArray::sort(size_t esize, ftype f) { if (!is_empty()) qsort(_data, length(), esize, f); } @@ -70,14 +70,14 @@ void ResourceArray::expand(size_t esize, int i, int& size) { } -void CHeapArray::expand(size_t esize, int i, int& size) { +template void CHeapArray::expand(size_t esize, int i, int& size) { // determine new size if (size == 0) size = 4; // prevent endless loop while (i >= size) size *= 2; // allocate and initialize new data section - void* data = NEW_C_HEAP_ARRAY(char*, esize * size); + void* data = NEW_C_HEAP_ARRAY(char*, esize * size, F); memcpy(data, _data, esize * length()); - FREE_C_HEAP_ARRAY(char*, _data); + FREE_C_HEAP_ARRAY(char*, _data, F); _data = data; } @@ -91,7 +91,7 @@ void ResourceArray::remove_at(size_t esize, int i) { memmove(dst, src, cnt); } -void CHeapArray::remove_at(size_t esize, int i) { +template void CHeapArray::remove_at(size_t esize, int i) { assert(0 <= i && i < length(), "index out of bounds"); _length--; void* dst = (char*)_data + i*esize; diff --git a/hotspot/src/share/vm/utilities/array.hpp b/hotspot/src/share/vm/utilities/array.hpp index cbc4161a42f..c0fb59283da 100644 --- a/hotspot/src/share/vm/utilities/array.hpp +++ b/hotspot/src/share/vm/utilities/array.hpp @@ -79,7 +79,7 @@ class ResourceArray: public ResourceObj { }; -class CHeapArray: public CHeapObj { +template class CHeapArray: public CHeapObj { protected: int _length; // the number of array elements void* _data; // the array memory @@ -94,7 +94,7 @@ class CHeapArray: public CHeapObj { CHeapArray(size_t esize, int length) { assert(length >= 0, "illegal length"); _length = length; - _data = (void*) NEW_C_HEAP_ARRAY(char *, esize * length); + _data = (void*) NEW_C_HEAP_ARRAY(char *, esize * length, F); } #ifdef ASSERT diff --git a/hotspot/src/share/vm/utilities/bitMap.cpp b/hotspot/src/share/vm/utilities/bitMap.cpp index 3141bc0de34..0b12b118079 100644 --- a/hotspot/src/share/vm/utilities/bitMap.cpp +++ b/hotspot/src/share/vm/utilities/bitMap.cpp @@ -65,8 +65,8 @@ void BitMap::resize(idx_t size_in_bits, bool in_resource_area) { if (in_resource_area) { _map = NEW_RESOURCE_ARRAY(bm_word_t, new_size_in_words); } else { - if (old_map != NULL) FREE_C_HEAP_ARRAY(bm_word_t, _map); - _map = NEW_C_HEAP_ARRAY(bm_word_t, new_size_in_words); + if (old_map != NULL) FREE_C_HEAP_ARRAY(bm_word_t, _map, mtInternal); + _map = NEW_C_HEAP_ARRAY(bm_word_t, new_size_in_words, mtInternal); } Copy::disjoint_words((HeapWord*)old_map, (HeapWord*) _map, MIN2(old_size_in_words, new_size_in_words)); @@ -469,7 +469,7 @@ BitMap::idx_t* BitMap::_pop_count_table = NULL; void BitMap::init_pop_count_table() { if (_pop_count_table == NULL) { - BitMap::idx_t *table = NEW_C_HEAP_ARRAY(idx_t, 256); + BitMap::idx_t *table = NEW_C_HEAP_ARRAY(idx_t, 256, mtInternal); for (uint i = 0; i < 256; i++) { table[i] = num_set_bits(i); } @@ -479,7 +479,7 @@ void BitMap::init_pop_count_table() { (intptr_t) NULL_WORD); if (res != NULL_WORD) { guarantee( _pop_count_table == (void*) res, "invariant" ); - FREE_C_HEAP_ARRAY(bm_word_t, table); + FREE_C_HEAP_ARRAY(bm_word_t, table, mtInternal); } } } diff --git a/hotspot/src/share/vm/utilities/decoder.hpp b/hotspot/src/share/vm/utilities/decoder.hpp index 56ff91907cc..a24f771b7bb 100644 --- a/hotspot/src/share/vm/utilities/decoder.hpp +++ b/hotspot/src/share/vm/utilities/decoder.hpp @@ -29,7 +29,7 @@ #include "memory/allocation.hpp" #include "runtime/mutex.hpp" -class AbstractDecoder : public CHeapObj { +class AbstractDecoder : public CHeapObj { public: // status code for decoding native C frame enum decoder_status { diff --git a/hotspot/src/share/vm/utilities/elfFile.cpp b/hotspot/src/share/vm/utilities/elfFile.cpp index 2e4b68302e9..5faaf83b53a 100644 --- a/hotspot/src/share/vm/utilities/elfFile.cpp +++ b/hotspot/src/share/vm/utilities/elfFile.cpp @@ -47,7 +47,7 @@ ElfFile::ElfFile(const char* filepath) { m_status = NullDecoder::no_error; int len = strlen(filepath) + 1; - m_filepath = (const char*)os::malloc(len * sizeof(char)); + m_filepath = (const char*)os::malloc(len * sizeof(char), mtInternal); if (m_filepath != NULL) { strcpy((char*)m_filepath, filepath); m_file = fopen(filepath, "r"); diff --git a/hotspot/src/share/vm/utilities/elfFile.hpp b/hotspot/src/share/vm/utilities/elfFile.hpp index e6f4ce263d6..f0cba8b6d08 100644 --- a/hotspot/src/share/vm/utilities/elfFile.hpp +++ b/hotspot/src/share/vm/utilities/elfFile.hpp @@ -82,7 +82,7 @@ class ElfSymbolTable; // in "error" state, so there are scenarios, lookup will fail. We want this // part of code to be very defensive, and bait out if anything went wrong. -class ElfFile: public CHeapObj { +class ElfFile: public CHeapObj { friend class ElfDecoder; public: ElfFile(const char* filepath); diff --git a/hotspot/src/share/vm/utilities/elfStringTable.cpp b/hotspot/src/share/vm/utilities/elfStringTable.cpp index 89286cb1883..cba67ddf646 100644 --- a/hotspot/src/share/vm/utilities/elfStringTable.cpp +++ b/hotspot/src/share/vm/utilities/elfStringTable.cpp @@ -42,7 +42,7 @@ ElfStringTable::ElfStringTable(FILE* file, Elf_Shdr shdr, int index) { // try to load the string table long cur_offset = ftell(file); - m_table = (char*)os::malloc(sizeof(char) * shdr.sh_size); + m_table = (char*)os::malloc(sizeof(char) * shdr.sh_size, mtInternal); if (m_table != NULL) { // if there is an error, mark the error if (fseek(file, shdr.sh_offset, SEEK_SET) || diff --git a/hotspot/src/share/vm/utilities/elfStringTable.hpp b/hotspot/src/share/vm/utilities/elfStringTable.hpp index 96f30b159ea..a4cdfc07854 100644 --- a/hotspot/src/share/vm/utilities/elfStringTable.hpp +++ b/hotspot/src/share/vm/utilities/elfStringTable.hpp @@ -35,7 +35,7 @@ // The string table represents a string table section in an elf file. // Whenever there is enough memory, it will load whole string table as // one blob. Otherwise, it will load string from file when requested. -class ElfStringTable: CHeapObj { +class ElfStringTable: CHeapObj { friend class ElfFile; public: ElfStringTable(FILE* file, Elf_Shdr shdr, int index); diff --git a/hotspot/src/share/vm/utilities/elfSymbolTable.cpp b/hotspot/src/share/vm/utilities/elfSymbolTable.cpp index 3ac9b9215f6..5301d5a32a5 100644 --- a/hotspot/src/share/vm/utilities/elfSymbolTable.cpp +++ b/hotspot/src/share/vm/utilities/elfSymbolTable.cpp @@ -40,7 +40,7 @@ ElfSymbolTable::ElfSymbolTable(FILE* file, Elf_Shdr shdr) { long cur_offset = ftell(file); if (cur_offset != -1) { // call malloc so we can back up if memory allocation fails. - m_symbols = (Elf_Sym*)os::malloc(shdr.sh_size); + m_symbols = (Elf_Sym*)os::malloc(shdr.sh_size, mtInternal); if (m_symbols) { if (fseek(file, shdr.sh_offset, SEEK_SET) || fread((void*)m_symbols, shdr.sh_size, 1, file) != 1 || diff --git a/hotspot/src/share/vm/utilities/elfSymbolTable.hpp b/hotspot/src/share/vm/utilities/elfSymbolTable.hpp index a149b99dfd8..4a23cfdeeda 100644 --- a/hotspot/src/share/vm/utilities/elfSymbolTable.hpp +++ b/hotspot/src/share/vm/utilities/elfSymbolTable.hpp @@ -38,7 +38,7 @@ * of the elf file into memory. Otherwise, it will walk the section in file * to look up the symbol that nearest the given address. */ -class ElfSymbolTable: public CHeapObj { +class ElfSymbolTable: public CHeapObj { friend class ElfFile; public: ElfSymbolTable(FILE* file, Elf_Shdr shdr); diff --git a/hotspot/src/share/vm/utilities/events.hpp b/hotspot/src/share/vm/utilities/events.hpp index 5b64e0c5c4d..74a804219fa 100644 --- a/hotspot/src/share/vm/utilities/events.hpp +++ b/hotspot/src/share/vm/utilities/events.hpp @@ -46,7 +46,7 @@ // crash time. This is a very generic interface that is mainly here // for completeness. Normally the templated EventLogBase would be // subclassed to provide different log types. -class EventLog : public CHeapObj { +class EventLog : public CHeapObj { friend class Events; private: diff --git a/hotspot/src/share/vm/utilities/exceptions.hpp b/hotspot/src/share/vm/utilities/exceptions.hpp index f7fece16fb6..568dfd0fb3c 100644 --- a/hotspot/src/share/vm/utilities/exceptions.hpp +++ b/hotspot/src/share/vm/utilities/exceptions.hpp @@ -57,7 +57,7 @@ class JavaCallArguments; // field of the Thread class w/o having access to the Thread's interface (for // include hierachy reasons). -class ThreadShadow: public CHeapObj { +class ThreadShadow: public CHeapObj { friend class VMStructs; protected: diff --git a/hotspot/src/share/vm/utilities/growableArray.cpp b/hotspot/src/share/vm/utilities/growableArray.cpp index a6ad8f3057e..7da659e6f68 100644 --- a/hotspot/src/share/vm/utilities/growableArray.cpp +++ b/hotspot/src/share/vm/utilities/growableArray.cpp @@ -61,7 +61,7 @@ void* GenericGrowableArray::raw_allocate(int elementSize) { if (on_stack()) { return (void*)resource_allocate_bytes(byte_size); } else if (on_C_heap()) { - return (void*)AllocateHeap(byte_size, "GrET in " __FILE__); + return (void*)AllocateHeap(byte_size, _memflags); } else { return _arena->Amalloc(byte_size); } diff --git a/hotspot/src/share/vm/utilities/growableArray.hpp b/hotspot/src/share/vm/utilities/growableArray.hpp index f7379fca551..2a6d6b88f9d 100644 --- a/hotspot/src/share/vm/utilities/growableArray.hpp +++ b/hotspot/src/share/vm/utilities/growableArray.hpp @@ -86,6 +86,9 @@ class GenericGrowableArray : public ResourceObj { // 0 means default ResourceArea // 1 means on C heap // otherwise, allocate in _arena + + MEMFLAGS _memflags; // memory type if allocation in C heap + #ifdef ASSERT int _nesting; // resource area nesting at creation void set_nesting(); @@ -102,9 +105,14 @@ class GenericGrowableArray : public ResourceObj { // This GA will use the resource stack for storage if c_heap==false, // Else it will use the C heap. Use clear_and_deallocate to avoid leaks. - GenericGrowableArray(int initial_size, int initial_len, bool c_heap) { + GenericGrowableArray(int initial_size, int initial_len, bool c_heap, MEMFLAGS flags = mtNone) { _len = initial_len; _max = initial_size; + _memflags = flags; + + // memory type has to be specified for C heap allocation + assert(!(c_heap && flags == mtNone), "memory type not specified for C heap object"); + assert(_len >= 0 && _len <= _max, "initial_len too big"); _arena = (c_heap ? (Arena*)1 : NULL); set_nesting(); @@ -121,6 +129,8 @@ class GenericGrowableArray : public ResourceObj { _max = initial_size; assert(_len >= 0 && _len <= _max, "initial_len too big"); _arena = arena; + _memflags = mtNone; + assert(on_arena(), "arena has taken on reserved value 0 or 1"); // Relax next assert to allow object allocation on resource area, // on stack or embedded into an other object. @@ -152,12 +162,14 @@ template class GrowableArray : public GenericGrowableArray { for (int i = 0; i < _max; i++) ::new ((void*)&_data[i]) E(); } - GrowableArray(int initial_size, bool C_heap = false) : GenericGrowableArray(initial_size, 0, C_heap) { + GrowableArray(int initial_size, bool C_heap = false, MEMFLAGS F = mtInternal) + : GenericGrowableArray(initial_size, 0, C_heap, F) { _data = (E*)raw_allocate(sizeof(E)); for (int i = 0; i < _max; i++) ::new ((void*)&_data[i]) E(); } - GrowableArray(int initial_size, int initial_len, const E& filler, bool C_heap = false) : GenericGrowableArray(initial_size, initial_len, C_heap) { + GrowableArray(int initial_size, int initial_len, const E& filler, bool C_heap = false, MEMFLAGS memflags = mtInternal) + : GenericGrowableArray(initial_size, initial_len, C_heap, memflags) { _data = (E*)raw_allocate(sizeof(E)); int i = 0; for (; i < _len; i++) ::new ((void*)&_data[i]) E(filler); diff --git a/hotspot/src/share/vm/utilities/hashtable.cpp b/hotspot/src/share/vm/utilities/hashtable.cpp index 877e89533c2..9b7db5e9a30 100644 --- a/hotspot/src/share/vm/utilities/hashtable.cpp +++ b/hotspot/src/share/vm/utilities/hashtable.cpp @@ -33,11 +33,6 @@ #include "utilities/hashtable.inline.hpp" -#ifndef USDT2 -HS_DTRACE_PROBE_DECL4(hs_private, hashtable__new_entry, - void*, unsigned int, void*, void*); -#endif /* !USDT2 */ - // This is a generic hashtable, designed to be used for the symbol // and string tables. // @@ -46,8 +41,8 @@ HS_DTRACE_PROBE_DECL4(hs_private, hashtable__new_entry, // %note: // - HashtableEntrys are allocated in blocks to reduce the space overhead. -BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { - BasicHashtableEntry* entry; +template BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { + BasicHashtableEntry* entry; if (_free_list) { entry = _free_list; @@ -58,10 +53,10 @@ BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { int len = _entry_size * block_size; len = 1 << log2_intptr(len); // round down to power of 2 assert(len >= _entry_size, ""); - _first_free_entry = NEW_C_HEAP_ARRAY(char, len); + _first_free_entry = NEW_C_HEAP_ARRAY2(char, len, F, CURRENT_PC); _end_block = _first_free_entry + len; } - entry = (BasicHashtableEntry*)_first_free_entry; + entry = (BasicHashtableEntry*)_first_free_entry; _first_free_entry += _entry_size; } @@ -71,29 +66,21 @@ BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { } -template HashtableEntry* Hashtable::new_entry(unsigned int hashValue, T obj) { - HashtableEntry* entry; +template HashtableEntry* Hashtable::new_entry(unsigned int hashValue, T obj) { + HashtableEntry* entry; - entry = (HashtableEntry*)BasicHashtable::new_entry(hashValue); + entry = (HashtableEntry*)BasicHashtable::new_entry(hashValue); entry->set_literal(obj); -#ifndef USDT2 - HS_DTRACE_PROBE4(hs_private, hashtable__new_entry, - this, hashValue, obj, entry); -#else /* USDT2 */ - HS_PRIVATE_HASHTABLE_NEW_ENTRY( - this, hashValue, (uintptr_t) obj, entry); -#endif /* USDT2 */ return entry; } - // Check to see if the hashtable is unbalanced. The caller set a flag to // rehash at the next safepoint. If this bucket is 60 times greater than the // expected average bucket length, it's an unbalanced hashtable. // This is somewhat an arbitrary heuristic but if one bucket gets to // rehash_count which is currently 100, there's probably something wrong. -bool BasicHashtable::check_rehash_table(int count) { +template bool BasicHashtable::check_rehash_table(int count) { assert(table_size() != 0, "underflow"); if (count > (((double)number_of_entries()/(double)table_size())*rehash_multiple)) { // Set a flag for the next safepoint, which should be at some guaranteed @@ -107,13 +94,13 @@ bool BasicHashtable::check_rehash_table(int count) { // with the existing elements. This can be used to change the hash code // and could in the future change the size of the table. -template void Hashtable::move_to(Hashtable* new_table) { - int saved_entry_count = number_of_entries(); +template void Hashtable::move_to(Hashtable* new_table) { + int saved_entry_count = BasicHashtable::number_of_entries(); // Iterate through the table and create a new entry for the new table for (int i = 0; i < new_table->table_size(); ++i) { - for (HashtableEntry* p = bucket(i); p != NULL; ) { - HashtableEntry* next = p->next(); + for (HashtableEntry* p = bucket(i); p != NULL; ) { + HashtableEntry* next = p->next(); T string = p->literal(); // Use alternate hashing algorithm on the symbol in the first table unsigned int hashValue = new_hash(string); @@ -141,16 +128,16 @@ template void Hashtable::move_to(Hashtable* new_table) { // for the elements has been used in a new table and is not // destroyed. The memory reuse will benefit resizing the SystemDictionary // to avoid a memory allocation spike at safepoint. - free_buckets(); + BasicHashtable::free_buckets(); } -void BasicHashtable::free_buckets() { +template void BasicHashtable::free_buckets() { if (NULL != _buckets) { // Don't delete the buckets in the shared space. They aren't // allocated by os::malloc if (!UseSharedSpaces || !FileMapInfo::current_info()->is_in_shared_space(_buckets)) { - FREE_C_HEAP_ARRAY(HashtableBucket, _buckets); + FREE_C_HEAP_ARRAY(HashtableBucket, _buckets, F); } _buckets = NULL; } @@ -159,13 +146,13 @@ void BasicHashtable::free_buckets() { // Reverse the order of elements in the hash buckets. -void BasicHashtable::reverse() { +template void BasicHashtable::reverse() { for (int i = 0; i < _table_size; ++i) { - BasicHashtableEntry* new_list = NULL; - BasicHashtableEntry* p = bucket(i); + BasicHashtableEntry* new_list = NULL; + BasicHashtableEntry* p = bucket(i); while (p != NULL) { - BasicHashtableEntry* next = p->next(); + BasicHashtableEntry* next = p->next(); p->set_next(new_list); new_list = p; p = next; @@ -177,7 +164,7 @@ void BasicHashtable::reverse() { // Copy the table to the shared space. -void BasicHashtable::copy_table(char** top, char* end) { +template void BasicHashtable::copy_table(char** top, char* end) { // Dump the hash table entries. @@ -186,13 +173,13 @@ void BasicHashtable::copy_table(char** top, char* end) { int i; for (i = 0; i < _table_size; ++i) { - for (BasicHashtableEntry** p = _buckets[i].entry_addr(); + for (BasicHashtableEntry** p = _buckets[i].entry_addr(); *p != NULL; p = (*p)->next_addr()) { if (*top + entry_size() > end) { report_out_of_shared_space(SharedMiscData); } - *p = (BasicHashtableEntry*)memcpy(*top, *p, entry_size()); + *p = (BasicHashtableEntry*)memcpy(*top, *p, entry_size()); *top += entry_size(); } } @@ -201,7 +188,7 @@ void BasicHashtable::copy_table(char** top, char* end) { // Set the shared bit. for (i = 0; i < _table_size; ++i) { - for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { + for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { p->set_shared(); } } @@ -211,15 +198,15 @@ void BasicHashtable::copy_table(char** top, char* end) { // Reverse the order of elements in the hash buckets. -template void Hashtable::reverse(void* boundary) { +template void Hashtable::reverse(void* boundary) { - for (int i = 0; i < table_size(); ++i) { - HashtableEntry* high_list = NULL; - HashtableEntry* low_list = NULL; - HashtableEntry* last_low_entry = NULL; - HashtableEntry* p = bucket(i); + for (int i = 0; i < this->table_size(); ++i) { + HashtableEntry* high_list = NULL; + HashtableEntry* low_list = NULL; + HashtableEntry* last_low_entry = NULL; + HashtableEntry* p = bucket(i); while (p != NULL) { - HashtableEntry* next = p->next(); + HashtableEntry* next = p->next(); if ((void*)p->literal() >= boundary) { p->set_next(high_list); high_list = p; @@ -244,8 +231,8 @@ template void Hashtable::reverse(void* boundary) { // Dump the hash table buckets. -void BasicHashtable::copy_buckets(char** top, char* end) { - intptr_t len = _table_size * sizeof(HashtableBucket); +template void BasicHashtable::copy_buckets(char** top, char* end) { + intptr_t len = _table_size * sizeof(HashtableBucket); *(intptr_t*)(*top) = len; *top += sizeof(intptr_t); @@ -255,18 +242,18 @@ void BasicHashtable::copy_buckets(char** top, char* end) { if (*top + len > end) { report_out_of_shared_space(SharedMiscData); } - _buckets = (HashtableBucket*)memcpy(*top, _buckets, len); + _buckets = (HashtableBucket*)memcpy(*top, _buckets, len); *top += len; } #ifndef PRODUCT -template void Hashtable::print() { +template void Hashtable::print() { ResourceMark rm; - for (int i = 0; i < table_size(); i++) { - HashtableEntry* entry = bucket(i); + for (int i = 0; i < BasicHashtable::table_size(); i++) { + HashtableEntry* entry = bucket(i); while(entry != NULL) { tty->print("%d : ", i); entry->literal()->print(); @@ -277,10 +264,10 @@ template void Hashtable::print() { } -void BasicHashtable::verify() { +template void BasicHashtable::verify() { int count = 0; for (int i = 0; i < table_size(); i++) { - for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { + for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { ++count; } } @@ -293,7 +280,7 @@ void BasicHashtable::verify() { #ifdef ASSERT -void BasicHashtable::verify_lookup_length(double load) { +template void BasicHashtable::verify_lookup_length(double load) { if ((double)_lookup_length / (double)_lookup_count > load * 2.0) { warning("Performance bug: SystemDictionary lookup_count=%d " "lookup_length=%d average=%lf load=%f", @@ -303,10 +290,22 @@ void BasicHashtable::verify_lookup_length(double load) { } #endif - // Explicitly instantiate these types -template class Hashtable; -template class Hashtable; -template class Hashtable; -template class Hashtable; - +template class Hashtable; +template class Hashtable; +template class Hashtable; +template class Hashtable; +#ifdef SOLARIS +template class Hashtable; +#endif +template class Hashtable; +template class Hashtable; +template class HashtableEntry; +template class HashtableEntry; +template class HashtableEntry; +template class BasicHashtableEntry; +template class BasicHashtableEntry; +template class BasicHashtable; +template class BasicHashtable; +template class BasicHashtable; +template class BasicHashtable; diff --git a/hotspot/src/share/vm/utilities/hashtable.hpp b/hotspot/src/share/vm/utilities/hashtable.hpp index d31c0ff9484..bec5e70984d 100644 --- a/hotspot/src/share/vm/utilities/hashtable.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.hpp @@ -40,7 +40,7 @@ -class BasicHashtableEntry : public CHeapObj { +template class BasicHashtableEntry : public CHeapObj { friend class VMStructs; private: unsigned int _hash; // 32-bit hash for item @@ -52,7 +52,7 @@ private: // shared entries will not change. New entries will always be // unshared and since pointers are align, bit 0 will always remain 0 // with no extra effort. - BasicHashtableEntry* _next; + BasicHashtableEntry* _next; // Windows IA64 compiler requires subclasses to be able to access these protected: @@ -69,19 +69,19 @@ public: void set_hash(unsigned int hash) { _hash = hash; } unsigned int* hash_addr() { return &_hash; } - static BasicHashtableEntry* make_ptr(BasicHashtableEntry* p) { + static BasicHashtableEntry* make_ptr(BasicHashtableEntry* p) { return (BasicHashtableEntry*)((intptr_t)p & -2); } - BasicHashtableEntry* next() const { + BasicHashtableEntry* next() const { return make_ptr(_next); } - void set_next(BasicHashtableEntry* next) { + void set_next(BasicHashtableEntry* next) { _next = next; } - BasicHashtableEntry** next_addr() { + BasicHashtableEntry** next_addr() { return &_next; } @@ -90,13 +90,13 @@ public: } void set_shared() { - _next = (BasicHashtableEntry*)((intptr_t)_next | 1); + _next = (BasicHashtableEntry*)((intptr_t)_next | 1); } }; -template class HashtableEntry : public BasicHashtableEntry { +template class HashtableEntry : public BasicHashtableEntry { friend class VMStructs; private: T _literal; // ref to item in table. @@ -108,20 +108,20 @@ public: void set_literal(T s) { _literal = s; } HashtableEntry* next() const { - return (HashtableEntry*)BasicHashtableEntry::next(); + return (HashtableEntry*)BasicHashtableEntry::next(); } HashtableEntry** next_addr() { - return (HashtableEntry**)BasicHashtableEntry::next_addr(); + return (HashtableEntry**)BasicHashtableEntry::next_addr(); } }; -class HashtableBucket : public CHeapObj { +template class HashtableBucket : public CHeapObj { friend class VMStructs; private: // Instance variable - BasicHashtableEntry* _entry; + BasicHashtableEntry* _entry; public: // Accessing @@ -129,21 +129,21 @@ public: // The following methods use order access methods to avoid race // conditions in multiprocessor systems. - BasicHashtableEntry* get_entry() const; - void set_entry(BasicHashtableEntry* l); + BasicHashtableEntry* get_entry() const; + void set_entry(BasicHashtableEntry* l); // The following method is not MT-safe and must be done under lock. - BasicHashtableEntry** entry_addr() { return &_entry; } + BasicHashtableEntry** entry_addr() { return &_entry; } }; -class BasicHashtable : public CHeapObj { +template class BasicHashtable : public CHeapObj { friend class VMStructs; public: BasicHashtable(int table_size, int entry_size); BasicHashtable(int table_size, int entry_size, - HashtableBucket* buckets, int number_of_entries); + HashtableBucket* buckets, int number_of_entries); // Sharing support. void copy_buckets(char** top, char* end); @@ -162,8 +162,8 @@ public: private: // Instance variables int _table_size; - HashtableBucket* _buckets; - BasicHashtableEntry* _free_list; + HashtableBucket* _buckets; + BasicHashtableEntry* _free_list; char* _first_free_entry; char* _end_block; int _entry_size; @@ -188,20 +188,20 @@ protected: int entry_size() const { return _entry_size; } // The following method is MT-safe and may be used with caution. - BasicHashtableEntry* bucket(int i); + BasicHashtableEntry* bucket(int i); // The following method is not MT-safe and must be done under lock. - BasicHashtableEntry** bucket_addr(int i) { return _buckets[i].entry_addr(); } + BasicHashtableEntry** bucket_addr(int i) { return _buckets[i].entry_addr(); } // Table entry management - BasicHashtableEntry* new_entry(unsigned int hashValue); + BasicHashtableEntry* new_entry(unsigned int hashValue); // Check that the table is unbalanced bool check_rehash_table(int count); // Used when moving the entry to another table // Clean up links, but do not add to free_list - void unlink_entry(BasicHashtableEntry* entry) { + void unlink_entry(BasicHashtableEntry* entry) { entry->set_next(NULL); --_number_of_entries; } @@ -221,11 +221,11 @@ protected: public: int table_size() { return _table_size; } - void set_entry(int index, BasicHashtableEntry* entry); + void set_entry(int index, BasicHashtableEntry* entry); - void add_entry(int index, BasicHashtableEntry* entry); + void add_entry(int index, BasicHashtableEntry* entry); - void free_entry(BasicHashtableEntry* entry); + void free_entry(BasicHashtableEntry* entry); int number_of_entries() { return _number_of_entries; } @@ -233,16 +233,16 @@ public: }; -template class Hashtable : public BasicHashtable { +template class Hashtable : public BasicHashtable { friend class VMStructs; public: Hashtable(int table_size, int entry_size) - : BasicHashtable(table_size, entry_size) { } + : BasicHashtable(table_size, entry_size) { } Hashtable(int table_size, int entry_size, - HashtableBucket* buckets, int number_of_entries) - : BasicHashtable(table_size, entry_size, buckets, number_of_entries) { } + HashtableBucket* buckets, int number_of_entries) + : BasicHashtable(table_size, entry_size, buckets, number_of_entries) { } // Debugging void print() PRODUCT_RETURN; @@ -264,35 +264,35 @@ protected: } // Table entry management - HashtableEntry* new_entry(unsigned int hashValue, T obj); + HashtableEntry* new_entry(unsigned int hashValue, T obj); // The following method is MT-safe and may be used with caution. - HashtableEntry* bucket(int i) { - return (HashtableEntry*)BasicHashtable::bucket(i); + HashtableEntry* bucket(int i) { + return (HashtableEntry*)BasicHashtable::bucket(i); } // The following method is not MT-safe and must be done under lock. - HashtableEntry** bucket_addr(int i) { - return (HashtableEntry**)BasicHashtable::bucket_addr(i); + HashtableEntry** bucket_addr(int i) { + return (HashtableEntry**)BasicHashtable::bucket_addr(i); } // Function to move these elements into the new table. - void move_to(Hashtable* new_table); + void move_to(Hashtable* new_table); virtual unsigned int new_hash(T) { ShouldNotReachHere(); return 0; } // should be overridden }; // Verions of hashtable where two handles are used to compute the index. -template class TwoOopHashtable : public Hashtable { +template class TwoOopHashtable : public Hashtable { friend class VMStructs; protected: TwoOopHashtable(int table_size, int entry_size) - : Hashtable(table_size, entry_size) {} + : Hashtable(table_size, entry_size) {} - TwoOopHashtable(int table_size, int entry_size, HashtableBucket* t, + TwoOopHashtable(int table_size, int entry_size, HashtableBucket* t, int number_of_entries) - : Hashtable(table_size, entry_size, t, number_of_entries) {} + : Hashtable(table_size, entry_size, t, number_of_entries) {} public: unsigned int compute_hash(Symbol* name, Handle loader) { diff --git a/hotspot/src/share/vm/utilities/hashtable.inline.hpp b/hotspot/src/share/vm/utilities/hashtable.inline.hpp index 68741427975..237fa5f41ee 100644 --- a/hotspot/src/share/vm/utilities/hashtable.inline.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.inline.hpp @@ -27,6 +27,7 @@ #include "memory/allocation.inline.hpp" #include "utilities/hashtable.hpp" +#include "utilities/dtrace.hpp" // Inline function definitions for hashtable.hpp. @@ -34,18 +35,18 @@ // Initialize a table. -inline BasicHashtable::BasicHashtable(int table_size, int entry_size) { +template inline BasicHashtable::BasicHashtable(int table_size, int entry_size) { // Called on startup, no locking needed initialize(table_size, entry_size, 0); - _buckets = NEW_C_HEAP_ARRAY(HashtableBucket, table_size); + _buckets = NEW_C_HEAP_ARRAY2(HashtableBucket, table_size, F, CURRENT_PC); for (int index = 0; index < _table_size; index++) { _buckets[index].clear(); } } -inline BasicHashtable::BasicHashtable(int table_size, int entry_size, - HashtableBucket* buckets, +template inline BasicHashtable::BasicHashtable(int table_size, int entry_size, + HashtableBucket* buckets, int number_of_entries) { // Called on startup, no locking needed initialize(table_size, entry_size, number_of_entries); @@ -53,7 +54,7 @@ inline BasicHashtable::BasicHashtable(int table_size, int entry_size, } -inline void BasicHashtable::initialize(int table_size, int entry_size, +template inline void BasicHashtable::initialize(int table_size, int entry_size, int number_of_entries) { // Called on startup, no locking needed _table_size = table_size; @@ -70,12 +71,12 @@ inline void BasicHashtable::initialize(int table_size, int entry_size, // The following method is MT-safe and may be used with caution. -inline BasicHashtableEntry* BasicHashtable::bucket(int i) { +template inline BasicHashtableEntry* BasicHashtable::bucket(int i) { return _buckets[i].get_entry(); } -inline void HashtableBucket::set_entry(BasicHashtableEntry* l) { +template inline void HashtableBucket::set_entry(BasicHashtableEntry* l) { // Warning: Preserve store ordering. The SystemDictionary is read // without locks. The new SystemDictionaryEntry must be // complete before other threads can be allowed to see it @@ -84,27 +85,27 @@ inline void HashtableBucket::set_entry(BasicHashtableEntry* l) { } -inline BasicHashtableEntry* HashtableBucket::get_entry() const { +template inline BasicHashtableEntry* HashtableBucket::get_entry() const { // Warning: Preserve load ordering. The SystemDictionary is read // without locks. The new SystemDictionaryEntry must be // complete before other threads can be allowed to see it // via a store to _buckets[index]. - return (BasicHashtableEntry*) OrderAccess::load_ptr_acquire(&_entry); + return (BasicHashtableEntry*) OrderAccess::load_ptr_acquire(&_entry); } -inline void BasicHashtable::set_entry(int index, BasicHashtableEntry* entry) { +template inline void BasicHashtable::set_entry(int index, BasicHashtableEntry* entry) { _buckets[index].set_entry(entry); } -inline void BasicHashtable::add_entry(int index, BasicHashtableEntry* entry) { +template inline void BasicHashtable::add_entry(int index, BasicHashtableEntry* entry) { entry->set_next(bucket(index)); _buckets[index].set_entry(entry); ++_number_of_entries; } -inline void BasicHashtable::free_entry(BasicHashtableEntry* entry) { +template inline void BasicHashtable::free_entry(BasicHashtableEntry* entry) { entry->set_next(_free_list); _free_list = entry; --_number_of_entries; diff --git a/hotspot/src/share/vm/utilities/histogram.cpp b/hotspot/src/share/vm/utilities/histogram.cpp index ede6817cd40..114d4ac3f41 100644 --- a/hotspot/src/share/vm/utilities/histogram.cpp +++ b/hotspot/src/share/vm/utilities/histogram.cpp @@ -69,7 +69,7 @@ int Histogram::sort_helper(HistogramElement** e1, HistogramElement** e2) { Histogram::Histogram(const char* title,int estimatedCount) { _title = title; - _elements = new (ResourceObj::C_HEAP) GrowableArray(estimatedCount,true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(estimatedCount,true); } void Histogram::add_element(HistogramElement* element) { diff --git a/hotspot/src/share/vm/utilities/histogram.hpp b/hotspot/src/share/vm/utilities/histogram.hpp index 4eaa3d4e21a..5090aa059d4 100644 --- a/hotspot/src/share/vm/utilities/histogram.hpp +++ b/hotspot/src/share/vm/utilities/histogram.hpp @@ -77,7 +77,7 @@ #ifdef ASSERT -class HistogramElement : public CHeapObj { +class HistogramElement : public CHeapObj { protected: jint _count; const char* _name; @@ -91,7 +91,7 @@ class HistogramElement : public CHeapObj { virtual int compare(HistogramElement* e1,HistogramElement* e2); }; -class Histogram : public CHeapObj { +class Histogram : public CHeapObj { protected: GrowableArray* _elements; GrowableArray* elements() { return _elements; } diff --git a/hotspot/src/share/vm/utilities/intHisto.cpp b/hotspot/src/share/vm/utilities/intHisto.cpp index 8476c294d5c..a8508c93458 100644 --- a/hotspot/src/share/vm/utilities/intHisto.cpp +++ b/hotspot/src/share/vm/utilities/intHisto.cpp @@ -27,7 +27,7 @@ IntHistogram::IntHistogram(int est, int max) : _max(max), _tot(0) { assert(0 <= est && est <= max, "Preconditions"); - _elements = new (ResourceObj::C_HEAP) GrowableArray(est, true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(est, true); guarantee(_elements != NULL, "alloc failure"); } diff --git a/hotspot/src/share/vm/utilities/intHisto.hpp b/hotspot/src/share/vm/utilities/intHisto.hpp index 7c2f4ea2d0d..2d5d2834e4d 100644 --- a/hotspot/src/share/vm/utilities/intHisto.hpp +++ b/hotspot/src/share/vm/utilities/intHisto.hpp @@ -47,7 +47,7 @@ // relation) to a count. -class IntHistogram : public CHeapObj { +class IntHistogram : public CHeapObj { protected: int _max; int _tot; diff --git a/hotspot/src/share/vm/utilities/numberSeq.cpp b/hotspot/src/share/vm/utilities/numberSeq.cpp index a2ebc40f180..907c3a15c5e 100644 --- a/hotspot/src/share/vm/utilities/numberSeq.cpp +++ b/hotspot/src/share/vm/utilities/numberSeq.cpp @@ -133,13 +133,13 @@ void NumberSeq::add(double val) { TruncatedSeq::TruncatedSeq(int length, double alpha): AbsSeq(alpha), _length(length), _next(0) { - _sequence = NEW_C_HEAP_ARRAY(double, _length); + _sequence = NEW_C_HEAP_ARRAY(double, _length, mtInternal); for (int i = 0; i < _length; ++i) _sequence[i] = 0.0; } TruncatedSeq::~TruncatedSeq() { - FREE_C_HEAP_ARRAY(double, _sequence); + FREE_C_HEAP_ARRAY(double, _sequence, mtGC); } void TruncatedSeq::add(double val) { diff --git a/hotspot/src/share/vm/utilities/numberSeq.hpp b/hotspot/src/share/vm/utilities/numberSeq.hpp index 3f42a52dc72..f8f2bc1ff63 100644 --- a/hotspot/src/share/vm/utilities/numberSeq.hpp +++ b/hotspot/src/share/vm/utilities/numberSeq.hpp @@ -25,6 +25,8 @@ #ifndef SHARE_VM_UTILITIES_NUMBERSEQ_HPP #define SHARE_VM_UTILITIES_NUMBERSEQ_HPP +#include "memory/allocation.hpp" + /** ** This file contains a few classes that represent number sequence, ** x1, x2, x3, ..., xN, and can calculate their avg, max, and sd. @@ -40,7 +42,7 @@ #define DEFAULT_ALPHA_VALUE 0.7 -class AbsSeq { +class AbsSeq: public CHeapObj { private: void init(double alpha); diff --git a/hotspot/src/share/vm/utilities/ostream.cpp b/hotspot/src/share/vm/utilities/ostream.cpp index 2dc63d0445e..fc1f07eefd2 100644 --- a/hotspot/src/share/vm/utilities/ostream.cpp +++ b/hotspot/src/share/vm/utilities/ostream.cpp @@ -384,7 +384,7 @@ rotatingFileStream::~rotatingFileStream() { if (_file != NULL) { if (_need_close) fclose(_file); _file = NULL; - FREE_C_HEAP_ARRAY(char, _file_name); + FREE_C_HEAP_ARRAY(char, _file_name, mtInternal); _file_name = NULL; } } @@ -392,7 +392,7 @@ rotatingFileStream::~rotatingFileStream() { rotatingFileStream::rotatingFileStream(const char* file_name) { _cur_file_num = 0; _bytes_writen = 0L; - _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10); + _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10, mtInternal); jio_snprintf(_file_name, strlen(file_name)+10, "%s.%d", file_name, _cur_file_num); _file = fopen(_file_name, "w"); _need_close = true; @@ -401,7 +401,7 @@ rotatingFileStream::rotatingFileStream(const char* file_name) { rotatingFileStream::rotatingFileStream(const char* file_name, const char* opentype) { _cur_file_num = 0; _bytes_writen = 0L; - _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10); + _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10, mtInternal); jio_snprintf(_file_name, strlen(file_name)+10, "%s.%d", file_name, _cur_file_num); _file = fopen(_file_name, opentype); _need_close = true; @@ -524,7 +524,7 @@ static const char* make_log_name(const char* log_name, const char* force_directo } // Create big enough buffer. - char *buf = NEW_C_HEAP_ARRAY(char, buffer_length); + char *buf = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal); strcpy(buf, ""); if (force_directory != NULL) { @@ -549,7 +549,7 @@ void defaultStream::init_log() { // %%% Need a MutexLocker? const char* log_name = LogFile != NULL ? LogFile : "hotspot.log"; const char* try_name = make_log_name(log_name, NULL); - fileStream* file = new(ResourceObj::C_HEAP) fileStream(try_name); + fileStream* file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name); if (!file->is_open()) { // Try again to open the file. char warnbuf[O_BUFLEN*2]; @@ -557,18 +557,18 @@ void defaultStream::init_log() { "Warning: Cannot open log file: %s\n", try_name); // Note: This feature is for maintainer use only. No need for L10N. jio_print(warnbuf); - FREE_C_HEAP_ARRAY(char, try_name); + FREE_C_HEAP_ARRAY(char, try_name, mtInternal); try_name = make_log_name("hs_pid%p.log", os::get_temp_directory()); jio_snprintf(warnbuf, sizeof(warnbuf), "Warning: Forcing option -XX:LogFile=%s\n", try_name); jio_print(warnbuf); delete file; - file = new(ResourceObj::C_HEAP) fileStream(try_name); - FREE_C_HEAP_ARRAY(char, try_name); + file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name); + FREE_C_HEAP_ARRAY(char, try_name, mtInternal); } if (file->is_open()) { _log_file = file; - xmlStream* xs = new(ResourceObj::C_HEAP) xmlStream(file); + xmlStream* xs = new(ResourceObj::C_HEAP, mtInternal) xmlStream(file); _outer_xmlStream = xs; if (this == tty) xtty = xs; // Write XML header. @@ -815,7 +815,7 @@ void ttyLocker::break_tty_lock_for_safepoint(intx holder) { void ostream_init() { if (defaultStream::instance == NULL) { - defaultStream::instance = new(ResourceObj::C_HEAP) defaultStream(); + defaultStream::instance = new(ResourceObj::C_HEAP, mtInternal) defaultStream(); tty = defaultStream::instance; // We want to ensure that time stamps in GC logs consider time 0 @@ -833,9 +833,9 @@ void ostream_init_log() { gclog_or_tty = tty; // default to tty if (Arguments::gc_log_filename() != NULL) { fileStream * gclog = UseGCLogFileRotation ? - new(ResourceObj::C_HEAP) + new(ResourceObj::C_HEAP, mtInternal) rotatingFileStream(Arguments::gc_log_filename()) : - new(ResourceObj::C_HEAP) + new(ResourceObj::C_HEAP, mtInternal) fileStream(Arguments::gc_log_filename()); if (gclog->is_open()) { // now we update the time stamp of the GC log to be synced up @@ -940,7 +940,7 @@ void staticBufferStream::vprint_cr(const char* format, va_list argptr) { bufferedStream::bufferedStream(size_t initial_size, size_t bufmax) : outputStream() { buffer_length = initial_size; - buffer = NEW_C_HEAP_ARRAY(char, buffer_length); + buffer = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal); buffer_pos = 0; buffer_fixed = false; buffer_max = bufmax; @@ -971,7 +971,7 @@ void bufferedStream::write(const char* s, size_t len) { if (end < buffer_length * 2) { end = buffer_length * 2; } - buffer = REALLOC_C_HEAP_ARRAY(char, buffer, end); + buffer = REALLOC_C_HEAP_ARRAY(char, buffer, end, mtInternal); buffer_length = end; } } @@ -989,7 +989,7 @@ char* bufferedStream::as_string() { bufferedStream::~bufferedStream() { if (!buffer_fixed) { - FREE_C_HEAP_ARRAY(char, buffer); + FREE_C_HEAP_ARRAY(char, buffer, mtInternal); } } diff --git a/hotspot/src/share/vm/utilities/stack.hpp b/hotspot/src/share/vm/utilities/stack.hpp index eedaa7280d0..1cf85a51ac9 100644 --- a/hotspot/src/share/vm/utilities/stack.hpp +++ b/hotspot/src/share/vm/utilities/stack.hpp @@ -25,6 +25,7 @@ #ifndef SHARE_VM_UTILITIES_STACK_HPP #define SHARE_VM_UTILITIES_STACK_HPP +#include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" // Class Stack (below) grows and shrinks by linking together "segments" which @@ -51,11 +52,11 @@ // implementation in class Stack assumes that alloc() will terminate the process // if the allocation fails. -template class StackIterator; +template class StackIterator; // StackBase holds common data/methods that don't depend on the element type, // factored out to reduce template code duplication. -class StackBase +template class StackBase { public: size_t segment_size() const { return _seg_size; } // Elements per segment. @@ -89,11 +90,11 @@ protected: #define inline #endif // __GNUC__ -template -class Stack: public StackBase +template +class Stack: public StackBase { public: - friend class StackIterator; + friend class StackIterator; // segment_size: number of items per segment // max_cache_size: maxmium number of *segments* to cache @@ -103,15 +104,15 @@ public: size_t max_cache_size = 4, size_t max_size = 0); inline ~Stack() { clear(true); } - inline bool is_empty() const { return _cur_seg == NULL; } - inline bool is_full() const { return _full_seg_size >= max_size(); } + inline bool is_empty() const { return this->_cur_seg == NULL; } + inline bool is_full() const { return this->_full_seg_size >= this->max_size(); } // Performance sensitive code should use is_empty() instead of size() == 0 and // is_full() instead of size() == max_size(). Using a conditional here allows // just one var to be updated when pushing/popping elements instead of two; // _full_seg_size is updated only when pushing/popping segments. inline size_t size() const { - return is_empty() ? 0 : _full_seg_size + _cur_seg_size; + return is_empty() ? 0 : this->_full_seg_size + this->_cur_seg_size; } inline void push(E elem); @@ -161,18 +162,18 @@ private: E* _cache; // Segment cache to avoid ping-ponging. }; -template class ResourceStack: public Stack, public ResourceObj +template class ResourceStack: public Stack, public ResourceObj { public: // If this class becomes widely used, it may make sense to save the Thread // and use it when allocating segments. - ResourceStack(size_t segment_size = Stack::default_segment_size()): - Stack(segment_size, max_uintx) +// ResourceStack(size_t segment_size = Stack::default_segment_size()): + ResourceStack(size_t segment_size): Stack(segment_size, max_uintx) { } // Set the segment pointers to NULL so the parent dtor does not free them; // that must be done by the ResourceMark code. - ~ResourceStack() { Stack::reset(true); } + ~ResourceStack() { Stack::reset(true); } protected: virtual E* alloc(size_t bytes); @@ -182,13 +183,13 @@ private: void clear(bool clear_cache = false); }; -template +template class StackIterator: public StackObj { public: - StackIterator(Stack& stack): _stack(stack) { sync(); } + StackIterator(Stack& stack): _stack(stack) { sync(); } - Stack& stack() const { return _stack; } + Stack& stack() const { return _stack; } bool is_empty() const { return _cur_seg == NULL; } @@ -198,7 +199,7 @@ public: void sync(); // Sync the iterator's state to the stack's current state. private: - Stack& _stack; + Stack& _stack; size_t _cur_seg_size; E* _cur_seg; size_t _full_seg_size; diff --git a/hotspot/src/share/vm/utilities/stack.inline.hpp b/hotspot/src/share/vm/utilities/stack.inline.hpp index bb97fc9a274..f53fd3c2c02 100644 --- a/hotspot/src/share/vm/utilities/stack.inline.hpp +++ b/hotspot/src/share/vm/utilities/stack.inline.hpp @@ -27,7 +27,7 @@ #include "utilities/stack.hpp" -StackBase::StackBase(size_t segment_size, size_t max_cache_size, +template StackBase::StackBase(size_t segment_size, size_t max_cache_size, size_t max_size): _seg_size(segment_size), _max_cache_size(max_cache_size), @@ -36,7 +36,7 @@ StackBase::StackBase(size_t segment_size, size_t max_cache_size, assert(_max_size % _seg_size == 0, "not a multiple"); } -size_t StackBase::adjust_max_size(size_t max_size, size_t seg_size) +template size_t StackBase::adjust_max_size(size_t max_size, size_t seg_size) { assert(seg_size > 0, "cannot be 0"); assert(max_size >= seg_size || max_size == 0, "max_size too small"); @@ -47,54 +47,54 @@ size_t StackBase::adjust_max_size(size_t max_size, size_t seg_size) return (max_size + seg_size - 1) / seg_size * seg_size; } -template -Stack::Stack(size_t segment_size, size_t max_cache_size, size_t max_size): - StackBase(adjust_segment_size(segment_size), max_cache_size, max_size) +template +Stack::Stack(size_t segment_size, size_t max_cache_size, size_t max_size): + StackBase(adjust_segment_size(segment_size), max_cache_size, max_size) { reset(true); } -template -void Stack::push(E item) +template +void Stack::push(E item) { assert(!is_full(), "pushing onto a full stack"); - if (_cur_seg_size == _seg_size) { + if (this->_cur_seg_size == this->_seg_size) { push_segment(); } - _cur_seg[_cur_seg_size] = item; - ++_cur_seg_size; + this->_cur_seg[this->_cur_seg_size] = item; + ++this->_cur_seg_size; } -template -E Stack::pop() +template +E Stack::pop() { assert(!is_empty(), "popping from an empty stack"); - if (_cur_seg_size == 1) { - E tmp = _cur_seg[--_cur_seg_size]; + if (this->_cur_seg_size == 1) { + E tmp = _cur_seg[--this->_cur_seg_size]; pop_segment(); return tmp; } - return _cur_seg[--_cur_seg_size]; + return this->_cur_seg[--this->_cur_seg_size]; } -template -void Stack::clear(bool clear_cache) +template +void Stack::clear(bool clear_cache) { free_segments(_cur_seg); if (clear_cache) free_segments(_cache); reset(clear_cache); } -template -size_t Stack::default_segment_size() +template +size_t Stack::default_segment_size() { // Number of elements that fit in 4K bytes minus the size of two pointers // (link field and malloc header). return (4096 - 2 * sizeof(E*)) / sizeof(E); } -template -size_t Stack::adjust_segment_size(size_t seg_size) +template +size_t Stack::adjust_segment_size(size_t seg_size) { const size_t elem_sz = sizeof(E); const size_t ptr_sz = sizeof(E*); @@ -105,93 +105,93 @@ size_t Stack::adjust_segment_size(size_t seg_size) return seg_size; } -template -size_t Stack::link_offset() const +template +size_t Stack::link_offset() const { - return align_size_up(_seg_size * sizeof(E), sizeof(E*)); + return align_size_up(this->_seg_size * sizeof(E), sizeof(E*)); } -template -size_t Stack::segment_bytes() const +template +size_t Stack::segment_bytes() const { return link_offset() + sizeof(E*); } -template -E** Stack::link_addr(E* seg) const +template +E** Stack::link_addr(E* seg) const { return (E**) ((char*)seg + link_offset()); } -template -E* Stack::get_link(E* seg) const +template +E* Stack::get_link(E* seg) const { return *link_addr(seg); } -template -E* Stack::set_link(E* new_seg, E* old_seg) +template +E* Stack::set_link(E* new_seg, E* old_seg) { *link_addr(new_seg) = old_seg; return new_seg; } -template -E* Stack::alloc(size_t bytes) +template +E* Stack::alloc(size_t bytes) { - return (E*) NEW_C_HEAP_ARRAY(char, bytes); + return (E*) NEW_C_HEAP_ARRAY(char, bytes, F); } -template -void Stack::free(E* addr, size_t bytes) +template +void Stack::free(E* addr, size_t bytes) { - FREE_C_HEAP_ARRAY(char, (char*) addr); + FREE_C_HEAP_ARRAY(char, (char*) addr, F); } -template -void Stack::push_segment() +template +void Stack::push_segment() { - assert(_cur_seg_size == _seg_size, "current segment is not full"); + assert(this->_cur_seg_size == this->_seg_size, "current segment is not full"); E* next; - if (_cache_size > 0) { + if (this->_cache_size > 0) { // Use a cached segment. next = _cache; _cache = get_link(_cache); - --_cache_size; + --this->_cache_size; } else { next = alloc(segment_bytes()); DEBUG_ONLY(zap_segment(next, true);) } const bool at_empty_transition = is_empty(); - _cur_seg = set_link(next, _cur_seg); - _cur_seg_size = 0; - _full_seg_size += at_empty_transition ? 0 : _seg_size; + this->_cur_seg = set_link(next, _cur_seg); + this->_cur_seg_size = 0; + this->_full_seg_size += at_empty_transition ? 0 : this->_seg_size; DEBUG_ONLY(verify(at_empty_transition);) } -template -void Stack::pop_segment() +template +void Stack::pop_segment() { - assert(_cur_seg_size == 0, "current segment is not empty"); + assert(this->_cur_seg_size == 0, "current segment is not empty"); E* const prev = get_link(_cur_seg); - if (_cache_size < _max_cache_size) { + if (this->_cache_size < this->_max_cache_size) { // Add the current segment to the cache. DEBUG_ONLY(zap_segment(_cur_seg, false);) _cache = set_link(_cur_seg, _cache); - ++_cache_size; + ++this->_cache_size; } else { DEBUG_ONLY(zap_segment(_cur_seg, true);) free(_cur_seg, segment_bytes()); } const bool at_empty_transition = prev == NULL; - _cur_seg = prev; - _cur_seg_size = _seg_size; - _full_seg_size -= at_empty_transition ? 0 : _seg_size; + this->_cur_seg = prev; + this->_cur_seg_size = this->_seg_size; + this->_full_seg_size -= at_empty_transition ? 0 : this->_seg_size; DEBUG_ONLY(verify(at_empty_transition);) } -template -void Stack::free_segments(E* seg) +template +void Stack::free_segments(E* seg) { const size_t bytes = segment_bytes(); while (seg != NULL) { @@ -201,37 +201,37 @@ void Stack::free_segments(E* seg) } } -template -void Stack::reset(bool reset_cache) +template +void Stack::reset(bool reset_cache) { - _cur_seg_size = _seg_size; // So push() will alloc a new segment. - _full_seg_size = 0; + this->_cur_seg_size = this->_seg_size; // So push() will alloc a new segment. + this->_full_seg_size = 0; _cur_seg = NULL; if (reset_cache) { - _cache_size = 0; + this->_cache_size = 0; _cache = NULL; } } #ifdef ASSERT -template -void Stack::verify(bool at_empty_transition) const +template +void Stack::verify(bool at_empty_transition) const { - assert(size() <= max_size(), "stack exceeded bounds"); - assert(cache_size() <= max_cache_size(), "cache exceeded bounds"); - assert(_cur_seg_size <= segment_size(), "segment index exceeded bounds"); + assert(size() <= this->max_size(), "stack exceeded bounds"); + assert(this->cache_size() <= this->max_cache_size(), "cache exceeded bounds"); + assert(this->_cur_seg_size <= this->segment_size(), "segment index exceeded bounds"); - assert(_full_seg_size % _seg_size == 0, "not a multiple"); + assert(this->_full_seg_size % this->_seg_size == 0, "not a multiple"); assert(at_empty_transition || is_empty() == (size() == 0), "mismatch"); - assert((_cache == NULL) == (cache_size() == 0), "mismatch"); + assert((_cache == NULL) == (this->cache_size() == 0), "mismatch"); if (is_empty()) { - assert(_cur_seg_size == segment_size(), "sanity"); + assert(this->_cur_seg_size == this->segment_size(), "sanity"); } } -template -void Stack::zap_segment(E* seg, bool zap_link_field) const +template +void Stack::zap_segment(E* seg, bool zap_link_field) const { if (!ZapStackSegments) return; const size_t zap_bytes = segment_bytes() - (zap_link_field ? 0 : sizeof(E*)); @@ -243,28 +243,28 @@ void Stack::zap_segment(E* seg, bool zap_link_field) const } #endif -template -E* ResourceStack::alloc(size_t bytes) +template +E* ResourceStack::alloc(size_t bytes) { return (E*) resource_allocate_bytes(bytes); } -template -void ResourceStack::free(E* addr, size_t bytes) +template +void ResourceStack::free(E* addr, size_t bytes) { resource_free_bytes((char*) addr, bytes); } -template -void StackIterator::sync() +template +void StackIterator::sync() { _full_seg_size = _stack._full_seg_size; _cur_seg_size = _stack._cur_seg_size; _cur_seg = _stack._cur_seg; } -template -E* StackIterator::next_addr() +template +E* StackIterator::next_addr() { assert(!is_empty(), "no items left"); if (_cur_seg_size == 1) { diff --git a/hotspot/src/share/vm/utilities/taskqueue.hpp b/hotspot/src/share/vm/utilities/taskqueue.hpp index 545c6dbb5e0..9d67af456ff 100644 --- a/hotspot/src/share/vm/utilities/taskqueue.hpp +++ b/hotspot/src/share/vm/utilities/taskqueue.hpp @@ -132,8 +132,8 @@ void TaskQueueStats::reset() { } #endif // TASKQUEUE_STATS -template -class TaskQueueSuper: public CHeapObj { +template +class TaskQueueSuper: public CHeapObj { protected: // Internal type for indexing the queue; also used for the tag. typedef NOT_LP64(uint16_t) LP64_ONLY(uint32_t) idx_t; @@ -249,22 +249,27 @@ public: TASKQUEUE_STATS_ONLY(TaskQueueStats stats;) }; -template -class GenericTaskQueue: public TaskQueueSuper { -protected: - typedef typename TaskQueueSuper::Age Age; - typedef typename TaskQueueSuper::idx_t idx_t; - using TaskQueueSuper::_bottom; - using TaskQueueSuper::_age; - using TaskQueueSuper::increment_index; - using TaskQueueSuper::decrement_index; - using TaskQueueSuper::dirty_size; + +template +class GenericTaskQueue: public TaskQueueSuper { +protected: + typedef typename TaskQueueSuper::Age Age; + typedef typename TaskQueueSuper::idx_t idx_t; + + using TaskQueueSuper::_bottom; + using TaskQueueSuper::_age; + using TaskQueueSuper::increment_index; + using TaskQueueSuper::decrement_index; + using TaskQueueSuper::dirty_size; public: - using TaskQueueSuper::max_elems; - using TaskQueueSuper::size; - TASKQUEUE_STATS_ONLY(using TaskQueueSuper::stats;) + using TaskQueueSuper::max_elems; + using TaskQueueSuper::size; + +#if TASKQUEUE_STATS + using TaskQueueSuper::stats; +#endif private: // Slow paths for push, pop_local. (pop_global has no fast path.) @@ -302,18 +307,18 @@ private: volatile E* _elems; }; -template -GenericTaskQueue::GenericTaskQueue() { +template +GenericTaskQueue::GenericTaskQueue() { assert(sizeof(Age) == sizeof(size_t), "Depends on this."); } -template -void GenericTaskQueue::initialize() { - _elems = NEW_C_HEAP_ARRAY(E, N); +template +void GenericTaskQueue::initialize() { + _elems = NEW_C_HEAP_ARRAY(E, N, F); } -template -void GenericTaskQueue::oops_do(OopClosure* f) { +template +void GenericTaskQueue::oops_do(OopClosure* f) { // tty->print_cr("START OopTaskQueue::oops_do"); uint iters = size(); uint index = _bottom; @@ -329,8 +334,8 @@ void GenericTaskQueue::oops_do(OopClosure* f) { // tty->print_cr("END OopTaskQueue::oops_do"); } -template -bool GenericTaskQueue::push_slow(E t, uint dirty_n_elems) { +template +bool GenericTaskQueue::push_slow(E t, uint dirty_n_elems) { if (dirty_n_elems == N - 1) { // Actually means 0, so do the push. uint localBot = _bottom; @@ -349,8 +354,8 @@ bool GenericTaskQueue::push_slow(E t, uint dirty_n_elems) { // whenever the queue goes empty which it will do here if this thread // gets the last task or in pop_global() if the queue wraps (top == 0 // and pop_global() succeeds, see pop_global()). -template -bool GenericTaskQueue::pop_local_slow(uint localBot, Age oldAge) { +template +bool GenericTaskQueue::pop_local_slow(uint localBot, Age oldAge) { // This queue was observed to contain exactly one element; either this // thread will claim it, or a competing "pop_global". In either case, // the queue will be logically empty afterwards. Create a new Age value @@ -382,8 +387,8 @@ bool GenericTaskQueue::pop_local_slow(uint localBot, Age oldAge) { return false; } -template -bool GenericTaskQueue::pop_global(E& t) { +template +bool GenericTaskQueue::pop_global(E& t) { Age oldAge = _age.get(); uint localBot = _bottom; uint n_elems = size(localBot, oldAge.top()); @@ -402,9 +407,9 @@ bool GenericTaskQueue::pop_global(E& t) { return resAge == oldAge; } -template -GenericTaskQueue::~GenericTaskQueue() { - FREE_C_HEAP_ARRAY(E, _elems); +template +GenericTaskQueue::~GenericTaskQueue() { + FREE_C_HEAP_ARRAY(E, _elems, F); } // OverflowTaskQueue is a TaskQueue that also includes an overflow stack for @@ -418,12 +423,12 @@ GenericTaskQueue::~GenericTaskQueue() { // Note that size() is not hidden--it returns the number of elements in the // TaskQueue, and does not include the size of the overflow stack. This // simplifies replacement of GenericTaskQueues with OverflowTaskQueues. -template -class OverflowTaskQueue: public GenericTaskQueue +template +class OverflowTaskQueue: public GenericTaskQueue { public: - typedef Stack overflow_t; - typedef GenericTaskQueue taskqueue_t; + typedef Stack overflow_t; + typedef GenericTaskQueue taskqueue_t; TASKQUEUE_STATS_ONLY(using taskqueue_t::stats;) @@ -445,8 +450,8 @@ private: overflow_t _overflow_stack; }; -template -bool OverflowTaskQueue::push(E t) +template +bool OverflowTaskQueue::push(E t) { if (!taskqueue_t::push(t)) { overflow_stack()->push(t); @@ -455,15 +460,15 @@ bool OverflowTaskQueue::push(E t) return true; } -template -bool OverflowTaskQueue::pop_overflow(E& t) +template +bool OverflowTaskQueue::pop_overflow(E& t) { if (overflow_empty()) return false; t = overflow_stack()->pop(); return true; } -class TaskQueueSetSuper: public CHeapObj { +class TaskQueueSetSuper { protected: static int randomParkAndMiller(int* seed0); public: @@ -471,8 +476,11 @@ public: virtual bool peek() = 0; }; -template -class GenericTaskQueueSet: public TaskQueueSetSuper { +template class TaskQueueSetSuperImpl: public CHeapObj, public TaskQueueSetSuper { +}; + +template +class GenericTaskQueueSet: public TaskQueueSetSuperImpl { private: uint _n; T** _queues; @@ -482,7 +490,7 @@ public: GenericTaskQueueSet(int n) : _n(n) { typedef T* GenericTaskQueuePtr; - _queues = NEW_C_HEAP_ARRAY(GenericTaskQueuePtr, n); + _queues = NEW_C_HEAP_ARRAY(GenericTaskQueuePtr, n, F); for (int i = 0; i < n; i++) { _queues[i] = NULL; } @@ -506,19 +514,19 @@ public: bool peek(); }; -template void -GenericTaskQueueSet::register_queue(uint i, T* q) { +template void +GenericTaskQueueSet::register_queue(uint i, T* q) { assert(i < _n, "index out of range."); _queues[i] = q; } -template T* -GenericTaskQueueSet::queue(uint i) { +template T* +GenericTaskQueueSet::queue(uint i) { return _queues[i]; } -template bool -GenericTaskQueueSet::steal(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal(uint queue_num, int* seed, E& t) { for (uint i = 0; i < 2 * _n; i++) { if (steal_best_of_2(queue_num, seed, t)) { TASKQUEUE_STATS_ONLY(queue(queue_num)->stats.record_steal(true)); @@ -529,8 +537,8 @@ GenericTaskQueueSet::steal(uint queue_num, int* seed, E& t) { return false; } -template bool -GenericTaskQueueSet::steal_best_of_all(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal_best_of_all(uint queue_num, int* seed, E& t) { if (_n > 2) { int best_k; uint best_sz = 0; @@ -553,11 +561,11 @@ GenericTaskQueueSet::steal_best_of_all(uint queue_num, int* seed, E& t) { } } -template bool -GenericTaskQueueSet::steal_1_random(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal_1_random(uint queue_num, int* seed, E& t) { if (_n > 2) { uint k = queue_num; - while (k == queue_num) k = randomParkAndMiller(seed) % _n; + while (k == queue_num) k = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; return _queues[2]->pop_global(t); } else if (_n == 2) { // Just try the other one. @@ -569,13 +577,13 @@ GenericTaskQueueSet::steal_1_random(uint queue_num, int* seed, E& t) { } } -template bool -GenericTaskQueueSet::steal_best_of_2(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal_best_of_2(uint queue_num, int* seed, E& t) { if (_n > 2) { uint k1 = queue_num; - while (k1 == queue_num) k1 = randomParkAndMiller(seed) % _n; + while (k1 == queue_num) k1 = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; uint k2 = queue_num; - while (k2 == queue_num || k2 == k1) k2 = randomParkAndMiller(seed) % _n; + while (k2 == queue_num || k2 == k1) k2 = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; // Sample both and try the larger. uint sz1 = _queues[k1]->size(); uint sz2 = _queues[k2]->size(); @@ -591,8 +599,8 @@ GenericTaskQueueSet::steal_best_of_2(uint queue_num, int* seed, E& t) { } } -template -bool GenericTaskQueueSet::peek() { +template +bool GenericTaskQueueSet::peek() { // Try all the queues. for (uint j = 0; j < _n; j++) { if (_queues[j]->peek()) @@ -602,7 +610,7 @@ bool GenericTaskQueueSet::peek() { } // When to terminate from the termination protocol. -class TerminatorTerminator: public CHeapObj { +class TerminatorTerminator: public CHeapObj { public: virtual bool should_exit_termination() = 0; }; @@ -665,8 +673,8 @@ public: #endif }; -template inline bool -GenericTaskQueue::push(E t) { +template inline bool +GenericTaskQueue::push(E t) { uint localBot = _bottom; assert((localBot >= 0) && (localBot < N), "_bottom out of range."); idx_t top = _age.top(); @@ -683,8 +691,8 @@ GenericTaskQueue::push(E t) { } } -template inline bool -GenericTaskQueue::pop_local(E& t) { +template inline bool +GenericTaskQueue::pop_local(E& t) { uint localBot = _bottom; // This value cannot be N-1. That can only occur as a result of // the assignment to bottom in this method. If it does, this method @@ -715,8 +723,8 @@ GenericTaskQueue::pop_local(E& t) { } } -typedef GenericTaskQueue OopTaskQueue; -typedef GenericTaskQueueSet OopTaskQueueSet; +typedef GenericTaskQueue OopTaskQueue; +typedef GenericTaskQueueSet OopTaskQueueSet; #ifdef _MSC_VER #pragma warning(push) @@ -796,11 +804,11 @@ private: #pragma warning(pop) #endif -typedef OverflowTaskQueue OopStarTaskQueue; -typedef GenericTaskQueueSet OopStarTaskQueueSet; +typedef OverflowTaskQueue OopStarTaskQueue; +typedef GenericTaskQueueSet OopStarTaskQueueSet; -typedef OverflowTaskQueue RegionTaskQueue; -typedef GenericTaskQueueSet RegionTaskQueueSet; +typedef OverflowTaskQueue RegionTaskQueue; +typedef GenericTaskQueueSet RegionTaskQueueSet; #endif // SHARE_VM_UTILITIES_TASKQUEUE_HPP diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp index e450676fa7a..2c4b5d36bd1 100644 --- a/hotspot/src/share/vm/utilities/vmError.cpp +++ b/hotspot/src/share/vm/utilities/vmError.cpp @@ -33,6 +33,7 @@ #include "runtime/thread.hpp" #include "runtime/vmThread.hpp" #include "runtime/vm_operations.hpp" +#include "services/memTracker.hpp" #include "utilities/debug.hpp" #include "utilities/decoder.hpp" #include "utilities/defaultStream.hpp" @@ -818,6 +819,9 @@ void VMError::report_and_die() { static bool transmit_report_done = false; // done error reporting static fdStream log; // error log + // disble NMT to avoid further exception + MemTracker::shutdown(MemTracker::NMT_error_reporting); + if (SuppressFatalErrorMessage) { os::abort(); } diff --git a/hotspot/src/share/vm/utilities/workgroup.cpp b/hotspot/src/share/vm/utilities/workgroup.cpp index 0ef1f833d04..4952058b484 100644 --- a/hotspot/src/share/vm/utilities/workgroup.cpp +++ b/hotspot/src/share/vm/utilities/workgroup.cpp @@ -77,7 +77,7 @@ bool WorkGang::initialize_workers() { name(), total_workers()); } - _gang_workers = NEW_C_HEAP_ARRAY(GangWorker*, total_workers()); + _gang_workers = NEW_C_HEAP_ARRAY(GangWorker*, total_workers(), mtInternal); if (gang_workers() == NULL) { vm_exit_out_of_memory(0, "Cannot create GangWorker array."); return false; @@ -241,6 +241,7 @@ void GangWorker::run() { void GangWorker::initialize() { this->initialize_thread_local_storage(); + this->record_stack_base_and_size(); assert(_gang != NULL, "No gang to run in"); os::set_priority(this, NearMaxPriority); if (TraceWorkGang) { @@ -421,7 +422,7 @@ void WorkGangBarrierSync::enter() { SubTasksDone::SubTasksDone(uint n) : _n_tasks(n), _n_threads(1), _tasks(NULL) { - _tasks = NEW_C_HEAP_ARRAY(uint, n); + _tasks = NEW_C_HEAP_ARRAY(uint, n, mtInternal); guarantee(_tasks != NULL, "alloc failure"); clear(); } @@ -476,7 +477,7 @@ void SubTasksDone::all_tasks_completed() { SubTasksDone::~SubTasksDone() { - if (_tasks != NULL) FREE_C_HEAP_ARRAY(jint, _tasks); + if (_tasks != NULL) FREE_C_HEAP_ARRAY(jint, _tasks, mtInternal); } // *** SequentialSubTasksDone diff --git a/hotspot/src/share/vm/utilities/workgroup.hpp b/hotspot/src/share/vm/utilities/workgroup.hpp index 7fc0ddf5674..9bd34e6bc82 100644 --- a/hotspot/src/share/vm/utilities/workgroup.hpp +++ b/hotspot/src/share/vm/utilities/workgroup.hpp @@ -123,7 +123,7 @@ class AbstractGangTaskWOopQueues : public AbstractGangTask { // Class AbstractWorkGang: // An abstract class representing a gang of workers. // You subclass this to supply an implementation of run_task(). -class AbstractWorkGang: public CHeapObj { +class AbstractWorkGang: public CHeapObj { // Here's the public interface to this class. public: // Constructor and destructor. @@ -402,7 +402,7 @@ public: // subtasks will be identified by integer indices, usually elements of an // enumeration type. -class SubTasksDone : public CHeapObj { +class SubTasksDone: public CHeapObj { uint* _tasks; uint _n_tasks; // _n_threads is used to determine when a sub task is done. diff --git a/hotspot/src/share/vm/utilities/xmlstream.cpp b/hotspot/src/share/vm/utilities/xmlstream.cpp index 8646c309bfb..2753b850cbb 100644 --- a/hotspot/src/share/vm/utilities/xmlstream.cpp +++ b/hotspot/src/share/vm/utilities/xmlstream.cpp @@ -43,7 +43,7 @@ void xmlStream::initialize(outputStream* out) { #ifdef ASSERT _element_depth = 0; int init_len = 100; - char* init_buf = NEW_C_HEAP_ARRAY(char, init_len); + char* init_buf = NEW_C_HEAP_ARRAY(char, init_len, mtInternal); _element_close_stack_low = init_buf; _element_close_stack_high = init_buf + init_len; _element_close_stack_ptr = init_buf + init_len - 1; @@ -58,7 +58,7 @@ void xmlStream::initialize(outputStream* out) { #ifdef ASSERT xmlStream::~xmlStream() { - FREE_C_HEAP_ARRAY(char, _element_close_stack_low); + FREE_C_HEAP_ARRAY(char, _element_close_stack_low, mtInternal); } #endif @@ -155,14 +155,14 @@ void xmlStream::see_tag(const char* tag, bool push) { int old_len = _element_close_stack_high - old_ptr; int new_len = old_len * 2; if (new_len < 100) new_len = 100; - char* new_low = NEW_C_HEAP_ARRAY(char, new_len); + char* new_low = NEW_C_HEAP_ARRAY(char, new_len, mtInternal); char* new_high = new_low + new_len; char* new_ptr = new_high - old_len; memcpy(new_ptr, old_ptr, old_len); _element_close_stack_high = new_high; _element_close_stack_low = new_low; _element_close_stack_ptr = new_ptr; - FREE_C_HEAP_ARRAY(char, old_low); + FREE_C_HEAP_ARRAY(char, old_low, mtInternal); push_ptr = new_ptr - (tag_len+1); } assert(push_ptr >= _element_close_stack_low, "in range"); From d1080de4eeda8525bae90b7965b300fbee38e8dd Mon Sep 17 00:00:00 2001 From: Chris Dennis Date: Tue, 3 Jul 2012 01:41:29 -0400 Subject: [PATCH 32/83] 7179383: MaxDirectMemorySize argument parsing is broken for values >2G Change hotspot flag to be unsigned Reviewed-by: dholmes, sla, fparain, brutisso --- hotspot/src/share/vm/prims/jvm.cpp | 10 +++++++--- hotspot/src/share/vm/runtime/arguments.cpp | 11 +++++++++++ hotspot/src/share/vm/runtime/globals.hpp | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/hotspot/src/share/vm/prims/jvm.cpp b/hotspot/src/share/vm/prims/jvm.cpp index 3f097819e3d..1dfec11a862 100644 --- a/hotspot/src/share/vm/prims/jvm.cpp +++ b/hotspot/src/share/vm/prims/jvm.cpp @@ -345,9 +345,13 @@ JVM_ENTRY(jobject, JVM_InitProperties(JNIEnv *env, jobject properties)) // Do this after setting user properties to prevent people // from setting the value with a -D option, as requested. { - char as_chars[256]; - jio_snprintf(as_chars, sizeof(as_chars), INTX_FORMAT, MaxDirectMemorySize); - PUTPROP(props, "sun.nio.MaxDirectMemorySize", as_chars); + if (FLAG_IS_DEFAULT(MaxDirectMemorySize)) { + PUTPROP(props, "sun.nio.MaxDirectMemorySize", "-1"); + } else { + char as_chars[256]; + jio_snprintf(as_chars, sizeof(as_chars), UINTX_FORMAT, MaxDirectMemorySize); + PUTPROP(props, "sun.nio.MaxDirectMemorySize", as_chars); + } } // JVM monitoring and management support diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index 2a13bffc3b1..921b76fd9c2 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -2709,6 +2709,17 @@ SOLARIS_ONLY( return JNI_EINVAL; } FLAG_SET_CMDLINE(uintx, ConcGCThreads, conc_threads); + } 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); + if (errcode != arg_in_range) { + jio_fprintf(defaultStream::error_stream(), + "Invalid maximum direct memory size: %s\n", + option->optionString); + describe_range_error(errcode); + return JNI_EINVAL; + } + FLAG_SET_CMDLINE(uintx, MaxDirectMemorySize, max_direct_memory_size); } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx // Skip -XX:Flags= since that case has already been handled if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) { diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index 504c4061cc5..f57a9b218c4 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -3705,7 +3705,7 @@ class CommandLineFlags { \ /* Properties for Java libraries */ \ \ - product(intx, MaxDirectMemorySize, -1, \ + product(uintx, MaxDirectMemorySize, 0, \ "Maximum total size of NIO direct-buffer allocations") \ \ /* temporary developer defined flags */ \ From af253d110d998403cc55adddc2bc5aa699acb86f Mon Sep 17 00:00:00 2001 From: Mikael Vidstedt Date: Tue, 3 Jul 2012 17:35:00 -0700 Subject: [PATCH 33/83] 7129724: MAC: Core file location is wrong in crash report Updated core path location to reflect macosx default Reviewed-by: dholmes, kamg --- hotspot/src/os/bsd/vm/os_bsd.cpp | 11 +++++++++++ hotspot/src/os/linux/vm/os_linux.cpp | 12 ++++++++++++ hotspot/src/os/posix/vm/os_posix.cpp | 10 +++++----- hotspot/src/os/solaris/vm/os_solaris.cpp | 13 +++++++++++++ hotspot/src/share/vm/runtime/os.hpp | 4 ++++ 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/hotspot/src/os/bsd/vm/os_bsd.cpp b/hotspot/src/os/bsd/vm/os_bsd.cpp index 0305b3df0de..68ab3fc4c3b 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.cpp +++ b/hotspot/src/os/bsd/vm/os_bsd.cpp @@ -5801,3 +5801,14 @@ bool os::is_headless_jre() { return true; } + +// Get the default path to the core file +// Returns the length of the string +int os::get_core_path(char* buffer, size_t bufferSize) { + int n = jio_snprintf(buffer, bufferSize, "/cores"); + + // Truncate if theoretical string was longer than bufferSize + n = MIN2(n, (int)bufferSize); + + return n; +} diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp index ce7c71b9d43..df6eb0e71c8 100644 --- a/hotspot/src/os/linux/vm/os_linux.cpp +++ b/hotspot/src/os/linux/vm/os_linux.cpp @@ -5447,6 +5447,18 @@ bool os::is_headless_jre() { return true; } +// Get the default path to the core file +// Returns the length of the string +int os::get_core_path(char* buffer, size_t bufferSize) { + const char* p = get_current_directory(buffer, bufferSize); + + if (p == NULL) { + assert(p != NULL, "failed to get current directory"); + return 0; + } + + return strlen(buffer); +} #ifdef JAVASE_EMBEDDED // diff --git a/hotspot/src/os/posix/vm/os_posix.cpp b/hotspot/src/os/posix/vm/os_posix.cpp index 3e49b8b9ddd..ce355c1cc9f 100644 --- a/hotspot/src/os/posix/vm/os_posix.cpp +++ b/hotspot/src/os/posix/vm/os_posix.cpp @@ -34,19 +34,19 @@ // Check core dump limit and report possible place where core can be found void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize) { + int n; struct rlimit rlim; - static char cwd[O_BUFLEN]; bool success; - get_current_directory(cwd, sizeof(cwd)); + n = get_core_path(buffer, bufferSize); if (getrlimit(RLIMIT_CORE, &rlim) != 0) { - jio_snprintf(buffer, bufferSize, "%s/core or core.%d (may not exist)", cwd, current_process_id()); + jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d (may not exist)", current_process_id()); success = true; } else { switch(rlim.rlim_cur) { case RLIM_INFINITY: - jio_snprintf(buffer, bufferSize, "%s/core or core.%d", cwd, current_process_id()); + jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d", current_process_id()); success = true; break; case 0: @@ -54,7 +54,7 @@ void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* success = false; break; default: - jio_snprintf(buffer, bufferSize, "%s/core or core.%d (max size %lu kB). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", cwd, current_process_id(), (unsigned long)(rlim.rlim_cur >> 10)); + jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d (max size %lu kB). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", current_process_id(), (unsigned long)(rlim.rlim_cur >> 10)); success = true; break; } diff --git a/hotspot/src/os/solaris/vm/os_solaris.cpp b/hotspot/src/os/solaris/vm/os_solaris.cpp index 1d241d650e8..5e11a9d5588 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.cpp +++ b/hotspot/src/os/solaris/vm/os_solaris.cpp @@ -6537,3 +6537,16 @@ int os::bind(int fd, struct sockaddr* him, socklen_t len) { INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\ os::Solaris::clear_interrupted); } + +// Get the default path to the core file +// Returns the length of the string +int os::get_core_path(char* buffer, size_t bufferSize) { + const char* p = get_current_directory(buffer, bufferSize); + + if (p == NULL) { + assert(p != NULL, "failed to get current directory"); + return 0; + } + + return strlen(buffer); +} diff --git a/hotspot/src/share/vm/runtime/os.hpp b/hotspot/src/share/vm/runtime/os.hpp index 3be7248a911..508edba8a3e 100644 --- a/hotspot/src/share/vm/runtime/os.hpp +++ b/hotspot/src/share/vm/runtime/os.hpp @@ -665,6 +665,10 @@ class os: AllStatic { // On Windows this will create an actual minidump, on Linux/Solaris it will simply check core dump limits static void check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize); + // Get the default path to the core file + // Returns the length of the string + static int get_core_path(char* buffer, size_t bufferSize); + // JVMTI & JVM monitoring and management support // The thread_cpu_time() and current_thread_cpu_time() are only // supported if is_thread_cpu_time_supported() returns true. From 559278381bcc8a4f34fc67b8b75807b4237a32a7 Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Wed, 4 Jul 2012 15:55:45 -0400 Subject: [PATCH 34/83] 7181200: JVM new hashing code breaks SA in product mode Made new_hash() overloaded rather than a virtual function so SA code doesn't need to be changed. Reviewed-by: kvn, acorn, dholmes, fparain --- .../src/share/vm/classfile/symbolTable.cpp | 24 ------------------ .../src/share/vm/classfile/symbolTable.hpp | 12 --------- hotspot/src/share/vm/utilities/hashtable.cpp | 25 ++++++++++++++++++- hotspot/src/share/vm/utilities/hashtable.hpp | 9 ++++++- 4 files changed, 32 insertions(+), 38 deletions(-) diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp index 85cc5002d10..dd52e8167a8 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.cpp +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp @@ -43,7 +43,6 @@ SymbolTable* SymbolTable::_the_table = NULL; // Static arena for symbols that are not deallocated Arena* SymbolTable::_arena = NULL; bool SymbolTable::_needs_rehashing = false; -jint SymbolTable::_seed = 0; Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS) { assert (len <= Symbol::max_length(), "should be checked by caller"); @@ -130,12 +129,6 @@ void SymbolTable::unlink() { } } -unsigned int SymbolTable::new_hash(Symbol* sym) { - ResourceMark rm; - // Use alternate hashing algorithm on this symbol. - return AltHashing::murmur3_32(seed(), (const jbyte*)sym->as_C_string(), sym->utf8_length()); -} - // Create a new table and using alternate hash code, populate the new table // with the existing strings. Set flag to use the alternate hash code afterwards. void SymbolTable::rehash_table() { @@ -145,10 +138,6 @@ void SymbolTable::rehash_table() { // Create a new symbol table SymbolTable* new_table = new SymbolTable(); - // Initialize the global seed for hashing. - _seed = AltHashing::compute_seed(); - assert(seed() != 0, "shouldn't be zero"); - the_table()->move_to(new_table); // Delete the table and buckets (entries are reused in new table). @@ -620,7 +609,6 @@ class StableMemoryChecker : public StackObj { StringTable* StringTable::_the_table = NULL; bool StringTable::_needs_rehashing = false; -jint StringTable::_seed = 0; // Pick hashing algorithm unsigned int StringTable::hash_string(const jchar* s, int len) { @@ -837,14 +825,6 @@ void StringTable::dump(outputStream* st) { } -unsigned int StringTable::new_hash(oop string) { - ResourceMark rm; - int length; - jchar* chars = java_lang_String::as_unicode_string(string, length); - // Use alternate hashing algorithm on the string - return AltHashing::murmur3_32(seed(), chars, length); -} - // Create a new table and using alternate hash code, populate the new table // with the existing strings. Set flag to use the alternate hash code afterwards. void StringTable::rehash_table() { @@ -853,10 +833,6 @@ void StringTable::rehash_table() { if (DumpSharedSpaces) return; StringTable* new_table = new StringTable(); - // Initialize new global seed for hashing. - _seed = AltHashing::compute_seed(); - assert(seed() != 0, "shouldn't be zero"); - // Rehash the table the_table()->move_to(new_table); diff --git a/hotspot/src/share/vm/classfile/symbolTable.hpp b/hotspot/src/share/vm/classfile/symbolTable.hpp index f63de80280e..7812fe1fb6c 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.hpp +++ b/hotspot/src/share/vm/classfile/symbolTable.hpp @@ -81,7 +81,6 @@ private: // Set if one bucket is out of balance due to hash algorithm deficiency static bool _needs_rehashing; - static jint _seed; // For statistics static int symbols_removed; @@ -124,11 +123,6 @@ private: static Arena* arena() { return _arena; } // called for statistics static void initialize_symbols(int arena_alloc_size = 0); - - static bool use_alternate_hashcode() { return _seed != 0; } - static jint seed() { return _seed; } - - unsigned int new_hash(Symbol* sym); public: enum { symbol_alloc_batch_size = 8, @@ -247,7 +241,6 @@ private: // Set if one bucket is out of balance due to hash algorithm deficiency static bool _needs_rehashing; - static jint _seed; static oop intern(Handle string_or_null, jchar* chars, int length, TRAPS); oop basic_add(int index, Handle string_or_null, jchar* name, int len, @@ -261,11 +254,6 @@ private: StringTable(HashtableBucket* t, int number_of_entries) : Hashtable((int)StringTableSize, sizeof (HashtableEntry), t, number_of_entries) {} - - static bool use_alternate_hashcode() { return _seed != 0; } - static jint seed() { return _seed; } - - unsigned int new_hash(oop s); public: // The string table static StringTable* the_table() { return _the_table; } diff --git a/hotspot/src/share/vm/utilities/hashtable.cpp b/hotspot/src/share/vm/utilities/hashtable.cpp index 9b7db5e9a30..39092d95f5c 100644 --- a/hotspot/src/share/vm/utilities/hashtable.cpp +++ b/hotspot/src/share/vm/utilities/hashtable.cpp @@ -23,6 +23,8 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" +#include "classfile/javaClasses.hpp" #include "memory/allocation.inline.hpp" #include "memory/filemap.hpp" #include "memory/resourceArea.hpp" @@ -90,12 +92,33 @@ template bool BasicHashtable::check_rehash_table(int count) { return false; } +template jint Hashtable::_seed = 0; + +template unsigned int Hashtable::new_hash(Symbol* sym) { + ResourceMark rm; + // Use alternate hashing algorithm on this symbol. + return AltHashing::murmur3_32(seed(), (const jbyte*)sym->as_C_string(), sym->utf8_length()); +} + +template unsigned int Hashtable::new_hash(oop string) { + ResourceMark rm; + int length; + jchar* chars = java_lang_String::as_unicode_string(string, length); + // Use alternate hashing algorithm on the string + return AltHashing::murmur3_32(seed(), chars, length); +} + // Create a new table and using alternate hash code, populate the new table // with the existing elements. This can be used to change the hash code // and could in the future change the size of the table. template void Hashtable::move_to(Hashtable* new_table) { - int saved_entry_count = BasicHashtable::number_of_entries(); + + // Initialize the global seed for hashing. + _seed = AltHashing::compute_seed(); + assert(seed() != 0, "shouldn't be zero"); + + int saved_entry_count = this->number_of_entries(); // Iterate through the table and create a new entry for the new table for (int i = 0; i < new_table->table_size(); ++i) { diff --git a/hotspot/src/share/vm/utilities/hashtable.hpp b/hotspot/src/share/vm/utilities/hashtable.hpp index bec5e70984d..de7d319c07c 100644 --- a/hotspot/src/share/vm/utilities/hashtable.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.hpp @@ -278,7 +278,14 @@ protected: // Function to move these elements into the new table. void move_to(Hashtable* new_table); - virtual unsigned int new_hash(T) { ShouldNotReachHere(); return 0; } // should be overridden + static bool use_alternate_hashcode() { return _seed != 0; } + static jint seed() { return _seed; } + + private: + static jint _seed; + + unsigned int new_hash(Symbol* s); + unsigned int new_hash(oop string); }; From 39dfe6d047139a4bcd46199e195b010bea4b546b Mon Sep 17 00:00:00 2001 From: Staffan Larsen Date: Thu, 28 Jun 2012 11:37:28 +0200 Subject: [PATCH 35/83] 7178703: Fix handling of quoted arguments and better error messages in dcmd Reviewed-by: coleenp, mgronlun, rbackman --- hotspot/src/share/vm/prims/whitebox.cpp | 3 ++ .../share/vm/services/diagnosticCommand.hpp | 12 +++---- .../share/vm/services/diagnosticFramework.cpp | 35 +++++++++++++++---- .../share/vm/services/diagnosticFramework.hpp | 12 ++++++- hotspot/test/serviceability/ParserTest.java | 28 +++++++++++++++ 5 files changed, 77 insertions(+), 13 deletions(-) diff --git a/hotspot/src/share/vm/prims/whitebox.cpp b/hotspot/src/share/vm/prims/whitebox.cpp index eadc7df523f..e93b9104b44 100644 --- a/hotspot/src/share/vm/prims/whitebox.cpp +++ b/hotspot/src/share/vm/prims/whitebox.cpp @@ -113,6 +113,9 @@ const char* WhiteBox::lookup_jstring(const char* field_name, oop object) { int offset = offset_for_field(field_name, object, vmSymbols::string_signature()); oop string = object->obj_field(offset); + if (string == NULL) { + return NULL; + } const char* ret = java_lang_String::as_utf8_string(string); return ret; } diff --git a/hotspot/src/share/vm/services/diagnosticCommand.hpp b/hotspot/src/share/vm/services/diagnosticCommand.hpp index d5c5cd172aa..cf4134f4123 100644 --- a/hotspot/src/share/vm/services/diagnosticCommand.hpp +++ b/hotspot/src/share/vm/services/diagnosticCommand.hpp @@ -48,7 +48,7 @@ public: "With no argument this will show a list of available commands. " "'help all' will show help for all commands."; } - static const char* impact() { return "Low: "; } + static const char* impact() { return "Low"; } static int num_arguments(); virtual void execute(TRAPS); }; @@ -60,7 +60,7 @@ public: static const char* description() { return "Print JVM version information."; } - static const char* impact() { return "Low: "; } + static const char* impact() { return "Low"; } static int num_arguments() { return 0; } virtual void execute(TRAPS); }; @@ -72,7 +72,7 @@ public: static const char* description() { return "Print the command line used to start this VM instance."; } - static const char* impact() { return "Low: "; } + static const char* impact() { return "Low"; } static int num_arguments() { return 0; } virtual void execute(TRAPS) { Arguments::print_on(_output); @@ -88,7 +88,7 @@ public: return "Print system properties."; } static const char* impact() { - return "Low: "; + return "Low"; } static int num_arguments() { return 0; } virtual void execute(TRAPS); @@ -105,7 +105,7 @@ public: return "Print VM flag options and their current values."; } static const char* impact() { - return "Low: "; + return "Low"; } static int num_arguments(); virtual void execute(TRAPS); @@ -121,7 +121,7 @@ public: return "Print VM uptime."; } static const char* impact() { - return "Low: "; + return "Low"; } static int num_arguments(); virtual void execute(TRAPS); diff --git a/hotspot/src/share/vm/services/diagnosticFramework.cpp b/hotspot/src/share/vm/services/diagnosticFramework.cpp index 73e9bdc540c..2ae7866f6c6 100644 --- a/hotspot/src/share/vm/services/diagnosticFramework.cpp +++ b/hotspot/src/share/vm/services/diagnosticFramework.cpp @@ -75,11 +75,13 @@ bool DCmdArgIter::next(TRAPS) { } // extracting first item, argument or option name _key_addr = &_buffer[_cursor]; + bool arg_had_quotes = false; while (_cursor <= _len - 1 && _buffer[_cursor] != '=' && _buffer[_cursor] != _delim) { // argument can be surrounded by single or double quotes if (_buffer[_cursor] == '\"' || _buffer[_cursor] == '\'') { _key_addr++; char quote = _buffer[_cursor]; + arg_had_quotes = true; while (_cursor < _len - 1) { _cursor++; if (_buffer[_cursor] == quote && _buffer[_cursor - 1] != '\\') { @@ -95,16 +97,22 @@ bool DCmdArgIter::next(TRAPS) { _cursor++; } _key_len = &_buffer[_cursor] - _key_addr; + if (arg_had_quotes) { + // if the argument was quoted, we need to step past the last quote here + _cursor++; + } // check if the argument has the = format if (_cursor <= _len -1 && _buffer[_cursor] == '=') { _cursor++; _value_addr = &_buffer[_cursor]; + bool value_had_quotes = false; // extract the value while (_cursor <= _len - 1 && _buffer[_cursor] != _delim) { // value can be surrounded by simple or double quotes if (_buffer[_cursor] == '\"' || _buffer[_cursor] == '\'') { _value_addr++; char quote = _buffer[_cursor]; + value_had_quotes = true; while (_cursor < _len - 1) { _cursor++; if (_buffer[_cursor] == quote && _buffer[_cursor - 1] != '\\') { @@ -120,6 +128,10 @@ bool DCmdArgIter::next(TRAPS) { _cursor++; } _value_len = &_buffer[_cursor] - _value_addr; + if (value_had_quotes) { + // if the value was quoted, we need to step past the last quote here + _cursor++; + } } else { _value_addr = NULL; _value_len = 0; @@ -185,8 +197,17 @@ void DCmdParser::parse(CmdLine* line, char delim, TRAPS) { arg->read_value(iter.key_addr(), iter.key_length(), CHECK); next_argument = next_argument->next(); } else { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Unknown argument in diagnostic command"); + const size_t buflen = 120; + const size_t argbuflen = 30; + char buf[buflen]; + char argbuf[argbuflen]; + size_t len = MIN2(iter.key_length(), argbuflen - 1); + + strncpy(argbuf, iter.key_addr(), len); + argbuf[len] = '\0'; + jio_snprintf(buf, buflen - 1, "Unknown argument '%s' in diagnostic command.", argbuf); + + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf); } } cont = iter.next(CHECK); @@ -207,19 +228,21 @@ GenDCmdArgument* DCmdParser::lookup_dcmd_option(const char* name, size_t len) { } void DCmdParser::check(TRAPS) { + const size_t buflen = 256; + char buf[buflen]; GenDCmdArgument* arg = _arguments_list; while (arg != NULL) { if (arg->is_mandatory() && !arg->has_value()) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Missing argument for diagnostic command"); + jio_snprintf(buf, buflen - 1, "The argument '%s' is mandatory.", arg->name()); + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf); } arg = arg->next(); } arg = _options; while (arg != NULL) { if (arg->is_mandatory() && !arg->has_value()) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Missing option for diagnostic command"); + jio_snprintf(buf, buflen - 1, "The option '%s' is mandatory.", arg->name()); + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf); } arg = arg->next(); } diff --git a/hotspot/src/share/vm/services/diagnosticFramework.hpp b/hotspot/src/share/vm/services/diagnosticFramework.hpp index f6863e4775e..08b24e07f33 100644 --- a/hotspot/src/share/vm/services/diagnosticFramework.hpp +++ b/hotspot/src/share/vm/services/diagnosticFramework.hpp @@ -238,6 +238,16 @@ public: static const char* name() { return "No Name";} static const char* description() { return "No Help";} static const char* disabled_message() { return "Diagnostic command currently disabled"; } + // The impact() method returns a description of the intrusiveness of the diagnostic + // command on the Java Virtual Machine behavior. The rational for this method is that some + // diagnostic commands can seriously disrupt the behavior of the Java Virtual Machine + // (for instance a Thread Dump for an application with several tens of thousands of threads, + // or a Head Dump with a 40GB+ heap size) and other diagnostic commands have no serious + // impact on the JVM (for instance, getting the command line arguments or the JVM version). + // The recommended format for the description is : [longer description], + // where the impact level is selected among this list: {Low, Medium, High}. The optional + // longer description can provide more specific details like the fact that Thread Dump + // impact depends on the heap size. static const char* impact() { return "Low: No impact"; } static int num_arguments() { return 0; } outputStream* output() { return _output; } @@ -250,7 +260,7 @@ public: bool has_arg = iter.next(CHECK); if (has_arg) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Unknown argument in diagnostic command"); + "The argument list of this diagnostic command should be empty."); } } virtual void execute(TRAPS) { } diff --git a/hotspot/test/serviceability/ParserTest.java b/hotspot/test/serviceability/ParserTest.java index b031b4de017..b70d235260d 100644 --- a/hotspot/test/serviceability/ParserTest.java +++ b/hotspot/test/serviceability/ParserTest.java @@ -20,6 +20,7 @@ public class ParserTest { testNanoTime(); testJLong(); testBool(); + testQuotes(); testMemorySize(); } @@ -95,6 +96,33 @@ public class ParserTest { parse(name, "false", "", args); } + public void testQuotes() throws Exception { + String name = "name"; + DiagnosticCommand arg1 = new DiagnosticCommand(name, + "desc", DiagnosticArgumentType.STRING, + false, null); + DiagnosticCommand arg2 = new DiagnosticCommand("arg", + "desc", DiagnosticArgumentType.STRING, + false, null); + DiagnosticCommand[] args = {arg1, arg2}; + + // try with a quoted value + parse(name, "Recording 1", name + "=\"Recording 1\"", args); + // try with a quoted argument + parse(name, "myrec", "\"" + name + "\"" + "=myrec", args); + // try with both a quoted value and a quoted argument + parse(name, "Recording 1", "\"" + name + "\"" + "=\"Recording 1\"", args); + + // now the same thing but with other arguments after + + // try with a quoted value + parse(name, "Recording 1", name + "=\"Recording 1\",arg=value", args); + // try with a quoted argument + parse(name, "myrec", "\"" + name + "\"" + "=myrec,arg=value", args); + // try with both a quoted value and a quoted argument + parse(name, "Recording 1", "\"" + name + "\"" + "=\"Recording 1\",arg=value", args); + } + public void testMemorySize() throws Exception { String name = "name"; String defaultValue = "1024"; From 86e45f8339f82447c55bf30f174dac186a93789c Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Thu, 28 Jun 2012 14:05:06 +0400 Subject: [PATCH 36/83] 7169111: Unreadable menu bar with Ambiance theme in GTK L&F Reviewed-by: kizune --- .../classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java | 3 ++- .../com/sun/java/swing/plaf/gtk/GTKStyleFactory.java | 6 ++++++ .../share/classes/javax/swing/plaf/synth/SynthMenuUI.java | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java index fcfb1783605..6fb52a4cd4a 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java @@ -796,9 +796,10 @@ public class GTKLookAndFeel extends SynthLookAndFeel { "Menu.margin", zeroInsets, "Menu.cancelMode", "hideMenuTree", "Menu.alignAcceleratorText", Boolean.FALSE, + "Menu.useMenuBarForTopLevelMenus", Boolean.TRUE, - "MenuBar.windowBindings", new Object[] { + "MenuBar.windowBindings", new Object[] { "F10", "takeFocus" }, "MenuBar.font", new FontLazyValue(Region.MENU_BAR), diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java index 5c28db4e23d..cfc2fc3ccb3 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java @@ -92,7 +92,13 @@ class GTKStyleFactory extends SynthStyleFactory { boolean defaultCapable = btn.isDefaultCapable(); key = new ComplexKey(wt, toolButton, defaultCapable); } + } else if (id == Region.MENU) { + if (c instanceof JMenu && ((JMenu) c).isTopLevelMenu() && + UIManager.getBoolean("Menu.useMenuBarForTopLevelMenus")) { + wt = WidgetType.MENU_BAR; + } } + if (key == null) { // Otherwise, just use the WidgetType as the key. key = wt; diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java index 6f309861ba5..a55aa715fe3 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java @@ -299,7 +299,8 @@ public class SynthMenuUI extends BasicMenuUI */ @Override public void propertyChange(PropertyChangeEvent e) { - if (SynthLookAndFeel.shouldUpdateStyle(e)) { + if (SynthLookAndFeel.shouldUpdateStyle(e) || + (e.getPropertyName().equals("ancestor") && UIManager.getBoolean("Menu.useMenuBarForTopLevelMenus"))) { updateStyle((JMenu)e.getSource()); } } From 4f081bf0d0915a166394dbdf80f87eccf89e453d Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 28 Jun 2012 09:32:26 -0700 Subject: [PATCH 37/83] Added tag jdk8-b45 for changeset 07ad352154a8 --- .hgtags-top-repo | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 44ad17af265..dc560c35729 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -166,3 +166,4 @@ a2b2d435f1d275fa8010774c653197c64e326d3a jdk8-b40 1ce5dc16416611c58b7480ca67a2eee5153498a6 jdk8-b42 661c9aae602bbd9766d12590800c90f1edd1d8dd jdk8-b43 e4f81a817447c3a4f6868f083c81c2fb1b15d44c jdk8-b44 +633f2378c904c92bb922a6e19e9f62fe8eac14af jdk8-b45 From c6fbe129bfead4cb2f74cdb91c1f2dce32cfec69 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 28 Jun 2012 09:32:28 -0700 Subject: [PATCH 38/83] Added tag jdk8-b45 for changeset 27f3d36a24d5 --- corba/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/corba/.hgtags b/corba/.hgtags index fa937dfa1e9..d145e022f27 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -166,3 +166,4 @@ b8cbfb31139f820e5e094ba71449e58159fbe22e jdk8-b38 79cc42c9c71bbd6630ede681642e98f5e4a841fa jdk8-b42 cd879aff5d3cc1f58829aab3116880aa19525b78 jdk8-b43 439d9bf8e4ff204cc89c9974c1515a508b2cc6ff jdk8-b44 +747dad9e9d37d244a5c765a1afe9194f7ddae118 jdk8-b45 From 405208abe797a139ad169fbd8d796caae6f83945 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 28 Jun 2012 09:32:35 -0700 Subject: [PATCH 39/83] Added tag jdk8-b45 for changeset 8ff1c75f204a --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 4a7f07f305b..b1ba8c68fa9 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -256,3 +256,4 @@ bd568544be7fcd12a9327e6c448592198d57b043 hs24-b13 e77b8e0ed1f84e3e268239e276c7ab64fa573baa jdk8-b43 5ba29a1db46ecb80a321ca873adb56a3fe6ad320 hs24-b14 831e5c76a20af18f3c08c5a95ed31be0e128a010 jdk8-b44 +9d5f20961bc5846fa8d098d534effafbbdae0a58 jdk8-b45 From 6af718bb7ff3c7845af315e2fd76c07c9287f825 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 28 Jun 2012 09:32:52 -0700 Subject: [PATCH 40/83] Added tag jdk8-b45 for changeset a21c904ee700 --- jaxp/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxp/.hgtags b/jaxp/.hgtags index 72b505f142b..93f3d6587f1 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -166,3 +166,4 @@ f95fdbe525c88ef0d57dc1390be6582a8af5e07c jdk8-b39 39ee03c1602155ff02e5feb6cd44869452f24cf7 jdk8-b42 eff4ece9c8bc43b3ce2b3758574c4c20147f0689 jdk8-b43 0b3f3a4ce13930430b32b616a717dfc7fe385b28 jdk8-b44 +57476f66e13c55eea2f2fe2b858369a4c64b9936 jdk8-b45 From f69560f821e6ed35974f87310dc41416e9ce5d5b Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 28 Jun 2012 09:32:55 -0700 Subject: [PATCH 41/83] Added tag jdk8-b45 for changeset 466ddaf02777 --- jaxws/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxws/.hgtags b/jaxws/.hgtags index 43d26862ac0..0e5917c7e71 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -166,3 +166,4 @@ f2072b164b0519227833a2994f78e3988ee67827 jdk8-b41 1f20f37818a91b66eaeba268d0b785718598ee0e jdk8-b42 f00c12994562c2f68d348a7c3e829374a89294e2 jdk8-b43 f6a417540ef124c9b4123d07da5e26f2ab909949 jdk8-b44 +e80ac58b5ba904f24e125c742c30d0d740f05f86 jdk8-b45 From 0a806c8aa76486457817298756dc71ea67a098ea Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 28 Jun 2012 09:33:05 -0700 Subject: [PATCH 42/83] Added tag jdk8-b45 for changeset 82534e9c5cc7 --- jdk/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jdk/.hgtags b/jdk/.hgtags index 3635c35c55e..ebc63ad4733 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -166,3 +166,4 @@ b88fc3359dc7edabfa8a228855d8cebf8843c055 jdk8-b40 cf5c1f6fbc5ba14163fe0ef8eb8601b33f951372 jdk8-b42 b3246687c3695dff6f461bb407f9db88f7d072e7 jdk8-b43 db471a7af03168e4441c245b1d9976f720a7cb77 jdk8-b44 +b92353a01aa049bc508fc56f0347d5934b7c4390 jdk8-b45 From efdeeb14af1cfce82bc9c9069af935feee521e76 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 28 Jun 2012 09:33:16 -0700 Subject: [PATCH 43/83] Added tag jdk8-b45 for changeset b34aca67a4db --- langtools/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/langtools/.hgtags b/langtools/.hgtags index cee894b8d9b..383d61393a4 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -166,3 +166,4 @@ a9f547c218d957306dfc0cdd710be041bb62a555 jdk8-b39 02c5a3575539e737a1855b31287654e843edd6da jdk8-b42 f8c64d835b2806293b8e924b44f0e32b20657ed3 jdk8-b43 59cbead12ff46dbb397120bd26635bcd7d41ff21 jdk8-b44 +e111e4587ccada8eb93f72e834e378c76256f4b7 jdk8-b45 From 4c0c58e59dd164388f575f1cea1e8dee59b30f19 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Thu, 28 Jun 2012 14:59:20 -0700 Subject: [PATCH 44/83] 7180594: Fix GenStubs in langtools for build-infra builds Reviewed-by: ohair --- langtools/make/tools/genstubs/GenStubs.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/langtools/make/tools/genstubs/GenStubs.java b/langtools/make/tools/genstubs/GenStubs.java index f43df55365f..95ffa021b39 100644 --- a/langtools/make/tools/genstubs/GenStubs.java +++ b/langtools/make/tools/genstubs/GenStubs.java @@ -201,7 +201,7 @@ public class GenStubs { */ public void visitTopLevel(JCCompilationUnit tree) { super.visitTopLevel(tree); - tree.docComments = Collections.emptyMap(); + tree.docComments = null; } /** From 57b8661095dafc6595b84443b8520e0648267b9d Mon Sep 17 00:00:00 2001 From: Xueming Shen Date: Thu, 28 Jun 2012 22:44:21 -0700 Subject: [PATCH 45/83] 7175845: jar uf changes file permissions unexpectedly 7177216: native2ascii changes file permissions of input file Undo the File.createTempFile change in jar and native2ascii Reviewed-by: asaha --- jdk/src/share/classes/sun/tools/jar/Main.java | 2 +- .../classes/sun/tools/native2ascii/Main.java | 8 +- .../sun/tools/native2ascii/Permission.java | 85 ++++++++++++++++++ jdk/test/tools/jar/UpdateJar.java | 86 +++++++++++++++++++ 4 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 jdk/test/sun/tools/native2ascii/Permission.java create mode 100644 jdk/test/tools/jar/UpdateJar.java diff --git a/jdk/src/share/classes/sun/tools/jar/Main.java b/jdk/src/share/classes/sun/tools/jar/Main.java index 22ef9f7aee6..54f4deab1e8 100644 --- a/jdk/src/share/classes/sun/tools/jar/Main.java +++ b/jdk/src/share/classes/sun/tools/jar/Main.java @@ -137,7 +137,7 @@ class Main { File dir = file.getParentFile(); if (dir == null) dir = new File("."); - return Files.createTempFile(dir.toPath(), "jartmp", null).toFile(); + return File.createTempFile("jartmp", null, dir); } private boolean ok; diff --git a/jdk/src/share/classes/sun/tools/native2ascii/Main.java b/jdk/src/share/classes/sun/tools/native2ascii/Main.java index 6a941fe2e88..1f02353dcb2 100644 --- a/jdk/src/share/classes/sun/tools/native2ascii/Main.java +++ b/jdk/src/share/classes/sun/tools/native2ascii/Main.java @@ -241,7 +241,9 @@ public class Main { if (tempDir == null) tempDir = new File(System.getProperty("user.dir")); - tempFile = Files.createTempFile(tempDir.toPath(), "_N2A", ".TMP").toFile(); + tempFile = File.createTempFile("_N2A", + ".TMP", + tempDir); tempFile.deleteOnExit(); try { @@ -291,7 +293,9 @@ public class Main { File tempDir = f.getParentFile(); if (tempDir == null) tempDir = new File(System.getProperty("user.dir")); - tempFile = Files.createTempFile(tempDir.toPath(), "_N2A", ".TMP").toFile(); + tempFile = File.createTempFile("_N2A", + ".TMP", + tempDir); tempFile.deleteOnExit(); try { diff --git a/jdk/test/sun/tools/native2ascii/Permission.java b/jdk/test/sun/tools/native2ascii/Permission.java new file mode 100644 index 00000000000..53718d21fd7 --- /dev/null +++ b/jdk/test/sun/tools/native2ascii/Permission.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7177216 + * @summary resulting file of native2ascii should have normal permission + */ + +import java.io.*; +import java.nio.file.*; +import java.nio.file.attribute.*; +import sun.tools.native2ascii.Main; + +public class Permission { + + private static void cleanup(String... fnames) throws Throwable { + for (String fname : fnames) { + Files.deleteIfExists(Paths.get(fname)); + } + } + + public static void realMain(String[] args) throws Throwable { + if (!System.getProperty("os.name").startsWith("Windows")) { + String src = "native2ascii_permtest_src"; + String dst = "native2ascii_permtest_dst"; + + cleanup(src, dst); + try { + try (FileOutputStream fos = new FileOutputStream(src)) { + fos.write('a'); fos.write('b'); fos.write('c'); + } + String[] n2aArgs = new String[] {"-encoding", "utf8", src, dst}; + if (!new Main().convert(n2aArgs)) { + fail("n2a failed."); + } + equal(Files.getPosixFilePermissions(Paths.get(src)), + Files.getPosixFilePermissions(Paths.get(dst))); + String[] a2nArgs = new String[] {"-reverse", "-encoding", "utf8", dst, src}; + if (!new Main().convert(a2nArgs)) { + fail("a2n failed."); + } + equal(Files.getPosixFilePermissions(Paths.get(src)), + Files.getPosixFilePermissions(Paths.get(dst))); + } finally { + cleanup(src, dst); + } + } + } + + //--------------------- Infrastructure --------------------------- + static volatile int passed = 0, failed = 0; + static void pass() {passed++;} + static void fail() {failed++; Thread.dumpStack();} + static void fail(String msg) {System.out.println(msg); fail();} + static void unexpected(Throwable t) {failed++; t.printStackTrace();} + static void check(boolean cond) {if (cond) pass(); else fail();} + static void equal(Object x, Object y) { + if (x == null ? y == null : x.equals(y)) pass(); + else fail(x + " not equal to " + y);} + public static void main(String[] args) throws Throwable { + try {realMain(args);} catch (Throwable t) {unexpected(t);} + System.out.println("\nPassed = " + passed + " failed = " + failed); + if (failed > 0) throw new AssertionError("Some tests failed");} +} diff --git a/jdk/test/tools/jar/UpdateJar.java b/jdk/test/tools/jar/UpdateJar.java new file mode 100644 index 00000000000..a2bc37c4fee --- /dev/null +++ b/jdk/test/tools/jar/UpdateJar.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2012, 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 + * @bug 7175845 + * @summary jar -uf should not change file permission + */ + +import java.io.*; +import java.nio.file.*; +import java.nio.file.attribute.*; +import java.util.Set; +import sun.tools.jar.Main; + +public class UpdateJar { + + private static void cleanup(String... fnames) throws Throwable { + for (String fname : fnames) { + Files.deleteIfExists(Paths.get(fname)); + } + } + + public static void realMain(String[] args) throws Throwable { + if (!System.getProperty("os.name").startsWith("Windows")) { + String jar = "testUpdateJar.jar"; + String e0 = "testUpdateJar_entry0.txt"; + String e1 = "testUpdateJar_entry1.txt"; + cleanup(jar, e0, e1); + try { + try (FileOutputStream fos0 = new FileOutputStream(e0); + FileOutputStream fos1 = new FileOutputStream(e1)) { + fos0.write(0); + fos1.write(0); + } + String[] jarArgs = new String[] {"cfM0", jar, e0}; + if (!new Main(System.out, System.err, "jar").run(jarArgs)) { + fail("Could not create jar file."); + } + Set pm = Files.getPosixFilePermissions(Paths.get(jar)); + jarArgs = new String[] {"uf", jar, e1}; + if (!new Main(System.out, System.err, "jar").run(jarArgs)) { + fail("Could not create jar file."); + } + equal(pm, Files.getPosixFilePermissions(Paths.get(jar))); + } finally { + cleanup(jar, e0, e1); + } + } + } + + //--------------------- Infrastructure --------------------------- + static volatile int passed = 0, failed = 0; + static void pass() {passed++;} + static void fail() {failed++; Thread.dumpStack();} + static void fail(String msg) {System.out.println(msg); fail();} + static void unexpected(Throwable t) {failed++; t.printStackTrace();} + static void check(boolean cond) {if (cond) pass(); else fail();} + static void equal(Object x, Object y) { + if (x == null ? y == null : x.equals(y)) pass(); + else fail(x + " not equal to " + y);} + public static void main(String[] args) throws Throwable { + try {realMain(args);} catch (Throwable t) {unexpected(t);} + System.out.println("\nPassed = " + passed + " failed = " + failed); + if (failed > 0) throw new AssertionError("Some tests failed");} +} From 9f400835dfd40ababae4ff688b52ca4eb012b409 Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Fri, 29 Jun 2012 14:28:10 -0700 Subject: [PATCH 46/83] 7179759: ENV: Nightly fails during jdk copiyng for solaris platforms after FDS unzipping Libjvm_g_db.so and libjvm_g_dtrace.so links in .diz file still had 64 directory Reviewed-by: kamg, dholmes, sspitsyn --- hotspot/make/solaris/makefiles/dtrace.make | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hotspot/make/solaris/makefiles/dtrace.make b/hotspot/make/solaris/makefiles/dtrace.make index 1a5726520f9..48bc98d2dc6 100644 --- a/hotspot/make/solaris/makefiles/dtrace.make +++ b/hotspot/make/solaris/makefiles/dtrace.make @@ -137,13 +137,13 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) # implied else here is no stripping at all endif endif - [ -f $(XLIBJVM_DB_G_DEBUGINFO) ] || { ln -s $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO); } + [ -f $(XLIBJVM_DB_G_DEBUGINFO) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB_G_DEBUGINFO); } ifeq ($(ZIP_DEBUGINFO_FILES),1) # Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not # in the archived name: ( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -y $(LIBJVM_DB_DIZ) $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB_G_DEBUGINFO) ) $(RM) $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO) - [ -f $(XLIBJVM_DB_G_DIZ) ] || { ln -s $(XLIBJVM_DB_DIZ) $(XLIBJVM_DB_G_DIZ); } + [ -f $(XLIBJVM_DB_G_DIZ) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DB_DIZ) $(LIBJVM_DB_G_DIZ); } endif endif @@ -170,13 +170,13 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) # implied else here is no stripping at all endif endif - [ -f $(XLIBJVM_DTRACE_G_DEBUGINFO) ] || { ln -s $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO); } + [ -f $(XLIBJVM_DTRACE_G_DEBUGINFO) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE_G_DEBUGINFO); } ifeq ($(ZIP_DEBUGINFO_FILES),1) # Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not # in the archived name: ( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -y $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE_G_DEBUGINFO) ) $(RM) $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO) - [ -f $(XLIBJVM_DTRACE_G_DIZ) ] || { ln -s $(XLIBJVM_DTRACE_DIZ) $(XLIBJVM_DTRACE_G_DIZ); } + [ -f $(XLIBJVM_DTRACE_G_DIZ) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_G_DIZ); } endif endif From 29e09dc7d4e5c92ccadd49b89df7af3c5223081b Mon Sep 17 00:00:00 2001 From: Jim Gish Date: Fri, 29 Jun 2012 15:36:14 -0700 Subject: [PATCH 47/83] 7100996: (spec str) IndexOutOfBoundsException when using a StringBuffer from multiple threads Add usage note to clarify thread safety Reviewed-by: briangoetz, mduigou --- .../share/classes/java/lang/StringBuffer.java | 79 +++++++++++-------- 1 file changed, 44 insertions(+), 35 deletions(-) diff --git a/jdk/src/share/classes/java/lang/StringBuffer.java b/jdk/src/share/classes/java/lang/StringBuffer.java index e66dbce9b56..4dee96e6795 100644 --- a/jdk/src/share/classes/java/lang/StringBuffer.java +++ b/jdk/src/share/classes/java/lang/StringBuffer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2012, 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 @@ -39,29 +39,38 @@ package java.lang; * that is consistent with the order of the method calls made by each of * the individual threads involved. *

- * The principal operations on a StringBuffer are the - * append and insert methods, which are + * The principal operations on a {@code StringBuffer} are the + * {@code append} and {@code insert} methods, which are * overloaded so as to accept data of any type. Each effectively * converts a given datum to a string and then appends or inserts the * characters of that string to the string buffer. The - * append method always adds these characters at the end - * of the buffer; the insert method adds the characters at + * {@code append} method always adds these characters at the end + * of the buffer; the {@code insert} method adds the characters at * a specified point. *

- * For example, if z refers to a string buffer object - * whose current contents are "start", then - * the method call z.append("le") would cause the string - * buffer to contain "startle", whereas - * z.insert(4, "le") would alter the string buffer to - * contain "starlet". + * For example, if {@code z} refers to a string buffer object + * whose current contents are {@code "start"}, then + * the method call {@code z.append("le")} would cause the string + * buffer to contain {@code "startle"}, whereas + * {@code z.insert(4, "le")} would alter the string buffer to + * contain {@code "starlet"}. *

- * In general, if sb refers to an instance of a StringBuffer, - * then sb.append(x) has the same effect as - * sb.insert(sb.length(), x). + * In general, if sb refers to an instance of a {@code StringBuffer}, + * then {@code sb.append(x)} has the same effect as + * {@code sb.insert(sb.length(), x)}. *

* Whenever an operation occurs involving a source sequence (such as - * appending or inserting from a source sequence) this class synchronizes + * appending or inserting from a source sequence), this class synchronizes * only on the string buffer performing the operation, not on the source. + * Note that while {@code StringBuffer} is designed to be safe to use + * concurrently from multiple threads, if the constructor or the + * {@code append} or {@code insert} operation is passed a source sequence + * that is shared across threads, the calling code must ensure + * that the operation has a consistent and unchanging view of the source + * sequence for the duration of the operation. + * This could be satisfied by the caller holding a lock during the + * operation's call, by using an immutable source sequence, or by not + * sharing the source sequence across threads. *

* Every string buffer has a capacity. As long as the length of the * character sequence contained in the string buffer does not exceed @@ -101,8 +110,8 @@ package java.lang; * the specified initial capacity. * * @param capacity the initial capacity. - * @exception NegativeArraySizeException if the capacity - * argument is less than 0. + * @exception NegativeArraySizeException if the {@code capacity} + * argument is less than {@code 0}. */ public StringBuffer(int capacity) { super(capacity); @@ -111,10 +120,10 @@ package java.lang; /** * Constructs a string buffer initialized to the contents of the * specified string. The initial capacity of the string buffer is - * 16 plus the length of the string argument. + * {@code 16} plus the length of the string argument. * * @param str the initial contents of the buffer. - * @exception NullPointerException if str is null + * @exception NullPointerException if {@code str} is {@code null} */ public StringBuffer(String str) { super(str.length() + 16); @@ -123,16 +132,16 @@ package java.lang; /** * Constructs a string buffer that contains the same characters - * as the specified CharSequence. The initial capacity of - * the string buffer is 16 plus the length of the - * CharSequence argument. + * as the specified {@code CharSequence}. The initial capacity of + * the string buffer is {@code 16} plus the length of the + * {@code CharSequence} argument. *

- * If the length of the specified CharSequence is + * If the length of the specified {@code CharSequence} is * less than or equal to zero, then an empty buffer of capacity - * 16 is returned. + * {@code 16} is returned. * * @param seq the sequence to copy. - * @exception NullPointerException if seq is null + * @exception NullPointerException if {@code seq} is {@code null} * @since 1.5 */ public StringBuffer(CharSequence seq) { @@ -253,10 +262,10 @@ package java.lang; * the new character sequence is equal to the character at index k * in the old character sequence, if k is less than n; * otherwise, it is equal to the character at index k-n in the - * argument sb. + * argument {@code sb}. *

- * This method synchronizes on this (the destination) - * object but does not synchronize on the source (sb). + * This method synchronizes on {@code this}, the destination + * object, but does not synchronize on the source ({@code sb}). * * @param sb the StringBuffer to append. * @return a reference to this object. @@ -269,23 +278,23 @@ package java.lang; /** - * Appends the specified CharSequence to this + * Appends the specified {@code CharSequence} to this * sequence. *

- * The characters of the CharSequence argument are appended, + * The characters of the {@code CharSequence} argument are appended, * in order, increasing the length of this sequence by the length of the * argument. * *

The result of this method is exactly the same as if it were an * invocation of this.append(s, 0, s.length()); * - *

This method synchronizes on this (the destination) - * object but does not synchronize on the source (s). + *

This method synchronizes on {@code this}, the destination + * object, but does not synchronize on the source ({@code s}). * - *

If s is null, then the four characters - * "null" are appended. + *

If {@code s} is {@code null}, then the four characters + * {@code "null"} are appended. * - * @param s the CharSequence to append. + * @param s the {@code CharSequence} to append. * @return a reference to this object. * @since 1.5 */ From 826591b5166df705154030174cf12327b484f6ae Mon Sep 17 00:00:00 2001 From: Joe Bowbeer Date: Fri, 29 Jun 2012 16:16:13 -0700 Subject: [PATCH 48/83] 7170938: (str) incorrect wording in doc for String.subSequence Reviewed-by: forax, mduigou --- jdk/src/share/classes/java/lang/String.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/jdk/src/share/classes/java/lang/String.java b/jdk/src/share/classes/java/lang/String.java index f4f2a1a0388..0b1d55bcd0a 100644 --- a/jdk/src/share/classes/java/lang/String.java +++ b/jdk/src/share/classes/java/lang/String.java @@ -1921,17 +1921,17 @@ public final class String *

      * str.substring(begin, end)
* - * This method is defined so that the String class can implement + * This method is defined so that the {@code String} class can implement * the {@link CharSequence} interface.

* - * @param beginIndex the begin index, inclusive. - * @param endIndex the end index, exclusive. - * @return the specified subsequence. + * @param beginIndex the begin index, inclusive. + * @param endIndex the end index, exclusive. + * @return the specified subsequence. * * @throws IndexOutOfBoundsException - * if beginIndex or endIndex are negative, - * if endIndex is greater than length(), - * or if beginIndex is greater than startIndex + * if {@code beginIndex} or {@code endIndex} is negative, + * if {@code endIndex} is greater than {@code length()}, + * or if {@code beginIndex} is greater than {@code endIndex} * * @since 1.4 * @spec JSR-51 From 71eeebb5959aa679e6d0964d45c5c28c2fc3259c Mon Sep 17 00:00:00 2001 From: Alejandro Murillo Date: Fri, 29 Jun 2012 17:04:40 -0700 Subject: [PATCH 49/83] Added tag hs24-b15 for changeset e4f98cec6edd --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index b1ba8c68fa9..8ab00c4f0be 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -257,3 +257,4 @@ e77b8e0ed1f84e3e268239e276c7ab64fa573baa jdk8-b43 5ba29a1db46ecb80a321ca873adb56a3fe6ad320 hs24-b14 831e5c76a20af18f3c08c5a95ed31be0e128a010 jdk8-b44 9d5f20961bc5846fa8d098d534effafbbdae0a58 jdk8-b45 +40e5a3f2907ed02b335c7caa8ecf068cc801380d hs24-b15 From e9301228b489151cdd0c4892d89ed7c00c451af9 Mon Sep 17 00:00:00 2001 From: Alejandro Murillo Date: Fri, 29 Jun 2012 17:12:15 -0700 Subject: [PATCH 50/83] 7180882: new hotspot build - hs24-b16 Reviewed-by: jcoomes --- hotspot/make/hotspot_version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/make/hotspot_version b/hotspot/make/hotspot_version index 44b5cbc8375..89e73aff4d8 100644 --- a/hotspot/make/hotspot_version +++ b/hotspot/make/hotspot_version @@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2012 HS_MAJOR_VER=24 HS_MINOR_VER=0 -HS_BUILD_NUMBER=15 +HS_BUILD_NUMBER=16 JDK_MAJOR_VER=1 JDK_MINOR_VER=8 From 3511594d3c320636a1366010a310b83d99676782 Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Mon, 2 Jul 2012 09:58:06 +0200 Subject: [PATCH 51/83] 7177917: Failed test java/lang/Math/PowTests.java When c2 intrinsifies pow/exp, it should never inline the java implementations. Reviewed-by: kvn --- hotspot/src/share/vm/opto/library_call.cpp | 223 +++++++++++------- .../test/compiler/7177917/Test7177917.java | 142 +++++++++++ 2 files changed, 282 insertions(+), 83 deletions(-) create mode 100644 hotspot/test/compiler/7177917/Test7177917.java diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp index 785f5a0ae1d..981a241a4f1 100644 --- a/hotspot/src/share/vm/opto/library_call.cpp +++ b/hotspot/src/share/vm/opto/library_call.cpp @@ -160,6 +160,7 @@ class LibraryCallKit : public GraphKit { bool inline_trans(vmIntrinsics::ID id); bool inline_abs(vmIntrinsics::ID id); bool inline_sqrt(vmIntrinsics::ID id); + void finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName); bool inline_pow(vmIntrinsics::ID id); bool inline_exp(vmIntrinsics::ID id); bool inline_min_max(vmIntrinsics::ID id); @@ -1535,40 +1536,79 @@ bool LibraryCallKit::inline_abs(vmIntrinsics::ID id) { return true; } +void LibraryCallKit::finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName) { + //------------------- + //result=(result.isNaN())? funcAddr():result; + // Check: If isNaN() by checking result!=result? then either trap + // or go to runtime + Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result)); + // Build the boolean node + Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) ); + + if (!too_many_traps(Deoptimization::Reason_intrinsic)) { + { + BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT); + // End the current control-flow path + push_pair(x); + if (y != NULL) { + push_pair(y); + } + // The pow or exp intrinsic returned a NaN, which requires a call + // to the runtime. Recompile with the runtime call. + uncommon_trap(Deoptimization::Reason_intrinsic, + Deoptimization::Action_make_not_entrant); + } + push_pair(result); + } else { + // If this inlining ever returned NaN in the past, we compile a call + // to the runtime to properly handle corner cases + + IfNode* iff = create_and_xform_if(control(), bolisnum, PROB_STATIC_FREQUENT, COUNT_UNKNOWN); + Node* if_slow = _gvn.transform( new (C, 1) IfFalseNode(iff) ); + Node* if_fast = _gvn.transform( new (C, 1) IfTrueNode(iff) ); + + if (!if_slow->is_top()) { + RegionNode* result_region = new(C, 3) RegionNode(3); + PhiNode* result_val = new (C, 3) PhiNode(result_region, Type::DOUBLE); + + result_region->init_req(1, if_fast); + result_val->init_req(1, result); + + set_control(if_slow); + + const TypePtr* no_memory_effects = NULL; + Node* rt = make_runtime_call(RC_LEAF, call_type, funcAddr, funcName, + no_memory_effects, + x, top(), y, y ? top() : NULL); + Node* value = _gvn.transform(new (C, 1) ProjNode(rt, TypeFunc::Parms+0)); +#ifdef ASSERT + Node* value_top = _gvn.transform(new (C, 1) ProjNode(rt, TypeFunc::Parms+1)); + assert(value_top == top(), "second value must be top"); +#endif + + result_region->init_req(2, control()); + result_val->init_req(2, value); + push_result(result_region, result_val); + } else { + push_pair(result); + } + } +} + //------------------------------inline_exp------------------------------------- // Inline exp instructions, if possible. The Intel hardware only misses // really odd corner cases (+/- Infinity). Just uncommon-trap them. bool LibraryCallKit::inline_exp(vmIntrinsics::ID id) { assert(id == vmIntrinsics::_dexp, "Not exp"); - // If this inlining ever returned NaN in the past, we do not intrinsify it - // every again. NaN results requires StrictMath.exp handling. - if (too_many_traps(Deoptimization::Reason_intrinsic)) return false; - _sp += arg_size(); // restore stack pointer Node *x = pop_math_arg(); Node *result = _gvn.transform(new (C, 2) ExpDNode(0,x)); - //------------------- - //result=(result.isNaN())? StrictMath::exp():result; - // Check: If isNaN() by checking result!=result? then go to Strict Math - Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result)); - // Build the boolean node - Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) ); - - { BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT); - // End the current control-flow path - push_pair(x); - // Math.exp intrinsic returned a NaN, which requires StrictMath.exp - // to handle. Recompile without intrinsifying Math.exp - uncommon_trap(Deoptimization::Reason_intrinsic, - Deoptimization::Action_make_not_entrant); - } + finish_pow_exp(result, x, NULL, OptoRuntime::Math_D_D_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::dexp), "EXP"); C->set_has_split_ifs(true); // Has chance for split-if optimization - push_pair(result); - return true; } @@ -1577,17 +1617,12 @@ bool LibraryCallKit::inline_exp(vmIntrinsics::ID id) { bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { assert(id == vmIntrinsics::_dpow, "Not pow"); - // If this inlining ever returned NaN in the past, we do not intrinsify it - // every again. NaN results requires StrictMath.pow handling. - if (too_many_traps(Deoptimization::Reason_intrinsic)) return false; - - // Do not intrinsify on older platforms which lack cmove. - if (ConditionalMoveLimit == 0) return false; - // Pseudocode for pow // if (x <= 0.0) { - // if ((double)((int)y)==y) { // if y is int - // result = ((1&(int)y)==0)?-DPow(abs(x), y):DPow(abs(x), y) + // long longy = (long)y; + // if ((double)longy == y) { // if y is long + // if (y + 1 == y) longy = 0; // huge number: even + // result = ((1&longy) == 0)?-DPow(abs(x), y):DPow(abs(x), y); // } else { // result = NaN; // } @@ -1595,7 +1630,7 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { // result = DPow(x,y); // } // if (result != result)? { - // uncommon_trap(); + // result = uncommon_trap() or runtime_call(); // } // return result; @@ -1603,15 +1638,14 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { Node* y = pop_math_arg(); Node* x = pop_math_arg(); - Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, x, y) ); + Node* result = NULL; - // Short form: if not top-level (i.e., Math.pow but inlining Math.pow - // inside of something) then skip the fancy tests and just check for - // NaN result. - Node *result = NULL; - if( jvms()->depth() >= 1 ) { - result = fast_result; + if (!too_many_traps(Deoptimization::Reason_intrinsic)) { + // Short form: skip the fancy tests and just check for NaN result. + result = _gvn.transform( new (C, 3) PowDNode(0, x, y) ); } else { + // If this inlining ever returned NaN in the past, include all + // checks + call to the runtime. // Set the merge point for If node with condition of (x <= 0.0) // There are four possible paths to region node and phi node @@ -1627,55 +1661,95 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { Node *bol1 = _gvn.transform( new (C, 2) BoolNode( cmp, BoolTest::le ) ); // Branch either way IfNode *if1 = create_and_xform_if(control(),bol1, PROB_STATIC_INFREQUENT, COUNT_UNKNOWN); - Node *opt_test = _gvn.transform(if1); - //assert( opt_test->is_If(), "Expect an IfNode"); - IfNode *opt_if1 = (IfNode*)opt_test; // Fast path taken; set region slot 3 - Node *fast_taken = _gvn.transform( new (C, 1) IfFalseNode(opt_if1) ); + Node *fast_taken = _gvn.transform( new (C, 1) IfFalseNode(if1) ); r->init_req(3,fast_taken); // Capture fast-control // Fast path not-taken, i.e. slow path - Node *complex_path = _gvn.transform( new (C, 1) IfTrueNode(opt_if1) ); + Node *complex_path = _gvn.transform( new (C, 1) IfTrueNode(if1) ); // Set fast path result - Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, y, x) ); + Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, x, y) ); phi->init_req(3, fast_result); // Complex path - // Build the second if node (if y is int) - // Node for (int)y - Node *inty = _gvn.transform( new (C, 2) ConvD2INode(y)); - // Node for (double)((int) y) - Node *doubleinty= _gvn.transform( new (C, 2) ConvI2DNode(inty)); - // Check (double)((int) y) : y - Node *cmpinty= _gvn.transform(new (C, 3) CmpDNode(doubleinty, y)); - // Check if (y isn't int) then go to slow path + // Build the second if node (if y is long) + // Node for (long)y + Node *longy = _gvn.transform( new (C, 2) ConvD2LNode(y)); + // Node for (double)((long) y) + Node *doublelongy= _gvn.transform( new (C, 2) ConvL2DNode(longy)); + // Check (double)((long) y) : y + Node *cmplongy= _gvn.transform(new (C, 3) CmpDNode(doublelongy, y)); + // Check if (y isn't long) then go to slow path - Node *bol2 = _gvn.transform( new (C, 2) BoolNode( cmpinty, BoolTest::ne ) ); + Node *bol2 = _gvn.transform( new (C, 2) BoolNode( cmplongy, BoolTest::ne ) ); // Branch either way IfNode *if2 = create_and_xform_if(complex_path,bol2, PROB_STATIC_INFREQUENT, COUNT_UNKNOWN); - Node *slow_path = opt_iff(r,if2); // Set region path 2 + Node* ylong_path = _gvn.transform( new (C, 1) IfFalseNode(if2)); - // Calculate DPow(abs(x), y)*(1 & (int)y) + Node *slow_path = _gvn.transform( new (C, 1) IfTrueNode(if2) ); + + // Calculate DPow(abs(x), y)*(1 & (long)y) // Node for constant 1 - Node *conone = intcon(1); - // 1& (int)y - Node *signnode= _gvn.transform( new (C, 3) AndINode(conone, inty) ); + Node *conone = longcon(1); + // 1& (long)y + Node *signnode= _gvn.transform( new (C, 3) AndLNode(conone, longy) ); + + // A huge number is always even. Detect a huge number by checking + // if y + 1 == y and set integer to be tested for parity to 0. + // Required for corner case: + // (long)9.223372036854776E18 = max_jlong + // (double)(long)9.223372036854776E18 = 9.223372036854776E18 + // max_jlong is odd but 9.223372036854776E18 is even + Node* yplus1 = _gvn.transform( new (C, 3) AddDNode(y, makecon(TypeD::make(1)))); + Node *cmpyplus1= _gvn.transform(new (C, 3) CmpDNode(yplus1, y)); + Node *bolyplus1 = _gvn.transform( new (C, 2) BoolNode( cmpyplus1, BoolTest::eq ) ); + Node* correctedsign = NULL; + if (ConditionalMoveLimit != 0) { + correctedsign = _gvn.transform( CMoveNode::make(C, NULL, bolyplus1, signnode, longcon(0), TypeLong::LONG)); + } else { + IfNode *ifyplus1 = create_and_xform_if(ylong_path,bolyplus1, PROB_FAIR, COUNT_UNKNOWN); + RegionNode *r = new (C, 3) RegionNode(3); + Node *phi = new (C, 3) PhiNode(r, TypeLong::LONG); + r->init_req(1, _gvn.transform( new (C, 1) IfFalseNode(ifyplus1))); + r->init_req(2, _gvn.transform( new (C, 1) IfTrueNode(ifyplus1))); + phi->init_req(1, signnode); + phi->init_req(2, longcon(0)); + correctedsign = _gvn.transform(phi); + ylong_path = _gvn.transform(r); + record_for_igvn(r); + } + // zero node - Node *conzero = intcon(0); - // Check (1&(int)y)==0? - Node *cmpeq1 = _gvn.transform(new (C, 3) CmpINode(signnode, conzero)); - // Check if (1&(int)y)!=0?, if so the result is negative + Node *conzero = longcon(0); + // Check (1&(long)y)==0? + Node *cmpeq1 = _gvn.transform(new (C, 3) CmpLNode(correctedsign, conzero)); + // Check if (1&(long)y)!=0?, if so the result is negative Node *bol3 = _gvn.transform( new (C, 2) BoolNode( cmpeq1, BoolTest::ne ) ); // abs(x) Node *absx=_gvn.transform( new (C, 2) AbsDNode(x)); // abs(x)^y - Node *absxpowy = _gvn.transform( new (C, 3) PowDNode(0, y, absx) ); + Node *absxpowy = _gvn.transform( new (C, 3) PowDNode(0, absx, y) ); // -abs(x)^y Node *negabsxpowy = _gvn.transform(new (C, 2) NegDNode (absxpowy)); - // (1&(int)y)==1?-DPow(abs(x), y):DPow(abs(x), y) - Node *signresult = _gvn.transform( CMoveNode::make(C, NULL, bol3, absxpowy, negabsxpowy, Type::DOUBLE)); + // (1&(long)y)==1?-DPow(abs(x), y):DPow(abs(x), y) + Node *signresult = NULL; + if (ConditionalMoveLimit != 0) { + signresult = _gvn.transform( CMoveNode::make(C, NULL, bol3, absxpowy, negabsxpowy, Type::DOUBLE)); + } else { + IfNode *ifyeven = create_and_xform_if(ylong_path,bol3, PROB_FAIR, COUNT_UNKNOWN); + RegionNode *r = new (C, 3) RegionNode(3); + Node *phi = new (C, 3) PhiNode(r, Type::DOUBLE); + r->init_req(1, _gvn.transform( new (C, 1) IfFalseNode(ifyeven))); + r->init_req(2, _gvn.transform( new (C, 1) IfTrueNode(ifyeven))); + phi->init_req(1, absxpowy); + phi->init_req(2, negabsxpowy); + signresult = _gvn.transform(phi); + ylong_path = _gvn.transform(r); + record_for_igvn(r); + } // Set complex path fast result + r->init_req(2, ylong_path); phi->init_req(2, signresult); static const jlong nan_bits = CONST64(0x7ff8000000000000); @@ -1689,27 +1763,10 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { result=_gvn.transform(phi); } - //------------------- - //result=(result.isNaN())? uncommon_trap():result; - // Check: If isNaN() by checking result!=result? then go to Strict Math - Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result)); - // Build the boolean node - Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) ); - - { BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT); - // End the current control-flow path - push_pair(x); - push_pair(y); - // Math.pow intrinsic returned a NaN, which requires StrictMath.pow - // to handle. Recompile without intrinsifying Math.pow. - uncommon_trap(Deoptimization::Reason_intrinsic, - Deoptimization::Action_make_not_entrant); - } + finish_pow_exp(result, x, y, OptoRuntime::Math_DD_D_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::dpow), "POW"); C->set_has_split_ifs(true); // Has chance for split-if optimization - push_pair(result); - return true; } diff --git a/hotspot/test/compiler/7177917/Test7177917.java b/hotspot/test/compiler/7177917/Test7177917.java new file mode 100644 index 00000000000..7d2c76490a9 --- /dev/null +++ b/hotspot/test/compiler/7177917/Test7177917.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2012, 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. + * + */ + +/* + * Micro-benchmark for Math.pow() and Math.exp() + */ + +import java.util.*; + +public class Test7177917 { + + static double d; + + static Random r = new Random(0); + + static long m_pow(double[][] values) { + double res = 0; + long start = System.nanoTime(); + for (int i = 0; i < values.length; i++) { + res += Math.pow(values[i][0], values[i][1]); + } + long stop = System.nanoTime(); + d = res; + return (stop - start) / 1000; + } + + static long m_exp(double[] values) { + double res = 0; + long start = System.nanoTime(); + for (int i = 0; i < values.length; i++) { + res += Math.exp(values[i]); + } + long stop = System.nanoTime(); + d = res; + return (stop - start) / 1000; + } + + static double[][] pow_values(int nb) { + double[][] res = new double[nb][2]; + for (int i = 0; i < nb; i++) { + double ylogx = (1 + (r.nextDouble() * 2045)) - 1023; // 2045 rather than 2046 as a safety margin + double x = Math.abs(Double.longBitsToDouble(r.nextLong())); + while (x != x) { + x = Math.abs(Double.longBitsToDouble(r.nextLong())); + } + double logx = Math.log(x) / Math.log(2); + double y = ylogx / logx; + + res[i][0] = x; + res[i][1] = y; + } + return res; + } + + static double[] exp_values(int nb) { + double[] res = new double[nb]; + for (int i = 0; i < nb; i++) { + double ylogx = (1 + (r.nextDouble() * 2045)) - 1023; // 2045 rather than 2046 as a safety margin + double x = Math.E; + double logx = Math.log(x) / Math.log(2); + double y = ylogx / logx; + res[i] = y; + } + return res; + } + + static public void main(String[] args) { + { + // warmup + double[][] warmup_values = pow_values(10); + m_pow(warmup_values); + + for (int i = 0; i < 20000; i++) { + m_pow(warmup_values); + } + // test pow perf + double[][] values = pow_values(1000000); + System.out.println("==> POW " + m_pow(values)); + + // force uncommon trap + double[][] nan_values = new double[1][2]; + nan_values[0][0] = Double.NaN; + nan_values[0][1] = Double.NaN; + m_pow(nan_values); + + // force recompilation + for (int i = 0; i < 20000; i++) { + m_pow(warmup_values); + } + + // test pow perf again + System.out.println("==> POW " + m_pow(values)); + } + { + // warmup + double[] warmup_values = exp_values(10); + m_exp(warmup_values); + + for (int i = 0; i < 20000; i++) { + m_exp(warmup_values); + } + + // test pow perf + double[] values = exp_values(1000000); + System.out.println("==> EXP " + m_exp(values)); + + // force uncommon trap + double[] nan_values = new double[1]; + nan_values[0] = Double.NaN; + m_exp(nan_values); + + // force recompilation + for (int i = 0; i < 20000; i++) { + m_exp(warmup_values); + } + + // test pow perf again + System.out.println("==> EXP " + m_exp(values)); + } + } +} From 4d512adc5e3125b4a479615466a80c079e71ab6b Mon Sep 17 00:00:00 2001 From: Keith McGuigan Date: Mon, 2 Jul 2012 10:54:17 -0400 Subject: [PATCH 52/83] 7167142: Consider a warning when finding a .hotspotrc or .hotspot_compiler file that isn't used Send warnings to output stream Reviewed-by: dholmes, fparain --- .../src/share/vm/compiler/compilerOracle.cpp | 13 ++++++++-- hotspot/src/share/vm/runtime/arguments.cpp | 24 +++++++++++++++---- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/hotspot/src/share/vm/compiler/compilerOracle.cpp b/hotspot/src/share/vm/compiler/compilerOracle.cpp index 07bc969b872..38ec9b4dab8 100644 --- a/hotspot/src/share/vm/compiler/compilerOracle.cpp +++ b/hotspot/src/share/vm/compiler/compilerOracle.cpp @@ -550,10 +550,12 @@ void CompilerOracle::parse_from_line(char* line) { } } +static const char* default_cc_file = ".hotspot_compiler"; + static const char* cc_file() { #ifdef ASSERT if (CompileCommandFile == NULL) - return ".hotspot_compiler"; + return default_cc_file; #endif return CompileCommandFile; } @@ -636,10 +638,17 @@ void compilerOracle_init() { CompilerOracle::parse_from_string(CompileOnly, CompilerOracle::parse_compile_only); if (CompilerOracle::has_command_file()) { CompilerOracle::parse_from_file(); + } else { + struct stat buf; + if (os::stat(default_cc_file, &buf) == 0) { + warning("%s file is present but has been ignored. " + "Run with -XX:CompileCommandFile=%s to load the file.", + default_cc_file, default_cc_file); + } } if (lists[PrintCommand] != NULL) { if (PrintAssembly) { - warning("CompileCommand and/or .hotspot_compiler file contains 'print' commands, but PrintAssembly is also enabled"); + warning("CompileCommand and/or %s file contains 'print' commands, but PrintAssembly is also enabled", default_cc_file); } else if (FLAG_IS_DEFAULT(DebugNonSafepoints)) { warning("printing of assembly code is enabled; turning on DebugNonSafepoints to gain additional output"); DebugNonSafepoints = true; diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index 438e783ecfb..74fddd94fd5 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -2971,7 +2971,10 @@ jint Arguments::parse(const JavaVMInitArgs* args) { const char* tail; // If flag "-XX:Flags=flags-file" is used it will be the first option to be processed. + const char* hotspotrc = ".hotspotrc"; bool settings_file_specified = false; + bool needs_hotspotrc_warning = false; + const char* flags_file; int index; for (index = 0; index < args->nOptions; index++) { @@ -3015,16 +3018,19 @@ jint Arguments::parse(const JavaVMInitArgs* args) { if (!process_settings_file(flags_file, true, args->ignoreUnrecognized)) { return JNI_EINVAL; } - } - + } else { #ifdef ASSERT - // Parse default .hotspotrc settings file - if (!settings_file_specified) { + // Parse default .hotspotrc settings file if (!process_settings_file(".hotspotrc", false, args->ignoreUnrecognized)) { return JNI_EINVAL; } - } +#else + struct stat buf; + if (os::stat(hotspotrc, &buf) == 0) { + needs_hotspotrc_warning = true; + } #endif + } if (PrintVMOptions) { for (index = 0; index < args->nOptions; index++) { @@ -3041,6 +3047,14 @@ jint Arguments::parse(const JavaVMInitArgs* args) { return result; } + // Delay warning until here so that we've had a chance to process + // the -XX:-PrintWarnings flag + if (needs_hotspotrc_warning) { + warning("%s file is present but has been ignored. " + "Run with -XX:Flags=%s to load the file.", + hotspotrc, hotspotrc); + } + #if (defined JAVASE_EMBEDDED || defined ARM) UNSUPPORTED_OPTION(UseG1GC, "G1 GC"); #endif From 2a72b6a15fca32248ee3ffbb9159c089a59e3112 Mon Sep 17 00:00:00 2001 From: Rob McKenna Date: Mon, 2 Jul 2012 19:32:35 +0100 Subject: [PATCH 53/83] 7174887: Deadlock in jndi ldap connection cleanup Reviewed-by: xuelei --- .../classes/com/sun/jndi/ldap/Connection.java | 6 ++++-- .../classes/com/sun/jndi/ldap/LdapClient.java | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java b/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java index 464e3d1bfdd..2b8b410f4cb 100644 --- a/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java +++ b/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, 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 @@ -680,9 +680,11 @@ public final class Connection implements Runnable { ldr = ldr.next; } } - parent.processConnectionClosure(); } } + if (nparent) { + parent.processConnectionClosure(); + } } diff --git a/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java b/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java index 0053758c26f..788152929b2 100644 --- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java +++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, 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 @@ -488,14 +488,16 @@ public final class LdapClient implements PooledConnection { */ void processConnectionClosure() { // Notify listeners - if (unsolicited.size() > 0) { - String msg; - if (conn != null) { - msg = conn.host + ":" + conn.port + " connection closed"; - } else { - msg = "Connection closed"; + synchronized (unsolicited) { + if (unsolicited.size() > 0) { + String msg; + if (conn != null) { + msg = conn.host + ":" + conn.port + " connection closed"; + } else { + msg = "Connection closed"; + } + notifyUnsolicited(new CommunicationException(msg)); } - notifyUnsolicited(new CommunicationException(msg)); } // Remove from pool From 761e0b221daf6eb04b084c09174dca122a723e69 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Mon, 2 Jul 2012 12:59:43 -0700 Subject: [PATCH 54/83] 7180769: assert(tboth->klass_is_exact()) failed: klass should be exact Use class exactness as part of the condition for class compare optimization instead of assert. Reviewed-by: twisti, roland --- hotspot/src/share/vm/opto/parse2.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hotspot/src/share/vm/opto/parse2.cpp b/hotspot/src/share/vm/opto/parse2.cpp index 541f26dd537..4982a1d76fc 100644 --- a/hotspot/src/share/vm/opto/parse2.cpp +++ b/hotspot/src/share/vm/opto/parse2.cpp @@ -1278,9 +1278,9 @@ void Parse::sharpen_type_after_if(BoolTest::mask btest, // or the narrowOop equivalent. const Type* obj_type = _gvn.type(obj); const TypeOopPtr* tboth = obj_type->join(con_type)->isa_oopptr(); - if (tboth != NULL && tboth != obj_type && tboth->higher_equal(obj_type)) { + if (tboth != NULL && tboth->klass_is_exact() && tboth != obj_type && + tboth->higher_equal(obj_type)) { // obj has to be of the exact type Foo if the CmpP succeeds. - assert(tboth->klass_is_exact(), "klass should be exact"); int obj_in_map = map()->find_edge(obj); JVMState* jvms = this->jvms(); if (obj_in_map >= 0 && From 9a2ec820dc0824c08ee9f0d41c778260bce2380c Mon Sep 17 00:00:00 2001 From: Mani Sarkar Date: Mon, 2 Jul 2012 14:11:44 -0700 Subject: [PATCH 55/83] 7176907: additional warnings cleanup in java.util, java.util.regexp, java.util.zip Reviewed-by: forax, khazra, smarks --- .../classes/java/util/InvalidPropertiesFormatException.java | 3 +++ jdk/src/share/classes/java/util/regex/Pattern.java | 4 ++++ jdk/src/share/classes/java/util/zip/GZIPInputStream.java | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/jdk/src/share/classes/java/util/InvalidPropertiesFormatException.java b/jdk/src/share/classes/java/util/InvalidPropertiesFormatException.java index 64dde4d42a4..2d92ae66e85 100644 --- a/jdk/src/share/classes/java/util/InvalidPropertiesFormatException.java +++ b/jdk/src/share/classes/java/util/InvalidPropertiesFormatException.java @@ -44,6 +44,9 @@ import java.io.IOException; */ public class InvalidPropertiesFormatException extends IOException { + + private static final long serialVersionUID = 7763056076009360219L; + /** * Constructs an InvalidPropertiesFormatException with the specified * cause. diff --git a/jdk/src/share/classes/java/util/regex/Pattern.java b/jdk/src/share/classes/java/util/regex/Pattern.java index 6c32f6a30bb..1c3d9fe0752 100644 --- a/jdk/src/share/classes/java/util/regex/Pattern.java +++ b/jdk/src/share/classes/java/util/regex/Pattern.java @@ -2026,6 +2026,7 @@ loop: for(int x=0, offset=0; x Date: Tue, 3 Jul 2012 11:45:34 -0700 Subject: [PATCH 56/83] 7181508: Remove GenerateNativeHeader on awt java file Reviewed-by: ohair --- jdk/src/share/classes/java/awt/image/DirectColorModel.java | 3 --- jdk/src/share/classes/sun/awt/CharsetString.java | 4 ---- jdk/src/share/classes/sun/java2d/pipe/RegionIterator.java | 4 ---- jdk/src/share/native/sun/awt/image/cvutils/img_globals.c | 1 - 4 files changed, 12 deletions(-) diff --git a/jdk/src/share/classes/java/awt/image/DirectColorModel.java b/jdk/src/share/classes/java/awt/image/DirectColorModel.java index 1f6099c59d7..751d780ba64 100644 --- a/jdk/src/share/classes/java/awt/image/DirectColorModel.java +++ b/jdk/src/share/classes/java/awt/image/DirectColorModel.java @@ -27,7 +27,6 @@ package java.awt.image; import java.awt.color.ColorSpace; import java.awt.Transparency; -import javax.tools.annotation.GenerateNativeHeader; /** * The DirectColorModel class is a ColorModel @@ -107,8 +106,6 @@ import javax.tools.annotation.GenerateNativeHeader; * @see ColorModel#getRGBdefault * */ -/* No native methods here, but the constants are needed in the supporting JNI code */ -@GenerateNativeHeader public class DirectColorModel extends PackedColorModel { private int red_mask; private int green_mask; diff --git a/jdk/src/share/classes/sun/awt/CharsetString.java b/jdk/src/share/classes/sun/awt/CharsetString.java index aba0cbdb611..434ac731377 100644 --- a/jdk/src/share/classes/sun/awt/CharsetString.java +++ b/jdk/src/share/classes/sun/awt/CharsetString.java @@ -24,10 +24,6 @@ */ package sun.awt; -import javax.tools.annotation.GenerateNativeHeader; - -/* No native methods here, but the constants are needed in the supporting JNI code */ -@GenerateNativeHeader public class CharsetString { /** * chars for this string. See also offset, length. diff --git a/jdk/src/share/classes/sun/java2d/pipe/RegionIterator.java b/jdk/src/share/classes/sun/java2d/pipe/RegionIterator.java index 9fdef6ae7af..b46cb11f3a4 100644 --- a/jdk/src/share/classes/sun/java2d/pipe/RegionIterator.java +++ b/jdk/src/share/classes/sun/java2d/pipe/RegionIterator.java @@ -27,14 +27,10 @@ package sun.java2d.pipe; import java.awt.Rectangle; -import javax.tools.annotation.GenerateNativeHeader; - /** * This class defines the API for iterating through the bands * of a region object. */ -/* No native methods here, but the constants are needed in the supporting JNI code */ -@GenerateNativeHeader public class RegionIterator { Region region; int curIndex; diff --git a/jdk/src/share/native/sun/awt/image/cvutils/img_globals.c b/jdk/src/share/native/sun/awt/image/cvutils/img_globals.c index 7183f372902..e7ecd3f49c0 100644 --- a/jdk/src/share/native/sun/awt/image/cvutils/img_globals.c +++ b/jdk/src/share/native/sun/awt/image/cvutils/img_globals.c @@ -31,7 +31,6 @@ #include "img_globals.h" #include "java_awt_image_IndexColorModel.h" -#include "java_awt_image_DirectColorModel.h" #include "java_awt_Transparency.h" /* From 0c7c3bb2c554af9e7f4bd5f6998e321c96e3b87b Mon Sep 17 00:00:00 2001 From: Jason Uh Date: Tue, 3 Jul 2012 14:56:58 -0400 Subject: [PATCH 57/83] 7133344: Document the java.security.properties system property feature in the java.security file Reviewed-by: hawtin, mullan, weijun --- jdk/src/share/lib/security/java.security | 22 +++++++++++++++++++ .../share/lib/security/java.security-macosx | 22 +++++++++++++++++++ .../share/lib/security/java.security-solaris | 22 +++++++++++++++++++ .../share/lib/security/java.security-windows | 22 +++++++++++++++++++ 4 files changed, 88 insertions(+) diff --git a/jdk/src/share/lib/security/java.security b/jdk/src/share/lib/security/java.security index 52f3067408d..e8ca7bd7eea 100644 --- a/jdk/src/share/lib/security/java.security +++ b/jdk/src/share/lib/security/java.security @@ -1,6 +1,28 @@ # # This is the "master security properties file". # +# An alternate java.security properties file may be specified +# from the command line via the system property +# +# -Djava.security.properties= +# +# This properties file appends to the master security properties file. +# If both properties files specify values for the same key, the value +# from the command-line properties file is selected, as it is the last +# one loaded. +# +# Also, if you specify +# +# -Djava.security.properties== (2 equals), +# +# then that properties file completely overrides the master security +# properties file. +# +# To disable the ability to specify an additional properties file from +# the command line, set the key security.overridePropertiesFile +# to false in the master security properties file. It is set to true +# by default. + # In this file, various security properties are set for use by # java.security classes. This is where users can statically register # Cryptography Package Providers ("providers" for short). The term diff --git a/jdk/src/share/lib/security/java.security-macosx b/jdk/src/share/lib/security/java.security-macosx index 6c16c2ca0d6..1c04236e5d6 100644 --- a/jdk/src/share/lib/security/java.security-macosx +++ b/jdk/src/share/lib/security/java.security-macosx @@ -1,6 +1,28 @@ # # This is the "master security properties file". # +# An alternate java.security properties file may be specified +# from the command line via the system property +# +# -Djava.security.properties= +# +# This properties file appends to the master security properties file. +# If both properties files specify values for the same key, the value +# from the command-line properties file is selected, as it is the last +# one loaded. +# +# Also, if you specify +# +# -Djava.security.properties== (2 equals), +# +# then that properties file completely overrides the master security +# properties file. +# +# To disable the ability to specify an additional properties file from +# the command line, set the key security.overridePropertiesFile +# to false in the master security properties file. It is set to true +# by default. + # In this file, various security properties are set for use by # java.security classes. This is where users can statically register # Cryptography Package Providers ("providers" for short). The term diff --git a/jdk/src/share/lib/security/java.security-solaris b/jdk/src/share/lib/security/java.security-solaris index 1191aff8403..87a6f1ea5b4 100644 --- a/jdk/src/share/lib/security/java.security-solaris +++ b/jdk/src/share/lib/security/java.security-solaris @@ -1,6 +1,28 @@ # # This is the "master security properties file". # +# An alternate java.security properties file may be specified +# from the command line via the system property +# +# -Djava.security.properties= +# +# This properties file appends to the master security properties file. +# If both properties files specify values for the same key, the value +# from the command-line properties file is selected, as it is the last +# one loaded. +# +# Also, if you specify +# +# -Djava.security.properties== (2 equals), +# +# then that properties file completely overrides the master security +# properties file. +# +# To disable the ability to specify an additional properties file from +# the command line, set the key security.overridePropertiesFile +# to false in the master security properties file. It is set to true +# by default. + # In this file, various security properties are set for use by # java.security classes. This is where users can statically register # Cryptography Package Providers ("providers" for short). The term diff --git a/jdk/src/share/lib/security/java.security-windows b/jdk/src/share/lib/security/java.security-windows index 3793e79be29..e7c36d8c470 100644 --- a/jdk/src/share/lib/security/java.security-windows +++ b/jdk/src/share/lib/security/java.security-windows @@ -1,6 +1,28 @@ # # This is the "master security properties file". # +# An alternate java.security properties file may be specified +# from the command line via the system property +# +# -Djava.security.properties= +# +# This properties file appends to the master security properties file. +# If both properties files specify values for the same key, the value +# from the command-line properties file is selected, as it is the last +# one loaded. +# +# Also, if you specify +# +# -Djava.security.properties== (2 equals), +# +# then that properties file completely overrides the master security +# properties file. +# +# To disable the ability to specify an additional properties file from +# the command line, set the key security.overridePropertiesFile +# to false in the master security properties file. It is set to true +# by default. + # In this file, various security properties are set for use by # java.security classes. This is where users can statically register # Cryptography Package Providers ("providers" for short). The term From d85c0b6f6fc99c3c707ea120893b088231fa4f5e Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Tue, 3 Jul 2012 16:01:59 -0700 Subject: [PATCH 58/83] 7181501: Add some GenerateNativeHeader annotations and misc Mac adjustments to makefiles Reviewed-by: ohair --- jdk/src/macosx/native/jobjc/build.xml | 12 +++++-- .../native/jobjc/src/core/PrimitiveCoder.hs | 7 ++++- .../src/core/java/com/apple/jobjc/CFType.java | 4 +++ .../src/core/java/com/apple/jobjc/Coder.java | 17 ++++++++++ .../core/java/com/apple/jobjc/FFIType.java | 4 +++ .../core/java/com/apple/jobjc/Function.java | 4 +++ .../src/core/java/com/apple/jobjc/ID.java | 4 +++ .../src/core/java/com/apple/jobjc/Invoke.java | 10 ++++++ .../java/com/apple/jobjc/JObjCRuntime.java | 6 ++++ .../java/com/apple/jobjc/MacOSXFramework.java | 4 +++ .../core/java/com/apple/jobjc/NSClass.java | 6 ++++ .../com/apple/jobjc/NativeArgumentBuffer.java | 4 +++ .../java/com/apple/jobjc/NativeBuffer.java | 4 +++ .../jobjc/NativeObjectLifecycleManager.java | 10 ++++++ .../src/core/java/com/apple/jobjc/Opaque.java | 4 +++ .../core/java/com/apple/jobjc/Pointer.java | 4 +++ .../java/com/apple/jobjc/PrimitiveCoder.java | 31 ++++++++++++++++++- .../src/core/java/com/apple/jobjc/SEL.java | 4 +++ .../src/core/java/com/apple/jobjc/Struct.java | 4 +++ .../java/com/apple/jobjc/Subclassing.java | 4 +++ .../generator/classes/FrameworkClassFile.java | 7 ++++- .../internal/jobjc/generator/model/Clazz.java | 4 +++ .../model/coders/ComplexCoderDescriptor.java | 7 +++-- 23 files changed, 157 insertions(+), 8 deletions(-) diff --git a/jdk/src/macosx/native/jobjc/build.xml b/jdk/src/macosx/native/jobjc/build.xml index 46e726c6278..19e29ad51af 100644 --- a/jdk/src/macosx/native/jobjc/build.xml +++ b/jdk/src/macosx/native/jobjc/build.xml @@ -140,8 +140,16 @@ - + includeantruntime="false"> + + + + + + + + + diff --git a/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs b/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs index 544998ee859..2759733ec6f 100644 --- a/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs +++ b/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs @@ -2,7 +2,7 @@ {- /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011,2012, 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 @@ -196,6 +196,8 @@ sizeofRet nt = c2java ntype = unlines [ "// native " ++ ntypeS ++ " -> java " ++ jprimS, + "/* No native methods here, but the constants are needed in the supporting JNI code */", + "@GenerateNativeHeader", "public static final class " ++ className ++ " extends PrimitiveCoder<" ++ jclassS ++ ">{", "\tpublic static final " ++ className ++ " INST = new " ++ className ++ "();", "\tpublic " ++ className ++ "(){ super("++ffitypeVal ntype++", \"" ++ [encoding ntype] ++ "\", "++jclassS++".class, "++jprimS++".class); }", @@ -246,10 +248,13 @@ main = do putStrLn "package com.apple.jobjc;" putStrLn "import com.apple.jobjc.JObjCRuntime.Width;" + putStrLn "import javax.tools.annotation.GenerateNativeHeader;" putStrLn "// Auto generated by PrimitiveCoder.hs" putStrLn "// Do not edit by hand." + putStrLn "/* No native methods here, but the constants are needed in the supporting JNI code */" + putStrLn "@GenerateNativeHeader" putStrLn "public abstract class PrimitiveCoder extends Coder{" putStrLn "\tpublic PrimitiveCoder(int ffiTypeCode, String objCEncoding, Class jclass, Class jprim){" diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java index aeeca30d29e..835b3793538 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class CFType extends Pointer { protected CFType(long ptr) { super(ptr); } protected CFType(Pointer ptr) { super(ptr.ptr); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java index a6a714f3933..f1bc68283ac 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java @@ -35,6 +35,7 @@ import com.apple.jobjc.PrimitiveCoder.SCharCoder; import com.apple.jobjc.PrimitiveCoder.SIntCoder; import com.apple.jobjc.PrimitiveCoder.SLongLongCoder; import com.apple.jobjc.PrimitiveCoder.SShortCoder; +import javax.tools.annotation.GenerateNativeHeader; public abstract class Coder { private static native long getNativeFFITypePtrForCode(final int code); @@ -142,6 +143,8 @@ public abstract class Coder { // + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class VoidCoder extends Coder{ public static final VoidCoder INST = new VoidCoder(); public VoidCoder(){ super(FFI_VOID, "v", Void.class, void.class); } @@ -150,6 +153,8 @@ public abstract class Coder { @Override public void push(JObjCRuntime runtime, long addr, Object x) { throw new RuntimeException("Trying to push a Void."); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class UnknownCoder extends Coder { public static final UnknownCoder INST = new UnknownCoder(); public UnknownCoder(){ super(-1, "?", null, null); } @@ -158,6 +163,8 @@ public abstract class Coder { @Override public Object pop(JObjCRuntime runtime, long addr) { throw new RuntimeException("Coder not implemented"); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class PrimitivePointerCoder extends Coder { public static final PrimitivePointerCoder INST = new PrimitivePointerCoder(); public PrimitivePointerCoder(){ super(Coder.FFI_PTR, "^?", Long.class, long.class); } @@ -187,6 +194,8 @@ public abstract class Coder { @Override public void push(JObjCRuntime runtime, long addr, Long x) { push(runtime, addr, (long) x); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class PointerCoder extends Coder { public static final PointerCoder INST = new PointerCoder(); public PointerCoder(){ super(FFI_PTR, "^?", Pointer.class); } @@ -200,6 +209,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class SELCoder extends Coder { public static final SELCoder INST = new SELCoder(); public SELCoder(){ super(FFI_PTR, ":", SEL.class); } @@ -213,6 +224,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static abstract class StructCoder extends Coder { private final FFIType ffiType; final int sizeof; @@ -254,6 +267,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class IDCoder extends Coder{ public static final IDCoder INST = new IDCoder(); public IDCoder(){ super(FFI_PTR, "@", ID.class); } @@ -272,6 +287,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class NSClassCoder extends Coder{ public static final NSClassCoder INST = new NSClassCoder(); public NSClassCoder(){ super(FFI_PTR, "#", NSClass.class); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java index fcfddd6edec..c045b210c6c 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java @@ -26,6 +26,10 @@ package com.apple.jobjc; import com.apple.jobjc.Coder.PrimitivePointerCoder; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader class FFIType{ private static native void makeFFIType(long ffi_type_buf, long elements_buf); private static native int getFFITypeSizeof(); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java index 0acfccce91d..b5257cc83ef 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class Function { private static native long getFxnPtrForFunctionName(final String functionName); private static native long getFxnPtrForFunctionNameAndLib(final long libPtr, final String functionName); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java index f2b3718df7e..192e6feafa0 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java @@ -29,6 +29,10 @@ import java.lang.reflect.Constructor; import java.util.LinkedHashMap; import java.util.Map; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class ID extends Pointer{ static native String getNativeDescription(final long objPtr); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java index c6cab308a93..19e79ddc165 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java @@ -30,12 +30,18 @@ import com.apple.jobjc.Coder.PrimitivePointerCoder; import com.apple.jobjc.Coder.SELCoder; import com.apple.jobjc.Coder.StructCoder; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class Invoke { public abstract void invoke(NativeArgumentBuffer argBuf); public abstract void invoke(NativeArgumentBuffer buffer, Struct retvalStruct); // + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class FunCall extends Invoke{ static native void invoke(long cifPtr, long fxnPtr, long retValPtr, long argsPtr); @@ -72,6 +78,8 @@ public abstract class Invoke { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class MsgSend extends Invoke{ static{ System.load("/usr/lib/libobjc.dylib"); } @@ -157,6 +165,8 @@ public abstract class Invoke { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class MsgSendSuper extends Invoke{ static{ System.load("/usr/lib/libobjc.dylib"); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java index b5e08478c1c..03f636696b2 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java @@ -31,10 +31,16 @@ import java.util.List; import sun.misc.Unsafe; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public final class JObjCRuntime { static { System.loadLibrary("JObjC"); } + @GenerateNativeHeader public static enum Arch{ ppc, i386, x86_64 }; + @GenerateNativeHeader public static enum Width{ W32, W64 }; public static final Arch ARCH = getArch(); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java index bfc77501db8..09737c80925 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java @@ -25,6 +25,10 @@ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class MacOSXFramework { private static native long retainFramework(final String frameworkName); private static native void releaseFramework(final long frameworkPtr); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java index dbc784f6940..15de180200d 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java @@ -27,7 +27,13 @@ package com.apple.jobjc; import java.lang.ref.WeakReference; import java.lang.reflect.Constructor; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class NSClass extends ID { + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class NSClassNotFoundException extends RuntimeException{ public NSClassNotFoundException(String m){ super(m); } public NSClassNotFoundException(String m, Throwable cause){ super(m, cause); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java index 1e3c42452bf..3a6a792af56 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java @@ -28,6 +28,10 @@ import java.nio.ByteOrder; import com.apple.jobjc.Coder.PrimitivePointerCoder; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public final class NativeArgumentBuffer{ private static final ThreadLocal threadLocal = new ThreadLocal(); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java index ee0ac05d687..f7285f145a5 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java @@ -27,9 +27,13 @@ package com.apple.jobjc; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import javax.tools.annotation.GenerateNativeHeader; + /** * A wrapper around a direct ByteBuffer and its native pointer. For documentation, @see java.nio.ByteBuffer */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class NativeBuffer { static native long getPtrOfBuffer(final ByteBuffer byteBuffer); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java index b4d3dbfe0b8..928f0012425 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class NativeObjectLifecycleManager { private static native void retainNativeObject(final long ptr); private static native void releaseNativeObject(final long ptr); @@ -33,6 +37,8 @@ public abstract class NativeObjectLifecycleManager { abstract void end(final long ptr); boolean shouldPreRetain() { return false; } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class CFRetainRelease extends NativeObjectLifecycleManager { public static final NativeObjectLifecycleManager INST = new CFRetainRelease(); @Override void begin(final long ptr) { retainNativeObject(ptr); } @@ -40,12 +46,16 @@ public abstract class NativeObjectLifecycleManager { @Override boolean shouldPreRetain() { return true; } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Free extends NativeObjectLifecycleManager { public static final NativeObjectLifecycleManager INST = new Free(); @Override void begin(final long ptr) { } @Override void end(final long ptr) { freeNativeObject(ptr); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Nothing extends NativeObjectLifecycleManager { public static final NativeObjectLifecycleManager INST = new Nothing(); @Override void begin(final long ptr) { } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java index cbc5acca39e..82bceb93ce8 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class Opaque extends Pointer { protected Opaque(long ptr) { super(ptr); } protected Opaque(Pointer ptr) { super(ptr.ptr); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java index 5d8c3c85c2e..cc0487f2e69 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class Pointer implements Comparable>{ long ptr; diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java index 8dcc42482da..975b88848d5 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011,2012, 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 @@ -24,8 +24,11 @@ */ package com.apple.jobjc; import com.apple.jobjc.JObjCRuntime.Width; +import javax.tools.annotation.GenerateNativeHeader; // Auto generated by PrimitiveCoder.hs // Do not edit by hand. +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class PrimitiveCoder extends Coder{ public PrimitiveCoder(int ffiTypeCode, String objCEncoding, Class jclass, Class jprim){ super(ffiTypeCode, objCEncoding, jclass, jprim); @@ -127,6 +130,8 @@ public abstract class PrimitiveCoder extends Coder{ // native BOOL -> java boolean +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class BoolCoder extends PrimitiveCoder{ public static final BoolCoder INST = new BoolCoder(); public BoolCoder(){ super(FFI_SINT8, "B", Boolean.class, boolean.class); } @@ -170,6 +175,8 @@ public static final class BoolCoder extends PrimitiveCoder{ } // native schar -> java byte +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SCharCoder extends PrimitiveCoder{ public static final SCharCoder INST = new SCharCoder(); public SCharCoder(){ super(FFI_SINT8, "c", Byte.class, byte.class); } @@ -213,6 +220,8 @@ public static final class SCharCoder extends PrimitiveCoder{ } // native uchar -> java byte +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class UCharCoder extends PrimitiveCoder{ public static final UCharCoder INST = new UCharCoder(); public UCharCoder(){ super(FFI_UINT8, "C", Byte.class, byte.class); } @@ -256,6 +265,8 @@ public static final class UCharCoder extends PrimitiveCoder{ } // native sshort -> java short +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SShortCoder extends PrimitiveCoder{ public static final SShortCoder INST = new SShortCoder(); public SShortCoder(){ super(FFI_SINT16, "s", Short.class, short.class); } @@ -299,6 +310,8 @@ public static final class SShortCoder extends PrimitiveCoder{ } // native ushort -> java short +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class UShortCoder extends PrimitiveCoder{ public static final UShortCoder INST = new UShortCoder(); public UShortCoder(){ super(FFI_UINT16, "S", Short.class, short.class); } @@ -342,6 +355,8 @@ public static final class UShortCoder extends PrimitiveCoder{ } // native sint -> java int +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SIntCoder extends PrimitiveCoder{ public static final SIntCoder INST = new SIntCoder(); public SIntCoder(){ super(FFI_SINT32, "i", Integer.class, int.class); } @@ -385,6 +400,8 @@ public static final class SIntCoder extends PrimitiveCoder{ } // native uint -> java int +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class UIntCoder extends PrimitiveCoder{ public static final UIntCoder INST = new UIntCoder(); public UIntCoder(){ super(FFI_UINT32, "I", Integer.class, int.class); } @@ -428,6 +445,8 @@ public static final class UIntCoder extends PrimitiveCoder{ } // native slong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SLongCoder extends PrimitiveCoder{ public static final SLongCoder INST = new SLongCoder(); public SLongCoder(){ super((JObjCRuntime.IS64 ? (FFI_SINT64) : (FFI_SINT32)), "l", Long.class, long.class); } @@ -477,6 +496,8 @@ public static final class SLongCoder extends PrimitiveCoder{ } // native ulong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class ULongCoder extends PrimitiveCoder{ public static final ULongCoder INST = new ULongCoder(); public ULongCoder(){ super((JObjCRuntime.IS64 ? (FFI_UINT64) : (FFI_UINT32)), "L", Long.class, long.class); } @@ -526,6 +547,8 @@ public static final class ULongCoder extends PrimitiveCoder{ } // native slonglong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SLongLongCoder extends PrimitiveCoder{ public static final SLongLongCoder INST = new SLongLongCoder(); public SLongLongCoder(){ super(FFI_SINT64, "q", Long.class, long.class); } @@ -569,6 +592,8 @@ public static final class SLongLongCoder extends PrimitiveCoder{ } // native ulonglong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class ULongLongCoder extends PrimitiveCoder{ public static final ULongLongCoder INST = new ULongLongCoder(); public ULongLongCoder(){ super(FFI_UINT64, "Q", Long.class, long.class); } @@ -612,6 +637,8 @@ public static final class ULongLongCoder extends PrimitiveCoder{ } // native float -> java float +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class FloatCoder extends PrimitiveCoder{ public static final FloatCoder INST = new FloatCoder(); public FloatCoder(){ super(FFI_FLOAT, "f", Float.class, float.class); } @@ -655,6 +682,8 @@ public static final class FloatCoder extends PrimitiveCoder{ } // native double -> java double +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class DoubleCoder extends PrimitiveCoder{ public static final DoubleCoder INST = new DoubleCoder(); public DoubleCoder(){ super(FFI_DOUBLE, "d", Double.class, double.class); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java index b6d719e1158..44d679ab539 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class SEL { static native long getSelectorPtr(String selectorName); static native String getSelectorName(long ptr); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java index 8329cf17f04..117710402e8 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java @@ -24,9 +24,13 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + /** * A struct is malloced on the C heap and accessed in Java through a ByteBuffer. */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class Struct{ protected final NativeBuffer raw; private final JObjCRuntime runtime; diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java index b2084dfd706..d3bfc1b0e41 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java @@ -33,6 +33,10 @@ import com.apple.jobjc.Coder.PrimitivePointerCoder; import com.apple.jobjc.Coder.VoidCoder; import com.apple.jobjc.Invoke.MsgSend; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader final class Subclassing { static native long allocateClassPair(long superClass, String name); static native boolean addIVarForJObj(long clazz); diff --git a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java index 20b27b6c548..8a27daaa0af 100644 --- a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java +++ b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java @@ -28,6 +28,7 @@ import java.io.File; import java.io.PrintStream; import java.util.ArrayList; import java.util.List; +import java.util.TreeSet; import com.apple.internal.jobjc.generator.FunctionGenerator; import com.apple.internal.jobjc.generator.Utils; @@ -130,7 +131,11 @@ public class FrameworkClassFile extends GeneratedClassFile { } } - for (final Clazz clazz : framework.classes) { + /** + * Order classes to get stable output + */ + TreeSet sortedClasses = new TreeSet(framework.classes); + for (final Clazz clazz : sortedClasses) { final String classClassName = clazz.name + "Class"; out.println(JavaLang.makeSingleton("_" + classClassName, clazz.name, classClassName, "getRuntime()")); } diff --git a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java index 9dfb8228a82..be4278ffef9 100644 --- a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java +++ b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java @@ -147,4 +147,8 @@ public class Clazz extends Element implements OutputFileGenerator { return null; } + + int compareTo(Clazz o) { + return toString().compareTo(o.toString()); + } } diff --git a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java index 11ee8cc9fe3..7ffb14b0f31 100644 --- a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java +++ b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java @@ -25,7 +25,7 @@ package com.apple.internal.jobjc.generator.model.coders; import java.util.HashMap; -import java.util.HashSet; +import java.util.TreeSet; import java.util.Map; import java.util.Set; @@ -40,7 +40,7 @@ import com.apple.jobjc.JObjCRuntime; */ public class ComplexCoderDescriptor extends CoderDescriptor { static Map, ComplexCoderDescriptor> cache = new HashMap, ComplexCoderDescriptor>(); - static Set mixedEncodingDescriptors = new HashSet(); + static Set mixedEncodingDescriptors = new TreeSet(); public static Set getMixedEncoders() { return mixedEncodingDescriptors; } @@ -76,7 +76,7 @@ public class ComplexCoderDescriptor extends CoderDescriptor { // ** Subclasses // ------------- - public static class MixedEncodingDescriptor extends ComplexCoderDescriptor { + public static class MixedEncodingDescriptor extends ComplexCoderDescriptor implements java.lang.Comparable { protected final PrimitiveCoderDescriptor desc32; public MixedEncodingDescriptor(final PrimitiveCoderDescriptor desc32, final PrimitiveCoderDescriptor desc64) { @@ -97,5 +97,6 @@ public class ComplexCoderDescriptor extends CoderDescriptor { } static String getBaseNameOfCoder(final String coderName) { return coderName.substring(0, coderName.indexOf("Coder")); } + public int compareTo(Object _o) { MixedEncodingDescriptor o = (MixedEncodingDescriptor)_o; return getMixedName().compareTo(o.getMixedName()); } } } From 4e7263a44ae4d50815de7e26a4ee396564e5eec0 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Tue, 3 Jul 2012 16:10:44 -0700 Subject: [PATCH 59/83] 7181504: Update of latest build-infra Makefiles Reviewed-by: ohair --- jdk/makefiles/CompileDemos.gmk | 27 +- jdk/makefiles/CompileJavaClasses.gmk | 94 +- jdk/makefiles/CompileLaunchers.gmk | 169 +- jdk/makefiles/CompileNativeLibraries.gmk | 4411 +++++++++-------- jdk/makefiles/CopyFiles.gmk | 71 +- jdk/makefiles/CopyIntoClasses.gmk | 24 +- jdk/makefiles/CopySamples.gmk | 3 +- jdk/makefiles/CreateJars.gmk | 87 +- jdk/makefiles/GendataBreakIterator.gmk | 8 +- jdk/makefiles/GendataFontConfig.gmk | 12 +- jdk/makefiles/GendataHtml32dtd.gmk | 3 +- jdk/makefiles/GenerateClasses.gmk | 8 +- jdk/makefiles/GenerateData.gmk | 1 + jdk/makefiles/GenerateJavaSources.gmk | 12 +- jdk/makefiles/GensrcBuffer.gmk | 1 + jdk/makefiles/GensrcIcons.gmk | 8 +- jdk/makefiles/GensrcJObjC.gmk | 80 + jdk/makefiles/GensrcMisc.gmk | 105 +- jdk/makefiles/GensrcProperties.gmk | 10 +- jdk/makefiles/GensrcX11Wrappers.gmk | 25 +- jdk/makefiles/Images.gmk | 106 +- jdk/makefiles/Import.gmk | 243 + jdk/makefiles/LegacyMakefiles.gmk | 42 - jdk/makefiles/Makefile | 24 +- jdk/makefiles/OldImages.gmk | 175 - jdk/makefiles/Tools.gmk | 24 + .../com/sun/crypto/provider/Makefile | 275 - jdk/makefiles/common/Classes.gmk | 67 - jdk/makefiles/common/Cscope.gmk | 100 - jdk/makefiles/common/Defs-embedded.gmk | 76 - jdk/makefiles/common/Defs-linux.gmk | 430 -- jdk/makefiles/common/Defs-macosx.gmk | 402 -- jdk/makefiles/common/Defs-solaris.gmk | 757 --- jdk/makefiles/common/Defs-windows.gmk | 418 -- jdk/makefiles/common/Defs.gmk | 577 --- jdk/makefiles/common/Demo.gmk | 415 -- jdk/makefiles/common/Library.gmk | 326 -- jdk/makefiles/common/Mapfile-vers.gmk | 97 - jdk/makefiles/common/Modules.gmk | 479 -- jdk/makefiles/common/Program.gmk | 319 -- jdk/makefiles/common/Release-embedded.gmk | 230 - jdk/makefiles/common/Release-macosx.gmk | 75 - jdk/makefiles/common/Release.gmk | 1401 ------ jdk/makefiles/common/Rules.gmk | 357 -- jdk/makefiles/common/Subdirs.gmk | 148 - jdk/makefiles/common/internal/Defs-corba.gmk | 63 - jdk/makefiles/common/internal/Defs-jaxp.gmk | 53 - jdk/makefiles/common/internal/Defs-jaxws.gmk | 63 - .../common/internal/Defs-langtools.gmk | 42 - .../common/internal/ImportComponents.gmk | 173 - .../common/internal/NativeCompileRules.gmk | 238 - jdk/makefiles/common/internal/Resources.gmk | 262 - jdk/makefiles/common/shared/Compiler-gcc.gmk | 98 - jdk/makefiles/common/shared/Compiler-llvm.gmk | 59 - jdk/makefiles/common/shared/Compiler-msvc.gmk | 93 - jdk/makefiles/common/shared/Compiler-sun.gmk | 138 - jdk/makefiles/common/shared/Defs-control.gmk | 143 - jdk/makefiles/common/shared/Defs-java.gmk | 249 - jdk/makefiles/common/shared/Defs-javadoc.gmk | 71 - jdk/makefiles/common/shared/Defs-linux.gmk | 213 - jdk/makefiles/common/shared/Defs-macosx.gmk | 252 - jdk/makefiles/common/shared/Defs-solaris.gmk | 239 - jdk/makefiles/common/shared/Defs-versions.gmk | 215 - jdk/makefiles/common/shared/Defs-windows.gmk | 696 --- jdk/makefiles/common/shared/Defs.gmk | 662 --- jdk/makefiles/common/shared/Platform.gmk | 526 -- .../common/shared/PrivateDefs.gmk-example | 19 - .../common/shared/Sanity-Settings.gmk | 267 - jdk/makefiles/java/Makefile | 58 - jdk/makefiles/java/invoke/Makefile | 42 - jdk/makefiles/java/redist/Makefile | 497 -- jdk/makefiles/java/redist/sajdi/Makefile | 116 - jdk/makefiles/javax/crypto/Defs-jce.gmk | 105 - jdk/makefiles/javax/crypto/Makefile | 484 -- .../javax/crypto/policy/limited/LIMITED | 1 - .../policy/limited/default_local.policy | 14 - .../crypto/policy/limited/exempt_local.policy | 13 - .../javax/crypto/policy/unlimited/UNLIMITED | 1 - .../policy/unlimited/default_US_export.policy | 5 - .../policy/unlimited/default_local.policy | 5 - jdk/makefiles/mapfiles/libjava/mapfile-vers | 1 - jdk/makefiles/mapfiles/libjfr/mapfile-vers | 58 +- jdk/makefiles/mapfiles/libnio/mapfile-linux | 3 +- jdk/makefiles/mapfiles/libnio/mapfile-solaris | 17 +- jdk/makefiles/mkdemo/Makefile | 68 - jdk/makefiles/mkdemo/jni/Makefile | 44 - jdk/makefiles/mkdemo/jni/Poller/Makefile | 45 - jdk/makefiles/mkdemo/jvmti/Makefile | 51 - jdk/makefiles/mkdemo/jvmti/README.txt | 58 - jdk/makefiles/mkdemo/jvmti/hprof/Makefile | 52 - jdk/makefiles/mkdemo/jvmti/mapfile-vers | 34 - jdk/makefiles/mkdemo/management/README.txt | 57 - jdk/makefiles/sun/jkernel/Makefile | 94 - jdk/makefiles/sun/security/ec/Makefile | 333 -- jdk/makefiles/sun/security/pkcs11/FILES_c.gmk | 41 - jdk/makefiles/sun/security/pkcs11/Makefile | 313 -- .../sun/security/pkcs11/mapfile-vers | 110 - 97 files changed, 3245 insertions(+), 17031 deletions(-) create mode 100644 jdk/makefiles/GensrcJObjC.gmk create mode 100644 jdk/makefiles/Import.gmk delete mode 100644 jdk/makefiles/LegacyMakefiles.gmk delete mode 100644 jdk/makefiles/OldImages.gmk delete mode 100644 jdk/makefiles/com/sun/crypto/provider/Makefile delete mode 100644 jdk/makefiles/common/Classes.gmk delete mode 100644 jdk/makefiles/common/Cscope.gmk delete mode 100644 jdk/makefiles/common/Defs-embedded.gmk delete mode 100644 jdk/makefiles/common/Defs-linux.gmk delete mode 100644 jdk/makefiles/common/Defs-macosx.gmk delete mode 100644 jdk/makefiles/common/Defs-solaris.gmk delete mode 100644 jdk/makefiles/common/Defs-windows.gmk delete mode 100644 jdk/makefiles/common/Defs.gmk delete mode 100644 jdk/makefiles/common/Demo.gmk delete mode 100644 jdk/makefiles/common/Library.gmk delete mode 100644 jdk/makefiles/common/Mapfile-vers.gmk delete mode 100644 jdk/makefiles/common/Modules.gmk delete mode 100644 jdk/makefiles/common/Program.gmk delete mode 100644 jdk/makefiles/common/Release-embedded.gmk delete mode 100644 jdk/makefiles/common/Release-macosx.gmk delete mode 100644 jdk/makefiles/common/Release.gmk delete mode 100644 jdk/makefiles/common/Rules.gmk delete mode 100644 jdk/makefiles/common/Subdirs.gmk delete mode 100644 jdk/makefiles/common/internal/Defs-corba.gmk delete mode 100644 jdk/makefiles/common/internal/Defs-jaxp.gmk delete mode 100644 jdk/makefiles/common/internal/Defs-jaxws.gmk delete mode 100644 jdk/makefiles/common/internal/Defs-langtools.gmk delete mode 100644 jdk/makefiles/common/internal/ImportComponents.gmk delete mode 100644 jdk/makefiles/common/internal/NativeCompileRules.gmk delete mode 100644 jdk/makefiles/common/internal/Resources.gmk delete mode 100644 jdk/makefiles/common/shared/Compiler-gcc.gmk delete mode 100644 jdk/makefiles/common/shared/Compiler-llvm.gmk delete mode 100644 jdk/makefiles/common/shared/Compiler-msvc.gmk delete mode 100644 jdk/makefiles/common/shared/Compiler-sun.gmk delete mode 100644 jdk/makefiles/common/shared/Defs-control.gmk delete mode 100644 jdk/makefiles/common/shared/Defs-java.gmk delete mode 100644 jdk/makefiles/common/shared/Defs-javadoc.gmk delete mode 100644 jdk/makefiles/common/shared/Defs-linux.gmk delete mode 100644 jdk/makefiles/common/shared/Defs-macosx.gmk delete mode 100644 jdk/makefiles/common/shared/Defs-solaris.gmk delete mode 100644 jdk/makefiles/common/shared/Defs-versions.gmk delete mode 100644 jdk/makefiles/common/shared/Defs-windows.gmk delete mode 100644 jdk/makefiles/common/shared/Defs.gmk delete mode 100644 jdk/makefiles/common/shared/Platform.gmk delete mode 100644 jdk/makefiles/common/shared/PrivateDefs.gmk-example delete mode 100644 jdk/makefiles/common/shared/Sanity-Settings.gmk delete mode 100644 jdk/makefiles/java/Makefile delete mode 100644 jdk/makefiles/java/invoke/Makefile delete mode 100644 jdk/makefiles/java/redist/Makefile delete mode 100644 jdk/makefiles/java/redist/sajdi/Makefile delete mode 100644 jdk/makefiles/javax/crypto/Defs-jce.gmk delete mode 100644 jdk/makefiles/javax/crypto/Makefile delete mode 100644 jdk/makefiles/javax/crypto/policy/limited/LIMITED delete mode 100644 jdk/makefiles/javax/crypto/policy/limited/default_local.policy delete mode 100644 jdk/makefiles/javax/crypto/policy/limited/exempt_local.policy delete mode 100644 jdk/makefiles/javax/crypto/policy/unlimited/UNLIMITED delete mode 100644 jdk/makefiles/javax/crypto/policy/unlimited/default_US_export.policy delete mode 100644 jdk/makefiles/javax/crypto/policy/unlimited/default_local.policy delete mode 100644 jdk/makefiles/mkdemo/Makefile delete mode 100644 jdk/makefiles/mkdemo/jni/Makefile delete mode 100644 jdk/makefiles/mkdemo/jni/Poller/Makefile delete mode 100644 jdk/makefiles/mkdemo/jvmti/Makefile delete mode 100644 jdk/makefiles/mkdemo/jvmti/README.txt delete mode 100644 jdk/makefiles/mkdemo/jvmti/hprof/Makefile delete mode 100644 jdk/makefiles/mkdemo/jvmti/mapfile-vers delete mode 100644 jdk/makefiles/mkdemo/management/README.txt delete mode 100644 jdk/makefiles/sun/jkernel/Makefile delete mode 100644 jdk/makefiles/sun/security/ec/Makefile delete mode 100644 jdk/makefiles/sun/security/pkcs11/FILES_c.gmk delete mode 100644 jdk/makefiles/sun/security/pkcs11/Makefile delete mode 100644 jdk/makefiles/sun/security/pkcs11/mapfile-vers diff --git a/jdk/makefiles/CompileDemos.gmk b/jdk/makefiles/CompileDemos.gmk index 4a11f38795e..beda0452992 100644 --- a/jdk/makefiles/CompileDemos.gmk +++ b/jdk/makefiles/CompileDemos.gmk @@ -215,7 +215,7 @@ define SetupJVMTIDemo # Param 5 = libs for posix # Param 6 = libs for winapi # Param 7 = libs for solaris - BUILD_DEMO_JVMTI_$1_EXTRA_SRC:= $$(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/demo/jvmti/$1) \ + BUILD_DEMO_JVMTI_$1_EXTRA_SRC:= $$(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/demo/jvmti/$1) \ $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/,$2)) BUILD_DEMO_JVMTI_$1_EXTRA_INC:=$$(addprefix -I,$$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC)) BUILD_DEMO_JVMTI_$1_LANG:=C @@ -227,18 +227,26 @@ define SetupJVMTIDemo $1_EXTRA_CXX:=$(LIBCXX) BUILD_DEMO_JVMTI_$1_O_FLAG:=$(CXX_O_FLAG_NORM) endif + + $1_CXXFLAGS:=$(CXXFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3 + ifeq ($1-$(OPENJDK_TARGET_CPU_ARCH),waiters-sparc) + $1_FILTER:=-xregs=no%appl + $1_CXXFLAGS:=$$(filter-out $$($1_FILTER),$$($1_CXXFLAGS)) + endif + $$(eval $$(call SetupNativeCompilation,BUILD_DEMO_JVMTI_$1,\ SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC),\ LANG:=$$(BUILD_DEMO_JVMTI_$1_LANG),\ CFLAGS:=$(CFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3,\ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3,\ + CXXFLAGS:=$$($1_CXXFLAGS),\ LDFLAGS:=$(LDFLAGS_JDKLIB),\ LDFLAGS_SUFFIX:=$$($1_EXTRA_CXX),\ LDFLAGS_SUFFIX_posix:=$5,\ LDFLAGS_SUFFIX_winapi:=$6,\ LDFLAGS_SUFFIX_solaris:=-lc $7,\ - BIN:=$(JDK_OUTPUTDIR)/newdemoobjs/jvmti/$1,\ - LIB:=$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib/$(LIBRARY_PREFIX)$1$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs/jvmti/$1,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib,\ + LIBRARY:=$1)) $$(eval $$(call SetupZipArchive,BUILD_DEMO_JVMTI_SRC_$1,\ SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC),\ @@ -262,7 +270,7 @@ define SetupJVMTIDemo BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/$1.jar endif - BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib/$(LIBRARY_PREFIX)$1$(SHARED_LIBRARY_SUFFIX) \ + BUILD_DEMOS += $$(BUILD_DEMO_JVMTI_$1) \ $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/src.zip \ $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/README.txt endef @@ -274,7 +282,7 @@ $(eval $(call SetupJVMTIDemo,heapViewer, agent_util)) # hprof contains error messages using __FILE__ macro. These expand to the absolute path # in the new build system and relative in the old, causing the binaries to differ. $(eval $(call SetupJVMTIDemo,hprof, java_crw_demo,\ - -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt,C,\ + -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt,C,\ -ldl,ws2_32.lib winmm.lib,-lsocket -lnsl)) $(eval $(call SetupJVMTIDemo,minst, agent_util java_crw_demo)) @@ -349,7 +357,7 @@ BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/README ################################################################################################## -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) $(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller/% : $(JDK_TOPDIR)/src/solaris/demo/jni/Poller/% $(MKDIR) -p $(@D) @@ -386,8 +394,9 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBPOLLER,\ CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ -I$(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller, \ LDFLAGS:=$(LDFLAGS_JDKLIB), \ - BIN:=$(JDK_OUTPUTDIR)/newdemoobjs/jni/Poller,\ - LIB:=$(JDK_OUTPUTDIR)/newdemoobjs/$(LIBRARY_PREFIX)Poller$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs/jni/Poller,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs, \ + LIBRARY:=Poller)) # # We can only compile native code after jar has been build (since we depend on generated .h files) diff --git a/jdk/makefiles/CompileJavaClasses.gmk b/jdk/makefiles/CompileJavaClasses.gmk index cd676e289b6..da8f4468fab 100644 --- a/jdk/makefiles/CompileJavaClasses.gmk +++ b/jdk/makefiles/CompileJavaClasses.gmk @@ -45,7 +45,7 @@ EXCLUDES += com/sun/pept \ com/sun/tools/example/debug/gui \ com/oracle/security -ifeq ($(PLATFORM)-$(ARCH_DATA_MODEL),windows-64) +ifeq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL),windows-64) EXCLUDES += sun/security/pkcs11 endif @@ -61,7 +61,7 @@ ifndef OPENJDK EXFILES := $(JDK_TOPDIR)/src/share/classes/javax/crypto/JarVerifier.java endif -ifneq ($(PLATFORM),solaris) +ifneq ($(OPENJDK_TARGET_OS),solaris) # Exclude Solaris nio and two security related files in src/share/classes EXFILES += SolarisAclFileAttributeView.java \ SolarisFileStore.java \ @@ -71,37 +71,34 @@ ifneq ($(PLATFORM),solaris) SolarisUserDefinedFileAttributeView.java \ SolarisWatchService.java \ SolarisAclFileAttributeView.java \ - SolarisFileStore.java \ - SolarisFileSystem.java \ - SolarisFileSystemProvider.java \ - SolarisUserDefinedFileAttributeView.java \ - SolarisNativeDispatcher.java \ - SolarisWatchService.java \ SolarisLoginModule.java \ SolarisSystem.java \ + sun/nio/ch/EventPortSelectorImpl.java \ + sun/nio/ch/EventPortSelectorProvider.java \ + sun/nio/ch/EventPortWrapper.java \ sun/tools/attach/SolarisAttachProvider.java \ sun/tools/attach/SolarisVirtualMachine.java endif # In the old build, this isn't excluded on macosx, even though it probably # should be. -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) EXFILES+=WrapperGenerator.java endif -ifneq ($(PLATFORM),windows) +ifneq ($(OPENJDK_TARGET_OS),windows) # Exclude Window security related files in src/share/classes EXFILES+=NTLoginModule.java \ NTSystem.java endif -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) # Don't build GTK L&F on Windows EXCLUDES+= com/sun/java/swing/plaf/gtk endif -ifneq ($(PLATFORM),linux) +ifneq ($(OPENJDK_TARGET_OS),linux) EXFILES+=sun/tools/attach/LinuxAttachProvider.java \ sun/tools/attach/LinuxVirtualMachine.java \ sun/nio/fs/LinuxDosFileAttributeView.java \ @@ -113,7 +110,7 @@ ifneq ($(PLATFORM),linux) sun/nio/fs/LinuxWatchService.java endif -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) EXFILES+=sun/nio/fs/BsdFileStore.java \ sun/nio/fs/BsdFileSystem.java \ sun/nio/fs/BsdFileSystemProvider.java \ @@ -137,11 +134,11 @@ ifdef OPENJDK endif # Used on windows and macosx -ifeq (,$(filter $(PLATFORM), windows macosx)) +ifeq (,$(filter $(OPENJDK_TARGET_OS), windows macosx)) EXFILES+=sun/awt/AWTCharset.java endif -ifneq ($(PLATFORM), macosx) +ifneq ($(OPENJDK_TARGET_OS), macosx) # # Not in rt.jar on solaris and linux...(windows not checked) # in rt.jar on macosx ?? @@ -192,7 +189,7 @@ endif # Exclude another implicitly not included file. EXFILES+=sun/util/locale/AsciiUtil.java -ifeq (,$(filter $(PLATFORM), solaris macosx)) +ifeq (,$(filter $(OPENJDK_TARGET_OS), solaris macosx)) # # only solaris and macosx # @@ -205,7 +202,7 @@ EXFILES+=-linux-arm.java \ -linux-ppc.java # TODO: Is this necessary? -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) EXFILES+=sun/nio/ch/AbstractPollSelectorImpl.java \ sun/nio/ch/DevPollArrayWrapper.java \ sun/nio/ch/DevPollSelectorImpl.java \ @@ -248,18 +245,24 @@ include CopyIntoClasses.gmk ifndef OPENJDK CLOSED_SRC_DIRS:=$(JDK_TOPDIR)/src/closed/share/classes \ - $(JDK_TOPDIR)/src/closed/$(LEGACY_HOST_OS_API)/classes + $(JDK_TOPDIR)/src/closed/$(LEGACY_OPENJDK_TARGET_OS_API)/classes endif MACOSX_SRC_DIRS := -ifeq ($(PLATFORM),macosx) +ifeq ($(OPENJDK_TARGET_OS),macosx) MACOSX_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/classes # this files are duplicated in MACOSX_SRC_DIRS EXFILES+= $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java \ $(JDK_TOPDIR)/src/solaris/classes/sun/java2d/BackBufferCapsProvider.java \ $(JDK_TOPDIR)/src/solaris/classes/java/net/DefaultInterface.java \ - $(JDK_TOPDIR)/src/solaris/classes/java/lang/ClassLoaderHelper.java + $(JDK_TOPDIR)/src/solaris/classes/java/lang/ClassLoaderHelper.java + + # JObjC.jar contains 1.5 byte-code...so skip it here :-( + # MACOSX_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/native/jobjc/src + # EXCLUDES+= tests/java/com/apple/jobjc + + EXCLUDES+= com/apple/jobjc endif # The exception handling of swing beaninfo @@ -272,7 +275,7 @@ $(JDK_OUTPUTDIR)/classes/javax/swing/beaninfo/images/%.gif: $(JDK_TOPDIR)/make/t $(eval $(call SetupJavaCompilation,BUILD_JDK,\ SETUP:=GENERATE_JDKBYTECODE,\ SRC:=$(JDK_TOPDIR)/src/share/classes \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes \ $(MACOSX_SRC_DIRS) \ $(JDK_OUTPUTDIR)/gensrc \ $(JDK_OUTPUTDIR)/gensrc_swing/javax/swing/beaninfo \ @@ -297,7 +300,7 @@ JDK_BASE_HEADER_CLASSES:=java.lang.Integer \ JDK_BASE_HEADER_JAVA_FILES:=$(patsubst %,$(JDK_TOPDIR)/src/share/classes/%.java,\ $(subst .,/,$(JDK_BASE_HEADER_CLASSES))) -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) JDK_BASE_HEADER_CLASSES_WINDOWS:=sun.nio.ch.PollArrayWrapper JDK_BASE_HEADER_CLASSES+=$(JDK_BASE_HEADER_CLASSES_WINDOWS) JDK_BASE_HEADER_JAVA_FILES+=$(patsubst %,$(JDK_TOPDIR)/src/windows/classes/%.java,\ @@ -348,6 +351,53 @@ $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin: ########################################################################################## +ifeq ($(OPENJDK_TARGET_OS),macosx) +# +# JObjC.jar is compiled with BOOT_JAVAC which (may) not support the "-h" flag. +# so we first compile classes with BOOT_JAVAC and then with JDK_JAVAC :-( +# +$(eval $(call SetupJavaCompiler,GENERATE_15BYTECODE,\ + JAVAC:=$(JAVAC),\ + FLAGS:=-source 1.5 -target 1.5 -g -bootclasspath $(BOOT_RTJAR) -cp $(JDK_OUTPUTDIR)/../langtools/dist/lib/classes.jar $(DISABLE_WARNINGS),\ + SERVER_DIR:=$(JAVAC_SERVERS),\ + SERVER_JVM:=$(SERVER_JAVA),\ + MODE:=$(JAVAC_USE_MODE),\ + USE_DEPS:=$(JAVAC_USE_DEPS))) + +$(eval $(call SetupJavaCompilation,BUILD_JOBJC_JAR,\ + SETUP:=GENERATE_15BYTECODE,\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/java \ + $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/java \ + $(JDK_OUTPUTDIR)/gensrc, \ + INCLUDES := com/apple/jobjc,\ + EXCLUDES := tests/java/com/apple/jobjc,\ + BIN:=$(JDK_OUTPUTDIR)/jobjc_classes,\ + JAR:=$(JDK_OUTPUTDIR)/lib/JObjC.jar, \ + JARINDEX := true)) + +$(BUILD_JOBJC_JAR) : $(BUILD_JDK) + +JARS += $(JDK_OUTPUTDIR)/lib/JObjC.jar + +$(eval $(call SetupJavaCompilation,BUILD_JOBJC_HEADERS_JAR,\ + SETUP:=GENERATE_JDKBYTECODE,\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/java \ + $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/java \ + $(JDK_OUTPUTDIR)/gensrc, \ + INCLUDES := com/apple/jobjc,\ + EXCLUDES := tests/java/com/apple/jobjc,\ + BIN:=$(JDK_OUTPUTDIR)/jobjc_classes_headers,\ + JAR:=$(JDK_OUTPUTDIR)/jobjc_classes_headers/dummy.jar, \ + HEADERS:=$(JDK_OUTPUTDIR)/gensrc_headers)) + +$(BUILD_JOBJC_HEADERS_JAR) : $(BUILD_JDK) + +JARS += $(JDK_OUTPUTDIR)/jobjc_classes_headers/dummy.jar + +endif + +########################################################################################## + # copy with -a to preserve timestamps so dependencies down the line aren't messed up all: $(BUILD_JDK) $(JARS) $(COPY_EXTRA) $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin \ $(JDK_OUTPUTDIR)/classes/_the.jdk.base.headers diff --git a/jdk/makefiles/CompileLaunchers.gmk b/jdk/makefiles/CompileLaunchers.gmk index bb6ef245e62..2b79e5907d3 100644 --- a/jdk/makefiles/CompileLaunchers.gmk +++ b/jdk/makefiles/CompileLaunchers.gmk @@ -32,17 +32,25 @@ include NativeCompilation.gmk # Setup the java compilers for the JDK build. include Setup.gmk +# Build tools +include Tools.gmk + BUILD_LAUNCHERS= define SetupLauncher # TODO: Fix mapfile on solaris. Won't work with ld as linker. # Parameter 1 is the name of the launcher (java,javac,jar...) - # Parameter 2 are extra CFLAGS - # Parameter 3 are extra LDFLAGS - # Parameter 4 are extra LDFLAGS_SUFFIX_posix - # Parameter 5 are extra LDFLAGS_SUFFIX_winapi + # Parameter 2 is extra CFLAGS + # Parameter 3 is extra LDFLAGS + # Parameter 4 is extra LDFLAGS_SUFFIX_posix + # Parameter 5 is extra LDFLAGS_SUFFIX_winapi + # Parameter 6 is optional Windows JLI library (full path) + # Parameter 7 is optional Windows resource (RC) flags + # Parameter 8 is optional Windows version resource file (.rc) + # Parameter 9 is different output dir + # Parameter 10 is FULL DEBUG SYMBOLS (set value to turn OFF, since most(all) seems to have it) - $1_WINDOWS_JLI_LIB:=$(JDK_OUTPUTDIR)/objs/jli.lib + $1_WINDOWS_JLI_LIB:=$(JDK_OUTPUTDIR)/objs/libjli/jli.lib ifneq ($6,) $1_WINDOWS_JLI_LIB:=$6 endif @@ -51,33 +59,73 @@ define SetupLauncher $1_VERSION_INFO_RESOURCE:=$8 endif + $1_LDFLAGS := $3 + ifeq ($(OPENJDK_TARGET_OS), macosx) + $1_LDFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks + endif + + $1_LDFLAGS_SUFFIX := + ifeq ($(USE_EXTERNAL_LIBZ), true) + $1_LDFLAGS_SUFFIX += -lz + endif + + ifeq ($(OPENJDK_TARGET_OS), macosx) + $1_LDFLAGS_SUFFIX += -Wl,-all_load $(JDK_OUTPUTDIR)/objs/libjli_static.a \ + -framework Cocoa -framework Security -framework ApplicationServices \ + -sectcreate __TEXT __info_plist $(JDK_TOPDIR)/src/macosx/lib/Info-cmdline.plist + endif + + + $1_OUTPUT_DIR_ARG:=$9 + ifeq (,$$($1_OUTPUT_DIR_ARG)) + $1_OUTPUT_DIR_ARG:=$(JDK_OUTPUTDIR)/bin + endif + + $1_DEBUG_SYMBOLS:=yes + ifneq (,$(10)) + $1_DEBUG_SYMBOLS:= + endif + + $1_OPTIMIZATION:= LOW + + # TODO: maybe it's better to move this if-statement out of this function + ifeq ($(1),java) + $1_OPTIMIZATION:=HIGH + endif + $(call SetupNativeCompilation,BUILD_LAUNCHER_$1,\ SRC:=$(JDK_TOPDIR)/src/share/bin,\ INCLUDE_FILES:=main.c,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKEXE) $(C_O_FLAG_NORM) \ + OPTIMIZATION :=$$($1_OPTIMIZATION), \ + CFLAGS:=$(CFLAGS_JDKEXE) \ -I$(JDK_TOPDIR)/src/share/bin \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin \ - -I$(JDK_TOPDIR)/src/$(PLATFORM)/bin \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin \ + -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS)/bin \ -DFULL_VERSION='"$(FULL_VERSION)"' \ -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \ -DLIBARCHNAME='"$(ARCH)"' \ - -DLAUNCHER_NAME='"openjdk"' \ + -DLAUNCHER_NAME='"java"' \ -DPROGNAME='"$1"' $(DPACKAGEPATH) \ $2,\ CFLAGS_linux:=-fPIC,\ + CFLAGS_solaris:=-KPIC -DHAVE_GETHRTIME,\ LDFLAGS:=$(LDFLAGS_JDKEXE) \ $(call SET_SHARED_LIBRARY_ORIGIN,../lib/$(LIBARCH)/jli) \ $(call SET_SHARED_LIBRARY_ORIGIN,../jre/lib/$(LIBARCH)/jli) \ - $3,\ + $$($1_LDFLAGS),\ MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/launchers/mapfile-$(ARCH), \ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKEXE_SUFFIX),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKEXE_SUFFIX) $$($1_LDFLAGS_SUFFIX),\ LDFLAGS_SUFFIX_posix:=$4 -lc,\ LDFLAGS_SUFFIX_winapi:=$$($1_WINDOWS_JLI_LIB) \ - $(JDK_OUTPUTDIR)/objs/java.lib advapi32.lib $5,\ - BIN:=$(JDK_OUTPUTDIR)/objs/$1_objs,\ - EXE:=$(JDK_OUTPUTDIR)/objs/$1$(EXE_SUFFIX),\ + $(JDK_OUTPUTDIR)/objs/libjava/java.lib advapi32.lib $5,\ + LDFLAGS_SUFFIX_solaris := -lthread $(LIBDL), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/$1_objs,\ + OUTPUT_DIR:=$$($1_OUTPUT_DIR_ARG),\ + PROGRAM:=$1,\ + DEBUG_SYMBOLS:=$$($1_DEBUG_SYMBOLS),\ VERSIONINFO_RESOURCE:=$$($1_VERSION_INFO_RESOURCE),\ RC_FLAGS:=$(RC_FLAGS)\ /D "JDK_FNAME=$1$(EXE_SUFFIX)" \ @@ -86,13 +134,22 @@ define SetupLauncher $7,\ MANIFEST:=$(JDK_TOPDIR)/src/windows/resource/java.manifest) - BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/$1$(EXE_SUFFIX) + BUILD_LAUNCHERS += $$(BUILD_LAUNCHER_$1) + + ifeq ($(OPENJDK_TARGET_OS),macosx) + $$(BUILD_LAUNCHER_$1) : $(JDK_OUTPUTDIR)/objs/libjli_static.a + endif + + ifeq ($(OPENJDK_TARGET_OS),windows) + $$(BUILD_LAUNCHER_$1) : $(JDK_OUTPUTDIR)/objs/libjava/java.lib \ + $$($1_WINDOWS_JLI_LIB) + endif endef ########################################################################################## -XLIBS:=-lX11 -ifeq ($(PLATFORM),macosx) +XLIBS:=$(X_LIBS) -lX11 +ifeq ($(OPENJDK_TARGET_OS),macosx) DPACKAGEPATH:=-DPACKAGE_PATH='"$(PACKAGE_PATH)"' XLIBS:= endif @@ -108,17 +165,17 @@ $(eval $(call SetupLauncher,java,\ $(JDK_OUTPUTDIR)/objs/jli_static.lib,$(JAVA_RC_FLAGS),\ $(JDK_TOPDIR)/src/windows/resource/java.rc)) -ifeq ($(HOST_OS),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) $(eval $(call SetupLauncher,javaw,\ -DEXPAND_CLASSPATH_WILDCARDS,,,user32.lib comctl32.lib,\ $(JDK_OUTPUTDIR)/objs/jli_static.lib,$(JAVA_RC_FLAGS),\ $(JDK_TOPDIR)/src/windows/resource/java.rc)) endif -ifeq ($(PLATFORM),solaris) +ifeq ($(OPENJDK_TARGET_OS),solaris) THREAD_LIB:=-lthread endif -ifeq ($(PLATFORM),linux) +ifeq ($(OPENJDK_TARGET_OS),linux) THREAD_LIB:=-lpthread endif @@ -271,7 +328,7 @@ $(eval $(call SetupLauncher,rmiregistry,\ $(eval $(call SetupLauncher,jcmd,\ -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.jcmd.JCmd"$(COMMA) }')) -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) $(eval $(call SetupLauncher,kinit,\ -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.security.krb5.internal.tools.Kinit"$(COMMA) }')) @@ -286,8 +343,10 @@ endif # The order of the object files on the link command line affects the size of the resulting # binary (at least on linux) which causes the size to differ between old and new build. ifeq ($(USE_EXTERNAL_LIBZ), true) +UNPACKEXE_CFLAGS := -DSYSTEM_ZLIB UNPACKEXE_ZIPOBJS := -lz else +UNPACKEXE_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 UNPACKEXE_ZIPOBJS := $(JDK_OUTPUTDIR)/objs/libzip/zcrc32$(OBJ_SUFFIX) \ $(JDK_OUTPUTDIR)/objs/libzip/deflate$(OBJ_SUFFIX) \ $(JDK_OUTPUTDIR)/objs/libzip/trees$(OBJ_SUFFIX) \ @@ -299,27 +358,31 @@ UNPACKEXE_ZIPOBJS := $(JDK_OUTPUTDIR)/objs/libzip/zcrc32$(OBJ_SUFFIX) \ $(JDK_OUTPUTDIR)/objs/libzip/inftrees$(OBJ_SUFFIX) \ $(JDK_OUTPUTDIR)/objs/libzip/inffast$(OBJ_SUFFIX) +endif -$(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX): $(UNPACKEXE_ZIPOBJS) - +ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) + UNPACKEXE_CFLAGS += -xregs=no%appl endif $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE,\ SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack,\ EXCLUDE_FILES:=jni.cpp,\ LANG:=C,\ - CFLAGS:=$(CXXFLAGS_JDKEXE) $(CXX_O_FLAG_NORM) \ - -DFULL \ - -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5,\ + OPTIMIZATION := LOW, \ + CFLAGS:=$(UNPACKEXE_CFLAGS) $(CXXFLAGS_JDKEXE)\ + -DFULL, \ CFLAGS_release:=-DPRODUCT,\ CFLAGS_linux:=-fPIC,\ + CFLAGS_solaris := -KPIC, \ + CFLAGS_macosx := -fPIC, \ MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libunpack/mapfile-vers-unpack200, \ LDFLAGS:=$(LDFLAGS_JDKEXE) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_SUFFIX:=$(UNPACKEXE_ZIPOBJS) $(LIBCXX),\ LDFLAGS_SUFFIX_solaris:=-lc,\ - BIN:=$(JDK_OUTPUTDIR)/objs/unpackexe,\ - EXE:=$(JDK_OUTPUTDIR)/objs/unpack200$(EXE_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/unpackexe,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/bin,\ + PROGRAM:=unpack200,\ VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\ RC_FLAGS:=$(RC_FLAGS)\ /D "JDK_FNAME=unpack200.exe" \ @@ -327,7 +390,13 @@ $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE,\ /D "JDK_FTYPE=0x1L",\ MANIFEST:=$(JDK_TOPDIR)/src/windows/resource/unpack200_proto.exe.manifest)) -BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX) +ifneq ($(USE_EXTERNAL_LIBZ), true) + +$(BUILD_UNPACKEXE) : $(UNPACKEXE_ZIPOBJS) + +endif + +BUILD_LAUNCHERS += $(BUILD_UNPACKEXE) ########################################################################################## @@ -335,7 +404,7 @@ BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX) BUILD_JEXEC := BUILD_JEXEC_SRC := BUILD_JEXEC_INC := -BUILD_JEXEC_DST := $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/jexec$(EXE_SUFFIX) +BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib/$(LIBARCH) # # UNHANDLED: @@ -345,30 +414,30 @@ BUILD_JEXEC_DST := $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/jexec$(EXE_SUFFIX) # # jdk/make/java/Makefile # -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) ifeq ($(ARCH_DATA_MODEL), 32) BUILD_JEXEC := 1 endif endif -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) BUILD_JEXEC := 1 -endif # PLATFORM +endif # OPENJDK_TARGET_OS # # jdk/make/java/jexec/Makefile # ifeq ($(BUILD_JEXEC), 1) - ifeq ($(PLATFORM),windows) - else ifeq ($(PLATFORM),macosx) + ifeq ($(OPENJDK_TARGET_OS),windows) + else ifeq ($(OPENJDK_TARGET_OS),macosx) BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/macosx/bin else BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/solaris/bin endif - ifeq ($(PLATFORM), linux) - BUILD_JEXEC_DST := $(JDK_OUTPUTDIR)/lib/jexec$(EXE_SUFFIX) + ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib BUILD_JEXEC_INC += -I$(JDK_TOPDIR)/src/share/bin endif endif @@ -382,13 +451,15 @@ ifneq ($(BUILD_JEXEC_SRC),) SRC:=$(BUILD_JEXEC_SRC),\ INCLUDE_FILES:=jexec.c,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKEXE) $(C_O_FLAG_NORM) \ + OPTIMIZATION := LOW, \ + CFLAGS:=$(CFLAGS_JDKEXE)\ $(BUILD_JEXEC_INC), \ LDFLAGS:=$(LDFLAGS_JDKEXE), \ - BIN:=$(JDK_OUTPUTDIR)/objs/jexec_obj,\ - EXE:=$(BUILD_JEXEC_DST))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/jexec_obj,\ + OUTPUT_DIR:=$(BUILD_JEXEC_DST_DIR),\ + PROGRAM:=jexec)) - BUILD_LAUNCHERS += $(BUILD_JEXEC_DST) + BUILD_LAUNCHERS += $(BUILD_JEXEC) endif ########################################################################################## @@ -397,10 +468,10 @@ endif # The java-rmi.cgi script in bin/ only gets delivered in certain situations # JAVA_RMI_CGI:=$(JDK_OUTPUTDIR)/bin/java-rmi.cgi -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) BUILD_LAUNCHERS += $(JAVA_RMI_CGI) endif -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) ifeq ($(ARCH_DATA_MODEL), 32) BUILD_LAUNCHERS += $(JAVA_RMI_CGI) endif @@ -413,12 +484,13 @@ endif # images bin dir. This weird behavior is mimicked here in the converted makefiles for # now. Should probably just be deleted. # http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6512052 -ifeq ($(HOST_OS_API),winapi) +ifeq ($(OPENJDK_TARGET_OS_API),winapi) $(eval $(call SetupLauncher,java-rmi,\ -DEXPAND_CLASSPATH_WILDCARDS,\ - $(call SET_SHARED_LIBRARY_MAPFILE,$(JDK_TOPDIR)/makefiles/java/main/java/mapfile-$(ARCH)))) + $(call SET_SHARED_LIBRARY_MAPFILE,$(JDK_TOPDIR)/makefiles/java/main/java/mapfile-$(ARCH)),\ + ,,,,,$(JDK_OUTPUTDIR)/objs)) - $(JAVA_RMI_CGI): $(JDK_OUTPUTDIR)/objs/java-rmi$(EXE_SUFFIX) + $(JAVA_RMI_CGI): $(BUILD_LAUNCHER_java-rmi) $(MKDIR) -p $(@D) $(CP) $< $@ @@ -432,11 +504,6 @@ endif ########################################################################################## -$(JDK_OUTPUTDIR)/bin/% : $(JDK_OUTPUTDIR)/objs/% - $(ECHO) Copying $(@F) - $(MKDIR) -p $(@D) - $(CP) $< $@ - $(BUILD_LAUNCHERS) : $(JDK_TOPDIR)/makefiles/CompileLaunchers.gmk all: $(BUILD_LAUNCHERS) diff --git a/jdk/makefiles/CompileNativeLibraries.gmk b/jdk/makefiles/CompileNativeLibraries.gmk index 3851ab99eca..be523544712 100644 --- a/jdk/makefiles/CompileNativeLibraries.gmk +++ b/jdk/makefiles/CompileNativeLibraries.gmk @@ -35,13 +35,16 @@ include Setup.gmk # Copy files (can now depend on $(COPY_FILES)) include CopyFiles.gmk +# Build tools +include Tools.gmk + # Include the javah generated headers. CFLAGS_JDKLIB += -I$(JDK_OUTPUTDIR)/gensrc_headers CXXFLAGS_JDKLIB += -I$(JDK_OUTPUTDIR)/gensrc_headers -# Put the libraries here. Different locations for different host apis. -ifeq ($(HOST_OS_API),posix) - ifneq ($(HOST_OS),macosx) +# Put the libraries here. Different locations for different target apis. +ifeq ($(OPENJDK_TARGET_OS_API),posix) + ifneq ($(OPENJDK_TARGET_OS),macosx) INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/lib/$(LIBARCH) LIBARCHDIR=$(LIBARCH)/ else @@ -52,465 +55,213 @@ else INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/bin endif -$(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX) : $(JDK_OUTPUTDIR)/objs/%$(SHARED_LIBRARY_SUFFIX) - $(ECHO) Copying $(@F) - $(CP) $< $@ - BUILD_LIBRARIES= -# TODO: Temporary until awt is converted: -# OBJDIRNAME is the name of the directory where the object code is to -# be placed. It's name depends on whether the data model architecture -# is 32-bit or not. -ifneq ($(ARCH_DATA_MODEL), 32) - OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) -else - OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) -endif +# Absolute paths to lib files on windows for use in LDFLAGS. Should figure out a more +# elegant solution to this. +WIN_VERIFY_LIB := $(JDK_OUTPUTDIR)/objs/libverify/verify.lib +WIN_JAVA_LIB := $(JDK_OUTPUTDIR)/objs/libjava/java.lib +WIN_AWT_LIB := $(JDK_OUTPUTDIR)/objs/libawt/awt.lib ########################################################################################## -BUILD_LIBZIP_FILES := \ - CRC32.c \ - Adler32.c \ - Deflater.c \ - Inflater.c \ - ZipFile.c \ - zip_util.c +BUILD_LIBFDLIBM_OPTIMIZATION:=HIGH -ifeq ($(USE_EXTERNAL_LIBZ),true) - LIBZ := -lz -else -BUILD_LIBZIP_FILES += \ - compress.c \ - deflate.c \ - gzclose.c \ - gzlib.c \ - gzread.c \ - gzwrite.c \ - infback.c \ - inffast.c \ - inflate.c \ - inftrees.c \ - trees.c \ - uncompr.c \ - zadler32.c \ - zcrc32.c \ - zutil.c - LIBZ_INCLUDE := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 +ifneq ($(OPENJDK_TARGET_OS), solaris) + BUILD_LIBFDLIBM_OPTIMIZATION:=NONE endif -$(eval $(call SetupNativeCompilation,BUILD_LIBZIP,\ - SRC:=$(JDK_TOPDIR)/src/share/native/java/util/zip \ - $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5,\ - INCLUDE_FILES := $(BUILD_LIBZIP_FILES), \ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - $(LIBZ_INCLUDE) \ - -I$(JDK_TOPDIR)/src/share/native/java/io \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/io,\ - CFLAGS_posix:=-DUSE_MMAP -UDEBUG,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libzip/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(EXPORT_ZIP_FUNCS), \ - LDFLAGS_winapi:=-export:ZIP_Open -export:ZIP_Close -export:ZIP_FindEntry \ - -export:ZIP_ReadEntry -export:ZIP_GetNextEntry jvm.lib \ - java.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBZ),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libzip,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)zip$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)zip$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)zip$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -LIBUNPACK_LIB_FILE := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX) - -$(eval $(call SetupNativeCompilation,BUILD_LIBUNPACK,\ - SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack,\ - EXCLUDE_FILES:=main.cpp,\ - LANG:=C++,\ - CFLAGS:=$(CXXFLAGS_JDKLIB) $(CXX_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -DNO_ZLIB -DUNPACK_JNI -DFULL,\ - CFLAGS_release:=-DPRODUCT,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libunpack/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB)\ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_winapi:=-map:$(JDK_OUTPUTDIR)/objs/unpack.map /debug \ - jvm.lib java.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_posix:=$(LIBCXX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libunpack,\ - LIB:=$(LIBUNPACK_LIB_FILE),\ - VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\ - RC_FLAGS:=$(RC_FLAGS)\ - /D "JDK_FNAME=unpack.dll" \ - /D "JDK_INTERNAL_NAME=unpack" \ - /D "JDK_FTYPE=0x2L")) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX) - -ifeq ($(HOST_OS_API),winapi) - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.map: $(LIBUNPACK_LIB_FILE) - $(ECHO) Copying $(@F) - $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.map,$<) $@ - - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.pdb: $(LIBUNPACK_LIB_FILE) - $(ECHO) Copying $(@F) - $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.pdb,$<) $@ -endif - -########################################################################################## - -BUILD_LIBFDLIBM_OPTIMIZATION:= $(C_O_FLAG_HI) - -ifneq ($(PLATFORM), solaris) - BUILD_LIBFDLIBM_OPTIMIZATION := $(C_O_FLAG_NONE) -endif - -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) $(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM,\ + STATIC_LIBRARY:=fdlibm,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\ SRC:=$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBFDLIBM_OPTIMIZATION) \ + OPTIMIZATION:=$(BUILD_LIBFDLIBM_OPTIMIZATION), \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\ CFLAGS_winapi_debug:=-DLOGGING,\ ARFLAGS:=$(ARFLAGS),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libfdlibm,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm)) + +BUILD_LIBRARIES += $(BUILD_LIBFDLIBM) + else # # On macosx they do partial (incremental) linking of fdlibm # code it here...rather than add support to NativeCompilation # as this is firt time I see it $(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM,\ + LIBRARY:=fdlibm,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm,\ SRC:=$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBFDLIBM_OPTIMIZATION) \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\ - LDFLAGS := -nostdlib -r,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libfdlibm,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS:=-nostdlib -r,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) : \ - $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(SHARED_LIBRARY_SUFFIX) +$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) : $(BUILD_LIBFDLIBM) $(CP) -a $< $@ -endif - BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) +endif ########################################################################################## -LIBATTACH_EXCLUDE_FILES:= -ifneq ($(PLATFORM),solaris) - LIBATTACH_EXCLUDE_FILES+=SolarisVirtualMachine.c -endif -ifneq ($(PLATFORM),linux) - LIBATTACH_EXCLUDE_FILES+=LinuxVirtualMachine.c -endif -ifneq ($(PLATFORM),macosx) - LIBATTACH_EXCLUDE_FILES+=BsdVirtualMachine.c +BUILD_LIBVERIFY_SRC:=check_code.c check_format.c + +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + BUILD_LIBVERIFY_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libverify/reorder-$(ARCH) + endif endif -$(eval $(call SetupNativeCompilation,BUILD_LIBATTACH,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/tools/attach,\ - EXCLUDE_FILES:=$(LIBATTACH_EXCLUDE_FILES),\ + +$(eval $(call SetupNativeCompilation,BUILD_LIBVERIFY,\ + LIBRARY:=verify, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/common,\ + INCLUDE_FILES:=$(BUILD_LIBVERIFY_SRC),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libattach/mapfile-$(PLATFORM), \ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libverify/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_solaris:=-ldoor,\ - LDFLAGS_winapi:=psapi.lib advapi32.lib java.lib jvm.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libattach,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)attach$(SHARED_LIBRARY_SUFFIX))) + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX_posix:=-ljvm -lc,\ + LDFLAGS_SUFFIX_windows:=jvm.lib,\ + REORDER:=$(BUILD_LIBVERIFY_REORDER),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libverify,\ + DEBUG_SYMBOLS:=true)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)attach$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)attach$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBVERIFY) ########################################################################################## -$(eval $(call SetupNativeCompilation,BUILD_LIBDT_SOCKET,\ - SRC:=$(JDK_TOPDIR)/src/share/transport/socket \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/socket,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(PLATFORM) \ - -I$(JDK_TOPDIR)/src/share/transport/socket \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/socket \ - -I$(JDK_TOPDIR)/src/share/back/export \ - -I$(JDK_TOPDIR)/src/share/back,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libdt_socket/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB), \ - LDFLAGS_SUFFIX_linux:=-lpthread,\ - LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket,\ - LDFLAGS_SUFFIX_winapi:=-export:jdwpTransport_OnLoad ws2_32.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libdt_socket,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)dt_socket$(SHARED_LIBRARY_SUFFIX))) +LIBJAVA_SRC_DIRS:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/lang \ + $(JDK_TOPDIR)/src/share/native/java/lang \ + $(JDK_TOPDIR)/src/share/native/java/lang/ref \ + $(JDK_TOPDIR)/src/share/native/java/lang/reflect \ + $(JDK_TOPDIR)/src/share/native/java/io \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/io \ + $(JDK_TOPDIR)/src/share/native/java/nio \ + $(JDK_TOPDIR)/src/share/native/java/security \ + $(JDK_TOPDIR)/src/share/native/common \ + $(JDK_TOPDIR)/src/share/native/sun/misc \ + $(JDK_TOPDIR)/src/share/native/sun/reflect \ + $(JDK_TOPDIR)/src/share/native/java/sql \ + $(JDK_TOPDIR)/src/share/native/java/util \ + $(JDK_TOPDIR)/src/share/native/java/util/concurrent/atomic \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/common \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/util \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/provider \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/io -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)dt_socket$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +# +# TODO +# +ARCHPROPNAME:=$(LIBARCH) +ifeq ($(OPENJDK_TARGET_OS)-$(ARCH), solaris-i586) + ARCHPROPNAME:=x86 +else ifeq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL), windows-32) + ARCHPROPNAME:=x86 +else ifeq ($(OPENJDK_TARGET_OS), macosx) + ARCHPROPNAME:=$(ARCH) +endif -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)dt_socket$(SHARED_LIBRARY_SUFFIX) +LIBJAVA_CFLAGS:=$(foreach dir,$(LIBJAVA_SRC_DIRS),-I$(dir)) \ + -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include \ + -DARCHPROPNAME='"$(ARCHPROPNAME)"' -########################################################################################## +LIBJAVA_CFLAGS += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ + -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \ + -DJDK_MICRO_VERSION='"$(JDK_MICRO_VERSION)"' \ + -DJDK_BUILD_NUMBER='"$(JDK_BUILD_NUMBER)"' -ifeq ($(HOST_OS_API),winapi) +ifneq (,$(JDK_UPDATE_VERSION)) + LIBJAVA_CFLAGS += -DJDK_UPDATE_VERSION='"$(JDK_UPDATE_VERSION)"' +endif - $(eval $(call SetupNativeCompilation,BUILD_LIBDT_SHMEM,\ - SRC:= $(JDK_TOPDIR)/src/share/native/com/sun/tools/jdi \ - $(JDK_TOPDIR)/src/share/transport/shmem \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/shmem,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ - -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(PLATFORM) \ - -I$(JDK_TOPDIR)/src/share/transport/shmem \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/shmem \ - -I$(JDK_TOPDIR)/src/share/back/export, \ - LDFLAGS:=$(LDFLAGS_JDKLIB),\ - LDFLAGS_winapi:=-export:jdwpTransport_OnLoad,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libdt_shmem,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)dt_shmem$(SHARED_LIBRARY_SUFFIX))) +LIBJAVA_EXCLUDE_FILES:=check_code.c check_format.c - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)dt_shmem$(SHARED_LIBRARY_SUFFIX) - -endif # PLATFORM - -########################################################################################## -# JDWP_LOGGING causes log messages to be compiled into the library. These reference the -# __FILE__ macro which here expands to the absolute path of the file while the old build -# system used a relative path. This causes the binaries to differ in size. -$(eval $(call SetupNativeCompilation,BUILD_LIBJDWP,\ - SRC:=$(JDK_TOPDIR)/src/share/back $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/back,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) -DJDWP_LOGGING $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ - -I$(JDK_TOPDIR)/src/share/transport/export \ - -I$(JDK_TOPDIR)/src/share/back/export \ - -I$(JDK_TOPDIR)/src/share/npt \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt \ - -I$(JDK_TOPDIR)/src/share/back \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/back \ - -I$(JDK_OUTPUTDIR)/gensrc_jdwp_headers,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjdwp/mapfile-vers, \ - LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)), \ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_linux:=$(LIBDL),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjdwp,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jdwp$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jdwp$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jdwp$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -LIBJAAS_MAPFILE := -ifneq ($(PLATFORM),solaris) - LIBJAAS_EXCLUDE_FILES:=Solaris.c +ifneq ($(OPENJDK_TARGET_OS),macosx) + LIBJAVA_EXCLUDE_FILES += java_props_macosx.c else - # only on solaris...wonder why - LIBJAAS_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjaas/mapfile-vers + BUILD_LIBJAVA_java_props_md.c_CFLAGS:=-x objective-c endif -$(eval $(call SetupNativeCompilation,BUILD_LIBJAAS,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/com/sun/security/auth/module,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ - MAPFILE := $(LIBJAAS_MAPFILE),\ - LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_winapi:=netapi32.lib user32.lib mpr.lib advapi32.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - EXCLUDE_FILES:=$(LIBJAAS_EXCLUDE_FILES),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjaas,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX) - -# Oddly enough, it is called jaas_nt.dll under winapi and libjaas_unix.so under posix. -ifeq ($(PLATFORM),windows) - $(INSTALL_LIBRARIES_HERE)/jaas_nt.dll : $(JDK_OUTPUTDIR)/objs/jaas.dll - $(ECHO) Copying $(@F) - $(CP) $< $@ - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/jaas_nt.dll +ifeq ($(OPENJDK_TARGET_OS),windows) + LIBJAVA_EXCLUDE_FILES += \ + UNIXProcess_md.c \ + UnixFileSystem_md.c \ + FileSystemPreferences.c else - $(INSTALL_LIBRARIES_HERE)/libjaas_unix$(SHARED_LIBRARY_SUFFIX) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX) - $(ECHO) Copying $(@F) - $(CP) $< $@ - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/libjaas_unix$(SHARED_LIBRARY_SUFFIX) + LIBJAVA_EXCLUDE_FILES += \ + ProcessImpl_md.c \ + Win32FileSystem_md.c \ + WinNTFileSystem_md.c \ + dirent_md.c \ + WindowsPreferences.c \ + sun/security/provider/WinCAPISeedGenerator.c \ + sun/io/Win32ErrorMode.c endif -########################################################################################## - -ifeq ($(HOST_OS_API),posix) - # TODO make this work on macosx - ifneq ($(HOST_OS),macosx) - - $(eval $(call SetupNativeCompilation,BUILD_LIBSCTP,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/ch/sctp,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ - -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ - -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch/sctp \ - -I$(JDK_TOPDIR)/src/share/native/java/net \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/ch \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/net,\ - CFLAGS_linux:=-Werror,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libsctp/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX_linux:=-lpthread,\ - LDFLAGS_SUFFIX_posix:=$(LIBDL) -lnio -lnet,\ - LDFLAGS_SUFFIX_solaris:=-lsocket,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - INCLUDE_FILES:=SctpNet.c SctpChannelImpl.c SctpServerChannelImpl.c,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libsctp,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)sctp$(SHARED_LIBRARY_SUFFIX))) - - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)sctp$(SHARED_LIBRARY_SUFFIX) - - $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)sctp$(SHARED_LIBRARY_SUFFIX) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)nio$(SHARED_LIBRARY_SUFFIX) - endif -endif - -########################################################################################## - -$(eval $(call SetupNativeCompilation,BUILD_LIBJSDT,\ - SRC:=$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace\ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/tracing/dtrace,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ - -I$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjsdt/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjsdt,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsdt$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsdt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jsdt$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -ifdef OPENJDK - # TODO: Update awt lib path when awt is converted - $(eval $(call SetupNativeCompilation,BUILD_LIBLCMS,\ - SRC:=$(JDK_TOPDIR)/src/share/native/sun/java2d/cmm/lcms \ - $(JDK_TOPDIR)/src/share/native/sun/java2d/,\ - INCLUDE_FILES:=cmscam02.c cmscgats.c cmscnvrt.c cmserr.c \ - cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c \ - cmsio1.c cmslut.c cmsmd5.c cmsmtrx.c \ - cmsnamed.c cmsopt.c cmspack.c cmspcs.c \ - cmsplugin.c cmsps2.c cmssamp.c cmssm.c \ - cmstypes.c cmsvirt.c cmswtpnt.c cmsxform.c \ - LCMS.c,\ - LANG:=C,\ - CFLAGS:=$(filter-out -xc99=%none,$(CFLAGS_JDKLIB)) $(C_O_FLAG_NORM) \ - $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug,\ - CFLAGS_solaris:=-xc99=no_lib,\ - CFLAGS_winapi:=-DCMS_IS_WINDOWS_,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/liblcms/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB), \ - LDFLAGS_solaris:=/usr/lib$(ISA_DIR)/libm.so.2,\ - LDFLAGS_winapi:=awt.lib java.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_posix:=-lawt,\ - LDFLAGS_SUFFIX_linux:=-lm,\ - BIN:=$(JDK_OUTPUTDIR)/objs/liblcms,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)lcms$(SHARED_LIBRARY_SUFFIX))) - - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)lcms$(SHARED_LIBRARY_SUFFIX) - - $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)lcms$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) -endif - -########################################################################################## - -ifdef OPENJDK - BUILD_LIBJPEG_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers -else - BUILD_LIBJPEG_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers-closed - BUILD_LIBJPEG_CLOSED_SRC := $(JDK_TOPDIR)/src/closed/share/native/sun/awt/image/jpeg - BUILD_LIBJPEG_CLOSED_INCLUDES := -I$(BUILD_LIBJPEG_CLOSED_SRC) -endif - -BUILD_LIBJPEG_REORDER := -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) ifneq ($(ARCH), amd64) - BUILD_LIBJPEG_REORDER := $(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/reorder-$(ARCH) + LIBJAVA_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava/reorder-$(ARCH) endif endif -# Suppress gcc warnings like "variable might be clobbered by 'longjmp' -# or 'vfork'": this warning indicates that some variable is placed to -# a register by optimized compiler and it's value might be lost on longjmp(). -# Recommended way to avoid such warning is to declare the variable as -# volatile to prevent the optimization. However, this approach does not -# work because we have to declare all variables as volatile in result. -#ifndef CROSS_COMPILE_ARCH -# CC_43_OR_NEWER := \ -# $(shell $(EXPR) $(CC_MAJORVER) \> 4 \| \ -# \( $(CC_MAJORVER) = 4 \& $(CC_MINORVER) \>= 3 \) ) -# ifeq ($(CC_43_OR_NEWER),1) -# BUILD_LIBJPEG_CFLAGS_linux += -Wno-clobbered -# endif -#endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBJPEG,\ - SRC:=$(BUILD_LIBJPEG_CLOSED_SRC) \ - $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\ +$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA,\ + LIBRARY:=java,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBJAVA_SRC_DIRS),\ + EXCLUDES:=fdlibm/src zip, \ + EXCLUDE_FILES:=$(LIBJAVA_EXCLUDE_FILES), \ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HIGHEST) $(SHARED_LIBRARY_FLAGS) \ - $(BUILD_LIBJPEG_CLOSED_INCLUDES) \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\ - MAPFILE := $(BUILD_LIBJPEG_MAPFILE), \ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBJAVA_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_linux:=$(LIBDL),\ - LDFLAGS_winapi:=java.lib jvm.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - REORDER := $(BUILD_LIBJPEG_REORDER),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjpeg,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX))) + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_windows:=-export:winFileHandleOpen -export:handleLseek \ + $(BUILD_LIBFDLIBM) $(WIN_VERIFY_LIB) jvm.lib \ + shell32.lib delayimp.lib /DELAYLOAD:shell32.dll \ + advapi32.lib,\ + LDFLAGS_SUFFIX_posix:=-ljvm -lverify, \ + LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket -lscf $(LIBDL) $(BUILD_LIBFDLIBM) -lc,\ + LDFLAGS_SUFFIX_linux:=$(LIBDL) $(BUILD_LIBFDLIBM),\ + LDFLAGS_SUFFIX_macosx:=$(BUILD_LIBFDLIBM) \ + -framework CoreFoundation \ + -framework Security -framework SystemConfiguration, \ + REORDER:=$(LIBJAVA_REORDER), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjava)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJAVA) : $(LIBJLI_BINARY) + +$(BUILD_LIBJAVA) : $(BUILD_LIBVERIFY) + +$(BUILD_LIBJAVA) : $(BUILD_LIBFDLIBM) ########################################################################################## -BUILD_LIBMLIB_SRC := $(JDK_TOPDIR)/src/share/native/sun/awt/medialib -BUILD_LIBMLIB_CFLAGS := -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES \ +BUILD_LIBMLIB_SRC:=$(JDK_TOPDIR)/src/share/native/sun/awt/medialib +BUILD_LIBMLIB_CFLAGS:=-D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES \ -I$(BUILD_LIBMLIB_SRC) \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt/medialib + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt/medialib -BUILD_LIBMLIB_LDLIBS := -BUILD_LIBMLIB_IMAGE_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libmlib_image/mapfile-vers +BUILD_LIBMLIB_LDLIBS:= +BUILD_LIBMLIB_IMAGE_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libmlib_image/mapfile-vers -ifneq ($(PLATFORM), sparc) +ifneq ($(OPENJDK_TARGET_OS), sparc) +# +# Yes, this will always be true (until someone makes an OS called sparc) +# but this is how it was writtin in old system...keep it like this for now +# BUILD_LIBMLIB_CFLAGS += -DMLIB_NO_LIBSUNMATH endif @@ -518,43 +269,44 @@ ifeq ($(ARCH_DATA_MODEL), 64) BUILD_LIBMLIB_CFLAGS += -DMLIB_OS64BIT endif -ifneq ($(PLATFORM), windows) +ifneq ($(OPENJDK_TARGET_OS), windows) BUILD_LIBMLIB_LDLIBS += $(LIBM) $(LIBDL) endif $(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE,\ - SRC:=$(BUILD_LIBMLIB_SRC),\ + LIBRARY:=mlib_image,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBMLIB_SRC),\ EXCLUDE_FILES:=awt_ImagingLib.c mlib_c_ImageBlendTable.c,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HIGHEST) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(BUILD_LIBMLIB_CFLAGS),\ - MAPFILE := $(BUILD_LIBMLIB_IMAGE_MAPFILE), \ + MAPFILE:=$(BUILD_LIBMLIB_IMAGE_MAPFILE), \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(BUILD_LIBMLIB_LDLIBS) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_posix := -lm,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libmlib_image,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)mlib_image$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX_posix:=-lm,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)mlib_image$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBMLIB_IMAGE) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)mlib_image$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBMLIB_IMAGE) ########################################################################################## -ifeq ($(PLATFORM),solaris) +ifeq ($(OPENJDK_TARGET_OS),solaris) ifeq ($(ARCH),sparc) - BUILD_LIBMLIB_IMAGE_V := 1 + BUILD_LIBMLIB_IMAGE_V:=1 else ifeq ($(ARCH), sparcv9) - BUILD_LIBMLIB_IMAGE_V := 1 + BUILD_LIBMLIB_IMAGE_V:=1 endif endif ifeq ($(BUILD_LIBMLIB_IMAGE_V), 1) -BUILD_LIBMLIB_IMAGE_V_FILES := \ +BUILD_LIBMLIB_IMAGE_V_FILES:=\ mlib_v_ImageLookUp.c \ mlib_ImageCreate.c \ mlib_ImageAffine.c \ @@ -648,1460 +400,35 @@ BUILD_LIBMLIB_IMAGE_V_FILES := \ mlib_ImageUtils.c \ mlib_ImageDivTables.c -# -# TODO -# -# ASFLAGS += -P -# INLINE = $(PLATFORM_SRC)/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il +BUILD_LIBMLIB_V_CFLAGS := $(filter-out -DMLIB_NO_LIBSUNMATH,$(BUILD_LIBMLIB_CFLAGS)) $(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE_V,\ - SRC:=$(JDK_TOPDIR)/src/share/native/sun/awt/medialib \ + LIBRARY:=mlib_image_v, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/awt/medialib \ $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib,\ LANG:=C,\ - INCLUDE_FILES := $(BUILD_LIBMLIB_IMAGE_V_FILES),\ - CFLAGS:=$(BUILD_LIBMLIB_CFLAGS) \ - $(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) \ - MAPFILE := $(JDK_TOPDIR)/$(BUILD_LIBMLIB_IMAGE_MAPFILE), \ + INCLUDE_FILES:=$(BUILD_LIBMLIB_IMAGE_V_FILES),\ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=-xarch=sparcvis \ + $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il\ + $(BUILD_LIBMLIB_V_CFLAGS) \ + $(CFLAGS_JDKLIB), \ + MAPFILE:=$(BUILD_LIBMLIB_IMAGE_MAPFILE), \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(BUILD_LIBMLIB_LDLIBS) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libmlib_image_v,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)mlib_image_v$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image_v)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)mlib_image_v$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBMLIB_IMAGE_V) endif ########################################################################################## -ifndef OPENJDK - FONT_HEADERS := -I$(CLOSED_SRC)/share/native/$(PKGDIR)/t2k - BUILD_LIBFONTMANAGER_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers - LIBFONTMANAGER_EXCLUDE_FILES += freetypeScaler.c -else - FONT_HEADERS := $(FREETYPE2_CFLAGS) - BUILD_LIBFONTMANAGER_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers.openjdk - BUILD_LIBFONTMANAGER_FONTLIB := $(FREETYPE2_LIBS) -endif - -ifeq ($(PLATFORM),windows) - LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \ - X11TextRenderer.c -else - LIBFONTMANAGER_EXCLUDE_FILES += fontpath.c \ - lcdglyph.c -endif - -BUILD_LIBFONTMANAGER_CFLAGS_COMMON := $(SHARED_LIBRARY_FLAGS) \ - -DLE_STANDALONE -DHEADLESS \ - $(FONT_HEADERS) \ - -I$(JDK_TOPDIR)/src/share/native/sun/font \ - -I$(JDK_TOPDIR)/src/share/native/sun/font/layout \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d - -$(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER,\ - SRC:=$(JDK_TOPDIR)/src/share/native/sun/font\ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/font,\ - EXCLUDE_FILES:=$(LIBFONTMANAGER_EXCLUDE_FILES) \ - AccelGlyphCache.c,\ - LANG:=C++,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\ - CFLAGS_posix:=$(C_O_FLAG_HI),\ - CXXFLAGS_posix:=$(CXX_O_FLAG_HI),\ - CFLAGS_windows=$(C_O_FLAG_NORM)\ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows \ - -DCC_NOEX, \ - MAPFILE := $(BUILD_LIBFONTMANAGER_MAPFILE), \ - LDFLAGS:=$(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows:=advapi32.lib user32.lib gdi32.lib awt.lib java.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) \ - $(BUILD_LIBFONTMANAGER_FONTLIB),\ - LDFLAGS_SUFFIX_linux:=-lawt $(LIBM) $(LIBCXX),\ - LDFLAGS_SUFFIX_solaris:=-lawt -lawt_xawt -lc $(LIBM) $(LIBCXX),\ - LDFLAGS_SUFFIX_macosx:=-lawt $(LIBM) $(LIBCXX) -undefined dynamic_lookup,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libfontmanager,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) - -ifneq (,$(findstring $(PLATFORM),solaris macosx)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) -endif - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -ifndef OPENJDK - -# ifeq ($(PLATFORM), linux) -# ifeq ("$(CC_VER_MAJOR)", "3") -# OTHER_LDLIBS += -Wl,-Bstatic -lgcc_eh -Wl,-Bdynamic -# endif -# endif -# -# The resulting size of the t2k lib file is (at least on linux) dependant on the order of -# the input .o files. Because of this the new build will differ in size to the old build. - BUILD_LIBT2K_CFLAGS_COMMON:=-I$(JDK_TOPDIR)/src/share/native/sun/font \ - -I$(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \ - -I$(JDK_TOPDIR)/src/closed/share/native/sun/font \ - -I$(JDK_TOPDIR)/src/share/share/native/sun/font \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/font \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d - - $(eval $(call SetupNativeCompilation,BUILD_LIBT2K,\ - SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/font \ - $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \ - $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k/ttHints,\ - EXCLUDE_FILES:=orion.c,\ - LANG:=C++,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON) $(C_O_FLAG_HI),\ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON) $(CXX_O_FLAG_HI),\ - CFLAGS_windows=-DCC_NOEX, \ - CXXFLAGS_windows=-DCC_NOEX, \ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libt2k/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows:=user32.lib $(JDK_OUTPUTDIR)/objs/fontmanager.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_macosx:=$(LIBCXX) $(LIBM) -lfontmanager,\ - LDFLAGS_SUFFIX_linux:=$(LIBCXX) $(LIBM) -lfontmanager,\ - LDFLAGS_SUFFIX_solaris:=$(LIBCXX) $(LIBM) -lfontmanager -lawt \ - -lawt_xawt,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libt2k,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)t2k$(SHARED_LIBRARY_SUFFIX))) - - # t2k is linked against fontmanager - $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)t2k$(SHARED_LIBRARY_SUFFIX): \ - $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) - - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)t2k$(SHARED_LIBRARY_SUFFIX) -endif - -########################################################################################## - -# -# TODO replace with X_FLAGS / X_LIBS -# and add them to configure -# -OPENWIN_LIB := $(OPENWIN_HOME)/lib - -BUILD_LIBJAWT_LIB := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX) - -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - KERNEL32_LIB := kernel32.lib - endif - $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows,\ - INCLUDE_FILES:=jawt.cpp,\ - LANG:=C++,\ - CFLAGS:=$(CXXFLAGS_JDKLIB) $(CXX_O_FLAG_NORM) \ - -EHsc -DUNICODE -D_UNICODE \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/windows, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) $(KERNEL32_LIB) \ - advapi32.lib awt.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjawt,\ - LIB:=$(BUILD_LIBJAWT_LIB))) - -$(BUILD_LIBJAWT_LIB) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX): $(BUILD_LIBJAWT_LIB) - $(ECHO) Copying $(@F) - $(CP) $< $@ - -BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX) - -else # PLATFORM not windows - - JAWT_LIBS := -lawt - ifndef BUILD_HEADLESS_ONLY - JAWT_LIBS += -lawt_xawt - else - JAWT_LIBS += -lawt_headless - HEADLESS_CFLAG += -DHEADLESS - endif - - JAWT_FILES := jawt.c - ifeq ($(PLATFORM), macosx) - JAWT_FILES := jawt.m - JAWT_LIBS := -lawt_lwawt - endif - - $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt \ - $(JDK_TOPDIR)/src/macosx/native/sun/awt,\ - INCLUDE_FILES:=$(JAWT_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM), \ - CFLAGS_linux:=$(HEADLESS_CFLAG),\ - CFLAGS_macosx := -I$(JDK_TOPDIR)/src/solaris/native/sun/awt ,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjawt/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -L$(OPENWIN_LIB)$(ISA_DIR),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(JAWT_LIBS),\ - LDFLAGS_SUFFIX_solaris:=-lXrender,\ - LDFLAGS_SUFFIX_macosx:= -framework Cocoa, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libjawt,\ - LIB:=$(BUILD_LIBJAWT_LIB))) - -ifndef BUILD_HEADLESS_ONLY -$(BUILD_LIBJAWT_LIB) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) -else -$(BUILD_LIBJAWT_LIB) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX) -endif - -endif # PLATFORM - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX) - - -########################################################################################## - -BUILD_LIBVERIFY_SRC := check_code.c check_format.c - -ifeq ($(PLATFORM), solaris) - ifneq ($(ARCH), amd64) - BUILD_LIBVERIFY_REORDER := $(JDK_TOPDIR)/makefiles/mapfiles/libverify/reorder-$(ARCH) - endif -endif - - -$(eval $(call SetupNativeCompilation,BUILD_LIBVERIFY,\ - SRC:=$(JDK_TOPDIR)/src/share/native/common,\ - INCLUDE_FILES:=$(BUILD_LIBVERIFY_SRC),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libverify/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_posix:=-ljvm -lc,\ - LDFLAGS_SUFFIX_windows:=jvm.lib,\ - REORDER := $(BUILD_LIBVERIFY_REORDER),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libverify,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)verify$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)verify$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -ifndef OPENJDK -ifneq ($(PLATFORM), macosx) - -BUILD_LIBJDBCODBC_DIR := $(JDK_OUTPUTDIR)/objs/libjdbcodbc -BUILD_LIBJDBCODBC_NAME := $(LIBRARY_PREFIX)JdbcOdbc$(SHARED_LIBRARY_SUFFIX) -BUILD_LIBJDBCODBC_CFLAGS := -BUILD_LIBJDBCODBC_TARGET := $(JDK_OUTPUTDIR)/objs/$(BUILD_LIBJDBCODBC_NAME) -BUILD_LIBJDBCODBC_LIBS := -BUILD_LIBJDBCODBC_LDFLAGS := - -ifeq ($(PLATFORM), windows) - BUILD_LIBJDBCODBC_LDFLAGS := $(LDFLAGS_JDKLIB) - BUILD_LIBJDBCODBC_LIBS += odbc32.lib odbccp32.lib java.lib advapi32.lib -else - BUILD_LIBJDBCODBC_CFLAGS := -DUNIX - -# -# This mimics "current" build system exactly. Link against fake -lodbcinst -lodbc -# but...those are linked with the -soname, causing the dependency to be dropped on linux (gnu ld) -# but kept with other linker (solaris) -# -# IMO very weird behaviour...very weird -# - BUILD_LIBJDBCODBC_LDFLAGS += $(patsubst defs,nodefs,$(LDFLAGS_JDKLIB)) \ - -Xlinker -z -Xlinker nodefs - BUILD_LIBJDBCODBC_LIBS += -L$(BUILD_LIBJDBCODBC_DIR) -lodbcinst -lodbc - BUILD_LIBJDBCODBC_FAKE_LIBS := $(BUILD_LIBJDBCODBC_DIR)/$(LIBRARY_PREFIX)odbcinst$(SHARED_LIBRARY_SUFFIX) \ - $(BUILD_LIBJDBCODBC_DIR)/$(LIBRARY_PREFIX)odbc$(SHARED_LIBRARY_SUFFIX) - - BUILD_LIBJDBCODBC_SONAME := $(call SET_SHARED_LIBRARY_NAME,$(BUILD_LIBJDBCODBC_NAME)) -endif - -ifneq ($(PLATFORM), windows) - -$(eval $(call SetupNativeCompilation,BUILD_FAKEODBCINST,\ - SRC:=$(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc,\ - INCLUDE_FILES := dummyodbc1.c,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ - LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN) $(BUILD_LIBJDBCODBC_LDFLAGS),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(BUILD_LIBJDBCODBC_SONAME),\ - BIN:=$(BUILD_LIBJDBCODBC_DIR),\ - LIB:=$(BUILD_LIBJDBCODBC_DIR)/$(LIBRARY_PREFIX)odbcinst$(SHARED_LIBRARY_SUFFIX))) - -$(eval $(call SetupNativeCompilation,BUILD_FAKEODBC,\ - SRC:=$(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc,\ - INCLUDE_FILES := dummyodbc2.c,\ - LANG:=C,\ - CFLAGS:=$(BUILD_LIBJDBCODBC_CFLAGS) $(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ - LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN) $(BUILD_LIBJDBCODBC_LDFLAGS),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(BUILD_LIBJDBCODBC_SONAME),\ - BIN:=$(BUILD_LIBJDBCODBC_DIR),\ - LIB:=$(BUILD_LIBJDBCODBC_DIR)/$(LIBRARY_PREFIX)odbc$(SHARED_LIBRARY_SUFFIX))) - -$(BUILD_LIBJDBCODBC_FAKE_LIBS) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -$(BUILD_LIBJDBCODBC_TARGET) : $(BUILD_LIBJDBCODBC_FAKE_LIBS) - -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBJDBCODBC,\ - SRC:=$(JDK_TOPDIR)/src/closed/share/classes/sun/jdbc/odbc,\ - EXCLUDE_FILES := dummyodbc.c,\ - LANG:=C,\ - CFLAGS:=$(BUILD_LIBJDBCODBC_CFLAGS) $(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) \ - $(SHARED_LIBRARY_FLAGS),\ - LDFLAGS:=$(BUILD_LIBJDBCODBC_LDFLAGS) \ - $(call SET_SHARED_LIBRARY_ORIGIN) $(BUILD_LIBJDBCODBC_LIBS),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(BUILD_LIBJDBCODBC_SONAME),\ - BIN:=$(BUILD_LIBJDBCODBC_DIR),\ - LIB:=$(BUILD_LIBJDBCODBC_TARGET))) - -$(BUILD_LIBJDBCODBC_TARGET) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)JdbcOdbc$(SHARED_LIBRARY_SUFFIX) - -endif -endif - -########################################################################################## - -BUILD_LIBINSTRUMENT_SRC := $(JDK_TOPDIR)/src/share/instrument \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/io \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/instrument - -BUILD_LIBINSTRUMENT_FILES := \ - EncodingSupport.c \ - EncodingSupport_md.c \ - FileSystemSupport_md.c \ - InstrumentationImplNativeMethods.c \ - InvocationAdapter.c \ - JarFacade.c \ - JPLISAgent.c \ - JPLISAssert.c \ - JavaExceptions.c \ - PathCharsValidator.c \ - Reentrancy.c \ - Utilities.c \ - canonicalize_md.c - -BUILD_LIBINSTRUMENT_DIR := $(JDK_OUTPUTDIR)/objs/libinstrument -BUILD_LIBINSTRUMENT_NAME := $(LIBRARY_PREFIX)instrument$(SHARED_LIBRARY_SUFFIX) -BUILD_LIBINSTRUMENT_CFLAGS := -I$(JDK_TOPDIR)/src/share/instrument \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/instrument \ - -I$(JDK_TOPDIR)/src/share/bin - -BUILD_LIBINSTRUMENT_TARGET := $(JDK_OUTPUTDIR)/objs/$(BUILD_LIBINSTRUMENT_NAME) -BUILD_LIBINSTRUMENT_LDFLAGS := -BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX := - -ifeq ($(PLATFORM), windows) - BUILD_LIBINSTRUMENT_LDFLAGS += jli_static.lib java.lib \ - -export:Agent_OnAttach - # equivalent of strcasecmp is stricmp on Windows - BUILD_LIBINSTRUMENT_CFLAGS += -Dstrcasecmp=stricmp -else - -ifneq (,$(findstring $(PLATFORM), macosx)) - ifneq ($(ARCH), universal) - BUILD_LIBINSTRUMENT_LDFLAGS += -Wl,-all_load - endif - - BUILD_LIBINSTRUMENT_LDFLAGS += $(JDK_OUTPUTDIR)/objs/libjli_static.a - BUILD_LIBINSTRUMENT_LDFLAGS += -liconv - BUILD_LIBINSTRUMENT_LDFLAGS += -framework Cocoa -framework Security -framework ApplicationServices - BUILD_LIBINSTRUMENT_LDFLAGS += $(LIBZ) -else - BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX += -ljli $(LIBDL) -endif -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT,\ - SRC:=$(BUILD_LIBINSTRUMENT_SRC),\ - INCLUDE_FILES:=$(BUILD_LIBINSTRUMENT_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - $(BUILD_LIBINSTRUMENT_CFLAGS),\ - CFLAGS_debug := -DJPLIS_LOGGING,\ - CFLAGS_release := -DNO_JPLIS_LOGGING,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libinstrument/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN)\ - $(call SET_SHARED_LIBRARY_ORIGIN,jli) \ - $(BUILD_LIBINSTRUMENT_LDFLAGS),\ - LDFLAGS_SUFFIX:=$(LIBZ) $(BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX),\ - BIN:=$(BUILD_LIBINSTRUMENT_DIR),\ - LIB:=$(BUILD_LIBINSTRUMENT_TARGET))) - -$(BUILD_LIBINSTRUMENT_TARGET) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX) -$(BUILD_LIBINSTRUMENT_TARGET) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) -$(BUILD_LIBINSTRUMENT_TARGET) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(BUILD_LIBINSTRUMENT_NAME) - -########################################################################################## - -BUILD_LIBMANAGEMENT_SRC := $(JDK_TOPDIR)/src/share/native/sun/management \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/management \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/com/sun/management - -BUILD_LIBMANAGEMENT_EXCLUDES := - -BUILD_LIBMANAGEMENT_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/sun/management - -ifneq ($(PLATFORM), windows) - BUILD_LIBMANAGEMENT_EXCLUDES += OperatingSystem_md.c -else - BUILD_LIBMANAGEMENT_EXCLUDES += UnixOperatingSystem_md.c -endif - -ifneq ($(PLATFORM),solaris) - BUILD_LIBMANAGEMENT_EXCLUDES += SolarisOperatingSystem.c -endif - -ifneq ($(PLATFORM),linux) - BUILD_LIBMANAGEMENT_EXCLUDES += LinuxOperatingSystem.c -endif - -ifneq ($(PLATFORM),macosx) - BUILD_LIBMANAGEMENT_EXCLUDES += MacosxOperatingSystem.c -endif - - -$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT,\ - SRC:=$(BUILD_LIBMANAGEMENT_SRC),\ - EXCLUDE_FILES:=$(BUILD_LIBMANAGEMENT_EXCLUDES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) $(BUILD_LIBMANAGEMENT_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libmanagement/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows := java.lib jvm.lib advapi32.lib psapi.lib,\ - LDFLAGS_solaris := -lkstat,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libmanagement,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)management$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)management$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)management$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -BUILD_LIBHPROF_SRC := $(JDK_TOPDIR)/src/share/demo/jvmti/hprof $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/demo/jvmti/hprof -BUILD_LIBHPROF_CFLAGS := -I$(JDK_TOPDIR)/src/share/demo/jvmti/hprof \ - -I$(JDK_TOPDIR)/src/share/npt \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt \ - -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo - -BUILD_LIBHPROF_LDFLAGS := - -ifeq ($(PLATFORM),solaris) - BUILD_LIBHPROF_LDFLAGS += -lsocket -lnsl -endif - -ifneq ($(PLATFORM),windows) - BUILD_LIBHPROF_LDFLAGS += $(LIBDL) -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBHPROF,\ - SRC:=$(BUILD_LIBHPROF_SRC),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HIGHEST) $(SHARED_LIBRARY_FLAGS) \ - $(BUILD_LIBHPROF_CFLAGS),\ - CFLAGS_debug := -DHPROF_LOGGING,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libhprof/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows:=wsock32.lib winmm.lib advapi32.lib,\ - LDFLAGS_SUFFIX:=$(BUILD_LIBHPROF_LDFLAGS),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libhprof,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)hprof$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)hprof$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA_CRW_DEMO,\ - SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjava_crw_demo/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX:=,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjava_crw_demo,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java_crw_demo$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java_crw_demo$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -$(eval $(call SetupNativeCompilation,BUILD_LIBNPT,\ - SRC:=$(JDK_TOPDIR)/src/share/npt $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/share/npt \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libnpt/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_macosx := -liconv,\ - LDFLAGS_SUFFIX_windows := -export:nptInitialize -export:nptTerminate,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libnpt,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)npt$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)npt$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -BUILD_LIBNIO_SRC := \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/nio \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/ch \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/fs - -BUILD_LIBNIO_CFLAGS := \ - -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ - -I$(JDK_TOPDIR)/src/share/native/java/io \ - -I$(JDK_TOPDIR)/src/share/native/java/net \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/net - -BUILD_LIBNIO_FILES := \ - DatagramChannelImpl.c \ - DatagramDispatcher.c \ - FileChannelImpl.c \ - FileDispatcherImpl.c \ - FileKey.c \ - IOUtil.c \ - MappedByteBuffer.c \ - Net.c \ - ServerSocketChannelImpl.c \ - SocketChannelImpl.c \ - SocketDispatcher.c - -ifeq ($(PLATFORM), windows) - BUILD_LIBNIO_FILES += \ - Iocp.c \ - RegistryFileTypeDetector.c \ - WindowsAsynchronousFileChannelImpl.c \ - WindowsAsynchronousServerSocketChannelImpl.c \ - WindowsAsynchronousSocketChannelImpl.c \ - WindowsNativeDispatcher.c \ - WindowsSelectorImpl.c -endif - -ifeq ($(PLATFORM), linux) - BUILD_LIBNIO_LDFLAGS_SUFFIX := -lpthread $(LIBDL) - BUILD_LIBNIO_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-linux - BUILD_LIBNIO_FILES += \ - EPoll.c \ - EPollArrayWrapper.c \ - EPollPort.c \ - InheritedChannel.c \ - NativeThread.c \ - PollArrayWrapper.c \ - UnixAsynchronousServerSocketChannelImpl.c \ - UnixAsynchronousSocketChannelImpl.c \ - GnomeFileTypeDetector.c \ - LinuxNativeDispatcher.c \ - LinuxWatchService.c \ - UnixCopyFile.c \ - UnixNativeDispatcher.c -endif - -ifeq ($(PLATFORM), macosx) - BUILD_LIBNIO_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-bsd - BUILD_LIBNIO_SRC += $(JDK_TOPDIR)/src/macosx/native/sun/nio/ch - BUILD_LIBNIO_FILES += \ - InheritedChannel.c \ - NativeThread.c \ - PollArrayWrapper.c \ - UnixAsynchronousServerSocketChannelImpl.c \ - UnixAsynchronousSocketChannelImpl.c \ - GnomeFileTypeDetector.c \ - BsdNativeDispatcher.c \ - UnixCopyFile.c \ - UnixNativeDispatcher.c \ - KQueue.c \ - KQueuePort.c \ - KQueueArrayWrapper.c -endif - -ifeq ($(PLATFORM), solaris) - BUILD_LIBNIO_LDFLAGS_SUFFIX := $(LIBDL) - BUILD_LIBNIO_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-solaris - BUILD_LIBNIO_FILES += \ - DevPollArrayWrapper.c \ - InheritedChannel.c \ - NativeThread.c \ - PollArrayWrapper.c \ - SolarisEventPort.c \ - UnixAsynchronousServerSocketChannelImpl.c \ - UnixAsynchronousSocketChannelImpl.c \ - GnomeFileTypeDetector.c \ - SolarisNativeDispatcher.c \ - SolarisWatchService.c \ - UnixCopyFile.c \ - UnixNativeDispatcher.c -endif - -BUILD_LIBNIO_LDFLAGS := -ifeq ($(PLATFORM),windows) - BUILD_LIBNIO_LDFLAGS += \ - java.lib net.lib advapi32.lib jvm.lib ws2_32.lib\ - $(JDK_OUTPUTDIR)/objs/libjava/io_util.obj \ - $(JDK_OUTPUTDIR)/objs/libjava/FileDescriptor_md.obj -endif - -ifeq ($(PLATFORM), linux) - BUILD_LIBNIO_LDFLAGS_SUFFIX += -ljava -lnet -lpthread $(LIBDL) -endif -ifeq ($(PLATFORM), macosx) - BUILD_LIBNIO_LDFLAGS_SUFFIX += -ljava -lnet -pthread -endif - -ifeq ($(PLATFORM), solaris) - BUILD_LIBNIO_LDFLAGS_SUFFIX += $(JVMLIB) $(LIBSOCKET) -lposix4 $(LIBDL) -lsendfile \ - -ljava -lnet -endif # PLATFORM - - -$(eval $(call SetupNativeCompilation,BUILD_LIBNIO,\ - SRC:=$(BUILD_LIBNIO_SRC),\ - INCLUDE_FILES := $(BUILD_LIBNIO_FILES), \ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) \ - $(BUILD_LIBNIO_CFLAGS),\ - MAPFILE := $(BUILD_LIBNIO_MAPFILE), \ - LDFLAGS:=$(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(BUILD_LIBNIO_LDFLAGS_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libnio,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)nio$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)nio$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)nio$(SHARED_LIBRARY_SUFFIX) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)net$(SHARED_LIBRARY_SUFFIX) $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - - -########################################################################################## - -LIBNET_SRC_DIRS := $(JDK_TOPDIR)/src/share/native/java/net \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/net \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/net/dns \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/net/www/protocol/http/ntlm \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/net/sdp \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/net/spi - -LIBNET_CFLAGS := $(foreach dir,$(LIBNET_SRC_DIRS),-I$(dir)) - -LIBNET_EXCLUDE_FILES:= -ifneq ($(PLATFORM),linux) - LIBNET_EXCLUDE_FILES += linux_close.c -endif - -ifneq ($(PLATFORM),macosx) - LIBNET_EXCLUDE_FILES += bsd_close.c -endif - -ifeq ($(PLATFORM),windows) - LIBNET_EXCLUDE_FILES += PlainSocketImpl.c PlainDatagramSocketImpl.c SdpSupport.c -else - LIBNET_EXCLUDE_FILES += TwoStacksPlainSocketImpl.c DualStackPlainSocketImpl.c \ - TwoStacksPlainDatagramSocketImpl.c DualStackPlainDatagramSocketImpl.c \ - NTLMAuthSequence.c NetworkInterface_winXP.c -endif - -LIBNET_LDFLAGS_SUFFIX := - -$(eval $(call SetupNativeCompilation,BUILD_LIBNET,\ - SRC:=$(LIBNET_SRC_DIRS),\ - EXCLUDE_FILES := $(LIBNET_EXCLUDE_FILES), \ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - $(LIBNET_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libnet/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBNET_LDFLAGS_SUFFIX),\ - LDFLAGS_SUFFIX_solaris := -lnsl -lsocket $(LIBDL) ,\ - LDFLAGS_SUFFIX_linux := $(LIBDL) -lpthread ,\ - LDFLAGS_SUFFIX_windows := ws2_32.lib $(JVMLIB) secur32.lib iphlpapi.lib \ - delayimp.lib java.lib jvm.lib advapi32.lib \ - /DELAYLOAD:secur32.dll /DELAYLOAD:iphlpapi.dll, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libnet,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)net$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)net$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)net$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/lib/net.properties: $(JDK_TOPDIR)/src/share/lib/net.properties - $(ECHO) Copying $(@F) - $(MKDIR) -p $(@D) - $(CP) $< $@ - -COPY_FILES += $(JDK_OUTPUTDIR)/lib/net.properties - -ifeq ($(PLATFORM), solaris) -$(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template : $(JDK_TOPDIR)/src/${LEGACY_HOST_OS_API}/lib/sdp/sdp.conf.template - $(ECHO) Copying $(@F) - $(MKDIR) -p $(@D) - $(CP) $< $@ - -COPY_FILES += $(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template -endif - -########################################################################################## - -LIBJAVA_SRC_DIRS := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/lang \ - $(JDK_TOPDIR)/src/share/native/java/lang \ - $(JDK_TOPDIR)/src/share/native/java/lang/ref \ - $(JDK_TOPDIR)/src/share/native/java/lang/reflect \ - $(JDK_TOPDIR)/src/share/native/java/io \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/io \ - $(JDK_TOPDIR)/src/share/native/java/nio \ - $(JDK_TOPDIR)/src/share/native/java/security \ - $(JDK_TOPDIR)/src/share/native/common \ - $(JDK_TOPDIR)/src/share/native/sun/misc \ - $(JDK_TOPDIR)/src/share/native/sun/reflect \ - $(JDK_TOPDIR)/src/share/native/java/sql \ - $(JDK_TOPDIR)/src/share/native/java/util \ - $(JDK_TOPDIR)/src/share/native/java/util/concurrent/atomic \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/common \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/util \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/provider \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/io - -LIBJAVA_CFLAGS := $(foreach dir,$(LIBJAVA_SRC_DIRS),-I$(dir)) \ - -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include \ - -DARCHPROPNAME='"$(ARCH)"' - -LIBJAVA_CFLAGS += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ - -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \ - -DJDK_MICRO_VERSION='"$(JDK_MICRO_VERSION)"' \ - -DJDK_BUILD_NUMBER='"$(JDK_BUILD_NUMBER)"' - -ifneq (,$(JDK_UPDATE_VERSION)) - LIBJAVA_CFLAGS += -DJDK_UPDATE_VERSION='"$(JDK_UPDATE_VERSION)"' -endif - -LIBJAVA_EXCLUDE_FILES:= check_code.c check_format.c - -ifneq ($(PLATFORM),macosx) - LIBJAVA_EXCLUDE_FILES += java_props_macosx.c -else - BUILD_LIBJAVA_java_props_md.c_CFLAGS := -x objective-c -endif - -ifeq ($(PLATFORM),windows) - LIBJAVA_EXCLUDE_FILES += \ - UNIXProcess_md.c \ - UnixFileSystem_md.c \ - FileSystemPreferences.c -else - LIBJAVA_EXCLUDE_FILES += \ - ProcessImpl_md.c \ - Win32FileSystem_md.c \ - WinNTFileSystem_md.c \ - dirent_md.c \ - WindowsPreferences.c \ - sun/security/provider/WinCAPISeedGenerator.c \ - sun/io/Win32ErrorMode.c -endif - -ifeq ($(PLATFORM), solaris) - ifneq ($(ARCH), amd64) - LIBJAVA_REORDER := $(JDK_TOPDIR)/makefiles/mapfiles/libjava/reorder-$(ARCH) - endif -endif - -LIBJAVA_FDLIBM := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) -LIBJAVA_VERIFY := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)verify$(STATIC_LIBRARY_SUFFIX) - -$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA,\ - SRC:=$(LIBJAVA_SRC_DIRS),\ - EXCLUDES := fdlibm/src zip, \ - EXCLUDE_FILES := $(LIBJAVA_EXCLUDE_FILES), \ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) \ - $(LIBJAVA_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjava/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_windows:=-export:winFileHandleOpen -export:handleLseek \ - $(LIBJAVA_FDLIBM) $(LIBJAVA_VERIFY) jvm.lib \ - shell32.lib delayimp.lib /DELAYLOAD:shell32.dll \ - advapi32.lib,\ - LDFLAGS_SUFFIX_posix:=-ljvm -lverify, \ - LDFLAGS_SUFFIX_solaris := -lnsl -lsocket -lscf $(LIBDL) $(LIBJAVA_FDLIBM) -lc,\ - LDFLAGS_SUFFIX_linux := $(LIBDL) $(LIBJAVA_FDLIBM),\ - LDFLAGS_SUFFIX_macosx := $(LIBJAVA_FDLIBM) \ - -framework CoreFoundation \ - -framework Security -framework SystemConfiguration, \ - REORDER := $(LIBJAVA_REORDER), \ - BIN:=$(JDK_OUTPUTDIR)/objs/libjava,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) : $(LIBJLI_BINARY) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)verify$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) : $(LIBJAVA_FDLIBM) - -########################################################################################## - -BUILD_LIBJLI_SRC_DIRS := $(JDK_TOPDIR)/src/share/bin $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin -BUILD_LIBJLI_CFLAGS := $(foreach dir,$(BUILD_LIBJLI_SRC_DIRS),-I$(dir)) - -BUILD_LIBJLI_FILES := \ - java.c \ - splashscreen_stubs.c \ - parse_manifest.c \ - version_comp.c \ - wildcard.c \ - jli_util.c - -ifeq ($(JVM_VARIANT_ZERO), true) - ERGO_FAMILY := zero -else # !ZERO_BUILD - ifneq (,$(findstring $(ARCH), amd64 x86_64)) - ERGO_FAMILY := i586 - else # !X86 FAMILY - ERGO_FAMILY := $(ARCH) - endif #ARCH_FAMILY -endif # ZERO_BUILD - -ifeq ($(PLATFORM), macosx) - BUILD_LIBJLI_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/bin - BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/bin - BUILD_LIBJLI_FILES += java_md_common.c java_md_macosx.c - - BUILD_LIBJLI_java_md_macosx.c_CFLAGS := -x objective-c - BUILD_LIBJLI_A_java_md_macosx.c_CFLAGS := -x objective-c -endif - -ifeq ($(PLATFORM), windows) - BUILD_LIBJLI_FILES += java_md.c -else ifneq ($(PLATFORM), macosx) - - BUILD_LIBJLI_FILES += java_md_common.c - BUILD_LIBJLI_FILES += java_md_solinux.c ergo.c - - ERGO_ARCH_FILE = ergo_$(ERGO_FAMILY).c - - # if the architecture specific ergo file exists then - # use it, else use the generic definitions from ergo.c - ifneq ($(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/$(ERGO_ARCH_FILE)),) - BUILD_LIBJLI_FILES += $(ERGO_ARCH_FILE) - else # !ERGO_ARCH_FILE - BUILD_LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO - endif # ERGO_ARCH_FILE -endif #WINDOWS - -# Names of arch directories -BUILD_LIBJLI_CFLAGS += -DLIBARCHNAME='"$(LIBARCH)"' -ifeq ($(PLATFORM), solaris) - ifneq (,$(findstring $(ARCH),sparc)) - BUILD_LIBJLI_CFLAGS += -DLIBARCH32NAME='"sparc"' - BUILD_LIBJLI_CFLAGS += -DLIBARCH64NAME='"sparcv9"' - else - BUILD_LIBJLI_CFLAGS += -DLIBARCH32NAME='"i386"' - BUILD_LIBJLI_CFLAGS += -DLIBARCH64NAME='"amd64"' - endif -endif # PLATFORM - -ifeq ($(PLATFORM), macosx) - BUILD_LIBJLI_CFLAGS += -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" -endif - -ifneq ($(USE_EXTERNAL_LIBZ),true) - BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 - BUILD_LIBJLI_CFLAGS += $(LIBZ_INCLUDE) - BUILD_LIBJLI_FILES += \ - inflate.c \ - inftrees.c \ - inffast.c \ - zadler32.c \ - zcrc32.c \ - zutil.c -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBJLI,\ - SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ - INCLUDE_FILES := $(BUILD_LIBJLI_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) $(BUILD_LIBJLI_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjli/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := $(LIBZ),\ - LDFLAGS_SUFFIX_posix := $(LIBDL) -lc,\ - LDFLAGS_SUFFIX_linux := -lpthread,\ - LDFLAGS_SUFFIX_windows := \ - -export:JLI_Launch \ - -export:JLI_ManifestIterate \ - -export:JLI_SetTraceLauncher \ - -export:JLI_ReportErrorMessage \ - -export:JLI_ReportErrorMessageSys \ - -export:JLI_ReportMessage \ - -export:JLI_ReportExceptionDescription \ - advapi32.lib \ - comctl32.lib \ - user32.lib,\ - LDFLAGS_SUFFIX_macosx := -framework Cocoa -framework Security -framework ApplicationServices, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libjli,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX))) - -ifeq ($(HOST_OS), windows) - LIBJLI_BINARY := $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) -else - LIBJLI_BINARY := $(INSTALL_LIBRARIES_HERE)/jli/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) - - $(LIBJLI_BINARY) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) - $(MKDIR) -p $(@D) - $(ECHO) Copying $(@F) - $(CP) $< $@ -endif -BUILD_LIBRARIES += $(LIBJLI_BINARY) - -# On windows, the static library has the same suffix as the import library created by -# with the shared library, so the static library is given a different name. No harm -# in doing it for all platform to reduce complexity. -ifneq ($(HOST_OS),macosx) - $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\ - SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ - INCLUDE_FILES := $(BUILD_LIBJLI_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(STATIC_LIBRARY_FLAGS) $(BUILD_LIBJLI_CFLAGS),\ - ARFLAGS:=$(ARFLAGS),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjli_static,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX))) -else - # - # On macosx they do partial (incremental) linking of fdlibm - # code it here...rather than add support to NativeCompilation - # as this is first time I see it - $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_A,\ - SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ - INCLUDE_FILES := $(BUILD_LIBJLI_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(BUILD_LIBJLI_CFLAGS),\ - LDFLAGS := -nostdlib -r,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjli_static,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX))) -endif - -BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX) - -########################################################################################## - -ifndef OPENJDK -ifndef JAVASE_EMBEDDED - -$(eval $(call SetupNativeCompilation,BUILD_LIBJFR,\ - SRC:=$(JDK_TOPDIR)/src/closed/share/native/oracle/jfr,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/closed/share/javavm/export, \ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjfr/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjfr,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jfr$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jfr$(SHARED_LIBRARY_SUFFIX) - -endif -endif - -########################################################################################## - -ifndef OPENJDK - -BUILD_LIBKCMS_EXCLUDE_FILES := -ifeq ($(PLATFORM),windows) - BUILD_LIBKCMS_EXCLUDE_FILES += ukcpmgr.c unixmem.c -else - BUILD_LIBKCMS_EXCLUDE_FILES += cmmdll.c registry.c spxffile.c sysinfo.c winmem.c wkcpmgr.c -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBKCMS,\ - SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms,\ - LANG:=C,\ - EXCLUDE_FILES := $(BUILD_LIBKCMS_EXCLUDE_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -DJAVACMM -DFUT_CALC_EX -DNO_FUT_GCONST,\ - CFLAGS_linux := -Wno-missing-field-initializers,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libkcms/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX_linux := -lpthread,\ - LDFLAGS_SUFFIX_windows := java.lib advapi32.lib user32.lib version.lib, \ - LDFLAGS_SUFFIX:= -lm $(LDFLAGS_JDKLIB_SUFFIX),\ - VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms/cmm.rc,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libkcms,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)kcms$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)kcms$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)kcms$(SHARED_LIBRARY_SUFFIX) - -endif - -########################################################################################## - -ifndef OPENJDK -ifeq ($(PLATFORM), solaris) -ifneq ($(ARCH), amd64) - -ifeq ($(shell if test "$(OS_VERSION_MAJOR)" -eq 5 -a "$(OS_VERSION_MINOR)" -le 10; then $(ECHO) ok; fi), ok) - -SUNWJDGA_MAPFILE := -ifneq (,$(findstring $(ARCH),sparc)) - SUNWJDGA_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjdga/mapfile-vers -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBSUNWJDGA, \ - SRC:=$(JDK_TOPDIR)/src/solaris/native/sun/jdga, \ - LANG:=C, \ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/share/javavm/export \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/javavm/export \ - -I$(OPENWIN_HOME)/include, \ - MAPFILE := $(SUNWJDGA_MAPFILE), \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX:= -L$(OPENWIN_LIB)$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR) -ldga -lX11 $(LIBDL) -lc, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libsunwjdga, \ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)sunwjdga$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)sunwjdga$(SHARED_LIBRARY_SUFFIX) - -endif -endif -endif -endif - -########################################################################################## - -ifeq ($(BUILD_HEADLESS), true) -ifneq ($(PLATFORM), windows) - -# TODO!! -X11_PATH := /usr/X11R6 - -LIBAWT_HEADLESS_DIRS := $(JDK_TOPDIR)/src/share/native/sun/font \ - $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/solaris/native/sun/font \ - $(JDK_TOPDIR)/src/solaris/native/sun/awt \ - $(JDK_TOPDIR)/src/solaris/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/solaris/native/sun/java2d/x11 - -LIBAWT_HEADLESS_CFLAGS := -DHEADLESS=true \ - -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \ - $(CUPS_CFLAGS) \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/jdga \ - $(foreach dir,$(LIBAWT_HEADLESS_DIRS),-I$(dir)) - -LIBAWT_HEADLESS_FILES := \ - awt_Font.c \ - HeadlessToolkit.c \ - fontpath.c \ - VDrawingArea.c \ - X11Color.c \ - X11Renderer.c \ - X11PMBlitLoops.c \ - X11SurfaceData.c \ - X11FontScaler_md.c \ - X11TextRenderer_md.c \ - OGLBlitLoops.c \ - OGLBufImgOps.c \ - OGLContext.c \ - OGLFuncs.c \ - OGLMaskBlit.c \ - OGLMaskFill.c \ - OGLPaints.c \ - OGLRenderQueue.c \ - OGLRenderer.c \ - OGLSurfaceData.c \ - OGLTextRenderer.c \ - OGLVertexCache.c \ - GLXGraphicsConfig.c \ - GLXSurfaceData.c \ - AccelGlyphCache.c \ - CUPSfuncs.c - -LIBAWT_HEADLESS_LDFLAGS_SUFFIX := $(LDFLAGS_JDKLIB_SUFFIX) -lawt -lm - -LIBAWT_HEADLESS_REORDER := -ifeq ($(PLATFORM), solaris) - ifneq ($(ARCH), amd64) - LIBAWT_HEADLESS_REORDER := $(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/reorder-$(ARCH) - endif -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_HEADLESS,\ - SRC:=$(LIBAWT_HEADLESS_DIRS),\ - INCLUDE_FILES := $(LIBAWT_HEADLESS_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) $(LIBAWT_HEADLESS_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - REORDER := $(LIBAWT_HEADLESS_REORDER), \ - LDFLAGS_SUFFIX := $(LIBAWT_HEADLESS_LDFLAGS_SUFFIX),\ - LDFLAGS_SUFFIX_posix := $(LIBDL),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libawt_headless,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX) - -endif -endif - -########################################################################################## - -ifneq ($(PLATFORM), windows) -ifndef BUILD_HEADLESS_ONLY - -LIBAWT_XAWT_DIRS := \ - $(JDK_TOPDIR)/src/share/native/sun/awt/debug \ - $(JDK_TOPDIR)/src/share/native/sun/awt/utility \ - $(JDK_TOPDIR)/src/share/native/sun/font \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/font \ - $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/x11 \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/xawt \ - -LIBAWT_XAWT_CFLAGS := -DXAWT -DXAWT_HACK \ - -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \ - $(CUPS_CFLAGS) \ - $(foreach dir,$(LIBAWT_XAWT_DIRS),-I$(dir)) \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/jdga - -ifeq ($(PLATFORM),solaris) - LIBAWT_XAWT_CFLAGS += -DFUNCPROTO=15 -endif - -ifeq ($(MILESTONE),internal) - LIBAWT_XAWT_CFLAGS += -DINTERNAL_BUILD -endif - -LIBAWT_XAWT_FILES := \ - XlibWrapper.c \ - XWindow.c \ - XToolkit.c \ - X11Color.c \ - X11SurfaceData.c \ - awt_GraphicsEnv.c \ - awt_InputMethod.c \ - robot_common.c \ - awt_Robot.c \ - list.c \ - multiVis.c \ - initIDs.c \ - awt_util.c \ - awt_Desktop.c \ - awt_UNIXToolkit.c \ - X11FontScaler_md.c \ - X11TextRenderer_md.c \ - fontpath.c \ - awt_Insets.c \ - awt_Event.c \ - X11Renderer.c \ - X11PMBlitLoops.c \ - OGLBlitLoops.c \ - OGLBufImgOps.c \ - OGLContext.c \ - OGLFuncs.c \ - OGLMaskBlit.c \ - OGLMaskFill.c \ - OGLPaints.c \ - OGLRenderQueue.c \ - OGLRenderer.c \ - OGLSurfaceData.c \ - OGLTextRenderer.c \ - OGLVertexCache.c \ - GLXGraphicsConfig.c \ - GLXSurfaceData.c \ - AccelGlyphCache.c \ - awt_Font.c \ - multi_font.c \ - awt_AWTEvent.c \ - awt_DrawingSurface.c \ - jawt.c \ - CUPSfuncs.c \ - debug_assert.c \ - debug_mem.c \ - debug_trace.c \ - debug_util.c \ - awt_Plugin.c \ - gtk2_interface.c \ - swing_GTKEngine.c \ - swing_GTKStyle.c \ - rect.c \ - sun_awt_X11_GtkFileDialogPeer.c \ - XRSurfaceData.c \ - XRBackendNative.c - -LIBAWT_XAWT_LDFLAGS_SUFFIX := $(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi -ljava -lverify -ljvm -lc - -ifeq ($(PLATFORM), linux) - LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread -endif - -ifeq ($(PLATFORM), macosx) - LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_XAWT,\ - SRC:=$(LIBAWT_XAWT_DIRS),\ - INCLUDE_FILES := $(LIBAWT_XAWT_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) $(LIBAWT_XAWT_CFLAGS) \ - $(X_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libawt_xawt/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN) \ - $(X_LIBS),\ - LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -L$(OPENWIN_LIB)$(ISA_DIR) \ - -R$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR) \ - -R/usr/dt/lib$(ISA_DIR),\ - LDFLAGS_SUFFIX := $(LIBAWT_XAWT_LDFLAGS_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libawt_xawt,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) - -endif -endif - -########################################################################################## - -ifndef BUILD_HEADLESS_ONLY -LIBSPLASHSCREEN_DIRS := \ - $(JDK_TOPDIR)/src/share/native/sun/awt/giflib \ - $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg \ - $(JDK_TOPDIR)/src/share/native/sun/awt/libpng \ - $(JDK_TOPDIR)/src/share/native/sun/awt/splashscreen \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt/splashscreen - -LIBSPLASHSCREEN_CFLAGS := -DSPLASHSCREEN -DPNG_NO_MMX_CODE \ - $(foreach dir,$(LIBSPLASHSCREEN_DIRS),-I$(dir)) - -ifeq ($(PLATFORM), macosx) - LIBSPLASHSCREEN_CFLAGS := -I$(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen \ - $(LIBSPLASHSCREEN_CFLAGS) \ - -F/System/Library/Frameworks/JavaVM.framework/Frameworks - LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX - LIBSPLASHSCREEN_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp - - LIBSPLASHSCREEN_java_awt_SplashScreen.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_gfx_impl.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_gif.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_impl.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_jpeg.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_png.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_sys.m_CFLAGS := -O0 - -else ifneq ($(PLATFORM), windows) - LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions -else - LIBSPLASHSCREEN_CFLAGS += -DWITH_WIN32 -endif - -LIBSPLASHSCREEN_FILES := \ - java_awt_SplashScreen.c \ - splashscreen_gfx_impl.c \ - splashscreen_gif.c \ - splashscreen_impl.c \ - splashscreen_jpeg.c \ - splashscreen_png.c \ - png.c \ - pngerror.c \ - pngget.c \ - pngmem.c \ - pngpread.c \ - pngread.c \ - pngrio.c \ - pngrtran.c \ - pngrutil.c \ - pngset.c \ - pngtrans.c \ - pngwio.c \ - pngwrite.c \ - pngwtran.c \ - pngwutil.c \ - dgif_lib.c \ - gif_err.c \ - gifalloc.c \ - jcomapi.c \ - jdapimin.c \ - jdapistd.c \ - jdcoefct.c \ - jdcolor.c \ - jddctmgr.c \ - jdhuff.c \ - jdinput.c \ - jdmainct.c \ - jdmarker.c \ - jdmaster.c \ - jdmerge.c \ - jdphuff.c \ - jdpostct.c \ - jdsample.c \ - jerror.c \ - jidctflt.c \ - jidctfst.c \ - jidctint.c \ - jidctred.c \ - jmemmgr.c \ - jmemnobs.c \ - jquant1.c \ - jquant2.c \ - jutils.c \ - jcapimin.c \ - jcapistd.c \ - jccoefct.c \ - jccolor.c \ - jcdctmgr.c \ - jchuff.c \ - jcinit.c \ - jcmainct.c \ - jcmarker.c \ - jcmaster.c \ - jcparam.c \ - jcphuff.c \ - jcprepct.c \ - jcsample.c \ - jctrans.c \ - jdtrans.c \ - jfdctflt.c \ - jfdctfst.c \ - jfdctint.c - -ifneq ($(PLATFORM), macosx) -LIBSPLASHSCREEN_FILES += splashscreen_sys.c -else -LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen -LIBSPLASHSCREEN_FILES += splashscreen_sys.m -endif - -LIBSPLASHSCREEN_LDFLAGS_SUFFIX := - -ifneq ($(USE_EXTERNAL_LIBZ),true) - LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 - LIBSPLASHSCREEN_CFLAGS += $(LIBZ_INCLUDE) - LIBSPLASHSCREEN_FILES += \ - compress.c \ - deflate.c \ - gzclose.c \ - gzlib.c \ - gzread.c \ - gzwrite.c \ - infback.c \ - inffast.c \ - inflate.c \ - inftrees.c \ - trees.c \ - uncompr.c \ - zadler32.c \ - zcrc32.c \ - zutil.c -endif - -ifeq ($(PLATFORM), macosx) - LIBSPLASHSCREEN_LDFLAGS_SUFFIX += $(LIBM) -lpthread -liconv -losxapp \ - -framework ApplicationServices \ - -framework Foundation \ - -framework Cocoa \ - -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ - -framework JavaNativeFoundation -else ifneq ($(PLATFORM), windows) - LIBSPLASHSCREEN_LDFLAGS_SUFFIX += -L$(OPENWIN_LIB)$(ISA_DIR) -lX11 -lXext $(LIBM) -lpthread $(LIBDL) -else # PLATFORM - LIBSPLASHSCREEN_LDFLAGS_SUFFIX += kernel32.lib user32.lib gdi32.lib delayimp.lib /DELAYLOAD:user32.dll -endif # PLATFORM - -$(eval $(call SetupNativeCompilation,LIBSPLASHSCREEN,\ - SRC:=$(LIBSPLASHSCREEN_DIRS),\ - INCLUDE_FILES := $(LIBSPLASHSCREEN_FILES),\ - LANG:=C,\ - CFLAGS:= $(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libsplashscreen/mapfile-vers, \ - LDFLAGS:= $(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := $(LIBSPLASHSCREEN_LDFLAGS_SUFFIX) $(LIBZ),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libsplashscreen,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)splashscreen$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)splashscreen$(SHARED_LIBRARY_SUFFIX) - -ifeq ($(PLATFORM),macosx) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)splashscreen$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) -endif - -endif - -########################################################################################## - -LIBAWT_DIRS := \ +LIBAWT_DIRS:=\ $(JDK_TOPDIR)/src/share/native/sun/awt \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ $(JDK_TOPDIR)/src/share/native/sun/awt/image \ $(JDK_TOPDIR)/src/share/native/sun/awt/image/gif \ $(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ @@ -2110,23 +437,24 @@ LIBAWT_DIRS := \ $(JDK_TOPDIR)/src/share/native/sun/awt/debug \ $(JDK_TOPDIR)/src/share/native/sun/awt/utility \ $(JDK_TOPDIR)/src/share/native/sun/java2d \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ $(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ $(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ $(JDK_TOPDIR)/src/share/native/sun/awt/image \ $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/x11 \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/x11 \ $(JDK_TOPDIR)/src/share/native/sun/font \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/windows \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/d3d + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/windows \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/d3d -LIBAWT_CFLAGS := -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES \ +LIBAWT_CFLAGS:=-D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES \ + $(X_CFLAGS) \ $(foreach dir,$(LIBAWT_DIRS),-I$(dir)) -LIBAWT_FILES := \ +LIBAWT_FILES:=\ gifdecoder.c \ imageInitIDs.c \ img_globals.c \ @@ -2196,40 +524,89 @@ LIBAWT_FILES := \ debug_trace.c \ debug_util.c -ifneq (,$(filter $(PLATFORM), solaris linux)) +ifneq (,$(filter $(OPENJDK_TARGET_OS), solaris linux macosx)) LIBAWT_FILES += awt_LoadLibrary.c initIDs.c img_colors.c endif -ifeq ($(PLATFORM),macosx) +ifeq ($(OPENJDK_TARGET_OS),macosx) LIBAWT_DIRS += $(JDK_TOPDIR)/src/macosx/native/com/apple/resources LIBAWT_FILES += awt_LoadLibrary.c MacOSXResourceBundle.m LIBAWT_CFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks - LIBAWT_MacOSXResourceBundle.m_CFLAGS := -O0 + LIBAWT_MacOSXResourceBundle.m_CFLAGS:=-O0 endif -ifeq ($(PLATFORM)-$(ARCH_FAMILY), solaris-sparc) -# -# TODO... -# +ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc) + LIBAWT_CFLAGS += -DMLIB_ADD_SUFF + LIBAWT_CFLAGS += -xarch=sparcvis + LIBAWT_CFLAGS += $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il + LIBAWT_CFLAGS += \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/java2d/medialib \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/java2d/loops -# FILES_c += $(FILES_2D_vis) -# ASFLAGS += -P -# FILES_s += mlib_v_ImageCopy_blk.s -# INLINE_VIS = $(PLATFORM_SRC)/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il -# CFLAGS_sparcv9 = -DMLIB_OS64BIT -# CFLAGS += $(CFLAGS_$(ARCH)) -DMLIB_ADD_SUFF $(INLINE_VIS) + LIBAWT_DIRS += $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib \ + $(JDK_TOPDIR)/src/solaris/native/sun/java2d/loops + + LIBAWT_FILES += \ + vis_FuncArray.c \ + java2d_Mlib.c \ + mlib_ImageCreate.c \ + mlib_ImageZoom_NN.c \ + mlib_ImageCopy_Bit.c \ + mlib_sys.c \ + mlib_v_ImageClear.c \ + mlib_v_ImageClear_f.c \ + mlib_v_ImageConstXor.c \ + mlib_v_ImageCopy.c \ + mlib_v_ImageCopy_f.c \ + mlib_v_ImageXor.c \ + mlib_v_ImageZoom_NN_f.c \ + vis_Interp.c \ + vis_AlphaMacros.c \ + vis_AlphaMaskBlit.c \ + vis_AlphaMaskFill.c \ + vis_ByteGray.c \ + vis_ByteGray_FromRgb.c \ + vis_ByteGray_Mask.c \ + vis_ByteIndexed.c \ + vis_DrawLine.c \ + vis_FourByteAbgr.c \ + vis_IntArgb.c \ + vis_IntArgbPre.c \ + vis_IntArgbPre_Mask.c \ + vis_IntBgr.c \ + vis_IntRgb.c \ + vis_IntRgbx.c \ + vis_SrcMaskFill.c \ + vis_SrcOverMaskBlit.c \ + vis_SrcOverMaskFill.c \ + vis_FourByteAbgrPre.c \ + vis_GlyphList.c \ + vis_GlyphListXor.c \ + vis_IntArgbBm.c \ + vis_ThreeByteBgr.c \ + vis_UshortGray.c \ + vis_UshortGray_FromRgb.c \ + vis_XorBlit.c \ + mlib_v_ImageCopy_blk.s + + ifeq ($(OPENJDK_TARGET_CPU_BITS),64) + LIBAWT_ASFLAGS=-P -xarch=v9a + else + LIBAWT_ASFLAGS=-P -xarch=v8plusa + endif else LIBAWT_FILES += MapAccelFunc.c endif -ifneq ($(PLATFORM),solaris) +ifneq ($(OPENJDK_TARGET_OS),solaris) LIBAWT_CFLAGS += -DMLIB_NO_LIBSUNMATH endif -LIBAWT_LANG := C +LIBAWT_LANG:=C -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) LIBAWT_FILES += AccelGlyphCache.c \ ShaderList.c \ CmdIDList.cpp \ @@ -2266,219 +643,2012 @@ ifeq ($(PLATFORM),windows) initIDs.cpp \ MouseInfo.cpp \ rect.c - LIBAWT_LANG := C++ + LIBAWT_LANG:=C++ LIBAWT_CFLAGS += $(GX_OPTION) -DUNICODE -D_UNICODE ifeq ($(ARCH_DATA_MODEL), 64) LIBAWT_CFLAGS += -DMLIB_OS64BIT endif ifdef OPENJDK - LIBAWT_RC_FLAGS := -i "$(JDK_TOPDIR)/src/windows/resource/icons" + LIBAWT_RC_FLAGS:=-i "$(JDK_TOPDIR)/src/windows/resource/icons" else - LIBAWT_RC_FLAGS := -i "$(JDK_TOPDIR)/src/closed/windows/native/sun/windows" + LIBAWT_RC_FLAGS:=-i "$(JDK_TOPDIR)/src/closed/windows/native/sun/windows" endif - LIBAWT_VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/native/sun/windows/awt.rc + LIBAWT_VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/native/sun/windows/awt.rc endif ifeq ($(MILESTONE), internal) LIBAWT_CFLAGS += -DINTERNAL_BUILD endif -LIBAWT_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libawt/mapfile-vers -ifeq ($(PLATFORM),linux) - LIBAWT_MAPFILE := +LIBAWT_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt/mapfile-vers +ifeq ($(OPENJDK_TARGET_OS),linux) + LIBAWT_MAPFILE:= endif $(eval $(call SetupNativeCompilation,BUILD_LIBAWT,\ + LIBRARY:=awt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBAWT_DIRS),\ - INCLUDE_FILES := $(LIBAWT_FILES),\ + INCLUDE_FILES:=$(LIBAWT_FILES),\ LANG:=$(LIBAWT_LANG),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) $(LIBAWT_CFLAGS),\ - MAPFILE := $(LIBAWT_MAPFILE), \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_CFLAGS),\ + ASFLAGS:=$(LIBAWT_ASFLAGS),\ + MAPFILE:=$(LIBAWT_MAPFILE), \ LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_windows:=advapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib \ imm32.lib ole32.lib uuid.lib shell32.lib \ comdlg32.lib winmm.lib comctl32.lib \ - shlwapi.lib delayimp.lib java.lib jvm.lib \ + shlwapi.lib delayimp.lib $(WIN_JAVA_LIB) jvm.lib \ /DELAYLOAD:user32.dll /DELAYLOAD:gdi32.dll \ /DELAYLOAD:shell32.dll /DELAYLOAD:winmm.dll \ /DELAYLOAD:winspool.drv /DELAYLOAD:imm32.dll \ /DELAYLOAD:ole32.dll /DELAYLOAD:comdlg32.dll \ /DELAYLOAD:comctl32.dll /DELAYLOAD:shlwapi.dll,\ - LDFLAGS_macosx :=-framework Cocoa \ + LDFLAGS_macosx:=-lmlib_image \ + -framework Cocoa \ -framework OpenGL \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -framework JavaNativeFoundation \ -framework JavaRuntimeSupport \ -framework ApplicationServices \ -framework AudioToolbox,\ - LDFLAGS_solaris := -R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR),\ - LDFLAGS_SUFFIX_posix := -ljvm $(LIBM) -ljava $(LIBDL),\ - VERSIONINFO_RESOURCE := $(LIBAWT_VERSIONINFO_RESOURCE),\ - RC_FLAGS := $(RC_FLAGS) $(LIBAWT_RC_FLAGS) \ + LDFLAGS_solaris:=-R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR),\ + LDFLAGS_SUFFIX_posix:=-ljvm $(LIBM) -ljava $(LIBDL),\ + VERSIONINFO_RESOURCE:=$(LIBAWT_VERSIONINFO_RESOURCE),\ + RC_FLAGS:=$(RC_FLAGS) $(LIBAWT_RC_FLAGS) \ /D "JDK_FNAME=awt.dll" \ /D "JDK_INTERNAL_NAME=awt" \ /D "JDK_FTYPE=0x2L",\ - BIN:=$(JDK_OUTPUTDIR)/objs/libawt,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAWT) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) +ifeq ($(OPENJDK_TARGET_OS), macosx) +$(BUILD_LIBAWT) : $(BUILD_LIBMLIB_IMAGE) +endif + +BUILD_LIBRARIES += $(BUILD_LIBAWT) + +########################################################################################## + +# TODO!! +# Even though this variable as a general name, it is +# only used on macos, in fontpath.c, as prefix for where to find fonts. +# +# It's used for libawt_headless _and_ libawt_xawt +# +X11_PATH:=/usr/X11R6 + +ifneq ($(OPENJDK_TARGET_OS), windows) +ifndef BUILD_HEADLESS_ONLY + +LIBAWT_XAWT_DIRS:=\ + $(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + $(JDK_TOPDIR)/src/share/native/sun/awt/utility \ + $(JDK_TOPDIR)/src/share/native/sun/font \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/font \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/x11 \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/xawt \ + +LIBAWT_XAWT_CFLAGS:=-DXAWT -DXAWT_HACK \ + -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \ + $(CUPS_CFLAGS) \ + $(foreach dir,$(LIBAWT_XAWT_DIRS),-I$(dir)) \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/jdga + +ifeq ($(OPENJDK_TARGET_OS),solaris) + LIBAWT_XAWT_CFLAGS += -DFUNCPROTO=15 +endif + +ifeq ($(MILESTONE),internal) + LIBAWT_XAWT_CFLAGS += -DINTERNAL_BUILD +endif + +LIBAWT_XAWT_FILES:=\ + XlibWrapper.c \ + XWindow.c \ + XToolkit.c \ + X11Color.c \ + X11SurfaceData.c \ + awt_GraphicsEnv.c \ + awt_InputMethod.c \ + robot_common.c \ + awt_Robot.c \ + list.c \ + multiVis.c \ + initIDs.c \ + awt_util.c \ + awt_Desktop.c \ + awt_UNIXToolkit.c \ + X11FontScaler_md.c \ + X11TextRenderer_md.c \ + fontpath.c \ + awt_Insets.c \ + awt_Event.c \ + X11Renderer.c \ + X11PMBlitLoops.c \ + OGLBlitLoops.c \ + OGLBufImgOps.c \ + OGLContext.c \ + OGLFuncs.c \ + OGLMaskBlit.c \ + OGLMaskFill.c \ + OGLPaints.c \ + OGLRenderQueue.c \ + OGLRenderer.c \ + OGLSurfaceData.c \ + OGLTextRenderer.c \ + OGLVertexCache.c \ + GLXGraphicsConfig.c \ + GLXSurfaceData.c \ + AccelGlyphCache.c \ + awt_Font.c \ + multi_font.c \ + awt_AWTEvent.c \ + awt_DrawingSurface.c \ + jawt.c \ + CUPSfuncs.c \ + debug_assert.c \ + debug_mem.c \ + debug_trace.c \ + debug_util.c \ + awt_Plugin.c \ + gtk2_interface.c \ + swing_GTKEngine.c \ + swing_GTKStyle.c \ + rect.c \ + sun_awt_X11_GtkFileDialogPeer.c \ + XRSurfaceData.c \ + XRBackendNative.c + +LIBAWT_XAWT_LDFLAGS_SUFFIX:=$(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi -ljava -ljvm -lc + +ifeq ($(OPENJDK_TARGET_OS), linux) + LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_XAWT,\ + LIBRARY:=awt_xawt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBAWT_XAWT_DIRS),\ + INCLUDE_FILES:=$(LIBAWT_XAWT_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_XAWT_CFLAGS) \ + $(X_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_xawt/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN) \ + $(X_LIBS),\ + LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -L$(OPENWIN_HOME)/lib$(ISA_DIR) \ + -R$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -R$(OPENWIN_HOME)/lib$(ISA_DIR) \ + -R/usr/dt/lib$(ISA_DIR),\ + LDFLAGS_SUFFIX:=$(LIBAWT_XAWT_LDFLAGS_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_xawt)) + +$(BUILD_LIBAWT_XAWT) : $(BUILD_LIBJAVA) + +$(BUILD_LIBAWT_XAWT) : $(BUILD_LIBAWT) + +BUILD_LIBRARIES += $(BUILD_LIBAWT_XAWT) + +endif +endif + +########################################################################################## + +BUILD_LIBZIP_FILES:=\ + CRC32.c \ + Adler32.c \ + Deflater.c \ + Inflater.c \ + ZipFile.c \ + zip_util.c + +ifeq ($(USE_EXTERNAL_LIBZ),true) + LIBZ:=-lz +else +BUILD_LIBZIP_FILES += \ + compress.c \ + deflate.c \ + gzclose.c \ + gzlib.c \ + gzread.c \ + gzwrite.c \ + infback.c \ + inffast.c \ + inflate.c \ + inftrees.c \ + trees.c \ + uncompr.c \ + zadler32.c \ + zcrc32.c \ + zutil.c +LIBZ_INCLUDE:=-I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 +endif + +BUILD_LIBZIP_REORDER:= +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + BUILD_LIBZIP_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libzip/reorder-$(ARCH) + endif +endif + +ifeq ($(LIBZIP_CAN_USE_MMAP), true) + BUILD_LIBZIP_MMAP:=-DUSE_MMAP +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBZIP,\ + LIBRARY:=zip,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/java/util/zip \ + $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5,\ + INCLUDE_FILES:=$(BUILD_LIBZIP_FILES), \ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBZ_INCLUDE) \ + -I$(JDK_TOPDIR)/src/share/native/java/io \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/io,\ + CFLAGS_posix:=$(BUILD_LIBZIP_MMAP) -UDEBUG,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libzip/mapfile-vers, \ + REORDER:=$(BUILD_LIBZIP_REORDER), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(EXPORT_ZIP_FUNCS), \ + LDFLAGS_winapi:=-export:ZIP_Open -export:ZIP_Close -export:ZIP_FindEntry \ + -export:ZIP_ReadEntry -export:ZIP_GetNextEntry jvm.lib \ + $(WIN_JAVA_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBZ),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libzip)) + +$(BUILD_LIBZIP) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBZIP) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBUNPACK,\ + LIBRARY:=unpack, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack,\ + EXCLUDE_FILES:=main.cpp,\ + LANG:=C++,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CXXFLAGS_JDKLIB) \ + -DNO_ZLIB -DUNPACK_JNI -DFULL,\ + CFLAGS_release:=-DPRODUCT,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libunpack/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_winapi:=-map:$(JDK_OUTPUTDIR)/objs/unpack.map /debug \ + jvm.lib $(WIN_JAVA_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_posix:=$(LIBCXX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libunpack,\ + VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\ + RC_FLAGS:=$(RC_FLAGS)\ + /D "JDK_FNAME=unpack.dll" \ + /D "JDK_INTERNAL_NAME=unpack" \ + /D "JDK_FTYPE=0x2L")) + +$(BUILD_LIBUNPACK) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBUNPACK) + +ifeq ($(OPENJDK_TARGET_OS_API),winapi) + $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.map: $(BUILD_LIBUNPACK) + $(ECHO) Copying $(@F) + $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.map,$<) $@ + + $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.pdb: $(BUILD_LIBUNPACK) + $(ECHO) Copying $(@F) + $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.pdb,$<) $@ +endif + +########################################################################################## + +LIBATTACH_EXCLUDE_FILES:= +ifneq ($(OPENJDK_TARGET_OS),solaris) + LIBATTACH_EXCLUDE_FILES+=SolarisVirtualMachine.c +endif +ifneq ($(OPENJDK_TARGET_OS),linux) + LIBATTACH_EXCLUDE_FILES+=LinuxVirtualMachine.c +endif +ifneq ($(OPENJDK_TARGET_OS),macosx) + LIBATTACH_EXCLUDE_FILES+=BsdVirtualMachine.c +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBATTACH,\ + LIBRARY:=attach, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/tools/attach,\ + EXCLUDE_FILES:=$(LIBATTACH_EXCLUDE_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libattach/mapfile-$(OPENJDK_TARGET_OS), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_solaris:=-ldoor,\ + LDFLAGS_winapi:=psapi.lib advapi32.lib $(WIN_JAVA_LIB) jvm.lib,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libattach,\ + DEBUG_SYMBOLS:=true)) + +$(BUILD_LIBATTACH) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBATTACH) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBDT_SOCKET,\ + LIBRARY:=dt_socket,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/transport/socket \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/socket,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP \ + -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(OPENJDK_TARGET_OS) \ + -I$(JDK_TOPDIR)/src/share/transport/socket \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/socket \ + -I$(JDK_TOPDIR)/src/share/back/export \ + -I$(JDK_TOPDIR)/src/share/back,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libdt_socket/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB), \ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX) -lpthread,\ + LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket,\ + LDFLAGS_SUFFIX_winapi:=$(LDFLAGS_JDKLIB_SUFFIX) -export:jdwpTransport_OnLoad ws2_32.lib,\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdt_socket,\ + DEBUG_SYMBOLS:=true)) + +$(BUILD_LIBDT_SOCKET) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBDT_SOCKET) + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS_API),winapi) + + $(eval $(call SetupNativeCompilation,BUILD_LIBDT_SHMEM,\ + LIBRARY:=dt_shmem,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/tools/jdi \ + $(JDK_TOPDIR)/src/share/transport/shmem \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/shmem,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP\ + -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(OPENJDK_TARGET_OS) \ + -I$(JDK_TOPDIR)/src/share/transport/shmem \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/shmem \ + -I$(JDK_TOPDIR)/src/share/back/export, \ + LDFLAGS:=$(LDFLAGS_JDKLIB),\ + LDFLAGS_winapi:=-export:jdwpTransport_OnLoad,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdt_shmem)) + + BUILD_LIBRARIES += $(BUILD_LIBDT_SHMEM) + +endif # OPENJDK_TARGET_OS + +########################################################################################## +# JDWP_LOGGING causes log messages to be compiled into the library. These reference the +# __FILE__ macro which here expands to the absolute path of the file while the old build +# system used a relative path. This causes the binaries to differ in size. +$(eval $(call SetupNativeCompilation,BUILD_LIBJDWP,\ + LIBRARY:=jdwp, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/back $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/back,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) -DJDWP_LOGGING\ + -I$(JDK_TOPDIR)/src/share/transport/export \ + -I$(JDK_TOPDIR)/src/share/back/export \ + -I$(JDK_TOPDIR)/src/share/npt \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt \ + -I$(JDK_TOPDIR)/src/share/back \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/back \ + -I$(JDK_OUTPUTDIR)/gensrc_jdwp_headers,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjdwp/mapfile-vers, \ + LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)), \ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ + LDFLAGS_SUFFIX_solaris:=$(LIBDL),\ + LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjdwp)) + +$(BUILD_LIBJDWP) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJDWP) + +########################################################################################## + +LIBJAAS_MAPFILE:= +ifneq ($(OPENJDK_TARGET_OS),solaris) + LIBJAAS_EXCLUDE_FILES:=Solaris.c +else + # only on solaris...wonder why + LIBJAAS_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjaas/mapfile-vers +endif + +LIBJAAS_NAME:=jaas_unix +ifeq ($(OPENJDK_TARGET_OS), windows) + LIBJAAS_NAME:=jaas_nt +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJAAS,\ + LIBRARY:=$(LIBJAAS_NAME),\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/com/sun/security/auth/module,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + MAPFILE:=$(LIBJAAS_MAPFILE),\ + LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_winapi:=netapi32.lib user32.lib mpr.lib advapi32.lib,\ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX:=,\ + EXCLUDE_FILES:=$(LIBJAAS_EXCLUDE_FILES),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjaas)) + +$(BUILD_LIBJAAS) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJAAS) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBJSDT,\ + LIBRARY:=jsdt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/tracing/dtrace,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB)\ + -I$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsdt/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ + LDFLAGS_SUFFIX_winapi:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ + LDFLAGS_SUFFIX_macosx:= $(LIBDL),\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsdt, \ + DEBUG_SYMBOLS:= yes)) + +$(BUILD_LIBJSDT) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJSDT) + +########################################################################################## + +ifdef OPENJDK + # TODO: Update awt lib path when awt is converted + $(eval $(call SetupNativeCompilation,BUILD_LIBLCMS,\ + LIBRARY:=lcms,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/java2d/cmm/lcms \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/,\ + INCLUDE_FILES:=cmscam02.c cmscgats.c cmscnvrt.c cmserr.c \ + cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c \ + cmsio1.c cmslut.c cmsmd5.c cmsmtrx.c \ + cmsnamed.c cmsopt.c cmspack.c cmspcs.c \ + cmsplugin.c cmsps2.c cmssamp.c cmssm.c \ + cmstypes.c cmsvirt.c cmswtpnt.c cmsxform.c \ + LCMS.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(filter-out -xc99=%none,$(CFLAGS_JDKLIB)) \ + $(SHARED_LIBRARY_FLAGS) \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug,\ + CFLAGS_solaris:=-xc99=no_lib,\ + CFLAGS_winapi:=-DCMS_IS_WINDOWS_,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/liblcms/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB), \ + LDFLAGS_solaris:=/usr/lib$(ISA_DIR)/libm.so.2,\ + LDFLAGS_winapi:=$(WIN_AWT_LIB) $(WIN_JAVA_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_posix:=-lawt,\ + LDFLAGS_SUFFIX_linux:=-lm,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/liblcms)) + + BUILD_LIBRARIES += $(BUILD_LIBLCMS) + + $(BUILD_LIBLCMS) : $(BUILD_LIBAWT) +endif + +########################################################################################## + +ifdef OPENJDK + BUILD_LIBJPEG_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers +else + BUILD_LIBJPEG_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers-closed + BUILD_LIBJPEG_CLOSED_SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/awt/image/jpeg + BUILD_LIBJPEG_CLOSED_INCLUDES:=-I$(BUILD_LIBJPEG_CLOSED_SRC) +endif + +BUILD_LIBJPEG_REORDER:= +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + BUILD_LIBJPEG_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/reorder-$(ARCH) + endif +endif + +# Suppress gcc warnings like "variable might be clobbered by 'longjmp' +# or 'vfork'": this warning indicates that some variable is placed to +# a register by optimized compiler and it's value might be lost on longjmp(). +# Recommended way to avoid such warning is to declare the variable as +# volatile to prevent the optimization. However, this approach does not +# work because we have to declare all variables as volatile in result. +#ifndef CROSS_COMPILE_ARCH +# CC_43_OR_NEWER:=\ +# $(shell $(EXPR) $(CC_MAJORVER) \> 4 \| \ +# \( $(CC_MAJORVER) = 4 \& $(CC_MINORVER) \>= 3 \) ) +# ifeq ($(CC_43_OR_NEWER),1) +# BUILD_LIBJPEG_CFLAGS_linux += -Wno-clobbered +# endif +#endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJPEG,\ + LIBRARY:=jpeg, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBJPEG_CLOSED_SRC) \ + $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\ + LANG:=C,\ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBJPEG_CLOSED_INCLUDES) \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\ + MAPFILE:=$(BUILD_LIBJPEG_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_linux:=$(LIBDL),\ + LDFLAGS_winapi:=$(WIN_JAVA_LIB) jvm.lib,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + REORDER:=$(BUILD_LIBJPEG_REORDER),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjpeg)) + +$(BUILD_LIBJPEG) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJPEG) + +########################################################################################## + +ifndef OPENJDK + FONT_HEADERS:=-I$(CLOSED_SRC)/share/native/$(PKGDIR)/t2k + BUILD_LIBFONTMANAGER_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers + LIBFONTMANAGER_EXCLUDE_FILES += freetypeScaler.c +else + FONT_HEADERS:=$(FREETYPE2_CFLAGS) + BUILD_LIBFONTMANAGER_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers.openjdk + BUILD_LIBFONTMANAGER_FONTLIB:=$(FREETYPE2_LIBS) +endif + +LIBFONTMANAGER_OPTIMIZATION:=HIGH + +ifeq ($(OPENJDK_TARGET_OS),windows) + LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \ + X11TextRenderer.c + LIBFONTMANAGER_OPTIMIZATION:=LOW +else + LIBFONTMANAGER_EXCLUDE_FILES += fontpath.c \ + lcdglyph.c +endif + +BUILD_LIBFONTMANAGER_CFLAGS_COMMON:=\ + $(X_CFLAGS) \ + -DLE_STANDALONE -DHEADLESS \ + $(FONT_HEADERS) \ + -I$(JDK_TOPDIR)/src/share/native/sun/font \ + -I$(JDK_TOPDIR)/src/share/native/sun/font/layout \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d + +# Turn off aliasing with GCC for ExtensionSubtables.cpp +ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_LIBFONTMANAGER_ExtensionSubtables.cpp_CXXFLAGS:=-fno-strict-aliasing +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER,\ + LIBRARY:=fontmanager, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/font\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/font,\ + EXCLUDE_FILES:=$(LIBFONTMANAGER_EXCLUDE_FILES) \ + AccelGlyphCache.c,\ + LANG:=C++,\ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\ + CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\ + OPTIMIZATION:=$(LIBFONTMANAGER_OPTIMIZATION), \ + CFLAGS_windows= -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows \ + -DCC_NOEX, \ + MAPFILE:=$(BUILD_LIBFONTMANAGER_MAPFILE), \ + LDFLAGS:=$(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=advapi32.lib user32.lib gdi32.lib $(WIN_AWT_LIB) $(WIN_JAVA_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) \ + $(BUILD_LIBFONTMANAGER_FONTLIB),\ + LDFLAGS_SUFFIX_linux:=-lawt $(LIBM) $(LIBCXX),\ + LDFLAGS_SUFFIX_solaris:=-lawt -lawt_xawt -lc $(LIBM) $(LIBCXX),\ + LDFLAGS_SUFFIX_macosx:=-lawt $(LIBM) $(LIBCXX) -undefined dynamic_lookup,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfontmanager)) + +$(BUILD_LIBFONTMANAGER) : $(BUILD_LIBAWT) + +ifneq (,$(findstring $(OPENJDK_TARGET_OS),solaris macosx)) +$(BUILD_LIBFONTMANAGER) : $(BUILD_LIBAWT_XAWT) +endif + +BUILD_LIBRARIES += $(BUILD_LIBFONTMANAGER) ########################################################################################## ifndef OPENJDK -LIBDCPR_SRC_DIRS := \ +# ifeq ($(OPENJDK_TARGET_OS), linux) +# ifeq ("$(CC_VER_MAJOR)", "3") +# OTHER_LDLIBS += -Wl,-Bstatic -lgcc_eh -Wl,-Bdynamic +# endif +# endif +# +# The resulting size of the t2k lib file is (at least on linux) dependant on the order of +# the input .o files. Because of this the new build will differ in size to the old build. + BUILD_LIBT2K_CFLAGS_COMMON:=-I$(JDK_TOPDIR)/src/share/native/sun/font \ + -I$(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \ + -I$(JDK_TOPDIR)/src/closed/share/native/sun/font \ + -I$(JDK_TOPDIR)/src/share/share/native/sun/font \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/font \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d + + $(eval $(call SetupNativeCompilation,BUILD_LIBT2K,\ + LIBRARY:=t2k, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/font \ + $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \ + $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k/ttHints,\ + EXCLUDE_FILES:=orion.c,\ + LANG:=C++,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON),\ + CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON),\ + CFLAGS_windows=-DCC_NOEX, \ + CXXFLAGS_windows=-DCC_NOEX, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libt2k/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=user32.lib $(JDK_OUTPUTDIR)/objs/libfontmanager/fontmanager.lib,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_macosx:=$(LIBCXX) $(LIBM) -lfontmanager,\ + LDFLAGS_SUFFIX_linux:=$(LIBCXX) $(LIBM) -lfontmanager,\ + LDFLAGS_SUFFIX_solaris:=$(LIBCXX) $(LIBM) -lfontmanager -lawt \ + -lawt_xawt,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libt2k)) + + # t2k is linked against fontmanager + $(BUILD_LIBT2K) : $(BUILD_LIBFONTMANAGER) + + BUILD_LIBRARIES += $(BUILD_LIBT2K) +endif + +########################################################################################## + +# +# TODO replace with X_FLAGS / X_LIBS +# and add them to configure +# +OPENWIN_LIB:=$(OPENWIN_HOME)/lib + +ifeq ($(OPENJDK_TARGET_OS), windows) + ifeq ($(ARCH_DATA_MODEL), 32) + KERNEL32_LIB:=kernel32.lib + endif + $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\ + LIBRARY:=jawt, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows,\ + INCLUDE_FILES:=jawt.cpp,\ + LANG:=C++,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CXXFLAGS_JDKLIB) \ + -EHsc -DUNICODE -D_UNICODE \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/windows, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(KERNEL32_LIB) \ + advapi32.lib $(WIN_AWT_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt)) + +$(BUILD_LIBJAWT) : $(BUILD_LIBAWT) + +$(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX): $(BUILD_LIBJAWT) + $(ECHO) Copying $(@F) + $(CP) $< $@ + +BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX) + +else # OPENJDK_TARGET_OS not windows + + JAWT_LIBS:= + ifneq ($(OPENJDK_TARGET_OS), solaris) + JAWT_LIBS += -lawt + endif + + ifndef BUILD_HEADLESS_ONLY + JAWT_LIBS += -lawt_xawt + else + JAWT_LIBS += -lawt_headless + HEADLESS_CFLAG += -DHEADLESS + endif + + JAWT_FILES:=jawt.c + ifeq ($(OPENJDK_TARGET_OS), macosx) + JAWT_FILES:=jawt.m + JAWT_LIBS:=-lawt_lwawt + endif + + $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\ + LIBRARY:=jawt, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ + $(JDK_TOPDIR)/src/macosx/native/sun/awt,\ + INCLUDE_FILES:=$(JAWT_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB), \ + CFLAGS_linux:=$(HEADLESS_CFLAG),\ + CFLAGS_macosx:=-I$(JDK_TOPDIR)/src/solaris/native/sun/awt ,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjawt/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -L$(OPENWIN_LIB)$(ISA_DIR),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(JAWT_LIBS),\ + LDFLAGS_SUFFIX_solaris:=-lXrender,\ + LDFLAGS_SUFFIX_macosx:=-framework Cocoa, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt)) + +ifndef BUILD_HEADLESS_ONLY +$(BUILD_LIBJAWT) : $(BUILD_LIBAWT_XAWT) +else +$(BUILD_LIBJAWT) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX) +endif + +ifeq ($(OPENJDK_TARGET_OS),macosx) +$(BUILD_LIBJAWT) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) +endif + +endif # OPENJDK_TARGET_OS + +BUILD_LIBRARIES += $(BUILD_LIBJAWT) + +########################################################################################## + +ifndef OPENJDK +ifneq ($(OPENJDK_TARGET_OS), macosx) + +LIBJDBCODBC_DIR :=$(JDK_OUTPUTDIR)/objs/libjdbcodbc +LIBJDBCODBC_NAME :=$(LIBRARY_PREFIX)JdbcOdbc$(SHARED_LIBRARY_SUFFIX) +LIBJDBCODBC_CFLAGS:= +LIBJDBCODBC_LIBS := +LIBJDBCODBC_LDFLAGS:= + +ifeq ($(OPENJDK_TARGET_OS), windows) + LIBJDBCODBC_LDFLAGS:=$(LDFLAGS_JDKLIB) + LIBJDBCODBC_LIBS += odbc32.lib odbccp32.lib $(WIN_JAVA_LIB) advapi32.lib +else + LIBJDBCODBC_CFLAGS:=-DUNIX + +# +# This mimics "current" build system exactly. Link against fake -lodbcinst -lodbc +# but...those are linked with the -soname, causing the dependency to be dropped on linux (gnu ld) +# but kept with other linker (solaris) +# +# IMO very weird behaviour...very weird +# + LIBJDBCODBC_LDFLAGS:=$(patsubst defs,nodefs,$(LDFLAGS_JDKLIB)) \ + -Xlinker -z -Xlinker nodefs + LIBJDBCODBC_LIBS += -L$(LIBJDBCODBC_DIR) -lodbcinst -lodbc + LIBJDBCODBC_SONAME:=$(call SET_SHARED_LIBRARY_NAME,$(LIBJDBCODBC_NAME)) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJDBCODBC,\ + LIBRARY:=JdbcOdbc,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/classes/sun/jdbc/odbc,\ + EXCLUDE_FILES:=dummyodbc.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(LIBJDBCODBC_CFLAGS) $(CFLAGS_JDKLIB) \ + $(SHARED_LIBRARY_FLAGS),\ + LDFLAGS:=$(LIBJDBCODBC_LDFLAGS) \ + $(call SET_SHARED_LIBRARY_ORIGIN) $(LIBJDBCODBC_LIBS),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBJDBCODBC_SONAME),\ + OBJECT_DIR:=$(LIBJDBCODBC_DIR))) + +$(BUILD_LIBJDBCODBC) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJDBCODBC) + +ifneq ($(OPENJDK_TARGET_OS), windows) + +$(eval $(call SetupNativeCompilation,BUILD_FAKEODBCINST,\ + LIBRARY:=odbcinst,\ + OUTPUT_DIR:=$(LIBJDBCODBC_DIR),\ + SRC:=$(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc,\ + INCLUDE_FILES:=dummyodbc1.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN) $(LIBJDBCODBC_LDFLAGS),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBJDBCODBC_SONAME),\ + OBJECT_DIR:=$(LIBJDBCODBC_DIR))) + +$(eval $(call SetupNativeCompilation,BUILD_FAKEODBC,\ + LIBRARY:=odbc,\ + OUTPUT_DIR:=$(LIBJDBCODBC_DIR),\ + SRC:=$(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc,\ + INCLUDE_FILES:=dummyodbc2.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(LIBJDBCODBC_CFLAGS) $(CFLAGS_JDKLIB),\ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN) $(LIBJDBCODBC_LDFLAGS),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBJDBCODBC_SONAME),\ + OBJECT_DIR:=$(LIBJDBCODBC_DIR))) + +$(BUILD_FAKEODBCINST) $(BUILD_FAKEODBC) : \ + $(BUILD_LIBJAVA) + +$(BUILD_LIBJDBCODBC) : $(BUILD_FAKEODBCINST) $(BUILD_FAKEODBC) + +endif + +endif +endif + +########################################################################################## + +BUILD_LIBINSTRUMENT_SRC :=$(JDK_TOPDIR)/src/share/instrument \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/io \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/instrument + +BUILD_LIBINSTRUMENT_FILES :=\ + EncodingSupport.c \ + EncodingSupport_md.c \ + FileSystemSupport_md.c \ + InstrumentationImplNativeMethods.c \ + InvocationAdapter.c \ + JarFacade.c \ + JPLISAgent.c \ + JPLISAssert.c \ + JavaExceptions.c \ + PathCharsValidator.c \ + Reentrancy.c \ + Utilities.c \ + canonicalize_md.c + +BUILD_LIBINSTRUMENT_DIR :=$(JDK_OUTPUTDIR)/objs/libinstrument +BUILD_LIBINSTRUMENT_CFLAGS:=-I$(JDK_TOPDIR)/src/share/instrument \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/instrument \ + -I$(JDK_TOPDIR)/src/share/bin + +BUILD_LIBINSTRUMENT_LDFLAGS:= +BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX:= + +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBINSTRUMENT_LDFLAGS += $(JDK_OUTPUTDIR)/objs/jli_static.lib $(WIN_JAVA_LIB) \ + -export:Agent_OnAttach + # equivalent of strcasecmp is stricmp on Windows + BUILD_LIBINSTRUMENT_CFLAGS += -Dstrcasecmp=stricmp +else ifneq (,$(findstring $(OPENJDK_TARGET_OS), macosx)) + ifneq ($(ARCH), universal) + BUILD_LIBINSTRUMENT_LDFLAGS += -Wl,-all_load + endif + + BUILD_LIBINSTRUMENT_LDFLAGS += $(JDK_OUTPUTDIR)/objs/libjli_static.a + BUILD_LIBINSTRUMENT_LDFLAGS += -liconv + BUILD_LIBINSTRUMENT_LDFLAGS += -framework Cocoa -framework Security -framework ApplicationServices + BUILD_LIBINSTRUMENT_LDFLAGS += $(LIBZ) +else + BUILD_LIBINSTRUMENT_LDFLAGS += -L $(INSTALL_LIBRARIES_HERE)/jli + BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX += -ljli $(LIBDL) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT,\ + LIBRARY:=instrument, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBINSTRUMENT_SRC),\ + INCLUDE_FILES:=$(BUILD_LIBINSTRUMENT_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBINSTRUMENT_CFLAGS),\ + CFLAGS_debug:=-DJPLIS_LOGGING,\ + CFLAGS_release:=-DNO_JPLIS_LOGGING,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libinstrument/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN)\ + $(call SET_SHARED_LIBRARY_ORIGIN,jli) \ + $(BUILD_LIBINSTRUMENT_LDFLAGS),\ + LDFLAGS_SUFFIX:=$(LIBZ) $(BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX),\ + OBJECT_DIR:=$(BUILD_LIBINSTRUMENT_DIR),\ + DEBUG_SYMBOLS:=true)) + +ifneq (,$(findstring $(OPENJDK_TARGET_OS), macosx windows)) +$(BUILD_LIBINSTRUMENT) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX) +else +$(BUILD_LIBINSTRUMENT) : $(INSTALL_LIBRARIES_HERE)/jli/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) +endif +$(BUILD_LIBINSTRUMENT) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBINSTRUMENT) + +########################################################################################## + +BUILD_LIBMANAGEMENT_SRC:=$(JDK_TOPDIR)/src/share/native/sun/management \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/management \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/com/sun/management + +BUILD_LIBMANAGEMENT_EXCLUDES:= + +BUILD_LIBMANAGEMENT_CFLAGS:=-I$(JDK_TOPDIR)/src/share/native/sun/management + +ifneq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBMANAGEMENT_EXCLUDES += OperatingSystem_md.c +else + BUILD_LIBMANAGEMENT_EXCLUDES += UnixOperatingSystem_md.c +endif + +ifneq ($(OPENJDK_TARGET_OS),solaris) + BUILD_LIBMANAGEMENT_EXCLUDES += SolarisOperatingSystem.c +endif + +ifneq ($(OPENJDK_TARGET_OS),linux) + BUILD_LIBMANAGEMENT_EXCLUDES += LinuxOperatingSystem.c +endif + +ifneq ($(OPENJDK_TARGET_OS),macosx) + BUILD_LIBMANAGEMENT_EXCLUDES += MacosxOperatingSystem.c +endif + + +$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT,\ + LIBRARY:=management,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBMANAGEMENT_SRC),\ + EXCLUDE_FILES:=$(BUILD_LIBMANAGEMENT_EXCLUDES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBMANAGEMENT_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libmanagement/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=$(WIN_JAVA_LIB) jvm.lib advapi32.lib psapi.lib,\ + LDFLAGS_solaris:=-lkstat,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmanagement,\ + DEBUG_SYMBOLS:=true)) + +$(BUILD_LIBMANAGEMENT) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBMANAGEMENT) + +########################################################################################## + +BUILD_LIBHPROF_SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/hprof $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/demo/jvmti/hprof +BUILD_LIBHPROF_CFLAGS:=-I$(JDK_TOPDIR)/src/share/demo/jvmti/hprof \ + -I$(JDK_TOPDIR)/src/share/npt \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt \ + -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo + +BUILD_LIBHPROF_LDFLAGS:= + +ifeq ($(OPENJDK_TARGET_OS),solaris) + BUILD_LIBHPROF_LDFLAGS += -lsocket -lnsl +endif + +ifneq ($(OPENJDK_TARGET_OS),windows) + BUILD_LIBHPROF_LDFLAGS += $(LIBDL) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBHPROF,\ + LIBRARY:=hprof, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBHPROF_SRC),\ + LANG:=C,\ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBHPROF_CFLAGS),\ + CFLAGS_debug:=-DHPROF_LOGGING,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libhprof/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=wsock32.lib winmm.lib advapi32.lib,\ + LDFLAGS_SUFFIX:=$(BUILD_LIBHPROF_LDFLAGS),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libhprof_jvmti,\ + DEBUG_SYMBOLS:=true)) + +BUILD_LIBRARIES += $(BUILD_LIBHPROF) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA_CRW_DEMO,\ + LIBRARY:=java_crw_demo, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava_crw_demo/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjava_crw_demo,\ + DEBUG_SYMBOLS:=true)) + +BUILD_LIBRARIES += $(BUILD_LIBJAVA_CRW_DEMO) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBNPT,\ + LIBRARY:=npt, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/npt $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/npt \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnpt/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_macosx:=-liconv,\ + LDFLAGS_SUFFIX_windows:=-export:nptInitialize -export:nptTerminate,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnpt,\ + DEBUG_SYMBOLS:=true)) + +BUILD_LIBRARIES += $(BUILD_LIBNPT) + +########################################################################################## + +LIBNET_SRC_DIRS:=$(JDK_TOPDIR)/src/share/native/java/net \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/net \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/dns \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/www/protocol/http/ntlm \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/sdp \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/spi + +LIBNET_CFLAGS:=$(foreach dir,$(LIBNET_SRC_DIRS),-I$(dir)) + +LIBNET_EXCLUDE_FILES:= +ifneq ($(OPENJDK_TARGET_OS),linux) + LIBNET_EXCLUDE_FILES += linux_close.c +endif + +ifneq ($(OPENJDK_TARGET_OS),macosx) + LIBNET_EXCLUDE_FILES += bsd_close.c +endif + +ifeq ($(OPENJDK_TARGET_OS),windows) + LIBNET_EXCLUDE_FILES += PlainSocketImpl.c PlainDatagramSocketImpl.c SdpSupport.c +else + LIBNET_EXCLUDE_FILES += TwoStacksPlainSocketImpl.c DualStackPlainSocketImpl.c \ + TwoStacksPlainDatagramSocketImpl.c DualStackPlainDatagramSocketImpl.c \ + NTLMAuthSequence.c NetworkInterface_winXP.c +endif + +LIBNET_LDFLAGS_SUFFIX:= + +$(eval $(call SetupNativeCompilation,BUILD_LIBNET,\ + LIBRARY:=net,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBNET_SRC_DIRS),\ + EXCLUDE_FILES:=$(LIBNET_EXCLUDE_FILES), \ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBNET_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnet/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBNET_LDFLAGS_SUFFIX),\ + LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket $(LIBDL) ,\ + LDFLAGS_SUFFIX_linux:=$(LIBDL) -lpthread ,\ + LDFLAGS_SUFFIX_windows:=ws2_32.lib $(JVMLIB) secur32.lib iphlpapi.lib \ + delayimp.lib $(WIN_JAVA_LIB) jvm.lib advapi32.lib \ + /DELAYLOAD:secur32.dll /DELAYLOAD:iphlpapi.dll, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnet)) + +$(BUILD_LIBNET) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBNET) + +$(JDK_OUTPUTDIR)/lib/net.properties: $(JDK_TOPDIR)/src/share/lib/net.properties + $(ECHO) Copying $(@F) + $(MKDIR) -p $(@D) + $(CP) $< $@ + +COPY_FILES += $(JDK_OUTPUTDIR)/lib/net.properties + +ifeq ($(OPENJDK_TARGET_OS), solaris) +$(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template : $(JDK_TOPDIR)/src/${LEGACY_OPENJDK_TARGET_OS_API}/lib/sdp/sdp.conf.template + $(ECHO) Copying $(@F) + $(MKDIR) -p $(@D) + $(CP) $< $@ + +COPY_FILES += $(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template +endif + +########################################################################################## + +BUILD_LIBNIO_SRC:=\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/nio \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/ch \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/fs + +BUILD_LIBNIO_CFLAGS:=\ + -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ + -I$(JDK_TOPDIR)/src/share/native/java/io \ + -I$(JDK_TOPDIR)/src/share/native/java/net \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/net + +BUILD_LIBNIO_FILES:=\ + DatagramChannelImpl.c \ + DatagramDispatcher.c \ + FileChannelImpl.c \ + FileDispatcherImpl.c \ + FileKey.c \ + IOUtil.c \ + MappedByteBuffer.c \ + Net.c \ + ServerSocketChannelImpl.c \ + SocketChannelImpl.c \ + SocketDispatcher.c + +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBNIO_FILES += \ + Iocp.c \ + RegistryFileTypeDetector.c \ + WindowsAsynchronousFileChannelImpl.c \ + WindowsAsynchronousServerSocketChannelImpl.c \ + WindowsAsynchronousSocketChannelImpl.c \ + WindowsNativeDispatcher.c \ + WindowsSelectorImpl.c +endif + +ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-linux + BUILD_LIBNIO_FILES += \ + EPoll.c \ + EPollArrayWrapper.c \ + EPollPort.c \ + InheritedChannel.c \ + NativeThread.c \ + PollArrayWrapper.c \ + UnixAsynchronousServerSocketChannelImpl.c \ + UnixAsynchronousSocketChannelImpl.c \ + GnomeFileTypeDetector.c \ + LinuxNativeDispatcher.c \ + LinuxWatchService.c \ + UnixCopyFile.c \ + UnixNativeDispatcher.c +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-bsd + BUILD_LIBNIO_SRC += $(JDK_TOPDIR)/src/macosx/native/sun/nio/ch + BUILD_LIBNIO_FILES += \ + InheritedChannel.c \ + NativeThread.c \ + PollArrayWrapper.c \ + UnixAsynchronousServerSocketChannelImpl.c \ + UnixAsynchronousSocketChannelImpl.c \ + GnomeFileTypeDetector.c \ + BsdNativeDispatcher.c \ + UnixCopyFile.c \ + UnixNativeDispatcher.c \ + KQueue.c \ + KQueuePort.c \ + KQueueArrayWrapper.c +endif + +ifeq ($(OPENJDK_TARGET_OS), solaris) + BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-solaris + BUILD_LIBNIO_FILES += \ + DevPollArrayWrapper.c \ + InheritedChannel.c \ + NativeThread.c \ + PollArrayWrapper.c \ + SolarisEventPort.c \ + UnixAsynchronousServerSocketChannelImpl.c \ + UnixAsynchronousSocketChannelImpl.c \ + GnomeFileTypeDetector.c \ + SolarisNativeDispatcher.c \ + SolarisWatchService.c \ + UnixCopyFile.c \ + UnixNativeDispatcher.c +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBNIO,\ + LIBRARY:=nio,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBNIO_SRC),\ + INCLUDE_FILES:=$(BUILD_LIBNIO_FILES), \ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBNIO_CFLAGS),\ + MAPFILE:=$(BUILD_LIBNIO_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=-ljava -lnet -lpthread $(LIBDL),\ + LDFLAGS_SUFFIX_solaris:=$(LDFLAGS_JDKLIB_SUFFIX) \ + $(JVMLIB) -lsocket -lposix4 $(LIBDL) -lsendfile \ + -ljava -lnet,\ + LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX) \ + $(WIN_JAVA_LIB) $(JDK_OUTPUTDIR)/objs/libnet/net.lib \ + advapi32.lib jvm.lib ws2_32.lib\ + $(JDK_OUTPUTDIR)/objs/libjava/io_util.obj \ + $(JDK_OUTPUTDIR)/objs/libjava/FileDescriptor_md.obj ,\ + LDFLAGS_SUFFIX_macosx:=-ljava -lnet -pthread,\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnio)) + +BUILD_LIBRARIES += $(BUILD_LIBNIO) + +$(BUILD_LIBNIO) : $(BUILD_LIBNET) + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS_API),posix) + # TODO make this work on macosx + ifneq ($(OPENJDK_TARGET_OS),macosx) + + SCTP_WERROR := -Werror + ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc) + SCTP_WERROR := + endif + + $(eval $(call SetupNativeCompilation,BUILD_LIBSCTP,\ + LIBRARY:=sctp,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/ch/sctp,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB)\ + -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ + -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch/sctp \ + -I$(JDK_TOPDIR)/src/share/native/java/net \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/ch \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/net,\ + CFLAGS_linux:=$(SCTP_WERROR),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsctp/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=$(LIBDL) -lpthread,\ + LDFLAGS_SUFFIX_posix:=-lnio -lnet,\ + LDFLAGS_SUFFIX_solaris:=-lsocket,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + INCLUDE_FILES:=SctpNet.c SctpChannelImpl.c SctpServerChannelImpl.c,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsctp)) + + BUILD_LIBRARIES += $(BUILD_LIBSCTP) + + $(BUILD_LIBSCTP) : $(BUILD_LIBNIO) + endif +endif + +########################################################################################## + +BUILD_LIBJLI_SRC_DIRS:=$(JDK_TOPDIR)/src/share/bin $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin +BUILD_LIBJLI_CFLAGS:=$(foreach dir,$(BUILD_LIBJLI_SRC_DIRS),-I$(dir)) + +BUILD_LIBJLI_FILES:=\ + java.c \ + splashscreen_stubs.c \ + parse_manifest.c \ + version_comp.c \ + wildcard.c \ + jli_util.c + +ifeq ($(JVM_VARIANT_ZERO), true) + ERGO_FAMILY:=zero +else # !ZERO_BUILD + ifneq (,$(findstring $(ARCH), amd64 x86_64)) + ERGO_FAMILY:=i586 + else # !X86 FAMILY + ERGO_FAMILY:=$(ARCH) + endif #ARCH_FAMILY +endif # ZERO_BUILD + +ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBJLI_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/bin + BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/bin + BUILD_LIBJLI_FILES += java_md_common.c java_md_macosx.c + + BUILD_LIBJLI_java_md_macosx.c_CFLAGS:=-x objective-c + BUILD_LIBJLI_STATIC_java_md_macosx.c_CFLAGS:=-x objective-c +endif + +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBJLI_FILES += java_md.c +else ifneq ($(OPENJDK_TARGET_OS), macosx) + + BUILD_LIBJLI_FILES += java_md_common.c + BUILD_LIBJLI_FILES += java_md_solinux.c ergo.c + + ERGO_ARCH_FILE = ergo_$(ERGO_FAMILY).c + + # if the architecture specific ergo file exists then + # use it, else use the generic definitions from ergo.c + ifneq ($(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/$(ERGO_ARCH_FILE)),) + BUILD_LIBJLI_FILES += $(ERGO_ARCH_FILE) + else # !ERGO_ARCH_FILE + BUILD_LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO + endif # ERGO_ARCH_FILE +endif #WINDOWS + +# Names of arch directories +ifneq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBJLI_CFLAGS += -DLIBARCHNAME='"$(LIBARCH)"' +else + BUILD_LIBJLI_CFLAGS += -DLIBARCHNAME='"$(ARCH)"' +endif +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) + BUILD_LIBJLI_CFLAGS += -DLIBARCH32NAME='"sparc"' + BUILD_LIBJLI_CFLAGS += -DLIBARCH64NAME='"sparcv9"' + else + BUILD_LIBJLI_CFLAGS += -DLIBARCH32NAME='"i386"' + BUILD_LIBJLI_CFLAGS += -DLIBARCH64NAME='"amd64"' + endif +endif # OPENJDK_TARGET_OS + +ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBJLI_CFLAGS += -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" +endif + +ifneq ($(USE_EXTERNAL_LIBZ),true) + BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 + BUILD_LIBJLI_CFLAGS += $(LIBZ_INCLUDE) + BUILD_LIBJLI_FILES += \ + inflate.c \ + inftrees.c \ + inffast.c \ + zadler32.c \ + zcrc32.c \ + zutil.c +endif + +ifeq ($(OPENJDK_TARGET_OS), windows) + LIBJLI_OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE) +else + LIBJLI_OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE)/jli +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJLI,\ + LIBRARY:=jli,\ + OUTPUT_DIR:=$(LIBJLI_OUTPUT_DIR),\ + SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ + INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBJLI_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjli/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LIBZ),\ + LDFLAGS_SUFFIX_posix:=$(LIBDL) -lc,\ + LDFLAGS_SUFFIX_linux:=-lpthread,\ + LDFLAGS_SUFFIX_windows:=\ + -export:JLI_Launch \ + -export:JLI_ManifestIterate \ + -export:JLI_SetTraceLauncher \ + -export:JLI_ReportErrorMessage \ + -export:JLI_ReportErrorMessageSys \ + -export:JLI_ReportMessage \ + -export:JLI_ReportExceptionDescription \ + advapi32.lib \ + comctl32.lib \ + user32.lib,\ + LDFLAGS_SUFFIX_macosx:=-framework Cocoa -framework Security -framework ApplicationServices, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli)) + +BUILD_LIBRARIES += $(BUILD_LIBJLI) + +# On windows, the static library has the same suffix as the import library created by +# with the shared library, so the static library is given a different name. No harm +# in doing it for all platform to reduce complexity. +ifeq ($(OPENJDK_TARGET_OS), windows) + $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\ + STATIC_LIBRARY:=jli_static,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\ + SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ + INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(STATIC_LIBRARY_FLAGS) $(BUILD_LIBJLI_CFLAGS),\ + ARFLAGS:=$(ARFLAGS),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static)) + +BUILD_LIBRARIES += $(BUILD_LIBJLI_STATIC) + +else ifeq ($(OPENJDK_TARGET_OS),macosx) + # + # On macosx they do partial (incremental) linking of libjli_static.a + # code it here...rather than add support to NativeCompilation + # as this is first time I see it + $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\ + LIBRARY:=jli_static, \ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\ + SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ + INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBJLI_CFLAGS),\ + LDFLAGS:=-nostdlib -r,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static)) + +$(JDK_OUTPUTDIR)/objs/libjli_static.a : $(BUILD_LIBJLI_STATIC) + $(CP) -a $< $@ + +BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a +endif + +########################################################################################## + +ifeq ($(ENABLE_JFR), true) + +$(eval $(call SetupNativeCompilation,BUILD_LIBJFR,\ + LIBRARY:=jfr,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/native/oracle/jfr,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/closed/share/javavm/export, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjfr/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjfr)) + +BUILD_LIBRARIES += $(BUILD_LIBJFR) + +endif + +########################################################################################## + +ifndef OPENJDK + +BUILD_LIBKCMS_EXCLUDE_FILES:= +ifeq ($(OPENJDK_TARGET_OS),windows) + BUILD_LIBKCMS_EXCLUDE_FILES += ukcpmgr.c unixmem.c +else + BUILD_LIBKCMS_EXCLUDE_FILES += cmmdll.c registry.c spxffile.c sysinfo.c winmem.c wkcpmgr.c +endif + +BUILD_LIBKCMS_FLAGS:=$(CFLAGS_JDKLIB) + +ifeq ($(OPENJDK_TARGET_OS),solaris) + # This particular library uses a feature called PIC_CODE_SMALL (on solaris) + # implement it like this...since it's only used here + BUILD_LIBKCMS_FLAGS:=$(patsubst -KPIC,-Kpic,$(BUILD_LIBKCMS_FLAGS)) +else ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc) + BUILD_LIBKCMS_FLAGS:=$(patsubst -fPIC,-fpic,$(BUILD_LIBKCMS_FLAGS)) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBKCMS,\ + LIBRARY:=kcms,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms,\ + LANG:=C,\ + EXCLUDE_FILES:=$(BUILD_LIBKCMS_EXCLUDE_FILES),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(BUILD_LIBKCMS_FLAGS) \ + -DJAVACMM -DFUT_CALC_EX -DNO_FUT_GCONST,\ + CFLAGS_linux:=-Wno-missing-field-initializers,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libkcms/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=-lpthread,\ + LDFLAGS_SUFFIX_windows:=$(WIN_JAVA_LIB) advapi32.lib user32.lib version.lib, \ + LDFLAGS_SUFFIX:=-lm $(LDFLAGS_JDKLIB_SUFFIX),\ + VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms/cmm.rc,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libkcms)) + +$(BUILD_LIBKCMS) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBKCMS) + +endif + +########################################################################################## + +ifndef OPENJDK +ifeq ($(OPENJDK_TARGET_OS), solaris) +ifneq ($(ARCH), amd64) + +ifeq ($(shell if test "$(OS_VERSION_MAJOR)" -eq 5 -a "$(OS_VERSION_MINOR)" -le 10; then $(ECHO) ok; fi), ok) + +SUNWJDGA_MAPFILE:= +ifneq (,$(findstring $(ARCH),sparc)) + SUNWJDGA_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjdga/mapfile-vers +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBSUNWJDGA, \ + LIBRARY:=sunwjdga,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/solaris/native/sun/jdga, \ + LANG:=C, \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/javavm/export \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/javavm/export \ + -I$(OPENWIN_HOME)/include, \ + MAPFILE:=$(SUNWJDGA_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX:=-L$(OPENWIN_LIB)$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR) -ldga -lX11 $(LIBDL) -lc, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunwjdga)) + +BUILD_LIBRARIES += $(BUILD_LIBSUNWJDGA) + +endif +endif +endif +endif + +########################################################################################## + +ifeq ($(BUILD_HEADLESS), true) +ifneq ($(OPENJDK_TARGET_OS), windows) + +LIBAWT_HEADLESS_DIRS:=$(JDK_TOPDIR)/src/share/native/sun/font \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/solaris/native/sun/font \ + $(JDK_TOPDIR)/src/solaris/native/sun/awt \ + $(JDK_TOPDIR)/src/solaris/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/solaris/native/sun/java2d/x11 + +LIBAWT_HEADLESS_CFLAGS:=-DHEADLESS=true \ + -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \ + $(CUPS_CFLAGS) \ + $(X_CFLAGS) \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/jdga \ + $(foreach dir,$(LIBAWT_HEADLESS_DIRS),-I$(dir)) + +LIBAWT_HEADLESS_FILES:=\ + awt_Font.c \ + HeadlessToolkit.c \ + fontpath.c \ + VDrawingArea.c \ + X11Color.c \ + X11Renderer.c \ + X11PMBlitLoops.c \ + X11SurfaceData.c \ + X11FontScaler_md.c \ + X11TextRenderer_md.c \ + OGLBlitLoops.c \ + OGLBufImgOps.c \ + OGLContext.c \ + OGLFuncs.c \ + OGLMaskBlit.c \ + OGLMaskFill.c \ + OGLPaints.c \ + OGLRenderQueue.c \ + OGLRenderer.c \ + OGLSurfaceData.c \ + OGLTextRenderer.c \ + OGLVertexCache.c \ + GLXGraphicsConfig.c \ + GLXSurfaceData.c \ + AccelGlyphCache.c \ + CUPSfuncs.c + +LIBAWT_HEADLESS_LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) -lawt -lm + +LIBAWT_HEADLESS_REORDER:= +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + LIBAWT_HEADLESS_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/reorder-$(ARCH) + endif +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_HEADLESS,\ + LIBRARY:=awt_headless,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBAWT_HEADLESS_DIRS),\ + INCLUDE_FILES:=$(LIBAWT_HEADLESS_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_HEADLESS_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + REORDER:=$(LIBAWT_HEADLESS_REORDER), \ + LDFLAGS_SUFFIX:=$(LIBAWT_HEADLESS_LDFLAGS_SUFFIX),\ + LDFLAGS_SUFFIX_posix:=$(LIBDL),\ + LDFLAGS_SUFFIX_macosx:=$(LIBCXX), \ + LDFLAGS_SUFFIX_solaris:=$(LIBCXX), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_headless)) + +$(BUILD_LIBAWT_HEADLESS) : $(BUILD_LIBAWT) + +BUILD_LIBRARIES += $(BUILD_LIBAWT_HEADLESS) + +endif +endif + +########################################################################################## + +ifndef BUILD_HEADLESS_ONLY +LIBSPLASHSCREEN_DIRS:=\ + $(JDK_TOPDIR)/src/share/native/sun/awt/giflib \ + $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg \ + $(JDK_TOPDIR)/src/share/native/sun/awt/libpng \ + $(JDK_TOPDIR)/src/share/native/sun/awt/splashscreen \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt/splashscreen + +LIBSPLASHSCREEN_CFLAGS:=-DSPLASHSCREEN -DPNG_NO_MMX_CODE \ + $(foreach dir,$(LIBSPLASHSCREEN_DIRS),-I$(dir)) + +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBSPLASHSCREEN_CFLAGS:=-I$(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen \ + $(LIBSPLASHSCREEN_CFLAGS) \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks + LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX + LIBSPLASHSCREEN_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp + + LIBSPLASHSCREEN_java_awt_SplashScreen.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_gfx_impl.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_gif.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_impl.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_jpeg.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_png.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_sys.m_CFLAGS:=-O0 + +else ifneq ($(OPENJDK_TARGET_OS), windows) + LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions +else + LIBSPLASHSCREEN_CFLAGS += -DWITH_WIN32 +endif + +LIBSPLASHSCREEN_FILES:=\ + java_awt_SplashScreen.c \ + splashscreen_gfx_impl.c \ + splashscreen_gif.c \ + splashscreen_impl.c \ + splashscreen_jpeg.c \ + splashscreen_png.c \ + png.c \ + pngerror.c \ + pngget.c \ + pngmem.c \ + pngpread.c \ + pngread.c \ + pngrio.c \ + pngrtran.c \ + pngrutil.c \ + pngset.c \ + pngtrans.c \ + pngwio.c \ + pngwrite.c \ + pngwtran.c \ + pngwutil.c \ + dgif_lib.c \ + gif_err.c \ + gifalloc.c \ + jcomapi.c \ + jdapimin.c \ + jdapistd.c \ + jdcoefct.c \ + jdcolor.c \ + jddctmgr.c \ + jdhuff.c \ + jdinput.c \ + jdmainct.c \ + jdmarker.c \ + jdmaster.c \ + jdmerge.c \ + jdphuff.c \ + jdpostct.c \ + jdsample.c \ + jerror.c \ + jidctflt.c \ + jidctfst.c \ + jidctint.c \ + jidctred.c \ + jmemmgr.c \ + jmemnobs.c \ + jquant1.c \ + jquant2.c \ + jutils.c \ + jcapimin.c \ + jcapistd.c \ + jccoefct.c \ + jccolor.c \ + jcdctmgr.c \ + jchuff.c \ + jcinit.c \ + jcmainct.c \ + jcmarker.c \ + jcmaster.c \ + jcparam.c \ + jcphuff.c \ + jcprepct.c \ + jcsample.c \ + jctrans.c \ + jdtrans.c \ + jfdctflt.c \ + jfdctfst.c \ + jfdctint.c + +ifneq ($(OPENJDK_TARGET_OS), macosx) +LIBSPLASHSCREEN_FILES += splashscreen_sys.c +else +LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen +LIBSPLASHSCREEN_FILES += splashscreen_sys.m +endif + +LIBSPLASHSCREEN_LDFLAGS_SUFFIX:= + +ifneq ($(USE_EXTERNAL_LIBZ),true) + LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 + LIBSPLASHSCREEN_CFLAGS += $(LIBZ_INCLUDE) + LIBSPLASHSCREEN_FILES += \ + compress.c \ + deflate.c \ + gzclose.c \ + gzlib.c \ + gzread.c \ + gzwrite.c \ + infback.c \ + inffast.c \ + inflate.c \ + inftrees.c \ + trees.c \ + uncompr.c \ + zadler32.c \ + zcrc32.c \ + zutil.c +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBSPLASHSCREEN_LDFLAGS_SUFFIX += $(LIBM) -lpthread -liconv -losxapp \ + -framework ApplicationServices \ + -framework Foundation \ + -framework Cocoa \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation +else ifneq ($(OPENJDK_TARGET_OS), windows) + LIBSPLASHSCREEN_LDFLAGS_SUFFIX += -L$(OPENWIN_LIB)$(ISA_DIR) -lX11 -lXext $(LIBM) -lpthread +else # OPENJDK_TARGET_OS + LIBSPLASHSCREEN_LDFLAGS_SUFFIX += kernel32.lib user32.lib gdi32.lib delayimp.lib /DELAYLOAD:user32.dll +endif # OPENJDK_TARGET_OS + +$(eval $(call SetupNativeCompilation,LIBSPLASHSCREEN,\ + LIBRARY:=splashscreen,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBSPLASHSCREEN_DIRS),\ + INCLUDE_FILES:=$(LIBSPLASHSCREEN_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsplashscreen/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=$(LIBDL), \ + LDFLAGS_SUFFIX:=$(LIBSPLASHSCREEN_LDFLAGS_SUFFIX) $(LIBZ),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsplashscreen)) + +BUILD_LIBRARIES += $(LIBSPLASHSCREEN) + +ifeq ($(OPENJDK_TARGET_OS),macosx) +$(LIBSPLASHSCREEN) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +endif + +endif + +########################################################################################## + +ifndef OPENJDK + +LIBDCPR_SRC_DIRS:=\ $(JDK_TOPDIR)/src/closed/share/native/sun/dc/doe \ $(JDK_TOPDIR)/src/closed/share/native/sun/dc/path \ $(JDK_TOPDIR)/src/closed/share/native/sun/dc/pr \ $(JDK_TOPDIR)/src/closed/share/native/sun/dc/util -LIBDCPR_CFLAGS := $(foreach dir,$(LIBDCPR_SRC_DIRS),-I$(dir)) \ +LIBDCPR_CFLAGS:=$(foreach dir,$(LIBDCPR_SRC_DIRS),-I$(dir)) \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe $(eval $(call SetupNativeCompilation,BUILD_LIBDCPR,\ + LIBRARY:=dcpr,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBDCPR_SRC_DIRS),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(LIBDCPR_CFLAGS), \ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libdcpr/mapfile-vers, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libdcpr/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) $(LIBM)\ $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_posix := $(LIBDL) -lm,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libdcpr,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)dcpr$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX_posix:=-lm,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdcpr)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)dcpr$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBDCPR) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)dcpr$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBDCPR) endif ########################################################################################## $(eval $(call SetupNativeCompilation,BUILD_LIBJ2PCSC,\ + LIBRARY:=j2pcsc,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/smartcardio \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/smartcardio,\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/smartcardio,\ LANG:=C,\ - CFLAGS_posix:= -D__sun_jdk,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + CFLAGS_posix:=-D__sun_jdk,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/sun/security/smartcardio \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/smartcardio\ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/smartcardio/MUSCLE,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libj2pcsc/mapfile-vers, \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/smartcardio\ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/smartcardio/MUSCLE,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2pcsc/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX_posix := $(LIBDL), \ - LDFLAGS_SUFFIX_windows := winscard.lib,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libj2pcsc,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)j2pcsc$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX_posix:=$(LIBDL), \ + LDFLAGS_SUFFIX_windows:=winscard.lib,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2pcsc)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)j2pcsc$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJ2PCSC) ########################################################################################## -ifneq ($(PLATFORM), windows) +ifneq ($(OPENJDK_TARGET_OS), windows) $(eval $(call SetupNativeCompilation,BUILD_LIBJ2GSS,\ + LIBRARY:=j2gss,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/jgss/wrapper \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/jgss/wrapper,\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/jgss/wrapper,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/sun/security/jgss/wrapper \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/jgss/wrapper,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libj2gss/mapfile-vers, \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/jgss/wrapper,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2gss/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := $(LIBDL), \ - BIN:=$(JDK_OUTPUTDIR)/objs/libj2gss,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)j2gss$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX:=$(LIBDL), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2gss)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)j2gss$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJ2GSS) endif ########################################################################################## -BUILD_LIBKRB5_NAME := -ifeq ($(PLATFORM), windows) - BUILD_LIBKRB5_NAME := w2k_lsa_auth - BUILD_LIBKRB5_FILES := NativeCreds.c WindowsDirectory.c - BUILD_LIBKRB5_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/krb5 - BUILD_LIBKRB5_LIBS := Secur32.lib netapi32.lib \ +BUILD_LIBKRB5_NAME:= +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBKRB5_NAME:=w2k_lsa_auth + BUILD_LIBKRB5_FILES:=NativeCreds.c WindowsDirectory.c + BUILD_LIBKRB5_SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/krb5 + BUILD_LIBKRB5_LIBS:=Secur32.lib netapi32.lib \ kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib \ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib \ odbccp32.lib wsock32.lib -else ifeq ($(PLATFORM), macosx) - BUILD_LIBKRB5_NAME := osxkrb5 - BUILD_LIBKRB5_FILES := nativeccache.c - BUILD_LIBKRB5_LIBS := -framework Kerberos +else ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBKRB5_NAME:=osxkrb5 + BUILD_LIBKRB5_FILES:=nativeccache.c + BUILD_LIBKRB5_LIBS:=-framework Kerberos endif ifneq ($(BUILD_LIBKRB5_NAME),) $(eval $(call SetupNativeCompilation,BUILD_LIBKRB5,\ + LIBRARY:=$(BUILD_LIBKRB5_NAME),\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/krb5 \ $(BUILD_LIBKRB5_SRC) ,\ - INCLUDE_FILES := $(BUILD_LIBKRB5_FILES),\ + INCLUDE_FILES:=$(BUILD_LIBKRB5_FILES),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/sun/security/krb5 \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/krb5 ,\ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/krb5 ,\ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := $(BUILD_LIBKRB5_LIBS) ,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libkrb5,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)$(BUILD_LIBKRB5_NAME)$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX:=$(BUILD_LIBKRB5_LIBS) ,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libkrb5)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)$(BUILD_LIBKRB5_NAME)$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBKRB5) endif ########################################################################################## -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) $(eval $(call SetupNativeCompilation,BUILD_LIBSUNMSCAPI,\ + LIBRARY:=sunmscapi,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/mscapi \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/mscapi,\ - INCLUDE_FILES := security.cpp, \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/mscapi,\ + INCLUDE_FILES:=security.cpp, \ LANG:=C++,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/sun/security/mscapi \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/mscapi ,\ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/mscapi ,\ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := Crypt32.Lib advapi32.lib,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libsunmscapi,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)sunmscapi$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX:=Crypt32.Lib advapi32.lib,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunmscapi)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)sunmscapi$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBSUNMSCAPI) endif ########################################################################################## -ifneq ($(PLATFORM)-$(ARCH_DATA_MODEL), windows-64) +ifneq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL), windows-64) $(eval $(call SetupNativeCompilation,BUILD_LIBJ2PKCS11,\ + LIBRARY:=j2pkcs11,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11 \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/pkcs11 \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11 \ $(JDK_TOPDIR)/src/share/native/sun/security/pkcs11/wrapper \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/pkcs11/wrapper,\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11/wrapper,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11 \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/pkcs11 \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11 \ -I$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11/wrapper \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/pkcs11/wrapper,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libj2pkcs11/mapfile-vers, \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11/wrapper,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2pkcs11/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX_posix := $(LIBDL), \ - BIN:=$(JDK_OUTPUTDIR)/objs/libj2pkcs11,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)j2pkcs11$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX_posix:=$(LIBDL), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2pkcs11)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)j2pkcs11$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJ2PKCS11) endif ########################################################################################## @@ -2488,40 +2658,56 @@ ifndef DISABLE_INTREE_EC # TODO Set DISABLE_INTREE_EC in configure if src/share/native/sun/security/ec/impl # is not present # -BUILD_LIBSUNEC_FLAGS := -DMP_API_COMPATIBLE -DNSS_ECC_MORE_THAN_SUITE_B \ - -I$(JDK_TOPDIR)/src/share/native/sun/security/ec \ - -I$(JDK_TOPDIR)/src/share/native/sun/security/ec/impl +BUILD_LIBSUNEC_FLAGS:= -I$(JDK_TOPDIR)/src/share/native/sun/security/ec \ + -I$(JDK_TOPDIR)/src/share/native/sun/security/ec/impl + +# +# On sol-sparc...all libraries are compiled with -xregs=no%appl +# (set in CFLAGS_REQUIRED_sparc) +# +# except!!! libsunec.so +# +ECC_JNI_SOLSPARC_FILTER:= +ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) + ECC_JNI_SOLSPARC_FILTER:=-xregs=no%appl +endif $(eval $(call SetupNativeCompilation,BUILD_LIBSUNEC,\ + LIBRARY:=sunec,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/ec \ $(JDK_TOPDIR)/src/share/native/sun/security/ec/impl, \ - LANG := C++, \ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) $(BUILD_LIBSUNEC_FLAGS),\ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(CXX_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) $(BUILD_LIBSUNEC_FLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libsunec/mapfile-vers, \ + LANG:=C++, \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(filter-out $(ECC_JNI_SOLSPARC_FILTER), $(CFLAGS_JDKLIB))\ + $(BUILD_LIBSUNEC_FLAGS) \ + -DMP_API_COMPATIBLE -DNSS_ECC_MORE_THAN_SUITE_B,\ + CXXFLAGS:=$(filter-out $(ECC_JNI_SOLSPARC_FILTER), $(CXXFLAGS_JDKLIB)) \ + $(BUILD_LIBSUNEC_FLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsunec/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := $(LIBCXX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libsunec,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)sunec$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX:=$(LIBCXX),\ + LDFLAGS_SUFFIX_solaris:=-lc ,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunec)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)sunec$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBSUNEC) endif ########################################################################################## -LIBJSOUND_SRC_DIRS := \ +LIBJSOUND_SRC_DIRS:=\ $(JDK_TOPDIR)/src/share/native/com/sun/media/sound \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/com/sun/media/sound + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/com/sun/media/sound -LIBJSOUND_SRC_FILES := Utilities.c Platform.c +LIBJSOUND_SRC_FILES:=Utilities.c Platform.c -LIBJSOUND_LANG := C -LIBJSOUND_CFLAGS := $(foreach dir,$(LIBJSOUND_SRC_DIRS),-I$(dir)) +LIBJSOUND_LANG:=C +LIBJSOUND_CFLAGS:=$(foreach dir,$(LIBJSOUND_SRC_DIRS),-I$(dir)) -EXTRA_SOUND_JNI_LIBS := +EXTRA_SOUND_JNI_LIBS:= -LIBJSOUND_MIDIFILES := \ +LIBJSOUND_MIDIFILES:=\ MidiInDevice.c \ MidiInDeviceProvider.c \ MidiOutDevice.c \ @@ -2529,16 +2715,16 @@ LIBJSOUND_MIDIFILES := \ PlatformMidi.c # files needed for ports -LIBJSOUND_PORTFILES := \ +LIBJSOUND_PORTFILES:=\ PortMixerProvider.c \ PortMixer.c # files needed for direct audio -LIBJSOUND_DAUDIOFILES := \ +LIBJSOUND_DAUDIOFILES:=\ DirectAudioDeviceProvider.c \ DirectAudioDevice.c -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) EXTRA_SOUND_JNI_LIBS += jsoundds LIBJSOUND_CFLAGS += -DX_PLATFORM=X_WINDOWS \ -DUSE_PLATFORM_MIDI_OUT=TRUE \ @@ -2551,15 +2737,15 @@ ifeq ($(PLATFORM), windows) PLATFORM_API_WinOS_Ports.c LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES) LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES) -endif # PLATFORM windows +endif # OPENJDK_TARGET_OS windows -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) EXTRA_SOUND_JNI_LIBS += jsoundalsa LIBJSOUND_CFLAGS += -DX_PLATFORM=X_LINUX -endif # PLATFORM linux +endif # OPENJDK_TARGET_OS linux -ifeq ($(PLATFORM), macosx) - LIBJSOUND_LANG := C++ +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBJSOUND_LANG:=C++ LIBJSOUND_CFLAGS += -DX_PLATFORM=X_MACOSX \ -DUSE_PORTS=TRUE \ -DUSE_DAUDIO=TRUE \ @@ -2576,9 +2762,9 @@ ifeq ($(PLATFORM), macosx) LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES) LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES) LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES) -endif # PLATFORM macosx +endif # OPENJDK_TARGET_OS macosx -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) LIBJSOUND_CFLAGS += -DX_PLATFORM=X_SOLARIS \ -DUSE_PORTS=TRUE \ -DUSE_DAUDIO=TRUE @@ -2589,7 +2775,7 @@ ifeq ($(PLATFORM), solaris) LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES) LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES) LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES) -endif # PLATFORM solaris +endif # OPENJDK_TARGET_OS solaris ifeq ($(JVM_VARIANT_ZERO), true) @@ -2623,37 +2809,38 @@ endif LIBJSOUND_CFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"' $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUND,\ + LIBRARY:=jsound,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBJSOUND_SRC_DIRS),\ - INCLUDE_FILES := $(LIBJSOUND_SRC_FILES),\ + INCLUDE_FILES:=$(LIBJSOUND_SRC_FILES),\ LANG:=$(LIBJSOUND_LANG),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - $(LIBJSOUND_CFLAGS), \ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(CXX_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - $(LIBJSOUND_CFLAGS), \ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjsound/mapfile-vers, \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBJSOUND_CFLAGS), \ + CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(LIBJSOUND_CFLAGS), \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsound/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows:=java.lib advapi32.lib winmm.lib,\ + LDFLAGS_windows:=$(WIN_JAVA_LIB) advapi32.lib winmm.lib,\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ LDFLAGS_SUFFIX_solaris:=-lc ,\ - LDFLAGS_SUFFIX_macosx := -framework CoreAudio -framework CoreFoundation \ + LDFLAGS_SUFFIX_macosx:=-framework CoreAudio -framework CoreFoundation \ -framework CoreServices -framework AudioUnit $(LIBCXX) \ -framework CoreMIDI -framework AudioToolbox ,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjsound,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsound$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsound)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsound$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJSOUND) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jsound$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJSOUND) ########################################################################################## ifneq ($(filter jsoundalsa, $(EXTRA_SOUND_JNI_LIBS)),) $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDALSA,\ + LIBRARY:=jsoundalsa,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBJSOUND_SRC_DIRS),\ - INCLUDE_FILES := Utilities.c $(LIBJSOUND_MIDIFILES) $(LIBJSOUND_PORTFILES) \ + INCLUDE_FILES:=Utilities.c $(LIBJSOUND_MIDIFILES) $(LIBJSOUND_PORTFILES) \ $(LIBJSOUND_DAUDIOFILES) \ PLATFORM_API_LinuxOS_ALSA_CommonUtils.c \ PLATFORM_API_LinuxOS_ALSA_PCM.c \ @@ -2662,24 +2849,23 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDALSA,\ PLATFORM_API_LinuxOS_ALSA_MidiOut.c \ PLATFORM_API_LinuxOS_ALSA_MidiUtils.c \ PLATFORM_API_LinuxOS_ALSA_Ports.c,\ - LANG := C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(LIBJSOUND_CFLAGS) \ -DUSE_DAUDIO=TRUE \ -DUSE_PORTS=TRUE \ -DUSE_PLATFORM_MIDI_OUT=TRUE \ -DUSE_PLATFORM_MIDI_IN=TRUE, \ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjsoundalsa/mapfile-vers, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsoundalsa/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) -lasound,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjsoundalsa,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsoundalsa$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundalsa)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsoundalsa$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJSOUNDALSA) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jsoundalsa$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJSOUNDALSA) endif @@ -2688,104 +2874,113 @@ endif ifneq ($(filter jsoundds, $(EXTRA_SOUND_JNI_LIBS)),) $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDDS,\ + LIBRARY:=jsoundds,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBJSOUND_SRC_DIRS),\ - INCLUDE_FILES := Utilities.c $(LIBJSOUND_DAUDIOFILES) \ + INCLUDE_FILES:=Utilities.c $(LIBJSOUND_DAUDIOFILES) \ PLATFORM_API_WinOS_DirectSound.cpp, \ - LANG := C++,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + LANG:=C++,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(LIBJSOUND_CFLAGS) \ -DUSE_DAUDIO=TRUE, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) dsound.lib winmm.lib user32.lib ole32.lib,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjsoundds,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsoundds$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundds)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsoundds$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJSOUNDDS) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jsoundds$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJSOUNDDS) endif ########################################################################################## -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) ifndef OPENJDK $(eval $(call SetupNativeCompilation,BUILD_LIBJ2UCRYPTO,\ + LIBRARY:=j2ucrypto,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/closed/solaris/native/com/oracle/security/ucrypto,\ - LANG := C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/closed/solaris/native/com/oracle/security/ucrypto ,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libj2ucrypto/mapfile-vers, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2ucrypto/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_SUFFIX:=$(LIBDL),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libj2ucrypto,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)j2ucrypto$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2ucrypto)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)j2ucrypto$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJ2UCRYPTO) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)j2ucrypto$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJ2UCRYPTO) endif endif ########################################################################################## -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) -LIBAPPLESCRIPTENGINE_FILES := \ +LIBAPPLESCRIPTENGINE_FILES:=\ AppleScriptEngine.m \ AppleScriptExecutionContext.m \ AS_NS_ConversionUtils.m \ NS_Java_ConversionUtils.m $(eval $(call SetupNativeCompilation,BUILD_LIBAPPLESCRIPTENGINE,\ + LIBRARY:=AppleScriptEngine,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/macosx/native/apple/applescript,\ - LANG := C,\ + LANG:=C,\ INCLUDE_FILES:=$(LIBAPPLESCRIPTENGINE_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/macosx/native/apple/applescript \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX:= \ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) \ -framework Cocoa \ -framework Carbon \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -framework JavaNativeFoundation, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libAppleScriptEngine,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)AppleScriptEngine$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libAppleScriptEngine)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)AppleScriptEngine$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAPPLESCRIPTENGINE) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBAPPLESCRIPTENGINE) endif ########################################################################################## -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) -LIBOSXAPP_FILES := \ +LIBOSXAPP_FILES:=\ NSApplicationAWT.m \ QueuingApplicationDelegate.m \ PropertiesUtilities.m \ ThreadUtilities.m $(eval $(call SetupNativeCompilation,BUILD_LIBOSXAPP,\ + LIBRARY:=osxapp,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/macosx/native/sun/osxapp,\ - LANG := C,\ + LANG:=C,\ INCLUDE_FILES:=$(LIBOSXAPP_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_macosx := \ + LDFLAGS_SUFFIX_macosx:=\ -framework Accelerate \ -framework ApplicationServices \ -framework AudioToolbox \ @@ -2799,18 +2994,17 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBOSXAPP,\ -framework OpenGL \ -framework IOSurface \ -framework QuartzCore, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libosxapp,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxapp)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBOSXAPP) endif ########################################################################################## -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) -LIBOSX_FILES := \ +LIBOSX_FILES:=\ Dispatch.m \ CFileManager.m \ KeystoreImpl.m \ @@ -2818,7 +3012,7 @@ LIBOSX_FILES := \ MacOSXPreferencesFile.m \ SCDynamicStoreConfig.m -LIBOSX_DIRS := \ +LIBOSX_DIRS:=\ $(JDK_TOPDIR)/src/macosx/native/com/apple/concurrent \ $(JDK_TOPDIR)/src/macosx/native/java/util \ $(JDK_TOPDIR)/src/macosx/native/com/apple/eio \ @@ -2826,17 +3020,20 @@ LIBOSX_DIRS := \ $(JDK_TOPDIR)/src/macosx/native/apple/launcher $(eval $(call SetupNativeCompilation,BUILD_LIBOSX,\ + LIBRARY:=osx,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBOSX_DIRS),\ - LANG := C,\ + LANG:=C,\ INCLUDE_FILES:=$(LIBOSX_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(foreach dir,$(LIBOSX_DIRS),-I$(dir)) \ -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_macosx := \ + LDFLAGS_SUFFIX_macosx:=\ -losxapp \ -framework Cocoa \ -framework ApplicationServices \ @@ -2846,24 +3043,21 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBOSX,\ -framework Security \ -framework SystemConfiguration \ $(LDFLAGS_JDKLIB_SUFFIX), \ - BIN:=$(JDK_OUTPUTDIR)/objs/libosx,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osx$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosx)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osx$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBOSX) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osx$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBOSX) : $(BUILD_LIBOSXAPP) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osx$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBOSX) : $(BUILD_LIBJAVA) endif ########################################################################################## -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) -LIBAWT_LWAWT_FILES := \ +LIBAWT_LWAWT_FILES:=\ awt.m \ ApplicationDelegate.m \ CFRetainedResource.m \ @@ -2938,7 +3132,7 @@ LIBAWT_LWAWT_FILES := \ CUPSfuncs.c -LIBAWT_LWAWT_DIRS := \ +LIBAWT_LWAWT_DIRS:=\ $(JDK_TOPDIR)/src/macosx/native/sun/awt \ $(JDK_TOPDIR)/src/macosx/native/sun/font \ $(JDK_TOPDIR)/src/macosx/native/sun/java2d/opengl \ @@ -2947,10 +3141,13 @@ LIBAWT_LWAWT_DIRS := \ $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT_LWAWT,\ + LIBRARY:=awt_lwawt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBAWT_LWAWT_DIRS),\ - LANG := C,\ + LANG:=C,\ INCLUDE_FILES:=$(LIBAWT_LWAWT_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(foreach dir,$(LIBAWT_LWAWT_DIRS),-I$(dir)) \ -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ @@ -2964,7 +3161,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT_LWAWT,\ -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_macosx := \ + LDFLAGS_SUFFIX_macosx:=\ -lawt -lmlib_image -losxapp $(LDFLAGS_JDKLIB_SUFFIX) $(LIBM) \ -framework Accelerate \ -framework ApplicationServices \ @@ -2978,30 +3175,25 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT_LWAWT,\ -framework JavaRuntimeSupport \ -framework OpenGL \ -framework QuartzCore ,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libawt_lwawt,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_lwawt)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBAWT_LWAWT) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBAWT) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)mlib_image$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBMLIB_IMAGE) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBOSXAPP) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBJAVA) endif ########################################################################################## -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) -LIBOSXUI_FILES := \ +LIBOSXUI_FILES:=\ AquaFileView.m \ AquaLookAndFeel.m \ AquaNativeResources.m \ @@ -3012,17 +3204,21 @@ LIBOSXUI_FILES := \ ScreenMenu.m $(eval $(call SetupNativeCompilation,BUILD_LIBOSXUI,\ + LIBRARY:=osxui,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/macosx/native/com/apple/laf,\ - LANG := C,\ + LANG:=C,\ INCLUDE_FILES:=$(LIBOSXUI_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/macosx/native/com/apple/laf \ -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ -I$(JDK_TOPDIR)/src/macosx/native/sun/awt \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_macosx := \ + LDFLAGS_SUFFIX_macosx:=\ + $(LDFLAGS_JDKLIB_SUFFIX) \ -lawt -losxapp -lawt_lwawt \ -framework Cocoa \ -framework Carbon \ @@ -3030,22 +3226,49 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBOSXUI,\ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -framework JavaNativeFoundation \ -framework JavaRuntimeSupport, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libosxui,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxui)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBOSXUI) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBOSXUI) : $(BUILD_LIBAWT) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBOSXUI) : $(BUILD_LIBOSXAPP) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBOSXUI) : $(BUILD_LIBAWT_LWAWT) -#$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX) : \ -# $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +#$(BUILD_LIBOSXUI) : $(BUILD_LIBJAVA) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), macosx) + +$(eval $(call SetupNativeCompilation,BUILD_LIBJOBJC,\ + LIBRARY:=JObjC,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/native \ + $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/native ,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=-fpascal-strings \ + -fobjc-gc \ + -gdwarf-2 \ + $(CFLAGS_JDKLIB) \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + , \ + LDFLAGS:=-fpascal-strings \ + -fobjc-gc \ + -gdwarf-2 \ + $(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX:=-framework Foundation -framework JavaVM \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation \ + -lffi, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc)) + +BUILD_LIBRARIES += $(BUILD_LIBJOBJC) endif diff --git a/jdk/makefiles/CopyFiles.gmk b/jdk/makefiles/CopyFiles.gmk index 7f8fea433c9..63ffaa5a263 100644 --- a/jdk/makefiles/CopyFiles.gmk +++ b/jdk/makefiles/CopyFiles.gmk @@ -25,12 +25,12 @@ INCLUDEDIR = $(JDK_OUTPUTDIR)/include -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM) +OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/$(OPENJDK_TARGET_OS) -ifeq ($(PLATFORM), windows) - PLATFORM_INCLUDE = $(INCLUDEDIR)/win32 -else ifeq ($(PLATFORM), macosx) - PLATFORM_INCLUDE = $(INCLUDEDIR)/darwin +ifeq ($(OPENJDK_TARGET_OS), windows) + OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/win32 +else ifeq ($(OPENJDK_TARGET_OS), macosx) + OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/darwin endif # @@ -42,15 +42,15 @@ H_TARGET_FILES =$(INCLUDEDIR)/jdwpTransport.h \ $(INCLUDEDIR)/jvmticmlr.h \ $(INCLUDEDIR)/classfile_constants.h \ $(INCLUDEDIR)/jawt.h \ - $(PLATFORM_INCLUDE)/jni_md.h \ - $(PLATFORM_INCLUDE)/jawt_md.h + $(OPENJDK_TARGET_OS_INCLUDE)/jni_md.h \ + $(OPENJDK_TARGET_OS_INCLUDE)/jawt_md.h $(INCLUDEDIR)/%.h: $(JDK_TOPDIR)/src/share/javavm/export/%.h $(MKDIR) -p $(@D) $(RM) -f $@ $(CP) $< $@ -$(PLATFORM_INCLUDE)/%.h: $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/javavm/export/%.h +$(OPENJDK_TARGET_OS_INCLUDE)/%.h: $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/javavm/export/%.h $(MKDIR) -p $(@D) $(RM) -f $@ $(CP) $< $@ @@ -83,6 +83,13 @@ $(MGMT_LIBDIR)/management.properties: $(MGMT_LIB_SRC)/management.properties $(CP) $< $@ $(CHMOD) 644 $@ +# this file has different permissions...don't know why... +$(MGMT_LIBDIR)/jmxremote.access: $(MGMT_LIB_SRC)/jmxremote.access + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + $(CHMOD) 644 $@ + $(MGMT_LIBDIR)/%: $(MGMT_LIB_SRC)/% $(MKDIR) -p $(@D) $(RM) -f $@ @@ -121,9 +128,13 @@ COPY_FILES += $(PSFONTPROPFILE_TARGET_FILES) # # Copy flavormap.properties, cursor.properties and cursors gif files to LIBDIR # -PLATFORM_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib +ifneq ($(OPENJDK_TARGET_OS), macosx) +OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib +else +OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/macosx/lib +endif -$(LIBDIR)/flavormap.properties: $(PLATFORM_LIB_SRC)/flavormap.properties +$(LIBDIR)/flavormap.properties: $(OPENJDK_TARGET_OS_LIB_SRC)/flavormap.properties $(MKDIR) -p $(@D) $(RM) -f $@ $(CP) $< $@ @@ -131,9 +142,9 @@ $(LIBDIR)/flavormap.properties: $(PLATFORM_LIB_SRC)/flavormap.properties COPY_FILES += $(LIBDIR)/flavormap.properties CURSORS_DEST_DIR = $(LIBDIR)/images/cursors -CURSORS_PLATFORM_LIB_SRC = $(PLATFORM_LIB_SRC)/images/cursors +CURSORS_OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib/images/cursors -$(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_PLATFORM_LIB_SRC)/cursors.properties +$(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_OPENJDK_TARGET_OS_LIB_SRC)/cursors.properties $(MKDIR) -p $(@D) $(RM) -f $@ $(CP) $< $@ @@ -141,11 +152,11 @@ $(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_PLATFORM_LIB_SRC)/cursors.prop COPY_FILES += $(CURSORS_DEST_DIR)/cursors.properties CURSORS_LIB_SRC = $(JDK_TOPDIR)/src/share/lib/images/cursors -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) CURSORS_SRC_FILES = $(CURSORS_LIB_SRC)/invalid32x32.gif $(wildcard $(CURSORS_LIB_SRC)/win32_*.gif) -else # PLATFORM +else # OPENJDK_TARGET_OS CURSORS_SRC_FILES = $(CURSORS_LIB_SRC)/invalid32x32.gif $(wildcard $(CURSORS_LIB_SRC)/motif_*.gif) -endif # PLATFORM +endif # OPENJDK_TARGET_OS CURSORS_TARGET_FILES = $(subst $(CURSORS_LIB_SRC),$(CURSORS_DEST_DIR),$(CURSORS_SRC_FILES)) $(CURSORS_DEST_DIR)/%: $(CURSORS_LIB_SRC)/% @@ -157,7 +168,7 @@ COPY_FILES += $(CURSORS_TARGET_FILES) ########################################################################################## -CONTENT_TYPES_SRC=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib +CONTENT_TYPES_SRC=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib $(LIBDIR)/content-types.properties: $(CONTENT_TYPES_SRC)/content-types.properties $(MKDIR) -p $(@D) @@ -179,9 +190,9 @@ COPY_FILES += $(LIBDIR)/calendars.properties ########################################################################################## -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) -TZMAPPINGS_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib +TZMAPPINGS_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib $(LIBDIR)/tzmappings: $(TZMAPPINGS_SRC)/tzmappings $(MKDIR) -p $(@D) @@ -233,7 +244,7 @@ COPY_FILES += $(ICCPROFILE_TARGET_FILES) #TODO: rework this to avoid hardcoding library name in the makefile # ifdef OPENJDK - ifeq ($(PLATFORM), windows) + ifeq ($(OPENJDK_TARGET_OS), windows) FREETYPE_LIB = $(JDK_OUTPUTDIR)/bin/$(call SHARED_LIBRARY,freetype) else ifeq ($(USING_SYSTEM_FT_LIB), false) @@ -243,7 +254,7 @@ ifdef OPENJDK $(FREETYPE_LIB): $(FREETYPE2_LIB_PATH)/$(call SHARED_LIBRARY,freetype) $(CP) $(FREETYPE2_LIB_PATH)/$(call SHARED_LIBRARY,freetype) $@ - ifeq ($(BUILD_OS), windows) + ifeq ($(OPENJDK_BUILD_OS), windows) $(CHMOD) +rx $@ endif @@ -254,7 +265,7 @@ endif # Copy msvcr100.dll on windows -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) MSVCRNN_TARGET := $(JDK_OUTPUTDIR)/bin/$(notdir $(MSVCRNN_DLL)) $(MSVCRNN_TARGET): $(MSVCRNN_DLL) $(MKDIR) -p $(@D) @@ -286,14 +297,14 @@ else JVMCFG_ARCH := $(ARCH) endif -ifeq ($(PLATFORM),macosx) +ifeq ($(OPENJDK_TARGET_OS),macosx) ifeq ($(JVMCFG_ARCH),amd64) JVMCFG_ARCH := x86_64 endif JVMCFG_SRC := $(JDK_TOPDIR)/src/macosx/bin/$(JVMCFG_ARCH)/jvm.cfg JVMCFG_DIR := $(JDK_OUTPUTDIR)/lib else - JVMCFG_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/$(JVMCFG_ARCH)/jvm.cfg + JVMCFG_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/$(JVMCFG_ARCH)/jvm.cfg JVMCFG_DIR := $(JDK_OUTPUTDIR)/lib/$(LIBARCH) endif @@ -353,15 +364,15 @@ COPY_FILES += $(JVMCFG) PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security PROPS_DST := $(JDK_OUTPUTDIR)/lib/security/java.security -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-solaris endif -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-windows endif -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-macosx endif @@ -453,7 +464,7 @@ $(SHARED_FONTS_DST_DIR)/fonts.dir : $(JDK_TOPDIR)/src/solaris/classes/sun/awt/mo COPY_FILES += $(SHARED_FONTS_DST) $(SHARED_FONTS_DST_DIR)/fonts.dir -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) # The oblique fonts are only needed/wanted on Linux. @@ -532,11 +543,13 @@ $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libxinerama.so: $(JDK_TOPDIR)/src/closed/solaris $(MKDIR) -p $(@D) $(RM) $@ $(CP) $< $@ + $(CHMOD) 755 $@ $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNW%.so: $(JDK_TOPDIR)/src/closed/solaris/lib/$(ARCH)/libjdgaSUNW%.so $(MKDIR) -p $(@D) $(RM) $@ $(CP) $< $@ + $(CHMOD) 755 $@ $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNWafb.so: $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNWffb.so $(MKDIR) -p $(@D) @@ -549,7 +562,7 @@ endif ########################################################################################## -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) SUNPKCS11_CFG_SRC := $(JDK_TOPDIR)/src/share/lib/security/sunpkcs11-solaris.cfg SUNPKCS11_CFG_DST := $(JDK_OUTPUTDIR)/lib/security/sunpkcs11-solaris.cfg @@ -566,7 +579,7 @@ endif ########################################################################################## ifndef OPENJDK -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) UCRYPTO_CFG_SRC := $(JDK_TOPDIR)/src/closed/share/lib/security/ucrypto-solaris.cfg UCRYPTO_CFG_DST := $(JDK_OUTPUTDIR)/lib/security/ucrypto-solaris.cfg diff --git a/jdk/makefiles/CopyIntoClasses.gmk b/jdk/makefiles/CopyIntoClasses.gmk index 92f9330616d..4e9726e452b 100644 --- a/jdk/makefiles/CopyIntoClasses.gmk +++ b/jdk/makefiles/CopyIntoClasses.gmk @@ -133,7 +133,7 @@ COPY_FILES += \ $(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/ocean/*.png) \ $(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/sounds/*.wav) -ifneq ($(PLATFORM), windows) +ifneq ($(OPENJDK_TARGET_OS), windows) # Only copy GTK resources on Solaris/Linux SWING_PLAF_GTK_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk COPY_FILES += \ @@ -174,11 +174,11 @@ COPY_FILES += \ $(shell $(MKDIR) -p $(JDK_OUTPUTDIR)/classes/META-INF/services) # Find all META-INF/services/* files ALL_META-INF_DIRS_share:=$(shell $(FIND) $(JDK_TOPDIR)/src/share/classes -type d -a -name META-INF) -ALL_META-INF_DIRS_hostapi:=$(shell $(FIND) $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes -type d -a -name META-INF) +ALL_META-INF_DIRS_targetapi:=$(shell $(FIND) $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes -type d -a -name META-INF) # Platform specific overrides shared -ifneq ($(ALL_META-INF_DIRS_hostapi),) - ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_hostapi) \ - $(filter-out %$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes%,%,$(ALL_META-INF_DIRS_hostapi)),\ +ifneq ($(ALL_META-INF_DIRS_targetapi),) + ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_targetapi) \ + $(filter-out %$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes%,%,$(ALL_META-INF_DIRS_targetapi)),\ $(ALL_META-INF_DIRS_share)) else ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_share) @@ -189,7 +189,7 @@ ifdef OPENJDK endif ifndef OPENJDK -ifneq ($(PLATFORM), macosx) +ifneq ($(OPENJDK_TARGET_OS), macosx) ALL_META-INF_DIRS += $(JDK_TOPDIR)/src/closed/share/classes/sun/jdbc/odbc/META-INF endif endif @@ -216,9 +216,9 @@ OUT_SERVICES_FILES:=$(addprefix $(JDK_OUTPUTDIR)/classes/META-INF/services/,\ $(shell $(PRINTF) "$(SRC_SERVICES_FILES)\n" | $(SED) -e 's|/[^ ]*/META-INF/services/||g')) OUT_SERVICES_FILES_COLON:=$(addsuffix :,$(OUT_SERVICES_FILES)) # Exception handling for print services with no META-INF directory -SRC_SERVICES_FILES_PRINT = $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/print/services/*) +SRC_SERVICES_FILES_PRINT = $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/print/services/*) OUT_SERVICES_FILES_PRINT = $(addprefix $(JDK_OUTPUTDIR)/classes/META-INF/services/,\ - $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/print/services/%,%,\ + $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/print/services/%,%,\ $(SRC_SERVICES_FILES_PRINT))) OUT_SERVICES_FILES_PRINT_COLON = $(addsuffix :,$(OUT_SERVICES_FILES_PRINT)) RULES_SERVICES_PRINT = $(join $(OUT_SERVICES_FILES_PRINT_COLON),$(SRC_SERVICES_FILES_PRINT)) @@ -229,7 +229,7 @@ META-INF_RULES_SERVICES:=$(RULES_SERVICES_PRINT) $(join $(OUT_SERVICES_FILES_COL define addto_meta-inf_services $1 echo Installing META-INF/services/$$(@F) - $(CAT) $$< | $(SED) -e "s/^#\[$(PLATFORM)\]//" > $$@ + $(CAT) $$< | $(SED) -e "s/^#\[$(OPENJDK_TARGET_OS)\]//" > $$@ endef $(foreach i,$(META-INF_RULES_SERVICES),$(eval $(call addto_meta-inf_services,$i))) # Here is the generic rule, whose receipt the above rules will trigger. @@ -261,13 +261,13 @@ JAVAX_SOUND_SRC_FILES := \ COPY_EXTRA += $(foreach F,$(notdir $(JAVAX_SOUND_SRC_FILES)),$(JDK_OUTPUTDIR)/classes/META-INF/services/${F}) -ifeq ($(PLATFORM)-$(ARCH),windows-ia64) +ifeq ($(OPENJDK_TARGET_OS)-$(ARCH),windows-ia64) JAVAX_SOUND_SRC_FILES += windows-ia64/javax.sound.sampled.spi.MixerProvider COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider -else ifeq ($(PLATFORM),windows) +else ifeq ($(OPENJDK_TARGET_OS),windows) JAVAX_SOUND_SRC_FILES += windows-i586/javax.sound.sampled.spi.MixerProvider COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider -else ifeq ($(PLATFORM)-$(ARCH),linux-i586) +else ifeq ($(OPENJDK_TARGET_OS)-$(ARCH),linux-i586) JAVAX_SOUND_SRC_FILES += linux-i586/javax.sound.sampled.spi.MixerProvider COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider else diff --git a/jdk/makefiles/CopySamples.gmk b/jdk/makefiles/CopySamples.gmk index f373b26d341..bb18a07491c 100644 --- a/jdk/makefiles/CopySamples.gmk +++ b/jdk/makefiles/CopySamples.gmk @@ -46,7 +46,7 @@ ifndef OPENJDK SAMPLE_TARGET += $(SAMPLE_CLOSED_TARGET) endif -ifneq (, $(filter $(PLATFORM), solaris macosx)) +ifneq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx)) SAMPLE_SOLARIS_SOURCE := $(shell $(FIND) $(SAMPLE_SOLARIS_SOURCE_DIR) -type f -print) SAMPLE_SOLARIS_TARGET := $(subst $(SAMPLE_SOLARIS_SOURCE_DIR),$(SAMPLE_TARGET_DIR),$(SAMPLE_SOLARIS_SOURCE)) SAMPLE_TARGET += $(SAMPLE_SOLARIS_TARGET) @@ -72,4 +72,3 @@ COPY_FILES += $(SAMPLE_TARGET) all: $(COPY_FILES) .PHONY: all - diff --git a/jdk/makefiles/CreateJars.gmk b/jdk/makefiles/CreateJars.gmk index 681fdb70201..698885df08a 100644 --- a/jdk/makefiles/CreateJars.gmk +++ b/jdk/makefiles/CreateJars.gmk @@ -32,6 +32,10 @@ default: all include Tools.gmk +# +# This makefile...so that altering will trigger rebuilding include/exclude-lists => jars +# +MAKEFILE=$(JDK_TOPDIR)/makefiles/CreateJars.gmk MAINMANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf BEANMANIFEST := $(JDK_TOPDIR)/make/javax/swing/beaninfo/manifest @@ -46,7 +50,7 @@ JCONSOLE_JAR_DEPS := \ $(eval $(call SetupArchive,BUILD_JCONSOLE_JAR,$(JCONSOLE_JAR_DEPS),\ SRCS:=$(JDK_OUTPUTDIR)/classes,\ - SUFFIXES:=.class .gif .png,\ + SUFFIXES:=.class .gif .png .properties,\ INCLUDES:=sun/tools/jconsole com/sun/tools/jconsole,\ JARMAIN:=sun.tools.jconsole.JConsole,\ JAR:=$(JDK_OUTPUTDIR)/lib/jconsole.jar,\ @@ -242,12 +246,35 @@ RT_JAR_EXCLUDES := \ sun/swing/BeanInfoUtils.class \ $(LOCALEDATA_INCLUDES) -ifndef OPENJDK -ifndef JAVASE_EMBEDDED +# These files should never be put into rt.jar +# but due to a misstake...some are put there if embedded +# +ifneq ($(JAVASE_EMBEDDED), true) +# normal (correct) case RT_JAR_EXCLUDES += \ com/oracle/jrockit/jfr \ oracle/jrockit/jfr +else +# embedded (broken) case +RT_JAR_EXCLUDES += \ + oracle/jrockit/jfr/parser \ + oracle/jrockit/jfr/tools \ + oracle/jrockit/jfr/NativeOptions.class \ + oracle/jrockit/jfr/RepositoryChunkHandler.class endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + RT_JAR_EXCLUDES += com/sun/nio/sctp \ + sun/nio/ch/sctp \ + sun/jdbc \ + sun/nio/ch/DevPollArrayWrapper\$$$$Updator.class \ + sun/nio/ch/DevPollArrayWrapper.class \ + sun/nio/ch/DevPollSelectorImpl.class \ + sun/nio/ch/DevPollSelectorProvider.class \ + sun/nio/ch/EPollArrayWrapper\$$$$Updator.class \ + sun/nio/ch/EPollArrayWrapper.class \ + sun/nio/ch/EPollSelectorImpl.class \ + sun/nio/ch/EPollSelectorProvider.class endif # Find all files in the classes dir to use as dependencies. This could be more fine granular. @@ -271,12 +298,19 @@ $(RESOURCE_JAR_MANIFEST_FILE): $(MAINMANIFEST) -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ $(MAINMANIFEST) >> $@ -$(JDK_OUTPUTDIR)/lib/_the.jars.exclude: +$(JDK_OUTPUTDIR)/lib/_the.jars.exclude: $(MAKEFILE) $(MKDIR) -p $(@D) $(call ListPathsSafely,RT_JAR_EXCLUDES,\n, >> $@) +$(JDK_OUTPUTDIR)/lib/classlist : $(JDK_TOPDIR)/make/tools/sharing/classlist.$(OPENJDK_TARGET_OS) \ + $(MAKEFILE) + $(MKDIR) -p $(@D) + $(RM) -f $@.temp + $(TOOL_ADDJSUM) $< $@.temp + $(MV) $@.temp $@ + $(JDK_OUTPUTDIR)/lib/_the.jars.contents: $(BUILD_TOOLS) $(JDK_OUTPUTDIR)/lib/_the.jars.exclude \ - $(ALL_FILES_IN_CLASSES) + $(ALL_FILES_IN_CLASSES) $(JDK_OUTPUTDIR)/lib/classlist $(MKDIR) -p $(@D) $(RM) $@.temp ($(CD) $(JDK_OUTPUTDIR)/classes && \ @@ -290,17 +324,22 @@ $(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents: $(JDK_OUTPUTDIR)/lib/_the.jars.conten $(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents: $(JDK_OUTPUTDIR)/lib/_the.jars.contents $(GREP) -v -e '\.class$$' -e '/_the\.*' -e '^_the\.*' $(JDK_OUTPUTDIR)/lib/_the.jars.contents > $@ +RT_JAR_CREATE_OPTIONS := c0fm +ifeq ($(COMPRESS_JARS), true) + RT_JAR_CREATE_OPTIONS := cfm +endif + $(JDK_OUTPUTDIR)/lib/rt.jar: $(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents $(RT_JAR_MANIFEST_FILE) $(ECHO) Creating rt.jar $(CD) $(JDK_OUTPUTDIR)/classes && \ - $(JAR) cfm $@ $(RT_JAR_MANIFEST_FILE) \ + $(JAR) $(RT_JAR_CREATE_OPTIONS) $@ $(RT_JAR_MANIFEST_FILE) \ @$(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents $(JDK_OUTPUTDIR)/lib/resources.jar: $(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents \ $(RESOURCE_JAR_MANIFEST_FILE) $(ECHO) Creating resources.jar $(CD) $(JDK_OUTPUTDIR)/classes && \ - $(JAR) cfm $@ $(RESOURCE_JAR_MANIFEST_FILE) \ + $(JAR) $(RT_JAR_CREATE_OPTIONS) $@ $(RESOURCE_JAR_MANIFEST_FILE) \ @$(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents JARS+=$(JDK_OUTPUTDIR)/lib/rt.jar $(JDK_OUTPUTDIR)/lib/resources.jar @@ -309,7 +348,7 @@ JARS+=$(JDK_OUTPUTDIR)/lib/rt.jar $(JDK_OUTPUTDIR)/lib/resources.jar CHARSETS_JAR_DEPS := -ifneq ($(HOST_OS), windows) +ifneq ($(OPENJDK_TARGET_OS), windows) CHARSETS_EXTRA_FILES:=sun/awt/motif/X11GBK.class \ sun/awt/motif/X11GB2312\$$$$Decoder.class \ sun/awt/motif/X11GB2312.class \ @@ -328,20 +367,22 @@ $(eval $(call SetupArchive,BUILD_CHARSETS_JAR,$(CHARSETS_JAR_DEPS),\ $(CHARSETS_EXTRA_FILES) \ META-INF/services/java.nio.charset.spi.CharsetProvider, \ JAR:=$(JDK_OUTPUTDIR)/lib/charsets.jar, \ - SKIP_METAINF := true)) + SKIP_METAINF := true, \ + CHECK_COMPRESS_JAR:=true)) JARS+=$(JDK_OUTPUTDIR)/lib/charsets.jar ########################################################################################## -ifndef OPENJDK +ifeq ($(ENABLE_JFR), true) $(eval $(call SetupArchive,BUILD_JFR_JAR,,\ SRCS:=$(JDK_OUTPUTDIR)/classes,\ INCLUDES:=com/oracle/jrockit/jfr \ oracle/jrockit/jfr,\ JAR:=$(JDK_OUTPUTDIR)/lib/jfr.jar,\ SKIP_METAINF:=true,\ - MANIFEST:=$(MAINMANIFEST))) + MANIFEST:=$(MAINMANIFEST), \ + CHECK_COMPRESS_JAR:=true)) JARS+=$(JDK_OUTPUTDIR)/lib/jfr.jar endif @@ -356,13 +397,14 @@ $(eval $(call SetupArchive,BUILD_JSSE_JAR,,\ com/sun/net/ssl/internal/ssl,\ JAR:=$(JDK_OUTPUTDIR)/lib/jsse.jar,\ SKIP_METAINF:=true,\ - MANIFEST:=$(MAINMANIFEST))) + MANIFEST:=$(MAINMANIFEST), \ + CHECK_COMPRESS_JAR:=true)) JARS+=$(JDK_OUTPUTDIR)/lib/jsse.jar ########################################################################################## -ifneq ($(PLATFORM)-$(ARCH_DATA_MODEL),windows-64) +ifneq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL),windows-64) SUNPKCS11_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunpkcs11.jar ifndef OPENJDK @@ -544,7 +586,7 @@ endif ########################################################################################## -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) SUNMSCAPI_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunmscapi.jar @@ -574,7 +616,7 @@ endif ########################################################################################## -ifeq ($(PLATFORM),solaris) +ifeq ($(OPENJDK_TARGET_OS),solaris) ifndef OPENJDK UCRYPTO_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/ucrypto.jar @@ -661,7 +703,8 @@ $(eval $(call SetupArchive,BUILD_TOOLS_JAR,$(TOOLS_JAR_DEPS),\ META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ META-INF/services/com.sun.tools.internal.xjc.Plugin,\ JAR:=$(JDK_OUTPUTDIR)/lib/tools.jar,\ - SKIP_METAINF:=true)) + SKIP_METAINF:=true, \ + CHECK_COMPRESS_JAR:=true)) JARS+=$(JDK_OUTPUTDIR)/lib/tools.jar @@ -696,6 +739,7 @@ EXPORTED_PRIVATE_PKGS = com.sun.servicetag \ com.oracle.nio $(IMAGES_OUTPUTDIR)/symbols/_the.symbols: $(JDK_OUTPUTDIR)/lib/rt.jar + $(RM) -rf $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym $(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym $(JAVA) \ -Xbootclasspath/a:$(JDK_OUTPUTDIR)/classes \ @@ -711,7 +755,8 @@ MAKE_SURE_DIR_EXISTS_DUMMY := $(shell $(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols) $(eval $(call SetupArchive,BUILD_CT_SYM,$(IMAGES_OUTPUTDIR)/symbols/_the.symbols,\ SRCS:=$(IMAGES_OUTPUTDIR)/symbols,\ INCLUDES:=META-INF/sym,\ - JAR:=$(JDK_OUTPUTDIR)/lib/ct.sym)) + JAR:=$(JDK_OUTPUTDIR)/lib/ct.sym, \ + CHECK_COMPRESS_JAR:=true)) JARS+=$(JDK_OUTPUTDIR)/lib/ct.sym @@ -765,7 +810,7 @@ SRC_ZIP_INCLUDES = \ org/xml/sax \ sunw -SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes +SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gensrc SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/impsrc SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gendocsrc_rmic @@ -776,16 +821,16 @@ endif # Need to copy launcher src files into desired directory structure # before zipping the sources. LAUNCHER_SRC_FILES := $(wildcard $(JDK_TOPDIR)/src/share/bin/*) \ - $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/java_md*) + $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/java_md*) LAUNCHER_ZIP_SRC := $(patsubst $(JDK_TOPDIR)/src/share/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\ - $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\ + $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\ $(LAUNCHER_SRC_FILES))) $(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/share/bin/% $(MKDIR) -p $(@D) $(CP) $< $@ -$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/% +$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/% $(MKDIR) -p $(@D) $(CP) $< $@ diff --git a/jdk/makefiles/GendataBreakIterator.gmk b/jdk/makefiles/GendataBreakIterator.gmk index 6321afbf7ad..9c12334b7d9 100644 --- a/jdk/makefiles/GendataBreakIterator.gmk +++ b/jdk/makefiles/GendataBreakIterator.gmk @@ -35,10 +35,10 @@ # TEXT_SRCDIR = $(JDK_TOPDIR)/src/share/classes TEXT_PKG = sun/text/resources -TEXT_SOURCES = %$(TEXT_PKG)/BreakIteratorRules.java \ - %$(TEXT_PKG)/BreakIteratorInfo.java \ - %$(TEXT_PKG)/BreakIteratorRules_th.java \ - %$(TEXT_PKG)/BreakIteratorInfo_th.java +TEXT_SOURCES = $(TEXT_PKG)/BreakIteratorRules.java \ + $(TEXT_PKG)/BreakIteratorInfo.java \ + $(TEXT_PKG)/BreakIteratorRules_th.java \ + $(TEXT_PKG)/BreakIteratorInfo_th.java # Generate BreakIteratorData BREAK_ITERATOR_DIR = $(JDK_OUTPUTDIR)/break_iterator diff --git a/jdk/makefiles/GendataFontConfig.gmk b/jdk/makefiles/GendataFontConfig.gmk index dec8b5bb0fc..860b233857f 100644 --- a/jdk/makefiles/GendataFontConfig.gmk +++ b/jdk/makefiles/GendataFontConfig.gmk @@ -25,13 +25,13 @@ GENDATA_FONT_CONFIG_DST := $(JDK_OUTPUTDIR)/lib -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/windows/classes/sun/awt/windows GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties GENDATA_FONT_CONFIG_SRC_PREFIX := endif -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) GENDATA_FONT_CONFIG_SRC_PREFIX := linux. ifdef OPENJDK GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/fontconfigs @@ -52,27 +52,29 @@ GENDATA_FONT_CONFIG_SRC_FILES := \ endif endif -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/fontconfigs GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties GENDATA_FONT_CONFIG_SRC_PREFIX := solaris. endif -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/macosx/classes/sun/awt/fontconfigs GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties GENDATA_FONT_CONFIG_SRC_PREFIX := macosx. -endif # PLATFORM +endif # OPENJDK_TARGET_OS ### $(GENDATA_FONT_CONFIG_DST)/%.src : $(GENDATA_FONT_CONFIG_SRC_DIR)/$(GENDATA_FONT_CONFIG_SRC_PREFIX)% $(MKDIR) -p $(@D) $(CP) $< $@ + $(CHMOD) 644 $@ $(GENDATA_FONT_CONFIG_DST)/%.bfc : $(GENDATA_FONT_CONFIG_SRC_DIR)/$(GENDATA_FONT_CONFIG_SRC_PREFIX)%.properties $(MKDIR) -p $(@D) $(TOOL_COMPILEFONTCONFIG) $< $@ + $(CHMOD) 444 $@ ### diff --git a/jdk/makefiles/GendataHtml32dtd.gmk b/jdk/makefiles/GendataHtml32dtd.gmk index 29ae389bd0b..f1a2c95d55a 100644 --- a/jdk/makefiles/GendataHtml32dtd.gmk +++ b/jdk/makefiles/GendataHtml32dtd.gmk @@ -32,5 +32,4 @@ $(HTML32DTD): $(BUILD_TOOLS) $(RM) $@ ($(TOOL_DTDBUILDER) html32 > $@) || exit 1 -GENDATA_HTML32DTD += $(HTML32DTD) - +GENDATA_HTML32DTD += $(HTML32DTD) \ No newline at end of file diff --git a/jdk/makefiles/GenerateClasses.gmk b/jdk/makefiles/GenerateClasses.gmk index a5e68c8b77e..dda0558b0b9 100644 --- a/jdk/makefiles/GenerateClasses.gmk +++ b/jdk/makefiles/GenerateClasses.gmk @@ -27,7 +27,13 @@ default: all include $(SPEC) include MakeBase.gmk -include RMICompile.gmk +include RMICompilation.gmk + +# To ensure the latest stub generator files are picked up from corba repo +# when available, we need to run with latest rmic version available. +ifeq ($(CROSS_COMPILE_ARCH),) + RMIC := $(UNCYGDRIVE) $(JDK_OUTPUTDIR)/bin/rmic +endif CLASSES_DIR := $(JDK_OUTPUTDIR)/classes # NOTE: If the smart javac dependency management is reintroduced, these classes risk diff --git a/jdk/makefiles/GenerateData.gmk b/jdk/makefiles/GenerateData.gmk index d2eebf01097..54b367cb343 100644 --- a/jdk/makefiles/GenerateData.gmk +++ b/jdk/makefiles/GenerateData.gmk @@ -69,6 +69,7 @@ $(GENDATA_CURDATA): $(JDK_TOPDIR)/src/share/classes/java/util/CurrencyData.prope $(RM) $@ $(TOOL_GENERATECURRENCYDATA) -o $@.temp < $< $(MV) $@.temp $@ + $(CHMOD) 444 $@ GENDATA += $(GENDATA_CURDATA) diff --git a/jdk/makefiles/GenerateJavaSources.gmk b/jdk/makefiles/GenerateJavaSources.gmk index 70b464a2730..2474bf6586e 100644 --- a/jdk/makefiles/GenerateJavaSources.gmk +++ b/jdk/makefiles/GenerateJavaSources.gmk @@ -65,7 +65,7 @@ GENSRC += $(GENSRC_BUFFER) include GensrcExceptions.gmk GENSRC += $(GENSRC_EXCEPTIONS) -ifneq ($(HOST_OS),windows) +ifneq ($(OPENJDK_TARGET_OS),windows) include GensrcIcons.gmk GENSRC += $(GENSRC_ICONS) @@ -78,6 +78,11 @@ ifndef DISABLE_NIMBUS GENSRC += $(GENSRC_SWING_NIMBUS) endif +ifeq ($(OPENJDK_TARGET_OS), macosx) + include GensrcJObjC.gmk + GENSRC += $(GENSRC_JOBJC) +endif + $(GENSRC) : $(BUILD_TOOLS) # The exception handling of swing beaninfo @@ -100,7 +105,10 @@ all: $(GENSRC) $(GENSRC_SWING_BEANINFO) $(MKDIR) -p gensrc/javax/swing/plaf && \ $(CP) -rp gensrc_swing/javax/swing/plaf/* gensrc/javax/swing/plaf) \ fi -ifneq ($(HOST_OS),windows) + if [ -d $(JDK_OUTPUTDIR)/gensrc_jobjc ] ; then \ + (cd $(JDK_OUTPUTDIR) && cp -rp gensrc_jobjc/src/* gensrc) \ + fi +ifneq ($(OPENJDK_TARGET_OS),windows) (cd $(JDK_OUTPUTDIR) && \ $(CP) -rp gensrc_icons/* gensrc && \ $(CP) -rp gensrc_x11wrappers/classes/* gensrc) diff --git a/jdk/makefiles/GensrcBuffer.gmk b/jdk/makefiles/GensrcBuffer.gmk index bc9c150da6b..4ae466ebef7 100644 --- a/jdk/makefiles/GensrcBuffer.gmk +++ b/jdk/makefiles/GensrcBuffer.gmk @@ -198,6 +198,7 @@ define SetupGenBuffer $(if $(12),$1_$(strip $(12))) $(if $(13),$1_$(strip $(13))) $(if $(14),$1_$(strip $(14))) + $(if $(15),$(error Internal makefile error: Too many arguments to SetupGenBuffer, please update GensrcBuffer.gmk)) $(call fixRw,$1,$$($1_RW)) $(call typesAndBits,$1,$$($1_type),$$($1_BO)) diff --git a/jdk/makefiles/GensrcIcons.gmk b/jdk/makefiles/GensrcIcons.gmk index 3e9f07437ba..733f25461a9 100644 --- a/jdk/makefiles/GensrcIcons.gmk +++ b/jdk/makefiles/GensrcIcons.gmk @@ -29,7 +29,7 @@ GENSRC_ICONS_TMP := $(JDK_OUTPUTDIR)/gensrc_icons GENSRC_ICONS_DST := $(GENSRC_ICONS_TMP)/sun/awt/X11 ifdef OPENJDK - ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API) + ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API) else ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/closed/solaris endif @@ -41,7 +41,7 @@ GENSRC_ICONS_SRC += \ $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon48.png -ICONPATH := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/awt/X11 +ICONPATH := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/awt/X11 GENSRC_ICONS_SRC += \ $(ICONPATH)/security-icon-bw16.png \ @@ -86,7 +86,7 @@ $$($1_TARGET32) : $2/$1 $(GENSRC_ICONS_TMP)/_the.dir $(ECHO) "public class $$($1_NAME32) {" >> $$@.tmp $(ECHO) "public static int[] $$($1_SHORTNAME) = { " >> $$@.tmp # TODO FIX FIX FIX -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) $(CAT) $$< | $(TOOL_TOBIN) >> $$@.tmp endif $(ECHO) "}; }" >> $$@.tmp @@ -100,7 +100,7 @@ $$($1_TARGET64) : $2/$1 $(GENSRC_ICONS_TMP)/_the.dir $(ECHO) "public class $$($1_NAME64) {" >> $$@.tmp $(ECHO) "public static long[] $$($1_SHORTNAME) = { " >> $$@.tmp # TODO FIX FIX FIX -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) $(CAT) $$< | $(TOOL_TOBIN) >> $$@.tmp endif $(ECHO) "}; }" >> $$@.tmp diff --git a/jdk/makefiles/GensrcJObjC.gmk b/jdk/makefiles/GensrcJObjC.gmk new file mode 100644 index 00000000000..d44df8193df --- /dev/null +++ b/jdk/makefiles/GensrcJObjC.gmk @@ -0,0 +1,80 @@ +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +GENSRC_JOBJC := + +JOBJC_FRAMEWORKS := Foundation CoreFoundation AppKit +FRAMEWORKS_DIR := /System/Library/Frameworks +GBM := /usr/bin/gen_bridge_metadata + +JOBJC_SRC := $(JDK_TOPDIR)/src/macosx/native/jobjc +JOBJC_TMP := $(JDK_OUTPUTDIR)/gensrc_jobjc +JOBJC_DST := $(JDK_OUTPUTDIR)/gensrc_jobjc/src + +# +# Build generator +# +$(eval $(call SetupJavaCompilation,BUILD_JOBJC_PRIMITIVE_CODER,\ + SETUP:=GENERATE_OLDBYTECODE,\ + INCLUDES:=core/java \ + com/apple,\ + HEADERS :=$(JOBJC_DST)/jni_headers/core ,\ + SRC:=$(JOBJC_SRC)/src \ + $(JOBJC_SRC)/src/generator/java, \ + BIN:=$(JOBJC_TMP)/bin)) + +GENSRC_JOBJC += $(JOBJC_TMP)/bin/_the.batch + +# +# Generate bridge support +# +BRIDGESUPPORT := $(addprefix $(JOBJC_TMP)/bridge/,$(addsuffix Full.bridgesupport,$(JOBJC_FRAMEWORKS))) + +$(JOBJC_TMP)/bridge/%Full.bridgesupport : $(FRAMEWORKS_DIR)/%.framework/Headers/*.h + $(MKDIR) -p $(@D) + if [ -f $(FRAMEWORKS_DIR)/$*.framework/Resources/BridgeSupport/$(@F) ]; then \ + cp $(FRAMEWORKS_DIR)/$*.framework/Resources/BridgeSupport/$(@F) $@ ;\ + else \ + $(GBM) -F complete --framework $* -o $@ ; \ + fi + +# +# Find Xbootclasspath +# +$(JOBJC_TMP)/_the.generator_bootclasspath : $(JOBJC_TMP)/bin/_the.batch + $(JAVA) -cp $(JOBJC_TMP)/bin com.apple.internal.jobjc.generator.BootClassPathMinus JObjC.jar > $@.tmp + $(MV) $@.tmp $@ + + +# +# Run generator +# +TOOL_JOBJC := $(JAVA) -cp $(JOBJC_TMP)/bin -ea com.apple.internal.jobjc.generator.Generator + +$(JOBJC_TMP)/_the.generator : $(JOBJC_TMP)/bin/_the.batch $(JOBJC_TMP)/_the.generator_bootclasspath $(BRIDGESUPPORT) + $(JAVA) -d64 -Xbootclasspath:`$(CAT) $(JOBJC_TMP)/_the.generator_bootclasspath` -cp $(JOBJC_TMP)/bin -ea com.apple.internal.jobjc.generator.Generator dst=$(JOBJC_DST) frameworks=$(JOBJC_TMP)/bridge + $(TOUCH) $@ + +GENSRC_JOBJC += $(JOBJC_TMP)/_the.generator diff --git a/jdk/makefiles/GensrcMisc.gmk b/jdk/makefiles/GensrcMisc.gmk index d2acd806e5c..08d64bbe8c0 100644 --- a/jdk/makefiles/GensrcMisc.gmk +++ b/jdk/makefiles/GensrcMisc.gmk @@ -53,9 +53,9 @@ GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/tools/jconsole/Version.java ########################################################################################## -ifeq ($(HOST_OS_API),posix) - UPSUFFIX:=$(PLATFORM) - ifeq ($(PLATFORM),macosx) +ifeq ($(OPENJDK_TARGET_OS_API),posix) + UPSUFFIX:=$(OPENJDK_TARGET_OS) + ifeq ($(OPENJDK_TARGET_OS),macosx) UPSUFFIX:=bsd endif # UNIXProcess.java is different for solaris and linux. We need to copy @@ -64,7 +64,7 @@ ifeq ($(HOST_OS_API),posix) $(JDK_OUTPUTDIR)/gensrc_misc/java/lang/UNIXProcess.java : \ $(JDK_TOPDIR)/src/solaris/classes/java/lang/UNIXProcess.java.$(UPSUFFIX) $(MKDIR) -p $(@D) - $(ECHO) Copying UNIXProcess.java.$(PLATFORM) to java/lang/UNIXProcess.java + $(ECHO) Copying UNIXProcess.java.$(OPENJDK_TARGET_OS) to java/lang/UNIXProcess.java $(CP) $< $@ $(CHMOD) u+rw $@ @@ -74,8 +74,8 @@ endif ########################################################################################## ifndef OPENJDK -ifneq ($(PLATFORM), windows) -ifneq ($(PLATFORM), macosx) +ifneq ($(OPENJDK_TARGET_OS), windows) +ifneq ($(OPENJDK_TARGET_OS), macosx) # These file(s) are needed for building fake .so libs on !windows for jdbcodbc $(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc/dummyodbc1.c : @@ -101,85 +101,98 @@ GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java GENSRC_SOR_SRC := $(JDK_TOPDIR)/src/share/native/sun/nio/ch GENSRC_SOR_SRC_FILE := genSocketOptionRegistry.c -GENSRC_SOR_BIN := $(JDK_OUTPUTDIR)/objs/gensrc/genSocketOptionRegistry -GENSRC_SOR_EXE := $(GENSRC_SOR_BIN)/genSocketOptionRegistry$(EXE_SUFFIX) +GENSRC_SOR_BIN := $(JDK_OUTPUTDIR)/gensrc_misc/genSocketOptionRegistry SOR_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_SOR_SRC)/$(GENSRC_SOR_SRC_FILE) | \ $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') -$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java : $(GENSRC_SOR_EXE) - $(MKDIR) -p $(@D) - NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(SOR_COPYRIGHT_YEARS)" > $@.tmp - $(GENSRC_SOR_EXE) >> $@.tmp - $(MV) $@.tmp $@ - - $(eval $(call SetupNativeCompilation,BUILD_GENSRC_SOR_EXE,\ SRC:=$(GENSRC_SOR_SRC),\ INCLUDE_FILES:=$(GENSRC_SOR_SRC_FILE),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB),\ - BIN:=$(GENSRC_SOR_BIN),\ - EXE:=$(GENSRC_SOR_EXE))) + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_LD),\ + OBJECT_DIR:=$(GENSRC_SOR_BIN),\ + OUTPUT_DIR:=$(GENSRC_SOR_BIN),\ + PROGRAM:=genSocketOptionRegistry)) + +ifneq ($(JAVASE_EMBEDDED), true) +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java : $(BUILD_GENSRC_SOR_EXE) + $(MKDIR) -p $(@D) + NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(SOR_COPYRIGHT_YEARS)" > $@.tmp + $(BUILD_GENSRC_SOR_EXE) >> $@.tmp + $(MV) $@.tmp $@ +else +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java : $(JDK_TOPDIR)/src/closed/solaris/classes/sun/nio/ch/SocketOptionRegistry-$(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH).java + $(MKDIR) -p $(@D) + $(CP) $< $@ +endif ########################################################################################## -ifneq ($(PLATFORM),windows) +ifneq ($(OPENJDK_TARGET_OS),windows) GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java -GENSRC_UC_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/fs +GENSRC_UC_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/fs GENSRC_UC_SRC_FILE := genUnixConstants.c -GENSRC_UC_BIN := $(JDK_OUTPUTDIR)/objs/gensrc/genUnixConstants -GENSRC_UC_EXE := $(GENSRC_UC_BIN)/genUnixConstants$(EXE_SUFFIX) +GENSRC_UC_BIN := $(JDK_OUTPUTDIR)/gensrc_misc/genUnixConstants UC_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_UC_SRC)/$(GENSRC_UC_SRC_FILE) | \ $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') -$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java : $(GENSRC_UC_EXE) - $(MKDIR) -p $(@D) - NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(UC_COPYRIGHT_YEARS)" > $@.tmp - $(GENSRC_UC_EXE) >> $@.tmp - $(MV) $@.tmp $@ - - $(eval $(call SetupNativeCompilation,BUILD_GENSRC_UC_EXE,\ SRC:=$(GENSRC_UC_SRC),\ INCLUDE_FILES:=$(GENSRC_UC_SRC_FILE),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB),\ - BIN:=$(GENSRC_UC_BIN),\ - EXE:=$(GENSRC_UC_EXE))) + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_CC),\ + OBJECT_DIR:=$(GENSRC_UC_BIN),\ + OUTPUT_DIR:=$(GENSRC_UC_BIN),\ + PROGRAM:=genUnixConstants)) + +ifneq ($(JAVASE_EMBEDDED), true) +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java : $(BUILD_GENSRC_UC_EXE) + $(MKDIR) -p $(@D) + NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(UC_COPYRIGHT_YEARS)" > $@.tmp + $(BUILD_GENSRC_UC_EXE) >> $@.tmp + $(MV) $@.tmp $@ +else +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java : $(JDK_TOPDIR)/src/closed/solaris/classes/sun/nio/fs/UnixConstants-$(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH).java + $(MKDIR) -p $(@D) + $(CP) $< $@ +endif endif ########################################################################################## -ifeq ($(PLATFORM),solaris) +ifeq ($(OPENJDK_TARGET_OS),solaris) GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/SolarisConstants.java -GENSRC_SOL_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/fs +GENSRC_SOL_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/fs GENSRC_SOL_SRC_FILE := genSolarisConstants.c -GENSRC_SOL_BIN := $(JDK_OUTPUTDIR)/objs/gensrc/genSolarisConstants -GENSRC_SOL_EXE := $(GENSRC_SOL_BIN)/genSolarisConstants$(EXE_SUFFIX) +GENSRC_SOL_BIN := $(JDK_OUTPUTDIR)/gensrc_misc/genSolarisConstants SOL_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_SOL_SRC)/$(GENSRC_SOL_SRC_FILE) | \ $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') -$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/SolarisConstants.java : $(GENSRC_SOL_EXE) - $(MKDIR) -p $(@D) - NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(SOL_COPYRIGHT_YEARS)" > $@.tmp - $(GENSRC_SOL_EXE) >> $@.tmp - $(MV) $@.tmp $@ - - $(eval $(call SetupNativeCompilation,BUILD_GENSRC_SOL_EXE,\ SRC:=$(GENSRC_SOL_SRC),\ INCLUDE_FILES:=$(GENSRC_SOL_SRC_FILE),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB),\ - BIN:=$(GENSRC_SOL_BIN),\ - EXE:=$(GENSRC_SOL_EXE))) + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_CC),\ + OBJECT_DIR:=$(GENSRC_SOL_BIN),\ + OUTPUT_DIR:=$(GENSRC_SOL_BIN),\ + PROGRAM:=genSolarisConstants)) + +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/SolarisConstants.java : $(BUILD_GENSRC_SOL_EXE) + $(MKDIR) -p $(@D) + NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(SOL_COPYRIGHT_YEARS)" > $@.tmp + $(BUILD_GENSRC_SOL_EXE) >> $@.tmp + $(MV) $@.tmp $@ + endif diff --git a/jdk/makefiles/GensrcProperties.gmk b/jdk/makefiles/GensrcProperties.gmk index 4d663534b5a..f4eea941f33 100644 --- a/jdk/makefiles/GensrcProperties.gmk +++ b/jdk/makefiles/GensrcProperties.gmk @@ -46,7 +46,7 @@ define add_properties_to_compile # Strip away prefix and suffix, # leaving for example: sun/util/resources/CurrencyNames_sv - $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/%.properties,%,\ + $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/%.properties,%,\ $$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties,%,$2)) # Apply optional name transformation, example: hz_TW -> hz_HK @@ -75,7 +75,7 @@ define add_properties_to_clean # Strip away prefix and suffix, # leaving for example: sun/util/resources/CurrencyNames_sv - $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/%.properties,%,\ + $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/%.properties,%,\ $$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties,%,$2)) # Apply optional name transformation, example: hz_TW -> hz_HK @@ -124,7 +124,7 @@ $(eval $(call add_properties_to_compile,COM_SUN_ACCESSIBILITY_HK,\ $(eval $(call add_properties_to_clean,COM_SUN_IMAGEIO,\ $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/imageio -name "*.properties"))) #com/sun/java/swing/plaf/gtk/resources -ifneq ($(PLATFORM), windows) +ifneq ($(OPENJDK_TARGET_OS), windows) # Only compile GTK resource bundles on Solaris/Linux $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_GTK,\ $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk/resources -name "*.properties"),\ @@ -264,6 +264,10 @@ $(eval $(call add_properties_to_compile,SUN_TOOLS_JAR_HK,\ $(eval $(call add_properties_to_clean,SUN_TOOLS_SERIALVER,\ $(shell find $(JDK_TOPDIR)/src/share/classes/sun/tools/javac/resources -name "javac.properties"))) +#sun/tools/jconsole/resources +$(eval $(call add_properties_to_clean,SUN_TOOLS_JCONSOLE,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/sun/tools/jconsole/resources -name "*.properties"))) + #sun/tools/serialver $(eval $(call add_properties_to_clean,SUN_TOOLS_SERIALVER,\ $(shell find $(JDK_TOPDIR)/src/share/classes/sun/tools/serialver -name "*.properties"),,,resources)) diff --git a/jdk/makefiles/GensrcX11Wrappers.gmk b/jdk/makefiles/GensrcX11Wrappers.gmk index 03938bbfc1b..9dca546d1f8 100644 --- a/jdk/makefiles/GensrcX11Wrappers.gmk +++ b/jdk/makefiles/GensrcX11Wrappers.gmk @@ -30,10 +30,10 @@ GENSRC_SIZER_SRC := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/X11/generator GENSRC_SIZES := -ifeq ($(PLATFORM)-$(LIBARCH), solaris-i386) +ifeq ($(OPENJDK_TARGET_OS)-$(LIBARCH), solaris-i386) GENSRC_SIZES := sizes.32 sizes.64 -else ifeq ($(PLATFORM), solaris) -isalist:=$(shell $(ISAINFO)) +else ifeq ($(OPENJDK_TARGET_OS), solaris) +isalist:=$(shell isainfo) ifneq (,$(findstring sparcv9, $(isalist))) # On sparcv9 we generate both 32 and 64-bit sizers in spite of ARCH_DATA_MODEL. GENSRC_SIZES := sizes.32 sizes.64 @@ -46,7 +46,7 @@ GENSRC_SIZES := sizes.32 endif # amd64 endif # sparcv9 else # !solaris -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) GENSRC_SIZES := sizes.32 sizes.64 else # !macosx GENSRC_SIZES := sizes.$(ARCH_DATA_MODEL) @@ -62,18 +62,23 @@ $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.%.c : $(GENSRC_SIZER_SRC)/xlibtypes.txt $(TOOL_WRAPPERGENERATOR) $(@D) $< "sizer" $* $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.%.exe : $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.%.c - (cd $(@D) && $(CC) -m$* -o $@ $< $(CFLAGS_JDKLIB) \ + (cd $(@D) && $(HOST_CC) -m$* -o $@ $< \ + -I$(JDK_OUTPUTDIR)/include \ + -I$(JDK_TOPDIR)/src/share/javavm/export \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/javavm/export \ + -I$(JDK_TOPDIR)//src/share/native/common \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/common \ -I$(JDK_TOPDIR)/src/solaris/native/sun/awt \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils -lc) -ifeq ($(PLATFORM)-$(LIBARCH), solaris-i386) +ifeq ($(OPENJDK_TARGET_OS)-$(LIBARCH), solaris-i386) $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.32 : $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.32.exe $< > $@.tmp $(MV) $@.tmp $@ -$(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 : $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/awt/X11/generator/sizes.64-$(PLATFORM)-$(LIBARCH) +$(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 : $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/awt/X11/generator/sizes.64-$(OPENJDK_TARGET_OS)-$(LIBARCH) $(MKDIR) -p $(@D) $(CP) $< $@ else @@ -88,9 +93,9 @@ $(GENSRC_X11WRAPPERS_TMP)/classes/_the.classes : $(foreach S,$(GENSRC_SIZES),$(G $(MKDIR) -p $(@D)/sun/awt/X11 $(RM) $(@D)/sun/awt/X11/* $(TOOL_WRAPPERGENERATOR) $(@D)/sun/awt/X11 $(GENSRC_SIZER_SRC)/xlibtypes.txt "gen" $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes -ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64) - $(ECHO) COMPARING $@ and $(GENSRC_SIZER_SRC)/sizes.64-$(PLATFORM)-i386 - $(DIFF) $(GENSRC_X11WRAPPERS_TMP)/sizes.64 $(GENSRC_SIZER_SRC)/sizes.64-$(PLATFORM)-i386 +ifeq ($(OPENJDK_TARGET_OS)-$(LIBARCH), solaris-amd64) + $(ECHO) COMPARING $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 and $(GENSRC_SIZER_SRC)/sizes.64-$(OPENJDK_TARGET_OS)-i386 + $(DIFF) $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 $(GENSRC_SIZER_SRC)/sizes.64-$(OPENJDK_TARGET_OS)-i386 endif $(TOUCH) $@ diff --git a/jdk/makefiles/Images.gmk b/jdk/makefiles/Images.gmk index 9315955117e..bda32366082 100644 --- a/jdk/makefiles/Images.gmk +++ b/jdk/makefiles/Images.gmk @@ -34,15 +34,20 @@ include Tools.gmk images: jre-image jdk-image -ifeq ($(HOST_OS),solaris) +ifeq ($(OPENJDK_TARGET_OS),solaris) define install-file $(MKDIR) -p $(@D) - $(CP) -r -P '$<' '$(@D)' + $(CP) -f -r -P '$<' '$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define install-file + $(MKDIR) -p $(@D) + $(CP) -fpRP '$<' '$@' endef else define install-file $(MKDIR) -p $(@D) - $(CP) -P '$<' '$@' + $(CP) -fP '$<' '$@' endef endif @@ -67,7 +72,7 @@ $(JDK_IMAGE_DIR)/jre/bin/%: $(JDK_OUTPUTDIR)/bin/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) -NOT_JRE_BIN_FILES = \ +NOT_JRE_BIN_FILES := \ appletviewer$(EXE_SUFFIX) \ extcheck$(EXE_SUFFIX) \ idlj$(EXE_SUFFIX) \ @@ -107,7 +112,12 @@ WINDOWS_JDK_BIN_FILES = \ # Find all files in bin dir ALL_BIN_LIST := $(shell $(FIND) $(JDK_OUTPUTDIR)/bin -type f) -ifeq ($(HOST_OS),windows) + +# For unknown reason the debuginfo files for binaries are not put into images +# e.g filter them out +ALL_BIN_LIST := $(filter-out %.debuginfo %.diz, $(ALL_BIN_LIST)) + +ifeq ($(OPENJDK_TARGET_OS),windows) JDK_BIN_LIST := $(filter $(addprefix %,$(WINDOWS_JDK_BIN_FILES)), $(ALL_BIN_LIST)) else JDK_BIN_LIST := $(ALL_BIN_LIST) @@ -147,7 +157,7 @@ NOT_JRE_LIB_FILES := \ ct.sym JDK_LIB_FILES := $(NOT_JRE_LIB_FILES) -ifeq ($(HOST_OS), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) JDK_LIB_FILES += jexec endif @@ -236,14 +246,21 @@ JDK_MAN_PAGES = \ wsimport.1 \ xjc.1 -ifeq ($(HOST_OS), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) MAN_SRC_DIR:=$(JDK_TOPDIR)/src/linux/doc MAN1_SUBDIR:=man endif -ifeq ($(HOST_OS), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) MAN_SRC_DIR:=$(JDK_TOPDIR)/src/solaris/doc MAN1_SUBDIR:=sun/man/man1 endif +ifeq ($(OPENJDK_TARGET_OS), macosx) + MAN_SRC_DIR:=$(JDK_TOPDIR)/src/bsd/doc + MAN1_SUBDIR:=man + JDK_MAN_PAGES := $(filter-out jcmd.1, $(JDK_MAN_PAGES)) + JDK_MAN_PAGES := $(filter-out jvisualvm.1, $(JDK_MAN_PAGES)) +endif + $(JRE_IMAGE_DIR)/man/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) @@ -286,7 +303,7 @@ $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/% $(ECHO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(call install-ja-manpage,PCK) -ifeq ($(HOST_OS), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) $(JRE_IMAGE_DIR)/man/ja/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/% $(ECHO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) @@ -302,7 +319,7 @@ $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/jcmd.1 $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1 $(MKDIR) -p $(@D) $(TOUCH) $@ -ifeq ($(HOST_OS), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) $(JRE_IMAGE_DIR)/man/ja: $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja @@ -312,7 +329,17 @@ ifeq ($(HOST_OS), linux) $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja endif -ifeq ($(HOST_OS), linux) +ifeq ($(OPENJDK_TARGET_OS), macosx) + $(JRE_IMAGE_DIR)/man/ja: + $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja + + $(JDK_IMAGE_DIR)/man/ja: + $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja +endif + +ifeq ($(OPENJDK_TARGET_OS), linux) JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/,$(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JRE_MAN_PAGES)) \ $(JRE_IMAGE_DIR)/man/ja @@ -322,7 +349,7 @@ ifeq ($(HOST_OS), linux) $(JDK_IMAGE_DIR)/man/ja endif -ifeq ($(HOST_OS), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/,$(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja/man1/,$(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JRE_MAN_PAGES)) \ @@ -334,6 +361,16 @@ ifeq ($(HOST_OS), solaris) $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/,$(JDK_MAN_PAGES)) endif +ifeq ($(OPENJDK_TARGET_OS), macosx) + JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/,$(JRE_MAN_PAGES)) \ + $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JRE_MAN_PAGES)) \ + $(JRE_IMAGE_DIR)/man/ja + + JDK_MAN_PAGE_LIST := $(addprefix $(JDK_IMAGE_DIR)/man/man1/,$(JDK_MAN_PAGES)) \ + $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JDK_MAN_PAGES)) \ + $(JDK_IMAGE_DIR)/man/ja +endif + ################################################################################ # /demo dir @@ -383,6 +420,7 @@ ifndef OPENJDK $(JDK_IMAGE_DIR)/db/README-JDK.html: $(JDK_TOPDIR)/src/closed/share/db/README-JDK.html $(ECHO) Copying '$(patsubst $(OUTPUT_ROOT)/%,%,$@)' $(install-file) + $(CHMOD) 644 $(@) JDK_DB_TARGETS := $(patsubst $(JDK_TOPDIR)/src/closed/share/db/%,$(IMAGES_OUTPUTDIR)/_unzip/%.unzipped,\ $(shell $(FIND) $(JDK_TOPDIR)/src/closed/share/db -name "*.zip" ! -name "*demo*")) \ @@ -411,7 +449,7 @@ ifdef OPENJDK else JRE_DOC_FILES := COPYRIGHT Welcome.html LICENSE THIRDPARTYLICENSEREADME.txt JDK_DOC_FILES := COPYRIGHT README.html LICENSE THIRDPARTYLICENSEREADME.txt - ifeq ($(HOST_OS), windows) + ifeq ($(OPENJDK_TARGET_OS), windows) JRE_DOC_FILES += README.txt else JRE_DOC_FILES += README @@ -432,32 +470,39 @@ JDK_DOC_TARGETS := $(addprefix $(JDK_IMAGE_DIR)/,$(JDK_DOC_FILES)) $(JRE_IMAGE_DIR)/%: $(JRE_DOC_LOCATION)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) + $(CHMOD) 444 $(@) $(JDK_IMAGE_DIR)/jre/%: $(JRE_DOC_LOCATION)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) + $(CHMOD) 444 $(@) $(JRE_IMAGE_DIR)/README.txt: $(JRE_DOC_LOCATION)/README $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(MKDIR) -p $(@D) $(CP) $< $@ + $(CHMOD) 444 $(@) $(JDK_IMAGE_DIR)/jre/README.txt: $(JRE_DOC_LOCATION)/README $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(MKDIR) -p $(@D) $(CP) $< $@ + $(CHMOD) 444 $(@) $(JDK_IMAGE_DIR)/%: $(JDK_DOC_LOCATION)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) + $(CHMOD) 444 $(@) $(JDK_IMAGE_DIR)/demo/%: $(JDK_DOC_LOCATION)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) + $(CHMOD) 444 $(@) $(JDK_IMAGE_DIR)/sample/%: $(JDK_DOC_LOCATION)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) + $(CHMOD) 444 $(@) JRE_INFO_FILE := $(JRE_IMAGE_DIR)/release JDK_INFO_FILE := $(JDK_IMAGE_DIR)/release @@ -500,7 +545,7 @@ $(JDK_IMAGE_DIR)/src.zip: $(IMAGES_OUTPUTDIR)/src.zip # Post processing (strip etc) ifneq ($(POST_STRIP_CMD),) - ifeq ($(HOST_OS), windows) + ifeq ($(OPENJDK_TARGET_OS), windows) EXEC_LIST:=$(shell $(FIND) $(JDK_OUTPUTDIR)/bin -type f -name \*.exe \ -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)") else @@ -510,17 +555,43 @@ ifneq ($(POST_STRIP_CMD),) | $(EGREP) 'ELF' | $(CUT) -d':' -f1) endif # Filter out non JRE files and convert to unique touch files to depend on - JRE_EXEC_TOUCH_LIST:=$(patsubst $(JDK_OUTPUTDIR)/%,$(IMAGES_OUTPUTDIR)/_strip/%.stripped,\ + JRE_EXEC_TOUCH_LIST:=$(patsubst $(JDK_OUTPUTDIR)/%,$(IMAGES_OUTPUTDIR)/_strip_jre/%.stripped,\ $(filter-out $(addprefix %,$(NOT_JRE_BIN_FILES) $(NOT_JRE_LIB_FILES)), $(EXEC_LIST))) + JDK_JRE_EXEC_TOUCH_LIST:=$(patsubst $(JDK_OUTPUTDIR)/%, \ + $(IMAGES_OUTPUTDIR)/_strip_jdk/jre/%.stripped, \ + $(filter-out $(addprefix %,$(NOT_JRE_BIN_FILES) $(NOT_JRE_LIB_FILES)), $(EXEC_LIST))) + + JDK_BIN_EXEC_TOUCH_LIST := $(patsubst $(JDK_OUTPUTDIR)/%, \ + $(IMAGES_OUTPUTDIR)/_strip_jdk/%.stripped, \ + $(filter-out $(JDK_OUTPUTDIR)/lib/%, $(EXEC_LIST))) + # Setup a rule for stripping files based on touch files - $(IMAGES_OUTPUTDIR)/_strip/%.stripped: $(JRE_IMAGE_DIR)/% + $(IMAGES_OUTPUTDIR)/_strip_jre/%.stripped: $(JRE_IMAGE_DIR)/% $(ECHO) Stripping $(patsubst $(OUTPUT_ROOT)/%,%,$<) $(CHMOD) u+w $< $(POST_STRIP_CMD) $< $(CHMOD) go-w $< $(MKDIR) -p $(@D) $(TOUCH) $@ + + $(IMAGES_OUTPUTDIR)/_strip_jdk/bin/%.stripped: $(JDK_IMAGE_DIR)/bin/% + $(ECHO) Stripping $(patsubst $(OUTPUT_ROOT)/%,%,$<) + $(CHMOD) u+w $< + $(POST_STRIP_CMD) $< + $(CHMOD) go-w $< + $(MKDIR) -p $(@D) + $(TOUCH) $@ + + # Setup a rule for stripping files based on touch files + $(IMAGES_OUTPUTDIR)/_strip_jdk/jre/%.stripped: $(JDK_IMAGE_DIR)/jre/% + $(ECHO) Stripping $(patsubst $(OUTPUT_ROOT)/%,%,$<) + $(CHMOD) u+w $< + $(POST_STRIP_CMD) $< + $(CHMOD) go-w $< + $(MKDIR) -p $(@D) + $(TOUCH) $@ + endif ################################################################################ @@ -538,7 +609,8 @@ jdk-image: $(JDK_BIN_TARGETS) $(JDKJRE_BIN_TARGETS) \ $(JDK_MAN_PAGE_LIST) $(JDK_SAMPLE_TARGETS) \ $(JDK_DB_TARGETS) $(JDK_INCLUDE_TARGETS) \ $(JDKJRE_DOC_TARGETS) $(JDK_DOC_TARGETS) \ - $(JDK_INFO_FILE) $(JDK_IMAGE_DIR)/src.zip + $(JDK_INFO_FILE) $(JDK_JRE_EXEC_TOUCH_LIST) $(JDK_BIN_EXEC_TOUCH_LIST) \ + $(JDK_IMAGE_DIR)/src.zip ################################################################################ diff --git a/jdk/makefiles/Import.gmk b/jdk/makefiles/Import.gmk new file mode 100644 index 00000000000..eee94e221d6 --- /dev/null +++ b/jdk/makefiles/Import.gmk @@ -0,0 +1,243 @@ +# +# Copyright (c) 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +default: all + +include $(SPEC) +include MakeBase.gmk + +####### + +IMPORT_TARGET_FILES := + +IMPORT_CLASSES := CORBA JAXP JAXWS LANGTOOLS +IMPORT_SOURCES := CORBA JAXP JAXWS LANGTOOLS +# Only Corba has binaries +IMPORT_BINARIES := CORBA + +####### + +# Put the libraries here. Different locations for different target apis. +ifeq ($(OPENJDK_TARGET_OS_API),posix) + ifneq ($(OPENJDK_TARGET_OS),macosx) + INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/lib/$(LIBARCH) + else + INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/lib + endif + HOTSPOT_LIB_DIR:=$(HOTSPOT_DIST)/jre/lib/$(LIBARCH) +else + INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/bin + HOTSPOT_LIB_DIR:=$(HOTSPOT_DIST)/jre/bin +endif + +####### + +# +# jar xf/unzip fails when executing them all in parallel +# introduce artificial dependency (_DEP) buuhhh + +define ImportClasses +$1_CLASSES_DEP := $$(IMPORT_TARGET_CLASSES) +IMPORT_TARGET_CLASSES += $(JDK_OUTPUTDIR)/classes/_the.$1.classes.imported + +$(JDK_OUTPUTDIR)/classes/_the.$1.classes.imported : $$($1_DIST)/lib/classes.jar $$($1_CLASSES_DEP) + $(ECHO) Importing $1 classes.jar + $(MKDIR) -p $$(@D) + ($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp) + $(MV) $$@.tmp $$@ +endef + +define ImportSources +$1_SOURCES_DEP := $$(IMPORT_TARGET_SOURCES) +IMPORT_TARGET_SOURCES += $(JDK_OUTPUTDIR)/impsrc/_the.$1.src.imported + +$(JDK_OUTPUTDIR)/impsrc/_the.$1.src.imported : $$($1_DIST)/lib/src.zip $$($1_SOURCES_DEP) + $(ECHO) Importing $1 src.zip + $(MKDIR) -p $$(@D) + ($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp) + $(MV) $$@.tmp $$@ +endef + +define ImportBinaries +$1_BINARIES_DEP := $$(IMPORT_TARGET_BINARIES) +IMPORT_TARGET_BINARIES += $(JDK_OUTPUTDIR)/_the.$1.binaries.imported + +$(JDK_OUTPUTDIR)/_the.$1.binaries.imported : $$($1_DIST)/lib/bin.zip $$($1_BINARIES_DEP) + $(ECHO) Importing $1 bin.zip + $(MKDIR) -p $$(@D) + ($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp) + $(MV) $$@.tmp $$@ +endef + +####### + +$(foreach I,$(IMPORT_CLASSES), $(eval $(call ImportClasses,$I))) +$(foreach I,$(IMPORT_SOURCES), $(eval $(call ImportSources,$I))) +$(foreach I,$(IMPORT_BINARIES), $(eval $(call ImportBinaries,$I))) + +IMPORT_TARGET_FILES += $(IMPORT_TARGET_CLASSES) $(IMPORT_TARGET_SOURCES) $(IMPORT_TARGET_BINARIES) + +####### + +ifeq ($(OPENJDK_TARGET_OS),solaris) +define do-install-file + $(MKDIR) -p $$(@D) + $(CP) -r -P '$$<' '$$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define do-install-file + $(MKDIR) -p $$(@D) + $(CP) -pRP '$$<' '$$@' +endef +else +define do-install-file + $(MKDIR) -p $$(@D) + $(CP) -P '$$<' '$$@' +endef +endif + +define CopyDir + $1_SRC_FILES := $(shell $(FIND) $2 -type f) + $1_DST_FILES := $$(patsubst $2/%,$3/%,$$($1_SRC_FILES)) + IMPORT_TARGET_FILES += $$($1_DST_FILES) +$3/% : $2/% + $(ECHO) Copying $$(@F) + $(do-install-file) +endef + +####### + +# +# Import hotspot +# + +$(eval $(call CopyDir,HOTSPOT0, $(HOTSPOT_LIB_DIR), $(INSTALL_LIBRARIES_HERE))) +$(eval $(call CopyDir,HOTSPOT1, $(HOTSPOT_DIST)/lib, $(JDK_OUTPUTDIR)/lib)) + +JSIG_DEBUGINFO := $(wildcard $(HOTSPOT_DIST)/jre/lib/$(LIBARCH)/libjsig.debuginfo) \ + $(wildcard $(HOTSPOT_DIST)/jre/lib/$(LIBARCH)/libjsig.diz) + +ifneq ($(OPENJDK_TARGET_OS), windows) + ifeq ($(JVM_VARIANT_SERVER), true) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/server/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) + ifneq (,$(JSIG_DEBUGINFO)) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/server/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + endif + endif + ifeq ($(JVM_VARIANT_CLIENT), true) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/client/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) + ifneq (,$(JSIG_DEBUGINFO)) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/client/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + endif + endif +endif + +$(INSTALL_LIBRARIES_HERE)/server/%$(SHARED_LIBRARY_SUFFIX) : $(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX) + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/server/%.debuginfo : $(INSTALL_LIBRARIES_HERE)/%.debuginfo + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/server/%.diz : $(INSTALL_LIBRARIES_HERE)/%.diz + $(RM) -f $@ +ifeq (REALLY_WEIRD,1) + $(LN) -s ../$(@F) $@ +else +# +# TODO: Check if this is what they really want...a zip containing a symlink +# + $(RM) -f $(basename $@).debuginfo + $(LN) -s ../$(basename $(@F)).debuginfo $(basename $@).debuginfo + $(ZIP) -q -y $@ $(basename $@).debuginfo + $(RM) -f $(basename $@).debuginfo +endif + +$(INSTALL_LIBRARIES_HERE)/client/%$(SHARED_LIBRARY_SUFFIX) : $(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX) + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/client/%.debuginfo : $(INSTALL_LIBRARIES_HERE)/%.debuginfo + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/client/%.diz : $(INSTALL_LIBRARIES_HERE)/%.diz + $(RM) -f $@ +ifeq (REALLY_WEIRD,1) + $(LN) -s ../$(@F) $@ +else +# +# TODO: Check if this is what they really want...a zip containing a symlink +# + $(RM) -f $(basename $@).debuginfo + $(LN) -s ../$(basename $(@F)).debuginfo $(basename $@).debuginfo + $(ZIP) -q -y $@ $(basename $@).debuginfo + $(RM) -f $(basename $@).debuginfo +endif + +####### + +ifeq ($(OPENJDK_TARGET_OS),solaris) +define install-file + $(MKDIR) -p $(@D) + $(CP) -r -P '$<' '$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define install-file + $(MKDIR) -p $(@D) + $(CP) -pRP '$<' '$@' +endef +else +define install-file + $(MKDIR) -p $(@D) + $(CP) -P '$<' '$@' +endef +endif + +ifndef OPENJDK + +IMPORT_TARGET_FILES += \ + $(JDK_OUTPUTDIR)/lib/security/US_export_policy.jar \ + $(JDK_OUTPUTDIR)/lib/security/local_policy.jar \ + $(JDK_OUTPUTDIR)/lib/jce.jar + +$(JDK_OUTPUTDIR)/lib/jce.jar : $(JDK_TOPDIR)/make/closed/tools/crypto/jce/jce.jar + $(ECHO) Copying $(@F) + $(install-file) + +$(JDK_OUTPUTDIR)/lib/security/local_policy.jar: $(JDK_TOPDIR)/make/closed/tools/crypto/jce/local_policy.jar + $(ECHO) Copying $(@F) + $(install-file) + +$(JDK_OUTPUTDIR)/lib/security/US_export_policy.jar: $(JDK_TOPDIR)/make/closed/tools/crypto/jce/US_export_policy.jar + $(ECHO) Copying $(@F) + $(install-file) + +endif # OPENJDK + +####### + +all: $(IMPORT_TARGET_FILES) diff --git a/jdk/makefiles/LegacyMakefiles.gmk b/jdk/makefiles/LegacyMakefiles.gmk deleted file mode 100644 index e2fe44a4c02..00000000000 --- a/jdk/makefiles/LegacyMakefiles.gmk +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (c) 2011, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -include $(SPEC) -include MakeBase.gmk - -all: $(JDK_OUTPUTDIR)/_the.legacy_make - -DEPS:= $(shell $(FIND) $(JDK_TOPDIR)/makefiles/java -type f) \ - $(shell $(FIND) $(JDK_TOPDIR)/makefiles/javax -type f) \ - $(shell $(FIND) $(JDK_TOPDIR)/makefiles/sun -type f) \ - $(shell $(FIND) $(JDK_TOPDIR)/makefiles/com -type f) - -$(JDK_OUTPUTDIR)/_the.legacy_make: $(DEPS) - (echo Building single threaded Java subdir && \ - $(MAKE) -j1 -C java all && \ - touch $@) - -.PHONY: all - diff --git a/jdk/makefiles/Makefile b/jdk/makefiles/Makefile index 6feba0efe4a..d7381dc9317 100644 --- a/jdk/makefiles/Makefile +++ b/jdk/makefiles/Makefile @@ -38,21 +38,21 @@ include Setup.gmk include Tools.gmk all: $(BUILD_TOOLS) +# Import (corba jaxp jaxws langtools hotspot) + +$(MAKE) -f Import.gmk +# +$(MAKE) -f GenerateJavaSources.gmk -# Drop back to the old makefiles for -# packages/libs that have not yet been converted. - +$(MAKE) -f LegacyMakefiles.gmk # Ok, now gensrc is fully populated. +$(MAKE) -f GenerateData.gmk +$(MAKE) -f CompileJavaClasses.gmk -# The classes have been built, now generate -# classes that have other sources. - +$(MAKE) -f GenerateClasses.gmk # The classes are now built and # any javah files have now been generated. +$(MAKE) -f CompileNativeLibraries.gmk # Finally compile the launchers. +$(MAKE) -f CompileLaunchers.gmk +# Generate classes that have other sources. Needs +# to execute launchers. + +$(MAKE) -f GenerateClasses.gmk # Now we have a complete jdk, which you can run. # It is not yet wrapped up as an installed image. # The demos are compiled against this jdk. @@ -64,16 +64,11 @@ ifndef NO_SAMPLES +$(MAKE) -f CopySamples.gmk endif -# Create the final jdk and jre images in the old way. Kept for reference -# until conversion is fully done. -old-images: - +$(MAKE) $(IMAGES_MAKE_ARGS) -f OldImages.gmk - # Create the final jdk and jre images, to be wrapped up # into packages, or installed. images: +$(MAKE) -f CreateJars.gmk - +$(MAKE) $(IMAGES_MAKE_ARGS) -f Images.gmk + +$(MAKE) -f Images.gmk BINARIES:=$(shell if test -d $(IMAGES_OUTPUTDIR)/j2sdk-image/bin; then cd $(IMAGES_OUTPUTDIR)/j2sdk-image/bin && $(LS) ; fi) @@ -90,9 +85,4 @@ install: images $(RM) $(addprefix $(INSTALL_PREFIX)/bin/,$(BINARIES)) $(foreach b,$(BINARIES),$(LN) -s $(INSTALL_PREFIX)/jvm/$(INSTALLDIR)/bin/$b $(INSTALL_PREFIX)/bin/$b &&) true -# Create the deb,rpm,tgz,zip, packages. -packages: images - echo Creating packages...well, in the future. - $(MKDIR) -p $(OUTPUT_ROOT)/packages - .PHONY: all install images diff --git a/jdk/makefiles/OldImages.gmk b/jdk/makefiles/OldImages.gmk deleted file mode 100644 index 1db1c174db8..00000000000 --- a/jdk/makefiles/OldImages.gmk +++ /dev/null @@ -1,175 +0,0 @@ -# -# Copyright (c) 2011, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -include $(SPEC) -include MakeBase.gmk -include JavaCompilation.gmk -include Setup.gmk - -default: $(IMAGES_OUTPUTDIR)/_the.images - -include Tools.gmk - -JARS:= - -########################################################################################## - -JCONSOLE_JAR_DEPS := \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/newclasses/sun/tools/jconsole/ -name "_the.package") \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/newclasses/com/sun/tools/jconsole/ -name "_the.package") - -$(eval $(call SetupArchive,BUILD_JCONSOLE_JAR,$(JCONSOLE_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses,\ - SUFFIXES:=.class .gif .png,\ - INCLUDES:=sun/tools/jconsole com/sun/tools/jconsole,\ - JARMAIN:=sun.tools.jconsole.JConsole,\ - JAR:=$(JDK_OUTPUTDIR)/lib/jconsole.jar,\ - SKIP_METAINF:=true)) - -JARS+=$(JDK_OUTPUTDIR)/lib/jconsole.jar - -########################################################################################## - -CHARSETS_JAR_DEPS := - -$(eval $(call SetupArchive,BUILD_CHARSETS_JAR,$(CHARSETS_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses, \ - SUFFIXES:=.class .dat,\ - INCLUDES:=sun/nio/cs/ext,\ - EXTRA_FILES := sun/awt/HKSCS.class \ - sun/awt/motif/X11GBK.class \ - 'sun/awt/motif/X11GB2312$$$$Decoder.class' \ - sun/awt/motif/X11GB2312.class \ - 'sun/awt/motif/X11KSC5601$$$$Decoder.class' \ - 'sun/awt/motif/X11KSC5601$$$$Encoder.class' \ - 'sun/awt/motif/X11GB2312$$$$Encoder.class' \ - 'sun/awt/motif/X11GBK$$$$Encoder.class' \ - sun/awt/motif/X11KSC5601.class \ - META-INF/services/java.nio.charset.spi.CharsetProvider, \ - JAR:=$(JDK_OUTPUTDIR)/lib/charsets.jar, \ - JARMAIN := NONE, \ - SKIP_METAINF := true)) - -JARS+=$(JDK_OUTPUTDIR)/lib/charsets.jar - -########################################################################################## - -SUNPKCS11_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunpkcs11.jar - -ifndef OPENJDK - -SUNPKCS11_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/pkcs11/sunpkcs11.jar - -$(SUNPKCS11_JAR_DST) : $(SUNPKCS11_JAR_SRC) - @$(ECHO) "\n>>>Installing prebuilt SunPKCS11 provider..." - $(RM) $@ - $(CP) $< $@ - -else - -$(eval $(call SetupArchive,BUILD_SUNPKCS11_JAR,$(SUNPKCS11_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses, \ - SUFFIXES:=.class,\ - INCLUDES:=sun/security/pkcs11,\ - JAR:=$(SUNPKCS11_JAR_DST), \ - JARMAIN := NONE, \ - SKIP_METAINF := true)) - -endif - -JARS += $(SUNPKCS11_JAR_DST) - -########################################################################################## - -SUNEC_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunec.jar - -ifndef OPENJDK - -SUNEC_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/ec/sunec.jar - -$(SUNEC_JAR_DST) : $(SUNEC_JAR_SRC) - @$(ECHO) "\n>>>Installing prebuilt SunEC provider..." - $(RM) $@ - $(CP) $< $@ - -else - -$(eval $(call SetupArchive,BUILD_SUNEC_JAR,$(SUNEC_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses, \ - SUFFIXES:=.class,\ - INCLUDES:=sun/security/ec,\ - EXCLUDE_FILES := \ - sun/security/ec/ECKeyFactory.class \ - sun/security/ec/ECParameters.class \ - sun/security/ec/ECPrivateKeyImpl.class \ - sun/security/ec/ECPublicKeyImpl.class \ - sun/security/ec/NamedCurve.class \ - 'sun/security/ec/ECKeyFactory$$$$1.class' \ - 'sun/security/ec/ECKeyFactory$$$$2.class' ,\ - JAR:=$(SUNEC_JAR_DST), \ - JARMAIN := NONE, \ - SKIP_METAINF := true)) - -endif - -JARS += $(SUNEC_JAR_DST) - -########################################################################################## - -# TODO: deps? -$(eval $(call SetupArchive,BUILD_SWINGBEANS_JAR,$(SWINGBEANS_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses,\ - SUFFIXES:=BeanInfo.class .gif,\ - INCLUDES:=javax/swing sun/swing,\ - EXCLUDES:=javax/swing/plaf,\ - EXTRA_FILES:=javax/swing/SwingBeanInfoBase.class sun/swing/BeanInfoUtils.class,\ - JAR:=$(JDK_OUTPUTDIR)/lib/dt.jar,\ - JARMAIN:=NONE,\ - SKIP_METAINF:=true)) - -JARS+=$(JDK_OUTPUTDIR)/lib/dt.jar - -########################################################################################## - -# Need to define BUILDDIR for Release.gmk to work -BUILDDIR=$(JDK_TOPDIR)/makefiles -include common/Defs.gmk -include common/Release.gmk - -# A rudimentary attempt at band-aiding the dependency tracking. -DEPS:= $(shell $(FIND) $(JDK_OUTPUTDIR)/newclasses -name "*.class" -type f) \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/bin -type f) \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/lib -type f) - -$(IMAGES_OUTPUTDIR)/_the.images : $(DEPS) $(JARS) - $(MKDIR) -p $(@D) -# Restart this makefile, ugly, but since double colon (::) rules -# have been used in Release.gmk, it is impossible to craft on -# dependencies on these. I.e. -do-not-use- :: rules!!!!! -# Repeat after me: -do-not-use- :: rules!!!!! - $(MAKE) -j1 -f OldImages.gmk $(IMAGES_MAKE_ARGS) images - $(TOUCH) $@ - -.PHONY: default diff --git a/jdk/makefiles/Tools.gmk b/jdk/makefiles/Tools.gmk index 71ffde7e397..3f0a8dd02ab 100644 --- a/jdk/makefiles/Tools.gmk +++ b/jdk/makefiles/Tools.gmk @@ -123,3 +123,27 @@ TOOL_WRAPPERGENERATOR=$(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \ TOOL_TOBIN=$(JAVA) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \ sun.awt.X11.ToBin + +########################################################################################## + +# Tools needed on solaris because OBJCOPY is broken. + +$(eval $(call SetupNativeCompilation,ADD_GNU_DEBUGLINK,\ + SRC:=$(JDK_TOPDIR)/make/tools/add_gnu_debuglink,\ + LANG:=C,\ + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_LD),\ + LDFLAGS:=-lelf,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/add_gnu_debuglink,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/btbin,\ + PROGRAM:=add_gnu_debuglink)) + +$(eval $(call SetupNativeCompilation,FIX_EMPTY_SEC_HDR_FLAGS,\ + SRC:=$(JDK_TOPDIR)/make/tools/fix_empty_sec_hdr_flags,\ + LANG:=C,\ + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_LD),\ + LDFLAGS:=-lelf,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/fix_empty_sec_hdr_flags,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/btbin,\ + PROGRAM:=fix_empty_sec_hdr_flags)) diff --git a/jdk/makefiles/com/sun/crypto/provider/Makefile b/jdk/makefiles/com/sun/crypto/provider/Makefile deleted file mode 100644 index 93a0b1308c7..00000000000 --- a/jdk/makefiles/com/sun/crypto/provider/Makefile +++ /dev/null @@ -1,275 +0,0 @@ -# -# Copyright (c) 2007, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile for building sunjce_provider.jar. -# -# This file was derived from make/javax/crypto/Makefile. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. There are some -# javac options currently specific to JCE, so we recompile now to make -# sure any implicit compilations didn't use any incorrect flags. -# -# For OpenJDK, the jar files built here are installed directly into the -# OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built and signed, and the resulting jar files MUST BE CHECKED INTO -# THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE -# FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual. -# If OpenJDK, installs sunjce_provider.jar. -# If JDK, installs prebuilt -# sunjce_provider.jar. -# -# jar Builds/installs sunjce_provider.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds sunjce_provider.jar -# (does not sign/install) -# -# install-jar Alias for "jar" above. -# -# Other targets (JDK only): -# -# sign Alias for sign-jar -# sign-jar Builds/signs sunjce_provider.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../../.. -PACKAGE = com.sun.crypto.provider -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS = false -JAVAC_LINT_OPTIONS = -Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL = true -include $(BUILDDIR)/common/Defs.gmk - -# -# Location for the newly built classfiles. -# -CLASSDESTDIR = $(TEMPDIR)/classes - -# -# Subdirectories of these are automatically included. -# -AUTO_FILES_JAVA_DIRS = \ - com/sun/crypto/provider - -include $(BUILDDIR)/common/Classes.gmk - -# -# Rules -# - -# -# Some licensees do not get the security sources, but we still need to -# be able to build "all" for them. Check here to see if the sources were -# available. If not, then we don't need to continue this rule. -# - -ifdef OPENJDK -all: build-jar install-jar -else # OPENJDK -ifeq ($(strip $(FILES_java)),) -all: install-prebuilt - $(no-source-warning) -else # FILES_java available -all: build-jar install-prebuilt - $(build-warning) -endif # $(FILES_java) available -endif # OPENJDK - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, they will be -# placed in the appropriate areas. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - - -# ===================================================== -# Build the unsigned sunjce_provider.jar file. -# - -JAR_DESTFILE = $(EXTDIR)/sunjce_provider.jar - -# -# The sunjce_provider.jar needs to be in the extension class directory, -# therefore none of its classes should appear in $(CLASSBINDIR). -# Currently no one is using any of the SunJCE internals, so these files -# should not have been built. -# - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/sunjce_provider.jar - -# -# Build sunjce_provider.jar. -# -$(UNSIGNED_DIR)/sunjce_provider.jar: build $(JCE_MANIFEST_FILE) - $(prep-target) - $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - -ifndef OPENJDK -# ===================================================== -# Sign the provider jar file. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed - -sign: sign-jar - -sign-jar: $(SIGNED_DIR)/sunjce_provider.jar - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/sunjce_provider.jar: $(UNSIGNED_DIR)/sunjce_provider.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/sunjce_provider.jar: - @if [ ! -r $(UNSIGNED_DIR)/sunjce_provider.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunjce_provider.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/sunjce_provider.jar) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, etc. -# - -release: $(SIGNED_DIR)/sunjce_provider.jar - $(RM) $(JCE_BUILD_DIR)/release/sunjce_provider.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/sunjce_provider.jar $(JCE_BUILD_DIR)/release - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install sunjce_provider.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/sunjce_provider.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/sunjce_provider.jar -endif - $(install-file) - -ifndef OPENJDK -install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt SunJCE provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/jce/sunjce_provider.jar $(JAR_DESTFILE) -endif - - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - -.PHONY: build-jar jar install-jar -ifndef OPENJDK -.PHONY: sign sign-jar release install-prebuilt -endif diff --git a/jdk/makefiles/common/Classes.gmk b/jdk/makefiles/common/Classes.gmk deleted file mode 100644 index 07acf6c0106..00000000000 --- a/jdk/makefiles/common/Classes.gmk +++ /dev/null @@ -1,67 +0,0 @@ -# -# Copyright (c) 1995, 2005, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -include $(JDK_TOPDIR)/makefiles/common/Rules.gmk - -# -# Say you built classes into $(ALT_CLASSBINDIR) and then at the end of -# the build you might want to copy them over to $(ALT_CLASSDESTDIR); -# this rule takes care of that. No one should really set these -# variables except the bootstrap/recompile stage of the java compiler. -# -ifdef ALT_CLASSBINDIR - -# By default post-processing is copying. Suppose you want to build -# a jar file then set ALT_CLASSES_DISPOSITION to '../../dest/nameof.jar' -# before including this file. -ifndef ALT_CLASSES_DISPOSITION -ALT_CLASSES_DISPOSITION = copy-classes -endif - -build : $(ALT_CLASSES_DISPOSITION) - -copy-classes: -ifneq ($(ALT_CLASSBINDIR), $(ALT_CLASSDESTDIR)) - @if [ -s $(TEMPDIR)/.classes.list ]; then \ - mkdir -p $(ALT_CLASSDESTDIR); \ - echo "Copying $(ALT_CLASSBINDIR)..."; \ - echo "(cd $(ALT_CLASSBINDIR); tar cf - .) | \ - (cd $(ALT_CLASSDESTDIR); tar xf -)"; \ - (cd $(ALT_CLASSBINDIR); tar cf - .) | \ - (cd $(ALT_CLASSDESTDIR); tar xf -); \ - fi -else # ALT_CLASSBINDIR - @if [ -s $(TEMPDIR)/.classes.list ]; then \ - echo "Copy source and destination are the same: $(ALT_CLASSBINDIR) -- Copy skipped..."; \ - fi -endif # ALT_CLASSBINDIR - -.PHONY: copy-classes -endif # ALT_CLASSBINDIR - diff --git a/jdk/makefiles/common/Cscope.gmk b/jdk/makefiles/common/Cscope.gmk deleted file mode 100644 index 812fd5f0d12..00000000000 --- a/jdk/makefiles/common/Cscope.gmk +++ /dev/null @@ -1,100 +0,0 @@ -# -# Copyright (c) 1998, 2010, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# The cscope.out file is made in the current directory and spans the entire -# source tree. -# -# Things to note: -# 1. We use relative names for cscope. -# 2. We *don't* remove the old cscope.out file, because cscope is smart -# enough to only build what has changed. It can be confused, however, -# if files are renamed or removed, so it may be necessary to manually -# remove cscope.out if a lot of reorganization has occurred. -# -CSDIRS = $(JDK_TOPDIR)/src $(JDK_TOPDIR)/build -CSINCS = $(CSDIRS:%=-I%) - -# -# Set CSFLAGS env variable to -b when using fast cscope to build the fast -# (but large) cscope data bases. -# -CSCOPE = cscope-fast -ifeq ($(CSCOPE), cscope-fast) -CSFLAGS = -b -endif - -# -# Adding .java files pushes the file count of a full workspace up about 2500 -# files, which slows database lookup. Thus allow these files to be added from -# the environment (CSCLASSES=yes). -# -ifdef CSCLASSES -ADDCLASSES= -o -name '*.java' -endif - -# -# Adding CClassHeaders also pushes the file count of a full workspace up about -# 200 files (these files also don't exist in a new workspace, and thus will -# cause the recreation of the database as they get created, which might seem -# A little confusing). Thus allow these files to be added from the environment -# (CSHEADERS=yes). -# -ifndef CSHEADERS -RMCCHEADERS= -o -name CClassHeaders -endif - - -.PRECIOUS: cscope.out - -cscope.out: cscope.files FRC - $(CSCOPE) $(CSFLAGS) - -# -# What files should we include? A simple rule might be just those files under -# SCM control, however this would miss files we create like the opcodes and -# CClassHeaders. The following attempts to find everything that is *useful*. -# (demo directories contain many .java files -# that probably aren't useful for development, and the pkgarchive may contain -# duplicates of files within the source hierarchy). The ordering of the .raw -# file is an attempt to make cscope display the most relevant files first. -# -cscope.files: FRC - @-$(RM) cscope.files cscope.files.raw - echo "$(CSINCS)" > cscope.files - -find $(CSDIRS) $(SCM_DIRS_prune) -o -type d \( -name '.del-*' -o \ - -name '*demo' -o -name pkgarchive $(RMCCHEADERS) \) -prune -o \ - -type f \( -name '*.[Ccshlxy]' -o -name '*.il' -o -name '*.cc' -o \ - -name 'Makefile*' -o -name GNUmakefile -o -name '*.gmk' -o \ - -name '*.cpp' $(ADDCLASSES) \) -print > cscope.files.raw - -egrep -v "\.java|\/build\/" cscope.files.raw >> cscope.files - -fgrep ".java" cscope.files.raw >> cscope.files - -fgrep "/build/" cscope.files.raw >> cscope.files - @-$(RM) cscope.files.raw - -cscope.clean: - -$(RM) cscope.files cscope.files.raw cscope.out - -FRC: diff --git a/jdk/makefiles/common/Defs-embedded.gmk b/jdk/makefiles/common/Defs-embedded.gmk deleted file mode 100644 index 089fae9d586..00000000000 --- a/jdk/makefiles/common/Defs-embedded.gmk +++ /dev/null @@ -1,76 +0,0 @@ -# -# Copyright (c) 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Variable definitions for SE Embedded builds. This file should -# not contain rules. -# -ifdef JAVASE_EMBEDDED - -# Compress jar files -COMPRESS_JARS = true - -# Don't mmap zip files -LIBZIP_CAN_USE_MMAP = false - -# Disable ALSA version check -REQUIRED_ALSA_VERSION = - -# Compilation settings -OTHER_CPPFLAGS += -DJAVASE_EMBEDDED - -# Product naming -PRODUCT_SUFFIX = SE Runtime Environment for Embedded -RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX) - -# Reduced JRE locations -JRE_REDUCED_HEADLESS_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-reduced-headless-image -JRE_REDUCED_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-reduced-image - -# Override on linux to further reduce binary/lib sizes in product build -ifeq ($(PLATFORM), linux) - ifeq ($(VARIANT), OPT) - ifneq ($(NO_STRIP), true) - ifneq ($(DEBUG_BINARIES), true) - POST_STRIP_PROCESS = $(STRIP) --strip-unneeded - endif - endif - endif -endif - -# NIO Platform specific source file location -ifdef CROSS_COMPILE_ARCH - NIO_PLATFORM_CLASSES_ROOT_DIR = $(CLOSED_PLATFORM_SRC)/classes/ -endif - -# For ARM sflt we need to link to a library with improved FP accuracy -# and it must be linked after fdlibm - this places it at the end after libc -# -z muldefs avoids linker errors for duplicate symbols. -ifeq ($(CROSS_COMPILE_ARCH), arm) - EXTRA_LIBS += $(EXT_LIBS_PATH)/sflt_glibc_jdk.a -Xlinker -z -Xlinker muldefs -endif - -endif # JAVASE_EMBEDDED - diff --git a/jdk/makefiles/common/Defs-linux.gmk b/jdk/makefiles/common/Defs-linux.gmk deleted file mode 100644 index 03ff72a27b2..00000000000 --- a/jdk/makefiles/common/Defs-linux.gmk +++ /dev/null @@ -1,430 +0,0 @@ -# -# Copyright (c) 1999, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to Linux. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Warning: the following variables are overriden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -CC_DEPEND = -MM -CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' - -ifndef PLATFORM_SRC - PLATFORM_SRC = $(BUILDDIR)/../src/solaris -endif # PLATFORM_SRC - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris - endif -endif - -# platform specific include files -PLATFORM_INCLUDE_NAME = $(PLATFORM) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files. -DEPEND_SUFFIX = d -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! - -# Default OBJCOPY comes from GNU Binutils on Linux: -DEF_OBJCOPY=/usr/bin/objcopy -ifdef CROSS_COMPILE_ARCH - # don't try to generate .debuginfo files when cross compiling - _JUNK_ := $(shell \ - echo >&2 "INFO: cross compiling for ARCH $(CROSS_COMPILE_ARCH)," \ - "skipping .debuginfo generation.") - OBJCOPY= -else - OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) - ifneq ($(ALT_OBJCOPY),) - _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") - # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path - OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) - endif -endif - -ifdef LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS -# The setting of OBJCOPY above enables the JDK build to import -# .debuginfo files from the HotSpot build. However, adding FDS -# support to the JDK build will occur in phases so a different -# make variable is used to indicate that a particular library -# supports FDS. - -ifeq ($(OBJCOPY),) - _JUNK_ := $(shell \ - echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.") -else - _JUNK_ := $(shell \ - echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.") - - # Library stripping policies for .debuginfo configs: - # all_strip - strips everything from the library - # min_strip - strips most stuff from the library; leaves minimum symbols - # no_strip - does not strip the library at all - # - # Oracle security policy requires "all_strip". A waiver was granted on - # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE. - # - DEF_STRIP_POLICY="min_strip" - ifeq ($(ALT_STRIP_POLICY),) - STRIP_POLICY=$(DEF_STRIP_POLICY) - else - STRIP_POLICY=$(ALT_STRIP_POLICY) - endif - - _JUNK_ := $(shell \ - echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)") -endif -endif - -# -# Default optimization -# - -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -CC_OPT/NONE = -CC_OPT/LOWER = -O2 -CC_OPT/HIGHER = -O3 -CC_OPT/HIGHEST = -O3 - -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) - -# For all platforms, do not omit the frame pointer register usage. -# We need this frame pointer to make it easy to walk the stacks. -# This should be the default on X86, but ia64 and amd64 may not have this -# as the default. -CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 -LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9 -CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 -LDFLAGS_COMMON_sparc += -m32 -mcpu=v9 -CFLAGS_REQUIRED_arm += -fsigned-char -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_ppc += -fsigned-char -D_BIG_ENDIAN -ifeq ($(ZERO_BUILD), true) - CFLAGS_REQUIRED = $(ZERO_ARCHFLAG) - ifeq ($(ZERO_ENDIANNESS), little) - CFLAGS_REQUIRED += -D_LITTLE_ENDIAN - endif - LDFLAGS_COMMON += $(ZERO_ARCHFLAG) -else - CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) -endif - -# If this is a --hash-style=gnu system, use --hash-style=both -# The gnu .hash section won't work on some Linux systems like SuSE 10. -_HAS_HASH_STYLE_GNU:=$(shell $(CC) -dumpspecs | $(GREP) -- '--hash-style=gnu') -ifneq ($(_HAS_HASH_STYLE_GNU),) - LDFLAGS_HASH_STYLE = -Wl,--hash-style=both -endif -LDFLAGS_COMMON += $(LDFLAGS_HASH_STYLE) - -# -# Selection of warning messages -# -GCC_INHIBIT = -Wno-unused -Wno-parentheses -GCC_STYLE = -GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT) - -# -# Treat compiler warnings as errors, if warnings not allowed -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - GCC_WARNINGS += -Werror -endif - -# -# Misc compiler options -# -ifneq ($(ARCH),ppc) - CFLAGS_COMMON = -fno-strict-aliasing -endif -PIC_CODE_LARGE = -fPIC -PIC_CODE_SMALL = -fpic -GLOBAL_KPIC = $(PIC_CODE_LARGE) -CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) -ifeq ($(ARCH), amd64) - CFLAGS_COMMON += -pipe -endif - -# Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1 -DEBUG_FLAG = -g -ifeq ($(FASTDEBUG), true) - ifeq ($(ARCH_DATA_MODEL), 64) - DEBUG_FLAG = -g1 - endif -endif - -# DEBUG_BINARIES overrides everything, use full -g debug information -ifeq ($(DEBUG_BINARIES), true) - DEBUG_FLAG = -g - CFLAGS_REQUIRED += $(DEBUG_FLAG) -endif - -CFLAGS_OPT = $(CC_OPT) -CFLAGS_DBG = $(DEBUG_FLAG) -CFLAGS_COMMON += $(CFLAGS_REQUIRED) - -CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS) -CXXFLAGS_OPT = $(CC_OPT) -CXXFLAGS_DBG = $(DEBUG_FLAG) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java -ifeq ($(FASTDEBUG), true) - CFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) - CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) -endif - -CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"' - -# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here) -ifneq ($(ARCH),alpha) - CPP_ARCH_FLAGS += -D$(ARCH) -else - CPP_ARCH_FLAGS += -D_$(ARCH)_ -endif - -CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DLINUX $(VERSION_DEFINES) \ - -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT - -ifeq ($(ARCH_DATA_MODEL), 64) -CPPFLAGS_COMMON += -D_LP64=1 -endif - -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG -ifneq ($(PRODUCT), java) - CPPFLAGS_DBG += -DLOGGING -endif - -ifdef LIBRARY - # Libraries need to locate other libraries at runtime, and you can tell - # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) - # buried inside the .so. The $ORIGIN says to look relative to where - # the library itself is and it can be followed with relative paths from - # that. By default we always look in $ORIGIN, optionally we add relative - # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths. - # On Linux we add a flag -z origin, not sure if this is necessary, but - # doesn't seem to hurt. - # The environment variable LD_LIBRARY_PATH will over-ride these runpaths. - # Try: 'readelf -d lib*.so' to see these settings in a library. - # - Z_ORIGIN_FLAG/sparc = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/i586 = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/amd64 = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/ia64 = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/arm = - Z_ORIGIN_FLAG/ppc = - Z_ORIGIN_FLAG/zero = -Xlinker -z -Xlinker origin - - LDFLAG_Z_ORIGIN = $(Z_ORIGIN_FLAG/$(ARCH_FAMILY)) - - LDFLAGS_COMMON += $(LDFLAG_Z_ORIGIN) -Xlinker -rpath -Xlinker \$$ORIGIN - LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=$(LDFLAG_Z_ORIGIN) -Xlinker -rpath -Xlinker \$$ORIGIN/%) - -endif - -EXTRA_LIBS += -lc - -LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs -#LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) - -# -# -L paths for finding and -ljava -# -LDFLAGS_OPT = -Xlinker -O1 -LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH) -LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) - -# -# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always -# statically link libgcc but will print a warning with the flag. We don't -# want the warning, so check gcc version first. -# -ifeq ($(CC_MAJORVER),3) - OTHER_LDFLAGS += -static-libgcc -endif - -# Automatic precompiled header option to use (if COMPILE_APPROACH=batch) -# (See Rules.gmk) The gcc 5 compiler might have an option for this? -AUTOMATIC_PCH_OPTION = - -# -# Post Processing of libraries/executables -# -ifeq ($(VARIANT), OPT) - ifneq ($(NO_STRIP), true) - ifneq ($(DEBUG_BINARIES), true) - # Debug 'strip -g' leaves local function Elf symbols (better stack - # traces) - POST_STRIP_PROCESS = $(STRIP) -g - endif - endif -endif - -# -# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker - -# -# Support for Quantify. -# -ifdef QUANTIFY -QUANTIFY_CMD = quantify -QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes -LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) -endif - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -# First try to link against server, if that does not exist link against client. -JVMLIB = -L$(LIBDIR)/$(LIBARCH)/server -L$(LIBDIR)/$(LIBARCH)/client -ljvm -JAVALIB = -ljava $(JVMLIB) - -# -# We want to privatize JVM symbols on Solaris. This is so the user can -# write a function called FindClass and this should not override the -# FindClass that is inside the JVM. At this point in time we are not -# concerned with other JNI libraries because we hope that there will -# not be as many clashes there. -# -PRIVATIZE_JVM_SYMBOLS = false - -USE_PTHREADS = true -override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME -override AWT_RUNPATH = -override HAVE_ALTZONE = false -override HAVE_FILIOH = false -override HAVE_GETHRTIME = false -override HAVE_GETHRVTIME = false -override HAVE_SIGIGNORE = true -override LEX_LIBRARY = -lfl -ifeq ($(STATIC_CXX),true) -override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic -else -override LIBCXX = -lstdc++ -endif -override LIBPOSIX4 = -override LIBSOCKET = -override LIBNSL = -override LIBSCF = -override LIBTHREAD = -override LIBDL = -ldl -override MOOT_PRIORITIES = true -override NO_INTERRUPTIBLE_IO = true -ifeq ($(ARCH), amd64) -override OPENWIN_LIB = $(OPENWIN_HOME)/lib64 -else -override OPENWIN_LIB = $(OPENWIN_HOME)/lib -endif -override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER -override SUN_CMM_SUBDIR = -override THREADS_FLAG = native -override USE_GNU_M4 = true -override USING_GNU_TAR = true -override WRITE_LIBVERSION = false - -# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the -# resulting resolved absolute name of the executable in the environment -# variable EXECNAME. That executable name is then used that to locate the -# installation area. -override USE_EXECNAME = true - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines -HAVE_DPS = no - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = UTF-8 - -# Settings for the JDI - Serviceability Agent binding. -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH) -SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX) -SA_DEBUGINFO_NAME = $(LIB_PREFIX)saproc.debuginfo - -# The JDI - Serviceability Agent binding is not currently supported -# on Linux-ia64. -ifeq ($(ARCH), ia64) - INCLUDE_SA = false -else - INCLUDE_SA = true -endif - -ifdef CROSS_COMPILE_ARCH - # X11 headers are not under /usr/include - OTHER_CFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include -endif diff --git a/jdk/makefiles/common/Defs-macosx.gmk b/jdk/makefiles/common/Defs-macosx.gmk deleted file mode 100644 index e1e8e252e7c..00000000000 --- a/jdk/makefiles/common/Defs-macosx.gmk +++ /dev/null @@ -1,402 +0,0 @@ -# -# Copyright (c) 1999, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to MACOSX. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Warning: the following variables are overriden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -CC_DEPEND = -MM -CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' - -ifndef PLATFORM_SRC - PLATFORM_SRC = $(BUILDDIR)/../src/solaris -endif # PLATFORM_SRC - -PLATFORM_SRC_MACOS = $(BUILDDIR)/../src/macosx - -# BSD build pulls its platform sources from the solaris tree. -JAVA_SRCDIR_LIST = src/$(PLATFORM) src/solaris src/share -NATIVE_SRCDIR_LIST = src/$(PLATFORM) src/solaris src/share - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris - endif -endif - -# platform specific include files -PLATFORM_INCLUDE_NAME = $(OS_NAME) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files. -DEPEND_SUFFIX = d -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! -CC_PROGRAM_OUTPUT_FLAG = -o #trailing blank required! - -# -# Default optimization -# - -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -# For macosx use -Os by default, unless -O3 can be proved to be worth the cost, as per policy -# -CC_OPT/NONE = -CC_OPT/LOWER = -Os -CC_OPT/HIGHER = -Os -CC_OPT/HIGHEST = -Os - -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) - -# For all platforms, do not omit the frame pointer register usage. -# We need this frame pointer to make it easy to walk the stacks. -# This should be the default on X86, but ia64, and x86_64 -# may not have this as the default. -CFLAGS_REQUIRED_x86_64 += -m64 -fno-omit-frame-pointer -D_LITTLE_ENDIAN -LDFLAGS_COMMON_x86_64 += -m64 -CFLAGS_REQUIRED_i586 += -m32 -fno-omit-frame-pointer -D_LITTLE_ENDIAN -LDFLAGS_COMMON_i586 += -m32 -CFLAGS_REQUIRED_ia64 += -m64 -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 -LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9 -CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 -LDFLAGS_COMMON_sparc += -m32 -mcpu=v9 -CFLAGS_REQUIRED_arm += -fsigned-char -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_ppc += -fsigned-char -D_BIG_ENDIAN -ifeq ($(ZERO_BUILD), true) - CFLAGS_REQUIRED = $(ZERO_ARCHFLAG) - ifeq ($(ZERO_ENDIANNESS), little) - CFLAGS_REQUIRED += -D_LITTLE_ENDIAN - endif - LDFLAGS_COMMON += $(ZERO_ARCHFLAG) -else ifeq ($(ARCH), universal) - CFLAGS_REQUIRED += -arch i386 -arch x86_64 -D_LITTLE_ENDIAN - LDFLAGS_COMMON += -arch i386 -arch x86_64 -else - CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) -endif -# 16-byte stack re-alignment on 32-bit Darwin -CFLAGS_REQUIRED_i586 += -mstackrealign - -OTHER_CFLAGS = \ - -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ - -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks - -# -# Selection of warning messages -# -GCC_INHIBIT = -Wno-unused -Wno-parentheses -GCC_STYLE = -GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT) - -# -# Treat compiler warnings as errors, if warnings not allowed -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - GCC_WARNINGS += -Werror -endif - -# -# Misc compiler options -# -ifneq ($(ARCH),ppc) - CFLAGS_COMMON = -fno-strict-aliasing -endif -PIC_CODE_LARGE = -fPIC -PIC_CODE_SMALL = -fpic -GLOBAL_KPIC = $(PIC_CODE_LARGE) -CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) -ifeq ($(ARCH), x86_64) - CFLAGS_COMMON += -pipe -endif - -# BSD 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1 -DEBUG_FLAG = -g -ifeq ($(FASTDEBUG), true) - ifeq ($(ARCH_DATA_MODEL), 64) - DEBUG_FLAG = -g1 - endif -endif - -# DEBUG_BINARIES overrides everything, use full -g debug information -ifeq ($(DEBUG_BINARIES), true) - DEBUG_FLAG = -g - CFLAGS_REQUIRED += $(DEBUG_FLAG) -endif - -CFLAGS_OPT = $(CC_OPT) -CFLAGS_DBG = $(DEBUG_FLAG) -CFLAGS_COMMON += $(CFLAGS_REQUIRED) - -CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS) -CXXFLAGS_OPT = $(CC_OPT) -CXXFLAGS_DBG = $(DEBUG_FLAG) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java -ifeq ($(FASTDEBUG), true) - CFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) - CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) -endif - -CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"' - -# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here) -ifneq ($(ARCH),alpha) - CPP_ARCH_FLAGS += -D$(ARCH) -else - CPP_ARCH_FLAGS += -D_$(ARCH)_ -endif -CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -D_ALLBSD_SOURCE $(VERSION_DEFINES) \ - -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT - -CPPFLAGS_COMMON += -DMACOSX - -ifeq ($(ARCH_DATA_MODEL), 64) -CPPFLAGS_COMMON += -D_LP64=1 -endif - -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG -ifneq ($(PRODUCT), java) - CPPFLAGS_DBG += -DLOGGING -endif - -# Libraries need to locate other libraries at runtime, and you can tell -# a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) -# buried inside the .{so,dylib}. The {$ORIGIN,@loader_path/} says to look -# relative to where the library itself is and it can be followed -# with relative paths from that. By default we always look in -# {$ORIGIN,@loader_path/}, optionally we add relative paths if the Makefile -# sets LD_RUNPATH_EXTRAS to those relative paths. -# Except on MacOS X we add a flag -z origin, not sure if this is necessary, -# but doesn't seem to hurt. -# The environment variable LD_LIBRARY_PATH will over-ride these runpaths. -# See 'man {dyld,rtld}' for more information. -# Try: 'readelf -d lib*.so' to see these settings in a library. -# -LDFLAGS_COMMON += -Xlinker -rpath -Xlinker @loader_path/. -LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-Xlinker -rpath -Xlinker @loader_path/%) -LDFLAGS_COMMON += -Xlinker -install_name -Xlinker @rpath/$(@F) - -# -# -L paths for finding and -ljava -# -LDFLAGS_COMMON += -L$(LIBDIR) - -# -# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always -# statically link libgcc but will print a warning with the flag. We don't -# want the warning, so check gcc version first. -# -ifeq ($(CC_MAJORVER),3) - OTHER_LDFLAGS += -static-libgcc -endif - -# Automatic precompiled header option to use (if COMPILE_APPROACH=batch) -# (See Rules.gmk) The gcc 5 compiler might have an option for this? -AUTOMATIC_PCH_OPTION = - -# -# Post Processing of libraries/executables -# -ifeq ($(VARIANT), OPT) - ifneq ($(NO_STRIP), true) - ifneq ($(DEBUG_BINARIES), true) - # Debug 'strip -S' leaves local function Elf symbols (better stack - # traces) - POST_STRIP_PROCESS = $(STRIP) -S - endif - endif -endif - -# -# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker - -# -# Support for Quantify. -# -ifdef QUANTIFY -QUANTIFY_CMD = quantify -QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes -LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) -endif - -# Darwin does not support linker map files. -LDNOMAP=true - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -JVMLIB = -L$(LIBDIR)/server -L$(LIBDIR)/client -ljvm -JAVALIB = -ljava $(JVMLIB) - -# -# We want to privatize JVM symbols on Solaris. This is so the user can -# write a function called FindClass and this should not override the -# FindClass that is inside the JVM. At this point in time we are not -# concerned with other JNI libraries because we hope that there will -# not be as many clashes there. -# -PRIVATIZE_JVM_SYMBOLS = false - -USE_PTHREADS = true -override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME -override AWT_RUNPATH = -override HAVE_ALTZONE = false -override HAVE_FILIOH = false -override HAVE_GETHRTIME = false -override HAVE_GETHRVTIME = false -override HAVE_SIGIGNORE = true -override LEX_LIBRARY = -lfl -ifeq ($(STATIC_CXX),true) -override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic -else -override LIBCXX = -lstdc++ -endif -override LIBPOSIX4 = -override LIBSOCKET = -override LIBNSL = -override LIBTHREAD = -override LIBDL = -override MOOT_PRIORITIES = true -override NO_INTERRUPTIBLE_IO = true -override OPENWIN_HOME = $(X11_PATH) -override OPENWIN_LIB = $(OPENWIN_HOME)/lib -override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER -override SUN_CMM_SUBDIR = -override THREADS_FLAG = native -override USE_GNU_M4 = true -override USING_GNU_TAR = true -override WRITE_LIBVERSION = false - -ifdef ALT_X11_PATH - X11_PATH = $(ALT_X11_PATH) -else - X11_PATH = /usr/X11R6 -endif - -ifdef ALT_PACKAGE_PATH - PACKAGE_PATH = $(ALT_PACKAGE_PATH) -else - PACKAGE_PATH = /opt/local -endif - -# ALSA -ifdef ALT_ALSA_LIB_PATH - ALSA_LIB_PATH = $(ALT_ALSA_LIB_PATH) -else - ALSA_LIB_PATH = $(PACKAGE_PATH)/lib -endif - -ifdef ALT_ALSA_HEADERS_PATH - ALSA_HEADERS_PATH = $(ALT_ALSA_HEADERS_PATH) -else - ALSA_HEADERS_PATH = $(PACKAGE_PATH)/include -endif - -# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the -# resulting resolved absolute name of the executable in the environment -# variable EXECNAME. That executable name is then used that to locate the -# installation area. -override USE_EXECNAME = true - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines -HAVE_DPS = no - -SYSTEM_ZLIB = true - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = UTF-8 - -# Settings for the JDI - Serviceability Agent binding. - -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH) -SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX) - -# The JDI - Serviceability Agent binding is not currently supported -# on ia64. -ifeq ($(ARCH), ia64) - INCLUDE_SA = false -else - INCLUDE_SA = true -endif - -ifdef CROSS_COMPILE_ARCH - # X11 headers are not under /usr/include - OTHER_CFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include -endif - -LIB_LOCATION ?= $(LIBDIR) diff --git a/jdk/makefiles/common/Defs-solaris.gmk b/jdk/makefiles/common/Defs-solaris.gmk deleted file mode 100644 index 7632e6767f1..00000000000 --- a/jdk/makefiles/common/Defs-solaris.gmk +++ /dev/null @@ -1,757 +0,0 @@ -# -# Copyright (c) 1995, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to Solaris. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Warning: the following variables are overridden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) -# LINTFLAGS (set $(OTHER_LINTFLAGS) instead) -# -# Note: CPPFLAGS are used in C and C++ compiles. -# - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -ifndef PLATFORM_SRC -PLATFORM_SRC = $(BUILDDIR)/../src/solaris -endif # PLATFORM_SRC - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris - endif -endif - -# platform specific include files -PLATFORM_INCLUDE_NAME = $(PLATFORM) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files -DEPEND_SUFFIX = d -# suffix used for lint files -LINT_SUFFIX = ln -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! - -ifdef ENABLE_FULL_DEBUG_SYMBOLS -# Only check for Full Debug Symbols support on Solaris if it is -# specifically enabled. Hopefully, it can be enabled by default -# once the .debuginfo size issues are worked out. - -# Default OBJCOPY comes from the SUNWbinutils package: -DEF_OBJCOPY=/usr/sfw/bin/gobjcopy -ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64) - # On Solaris AMD64/X64, gobjcopy is not happy and fails: - # - # usr/sfw/bin/gobjcopy --add-gnu-debuglink=.debuginfo .so - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: libsaproc.debuginfo: Bad value - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value - _JUNK_ := $(shell \ - echo >&2 "INFO: $(DEF_OBJCOPY) is not working on Solaris AMD64/X64") - OBJCOPY= -else - OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) - ifneq ($(ALT_OBJCOPY),) - _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") - # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path - OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) - endif -endif - -ifdef LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS -# The setting of OBJCOPY above enables the JDK build to import -# .debuginfo files from the HotSpot build. However, adding FDS -# support to the JDK build will occur in phases so a different -# make variable is used to indicate that a particular library -# supports FDS. - -ifeq ($(OBJCOPY),) - _JUNK_ := $(shell \ - echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.") -else - _JUNK_ := $(shell \ - echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.") - - # Library stripping policies for .debuginfo configs: - # all_strip - strips everything from the library - # min_strip - strips most stuff from the library; leaves minimum symbols - # no_strip - does not strip the library at all - # - # Oracle security policy requires "all_strip". A waiver was granted on - # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE. - # - DEF_STRIP_POLICY="min_strip" - ifeq ($(ALT_STRIP_POLICY),) - STRIP_POLICY=$(DEF_STRIP_POLICY) - else - STRIP_POLICY=$(ALT_STRIP_POLICY) - endif - _JUNK_ := $(shell \ - echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)") -endif -endif -endif - -# -# Java default optimization (-x04/-O2) etc. Applies to the VM. -# -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -# -# If -Xa is in CFLAGS_COMMON it will end up ahead of $(CC_OPT) for the -# optimized build, and that ordering of the flags completely freaks -# out cc. Hence, -Xa is instead in each CFLAGS variant. -# -# The more unusual options to the Sun C compiler: -# -v Stricter type checking, more error checking -# (To turn ALL warnings into fatals, use -errwarn=%all) -# -xstrconst Place string literals and constants in read-only area -# (means you can't write on your string literals) -# -xs Force debug information (stabs) into the .so or a.out -# (makes the library/executable debuggable without the -# .o files needing to be around, but at a space cost) -# -g & -O If you add the -g option to the optimized compiles -# you will get better stack retraces, the code is -# still optimized. This includes a space cost too. -# -xc99=%none Do NOT allow for c99 extensions to be used. -# e.g. declarations must precede statements -# -xCC Allow the C++ style of comments in C: // -# Required with many of the source files. -# -mt Assume multi-threaded (important) -# -# The more unusual options to the Sun C compiler: -# +w Print more warnings -# +w2 Maximum warnings -# - -# -# Debug flag for C and C++ compiler -# -CFLAGS_DEBUG_OPTION = -g $(CC_OPT/NONE) -CXXFLAGS_DEBUG_OPTION = -g $(CXX_OPT/NONE) - -# Turn off -g if we are doing tcov build -ifdef TCOV_BUILD - CFLAGS_DEBUG_OPTION= - CXXFLAGS_DEBUG_OPTION= -endif - -# FASTDEBUG: Optimize the -g builds, gives us a faster debug java -# If true adds -O to the debug compiles. This allows for any assert -# tests to remain and debug checking. The resulting code is faster -# but less debuggable. Stack traces are still valid, although only -# approximate line numbers are given. Printing of local variables -# during a debugging session is not possible, but stepping and -# printing of global or static variables should be possible. -# Performance/size of files should be about the same, maybe smaller. -# -ifeq ($(FASTDEBUG), true) - CFLAGS_DEBUG_OPTION = -g $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) - CXXFLAGS_DEBUG_OPTION = -g0 $(CXX_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) -endif - -CFLAGS_COMMON = -L$(OBJDIR) - -# Do not allow C99 language features like declarations in code etc. -CFLAGS_COMMON += -xc99=%none - -# Allow C++ comments in C code -CFLAGS_COMMON += -xCC - -# Show error message tags on errors -CFLAGS_COMMON += -errshort=tags -CXXFLAGS_COMMON += -errtags=yes - -# Optimization flags -CFLAGS_OPT = $(CC_OPT) - -# Debug version flags -CFLAGS_DBG = $(CFLAGS_DEBUG_OPTION) - -# Required C compiler flags -CFLAGS_COMMON += -Xa $(CFLAGS_REQUIRED) - -# Maximum warnings all the time -CXXFLAGS_COMMON += +w -CFLAGS_COMMON += -v - -# Assume MT behavior all the time (important) -CXXFLAGS_COMMON += -mt -CFLAGS_COMMON += -mt - -# Assume no C++ exceptions are used -CXXFLAGS_COMMON += -features=no%except -DCC_NOEX - -# For C++, these options tell it to assume nothing about locating libraries -# either at compile time, or at runtime. Use of these options will likely -# require the use of -L and -R options to indicate where libraries will -# be found at compile time (-L) and at runtime (-R). -# The /usr/lib location comes for free, so no need to specify that one. -# Note: C is much simplier and there is no need for these options. This -# is mostly needed to avoid dependencies on libraries in the -# Compiler install area, also see LIBCXX and LIBM. -CXXFLAGS_COMMON += -norunpath -xnolib - -# -# Treat compiler warnings as errors, if requested -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - CFLAGS_COMMON += -errwarn=%all - CXXFLAGS_COMMON += -errwarn=%all -endif - -CXXFLAGS_OPT = $(CXX_OPT) -CXXFLAGS_DBG = $(CXXFLAGS_DEBUG_OPTION) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# Add -xstrconst to the library compiles. This forces all string -# literals into the read-only data section, which prevents them from -# being written to and increases the runtime pages shared on the system. -# -ifdef LIBRARY - CFLAGS_COMMON +=-xstrconst -endif - -# Source browser database -# -# COMPILE_WITH_SB -# If defined adds -xsb to compiles and creates a -# source browsing database during compilation. -# -ifdef COMPILE_WITH_SB - ifeq ($(LIBRARY), java) - CFLAGS_DBG += -xsb - endif -endif - -# Lint Flags: -# -Xa ANSI C plus K&R, favor ANSI rules -# -fd report on old style func defs -# -errchk=structarg report on 64bit struct args by value -# -errchk=longptr64 report on 64bit to 32bit issues (ignores casts) -# -errchk=parentheses report on suggested use of extra parens -# -v suppress unused args -# -x suppress unused externs -# -u suppress extern func/vars used/defined -# -errfmt=simple use one line errors with position info -# $(LINT_XARCH_OPTION) See Compiler-sun.gwk - -LINTFLAGS_COMMON = -Xa -LINTFLAGS_COMMON += -fd -LINTFLAGS_COMMON += -errchk=structarg,longptr64,parentheses -LINTFLAGS_COMMON += -v -LINTFLAGS_COMMON += -x -LINTFLAGS_COMMON += -u -LINTFLAGS_COMMON += -errfmt=simple -LINTFLAGS_OPT = -LINTFLAGS_DBG = - -# The -W0,-noglobal tells the compiler to NOT generate mangled global -# ELF data symbols for file local static data. -# This can break fix&continue, but we'd rather do the same compilations -# for deliverable bits as we do for non-deliverable bits -# Tell the compilers to never generate globalized names, all the time. -CFLAGS_COMMON += -W0,-noglobal - -# If we have a specific arch value to use, add it -CFLAGS_COMMON += $(XARCH_OPTION) -CXXFLAGS_COMMON += $(XARCH_OPTION) -ASFLAGS_COMMON += $(AS_XARCH_OPTION) -EXTRA_LIBS += $(XARCH_OPTION) -LINTFLAGS_COMMON += $(LINT_XARCH_OPTION) - -# -# uncomment the following to build with PERTURBALOT set -# -# OTHER_CFLAGS += -DPERTURBALOT -# - -CPPFLAGS_COMMON = -D__solaris__ -D$(ARCH_FAMILY) -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG - -ifneq ($(PRODUCT), java) - CPPFLAGS_DBG += -DLOGGING -DDBINFO -endif - -ifeq ($(ARCH_FAMILY), i586) - # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the - # Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN - # (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h). - # Note: -Dmacro is the same as #define macro 1 - # -Dmacro= is the same as #define macro - # - CPPFLAGS_COMMON += -DcpuIntel -D_LITTLE_ENDIAN= -D$(LIBARCH) - # Turn off a superfluous compiler error message on Intel - CFLAGS_COMMON += -erroff=E_BAD_PRAGMA_PACK_VALUE -endif - -# Java memory management is based on memory mapping by default, but a -# system only assuming malloc/free can be built by adding -DUSE_MALLOC - -CPPFLAGS_COMMON += -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS -CPPFLAGS_OPT += -DTRIMMED - -LDFLAGS_DEFS_OPTION = -z defs -LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) - -# -# -L paths for finding and -ljava -# -LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH) -LDFLAGS_OPT = -LDFLAGS_DBG = - -# -# We never really want the incremental linker, ever -# The -xildoff option tells Sun's compilers to NOT use incremental linker -# -LDFLAGS_COMMON += -xildoff - -ifdef LIBRARY - # Libraries need to locate other libraries at runtime, and you can tell - # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) - # buried inside the .so. The $ORIGIN says to look relative to where - # the library itself is and it can be followed with relative paths from - # that. By default we always look in $ORIGIN, optionally we add relative - # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths. - # The environment variable LD_LIBRARY_PATH will over-ride these runpaths. - # Try: 'dump -Lv lib*.so' to see these settings in a library. - # - LDFLAGS_COMMON += -R\$$ORIGIN - LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-R\$$ORIGIN/%) -endif - -EXTRA_LIBS += -lc - -# Postprocessing is done on the images directories only -# -ifeq ($(VARIANT), OPT) - ifeq ($(PARTIAL_GPROF), true) - NO_STRIP = true - endif - ifeq ($(GPROF), true) - NO_STRIP = true - endif - ifneq ($(NO_STRIP), true) - # Debug 'strip -x' leaves local function Elf symbols (better stack traces) - POST_STRIP_PROCESS = $(STRIP) -x - endif -endif -POST_MCS_PROCESS=$(MCS) -d -a "JDK $(FULL_VERSION)" - -# -# Sun C compiler will take -M and pass it on to ld. -# Usage: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -ifeq ($(CC_VERSION),gcc) -LD_MAPFILE_FLAG = -Xlinker -M -Xlinker -else -LD_MAPFILE_FLAG = -M -endif - -# -# Variables globally settable from the make command line (default -# values in brackets): -# GPROF (false) -# Eg: % gnumake GPROF=true -GPROF = false -ifeq ($(GPROF), true) - CFLAGS_COMMON += -DGPROF -xpg - EXTRA_LIBS += -xpg -endif - -# PARTIAL_GPROF is to be used ONLY during compilation - it should not -# appear during linking of libraries or programs. It also should -# prevent linking with -z defs to allow a symbol to remain undefined. -# -PARTIAL_GPROF = false -ifeq ($(PARTIAL_GPROF), true) - CFLAGS_GPROF += -xpg - LDFLAGS_DEFS_OPTION = -z nodefs -endif - -# -# For a TCOV build we add in the TCOV_OPTION -# -ifdef TCOV_BUILD - TCOV_OPTION = -xprofile=tcov - LDFLAGS_COMMON += $(TCOV_OPTION) -Kpic - CFLAGS_COMMON += $(TCOV_OPTION) - CXXFLAGS_COMMON += $(TCOV_OPTION) - EXTRA_LIBS += $(TCOV_OPTION) - LDNOMAP=true -endif - -# -# Solaris only uses native threads. -# -THREADS_FLAG= native -THREADS_DIR= threads - -# -# Support for Quantify. -# -ifdef QUANTIFY - QUANTIFY_CMD = quantify - QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes - LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) - ifdef LIBRARY - CFLAGS_COMMON += -K PIC - endif -endif - -# -# Support for Purify. -# -ifdef PURIFY - PURIFY_CMD = /net/suntools.eng/export/tools/sparc/bin/purify - PURIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes - LINK_PRE_CMD = $(PURIFY_CMD) $(PURIFY_OPTIONS) - ifdef LIBRARY - CFLAGS_COMMON += -K PIC - endif -endif - -# -# Different "levels" of optimization. -# -ifeq ($(CC_VERSION),gcc) - - CC_OPT/NONE = - CC_OPT/LOWER = -O2 - CC_OPT/HIGHER = -O3 - CC_OPT/HIGHEST = -O3 - - CXX_OPT/NONE = - CXX_OPT/LOWER = -O2 - CXX_OPT/HIGHER = -O3 - CXX_OPT/HIGHEST = -O3 - - CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer - CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer - - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - # (See Rules.gmk) May need to wait for gcc 5? - AUTOMATIC_PCH_OPTION = - -else - - # Highest could be -xO5, but indications are that -xO5 should be reserved - # for a per-file use, on sources with known performance impacts. - OPT_LEVEL/LOWER = 2 - OPT_LEVEL/HIGHER = 4 - OPT_LEVEL/HIGHEST = 4 - - CC_OPT/NONE = - CC_OPT/LOWER = $(OPT_LEVEL/LOWER:%=-xO%) - CC_OPT/HIGHER = $(OPT_LEVEL/HIGHER:%=-xO%) - CC_OPT/HIGHEST = $(OPT_LEVEL/HIGHEST:%=-xO%) - - CXX_OPT/NONE = - CXX_OPT/LOWER = $(OPT_LEVEL/LOWER:%=-xO%) - CXX_OPT/HIGHER = $(OPT_LEVEL/HIGHER:%=-xO%) - CXX_OPT/HIGHEST = $(OPT_LEVEL/HIGHEST:%=-xO%) - - # We need stack frames at all times - USE_XKEEPFRAME_OPTION = false - ifeq ($(USE_XKEEPFRAME_OPTION),true) - - # Unknown spelling on this option at this time (Maybe in SS13?) - CC_XKEEPFRAME_OPTIONS = -xkeepframe - CXX_XKEEPFRAME_OPTIONS = -xkeepframe - - else - - # On X86, make sure tail call optimization is off - # The z and y are the tail call optimizations. - ifeq ($(ARCH_FAMILY), i586) - CC_NEWER_THAN_58 := \ - $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 8 \) ) - ifeq ($(CC_NEWER_THAN_58),1) - # Somehow, tail call optimization is creeping in. - # Make sure it is off. - # WARNING: These may cause compiler warnings about duplicate -O options - CC_XKEEPFRAME_OPTIONS += -Wu,-O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz - CXX_XKEEPFRAME_OPTIONS += -Qoption ube -O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz - endif - endif - - # On i586 we need to tell the code generator to ALWAYS use a - # frame pointer. - ifeq ($(ARCH_FAMILY), i586) - # Note that in 5.7, this is done with -xregs=no%frameptr - ifeq ($(CC_VER), 5.5) - # It's not exactly clear when this optimization kicks in, the - # current assumption is -xO4 or greater and for C++ with - # the -features=no%except option and -xO4 and greater. - # Bottom line is, we ALWAYS want a frame pointer! - CC_XKEEPFRAME_OPTIONS += -Wu,-Z~B - CXX_XKEEPFRAME_OPTIONS += -Qoption ube -Z~B - endif - - CC_NEWER_THAN_56 := \ - $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 6 \) ) - ifeq ($(CC_NEWER_THAN_56),1) - # Do NOT use frame pointer register as a general purpose opt register - CC_OPT/NONE += -xregs=no%frameptr - CXX_OPT/NONE += -xregs=no%frameptr - CC_XKEEPFRAME_OPTIONS += -xregs=no%frameptr - CXX_XKEEPFRAME_OPTIONS += -xregs=no%frameptr - endif - endif - - # Optimizer for sparc needs to be told not to do certain things - # related to frames or save instructions. - ifeq ($(ARCH_FAMILY), sparc) - # Do not use save instructions instead of add instructions - # This was an optimization starting in SC5.0 that made it hard for us to - # find the "save" instruction (which got turned into an "add") - CC_XKEEPFRAME_OPTIONS += -Wc,-Qrm-s - CXX_XKEEPFRAME_OPTIONS += -Qoption cg -Qrm-s - # Don't allow tail call code optimization. Started in SC5.0. - # We don't like code of this form: - # save - # - # call foo - # restore - # because we can't tell if the method will have a stack frame - # and register windows or not. - CC_XKEEPFRAME_OPTIONS += -Wc,-Qiselect-T0 - CXX_XKEEPFRAME_OPTIONS += -Qoption cg -Qiselect-T0 - endif - - endif - - # Extra options used with HIGHEST - # - # WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be - # done with care, there are some assumptions below that need to - # be understood about the use of pointers, and IEEE behavior. - # - # Use non-standard floating point mode (not IEEE 754) - CC_HIGHEST_EXTRAS += -fns - # Do some simplification of floating point arithmetic (not IEEE 754) - CC_HIGHEST_EXTRAS += -fsimple - # Use single precision floating point with 'float' - CC_HIGHEST_EXTRAS += -fsingle - # Assume memory references via basic pointer types do not alias - # (Source with excessing pointer casting and data access with mixed - # pointer types are not recommended) - CC_HIGHEST_EXTRAS += -xalias_level=basic - # Use intrinsic or inline versions for math/std functions - # (If you expect perfect errno behavior, do not use this) - CC_HIGHEST_EXTRAS += -xbuiltin=%all - # Loop data dependency optimizations (need -xO3 or higher) - CC_HIGHEST_EXTRAS += -xdepend - # Pointer parameters to functions do not overlap - # (Similar to -xalias_level=basic usage, but less obvious sometimes. - # If you pass in multiple pointers to the same data, do not use this) - CC_HIGHEST_EXTRAS += -xrestrict - # Inline some library routines - # (If you expect perfect errno behavior, do not use this) - CC_HIGHEST_EXTRAS += -xlibmil - # Use optimized math routines - # (If you expect perfect errno behavior, do not use this) - # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now - # CC_HIGHEST_EXTRAS += -xlibmopt - ifeq ($(ARCH_FAMILY), sparc) - # Assume at most 8byte alignment, raise SIGBUS on error - ### Presents an ABI issue with customer JNI libs? - ####CC_HIGHEST_EXTRAS += -xmemalign=8s - # Automatic prefetch instructions, explicit prefetch macros - CC_HIGHEST_EXTRAS += -xprefetch=auto,explicit - # Pick ultra as the chip to optimize to - CC_HIGHEST_EXTRAS += -xchip=ultra - endif - ifeq ($(ARCH), i586) - # Pick pentium as the chip to optimize to - CC_HIGHEST_EXTRAS += -xchip=pentium - endif - ifdef LIBRARY - # The Solaris CBE (Common Build Environment) requires that the use - # of appl registers be disabled when compiling a public library (or - # a library that's loaded by a public library) on sparc. - CFLAGS_REQUIRED_sparc += -xregs=no%appl - CFLAGS_REQUIRED_sparcv9 += -xregs=no%appl - endif - CC_NEWER_THAN_56 := \ - $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 6 \) ) - ifeq ($(CC_NEWER_THAN_56),1) - # Presents an ABI issue with customer JNI libs? We must be able to - # to handle 4byte aligned objects? (rare occurance, but possible?) - CFLAGS_REQUIRED_sparc += -xmemalign=4s - endif - # Just incase someone trys to use the SOS9 compilers - ifeq ($(CC_VER), 5.6) - # We MUST allow data alignment of 4 for sparc (sparcv9 is ok at 8s) - CFLAGS_REQUIRED_sparc += -xmemalign=4s - endif - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - # (See Rules.gmk) The SS11 -xpch=auto* options appear to be broken. - AUTOMATIC_PCH_OPTION = - - # Add in keep frame options - CC_OPT/LOWER += $(CC_XKEEPFRAME_OPTIONS) - CC_OPT/HIGHER += $(CC_XKEEPFRAME_OPTIONS) - CC_OPT/HIGHEST += $(CC_XKEEPFRAME_OPTIONS) - CXX_OPT/LOWER += $(CXX_XKEEPFRAME_OPTIONS) - CXX_OPT/HIGHER += $(CXX_XKEEPFRAME_OPTIONS) - CXX_OPT/HIGHEST += $(CXX_XKEEPFRAME_OPTIONS) - - # Add in highest optimization settings - CC_OPT/HIGHEST += $(CC_HIGHEST_EXTRAS) - CXX_OPT/HIGHEST += $(CC_HIGHEST_EXTRAS) - -endif - -# Default optimization settings based on level. -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) -CXX_OPT = $(CXX_OPT/$(OPTIMIZATION_LEVEL)) - -# Flags required all the time -CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -JVMLIB = -L$(LIBDIR)/$(LIBARCH)/server -L$(LIBDIR)/$(LIBARCH)/client -ljvm -JAVALIB = -ljava $(JVMLIB) - -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -# In addition on Solaris, any include file starting with / is deleted, -# this gets rid of things like /usr/include files, which never change. -CC_DEPEND = -xM1 -CC_DEPEND_FILTER = $(SED) -e '/:[ ]*[/]/d' -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' | $(SORT) -u - -# Location of openwin libraries (do we really need this anymore?) -OPENWIN_HOME = /usr/openwin -OPENWIN_LIB = $(OPENWIN_HOME)/lib$(ISA_DIR) - -# Runtime graphics library search paths... -OPENWIN_RUNTIME_LIB = /usr/openwin/lib$(ISA_DIR) -AWT_RUNPATH = -R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_RUNTIME_LIB) - -# C++ Runtime library (libCrun.so), use instead of -lCrun. -# Originally used instead of -lCrun to guarantee use of the system -# .so version and not the .a or .so that came with the compilers. -# With the newer compilers this could probably change back to -lCrun but -# in general this is ok to continue to do. -LIBCXX = /usr/lib$(ISA_DIR)/libCrun.so.1 - -# JDK now requires Solaris 10, so pick up libm.so.2 -LIBM = /usr/lib$(ISA_DIR)/libm.so.2 - -# Socket library -LIBSOCKET = -lsocket - -# Network Services library -LIBNSL = -lnsl - -# service configuration facility library -LIBSCF = -lscf - -# Dynamic Loading library -LIBDL = -ldl - -# GLOBAL_KPIC: If set means all libraries are PIC, position independent code -# EXCEPT for select compiles -# If a .o file is compiled non-PIC then it should be forced -# into the RW data segment with a mapfile option. This is done -# with object files which generated from .s files. -# The -ztext enforces that no relocations remain in the text segment -# so that it remains purely read-only for optimum system performance. -# Some libraries may use a smaller size (13bit -Kpic) on sparc instead of -# (32 bit -KPIC) and will override GLOBAL_KPIC appropriately. -# -PIC_CODE_LARGE = -KPIC -PIC_CODE_SMALL = -Kpic -ifndef TCOV_BUILD - GLOBAL_KPIC = $(PIC_CODE_LARGE) - CXXFLAGS_COMMON += $(GLOBAL_KPIC) - CFLAGS_COMMON += $(GLOBAL_KPIC) - LDFLAGS_COMMON += -ztext -endif # TCOV_BUILD - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines - -HAVE_DPS = yes - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = eucJP UTF-8 PCK - -# Settings for the JDI - Serviceability Agent binding. -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH) -SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX) -SA_DEBUGINFO_NAME = $(LIB_PREFIX)saproc.debuginfo -INCLUDE_SA=true - diff --git a/jdk/makefiles/common/Defs-windows.gmk b/jdk/makefiles/common/Defs-windows.gmk deleted file mode 100644 index 54c9879adf5..00000000000 --- a/jdk/makefiles/common/Defs-windows.gmk +++ /dev/null @@ -1,418 +0,0 @@ -# -# Copyright (c) 1999, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to Windows builds. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -Fo - -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = lib -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = .bat - -# LIB_LOCATION, which for windows identifies where .exe files go, may be -# set by each GNUmakefile. The default is BINDIR. -ifndef LIB_LOCATION - LIB_LOCATION = $(BINDIR) -endif # LIB_LOCATION - -ifndef PLATFORM_SRC - PLATFORM_SRC = $(BUILDDIR)/../src/windows -endif # PLATFORM_SRC - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/windows - endif -endif - -# for backwards compatability, the old "win32" is used here instead of -# the more proper "windows" -PLATFORM_INCLUDE_NAME = win32 -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# The following DLL's are considered MS runtime libraries and should -# not to be REBASEd, see deploy/make/common/Release.gmk. -# msvcr*.dll: Microsoft runtimes -ifeq ($(COMPILER_VERSION), VS2010) - MSVCRNN_DLL = msvcr100.dll - MSVCPNN_DLL = msvcp100.dll -endif - -EXTRA_LFLAGS += /LIBPATH:$(DXSDK_LIB_PATH) - -# C Compiler flag definitions - -# -# Default optimization -# - -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -ifeq ($(CC_VERSION),msvc) - # Visual Studio compiler option definitions: - # -O1 Favors reduced size over speed (-Og -Os -Oy -Ob2 -Gs -GF -Gy) - # -O2 Favors speed over reduced size (-Og -Oi -Ot -Oy -Ob2 -Gs -GF -Gy) - # -Ob2 More aggressive inlining - # -Og Global optimizations - # -Oi Replace some functions with intrinsic or special forms - # -fp:precise (should be the default) - # Improve floating point calculations (disables some optimizations) - # -Os Favor small code - # -Ot Favor faster code - # -Oy Frame pointer omission - # -G6 Used to be -GB? - # -GF Pool strings in read-only memory - # -Gf Pool strings in read-write memory (the default) - # -Gs Controls stack probess - # -GS Adds buffer overflow checks on stacks (the default) - # -EHsc Enables exception handling - # -Gy Function level linking only - # - - CC_OPT/NONE = -Od - CC_OPT/LOWER = -O2 - CC_OPT/HIGHER = -O3 - CC_OPT/HIGHEST = -O3 - - ifeq ($(COMPILER_VERSION), VS2010) - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - AUTOMATIC_PCH_OPTION = - GX_OPTION = -EHsc - GZ_OPTION = -RTC1 - ifeq ($(ARCH_DATA_MODEL), 32) - CC_OPT/HIGHEST = -O2 - CC_OPT/HIGHER = -O1 - CC_OPT/LOWER = -O1 - else - CC_OPT/HIGHEST = -O2 - CC_OPT/HIGHER = -O1 - CC_OPT/LOWER = -O1 - endif - endif - -else # CC_VERSION - # GCC not supported, but left for historical reference... - CC_OPT/NONE = - CC_OPT/LOWER = -O2 - CC_OPT/HIGHER = -O2 - CC_OPT/HIGHEST = -O3 - -endif - -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) - -# Select the runtime support library carefully, need to be consistent -# -# Visual Studio Runtime compiler option definitions: -# -MD Use dynamic multi-threaded runtime library -# -MDd Use debug version (don't use, doesn't mix with -MD DLL's) -# -MT Use static multi-threaded runtime library (-ML is going away) -# -MTd Use static debug version (better than -MDd, no runtime issues) -# -D_DEBUG Change use of malloc/free/etc to use special debug ones (-MTd) -# -# NOTE: We also will use /D _STATIC_CPPLIB so we don't need msvcpnn.dll -# -# If MS_RUNTIME_STATIC is requested we may have a problem, it is no longer -# supported by VS2010 -ifneq ($(MS_RUNTIME_STATIC),true) - MS_RUNTIME_OPTION=-MD -endif -# The _DEBUG macro option (changes things like malloc to use debug version) -MS_RUNTIME_DEBUG_OPTION= -MS_RC_DEBUG_OPTION= -# Externally set environment variable can force any build to use the debug vers -ifeq ($(MFC_DEBUG), true) - ifeq ($(MS_RUNTIME_STATIC),true) - MS_RUNTIME_OPTION=-MTd - else - # This MS debugging flag forces a dependence on the debug - # version of the runtime library (MSVCR*D.DLL), as does -MDd. - # We cannot re-distribute this debug runtime. - MS_RUNTIME_OPTION=-MDd - endif - MS_RUNTIME_DEBUG_OPTION= -D_DEBUG - MS_RC_DEBUG_OPTION= -d _DEBUG -endif - -# Always add _STATIC_CPPLIB definition -STATIC_CPPLIB_OPTION = /D _STATIC_CPPLIB - -# Silence the warning about using _STATIC_CPPLIB -ifneq ($(SHOW_ALL_WARNINGS),true) - # Needed with VS2010 to turn off the deprecated warning. - STATIC_CPPLIB_OPTION += /D _DISABLE_DEPRECATE_STATIC_CPPLIB -endif - -MS_RUNTIME_OPTION += $(STATIC_CPPLIB_OPTION) - -ifeq ($(CC_VERSION),msvc) - # Visual Studio compiler option definitions: - # -Zi Cause *.pdb file to be created, full debug information - # -Z7 Full debug inside the .obj, no .pdb - # -Zd Basic debug, no local variables? In the .obj - # -Zl Don't add runtime library name to obj file? - # -Od Turns off optimization and speeds compilation - # -YX -Fp/.../foobar.pch Use precompiled headers (try someday?) - # -nologo Don't print out startup message - # /D _STATIC_CPPLIB - # Use static link for the C++ runtime (so msvcpnn.dll not needed) - # - CFLAGS_COMMON += -Zi -nologo - CFLAGS_OPT = $(CC_OPT) - CFLAGS_DBG = -Od $(MS_RUNTIME_DEBUG_OPTION) - - CFLAGS_VS2010 += -Zc:wchar_t- - - # All builds get the same runtime setting - CFLAGS_COMMON += $(MS_RUNTIME_OPTION) $(CFLAGS_$(COMPILER_VERSION)) - - LDEBUG = /debug - - ifeq ($(VTUNE_SUPPORT), true) - OTHER_CFLAGS = -Z7 -Ox - LDEBUG += /pdb:NONE - endif - - # VS2010, always need safe exception handlers, not needed on 64bit - ifeq ($(ARCH_DATA_MODEL), 32) - LFLAGS_VS2010 += -SAFESEH - endif - - # LFLAGS are the flags given to $(LINK) and used to build the actual DLL file - BASELFLAGS = -nologo /opt:REF /incremental:no - - LFLAGS = $(BASELFLAGS) $(LDEBUG) $(EXTRA_LFLAGS) $(LFLAGS_$(COMPILER_VERSION)) - LDDFLAGS += $(LFLAGS_$(COMPILER_VERSION)) - -endif - -# -# Preprocessor macro definitions -# -CPPFLAGS_COMMON = -DWIN32 -DIAL -D_LITTLE_ENDIAN -ifeq ($(ARCH), amd64) - CPPFLAGS_COMMON += -D_AMD64_ -Damd64 -else - CPPFLAGS_COMMON += -D_X86_ -Dx86 -endif -CPPFLAGS_COMMON += -DWIN32_LEAN_AND_MEAN - -# -# Output options (use specific filenames to avoid parallel compile errors) -# -CFLAGS_COMMON += -Fd$(OBJDIR)/$(basename $(@F)).pdb -Fm$(OBJDIR)/$(basename $(@F)).map - -# -# Use -wdNNNN to disable warning NNNN. -# C4800 is a warning about bool performance casts (can't make go away) -# -COMPILER_WARNINGS_TO_IGNORE = 4800 -CFLAGS_COMMON += $(COMPILER_WARNINGS_TO_IGNORE:%=-wd%) - -# -# Treat compiler warnings as errors, if requested -# -CFLAGS_COMMON += -W$(COMPILER_WARNING_LEVEL) -ifeq ($(COMPILER_WARNINGS_FATAL),true) - CFLAGS_COMMON += -WX -endif - -# Turn off some warnings by default, enable them all if asked. -ifneq ($(SHOW_ALL_WARNINGS),true) - # The -D _CRT_SECURE_NO_DEPRECATE turns off security/deprecated warnings on - # the standard C library functions like strcpy. - CFLAGS_COMMON += -D _CRT_SECURE_NO_DEPRECATE - # The -D _CRT_NONSTDC_NO_DEPRECATE turns off deprecation warnings about using - # non-standard C POSIX functions. - CFLAGS_COMMON += -D _CRT_NONSTDC_NO_DEPRECATE -endif - -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG -DLOGGING - -CXXFLAGS_COMMON = $(CFLAGS_COMMON) -CXXFLAGS_OPT = $(CFLAGS_OPT) -CXXFLAGS_DBG = $(CFLAGS_DBG) - -ifneq ($(LIBRARY),fdlibm) - EXTRA_LIBS += advapi32.lib -endif - -# -# Path and option to link against the VM, if you have to. -# -JVMLIB = $(LIBDIR)/jvm.lib -JAVALIB = $(LIBDIR)/java.lib - -ifeq ($(CC_VERSION), msvc) - CC_DEPEND = -FD - CC_DEPEND_FILTER = -else # CC_VERSION -# not supported, but left for historical reference... - CC_DEPEND = -MM - CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)&!g' -endif # CC_VERSION - -LIBRARY_SUFFIX = dll -LIB_SUFFIX = lib - -# Settings for the JDI - Serviceability Agent binding. -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/bin -SALIB_NAME = $(LIB_PREFIX)sawindbg.$(LIBRARY_SUFFIX) -SAMAP_NAME = $(LIB_PREFIX)sawindbg.map -SAPDB_NAME = $(LIB_PREFIX)sawindbg.pdb - -ifeq ($(ARCH), ia64) - # SA will never be supported here. - INCLUDE_SA = false -else - INCLUDE_SA = true -endif - -# Settings for the VERSIONINFO tap on windows. -VERSIONINFO_RESOURCE = $(BUILDDIR)/../src/windows/resource/version.rc - -ifneq ($(JDK_BUILD_NUMBER),) - COOKED_BUILD_NUMBER = $(shell $(ECHO) $(JDK_BUILD_NUMBER) | $(SED) -e 's/^b//' -e 's/^0//') -else - COOKED_BUILD_NUMBER = 0 -endif - -# If the update version contains non-numeric characters, we need -# to massage it into a numeric format. -# We use the following formula: -# JDK_UPDATE_VER = JDK_UPDATE_VERSION * 10 + EXCEPTION_VERSION -# -# Here are some examples: -# 1.5.0 b01 -> 5,0,0,1 -# 1.5.0_10 b01 -> 5,0,100,1 -# 1.4.2 b01 -> 4,2,0,1 -# 1.4.2_02 b01 -> 4,2,20,1 -# 1.4.2_02a b01 -> 4,2,21,1 -# 1.4.2_02b b01 -> 4,2,22,1 -ifdef JDK_UPDATE_VERSION - VTMP := $(shell $(ECHO) $(JDK_UPDATE_VERSION) | $(TR) "abcde" "12345") - CAB_CHAR1 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 1, 1);}') - CAB_CHAR2 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 2, 1);}') - CAB_CHAR3 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 3, 1);}') - JDK_UPDATE_META_TAG := U$(MARKETING_NUMBER) - ifeq ($(CAB_CHAR3),) - CAB_CHAR3 := 0 - endif - ifeq ($(CAB_CHAR1), 0) - JDK_UPDATE_VER := $(CAB_CHAR2)$(CAB_CHAR3) - else - JDK_UPDATE_VER := $(CAB_CHAR1)$(CAB_CHAR2)$(CAB_CHAR3) - endif -else - JDK_UPDATE_VER := 0 -endif - -#RC_FLAGS = /l 0x409 /r - -#ifeq ($(VARIANT), OPT) -# RC_FLAGS += -d NDEBUG -#else -# RC_FLAGS += $(MS_RC_DEBUG_OPTION) -#endif - -# Values for the RC variables defined in RC_FLAGS -#JDK_RC_BUILD_ID = $(FULL_VERSION) -#JDK_RC_COMPANY = $(COMPANY_NAME) -#JDK_RC_COMPONENT = $(PRODUCT_NAME) $(JDK_RC_PLATFORM_NAME) binary -#JDK_RC_VER = \ -# $(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER) -#JDK_RC_COPYRIGHT = Copyright \xA9 $(COPYRIGHT_YEAR) -#JDK_RC_NAME = \ -# $(PRODUCT_NAME) $(JDK_RC_PLATFORM_NAME) $(JDK_MINOR_VERSION) $(JDK_UPDATE_META_TAG) -#JDK_RC_FVER = \ -# $(JDK_MINOR_VERSION),$(JDK_MICRO_VERSION),$(JDK_UPDATE_VER),$(COOKED_BUILD_NUMBER) - -# JDK name required here -#RC_FLAGS += -d "JDK_BUILD_ID=$(JDK_RC_BUILD_ID)" \ -# -d "JDK_COMPANY=$(JDK_RC_COMPANY)" \ -# -d "JDK_COMPONENT=$(JDK_RC_COMPONENT)" \ -# -d "JDK_VER=$(JDK_RC_VER)" \ -# -d "JDK_COPYRIGHT=$(JDK_RC_COPYRIGHT)" \ -# -d "JDK_NAME=$(JDK_RC_NAME)" \ -# -d "JDK_FVER=$(JDK_RC_FVER)" - -# Enable 7-Zip LZMA file (de)compression for Java Kernel if it is available -ifeq ($(ARCH_DATA_MODEL), 32) - ifneq ($(KERNEL), off) - # This is a hack to use until 7-Zip (and UPX) bundles can be put - # under /java/devtools. - ifndef DEPLOY_TOPDIR - DEPLOY_TOPDIR=$(JDK_TOPDIR)/../deploy - endif - # Uncomment this block to cause build failure if above assumption false - #DCHK = $(shell if [ ! -d $(DEPLOY_TOPDIR) ] ; then \ - # $(ECHO) deploy_not_a_peer_of_j2se ; \ - #fi ) - #ifeq ($(DCHK), deploy_not_a_peer_of_j2se) - # If a build failure points to control coming here it means - # it means deploy is not in the same directory - # as j2se. Java Kernel can't tolerate that for the time being. - #endif - EC_TMP = $(shell if [ -d $(DEPLOY_TOPDIR)/make/lzma ] ; then \ - $(ECHO) true ; \ - else \ - $(ECHO) false ; \ - fi ) - ifeq ($(EC_TMP), true) - EXTRA_COMP_INSTALL_PATH = lib\\\\deploy\\\\lzma.dll - # Crazy but true: deploy/make/plugin/jinstall/Makefile.jkernel does - # not include deploy/make/common/Defs-windows.gmk, either directly - # or indirectly. But it does include this file, so redundantly declare - # these variables that are in deploy/make/common/Defs-windows.gmk for - # the sake of the Java Kernel part of the deploy build. Whew! - EXTRA_COMP_LIB_NAME = lzma.dll - EXTRA_COMP_PATH = $(OUTPUTDIR)/tmp/deploy/lzma/win32/obj - EXTRA_COMP_CMD_PATH = $(EXTRA_COMP_PATH)/lzma.exe - EXTRA_COMP_LIB_PATH = $(EXTRA_COMP_PATH)/$(EXTRA_COMP_LIB_NAME) - endif - endif -endif diff --git a/jdk/makefiles/common/Defs.gmk b/jdk/makefiles/common/Defs.gmk deleted file mode 100644 index be43455b5fd..00000000000 --- a/jdk/makefiles/common/Defs.gmk +++ /dev/null @@ -1,577 +0,0 @@ -# -# Copyright (c) 1995, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Common variables used by all the Java makefiles. This file should -# not contain rules. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Check for strange explicit settings (change to empty or true) -ifdef OPENJDK - ifneq ($(OPENJDK),true) - x:=$(error "OPENJDK (if defined) can only be set to true") - endif -endif - -# -# On Solaris, the 'make' utility from Sun will not work with these makefiles. -# This little rule is only understood by Sun's make, and is harmless -# when seen by the GNU make tool. If using Sun's make, this causes the -# make command to fail. -# -SUN_MAKE_TEST:sh = echo "ERROR: PLEASE USE GNU VERSION OF MAKE"; exit 33 - -include $(SPEC) -include $(JDK_MAKE_SHARED_DIR)/Platform.gmk - -# Historically PLATFORM_SRC used to be src/$(PLATFORM), but we switched it to -# src/solaris so if you want to build on Linux you didn't need a src/linux -# directory. In an ideal world it would be called src/genunix but we are not -# there yet. -# -ifndef SHARE_SRC - SHARE_SRC = $(BUILDDIR)/../src/share -endif - -# Files that cannot be included in the OpenJDK distribution are -# collected under a parent directory which contains just those files. -ifndef CLOSED_SRC - CLOSED_SRC = $(BUILDDIR)/../src/closed -endif - -# If CLOSE_SRC_INCLUDED isn't set to true, check if there's any -# closed directory. -ifneq ($(CLOSED_SRC_INCLUDED), true) - CLOSED_SRC_INCLUDED := $(shell \ - if [ -d $(CLOSED_SRC) ] ; then \ - echo true; \ - else \ - echo false; \ - fi) -endif - -# Set OPENJDK based on CLOSED_SRC_INCLUDED -ifeq ($(CLOSED_SRC_INCLUDED), false) - OPENJDK = true -endif - -# Define where closed directories are -ifdef OPENJDK - CLOSED_SRC = - CLOSED_SHARE_SRC = -else - ifndef CLOSED_SHARE_SRC - CLOSED_SHARE_SRC = $(CLOSED_SRC)/share - endif -endif - -# -# Get platform definitions -# - -include $(JDK_TOPDIR)/makefiles/common/Defs-$(PLATFORM).gmk - -# -# SE-Embedded support, if enabled -# - -include $(JDK_TOPDIR)/makefiles/common/Defs-embedded.gmk - -# -# Cross-compilation Settings -# -ifdef CROSS_COMPILE_ARCH - # Can't run the tools we just built - USE_ONLY_BOOTDIR_TOOLS = true - - # When cross-compiling CC generates code for the target, but - # some parts of the build generate C code that has to be compiled - # and executed on the build host - HOST_CC is the 'local' compiler. - # For linux the default is /usr/bin/gcc; other platforms need to - # set it explicitly - ifeq ($(PLATFORM), linux) - ifndef HOST_CC - HOST_CC = $(USRBIN_PATH)gcc - endif - endif -else - # Must set HOST_CC if not already set - ifndef HOST_CC - HOST_CC = $(CC) - endif -endif - -# Reset the VM name for client-only builds -ifeq ($(JVM_VARIANT),client) - VM_NAME = client -endif - -# -# Freetype logic is applicable to OpenJDK only -# -ifdef OPENJDK - -ifeq ($(PLATFORM), windows) - DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/win32/freetype-$(ARCH) -endif -ifeq ($(PLATFORM), linux) - DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(PLATFORM)/freetype-$(ARCH) -endif -ifeq ($(PLATFORM), solaris) - # historically for Solaris we have slightly different devtools - # naming conventions - DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/freetype-$(ARCH) -endif - -DEVTOOLS_FT_DIR_EXISTS = $(shell \ - if [ -f $(DEVTOOLS_FT_DIR)/include/ft2build.h ] ; then \ - echo true; \ - else \ - echo false; \ - fi) - - ifdef ALT_FREETYPE_LIB_PATH - FREETYPE_LIB_PATH = $(ALT_FREETYPE_LIB_PATH) - ifeq ($(PLATFORM), macosx) - USING_SYSTEM_FT_LIB=true - endif - else - ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) - FREETYPE_LIB_PATH = $(DEVTOOLS_FT_DIR)/lib - else - ifeq ($(PLATFORM), macosx) - FREETYPE_LIB_PATH = /usr/X11R6/lib - else - FREETYPE_LIB_PATH = /usr/lib - endif - USING_SYSTEM_FT_LIB=true - endif - endif - - ifdef ALT_FREETYPE_HEADERS_PATH - FREETYPE_HEADERS_PATH = $(ALT_FREETYPE_HEADERS_PATH) - else - ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) - FREETYPE_HEADERS_PATH = $(DEVTOOLS_FT_DIR)/include - else - ifeq ($(PLATFORM), macosx) - FREETYPE_HEADERS_PATH = /usr/X11R6/include - else - FREETYPE_HEADERS_PATH = /usr/include - endif - endif - endif -endif - -# -# zlib version -# -ZLIB_VERSION = 1.2.5 - - -# -# Localizations for the different parts of the product beyond English -# - -JRE_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK -PLUGIN_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK -JDK_LOCALES = ja zh_CN - -# -# A list of locales we support but don't have resource files. -# This is defined to optimize the search of resource bundles. -# -JRE_NONEXIST_LOCALES = en en_US de_DE es_ES fr_FR it_IT ja_JP ko_KR sv_SE zh - -# -# For now, most libraries except libjava and libjvm itself link against libjvm -# and libjava, the latter for its exported common utilities. libjava only -# links against libjvm. Programs' makefiles take their own responsibility for -# adding other libs. -# -# The makefiles for these packages do not link against libjvm and libjava. -# This list will eventually go away and each Programs' makefiles -# will have to explicitly declare that they want to link to libjava/libjvm -# -NO_JAVALIB_PKGS = \ - sun.security.mscapi \ - sun.security.krb5 \ - sun.security.pkcs11 \ - sun.security.jgss \ - sun.security.jgss.wrapper \ - sun.security.ec \ - sun.security.smartcardio \ - com.sun.security.auth.module - -ifdef PACKAGE -# put JAVALIB first, but do not lose any platform specific values.... - ifeq (,$(findstring $(PACKAGE),$(NO_JAVALIB_PKGS))) - LDLIBS_COMMON = $(JAVALIB) - endif -endif # PACKAGE - -# -# Libraries that must appear ahead of libc.so on the link command line -# -ifdef PROGRAM - - ifeq ($(PLATFORM), solaris) - LDLIBS_COMMON = -lthread -ldl - endif - - ifeq ($(PLATFORM), linux) - LDLIBS_COMMON = -ldl - endif - - ifeq ($(PLATFORM), macosx) - LDLIBS_COMMON = -pthread - endif - -endif # PROGRAM - -LDLIBS_COMMON += $(EXTRA_LIBS) - -# for generated binaries -BINDIR = $(OUTPUTDIR)/bin$(ISA_DIR) -# for generated libraries -LIBDIR = $(OUTPUTDIR)/lib -ABS_LIBDIR = $(ABS_OUTPUTDIR)/lib -# Optional place to save the windows .lib files -LIBFILES_DIR = $(OUTPUTDIR)/libfiles -# for ext jre files -EXTDIR = $(LIBDIR)/ext -# for generated include files -INCLUDEDIR = $(OUTPUTDIR)/include -# for generated class files -CLASSBINDIR = $(OUTPUTDIR)/classes -DEMOCLASSDIR = $(OUTPUTDIR)/democlasses -# for generated tool class files -BUILDTOOLCLASSDIR = $(OUTPUTDIR)/btclasses -# for build tool jar files -BUILDTOOLJARDIR = $(OUTPUTDIR)/btjars -ABS_BUILDTOOLJARDIR = $(ABS_OUTPUTDIR)/btjars -# for generated tool class files -BUILDTOOLBINDIR = $(OUTPUTDIR)/btbins -# for generated java source files -GENSRCDIR = $(OUTPUTDIR)/gensrc -# for generated C source files (not javah) -GENNATIVESRCDIR = $(OUTPUTDIR)/gennativesrc -# for imported source files -IMPORTSRCDIR = $(OUTPUTDIR)/impsrc -# for imported documents -IMPORTDOCDIR = $(OUTPUTDIR)/impdoc -# for generated demo -DEMODIR = $(OUTPUTDIR)/demo -NEWDEMODIR = $(OUTPUTDIR)/newdemo -# for sample code -SAMPLEDIR = $(OUTPUTDIR)/sample -# for generated documentation -DOCSDIR = $(OUTPUTDIR)/docs$(DOCSDIRSUFFIX) -DOCSDIRSUFFIX = - -# The MESSAGE, WARNING and ERROR files are used to store sanityck and -# warnings and errors. -ifndef ERROR_FILE - ERROR_FILE = $(OUTPUTDIR)/sanityCheckErrors.txt -endif -ifndef WARNING_FILE - WARNING_FILE = $(OUTPUTDIR)/sanityCheckWarnings.txt -endif -ifndef MESSAGE_FILE - MESSAGE_FILE = $(OUTPUTDIR)/sanityCheckMessages.txt -endif - -#where the demo source can be found -DEMOSRCDIR = $(SHARE_SRC)/demo - -#where the sample source can be found -SAMPLESRCDIR = $(SHARE_SRC)/sample - -# An attempt is made to generate unique enough directories for the -# generated files to not have name collisisons. Most build units -# defines PRODUCT (except Release.gmk), but then they may or may -# not define PACKAGE, PROGRAM, and LIBRARY. This code attempts to -# generate a unique OBJDIR/CLASSHDRDIR for each build unit based -# on which of those values are set within each build unit. - -UNIQUE_LOCATION_STRING = tmp - -ifneq ($(PRODUCT),) - UNIQUE_LOCATION_STRING += /$(PRODUCT) -endif - -ifneq ($(PACKAGE),) - UNIQUE_LOCATION_STRING += /$(PACKAGE) -endif - -ifneq ($(PROGRAM),) - UNIQUE_LOCATION_STRING += /$(PROGRAM) -endif - -ifneq ($(LIBRARY),) - ifneq ($(LIBRARY_OUTPUT),) - UNIQUE_LOCATION_STRING += /$(LIBRARY_OUTPUT) - else - UNIQUE_LOCATION_STRING += /$(LIBRARY) - endif -endif - -# the use of += above makes a space separated list which we need to -# remove for filespecs. -# -NULLSTRING := -ONESPACE := $(NULLSTRING) # space before this comment is required. -UNIQUE_PATH = $(subst $(ONESPACE),,$(UNIQUE_LOCATION_STRING)) - -# TEMPDIR is a unique general purpose directory -# need to use 'override' because GNU Make on Linux exports the wrong -# value. -TEMPDIR ?= $(OUTPUTDIR)/$(UNIQUE_PATH) -ABS_TEMPDIR ?= $(ABS_OUTPUTDIR)/$(UNIQUE_PATH) - -# This must be created right away for pattern rules in Sanity.gmk to work. -dummy1:=$(shell $(MKDIR) -p $(TEMPDIR)) -dummy2:=$(shell $(MKDIR) -p $(TEMP_DISK)) - -# OBJDIRNAME is the name of the directory where the object code is to -# be placed. It's name depends on whether the data model architecture -# is 32-bit or not. -ifneq ($(ARCH_DATA_MODEL), 32) - OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) -else - OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) -endif -OBJDIR = $(TEMPDIR)/$(OBJDIRNAME) - -# CLASSHDRDIR is where the generated C Class Header files go. -CLASSHDRDIR = $(TEMPDIR)/CClassHeaders - -# -# CLASSDESTDIR can be used to specify the directory where generated classes -# are to be placed. The default is CLASSBINDIR. -# -ifndef CLASSDESTDIR -CLASSDESTDIR = $(CLASSBINDIR) -endif - -INCLUDES = -I. -I$(CLASSHDRDIR) \ - $(patsubst %,-I%,$(subst $(CLASSPATH_SEPARATOR), ,$(VPATH.h))) $(OTHER_INCLUDES) -OTHER_CPPFLAGS += $(INCLUDES) - -# -# vpaths. These are the default locations searched for source files. -# GNUmakefiles of individual areas often override the default settings. -# There are no longer default vpath entries for C and assembler files -# so we can ensure that libraries don't get their hands on JVM files. -# -# We define an intermediate variable for Java files because -# we use its value later to help define $SOURCEPATH - -ifeq ($(PLATFORM), macosx) - VPATH0.java = $(subst $(ONESPACE),:,$(GENSRCDIR) $(call JavaSrcDirList,,classes)) -else - VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/classes -endif - -ifdef OPENJDK - VPATH.java = $(VPATH0.java) -else - # - # If filenames are duplicated between open/closed workspaces, prefer - # the closed files. - # - # Source ordering is important: some targets depend on closed files - # replacing open ones, and thus the closed file sources must be found - # before the open ones. - # - # Don't reorder without consulting the teams that depend on this behavior. - # - VPATH.java = $(CLOSED_PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(CLOSED_SHARE_SRC)/classes$(CLASSPATH_SEPARATOR)$(VPATH0.java) -endif -vpath %.java $(VPATH.java) -vpath %.class $(CLASSBINDIR) -vpath %.$(OBJECT_SUFFIX) $(OBJDIR) - -# -# VPATH.h is used elsewhere to generate include flags. By default, -# anyone has access to the include files that the JVM area exports, -# namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific -# relatives. -# -VPATH0.h = $(PLATFORM_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/export -ifdef OPENJDK - VPATH.h = $(VPATH0.h) -else - VPATH.h = $(CLOSED_SHARE_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(VPATH0.h) -endif -vpath %.h $(VPATH.h) - -# -# Used in two ways: helps link against libjava.so. Also if overridden -# determines where your shared library is installed. -# -ifndef LIB_LOCATION - LIB_LOCATION = $(LIBDIR)/$(LIBARCH) -endif - -# -# Java header and stub variables -# -CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export))) -CLASSSTUBOBJS = classstubs.$(OBJECT_SUFFIX) -STUBPREAMBLE = $(INCLUDEDIR)/StubPreamble.h - -# -# Classpath seen by javac (different from the one seen by the VM -# running javac), and useful variables. -# -SOURCEPATH = $(VPATH.java) -PKG = $(shell $(EXPR) $(PACKAGE) : '\([a-z]*\)') -PKGDIR = $(subst .,/,$(PACKAGE)) - -# -# The java/javac/jdk variables (JAVAC_CMD, JAVA_CMD, etc.) -# -include $(JDK_MAKE_SHARED_DIR)/Defs-java.gmk - -UNIQUE_PATH_PATTERN = $(subst /,.,$(UNIQUE_PATH)) - -# Run MAKE $@ for a launcher: -# $(call make-launcher, name, mainclass, java-args, main-args) -define make-launcher -$(CD) $(BUILDDIR)/launchers && \ -$(MAKE) -f Makefile.launcher \ - PROGRAM=$(strip $1) \ - MAIN_CLASS=$(strip $2) \ - MAIN_JAVA_ARGS="$(strip $3)" \ - MAIN_ARGS="$(strip $4)" -endef - -# -# Convenient macros -# - -# Prepare $@ target, remove old one and making sure directory exists -define prep-target -mkdir -p $(@D) -rm -f $@ -endef - -# Simple install of $< file to $@ -define install-file -$(prep-target) -$(CP) $< $@ -endef - -define chmod-file -$(CHMOD) $1 $@ -endef - -define install-sym-link -$(LN) -s $1 $@ -endef - -define install-manifest-file -$(install-file) -endef - -# Cleanup rule for after debug java run (hotspot.log file is left around) -# (This could be an old leftover file in a read-only area, use the @- prefix) -HOTSPOT_LOG_NAME = hotspot.log -define java-vm-cleanup -if [ -w $(HOTSPOT_LOG_NAME) ] ; then rm -f $(HOTSPOT_LOG_NAME); fi -endef - -# Current directory -CURRENT_DIRECTORY := $(shell $(PWD)) - -# -# Create BYFILE OPT and DBG settings, if CFLAGS_OPT/foobar.o is set then it is -# used for this file, otherwise the default settings are used. -# -CFLAGS_$(VARIANT)/BYFILE = $(CFLAGS_$(VARIANT)/$(@F)) \ - $(CFLAGS_$(VARIANT)$(CFLAGS_$(VARIANT)/$(@F))) -CXXFLAGS_$(VARIANT)/BYFILE = $(CXXFLAGS_$(VARIANT)/$(@F)) \ - $(CXXFLAGS_$(VARIANT)$(CXXFLAGS_$(VARIANT)/$(@F))) - -# -# Tool flags -# -# EXTRA_CFLAGS are used to define cross-compilation options -# -ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS) -CFLAGS = $(CFLAGS_$(VARIANT)/BYFILE) $(CFLAGS_COMMON) $(OTHER_CFLAGS) $(EXTRA_CFLAGS) -CXXFLAGS = $(CXXFLAGS_$(VARIANT)/BYFILE) $(CXXFLAGS_COMMON) $(OTHER_CXXFLAGS) $(EXTRA_CFLAGS) -CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \ - $(DEFINES) $(OPTIONS:%=-D%) -LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS) -LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON) -LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \ - $(OTHER_LINTFLAGS) - -VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' - -ifdef INSANE - export INSANE -endif - -ifdef ALT_COPYRIGHT_YEAR - COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) -else - COPYRIGHT_YEAR := $(shell $(DATE) '+%Y') -endif - -ifndef OPENJDK -include $(JDK_TOPDIR)/make/closed/common/Defs.gmk -endif - -# Install of imported file (JDK_IMPORT_PATH, or some other external location) -define install-importonly-file -@$(ECHO) "ASSEMBLY_IMPORT: $@" -$(prep-target) -$(CP) $< $@ -@if [ "$(PLATFORM)" = "linux" -a "$(@F)" = "libjvm.so" ] ; then \ - if [ -x /usr/sbin/selinuxenabled ] ; then \ - /usr/sbin/selinuxenabled; \ - if [ $$? = 0 ] ; then \ - $(ECHO) "/usr/bin/chcon -t textrel_shlib_t $@"; \ - /usr/bin/chcon -t textrel_shlib_t $@; \ - if [ $$? != 0 ]; then \ - echo "ERROR: Cannot chcon $@"; \ - fi; \ - fi; \ - fi; \ -fi -endef - -define install-import-file -$(install-importonly-file) -endef - -.PHONY: all build clean clobber diff --git a/jdk/makefiles/common/Demo.gmk b/jdk/makefiles/common/Demo.gmk deleted file mode 100644 index 25e1bd0905c..00000000000 --- a/jdk/makefiles/common/Demo.gmk +++ /dev/null @@ -1,415 +0,0 @@ -# -# Copyright (c) 2004, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c -COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) - -# JDK Demo building jar file. - -# Some names are defined with LIBRARY inside the Defs.gmk file -LIBRARY=$(DEMONAME) -OBJDIR=$(TEMPDIR)/$(DEMONAME) - -# Input: -# DEMONAME - name of the demo -# DEMO_ROOT - path to root of all demo files -# DEMO_DESTDIR - path to final demo destination directory -# -# Optional Input: -# DEMO_SRCDIR - path to source if different from DEMO_ROOT -# DEMO_PSRCDIR - path to additional platform specific source -# DEMO_PKGDIR - sub directory of sources we want -# DEMO_TOPFILES - names of top-level files relative to DEMO_ROOT -# DEMO_MAINCLASS - name of the main class for the jar manifest -# DEMO_NATIVECLASS - name of the class with native methods -# DEMO_DESCRIPTOR - name of service file for jar (relative to DEMO_SRCDIR) -# DEMO_EXTRA_SRCDIR - path to directory that holds extra sources to add -# DEMO_EXTRA_FILES - extra sources relative to DEMO_EXTRA_SRCDIR -# DEMO_OBJECTS - extra native object files needed -# DEMO_MANIFEST_ATTR - extra line to add to the jar manifest file - -# Assume the source directory is the root directory if not set -ifndef DEMO_SRCDIR - DEMO_SRCDIR = $(DEMO_ROOT) -endif -ifndef DEMO_PKGDIR - DEMO_PKGDIR = . -endif - -# Some demos have special needs -ifneq ($(DEMONAME),agent_util) - DEMO_NEEDS_AGENT_UTIL = $(findstring agent_util,$(DEMO_OBJECTS)) -endif -ifneq ($(DEMONAME),java_crw_demo) - DEMO_NEEDS_JAVA_CRW_DEMO = $(findstring java_crw_demo,$(DEMO_OBJECTS)) -endif -ifeq ($(DEMONAME),hprof) - DEMO_NEEDS_NPT = true -endif - -# Place to hold the build area (kind of a temp area) -DEMO_BUILD_AREA = $(DEMOCLASSDIR)/$(PRODUCT)/$(DEMONAME) - -# Destination "src" directory -DEMO_BUILD_SRCDIR = $(DEMO_BUILD_AREA)/src - -ifndef DEMO_SKIP_SRCZIP - DEMO_BUILD_SRCZIP = $(DEMO_BUILD_AREA)/src.zip - DEMO_SOURCE_ZIP = $(DEMO_DESTDIR)/src.zip -endif - -# Place to hold the jar image we are creating -DEMO_JAR_IMAGE = $(DEMO_BUILD_AREA)/jar_image - -# The jar manifest file we will create and use -DEMO_MANIFEST = $(DEMO_BUILD_AREA)/manifest.mf - -# The list of source files or options we will supply to javac -DEMO_JAVAC_INPUT = $(DEMO_BUILD_AREA)/javac_input.txt - -# Any name of javah file -DEMO_JAVAH_FILE = $(DEMO_NATIVECLASS:%=$(DEMO_BUILD_SRCDIR)/%.h) - -# Get complete list of files for this demo -ifdef DEMO_PSRCDIR - DEMO_ALL_FILES2 := $(shell ( $(CD) $(DEMO_PSRCDIR) \ - && $(FIND) $(DEMO_PKGDIR) $(SCM_DIRS_prune) -o -type f -print ) \ - | $(SED) 's@^\./@@' ) - DEMO_ALL_FILES += $(DEMO_ALL_FILES2) -endif -ifdef DEMO_EXTRA_SRCDIR - DEMO_ALL_FILES += $(DEMO_EXTRA_FILES) -endif -DEMO_ALL_FILES1 := $(shell ( $(CD) $(DEMO_SRCDIR) \ - && $(FIND) $(DEMO_PKGDIR) $(SCM_DIRS_prune) -o -type f -print ) \ - | $(SED) 's@^\./@@' ) -DEMO_ALL_FILES += $(DEMO_ALL_FILES1) - -# Just the java sources -DEMO_JAVA_SOURCES = $(filter %.java,$(DEMO_ALL_FILES)) - -# Just the C and C++ sources -DEMO_C_SRC_FILES = $(filter %.c,$(DEMO_ALL_FILES)) -DEMO_CPP_SRC_FILES = $(filter %.cpp,$(DEMO_ALL_FILES)) - -# All the native source files -DEMO_ALL_NATIVE_SOURCES = $(DEMO_C_SRC_FILES) -DEMO_ALL_NATIVE_SOURCES += $(DEMO_CPP_SRC_FILES) -DEMO_ALL_NATIVE_SOURCES += $(filter %.h,$(DEMO_ALL_FILES)) -DEMO_ALL_NATIVE_SOURCES += $(filter %.hpp,$(DEMO_ALL_FILES)) - -# If we have java sources, then define the jar file we will create -ifndef DEMO_JAR_NAME - DEMO_JAR_NAME = $(DEMONAME).jar -endif -ifneq ($(strip $(DEMO_JAVA_SOURCES)),) - DEMO_JAR = $(DEMO_DESTDIR)/$(DEMO_JAR_NAME) -endif - -# If we have native sources, define the native library we will create -ifneq ($(strip $(DEMO_ALL_NATIVE_SOURCES)),) - # Path to native library we will create - DEMO_LIBRARY = \ - $(DEMO_DESTDIR)/lib$(ISA_DIR)/$(LIB_PREFIX)$(DEMONAME).$(LIBRARY_SUFFIX) - # C and C++ compiler flags we need to add to standard flags - DEMO_CPPFLAGS += -I$(DEMO_BUILD_SRCDIR) - # If the npt library is used we need to find the npt.h file - ifneq ($(DEMO_NEEDS_NPT),) - # The npt library is delivered as part of the JRE - DEMO_CPPFLAGS += -I$(SHARE_SRC)/npt -I$(PLATFORM_SRC)/npt - endif - # Is the shared agent_util code needed - ifneq ($(DEMO_NEEDS_AGENT_UTIL),) - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/agent_util.c - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/agent_util.h - endif - # Is the shared java_crw_demo code needed - ifneq ($(DEMO_NEEDS_JAVA_CRW_DEMO),) - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/java_crw_demo.c - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/java_crw_demo.h - endif - # All the native object files we need to build the library - DEMO_OBJECTS += $(DEMO_C_SRC_FILES:%.c=%.$(OBJECT_SUFFIX)) \ - $(DEMO_CPP_SRC_FILES:%.cpp=%.$(OBJECT_SUFFIX)) - # Linking is special depending on whether we had C++ code or on windows - DEMO_NEEDS_CPP = $(strip $(DEMO_CPP_SRC_FILES)) - CPPFLAGS += $(DEMO_CPPFLAGS) - ifeq ($(PLATFORM),windows) - # Note: This is a link with cl.exe, not link.exe, options differ quite - # bit between them. - LINK.demo = $(LINK.c) - LDLIBS.demo = $(EXTRA_LIBS) $(LFLAGS_$(COMPILER_VERSION)) - DEMO_VERSION_INFO = $(OBJDIR)/$(LIBRARY).res - LDLIBS.demo += $(DEMO_VERSION_INFO) - else - ifneq ($(DEMO_NEEDS_CPP),) - LINK.demo = $(LINK.cpp) - LDLIBS.demo = $(LIBCXX) - ifeq ($(PLATFORM),solaris) - LDLIBS.demo += -lc - endif - else - LINK.demo = $(LINK.c) - LDLIBS.demo = $(LDLIBS) - endif - endif -endif - -# Files that are considered resources (need to be in the jar file) -DEMO_RESOURCES += $(filter-out %.java,$(DEMO_ALL_FILES)) - -# All destination files (top level readme files and all sources) -# Note: We exclude the topfiles from the src tree. -DEMO_DEST_TOPFILES = $(DEMO_TOPFILES:%=$(DEMO_DESTDIR)/%) -DEMO_FILTERED_SOURCES = $(filter-out $(DEMO_TOPFILES),$(DEMO_ALL_FILES)) -DEMO_FULL_SOURCES += $(DEMO_FILTERED_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%) - -# Default rule -all: build demo_info - -# Used to populate the destination directories -$(DEMO_DESTDIR)/%: $(DEMO_ROOT)/% - $(install-file) -ifneq ($(DEMO_SRCDIR),$(DEMO_ROOT)) -$(DEMO_DESTDIR)/%: $(DEMO_SRCDIR)/% - $(install-file) -endif -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/% - $(install-file) -ifdef DEMO_PSRCDIR -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_PSRCDIR)/% - $(install-file) -endif -ifdef DEMO_EXTRA_SRCDIR -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_EXTRA_SRCDIR)/% - $(install-file) -endif -ifneq ($(DEMO_NEEDS_AGENT_UTIL),) -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/../agent_util/% - $(install-file) -endif -ifneq ($(DEMO_NEEDS_JAVA_CRW_DEMO),) -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/../java_crw_demo/% - $(install-file) -endif - -# Jar manifest file -MAINMANIFEST = $(JDK_TOPDIR)/make/tools/manifest.mf -$(DEMO_MANIFEST): $(MAINMANIFEST) - @$(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - $(ECHO) "Main-Class: $(DEMO_MAINCLASS)" >> $@ -ifdef DEMO_MANIFEST_ATTR - $(ECHO) "$(DEMO_MANIFEST_ATTR)" >> $@ -endif - -# Populating the jar image directory -$(DEMO_JAR_IMAGE)/%: $(DEMO_SRCDIR)/% - $(install-file) -ifdef DEMO_PSRCDIR -$(DEMO_JAR_IMAGE)/%: $(DEMO_PSRCDIR)/% - $(install-file) -endif -ifdef DEMO_EXTRA_SRCDIR -$(DEMO_JAR_IMAGE)/%: $(DEMO_EXTRA_SRCDIR)/% - $(install-file) -endif -ifdef DEMO_DESCRIPTOR -$(DEMO_JAR_IMAGE)/META-INF/services/$(DEMO_DESCRIPTOR): \ - $(DEMO_SRCDIR)/$(DEMO_DESCRIPTOR) - $(install-file) -endif - -# If we are creating a jar file (we have java code) -ifdef DEMO_JAR - -# Input file for javac -$(DEMO_JAVAC_INPUT): $(DEMO_JAVA_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%) - @$(prep-target) - @for i in $(DEMO_JAVA_SOURCES) ; do \ - $(ECHO) "$(DEMO_BUILD_SRCDIR)/$$i" >> $@ ; \ - done - -# Jar file creation -$(DEMO_JAR): \ - $(DEMO_JAVAC_INPUT) \ - $(DEMO_MANIFEST) \ - $(DEMO_DESCRIPTOR:%=$(DEMO_JAR_IMAGE)/META-INF/services/%) \ - $(DEMO_RESOURCES:%=$(DEMO_JAR_IMAGE)/%) - @$(prep-target) - $(MKDIR) -p $(DEMO_JAR_IMAGE) - $(JAVAC_CMD) -d $(DEMO_JAR_IMAGE) -sourcepath $(DEMO_BUILD_SRCDIR) \ - @$(DEMO_JAVAC_INPUT) - ifeq ($(DEMO_INCL_SRC),true) - $(CP) $(DEMO_JAVA_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%) $(DEMO_JAR_IMAGE) - endif - ifeq ($(DEMO_ONLY_SRC),true) - $(RM) -r $(DEMO_JAR_IMAGE) - $(MKDIR) -p $(DEMO_JAR_IMAGE) - $(CP) -r $(DEMO_BUILD_SRCDIR)/* $(DEMO_JAR_IMAGE) - ifneq ($(DEMO_TOPFILES),) - $(CP) $(DEMO_ROOT)/$(DEMO_TOPFILES) $(DEMO_JAR_IMAGE) - endif - endif - $(BOOT_JAR_CMD) -cfm $@ $(DEMO_MANIFEST) \ - -C $(DEMO_JAR_IMAGE) . \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -endif - -ifndef DEMO_SKIP_SRCZIP - # Create a src.zip file - $(DEMO_BUILD_SRCZIP): $(DEMO_FULL_SOURCES) - @$(prep-target) - $(CD) $(DEMO_BUILD_AREA)/src && $(ZIPEXE) -q -r ../$(@F) . - - # Install the destination src.zip file and create the src tree - $(DEMO_SOURCE_ZIP): $(DEMO_BUILD_SRCZIP) - $(install-file) -endif - -ifeq ($(PLATFORM),windows) -# JDK name required here -RC_FLAGS += /D "JDK_FNAME=$(LIBRARY).dll" \ - /D "JDK_INTERNAL_NAME=$(LIBRARY)" \ - /D "JDK_FTYPE=0x2L" -endif - -# Native library building -ifdef DEMO_LIBRARY - - # Full paths to object files - DEMO_FULL_OBJECTS = $(DEMO_OBJECTS:%=$(OBJDIR)/%) - VPATH= - -# Native compile rules -$(OBJDIR)/%.$(OBJECT_SUFFIX): $(DEMO_BUILD_SRCDIR)/%.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $< - ifneq ($(DEMO_NEEDS_CPP),) -$(OBJDIR)/%.$(OBJECT_SUFFIX): $(DEMO_BUILD_SRCDIR)/%.cpp - @$(prep-target) - $(COMPILE.cpp) $(CC_OBJECT_OUTPUT_FLAG)$@ $< - endif - - # Actual creation of the native shared library (C++ and C are different) -$(DEMO_LIBRARY): $(DEMO_FULL_OBJECTS) - @$(prep-target) - ifeq ($(PLATFORM),windows) - $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(DEMO_VERSION_INFO) $(VERSIONINFO_RESOURCE) - $(LINK.demo) $(SHARED_LIBRARY_FLAG) -Fe$@ \ - $(DEMO_FULL_OBJECTS) $(LDLIBS.demo) - else - $(LINK.demo) $(SHARED_LIBRARY_FLAG) -o $@ \ - $(DEMO_FULL_OBJECTS) $(LDLIBS.demo) - endif - @$(call binary_file_verification,$@) - - # Generation of any javah include file, make sure objects are dependent on it - ifdef DEMO_NATIVECLASS -$(DEMO_JAVAH_FILE): $(DEMO_JAR) - @$(prep-target) - $(JAVAH_CMD) -d $(DEMO_BUILD_SRCDIR) -classpath $(DEMO_JAR) \ - $(DEMO_NATIVECLASS) - @$(java-vm-cleanup) -$(DEMO_FULL_OBJECTS): $(DEMO_JAVAH_FILE) - endif - -endif - -# Build involves populating the destination "src" tree, building the jar and -# native library, and creating a source bundle - -sources: $(DEMO_FULL_SOURCES) - @$(ECHO) "Created $@" - -objects: - @$(ECHO) "Created $@" - -# Why the nested make here? It only works this way, don't know why. -bundles: $(DEMO_BUILD_SRCZIP) - $(RM) -r $(DEMO_DESTDIR) - $(MKDIR) -p $(DEMO_DESTDIR) - $(MAKE) $(DEMO_LIBRARY) $(DEMO_JAR) $(DEMO_SOURCE_ZIP) $(DEMO_DEST_TOPFILES) -# Applets are special, no jar file, no src.zip, everything expanded. -ifdef DEMO_IS_APPLET - @$(ECHO) "Expanding jar file into demos area at $(DEMO_DESTDIR)" - ( $(CD) $(DEMO_DESTDIR) && \ - $(BOOT_JAR_CMD) -xfv $(DEMO_JAR_NAME) \ - $(BOOT_JAR_JFLAGS) && \ - $(RM) -r META-INF $(DEMO_JAR_NAME) && \ - $(java-vm-cleanup) ) - @( $(CD) $(DEMO_DESTDIR) && $(java-vm-cleanup) ) - @$(ECHO) "Expanding source into demos area at $(DEMO_DESTDIR)" - ( $(CD) $(DEMO_DESTDIR) && $(UNZIP) -o src.zip && $(RM) src.zip ) -endif - -build: sources bundles - -# Printing out a demo information line -define printDemoSetting -if [ "$2" != "" ] ; then $(PRINTF) "%-20s %s\n" "$1:" "$2"; fi -endef - -# Print out the demo information -demo_info: - @$(ECHO) "=========================================================" - @$(call printDemoSetting,DEMONAME,$(DEMONAME)) - @$(call printDemoSetting,DEMO_ROOT,$(DEMO_ROOT)) - @$(call printDemoSetting,DEMO_SRCDIR,$(DEMO_SRCDIR)) - @$(call printDemoSetting,DEMO_DESTDIR,$(DEMO_DESTDIR)) - @$(call printDemoSetting,DEMO_JAR,$(DEMO_JAR)) - @$(call printDemoSetting,DEMO_MANIFEST_ATTR,$(DEMO_MANIFEST_ATTR)) - @$(call printDemoSetting,DEMO_PSRCDIR,$(DEMO_PSRCDIR)) - @$(call printDemoSetting,DEMO_EXTRA_SRCDIR,$(DEMO_EXTRA_SRCDIR)) - @$(call printDemoSetting,DEMO_EXTRA_FILES,$(DEMO_EXTRA_FILES)) - @$(call printDemoSetting,DEMO_TOPFILES,$(DEMO_TOPFILES)) - @$(call printDemoSetting,DEMO_MAINCLASS,$(DEMO_MAINCLASS)) - @$(call printDemoSetting,DEMO_DESCRIPTOR,$(DEMO_DESCRIPTOR)) - @$(call printDemoSetting,DEMO_NATIVECLASS,$(DEMO_NATIVECLASS)) - @$(call printDemoSetting,DEMO_LIBRARY,$(DEMO_LIBRARY)) - @$(call printDemoSetting,DEMO_OBJECTS,$(DEMO_OBJECTS)) - @$(call printDemoSetting,DEMO_SOURCE_ZIP,$(DEMO_SOURCE_ZIP)) - @$(ECHO) "=========================================================" - -# Clean rule -clean clobber: - $(RM) -r $(DEMO_BUILD_AREA) - $(RM) -r $(DEMO_DESTDIR) - -# This should not be needed, but some versions of GNU make have a bug that -# sometimes deleted these files for some strange and unknown reason -# (GNU make version 3.78.1 has the problem, GNU make version 3.80 doesn't?) -.PRECIOUS: $(DEMO_FULL_SOURCES) $(DEMO_BUILD_SRCZIP) $(DEMO_SOURCE_ZIP) - -# List phony targets -.PHONY: all build clean clobber demo_info \ - sources bundles - diff --git a/jdk/makefiles/common/Library.gmk b/jdk/makefiles/common/Library.gmk deleted file mode 100644 index 03b76ae22b0..00000000000 --- a/jdk/makefiles/common/Library.gmk +++ /dev/null @@ -1,326 +0,0 @@ -# -# Copyright (c) 1995, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Generic makefile for building shared libraries. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -include $(JDK_TOPDIR)/makefiles/common/Classes.gmk - -# -# It is important to define these *after* including Classes.gmk -# in order to override the values defined inthat makefile. -# - -ifeq ($(LIBRARY), fdlibm) -ifeq ($(PLATFORM),windows) -ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(FDDLIBM_SUFFIX) -ACTUAL_LIBRARY_DIR = $(OBJDIR) -else # PLATFORM -ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(ARCH).$(FDDLIBM_SUFFIX) -ACTUAL_LIBRARY_DIR = $(OBJDIR) -endif #PLATFORM -else # LIBRARY -ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) -ACTUAL_LIBRARY_DIR = $(LIB_LOCATION) -endif -ACTUAL_LIBRARY = $(ACTUAL_LIBRARY_DIR)/$(ACTUAL_LIBRARY_NAME) - -library:: $(ACTUAL_LIBRARY) - -FILES_o = $(patsubst %.c, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -FILES_o += $(patsubst %.s, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_s)))) -FILES_o += $(patsubst %.cpp, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp)))) - -ifeq ($(PLATFORM), macosx) -FILES_o += $(patsubst %.m, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_objc)))) -FILES_o += $(patsubst %.mm, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_objcpp)))) - -INCREMENTAL_BUILD=false - -endif # PLATFORM - -ifeq ($(INCREMENTAL_BUILD),true) -FILES_d = $(patsubst %.c, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -FILES_d += $(patsubst %.cpp, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp)))) -endif # INCREMENTAL_BUILD - -ifeq ($(PLATFORM),solaris) -# List of all lint files, one for each .c file (only for C) -FILES_ln = $(patsubst %.c, %.$(LINT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -endif - -LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) - -# -# C++ libraries must be linked with CC. -# -ifdef CPLUSPLUSLIBRARY -LINKER=$(LINK.cc) -else -LINKER=$(LINK.c) -endif - -$(ACTUAL_LIBRARY):: $(INIT) $(TEMPDIR) $(LIBDIR) $(BINDIR) $(EXTDIR) classheaders - @$(ECHO) Building lib:$(ACTUAL_LIBRARY) -# -# COMPILE_APPROACH: Different approaches to compile up the native object -# files as quickly as possible. -# The setting of parallel works best on Unix, batch on Windows. -# - -COMPILE_FILES_o = $(OBJDIR)/.files_compiled -$(COMPILE_FILES_o): $(FILES_d) $(FILES_o) - @$(ECHO) "$<" >> $@ -clean:: - $(RM) $(COMPILE_FILES_o) - -# -# COMPILE_APPROACH=parallel: Will trigger compilations (just compilations) to -# happen in parallel. Greatly decreases Unix build time, even on single CPU -# machines, more so on multiple CPU machines. Default is 2 compiles -# at a time, but can be adjusted with ALT_PARALLEL_COMPILE_JOBS. -# Note that each .d file will also be dependent on it's .o file, see -# Rules.gmk. -# Note this does not depend on Rules.gmk to work like batch (below) -# and this technique doesn't seem to help Windows build time nor does -# it work very well, it's possible the Windows Visual Studio compilers -# don't work well in a parallel situation, this needs investigation. -# - -ifeq ($(COMPILE_APPROACH),parallel) - -.PHONY: library_parallel_compile - -library_parallel_compile: - @$(ECHO) "Begin parallel compiles: $(shell $(PWD))" - $(MAKE) -j $(PARALLEL_COMPILE_JOBS) $(COMPILE_FILES_o) - @$(ECHO) "Done with parallel compiles: $(shell $(PWD))" - -$(ACTUAL_LIBRARY):: library_parallel_compile - -endif - -# -# COMPILE_APPROACH=batch: Will trigger compilations (just compilations) to -# happen in batch mode. Greatly decreases Windows build time. -# See logic in Rules.gmk for how compiles happen, the $(MAKE) in -# library_batch_compile below triggers the actions in Rules.gmk. -# Note that each .d file will also be dependent on it's .o file, see -# Rules.gmk. -# -ifeq ($(COMPILE_APPROACH),batch) - -.PHONY: library_batch_compile - -library_batch_compile: - @$(ECHO) "Begin BATCH compiles: $(shell $(PWD))" - $(MAKE) $(COMPILE_FILES_o) - $(MAKE) batch_compile - @$(ECHO) "Done with BATCH compiles: $(shell $(PWD))" - $(MAKE) COMPILE_APPROACH=normal $(COMPILE_FILES_o) - -$(ACTUAL_LIBRARY):: library_batch_compile - -endif - -ifeq ($(PLATFORM), windows) - -# -# Library building rules. -# - -$(LIBRARY).lib:: $(OBJDIR) - -ifeq ($(LIBRARY), fdlibm) -$(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lib - -$(OBJDIR)/$(LIBRARY).lib:: $(OBJDIR)/$(LIBRARY).lcf - @$(prep-target) - $(AR) -NODEFAULTLIB:MSVCRT -out:$@ -nologo \ - @$(OBJDIR)/$(LIBRARY).lcf $(OTHER_LCF) $(LDLIBS_COMMON) -else # LIBRARY -# build it into $(OBJDIR) so that the other generated files get put -# there, then copy just the DLL (and MAP file) to the requested directory. -# -$(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lcf - @$(prep-target) - @$(MKDIR) -p $(OBJDIR) - $(LD) -dll -out:$(OBJDIR)/$(@F) \ - -map:$(OBJDIR)/$(LIBRARY).map \ - $(LFLAGS) @$(OBJDIR)/$(LIBRARY).lcf \ - $(OTHER_LCF) $(LDLIBS) - $(CP) $(OBJDIR)/$(@F) $@ - @$(call binary_file_verification,$@) - $(CP) $(OBJDIR)/$(LIBRARY).map $(@D) - $(CP) $(OBJDIR)/$(LIBRARY).pdb $(@D) - -endif # LIBRARY - -$(OBJDIR)/$(LIBRARY).lcf: $(OBJDIR)/$(LIBRARY).res $(COMPILE_FILES_o) $(FILES_m) - @$(prep-target) - @$(MKDIR) -p $(TEMPDIR) - @$(ECHO) $(FILES_o) > $@ -ifndef LOCAL_RESOURCE_FILE - @$(ECHO) $(OBJDIR)/$(LIBRARY).res >> $@ -endif - @$(ECHO) Created $@ - -# JDK name required here -RC_FLAGS += /D "JDK_FNAME=$(LIBRARY).dll" \ - /D "JDK_INTERNAL_NAME=$(LIBRARY)" \ - /D "JDK_FTYPE=0x2L" - -$(OBJDIR)/$(LIBRARY).res: $(VERSIONINFO_RESOURCE) -ifndef LOCAL_RESOURCE_FILE - @$(prep-target) - $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE) -endif - -# -# Install a .lib file if required. -# -ifeq ($(INSTALL_DOT_LIB), true) -$(ACTUAL_LIBRARY):: $(LIBDIR)/$(LIBRARY).lib - -clean:: - -$(RM) $(LIBDIR)/$(LIBRARY).lib - -$(LIBDIR)/$(LIBRARY).lib:: $(OBJDIR)/$(LIBRARY).lib - $(install-file) - -$(LIBDIR)/$(LIBRARY).dll:: $(OBJDIR)/$(LIBRARY).dll - $(install-file) - -endif # INSTALL_DOT_LIB - -else # PLATFORM - -# -# On Solaris, use mcs to write the version into the comment section of -# the shared library. On other platforms set this to false at the -# make command line. -# - -ifneq ($(PLATFORM), macosx) - ARFLAGS = -r -endif - -$(ACTUAL_LIBRARY):: $(COMPILE_FILES_o) $(FILES_m) $(FILES_reorder) - @$(prep-target) - @$(ECHO) "STATS: LIBRARY=$(LIBRARY), PRODUCT=$(PRODUCT), OPTIMIZATION_LEVEL=$(OPTIMIZATION_LEVEL)" - @$(ECHO) "Rebuilding $@ because of $?" -ifeq ($(LIBRARY), fdlibm) - $(AR) $(ARFLAGS) $@ $(FILES_o) -else # LIBRARY - $(LINKER) $(SHARED_LIBRARY_FLAG) -o $@ $(FILES_o) $(LDLIBS) - @$(call binary_file_verification,$@) -ifeq ($(WRITE_LIBVERSION),true) - $(MCS) -d -a "$(FULL_VERSION)" $@ -endif # WRITE_LIBVERSION -endif # LIBRARY - -endif # PLATFORM - -# -# Cross check all linted files against each other -# -ifeq ($(PLATFORM),solaris) -lint.errors : $(FILES_ln) - $(LINT.c) $(FILES_ln) $(LDLIBS) -endif - -# -# Class libraries with JNI native methods get a include to the package. -# -ifdef PACKAGE -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR) -vpath %.c $(SHARE_SRC)/native/$(PKGDIR) -OTHER_INCLUDES += -I$(SHARE_SRC)/native/common -I$(PLATFORM_SRC)/native/common -OTHER_INCLUDES += -I$(SHARE_SRC)/native/$(PKGDIR) \ - -I$(PLATFORM_SRC)/native/$(PKGDIR) -endif - -# -# Clean/clobber rules -# -clean:: - $(RM) -r $(ACTUAL_LIBRARY) - -clobber:: clean - -# -# INCREMENTAL_BUILD means that this workspace will be built over and over -# possibly incrementally. This means tracking the object file dependencies -# on include files so that sources get re-compiled when the include files -# change. When building from scratch and doing a one time build (like -# release engineering or nightly builds) set INCREMENTAL_BUILD=false. -# - -ifeq ($(INCREMENTAL_BUILD),true) - -# -# Workaround: gnumake sometimes says files is empty when it shouldn't -# was: files := $(foreach file, $(wildcard $(OBJDIR)/*.$(DEPEND_SUFFIX)), $(file)) -# -files := $(shell $(LS) $(OBJDIR)/*.$(DEPEND_SUFFIX) 2>/dev/null) - -# -# Only include these files if we have any. -# -ifneq ($(strip $(files)),) - -include $(files) - -endif # files - -endif # INCREMENTAL_BUILD - -# -# Default dependencies -# - -all: build - -build: library - -debug: - $(MAKE) VARIANT=DBG build - -fastdebug: - $(MAKE) VARIANT=DBG FASTDEBUG=true build - -openjdk: - $(MAKE) OPENJDK=true build - -FORCE: - -.PHONY: all build debug fastdebug - diff --git a/jdk/makefiles/common/Mapfile-vers.gmk b/jdk/makefiles/common/Mapfile-vers.gmk deleted file mode 100644 index 15c8ccd519a..00000000000 --- a/jdk/makefiles/common/Mapfile-vers.gmk +++ /dev/null @@ -1,97 +0,0 @@ -# -# Copyright (c) 1998, 2005, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile for linking with mapfiles. -# -# NOTE: Not using a mapfile will expose all your extern functions and -# extern data symbols as part of your interface, so unless your -# extern names are safe from being mistaken as names from other -# libraries, you better use a mapfile, or use a unique naming -# convention on all your extern symbols. -# -# The mapfile will establish versioning by defining the exported interface. -# -# The mapfile can also force certain .o files or elf sections into the -# the different segments of the resulting library/program image. -# -# The macro FILES_m can contain any number of mapfiles. -# - -# Always make sure 'all' is the default rule -mapfile_default_rule: all - -ifeq ($(PLATFORM), solaris) - -ifeq ($(VARIANT), OPT) - # OPT build MUST have a mapfile? - ifndef FILES_m - FILES_m = mapfile-vers - endif - - # If we are re-ordering functions in this solaris library, we need to make - # sure that -xF is added to the compile lines. This option is critical and - # enables the functions to be reordered. - ifdef FILES_reorder - CFLAGS_OPT += -xF - CXXFLAGS_OPT += -xF - endif - -INIT += $(TEMPDIR)/mapfile-vers - -$(TEMPDIR)/mapfile-vers : $(FILES_m) $(FILES_reorder) - $(prep-target) - $(CAT) $(FILES_m) > $@ - ifdef FILES_reorder - $(SED) -e 's=OUTPUTDIR=$(OUTPUTDIR)=' $(FILES_reorder) >> $@ - endif -endif # VARIANT - -ifndef LDNOMAP - LDMAPFLAGS_OPT = -M$(TEMPDIR)/mapfile-vers - LDMAPFLAGS_DBG = $(FILES_m:%=-M%) -endif - -endif # PLATFORM - -ifeq ($(PLATFORM), linux) - -ifeq ($(VARIANT), OPT) - # OPT build MUST have a mapfile? - ifndef FILES_m - FILES_m = mapfile-vers - endif -endif # VARIANT - -ifndef LDNOMAP - LDMAPFLAGS_OPT = $(FILES_m:%=-Xlinker -version-script=%) - LDMAPFLAGS_DBG = $(FILES_m:%=-Xlinker -version-script=%) -endif - -endif # PLATFORM - -LDFLAGS_OPT += $(LDMAPFLAGS_OPT) -LDFLAGS_DBG += $(LDMAPFLAGS_DBG) - diff --git a/jdk/makefiles/common/Modules.gmk b/jdk/makefiles/common/Modules.gmk deleted file mode 100644 index 7c6ccfda5f8..00000000000 --- a/jdk/makefiles/common/Modules.gmk +++ /dev/null @@ -1,479 +0,0 @@ -# -# Copyright (c) 2009, 2010, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -JDK_MODULE_IMAGE_DIR = $(ABS_OUTPUTDIR)/jdk-module-image -JRE_MODULE_IMAGE_DIR = $(ABS_OUTPUTDIR)/jre-module-image - -# -# modules Target to build jdk and jre module image -# -# There is one jar file per module containing classes only. -# All module jars are currently placed under jre/lib directory. -# -# Open issues that need further investigation: -# 1. Classes in jre/lib/ext/dnsns.jar are currently put in jre/lib/jndi-dns -# module. META-INF/services file is not installed. -# 2. Signed jars -# For JDK build, signed jars are copied to the build. -# All jars in the module image are unsigned. - -MODULE_IMAGEBINDIR = bin - -# -# Targets. -# -INITIAL_MODULE_IMAGE_JRE=initial-module-image-jre -INITIAL_MODULE_IMAGE_JDK=initial-module-image-jdk -ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 64) - INITIAL_MODULE_IMAGE_JRE=initial-module-image-jre-sol64 - INITIAL_MODULE_IMAGE_JDK=initial-module-image-jdk-sol64 - endif -endif - -modules modules-clobber \ -initial-module-image-jre initial-module-image-jdk \ -initial-module-image-jre-sol64 initial-module-image-jdk-sol64 \ -trim-module-image-jre trim-module-image-jdk \ -process-module-image-jre process-module-image-jdk :: - @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..." - -# Order is important here, trim jre after jdk image is created -modules:: gen-modules \ - $(INITIAL_MODULE_IMAGE_JRE) $(INITIAL_MODULE_IMAGE_JDK) \ - trim-module-image-jre trim-module-image-jdk \ - process-module-image-jre process-module-image-jdk - -# Don't use these -module-image-jre:: initial-module-image-jre trim-module-image-jre process-module-image-jre -module-image-jdk:: initial-module-image-jdk trim-module-image-jdk process-module-image-jdk - -# -# Paths to these files we need -JDK_MODULE_LICENSES = $(LICENSE_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%) -JDK_MODULE_64_LICENSES = $(LICENSE_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%64) -JDK_MODULE_DOCFILES = $(OTHER_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%) - -JRE_MODULE_LICENSES = $(LICENSE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%) -JRE_MODULE_64_LICENSES = $(LICENSE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%64) -JRE_MODULE_DOCFILES = $(OTHER_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%) -JRE_MODULE_DOCFILES += $(JRE_NAMECHANGE_DOCLIST:%=$(JRE_MODULE_IMAGE_DIR)/%$(TEXT_SUFFIX)) - -###### RULES - -# JDK files -$(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% - $(process-doc-file) -# Removes LICENSE_VERSION or not -ifdef LICENSE_VERSION -$(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -$(JDK_MODULE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -else -$(JDK_MODULE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/% - $(process-doc-file) -endif - -# JRE files -$(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -# Add $(TEXT_SUFFIX) suffix -ifdef TEXT_SUFFIX -$(JRE_MODULE_IMAGE_DIR)/%$(TEXT_SUFFIX): $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -endif -# Removes LICENSE_VERSION or not -ifdef LICENSE_VERSION -$(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -$(JRE_MODULE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -else -$(JRE_MODULE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -endif - -###################################################### -# JRE Image -###################################################### - -MODULES_LIST = $(MODULES_TEMPDIR)/classlist/modules.list - -# Modules in the jre/lib/security directory -POLICY_MODULES = US_export_policy local_policy - -# Modules in the modules/ext directory -EXT_MODULES = localedata security-sunec security-sunjce - -# Build PKCS#11 on all platforms except 64-bit Windows. -PKCS11 = security-sunpkcs11 -ifeq ($(ARCH_DATA_MODEL), 64) - ifeq ($(PLATFORM), windows) - PKCS11 = - endif -endif - -EXT_MODULES += $(PKCS11) - -# Build Microsoft CryptoAPI provider only on (non-64-bit) Windows platform. -ifeq ($(PLATFORM), windows) - ifneq ($(ARCH_DATA_MODEL), 64) - EXT_MODULES += security-sunmscapi - endif -endif - -# Modules for JDK only -JDK_MODULES = tools - -gen-modules: - $(CD) modules; $(MAKE) all - -initial-module-image-jre-setup: - $(RM) -r $(JRE_MODULE_IMAGE_DIR) - $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR) - -# 64-bit solaris jre image contains only the 64-bit add-on files. -initial-module-image-jre-sol64:: initial-module-image-jre-setup \ - $(JRE_MODULE_LICENSES) $(JRE_MODULE_64_LICENSES) - @# Use tar instead of cp to preserve the symbolic links - for dir in bin lib ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(ARCH)' -print` | \ - ($(CD) $(JRE_MODULE_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - $(RM) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'orb.idl'` - $(RM) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'ir.idl'` - -# Construct an initial jre image (initial jdk jre) no trimming or stripping -initial-module-image-jre:: initial-module-image-jre-setup \ - $(JRE_LICENSES) $(JRE_MODULE_DOCFILES) \ - $(BUILDMETAINDEX_JARFILE) - @# Copy in bin directory - $(CD) $(OUTPUTDIR) && $(FIND) bin -depth | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR) - @# CTE plugin security change require new empty directory lib/applet - $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/applet - @# Copy files but not .jar in lib directory - $(CD) $(OUTPUTDIR) && $(FIND) lib -depth | $(EGREP) -v ".jar$$" | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR) - @# - @# copy modules to jre/lib - @# - for m in `$(NAWK) '{print $$1}' $(MODULES_LIST)` ; do \ - $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib ; \ - done - $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/ext - for m in $(EXT_MODULES) ; do \ - $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/ext ; \ - done - for m in $(POLICY_MODULES) ; do \ - $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/security; \ - done - @# Remove jdk modules - for m in $(JDK_MODULES) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar ; \ - done - - @# Make sure all directories are read/execute for everyone - $(CHMOD) a+rx `$(FIND) $(JRE_MODULE_IMAGE_DIR) -type d` - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - @# Remove orb.idl and ir.idl from jre - $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'orb.idl' -exec $(RM) \{} \; - $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'ir.idl' -exec $(RM) \{} \; - @# Generate meta-index to make boot and extension class loaders lazier - $(CD) $(JRE_MODULE_IMAGE_DIR)/lib && \ - $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \ - -o meta-index *.jar - @$(CD) $(JRE_MODULE_IMAGE_DIR)/lib && $(java-vm-cleanup) - $(CD) $(JRE_MODULE_IMAGE_DIR)/lib/ext && \ - $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \ - -o meta-index *.jar - @$(CD) $(JRE_MODULE_IMAGE_DIR)/lib/ext && $(java-vm-cleanup) -ifeq ($(PLATFORM), windows) - @# Remove certain *.lib files - $(CD) $(JRE_MODULE_IMAGE_DIR)/lib && \ - $(RM) java.$(LIB_SUFFIX) jvm.$(LIB_SUFFIX) \ - hpi.$(LIB_SUFFIX) awt.$(LIB_SUFFIX) jawt.$(LIB_SUFFIX) - ifeq ($(ARCH_DATA_MODEL), 32) - @# The Java Kernel JRE image ships with a special VM. It is not included - @# in the full JRE image, so remove it. Also, is it only for 32-bit windows. - $(CD) $(JRE_MODULE_IMAGE_DIR)/bin && $(RM) -r kernel - endif -endif # Windows -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JRE_MODULE_IMAGE_DIR),$(JRE_MAN_PAGES)) -endif # !windows - -# Trim out any extra files not for the jre shipment but wanted in the jdk jre. -# (Note the jdk WILL want the jre image before this trimming) -# Removes server VM on Windows 32bit. -# Remove certain shared libraries that should not be in the jre image -# but should be in the jdk jre image. -trim-module-image-jre:: -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - $(RM) -r $(JRE_MODULE_IMAGE_DIR)/bin/server - endif - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/bin/$$l ; \ - done ; - endif -else # PLATFORM - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$(LIBARCH)/$$l ; \ - done ; - endif -endif # PLATFORM - -# Get list of all Elf files in the jre -JRE_MODULE_ELF_LIST=$(MODULES_TEMPDIR)/jre-elf-files.list -$(JRE_MODULE_ELF_LIST): - @$(prep-target) -ifneq ($(PLATFORM), windows) - $(RM) $@ - $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on Elf files we are shipping) -# (Note the jdk WILL want the jre image before this processing) -process-module-image-jre:: $(JRE_MODULE_ELF_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - for f in `$(CAT) $(JRE_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - for f in `$(CAT) $(JRE_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - $(RM) $(JRE_MODULE_ELF_LIST) - -###################################################### -# JDK Image -###################################################### -# Note: cpio ($(CPIO)) sometimes leaves directories without rx access. - -initial-module-image-jdk-setup: - $(RM) -r $(JDK_MODULE_IMAGE_DIR) - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/jre - ($(CD) $(JRE_MODULE_IMAGE_DIR) && $(FIND) . -depth -print \ - | $(CPIO) -pdum $(JDK_MODULE_IMAGE_DIR)/jre ) - $(RM) -rf $(JDK_MODULE_IMAGE_DIR)/jre/man - $(CHMOD) a+rx `$(FIND) $(JDK_MODULE_IMAGE_DIR) -type d` - -initial-module-image-jdk64-bindemos: - for dir in bin demo ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(LIBARCH)' -print` | \ - ($(CD) $(JDK_MODULE_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - -# Solaris 64 bit image is special -initial-module-image-jdk-sol64:: initial-module-image-jdk-setup \ - initial-module-image-jdk64-bindemos \ - $(JDK_MODULE_LICENSES) $(JDK_MODULARLIZED_64_LICENSES) - -# DB files to add -ifeq ($(OPENJDK),true) - -initial-module-image-jdk-db: - -else - -# Create the list of db *.zip files to bundle with jdk -ABS_DB_PATH :=$(call FullPath,$(CLOSED_SHARE_SRC)/db) -DB_ZIP_LIST = $(shell $(LS) $(ABS_DB_PATH)/*.zip 2>/dev/null) - -initial-module-image-jdk-db: $(DB_ZIP_LIST) - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/db - for d in $(DB_ZIP_LIST); do \ - ($(CD) $(JDK_MODULE_IMAGE_DIR)/db && $(UNZIP) -o $$d); \ - done - -endif - -# Standard jdk image -initial-module-image-jdk:: initial-module-image-jdk-setup \ - initial-module-image-jdk-db \ - $(JDK_MODULE_LICENSES) $(JDK_MODULE_DOCFILES) - $(MKDIR) $(JDK_MODULE_IMAGE_DIR)/lib - @# - @# copy jdk modules to jdk/lib - @# - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/lib - for m in $(JDK_MODULES) ; do \ - $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JDK_MODULE_IMAGE_DIR)/lib ; \ - done - ifeq ($(PLATFORM), windows) - @# - @# lib/ - @# - $(CP) $(LIBDIR)/$(LIB_PREFIX)jvm.$(LIB_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/lib - $(CP) $(LIBDIR)/$(LIB_PREFIX)jawt.$(LIB_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/lib - @# - @# bin/ - @# - @# copy all EXE files and only certain DLL files from BINDIR - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/bin - $(CP) $(BINDIR)/*$(EXE_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - $(CP) $(BINDIR)/jli.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - ifeq ($(COMPILER_VERSION), VS2010) - $(CP) $(BINDIR)/msvc*100.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - endif - ifeq ($(ARCH_DATA_MODEL), 32) - ifeq ($(COMPILER_VERSION), VS2003) - $(CP) $(BINDIR)/msvc*71.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - endif - endif - else # PLATFORM - @# - @# bin/ - @# - ($(CD) $(BINDIR)/.. && $(TAR) cf - \ - `$(FIND) bin \( -type f -o -type l \) -print `) | \ - ($(CD) $(JDK_MODULE_IMAGE_DIR) && $(TAR) xf -) - endif # PLATFORM - @# - @# lib/ct.sym - @# - $(MKDIR) -p $(OUTPUTDIR)/symbols/META-INF/sym - $(JAVAC_CMD) -XDprocess.packages -proc:only \ - -processor com.sun.tools.javac.sym.CreateSymbols \ - -Acom.sun.tools.javac.sym.Jar=$(RT_JAR) \ - -Acom.sun.tools.javac.sym.Dest=$(OUTPUTDIR)/symbols/META-INF/sym/rt.jar \ - $(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS) - $(BOOT_JAR_CMD) c0f $(LIBDIR)/ct.sym \ - -C $(OUTPUTDIR)/symbols META-INF $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - $(CP) $(LIBDIR)/ct.sym $(JDK_MODULE_IMAGE_DIR)/lib/ct.sym - @# - @# CORBA supported orb.idl and ir.idl should be copied to lib - @# - $(CP) $(LIBDIR)/orb.idl $(JDK_MODULE_IMAGE_DIR)/lib/orb.idl - $(CP) $(LIBDIR)/ir.idl $(JDK_MODULE_IMAGE_DIR)/lib/ir.idl - ifeq ($(PLATFORM), linux) - @# - @# on Linux copy jexec from jre/lib to /lib - @# - $(CP) $(LIBDIR)/jexec $(JDK_MODULE_IMAGE_DIR)/lib/jexec - endif # PLATFORM - @# - @# demo, include - @# - $(CP) -r -f $(DEMODIR) $(JDK_MODULE_IMAGE_DIR) - $(CP) -r -f $(SAMPLEDIR) $(JDK_MODULE_IMAGE_DIR) - $(CP) -r $(INCLUDEDIR) $(JDK_MODULE_IMAGE_DIR) - @# - @# Swing BeanInfo generation - @# - $(CD) javax/swing/beaninfo && $(MAKE) JDK_IMAGE_DIR=$(JDK_MODULE_IMAGE_DIR) swing-1.2-beans -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JDK_MODULE_IMAGE_DIR),$(JDK_MAN_PAGES)) -endif # !windows - -# Trim out files we don't want to ship -trim-module-image-jdk:: - @# Remove tools that should not be part of SDK. - for t in $(NOTJDKTOOLS); do \ - $(RM) $(JDK_MODULE_IMAGE_DIR)/bin/$${t}$(EXE_SUFFIX) \ - $(JDK_MODULE_IMAGE_DIR)/bin/*/native_threads/$${t}$(EXE_SUFFIX); \ - done - -# Get list of Elf files in the jdk -JDK_MODULE_ELF_LIST=$(MODULES_TEMPDIR)/jdk-elf-files.list -$(JDK_MODULE_ELF_LIST): - @$(prep-target) -ifneq ($(PLATFORM), windows) - $(RM) $@ - $(FIND) $(JDK_MODULE_IMAGE_DIR)/jre/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JDK_MODULE_IMAGE_DIR)/jre/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ - file `$(FIND) $(JDK_MODULE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on files we are shipping) -process-module-image-jdk:: $(JDK_MODULE_ELF_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - for f in `$(CAT) $(JDK_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - for f in `$(CAT) $(JDK_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - $(RM) $(JDK_MODULE_ELF_LIST) - -###################################################### -# clobber -###################################################### -modules-clobber:: - $(RM) -r $(JDK_MODULE_IMAGE_DIR) - $(RM) -r $(JRE_MODULE_IMAGE_DIR) - -modules modules-clobber:: - @$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..." - @$(java-vm-cleanup) - -.PHONY: modules module-image-jre module-image-jdk \ - initial-module-image-jre initial-module-image-jdk \ - initial-module-image-jre-sol64 initial-module-image-jdk-sol64 \ - initial-module-image-jdk-setup \ - initial-module-image-jdk-db \ - initial-module-image-jdk64-bindemos \ - initial-module-image-jre-setup \ - trim-module-image-jre trim-module-image-jdk \ - process-module-image-jre process-module-image-jdk \ - install-previous-jre install-previous-jdk \ - modules-clobber - -# Force rule -FRC: - diff --git a/jdk/makefiles/common/Program.gmk b/jdk/makefiles/common/Program.gmk deleted file mode 100644 index 5ace9dc8eda..00000000000 --- a/jdk/makefiles/common/Program.gmk +++ /dev/null @@ -1,319 +0,0 @@ -# -# Copyright (c) 1995, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Generic makefile for building executables. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# -# If building programs, use a normal compile approach -# -ifeq ($(COMPILE_APPROACH),batch) - override COMPILE_APPROACH = normal -endif - -# set the platform specific directory for macosx, also this platform shares -# substantial family ties with its siblings (solaris and linux), thus we add -# solaris src path to its compilation dependencies. -ifeq ($(PLATFORM), macosx) - LAUNCHER_PLATFORM_SRC = $(BUILDDIR)/../src/macosx - LAUNCHER_SOLARIS_PLATFORM_SRC = $(BUILDDIR)/../src/solaris -else - LAUNCHER_PLATFORM_SRC = $(PLATFORM_SRC) -endif - -ifndef LAUNCHER_SHARE_SRC - LAUNCHER_SHARE_SRC = $(SHARE_SRC) -endif - -ACTUAL_PROGRAM_NAME = $(PROGRAM)$(EXE_SUFFIX) -ACTUAL_PROGRAM_DIR = $(BINDIR) -ACTUAL_PROGRAM = $(ACTUAL_PROGRAM_DIR)/$(ACTUAL_PROGRAM_NAME) - -# Make sure the default rule is all -program_default_rule: all - -program: $(ACTUAL_PROGRAM) - -# Work-around for missing processor specific mapfiles -ifndef CROSS_COMPILE_ARCH - # reuse the mapfiles in the launcher's directory, the same should - # be applicable to the tool launchers as well. - FILES_m = $(BUILDDIR)/java/main/java/mapfile-$(ARCH) - include $(BUILDDIR)/common/Mapfile-vers.gmk -endif - -include $(JDK_TOPDIR)/makefiles/common/Rules.gmk - -ifdef NEVER_ACT_AS_SERVER_CLASS_MACHINE - OTHER_CPPFLAGS += -DNEVER_ACT_AS_SERVER_CLASS_MACHINE -endif - -# -# Create a dependency on libjli (Java Launcher Infrastructure) -# -# On UNIX, this is a relative dependency using $ORIGIN. Unfortunately, to -# do this reliably on Linux takes a different syntax than Solaris. -# -# On Windows, this is done by using the same directory as the executable -# itself, as with all the Windows libraries. -# -ifeq ($(PLATFORM), macosx) - ifneq ($(ARCH), universal) - LDFLAGS += -Wl,-all_load - endif - LDFLAGS += $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static/libjli.a - - ifeq ($(SYSTEM_ZLIB),true) - OTHER_LDLIBS += -lz - endif -endif - -ifneq (,$(findstring $(PLATFORM), linux solaris)) # UNIX systems - LDFLAGS += -L $(LIBDIR)/$(LIBARCH)/jli - OTHER_LDLIBS += -ljli - ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 32) - LDFLAGS += -R \$$ORIGIN/../lib/$(LIBARCH)/jli - LDFLAGS += -R \$$ORIGIN/../jre/lib/$(LIBARCH)/jli - else - LDFLAGS += -R \$$ORIGIN/../../lib/$(LIBARCH)/jli - LDFLAGS += -R \$$ORIGIN/../../jre/lib/$(LIBARCH)/jli - endif - endif - ifeq ($(PLATFORM), linux) - LDFLAGS += $(LDFLAG_Z_ORIGIN) - LDFLAGS += -Wl,--allow-shlib-undefined - LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/../lib/$(LIBARCH)/jli - LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/../jre/lib/$(LIBARCH)/jli - endif -endif - -ifeq ($(PLATFORM), windows) - JLI_LCF = $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/jli.lcf - ifdef STATIC_JLI - LDFLAGS += -libpath:$(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static - else - LDFLAGS += -libpath:$(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME) - endif - OTHER_LDLIBS += jli.lib -endif - -# -# Launcher specific files. -# -FILES_o = $(OBJDIR)/main.$(OBJECT_SUFFIX) - -$(ACTUAL_PROGRAM):: classes $(INIT) - -# -# Windows only -# -ifeq ($(PLATFORM), windows) - # JDK name required here - RC_FLAGS += /D "JDK_FNAME=$(PROGRAM)$(EXE_SUFFIX)" \ - /D "JDK_INTERNAL_NAME=$(PROGRAM)" \ - /D "JDK_FTYPE=0x1L" - - $(OBJDIR)/$(PROGRAM).res: $(VERSIONINFO_RESOURCE) - @$(prep-target) - ifndef LOCAL_RESOURCE_FILE - $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE) - endif - - $(OBJDIR)/$(PROGRAM).lcf: $(OBJDIR)/$(PROGRAM).res $(FILES_o) - @$(prep-target) - @$(ECHO) $(FILES_o) > $@ - ifndef LOCAL_RESOURCE_FILE - @$(ECHO) $(OBJDIR)/$(PROGRAM).res >> $@ - endif - @$(ECHO) setargv.obj >> $@ - @$(ECHO) Created $@ - - $(ACTUAL_PROGRAM):: $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX) - @$(install-file) - - ifeq ($(ARCH_DATA_MODEL), 32) - STACK_SIZE=327680 - else - # We need more Stack for Windows 64bit - STACK_SIZE=1048576 - endif - - IMVERSION=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER) - $(OBJDIR)/$(PROGRAM).exe.manifest: $(JDK_TOPDIR)/src/windows/resource/java.manifest - @$(prep-target) - $(SED) 's%IMVERSION%$(IMVERSION)%g;s%PROGRAM%$(PROGRAM)%g' $< > $@ - - # We used a hand-crafted manifest file for all executables. - # It is tweaked to embed the build number and executable name. - # Use ";#2" for .dll and ";#1" for .exe in the MT command below: - $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX):: $(OBJDIR)/$(PROGRAM).lcf $(FILES_o) $(JLI_LCF) $(OBJDIR)/$(PROGRAM).exe.manifest - @$(prep-target) - @set -- $?; \ - $(ECHO) Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...}; - $(LD) -out:$@ /STACK:$(STACK_SIZE) \ - -map:$(OBJDIR)/$(PROGRAM).map $(LFLAGS) $(LDFLAGS) \ - @$(OBJDIR)/$(PROGRAM).lcf $(LDLIBS) - ifdef MT - $(MT) /manifest $(OBJDIR)/$(PROGRAM).exe.manifest /outputresource:$@;#1 - endif - @$(call binary_file_verification,$@) -else - # - # Note that we have to link -lthread even when USE_PTHREADS is true. - # This is becuase checkForCorrectLibthread() croaks otherwise. - # - LIBTHREAD = -lthread - ifeq ($(USE_PTHREADS),true) - THREADLIBS = -lpthread $(LIBTHREAD) - else - THREADLIBS = $(LIBTHREAD) - endif - - ifeq ($(PLATFORM), macosx) - THREADLIBS = -pthread - # Needed for linking the various launchers - LDFLAGS += -framework Cocoa -framework Security \ - -framework ApplicationServices - OTHER_CPPFLAGS += -DPACKAGE_PATH='"$(PACKAGE_PATH)"' - - # Default Info.plist file for the command line tools. This gets overridden by - # some of the jvmstat tools so that they have task_for_pid() privileges - ifndef INFO_PLIST_FILE - INFO_PLIST_FILE = Info-cmdline.plist - endif - LDFLAGS += -sectcreate __TEXT __info_plist $(LAUNCHER_PLATFORM_SRC)/lib/$(INFO_PLIST_FILE) - else - INFO_PLIST_FILE= - endif - - # - # This rule only applies on unix. It supports quantify and its ilk. - # - $(ACTUAL_PROGRAM):: $(FILES_o) - @$(prep-target) - @set -- $?; \ - $(ECHO) Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...}; - @$(MKDIR) -p $(TEMPDIR) - $(LINK_PRE_CMD) $(CC) $(CC_OBJECT_OUTPUT_FLAG)$@ $(LDFLAGS) \ - $(FILES_o) $(THREADLIBS) $(LDLIBS) - ifeq ($(findstring privileged, $(INFO_PLIST_FILE)), privileged) - -codesign -s openjdk_codesign $@ - endif - @$(call binary_file_verification,$@) -endif # PLATFORM - -clean:: -ifeq ($(PLATFORM), windows) - $(RM) $(OBJDIR)/$(PROGRAM).rc - $(RM) $(OBJDIR)/$(PROGRAM).ico - $(RM) $(OBJDIR)/$(PROGRAM).lcf - $(RM) $(OBJDIR)/$(PROGRAM).map - $(RM) $(OBJDIR)/$(PROGRAM).exp - $(RM) $(OBJDIR)/$(PROGRAM).lib - $(RM) $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX) - $(RM) $(OBJDIR)/$(PROGRAM).ilk - $(RM) *.pdb -endif - - -clobber:: - $(RM) $(ACTUAL_PROGRAM) - -# -# Now include make dependencies (created during compilation, see Rules.gmk) -# -ifeq ($(INCREMENTAL_BUILD),true) - # Workaround: gnumake sometimes says files is empty when it shouldn't - # was: files := $(foreach file, $(wildcard */$(ARCH)/*.$(DEPEND_SUFFIX)), $(file)) - files := $(shell $(LS) $(OBJDIR)/*.$(DEPEND_SUFFIX) 2>/dev/null) - ifneq ($(strip $(files)),) - include $(files) - endif -endif - -ifdef JAVA_ARGS - OTHER_CPPFLAGS += -DJAVA_ARGS='$(JAVA_ARGS)' - OTHER_CPPFLAGS += -DLAUNCHER_NAME='"$(LAUNCHER_NAME)"' -endif - -ifeq ($(PLATFORM), windows) - ifdef RELEASE - OTHER_CPPFLAGS += -DVERSION='"$(RELEASE)"' - endif -endif - - -ifneq ($(PLATFORM), windows) - HAVE_GETHRTIME=true -endif - -ifeq ($(HAVE_GETHRTIME),true) - OTHER_CPPFLAGS += -DHAVE_GETHRTIME -endif - -OTHER_INCLUDES += -I$(LAUNCHER_SHARE_SRC)/bin -I$(LAUNCHER_PLATFORM_SRC)/bin -ifeq ($(PLATFORM), macosx) - OTHER_INCLUDES += -I$(LAUNCHER_SOLARIS_PLATFORM_SRC)/bin - ifneq ($(SYSTEM_ZLIB), true) - OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/util/zip/zlib-1.1.3 - endif -else - OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/util/zip/zlib-1.1.3 -endif - -OTHER_CPPFLAGS += -DPROGNAME='"$(PROGRAM)"' -VERSION_DEFINES += -DFULL_VERSION='"$(FULL_VERSION)"' - -VERSION_DEFINES += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ - -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' - - - -$(OBJDIR)/main.$(OBJECT_SUFFIX): $(LAUNCHER_SHARE_SRC)/bin/main.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$(OBJDIR)/main.$(OBJECT_SUFFIX) \ - $(VERSION_DEFINES) $< - -# -# Default dependencies -# - -all: build - -build: program - -debug: - $(MAKE) VARIANT=DBG build - -fastdebug: - $(MAKE) VARIANT=DBG FASTDEBUG=true build - -.PHONY: all build program clean clobber debug fastdebug diff --git a/jdk/makefiles/common/Release-embedded.gmk b/jdk/makefiles/common/Release-embedded.gmk deleted file mode 100644 index d5d709fd3b4..00000000000 --- a/jdk/makefiles/common/Release-embedded.gmk +++ /dev/null @@ -1,230 +0,0 @@ -# -# Copyright (c) 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# SE-Embedded Reduced JRE targets -# -ifdef JAVASE_EMBEDDED - -reduced-image-jre reduced-headless-image-jre :: - @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..." - -# Add the reduced-jre images as pre-reqs. These will be processed last -images:: reduced-image-jre reduced-headless-image-jre - - -###################################################### -# Create the headless rt.jar -###################################################### - -NOT_HEADLESS_RT_JAR_LIST = $(ABS_TEMPDIR)/not_hl_rt_jar.list -HEADLESS_RT_JAR_FILELIST=$(JARFILELISTS_TEMPDIR)/hl_rt_jar_list -TOTAL_HEADLESS_JAR_FILELIST=$(REORDER_TEMPDIR)/hl_file_list -HEADLESS_CLASSLIST=$(ABS_TEMPDIR)/headless_classlist - -# Add the jar file directories that we don't want in the -# headless JRE. If you want to remove most classes in a -# directory, put the directory in the NOT_HEADLESS_RT_JAR_LIST -# and put the individual classes you want to keep in the -# HEADLESS_CLASSLIST file. -$(NOT_HEADLESS_RT_JAR_LIST): $(NOT_RT_JAR_LIST) - $(RM) $(HEADLESS_CLASSLIST) - $(RM) $(NOT_HEADLESS_RT_JAR_LIST) - $(CP) $(NOT_RT_JAR_LIST) $(NOT_HEADLESS_RT_JAR_LIST) -# List all the packages to be excluded - $(ECHO) "sun/awt/motif/" >> $@ - $(ECHO) "sun/awt/X11/" >> $@ - $(ECHO) "sun/applet/" >> $@ - $(ECHO) "sun/java2d/opengl/" >> $@ - $(ECHO) "com/sun/java/swing/plaf/" >> $@ -# List all the individual classes to be included - $(ECHO) "sun/awt/motif/MFontConfiguration.class" >$(HEADLESS_CLASSLIST) - $(ECHO) "sun/applet/AppContextCreator.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/applet/AppletAudioClip.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/GLXSurfaceData.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/GLXSurfaceData"\$$"GLXOffScreenSurfaceData.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/GLXVolatileSurfaceManager.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/OGLSurfaceData.class" >>$(HEADLESS_CLASSLIST) - - -$(TOTAL_HEADLESS_JAR_FILELIST): $(JARREORDER_JARFILE) $(NOT_HEADLESS_RT_JAR_LIST) - $(prep-target) - $(RM) $@.temp - $(CD) $(CLASSBINDIR) ; \ - $(BOOT_JAVA_CMD) -jar $(JARREORDER_JARFILE) \ - -o $@.temp - $(NOT_HEADLESS_RT_JAR_LIST) . -# Add on the explicitly included class files from the otherwise excluded packages - $(CAT) $(HEADLESS_CLASSLIST) >> $@.temp - $(MV) $@.temp $@ - @$(CD) $(CLASSBINDIR); $(java-vm-cleanup) - -# Create the headless rt.jar file list & non-class files list -MakeHeadlessJarFileList: $(TOTAL_HEADLESS_JAR_FILELIST) $(JARSPLIT_JARFILE) - @$(RM) $(HEADLESS_RT_JAR_FILELIST) $(RES_JAR_FILELIST) - $(BOOT_JAVA_CMD) -jar $(JARSPLIT_JARFILE) $(TOTAL_HEADLESS_JAR_FILELIST) \ - -o $(HEADLESS_RT_JAR_FILELIST) $(RES_JAR_FILELIST) - @$(java-vm-cleanup) - -# Create headless rt.jar -HL_RT_JAR=$(ABS_TEMPDIR)/rt-hl-orig.jar -$(HL_RT_JAR): MakeHeadlessJarFileList $(RT_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) ; \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(RT_JAR_MANIFEST_FILE) $@ @$(HEADLESS_RT_JAR_FILELIST) \ - $(JAR_JFLAGS) - @$(CD) $(CLASSBINDIR); $(java-vm-cleanup) - - -# -# Produce a reduced Headful JRE for Embedded Devices -# -# The deployment binaries are added during the deployment build process -# - -# Binaries that don't get included in reduced jre image bin directory -NOT_REDUCEDJRE_BIN = \ - java_vm \ - kinit \ - klist \ - ktab \ - orbd \ - policytool \ - rmid \ - rmiregistry \ - servertool \ - tnameserv \ - pack200 \ - unpack200 - -# jars/resources/libs that don't get included in reduced jre image lib directory -NOT_REDUCEDJRE_LIB = \ - charsets.jar \ - ext/dnsns.jar \ - ext/localedata.jar \ - $(LIBARCH)/client/classes.jsa \ - $(LIBARCH)/libjavaplugin_jni.so \ - $(LIBARCH)/libjavaplugin_nscp_gcc29.so \ - $(LIBARCH)/libjavaplugin_nscp.so \ - $(LIBARCH)/libjavaplugin_oji.so - -# JRE docs that don't get included in reduced jre image top directory -NOT_REDUCEDJRE_DOC = \ - Welcome.html - -reduced-image-jre:: - @$(ECHO) Starting to Produce Reduced JRE - @# - @# First make a copy of the full JRE - @# - $(RM) -r $(JRE_REDUCED_IMAGE_DIR) - $(MKDIR) -p $(JRE_REDUCED_IMAGE_DIR) - $(CD) $(JRE_IMAGE_DIR); \ - $(TAR) cf - . | ($(CD) $(JRE_REDUCED_IMAGE_DIR); $(TAR) xf - ); - - @# - @# Remove all of the files that are not needed for the - @# reduced JRE - @# - for l in $(NOT_REDUCEDJRE_BIN) ; do \ - $(RM) $(JRE_REDUCED_IMAGE_DIR)/bin/$$l ; \ - done - for l in $(NOT_REDUCEDJRE_LIB) ; do \ - $(RM) $(JRE_REDUCED_IMAGE_DIR)/lib/$$l ; \ - done - for l in $(NOT_REDUCEDJRE_DOC) ; do \ - $(RM) $(JRE_REDUCED_IMAGE_DIR)/$$l ; \ - done - - @# Remove misc. other files - $(RM) -r $(JRE_REDUCED_IMAGE_DIR)/man - $(RM) -f $(JRE_REDUCED_IMAGE_DIR)/CHANGES - - @$(ECHO) Done Creating Reduced JRE - -# -# Produce a reduced Headless JRE -# -reduced-headless-image-jre:: $(RT_JAR) $(RESOURCES_JAR) $(BUILD_META_INDEX) $(HL_RT_JAR) - @$(ECHO) Starting to Produce Reduced Headless JRE - @# - @# First make a copy of the reduced JRE we just built - @# - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR) - $(MKDIR) -p $(JRE_REDUCED_HEADLESS_IMAGE_DIR) - $(CD) $(JRE_REDUCED_IMAGE_DIR); \ - $(TAR) cf - . | ($(CD) $(JRE_REDUCED_HEADLESS_IMAGE_DIR); $(TAR) xf - ); - - @# Replace the full rt.jar with the headless rt.jar - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/rt.jar - $(CP) $(HL_RT_JAR) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/rt.jar - - @# - @# Remove all of the files that are not needed for the - @# reduced Headless JRE - @# - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/gtkhelper - $(RM) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/libjsoundalsa.so - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/audio - $(RM) -fr $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/applet - $(RM) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/awt_robot - $(RM) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/libawt_xawt.so - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/libsplashscreen.so - @# Remove oblique fonts and reduce font support to LucidaSansRegular only - $(RM) -fr $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/oblique-fonts - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightDemiBold.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightDemiItalic.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightItalic.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightRegular.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaSansDemiBold.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaTypewriterBold.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaTypewriterRegular.ttf - -ifeq ($(PLATFORM), linux) -# put out minimal fonts.dir file for the remaining font - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) 6>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-1">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-2">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-4">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-5">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-7">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-9">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - -endif # Linux - - @# - @# all done with JRE reduced headless image - @# - - @$(ECHO) Done Creating Reduced Headless JRE - -images-clobber:: - $(RM) -r $(JRE_REDUCED_IMAGE_DIR) - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR) - -.PHONY: reduced-image-jre reduced-headless-image-jre - -endif # JAVASE_EMBEDDED - diff --git a/jdk/makefiles/common/Release-macosx.gmk b/jdk/makefiles/common/Release-macosx.gmk deleted file mode 100644 index f56370f3ca1..00000000000 --- a/jdk/makefiles/common/Release-macosx.gmk +++ /dev/null @@ -1,75 +0,0 @@ -# -# Copyright (c) 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -MANBASEDIRS=$(JDK_TOPDIR)/src/bsd/doc $(IMPORTDOCDIR) -MAN1SUBDIR = man -JA_DIRNAME=ja_JP.UTF-8 - -# Defines the release targets for Mac OS X build products - -JDK_BUNDLE_DIR = $(ABS_OUTPUTDIR)/j2sdk-bundle/jdk$(JDK_VERSION).jdk/Contents -JRE_BUNDLE_DIR = $(ABS_OUTPUTDIR)/j2re-bundle/jre$(JDK_VERSION).jre/Contents - -MACOSX_SRC = $(JDK_TOPDIR)/src/macosx - -BUNDLE_ID ?= net.java.openjdk -BUNDLE_ID_JRE ?= $(BUNDLE_ID).jre -BUNDLE_ID_JDK ?= $(BUNDLE_ID).jdk - -BUNDLE_NAME ?= OpenJDK $(JDK_MINOR_VERSION) -BUNDLE_NAME_JRE ?= $(BUNDLE_NAME) -BUNDLE_NAME_JDK ?= $(BUNDLE_NAME) - -BUNDLE_INFO ?= OpenJDK ($(JDK_VERSION)) -BUNDLE_INFO_JRE ?= $(BUNDLE_INFO) -BUNDLE_INFO_JDK ?= $(BUNDLE_INFO) - -BUNDLE_PLATFORM_VERSION ?= $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION) -BUNDLE_VERSION ?= $(JDK_VERSION) -BUNDLE_VENDOR ?= UNDEFINED - -jre-bundle-setup: - $(RM) -r $(JRE_BUNDLE_DIR) - -jdk-bundle-setup: - $(RM) -r $(JDK_BUNDLE_DIR) - -jre-bundle-files: - $(MKDIR) -p $(JRE_BUNDLE_DIR)/MacOS - ln -s ../Home/lib/jli/libjli.dylib $(JRE_BUNDLE_DIR)/MacOS/ - $(CP) -r $(JRE_IMAGE_DIR) $(JRE_BUNDLE_DIR)/Home - $(SED) -e "s/@@ID@@/$(BUNDLE_ID_JRE)/g" -e "s/@@NAME@@/$(BUNDLE_NAME_JRE)/g" -e "s/@@INFO@@/$(BUNDLE_INFO_JRE)/g" -e "s/@@PLATFORM_VERSION@@/$(BUNDLE_PLATFORM_VERSION)/g" -e "s/@@VERSION@@/$(BUNDLE_VERSION)/g" -e "s/@@VENDOR@@/$(BUNDLE_VENDOR)/g" < $(MACOSX_SRC)/bundle/JRE-Info.plist > $(JRE_BUNDLE_DIR)/Info.plist - /usr/bin/SetFile -a B $(JRE_BUNDLE_DIR)/../ - -jdk-bundle-files: - $(MKDIR) -p $(JDK_BUNDLE_DIR)/MacOS - ln -s ../Home/jre/lib/jli/libjli.dylib $(JDK_BUNDLE_DIR)/MacOS/ - $(CP) -r $(JDK_IMAGE_DIR) $(JDK_BUNDLE_DIR)/Home - $(SED) -e "s/@@ID@@/$(BUNDLE_ID_JDK)/g" -e "s/@@NAME@@/$(BUNDLE_NAME_JDK)/g" -e "s/@@INFO@@/$(BUNDLE_INFO_JDK)/g" -e "s/@@PLATFORM_VERSION@@/$(BUNDLE_PLATFORM_VERSION)/g" -e "s/@@VERSION@@/$(BUNDLE_VERSION)/g" -e "s/@@VENDOR@@/$(BUNDLE_VENDOR)/g" < $(MACOSX_SRC)/bundle/JDK-Info.plist > $(JDK_BUNDLE_DIR)/Info.plist - /usr/bin/SetFile -a B $(JDK_BUNDLE_DIR)/../ - -EXTRA_IMAGE_TARGETS += jre-bundle-setup jdk-bundle-setup jre-bundle-files jdk-bundle-files - -.PHONY: $(EXTRA_JRE_TARGETS) $(EXTRA_IMAGE_TARGETS) diff --git a/jdk/makefiles/common/Release.gmk b/jdk/makefiles/common/Release.gmk deleted file mode 100644 index 74c84cb4712..00000000000 --- a/jdk/makefiles/common/Release.gmk +++ /dev/null @@ -1,1401 +0,0 @@ -# -# Copyright (c) 1997, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -include $(JDK_TOPDIR)/makefiles/docs/CORE_PKGS.gmk -include $(JDK_TOPDIR)/makefiles/docs/NON_CORE_PKGS.gmk -include $(JDK_TOPDIR)/makefiles/Tools.gmk - -# What jdk version are we building -THIS_JDK_VERSION := $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) - -# -# Perform release engineering tasks. -# -# images An image is what the product looks like when it is -# installed. -# - -IMAGE_BINDIR = bin - -# The compiler should not issue a "Proprietary" warning when compiling -# classes in the com.sun.java.swing.plaf packages, since we've always -# allowed, and even advocated, extending them (see bug 6476749). -# -# This approach is NOT to be used as a general purpose way to avoid such -# compiler warnings for non-core packages. The correct way is to document -# the packages in NON_CORE_PKGS.gmk, and include them in the NON_CORE_PKGS -# definition. -# -# Swing has taken this approach only as a temporary measure to avoid -# the compiler warnings until we can properly document these packages. -# This is covered under 6491853. -EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf.windows \ - com.sun.java.swing.plaf.motif \ - com.sun.java.swing.plaf.gtk - -# -# Include the exported private packages in ct.sym. -# This is an interim solution until the ct.sym is replaced -# with a new module system (being discussed for JDK 8). -# -EXPORTED_PRIVATE_PKGS = com.sun.servicetag \ - com.oracle.net \ - com.oracle.nio - -# 64-bit solaris has a few special cases. We define the variable -# SOLARIS64 for use in this Makefile to easily test those cases -ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 64) - SOLARIS64 = true - IMAGE_BINDIR = bin/$(ARCH) - endif -endif - -JTG_DOCS = $(JDK_TOPDIR)/src/solaris/doc - -ifeq ($(PLATFORM), macosx) - include $(JDK_TOPDIR)/make/common/Release-$(PLATFORM).gmk -endif - -# The base names of all the license and document files for the jdk and jre -# (These files get placed in the jdk and jre install images) -ifdef OPENJDK - # Where to find these files - SHARE_JDK_DOC_SRC = $(JDK_TOPDIR) - SHARE_JRE_DOC_SRC = $(JDK_TOPDIR) - # Same files for jdk and jre, no name changes - IMAGE_DOCLIST_JDK = LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README - IMAGE_DOCLIST_JDK_DEMOS_AND_SAMPLES = - IMAGE_DOCLIST_JRE = LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README -else - # make/closed/common/Defs.gmk for closed location of SHARE_JDK_DOC_SRC - - IMAGE_DOCLIST_JDK = COPYRIGHT README.html LICENSE THIRDPARTYLICENSEREADME.txt - IMAGE_DOCLIST_JDK_DEMOS_AND_SAMPLES = demo/DEMOS_LICENSE sample/SAMPLES_LICENSE - IMAGE_DOCLIST_JRE = COPYRIGHT Welcome.html LICENSE THIRDPARTYLICENSEREADME.txt - ifeq ($(PLATFORM), windows) - IMAGE_DOCLIST_JRE += README.txt - else - IMAGE_DOCLIST_JRE += README - endif -endif - -# Paths to these files we need -JDK_DOCFILES = $(IMAGE_DOCLIST_JDK:%=$(JDK_IMAGE_DIR)/%) -JRE_DOCFILES = $(IMAGE_DOCLIST_JRE:%=$(JRE_IMAGE_DIR)/%) -JDK_DEMOS_AND_SAMPLES_DOCFILES = $(IMAGE_DOCLIST_JDK_DEMOS_AND_SAMPLES:%=$(JDK_IMAGE_DIR)/%) - -# absolute directory names: note, these must exist prior to build -# time - they are created in the main Makefile. -JRE_IMAGE_BINDIR = $(JRE_IMAGE_DIR)/bin - -MAINMANIFEST = $(JDK_TOPDIR)/make/tools/manifest.mf -BEANMANIFEST = $(JDK_TOPDIR)/make/javax/swing/beaninfo/manifest - -# -# Man pages -# - -JRE_MAN_PAGES = \ - java.1 \ - keytool.1 \ - orbd.1 \ - pack200.1 \ - policytool.1 \ - rmid.1 \ - rmiregistry.1 \ - servertool.1 \ - tnameserv.1 \ - unpack200.1 - -ifndef OPENJDK - JRE_MAN_PAGES += javaws.1 -endif - -JDK_MAN_PAGES = \ - $(JRE_MAN_PAGES) \ - appletviewer.1 \ - extcheck.1 \ - idlj.1 \ - jar.1 \ - jarsigner.1 \ - javac.1 \ - javadoc.1 \ - javah.1 \ - javap.1 \ - jconsole.1 \ - jdb.1 \ - jhat.1 \ - jinfo.1 \ - jmap.1 \ - jps.1 \ - jrunscript.1 \ - jsadebugd.1 \ - jstack.1 \ - jstat.1 \ - jstatd.1 \ - native2ascii.1 \ - rmic.1 \ - schemagen.1 \ - serialver.1 \ - wsgen.1 \ - wsimport.1 \ - xjc.1 - -ifeq ($(PLATFORM), solaris) - MANBASEDIRS=$(JDK_TOPDIR)/src/solaris/doc $(IMPORTDOCDIR) - MAN1SUBDIR=sun/man/man1 -endif # solaris - -ifeq ($(PLATFORM), linux) - MANBASEDIRS=$(JDK_TOPDIR)/src/linux/doc $(IMPORTDOCDIR) - MAN1SUBDIR=man - JA_DIRNAME=ja_JP.UTF-8 -endif # linux - -define copy-man-pages -$(MKDIR) -p $1/man/man1 -for manbase in $(MANBASEDIRS:%=%/$(MAN1SUBDIR)) ; do \ - for manpage in $2; do \ - if [ -f $${manbase}/$${manpage} ] ; then \ - $(CP) $${manbase}/$${manpage} $1/man/man1 ; \ - for ja_encoding in $(JA_TARGET_ENCODINGS); do \ - ja_dir="ja"; \ - if [ "$${ja_encoding}" != "$(JA_SOURCE_ENCODING)" ]; then \ - ja_dir="ja_JP.$${ja_encoding}"; \ - fi; \ - $(MKDIR) -p $1/man/$${ja_dir}/man1; \ - $(CAT) $${manbase}/ja/$${manpage} \ - | $(NATIVE2ASCII) -encoding $(JA_SOURCE_ENCODING) \ - | $(SED) 's/@@VERSION@@/$(THIS_JDK_VERSION)/g' \ - | $(NATIVE2ASCII) -reverse -encoding $${ja_encoding} \ - > $1/man/$${ja_dir}/man1/$${manpage}; \ - done; \ - fi; \ - done; \ -done -$(java-vm-cleanup) -if [ "$(JA_DIRNAME)" != "" ] ; then \ - $(CD) $1/man && $(RM) ja && $(LN) -s $(JA_DIRNAME) ja; \ -fi -endef - - -# no compression unless requested -ifndef COMPRESS_JARS - CREATE_JAR_OPTS = c0mf - CREATE_JAR_OPTS_NOMANIFEST = c0f -else - CREATE_JAR_OPTS = cmf - CREATE_JAR_OPTS_NOMANIFEST = cf -endif - -# -# Targets. -# -INITIAL_IMAGE_JRE=initial-image-jre -INITIAL_IMAGE_JDK=initial-image-jdk -ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 64) - INITIAL_IMAGE_JRE=initial-image-jre-sol64 - INITIAL_IMAGE_JDK=initial-image-jdk-sol64 - endif -endif - -images images-clobber \ -initial-image-jre initial-image-jdk \ -initial-image-jre-sol64 initial-image-jdk-sol64 \ -trim-image-jre trim-image-jdk \ -identify-image-jre identify-image-jdk \ -process-image-jre process-image-jdk \ -sec-files sec-files-win jgss-files :: - $(ECHO) ">>>Making "$@" @ `$(DATE)` ..." - -install: images - -# Order is important here, trim jre after jdk image is created -ifeq ($(PLATFORM), macosx) - -images:: $(INITIAL_IMAGE_JRE) $(EXTRA_JRE_TARGETS) $(INITIAL_IMAGE_JDK) \ - trim-image-jre trim-image-jdk \ - identify-image-jre identify-image-jdk \ - process-image-jre process-image-jdk sec-files sec-files-win jgss-files \ - $(EXTRA_IMAGE_TARGETS) -else - -images:: $(INITIAL_IMAGE_JRE) $(INITIAL_IMAGE_JDK) \ - trim-image-jre trim-image-jdk \ - identify-image-jre identify-image-jdk \ - process-image-jre process-image-jdk sec-files sec-files-win jgss-files -endif - -# Don't use these -image-jre:: initial-image-jre trim-image-jre identify-image-jre process-image-jre -image-jdk:: initial-image-jdk trim-image-jdk identify-image-jdk process-image-jdk - -# -# Sources we ship in the SDK. -# -SOURCES = \ - java/applet \ - java/awt \ - java/beans \ - java/io \ - java/lang \ - java/math \ - java/net \ - java/nio \ - java/rmi \ - java/security \ - java/sql \ - java/text \ - java/util \ - com/sun/corba \ - com/sun/image/codec/jpeg \ - com/sun/imageio \ - com/sun/java/swing \ - com/sun/javadoc \ - com/sun/jmx \ - com/sun/source \ - com/sun/naming \ - com/sun/security/auth \ - com/sun/security/jgss \ - javax/accessibility \ - javax/annotation \ - javax/script \ - javax/imageio \ - javax/lang \ - javax/management \ - javax/naming \ - javax/print \ - javax/rmi \ - javax/security \ - javax/sound \ - javax/sql \ - javax/swing \ - javax/tools \ - javax/xml \ - com/sun/org/apache \ - com/sun/java_cup \ - com/sun/jlex \ - org/ietf \ - org/omg \ - org/w3c/dom \ - org/xml/sax \ - sunw -# -# Directories where sources may be found. If a file with the same path -# name exists in more than one of these places, the one found last on this -# list wins. -# -SOURCE_DIRS = $(SHARE_SRC)/classes $(PLATFORM_SRC)/classes -SOURCE_DIRS += $(GENSRCDIR) -SOURCE_DIRS += $(IMPORTSRCDIR) -SOURCE_DIRS += $(JDK_OUTPUTDIR)/gendocsrc_rmic -ifndef OPENJDK - SOURCE_DIRS += $(CLOSED_SRC)/share/classes -endif - - -# -# Specific files and directories that will be filtered out from above areas. -# -SOURCE_FILTERs = $(SCM_DIRs) ',*' -SOURCE_FILES_filter = $(SOURCE_FILTERs:%=-name % -prune -o) - -# -# Bug 4249883 - excluding some unnecessary packages from com.sun.tools -# -# Bug 5008685 - exclude jconsole from sun/tools -# -TOOLS = \ - META-INF/services/com.sun.jdi.connect.Connector \ - META-INF/services/com.sun.jdi.connect.spi.TransportService \ - sun/tools/asm \ - sun/tools/jar \ - sun/tools/java \ - sun/tools/javac \ - sun/tools/jcmd \ - sun/tools/jps \ - sun/tools/jstat \ - sun/tools/jstatd \ - sun/tools/native2ascii \ - sun/tools/serialver \ - sun/tools/tree \ - sun/tools/util \ - sun/security/tools/JarBASE64Encoder.class \ - sun/security/tools/JarSigner.class \ - sun/security/tools/JarSignerParameters.class \ - sun/security/tools/JarSignerResources.class \ - sun/security/tools/JarSignerResources_ja.class \ - sun/security/tools/JarSignerResources_zh_CN.class \ - sun/security/tools/SignatureFile\$$Block.class \ - sun/security/tools/SignatureFile.class \ - sun/security/tools/TimestampedSigner.class \ - sun/rmi/rmic \ - sun/applet \ - sun/jvmstat \ - com/sun/javadoc \ - com/sun/jdi \ - com/sun/jarsigner \ - com/sun/source \ - com/sun/tools/classfile \ - com/sun/tools/doclets \ - com/sun/tools/example/debug/expr \ - com/sun/tools/example/debug/tty \ - com/sun/tools/extcheck \ - com/sun/tools/hat \ - com/sun/tools/javac \ - com/sun/tools/javadoc \ - com/sun/tools/javah \ - com/sun/tools/javap \ - com/sun/tools/corba \ - com/sun/tools/internal/xjc \ - com/sun/tools/internal/ws \ - META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ - META-INF/services/com.sun.tools.internal.xjc.Plugin \ - com/sun/istack/internal/tools \ - com/sun/tools/internal/jxc/ap \ - com/sun/tools/internal/ws/wscompile/plugin/at_generated \ - com/sun/codemodel \ - com/sun/tools/internal/jxc \ - com/sun/xml/internal/rngom \ - com/sun/xml/internal/xsom \ - org/relaxng/datatype \ - com/sun/xml/internal/dtdparser \ - com/sun/tools/jdi \ - com/sun/tools/script/shell \ - META-INF/services/com.sun.tools.attach.spi.AttachProvider \ - com/sun/tools/attach \ - sun/tools/attach \ - sun/tools/jstack \ - sun/tools/jinfo \ - sun/tools/jmap - -# classes that go into jfr.jar -JFR_CLASSES_DIRS= \ - com/oracle/jrockit/jfr \ - oracle/jrockit/jfr - -# classes that go into jsse.jar -JSSE_CLASSES_DIRS = \ - sun/security/provider/Sun.class \ - sun/security/rsa/SunRsaSign.class \ - sun/security/ssl \ - com/sun/net/ssl/internal/ssl - -# classes that go into dnsns.jar -DNS_CLASSES_DIRS = \ - sun/net/spi/nameservice/dns \ - META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor - -# classes and files that go into localedata.jar -LOCALEDATA_JAR_DIRS = \ - sun/text/resources/*_ar* \ - sun/text/resources/*_hi* \ - sun/text/resources/*_iw* \ - sun/text/resources/*_iw* \ - sun/text/resources/*_ja* \ - sun/text/resources/*_ko* \ - sun/text/resources/*_th.* \ - sun/text/resources/*_th_* \ - sun/text/resources/*_vi* \ - sun/text/resources/*_zh* \ - sun/text/resources/*Data_th \ - sun/text/resources/thai_dict \ - sun/util/resources/*_ar* \ - sun/util/resources/*_hi* \ - sun/util/resources/*_iw* \ - sun/util/resources/*_iw* \ - sun/util/resources/*_ja* \ - sun/util/resources/*_ko* \ - sun/util/resources/*_th_* \ - sun/util/resources/*_th.* \ - sun/util/resources/*_vi* \ - sun/util/resources/*_zh* - -LOCALEDATA_JAR_FILES = $(foreach i,$(LOCALEDATA_JAR_DIRS), $(wildcard $(CLASSBINDIR)/$i)) - -# files under $(OUTPUTDIR) that need to go into sec-bin.zip for builds -# where the corresponding sources are not available -SEC_FILES_DIRS = \ - classes/javax/net \ - classes/javax/security/cert \ - classes/com/sun/net/ssl \ - classes/com/sun/security/cert \ - classes/sun/net/www/protocol/https \ - classes/sun/security/pkcs12 \ - classes/sun/security/ssl \ - classes/sun/security/krb5/*.class \ - classes/sun/security/krb5/internal/*.class \ - classes/sun/security/krb5/internal/ccache \ - classes/sun/security/krb5/internal/crypto \ - classes/sun/security/krb5/internal/ktab \ - classes/sun/security/krb5/internal/rcache \ - classes/sun/security/krb5/internal/util \ - classes/sun/security/jgss/spi/GSSContextSpi.class - -# files under $(OUTPUTDIR) that need to go into sec-windows-win.zip for builds -# where the corresponding sources are not available -SEC_FILES_WIN_DIRS = \ - classes/sun/security/krb5/internal/tools - -# files under $(BINDIR) that need to go into jgss_files.zip for builds -# where the corresponding sources are not available -JGSS_FILES_DIRS = \ - bin/w2k_lsa_auth.dll \ - bin/w2k_lsa_auth.map \ - bin/w2k_lsa_auth.pdb - -# The following get removed from the SDK image. -NOTJDKTOOLS = \ - java_vm - -# The following get removed from the JRE after the bulk-copy of BINDIR... -NOTJRETOOLS = \ - appletviewer$(EXE_SUFFIX) \ - extcheck$(EXE_SUFFIX) \ - idlj$(EXE_SUFFIX) \ - jar$(EXE_SUFFIX) \ - jarsigner$(EXE_SUFFIX) \ - java-rmi.cgi \ - javac$(EXE_SUFFIX) \ - javadoc$(EXE_SUFFIX) \ - javah$(EXE_SUFFIX) \ - javap$(EXE_SUFFIX) \ - jcmd$(EXE_SUFFIX) \ - jdb$(EXE_SUFFIX) \ - jps$(EXE_SUFFIX) \ - jrunscript$(EXE_SUFFIX) \ - jstat$(EXE_SUFFIX) \ - jstatd$(EXE_SUFFIX) \ - jstack$(EXE_SUFFIX) \ - packagebean$(SCRIPT_SUFFIX) \ - rmic$(EXE_SUFFIX) \ - serialver$(EXE_SUFFIX) \ - unregbean$(EXE_SUFFIX) \ - jconsole$(EXE_SUFFIX) \ - jinfo$(EXE_SUFFIX) \ - jmap$(EXE_SUFFIX) \ - native2ascii$(EXE_SUFFIX) \ - xjc$(EXE_SUFFIX) \ - wsgen$(EXE_SUFFIX) \ - wsimport$(EXE_SUFFIX) \ - schemagen$(EXE_SUFFIX) \ - jsadebugd$(EXE_SUFFIX) \ - jhat$(EXE_SUFFIX) - -# The following get removed from the JRE after the bulk-copy of LIBDIR... -NOTJRELIBS = tools.jar \ - jconsole.jar \ - dt.jar - -ifeq ($(INCLUDE_SA), true) - NOTJRELIBS += sa-jdi.jar - - # The following get removed from the JRE after the bulk-copy of LIBDIR... - NOTJRE_SHARED_LIBS = $(SALIB_NAME) -else - NOTJRE_SHARED_LIBS = -endif - -# Attach library is JDK only -NOTJRE_SHARED_LIBS += $(LIB_PREFIX)attach.$(LIBRARY_SUFFIX) - -# -###### RULES - -# Processing license files from source area to image area -# These will be modified to have the platform specific EOL chars. -define process-doc-file -$(prep-target) -$(SED) 's/$$//g' $< > $@ -$(CHMOD) 444 $@ -endef - -# JDK files -$(JDK_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% - $(process-doc-file) - -$(JDK_IMAGE_DIR)/demo/DEMOS_LICENSE: $(SHARE_JDK_DOC_SRC)/DEMOS_LICENSE - $(process-doc-file) - -$(JDK_IMAGE_DIR)/sample/SAMPLES_LICENSE: $(SHARE_JDK_DOC_SRC)/SAMPLES_LICENSE - $(process-doc-file) - -# JRE files -$(JRE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -ifeq ($(PLATFORM), windows) -$(JRE_IMAGE_DIR)/README.txt: $(SHARE_JRE_DOC_SRC)/README - $(process-doc-file) -endif - - -###################################################### -# List of directories in classes directory that should NOT be in rt.jar -###################################################### - -NOT_RT_JAR_LIST = $(IMAGES_OUTPUTDIR)/tmp/not_rt_jar.list - -$(NOT_RT_JAR_LIST): FRC - $(prep-target) - $(ECHO) "#\n" >> $@ - $(ECHO) "# List of subdirectories not in include in rt.jar" >> $@ - $(ECHO) "# Directories must contain trailing '/'." >> $@ - $(ECHO) "com/sun/javadoc/" >> $@ - $(ECHO) "com/sun/jdi/" >> $@ - $(ECHO) "com/sun/jarsigner/" >> $@ - $(ECHO) "com/sun/source/" >> $@ - $(ECHO) "com/sun/istack/internal/tools/" >> $@ - $(ECHO) "META-INF/services/com.sun.jdi.connect.Connector" >> $@ - $(ECHO) "META-INF/services/com.sun.jdi.connect.spi.TransportService" >> $@ - $(ECHO) "META-INF/services/com.sun.tools.xjc.Plugin" >> $@ - $(ECHO) "com/sun/tools/" >> $@ - $(ECHO) "sun/jvmstat/" >> $@ - $(ECHO) "sun/nio/cs/ext/" >> $@ - $(ECHO) "sun/awt/HKSCS.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312\$$Decoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312\$$Encoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312.class" >> $@ - $(ECHO) "sun/awt/motif/X11GBK\$$Encoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11GBK.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601\$$Decoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601\$$Encoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601.class" >> $@ - $(ECHO) "META-INF/services/java.nio.charset.spi.CharsetProvider" >> $@ - $(ECHO) "sun/rmi/rmic/" >> $@ - $(ECHO) "sun/tools/asm/" >> $@ - $(ECHO) "sun/tools/java/" >> $@ - $(ECHO) "sun/tools/javac/" >> $@ - $(ECHO) "com/sun/tools/classfile/" >> $@ - $(ECHO) "com/sun/tools/javap/" >> $@ - $(ECHO) "sun/tools/jcmd/" >> $@ - $(ECHO) "sun/tools/jconsole/" >> $@ - $(ECHO) "sun/tools/jps/" >> $@ - $(ECHO) "sun/tools/jstat/" >> $@ - $(ECHO) "sun/tools/jstatd/" >> $@ - $(ECHO) "sun/tools/native2ascii/" >> $@ - $(ECHO) "sun/tools/serialver/" >> $@ - $(ECHO) "sun/tools/tree/" >> $@ - $(ECHO) "sun/tools/util/" >> $@ - $(ECHO) "sun/security/tools/JarBASE64Encoder.class" >> $@ - $(ECHO) "sun/security/tools/JarSigner.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerParameters.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources_ja.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources_zh_CN.class" >> $@ - $(ECHO) "sun/security/tools/SignatureFile\$$Block.class" >> $@ - $(ECHO) "sun/security/tools/SignatureFile.class" >> $@ - $(ECHO) "sun/security/tools/TimestampedSigner.class" >> $@ - $(ECHO) "sun/security/provider/Sun.class" >> $@ - $(ECHO) "sun/security/rsa/SunRsaSign.class" >> $@ - $(ECHO) "sun/security/ssl/" >> $@ - $(ECHO) "sun/security/pkcs11/" >> $@ - $(ECHO) "sun/security/ec/ECDHKeyAgreement.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature.class" >> $@ - $(ECHO) "sun/security/ec/ECKeyPairGenerator.class" >> $@ - $(ECHO) "sun/security/ec/SunEC\$$1.class" >> $@ - $(ECHO) "sun/security/ec/SunEC.class" >> $@ - $(ECHO) "sun/security/ec/SunECEntries.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature\$$Raw.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature\$$SHA1.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature\$$SHA256.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature\$$SHA384.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature\$$SHA512.class" >> $@ - $(ECHO) "com/sun/net/ssl/internal/ssl/" >> $@ - $(ECHO) "javax/crypto/" >> $@ - $(ECHO) "sun/security/internal/" >> $@ - $(ECHO) "com/sun/crypto/provider/" >> $@ - $(ECHO) "META-INF/services/com.sun.tools.attach.spi.AttachProvider" >> $@ - $(ECHO) "com/sun/tools/attach/" >> $@ - $(ECHO) "org/relaxng/datatype/" >> $@ - $(ECHO) "com/sun/codemodel/" >> $@ - $(ECHO) "com/sun/xml/internal/dtdparser/" >> $@ - $(ECHO) "com/sun/xml/internal/rngom/" >> $@ - $(ECHO) "com/sun/xml/internal/xsom/" >> $@ - $(ECHO) "com/sun/tools/script/shell/" >> $@ - $(ECHO) "sun/tools/attach/" >> $@ - $(ECHO) "sun/tools/jstack/" >> $@ - $(ECHO) "sun/tools/jinfo/" >> $@ - $(ECHO) "sun/tools/jmap/" >> $@ - $(ECHO) "sun/net/spi/nameservice/dns/" >> $@ - $(ECHO) "META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor" >> $@ - $(ECHO) "javax/swing/AbstractButtonBeanInfo.class" >> $@ - $(ECHO) "javax/swing/BoxBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JAppletBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JButtonBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JCheckBoxBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JCheckBoxMenuItemBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JColorChooserBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JComboBoxBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JComponentBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JDesktopPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JDialogBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JEditorPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JFileChooserBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JFormattedTextFieldBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JFrameBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JInternalFrameBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JLabelBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JLayeredPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JListBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JMenuBarBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JMenuBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JMenuItemBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JOptionPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JPanelBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JPasswordFieldBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JPopupMenuBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JProgressBarBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JRadioButtonBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JRadioButtonMenuItemBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JScrollBarBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JScrollPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JSeparatorBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JSliderBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JSpinnerBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JSplitPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTabbedPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTableBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTextAreaBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTextFieldBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTextPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JToggleButtonBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JToolBarBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTreeBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JWindowBeanInfo.class" >> $@ - $(ECHO) "javax/swing/SwingBeanInfoBase.class" >> $@ - $(ECHO) "javax/swing/text/JTextComponentBeanInfo.class" >> $@ - $(ECHO) "sun/swing/BeanInfoUtils.class" >> $@ - $(ECHO) $(patsubst $(CLASSBINDIR)/%,%,$(LOCALEDATA_JAR_FILES)) | $(TR) " " "\n" >> $@ -ifndef OPENJDK -ifndef JAVASE_EMBEDDED - $(ECHO) "com/oracle/jrockit/jfr/" >> $@ - $(ECHO) "com/oracle/jrockit/jfr/client/" >> $@ - $(ECHO) "com/oracle/jrockit/jfr/management/" >> $@ - $(ECHO) "oracle/jrockit/jfr/" >> $@ - $(ECHO) "oracle/jrockit/jfr/events/" >> $@ - $(ECHO) "oracle/jrockit/jfr/openmbean/" >> $@ - $(ECHO) "oracle/jrockit/jfr/parser/" >> $@ - $(ECHO) "oracle/jrockit/jfr/settings/" >> $@ - $(ECHO) "oracle/jrockit/jfr/tools/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/log/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/os/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/text/" >> $@ -endif -endif - (cd $(JDK_OUTPUTDIR)/classes && $(FIND) . -name "_the.*") >> $@ -ifeq ($(PLATFORM), macosx) - $(ECHO) "com/sun/nio/sctp/" >> $@ - $(ECHO) "sun/nio/ch/sctp/" >> $@ - $(ECHO) "sun/jdbc/" >> $@ - $(ECHO) "sun/nio/ch/DevPollArrayWrapper\$$Updator.class" >> $@ - $(ECHO) "sun/nio/ch/DevPollArrayWrapper.class" >> $@ - $(ECHO) "sun/nio/ch/DevPollSelectorImpl.class" >> $@ - $(ECHO) "sun/nio/ch/DevPollSelectorProvider.class" >> $@ - $(ECHO) "sun/nio/ch/EPollArrayWrapper\$$Updator.class" >> $@ - $(ECHO) "sun/nio/ch/EPollArrayWrapper.class" >> $@ - $(ECHO) "sun/nio/ch/EPollSelectorImpl.class" >> $@ - $(ECHO) "sun/nio/ch/EPollSelectorProvider.class" >> $@ -endif - -###################################################### -# List of directories in classes directory that should NOT be in resources.jar -###################################################### - -NOT_RESOURCES_JAR_LIST = $(IMAGES_OUTPUTDIR)/tmp/not_resources_jar.list - -$(NOT_RESOURCES_JAR_LIST): FRC - $(prep-target) - $(ECHO) "#\n" >> $@ - $(ECHO) "# List of subdirectories not in include in resources.jar" >> $@ - $(ECHO) "# Directories must contain trailing '/'." >> $@ - $(ECHO) "javax/swing/beaninfo/" >> $@ - -TOTAL_JAR_EXCLUDE_LIST = $(IMAGES_OUTPUTDIR)/tmp/total_jar_exclude.list - -###################################################### -# Total exclude list -###################################################### - -$(TOTAL_JAR_EXCLUDE_LIST): $(NOT_RT_JAR_LIST) $(NOT_RESOURCES_JAR_LIST) - $(prep-target) - $(ECHO) "#\n" >> $@ - $(ECHO) "# List of subdirectories not in include in resources.jar" >> $@ - $(CAT) $(NOT_RT_JAR_LIST) >>$@ - $(CAT) $(NOT_RESOURCES_JAR_LIST) >>$@ - -# File order list for rt.jar -# - sun.applet is included, till hotjava stops relying on it. -# - sun.tools.jar is included, needs cleanup. -# -REORDER_TEMPDIR=$(IMAGES_OUTPUTDIR)/tmp/reorder -TOTAL_JAR_FILELIST=$(REORDER_TEMPDIR)/file_list - -JARFILELISTS_TEMPDIR=$(IMAGES_OUTPUTDIR)/tmp/jarfilelists -RT_JAR_FILELIST=$(JARFILELISTS_TEMPDIR)/rt_jar_list -RES_JAR_FILELIST=$(JARFILELISTS_TEMPDIR)/resources_jar_list - -$(TOTAL_JAR_FILELIST): $(BUILD_TOOLS) $(TOTAL_JAR_EXCLUDE_LIST) - $(prep-target) - $(RM) $@.temp - ($(CD) $(CLASSBINDIR) && \ - $(TOOL_JARREORDER) \ - -o $@.temp $(ABS_LIBDIR)/classlist $(TOTAL_JAR_EXCLUDE_LIST) . ) - $(MV) $@.temp $@ - ($(CD) $(CLASSBINDIR) && $(java-vm-cleanup)) - -# Create the jfr.jar containing Java Flight Recorder implementation -JFR_JAR= -ifndef OPENJDK -ifndef JAVASE_EMBEDDED -JFR_JAR=$(ABS_TEMPDIR)/jfr-orig.jar -$(JFR_JAR): $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ - $(JFR_CLASSES_DIRS) $(BOOT_JAR_JFLAGS) - @$(CD) $(CLASSBINDIR) && $(java-vm-cleanup) -endif -endif - -# Create the rt.jar file list & non-class files list - -$(RT_JAR_FILELIST) + $(RES_JAR_FILELIST): \ - $(TOTAL_JAR_FILELIST) $(BUILD_TOOLS) - $(RM) $(RT_JAR_FILELIST) $(RES_JAR_FILELIST) - $(MKDIR) -p $(JARFILELISTS_TEMPDIR) - $(TOOL_JARSPLIT) \ - $(TOTAL_JAR_FILELIST) \ - -o $(RT_JAR_FILELIST) $(RES_JAR_FILELIST) - $(java-vm-cleanup) - -# Create the manifest file. -RT_JAR_MANIFEST_FILE=$(IMAGES_OUTPUTDIR)/tmp/rt_manifest.tmp -$(RT_JAR_MANIFEST_FILE): $(MAINMANIFEST) $(BEANMANIFEST) - $(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - $(ECHO) >> $@ - $(CAT) $(BEANMANIFEST) >> $@ - -OTHER_JAR_MANIFEST_FILE=$(IMAGES_OUTPUTDIR)/tmp/other_manifest.tmp -$(OTHER_JAR_MANIFEST_FILE): $(MAINMANIFEST) - $(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - -# Create resources.jar containing non-class files -RESOURCES_JAR=$(IMAGES_OUTPUTDIR)/tmp/resources-orig.jar -$(RESOURCES_JAR): $(RES_JAR_FILELIST) $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ - @$(RES_JAR_FILELIST) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create jsse.jar containing SunJSSE implementation classes -JSSE_JAR=$(IMAGES_OUTPUTDIR)/tmp/jsse-orig.jar -$(JSSE_JAR): $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ - $(JSSE_CLASSES_DIRS) $(BOOT_JAR_JFLAGS) - @$(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create dnsns.jar -# Create without manifest for now to not differ with old buildsystem. -DNS_JAR=$(IMAGES_OUTPUTDIR)/tmp/dns-orig.jar -$(DNS_JAR): $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $@ \ - $(DNS_CLASSES_DIRS) $(BOOT_JAR_JFLAGS) - @$(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create localedata.jar containing localedata for non european languages -LOCALEDATA_JAR=$(IMAGES_OUTPUTDIR)/localedata-orig.jar -$(LOCALEDATA_JAR): $(LOCALEDATA_JAR_FILES) - $(prep-target) -# Create without manifest for now to not differ with old buildsystem. -# $(CD) $(CLASSBINDIR) && \ -# $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ -# $(LOCALEDATA_JAR_DIRS) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $@ \ - $(LOCALEDATA_JAR_DIRS) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create sec-bin.zip -SEC_FILES_ZIP=$(IMAGES_OUTPUTDIR)/tmp/sec-bin.zip -sec-files:: - $(prep-target) - $(RM) $(SEC_FILES_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(SEC_FILES_ZIP) $(SEC_FILES_DIRS) - $(java-vm-cleanup) - -# Create sec-windows-bin.zip -SEC_FILES_WIN_ZIP=$(IMAGES_OUTPUTDIR)/tmp/sec-windows-bin.zip -sec-files-win:: -ifeq ($(PLATFORM), windows) - $(prep-target) - $(RM) $(SEC_FILES_WIN_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(SEC_FILES_WIN_ZIP) $(SEC_FILES_WIN_DIRS) - $(java-vm-cleanup) -endif - -# Create JGSS files that contains the native Kerberos library -JGSS_WIN32_FILES_ZIP=$(IMAGES_OUTPUTDIR)/tmp/jgss-windows-i586-bin.zip -JGSS_WIN64_FILES_ZIP=$(IMAGES_OUTPUTDIR)/tmp/jgss-windows-x64-bin.zip -jgss-files:: -ifeq ($(PLATFORM), windows) - $(prep-target) - ifeq ($(ARCH_DATA_MODEL), 32) - $(RM) $(JGSS_WIN32_FILES_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(JGSS_WIN32_FILES_ZIP) $(JGSS_FILES_DIRS) - else - $(RM) $(JGSS_WIN64_FILES_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(JGSS_WIN64_FILES_ZIP) $(JGSS_FILES_DIRS) - endif - $(java-vm-cleanup) -endif - -# Create rt.jar -RT_JAR=$(IMAGES_OUTPUTDIR)/tmp/rt-orig.jar -$(RT_JAR): $(RT_JAR_FILELIST) $(RT_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(RT_JAR_MANIFEST_FILE) $@ \ - @$(RT_JAR_FILELIST) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# SE-Embedded targets if enabled -include $(JDK_TOPDIR)/makefiles/common/Release-embedded.gmk - - -###################################################### -# JRE Image -###################################################### - -initial-image-jre-setup: - $(RM) -r $(JRE_IMAGE_DIR) - $(MKDIR) -p $(JRE_IMAGE_DIR) - -# 64-bit solaris jre image contains only the 64-bit add-on files. -initial-image-jre-sol64:: initial-image-jre-setup - @# Use tar instead of cp to preserve the symbolic links - for dir in bin lib ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(ARCH)' -print` | \ - ($(CD) $(JRE_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - for l in $(NOTJRELIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/lib/$$l ; \ - done - $(RM) `$(FIND) $(JRE_IMAGE_DIR)/lib -name 'orb.idl'` - $(RM) `$(FIND) $(JRE_IMAGE_DIR)/lib -name 'ir.idl'` - -# Construct an initial jre image (initial jdk jre) no trimming or stripping -# See "initial-image-jdk-setup" for an explanation of the rm of -# drive names like C: -initial-image-jre:: initial-image-jre-setup \ - $(JRE_DOCFILES) \ - $(RT_JAR) $(RESOURCES_JAR) $(JSSE_JAR) $(JFR_JAR) $(DNS_JAR) $(LOCALEDATA_JAR) \ - $(BUILD_TOOLS) - @# Copy in bin directory - $(CD) $(OUTPUTDIR) && $(FIND) bin -depth | $(CPIO) -pdum $(JRE_IMAGE_DIR) - @# CTE plugin security change require new empty directory lib/applet - $(MKDIR) -p $(JRE_IMAGE_DIR)/lib/applet - @# Copy in lib directory - $(CD) $(OUTPUTDIR) && $(FIND) lib -depth | $(CPIO) -pdum $(JRE_IMAGE_DIR) - ifeq ($(USING_CYGWIN),true) - $(RM) -rf $(JRE_IMAGE_DIR)/[A-Za-z]: - $(RM) -rf $(OUTPUTDIR)/[A-Za-z]: - endif - @# Make sure all directories are read/execute for everyone - $(CHMOD) a+rx `$(FIND) $(JRE_IMAGE_DIR) -type d` - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - for l in $(NOTJRELIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/lib/$$l ; \ - done - @# Remove orb.idl and ir.idl from jre - $(FIND) $(JRE_IMAGE_DIR)/lib -name 'orb.idl' -exec $(RM) \{} \; - $(FIND) $(JRE_IMAGE_DIR)/lib -name 'ir.idl' -exec $(RM) \{} \; - @# Copy in rt.jar & resources.jar file - $(CP) $(RT_JAR) $(JRE_IMAGE_DIR)/lib/rt.jar - $(CP) $(RESOURCES_JAR) $(JRE_IMAGE_DIR)/lib/resources.jar - $(CP) $(JSSE_JAR) $(JRE_IMAGE_DIR)/lib/jsse.jar -ifneq ($(JFR_JAR),) - $(CP) $(JFR_JAR) $(JRE_IMAGE_DIR)/lib/jfr.jar -endif - $(CP) $(DNS_JAR) $(JRE_IMAGE_DIR)/lib/ext/dnsns.jar - $(CP) $(LOCALEDATA_JAR) $(JRE_IMAGE_DIR)/lib/ext/localedata.jar - @# Generate meta-index to make boot and extension class loaders lazier - $(CD) $(JRE_IMAGE_DIR)/lib && \ - $(TOOL_BUILDMETAINDEX) \ - -o meta-index *.jar - $(CD) $(JRE_IMAGE_DIR)/lib && $(java-vm-cleanup) - $(CD) $(JRE_IMAGE_DIR)/lib/ext && \ - $(TOOL_BUILDMETAINDEX) \ - -o meta-index *.jar - $(CD) $(JRE_IMAGE_DIR)/lib/ext && $(java-vm-cleanup) -ifeq ($(PLATFORM), macosx) - @#install jobjc, apple mac only - $(CP) $(OUTPUTDIR)/JObjC.build/JObjC.jar $(JRE_IMAGE_DIR)/lib/JObjC.jar -endif -ifeq ($(PLATFORM), windows) - @# Remove certain *.lib files - $(CD) $(JRE_IMAGE_DIR)/lib && \ - $(RM) java.$(LIB_SUFFIX) jvm.$(LIB_SUFFIX) \ - awt.$(LIB_SUFFIX) jawt.$(LIB_SUFFIX) - ifeq ($(ARCH_DATA_MODEL), 32) - @# The Java Kernel JRE image ships with a special VM. It is not included - @# in the full JRE image, so remove it. Also, is it only for 32-bit windows. - $(CD) $(JRE_IMAGE_DIR)/bin && $(RM) -r kernel - endif -endif # Windows -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JRE_IMAGE_DIR),$(JRE_MAN_PAGES)) -endif # !windows - -# Trim out any extra files not for the jre shipment but wanted in the jdk jre. -# (Note the jdk WILL want the jre image before this trimming) -# Removes server VM on Windows 32bit. -# Remove certain shared libraries that should not be in the jre image -# but should be in the jdk jre image. -trim-image-jre:: - @# Clean out all _the. files. - $(FIND) $(JRE_IMAGE_DIR) -name "_the.*" $(FIND_DELETE) -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - $(RM) -r $(JRE_IMAGE_DIR)/bin/server - endif - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/bin/$$l ; \ - done ; - endif -else # PLATFORM - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/lib/$(LIBARCH)/$$l ; \ - done ; - endif -endif # PLATFORM - -# Get list of all binary (COFF or Elf) files in the jre -JRE_BIN_LIST=$(TEMPDIR)/jre-bin-files.list -$(JRE_BIN_LIST): - $(RM) $@ -ifeq ($(PLATFORM), windows) - $(FIND) $(JRE_IMAGE_DIR)/bin -type f -name \*.exe \ - -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)" > $@ -else - $(FIND) $(JRE_IMAGE_DIR)/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JRE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on Elf files we are shipping) -# (Note the jdk WILL want the jre image before this processing) -process-image-jre:: $(JRE_BIN_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - @for f in `$(CAT) $(JRE_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - @for f in `$(CAT) $(JRE_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - @for f in `$(CAT) $(JRE_BIN_LIST)`; do \ - $(call binary_file_verification,$${f}); \ - done - $(RM) $(JRE_BIN_LIST) - -###################################################### -# JDK Image -###################################################### -# Note: cpio ($(CPIO)) sometimes leaves directories without rx access. - -# REMIND: the $(RM) calls for patterns like c:, d: following $(CPIO) -# are because the 1.7.x versions of cygwin's cpio command drops these -# in the working directory if the output path begins with that pattern -# The one for the output jre subdirectory gets there because cpio sees its -# own dropping in the input jre subdirectory. Need to remove both of these. -# We can remove these RM's if someone figures out how to stop cpio from -# leaving these there. -# Note that its a real problem not because this directory can end up in the -# bundle (I think it won't since it not in bin or lib and those are the -# only places from which we copy everything), but because the presence -# of this file causes cygwin's find to bomb out, thus breaking the build -# in "install". -initial-image-jdk-setup: - $(RM) -r $(JDK_IMAGE_DIR) - $(MKDIR) -p $(JDK_IMAGE_DIR)/jre - ($(CD) $(JRE_IMAGE_DIR) && $(FIND) . -depth -print \ - | $(CPIO) -pdum $(JDK_IMAGE_DIR)/jre ) - ifeq ($(USING_CYGWIN),true) - $(RM) -rf $(JRE_IMAGE_DIR)/[A-Za-z]: - $(RM) -rf $(JDK_IMAGE_DIR)/jre/[A-Za-z]: - endif - $(RM) -rf $(JDK_IMAGE_DIR)/jre/man - $(CHMOD) a+rx `$(FIND) $(JDK_IMAGE_DIR) -type d` - -initial-image-jdk64-bindemos: - for dir in bin demo ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(LIBARCH)' -print` | \ - ($(CD) $(JDK_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - -# Solaris 64 bit image is special -initial-image-jdk-sol64:: initial-image-jdk-setup \ - initial-image-jdk64-bindemos - -# DB files to add -ifdef OPENJDK - -initial-image-jdk-db: - -else - -# Create the list of db *.zip files to bundle with jdk -ABS_DB_PATH :=$(call FullPath,$(CLOSED_SHARE_SRC)/db) -DB_ZIP_LIST := $(shell $(LS) $(ABS_DB_PATH)/*.zip 2>/dev/null) -# Can't have : in these file names as they are used in a rule -# below. -ifdef USING_CYGWIN - DB_ZIP_LIST:=$(shell $(CYGPATH) -a -u $(DB_ZIP_LIST)) -endif - -# Java DB image. Move the Java DB demo directory into the JDK's demo -# dir and in the process, rename it to db. Also remove index.html, -# since it presumes docs are co-located. Also remove register.html (no -# longer relevant). -initial-image-jdk-db: $(DB_ZIP_LIST) - $(MKDIR) -p $(JDK_IMAGE_DIR)/db - for d in $(DB_ZIP_LIST); do \ - ($(CD) $(JDK_IMAGE_DIR)/db && $(UNZIP) -o $$d); \ - done - $(CP) $(ABS_DB_PATH)/README-JDK.html $(JDK_IMAGE_DIR)/db -ifndef NO_DEMOS - $(RM) -rf $(NEWDEMODIR)/db - $(MV) $(JDK_IMAGE_DIR)/db/demo $(NEWDEMODIR)/db - $(CP) $(ABS_DB_PATH)/README-JDK-DEMOS.html $(NEWDEMODIR)/db/ -else - $(RM) -rf $(JDK_IMAGE_DIR)/db/demo -endif - $(RM) $(JDK_IMAGE_DIR)/db/index.html $(JDK_IMAGE_DIR)/db/register.html -endif - -# The launcher source files we need for src.zip -FILES_launcher = $(wildcard $(SHARE_SRC)/bin/*) \ - $(wildcard $(PLATFORM_SRC)/bin/java_md*) - -# Standard jdk image -initial-image-jdk:: initial-image-jdk-setup \ - initial-image-jdk-db \ - $(JDK_DOCFILES) \ - $(JDK_DEMOS_AND_SAMPLES_DOCFILES) - $(MKDIR) $(JDK_IMAGE_DIR)/lib - @# - @# Copy in the jars in lib that only belong in the JDK - @# - for l in $(NOTJRELIBS); do \ - if [ -r $(LIBDIR)/$$l ]; then \ - $(CP) $(LIBDIR)/$$l $(JDK_IMAGE_DIR)/lib; \ - fi; \ - done - ifeq ($(PLATFORM), windows) - @# - @# lib/ - @# - $(CP) $(LIBDIR)/$(LIB_PREFIX)jvm.$(LIB_SUFFIX) $(JDK_IMAGE_DIR)/lib - $(CP) $(LIBDIR)/$(LIB_PREFIX)jawt.$(LIB_SUFFIX) $(JDK_IMAGE_DIR)/lib - @# - @# bin/ - @# - @# copy all EXE files and only certain DLL files from BINDIR - $(MKDIR) -p $(JDK_IMAGE_DIR)/bin - $(CP) $(BINDIR)/*$(EXE_SUFFIX) $(JDK_IMAGE_DIR)/bin - $(CP) $(BINDIR)/jli.$(LIBRARY_SUFFIX) $(JDK_IMAGE_DIR)/bin - ifeq ($(COMPILER_VERSION), VS2010) - $(CP) $(BINDIR)/msvc*100.$(LIBRARY_SUFFIX) $(JDK_IMAGE_DIR)/bin - endif - else # PLATFORM - @# - @# bin/ - @# - ($(CD) $(BINDIR)/.. && $(TAR) cf - \ - `$(FIND) bin \( -type f -o -type l \) -print `) | \ - ($(CD) $(JDK_IMAGE_DIR) && $(TAR) xf -) - endif # PLATFORM - @# - @# lib/tools.jar - @# - $(MKDIR) -p $(IMAGES_OUTPUTDIR)/lib - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $(IMAGES_OUTPUTDIR)/lib/tools.jar \ - $(TOOLS) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - $(CP) $(IMAGES_OUTPUTDIR)/lib/tools.jar $(JDK_IMAGE_DIR)/lib/tools.jar - @# - @# lib/ct.sym - @# - $(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym - $(BOOT_JAVA_CMD) \ - -Xbootclasspath/p:$(JAVAC_JAR) \ - -Xbootclasspath/a:$(JDK_OUTPUTDIR)/classes \ - -jar $(JAVAC_JAR) $(JAVACFLAGS) \ - -XDprocess.packages -proc:only \ - -processor com.sun.tools.javac.sym.CreateSymbols \ - -Acom.sun.tools.javac.sym.Jar=$(RT_JAR) \ - -Acom.sun.tools.javac.sym.Dest=$(IMAGES_OUTPUTDIR)/symbols/META-INF/sym/rt.jar \ - $(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS) $(EXPORTED_PRIVATE_PKGS) - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $(IMAGES_OUTPUTDIR)/lib/ct.sym \ - -C $(IMAGES_OUTPUTDIR)/symbols META-INF $(BOOT_JAR_JFLAGS) - $(java-vm-cleanup) - $(CP) $(IMAGES_OUTPUTDIR)/lib/ct.sym $(JDK_IMAGE_DIR)/lib/ct.sym - @# - @# CORBA supported orb.idl and ir.idl should be copied to lib - @# - $(CP) $(LIBDIR)/orb.idl $(JDK_IMAGE_DIR)/lib/orb.idl - $(CP) $(LIBDIR)/ir.idl $(JDK_IMAGE_DIR)/lib/ir.idl - ifeq ($(PLATFORM), linux) - @# - @# on Linux copy jexec from jre/lib to /lib - @# - $(CP) $(LIBDIR)/jexec $(JDK_IMAGE_DIR)/lib/jexec - endif # PLATFORM - @# - @# src.zip - @# - $(MKDIR) -p $(JDK_IMAGE_DIR)/src - @# - @# The '*-*' pattern in the find command excludes files named with dashes, - @# such as the java.nio templates for generated classes - @# - @# The Linux 'tar' command cannot handle the huge command line argument - @# generated by the more efficient solaris/windows method of copying files. - @# So for Linux, make use of the -T option (like Solaris' -I option) of - @# obtaining the list of files from a file. MKS tar has no such option. - - ifneq (,$(findstring $(PLATFORM), linux macosx)) - for d in $(SOURCE_DIRS); do \ - $(RM) $(IMAGES_OUTPUTDIR)/tmp/src-files.list; \ - ($(CD) $$d && \ - for sd in $(SOURCES) ; do \ - if [ -d $$sd ] ; then \ - $(FIND) $$sd $(SOURCE_FILES_filter) \ - -name '*.java' -print \ - >> $(IMAGES_OUTPUTDIR)/tmp/src-files.list ; \ - fi; \ - done ; \ - ) ; \ - if [ -f $(IMAGES_OUTPUTDIR)/tmp/src-files.list ] ; then \ - ($(CD) $$d && $(TAR) cf - -T $(IMAGES_OUTPUTDIR)/tmp/src-files.list ) \ - | ($(CD) $(JDK_IMAGE_DIR)/src && $(TAR) xf -); \ - fi; \ - done - else - for d in $(SOURCE_DIRS); do \ - $(RM) $(IMAGES_OUTPUTDIR)/tmp/src-files.list; \ - ($(CD) $$d && \ - for sd in $(SOURCES) ; do \ - if [ -d $$sd ] ; then \ - $(FIND) $$sd $(SOURCE_FILES_filter) \ - -name '*.java' -print \ - >> $(IMAGES_OUTPUTDIR)/tmp/src-files.list ; \ - fi; \ - done ; \ - ) ; \ - if [ -f $(IMAGES_OUTPUTDIR)/tmp/src-files.list ] ; then \ - ($(CD) $$d && $(TAR) cf - `$(CAT) $(IMAGES_OUTPUTDIR)/tmp/src-files.list`) \ - | ($(CD) $(JDK_IMAGE_DIR)/src && $(TAR) xf -); \ - fi; \ - done - endif - $(RM) $(IMAGES_OUTPUTDIR)/tmp/src-files.list - $(CHMOD) -R +w $(JDK_IMAGE_DIR)/src - $(MKDIR) -p $(JDK_IMAGE_DIR)/src/launcher - $(CP) $(FILES_launcher) $(JDK_IMAGE_DIR)/src/launcher - $(CD) $(JDK_IMAGE_DIR)/src && $(ZIPEXE) -qr ../src.zip * - $(RM) -r $(JDK_IMAGE_DIR)/src - @# - @# demo, include - @# -ifndef NO_DEMOS - mkdir -p $(JDK_IMAGE_DIR)/demo - $(CP) -r -f $(NEWDEMODIR)/* $(JDK_IMAGE_DIR)/demo - $(FIND) $(JDK_IMAGE_DIR)/demo -name "_the.*" $(FIND_DELETE) -endif -ifndef NO_SAMPLES - $(CP) -r -f $(SAMPLEDIR) $(JDK_IMAGE_DIR) -endif - $(CP) -r $(INCLUDEDIR) $(JDK_IMAGE_DIR) - @# - @# Swing BeanInfo generation - @# - $(CP) $(JDK_OUTPUTDIR)/lib/dt.jar $(JDK_IMAGE_DIR)/lib/dt.jar -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JDK_IMAGE_DIR),$(JDK_MAN_PAGES)) -endif # !windows - -# Trim out files we don't want to ship -trim-image-jdk:: - @# Clean out all _the. files. - $(FIND) $(JDK_IMAGE_DIR) -name "_the.*" $(FIND_DELETE) - @# Remove tools that should not be part of SDK. - for t in $(NOTJDKTOOLS); do \ - $(RM) $(JDK_IMAGE_DIR)/bin/$${t}$(EXE_SUFFIX); \ - done - -# Get list of binary (COFF or Elf) files in the jdk -JDK_BIN_LIST=$(TEMPDIR)/jdk-bin-files.list -$(JDK_BIN_LIST): -ifeq ($(PLATFORM), windows) - $(FIND) $(JDK_IMAGE_DIR)/jre/bin -type f -name \*.exe \ - -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)" > $@ - $(FIND) $(JDK_IMAGE_DIR)/bin -type f -name \*.exe \ - -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)" >> $@ -else - $(RM) $@ - $(FIND) $(JDK_IMAGE_DIR)/jre/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JDK_IMAGE_DIR)/jre/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ - $(FILE) `$(FIND) $(JDK_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on files we are shipping) -process-image-jdk:: $(JDK_BIN_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - @for f in `$(CAT) $(JDK_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - @for f in `$(CAT) $(JDK_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - @for f in `$(CAT) $(JDK_BIN_LIST)`; do \ - $(call binary_file_verification,$${f}); \ - done - $(RM) $(JDK_BIN_LIST) - -################################################################### -# What did we build -################################################################### - -# The jdk text info file that lives at the root of the install image. - -JDK_INFO_FILE = $(JDK_IMAGE_DIR)/release -JRE_INFO_FILE = $(JRE_IMAGE_DIR)/release - -# Common way to emit a line into the release or info file -define info-file-item # name value -$(PRINTF) '%s="%s"\n' $1 $2 >> $@ -endef - -# Values to emit -MINIMUM_OS_NAME := $(REQUIRED_OS_NAME) -MINIMUM_OS_VERSION := $(REQUIRED_OS_VERSION) -MINIMUM_OS_ARCH := $(ARCH) -ALL_SOURCE_TIPS = $(shell \ - if [ -f $(SOURCE_TIPS) ] ; then \ - $(CAT) $(SOURCE_TIPS) ; \ - fi) - -$(JDK_INFO_FILE): FRC - $(prep-target) - $(call info-file-item, "JAVA_VERSION", "$(THIS_JDK_VERSION)") - $(call info-file-item, "OS_NAME", "$(MINIMUM_OS_NAME)") - $(call info-file-item, "OS_VERSION", "$(MINIMUM_OS_VERSION)") - $(call info-file-item, "OS_ARCH", "$(MINIMUM_OS_ARCH)") - $(call info-file-item, "SOURCE", "$(ALL_SOURCE_TIPS)") - -# Create release file to identify this image -identify-image-jdk:: $(JDK_INFO_FILE) - -$(JRE_INFO_FILE): FRC - $(prep-target) - $(call info-file-item, "JAVA_VERSION", "$(THIS_JDK_VERSION)") - $(call info-file-item, "OS_NAME", "$(MINIMUM_OS_NAME)") - $(call info-file-item, "OS_VERSION", "$(MINIMUM_OS_VERSION)") - $(call info-file-item, "OS_ARCH", "$(MINIMUM_OS_ARCH)") - $(call info-file-item, "SOURCE", "$(ALL_SOURCE_TIPS)") - -# Create release file to identify this image -identify-image-jre:: $(JRE_INFO_FILE) - -images images-clobber:: - $(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..." - $(java-vm-cleanup) - -.PHONY: images image-jre image-jdk \ - initial-image-jre initial-image-jdk \ - initial-image-jre-sol64 initial-image-jdk-sol64 \ - initial-image-jdk-setup \ - initial-image-jdk-db \ - initial-image-jdk64-bindemos \ - initial-image-jre-setup \ - trim-image-jre trim-image-jdk \ - process-image-jre process-image-jdk \ - identify-image-jre identify-image-jdk \ - images-clobber - -# Force rule -FRC: - diff --git a/jdk/makefiles/common/Rules.gmk b/jdk/makefiles/common/Rules.gmk deleted file mode 100644 index 9e9163a887b..00000000000 --- a/jdk/makefiles/common/Rules.gmk +++ /dev/null @@ -1,357 +0,0 @@ -# -# Copyright (c) 1995, 2008, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# -# Rules shared by all Java makefiles. -# -# Used to apply to source file $<, checks code conventions, issues warnings. -define check-conventions - if [ "$(CONVENTION_WATCH)" = "true" ] ; then \ - if [ "`$(CAT) -n -v -t $< | $(EGREP) -v '\@\(\#\)' | $(EGREP) '\^[MLI]'`" != "" ] ; then \ - $(ECHO) "WARNING: File contains tabs, ^M, or ^L characters: $<"; \ - if [ "$(CONVENTION_DETAILS)" = "true" ] ; then \ - $(CAT) -n -v -t $< | $(EGREP) -v '\@\(\#\)' | $(EGREP) '\^[MLI]' ; \ - fi; \ - fi; \ - fi -endef - -# Make sure the default rule is all -rules_default_rule: all - -# -# Directory set up. (Needed by deploy workspace) -# -$(CLASSDESTDIR) $(CLASSHDRDIR) $(OBJDIR) $(OUTPUTDIR) $(BINDIR) $(LIBDIR) $(LIBDIR)/$(LIBARCH) $(TEMPDIR) $(EXTDIR): - $(MKDIR) -p $@ - -# -# All source tree areas for java/properties files (a few may be closed) -# -ifeq ($(PLATFORM), macosx) - ifdef OPENJDK - ALL_CLASSES_SRC = $(call JavaSrcDirList,,classes) - else - ALL_CLASSES_SRC = \ - $(CLOSED_SHARE_SRC)/classes $(CLOSED_PLATFORM_SRC)/classes \ - $(call JavaSrcDirList,,classes) - endif -else - ifdef OPENJDK - ALL_CLASSES_SRC = $(SHARE_SRC)/classes $(PLATFORM_SRC)/classes - else - ALL_CLASSES_SRC = \ - $(CLOSED_SHARE_SRC)/classes $(CLOSED_PLATFORM_SRC)/classes \ - $(SHARE_SRC)/classes $(PLATFORM_SRC)/classes - endif -endif - -# -# If AUTO_FILES_PROPERTIES_DIRS used, automatically find properties files -# -ifdef AUTO_FILES_PROPERTIES_DIRS - AUTO_FILES_PROPERTIES_FILTERS1 = $(SCM_DIRs) ',*' - AUTO_FILES_PROPERTIES_FILTERS1 += $(AUTO_PROPERTIES_PRUNE) - FILES_properties_find_filters1 = $(AUTO_FILES_PROPERTIES_FILTERS1:%=-name % -prune -o) - FILES_properties_auto1 := \ - $(shell \ - for dir in $(ALL_CLASSES_SRC) ; do \ - if [ -d $$dir ] ; then \ - ( $(CD) $$dir; \ - for sdir in $(AUTO_FILES_PROPERTIES_DIRS); do \ - if [ -d $$sdir ] ; then \ - $(FIND) $$sdir $(FILES_properties_find_filters1) \ - -name '*.properties' -print ; \ - fi ; \ - done \ - ); \ - fi; \ - done \ - ) -else - FILES_properties_auto1 = -endif # AUTO_FILES_PROPERTIES_DIRS - -# Add any automatically found properties files to the properties file list -FILES_properties += $(FILES_properties_auto1) - -# -# Get Resources help -# -include $(JDK_TOPDIR)/makefiles/common/internal/Resources.gmk - -# -# Compiling .java files. -# - -# -# Automatically add to FILES_java if AUTO_FILES_JAVA_DIRS is defined -# -# There are two basic types of sources, normal source files and the -# generated ones. The Normal sources will be located in: -# $(ALL_CLASSES_SRC) -# The generated sources, which might show up late to dinner, are at: -# $(GENSRCDIR) -# and since they could be generated late, we need to be careful that -# we look for these sources late and not use the ':=' assignment which -# might miss their generation. - -ifdef AUTO_FILES_JAVA_DIRS - # Filter out these files or directories - AUTO_FILES_JAVA_SOURCE_FILTERS1 = $(SCM_DIRs) ',*' - AUTO_FILES_JAVA_SOURCE_FILTERS2 = - AUTO_FILES_JAVA_SOURCE_FILTERS1 += $(AUTO_JAVA_PRUNE) - AUTO_FILES_JAVA_SOURCE_FILTERS2 += $(AUTO_JAVA_PRUNE) - - # First list is the normal sources that should always be there, - # by using the ':=', which means we do this processing once. - FILES_java_find_filters1 = $(AUTO_FILES_JAVA_SOURCE_FILTERS1:%=-name % -prune -o) - FILES_java_auto1 := \ - $(shell \ - for dir in $(ALL_CLASSES_SRC) ; do \ - if [ -d $$dir ] ; then \ - ( $(CD) $$dir; \ - for sdir in $(AUTO_FILES_JAVA_DIRS); do \ - if [ -d $$sdir ] ; then \ - $(FIND) $$sdir $(FILES_java_find_filters1) \ - -name '*.java' -print ; \ - fi ; \ - done \ - ); \ - fi; \ - done \ - ) - # Second list is the generated sources that should be rare, but will likely - # show up late and we need to look for them at the last minute, so we - # cannot use the ':=' assigment here. But if this gets expanded multiple - # times, the if tests should make them relatively cheap. - FILES_java_find_filters2 = $(AUTO_FILES_JAVA_SOURCE_FILTERS2:%=-name % -prune -o) - FILES_java_auto2 = \ - $(shell \ - for dir in $(GENSRCDIR); do \ - if [ -d $$dir ] ; then \ - ( $(CD) $$dir; \ - for sdir in $(AUTO_FILES_JAVA_DIRS); do \ - if [ -d $$sdir ] ; then \ - $(FIND) $$sdir $(FILES_java_find_filters2) \ - -name '*.java' -print ; \ - fi ; \ - done \ - ); \ - fi; \ - done \ - ) -else - FILES_java_auto1 = - FILES_java_auto2 = -endif - -# Add all found java sources to FILES_java macro (if AUTO_FILES_JAVA_DIRS used) -FILES_java += $(FILES_java_auto1) $(FILES_java_auto2) - -# File that will hold java source names that need compiling -JAVA_SOURCE_LIST=$(TEMPDIR)/.classes.list - -# Add a java source to the list -define add-java-file -$(ECHO) "$?" >> $(JAVA_SOURCE_LIST) -$(check-conventions) -endef - -ifdef DEMOS -$(CLASSDESTDIR)/%.class: $(SOURCEPATH)/%.java - $(add-java-file) -#Redirect zh_HK java files to tmp directory which created from zh_TW -#$(CLASSDESTDIR)/%_zh_HK.class: $(JDK_L10N_TMP_OUTPUTDIR)/%_zh_HK.java -# $(add-java-file) -else - -# -# Rules for closed files -# -# If filenames are duplicated between open/closed workspaces, prefer -# the closed files. -# -# Rule ordering in this Makefile is important: some targets depend -# on closed files replacing open ones, and thus the closed file rules -# must be found before the open ones. -# -# Don't reorder without consulting teams that depend on this behavior. -# -ifndef OPENJDK -$(CLASSDESTDIR)/%.class: $(CLOSED_PLATFORM_SRC)/classes/%.java - $(add-java-file) -$(CLASSDESTDIR)/%.class: $(CLOSED_SHARE_SRC)/classes/%.java - $(add-java-file) -endif - -$(CLASSDESTDIR)/%.class: $(GENSRCDIR)/%.java - $(add-java-file) - -ifeq ($(PLATFORM), macosx) -$(CLASSDESTDIR)/%.class: $(JDK_TOPDIR)/src/macosx/classes/%.java - $(add-java-file) -endif -$(CLASSDESTDIR)/%.class: $(PLATFORM_SRC)/classes/%.java - $(add-java-file) - -$(CLASSDESTDIR)/%.class: $(SHARE_SRC)/classes/%.java - $(add-java-file) - -#Redirect zh_HK java files to tmp directory which created from zh_TW -$(CLASSDESTDIR)/%_zh_HK.class: $(JDK_L10N_TMP_OUTPUTDIR)/%_zh_HK.java - $(add-java-file) -endif - -# List of class files needed -FILES_class = $(FILES_java:%.java=$(CLASSDESTDIR)/%.class) - -# Got to include exported files. -FILES_class += $(FILES_export:%.java=$(CLASSDESTDIR)/%.class) - -# Construct list of java sources we need to compile -source_list_prime: - mkdir -p $(TEMPDIR) -# Note that we slip resources in so that compiled properties files get created: -$(JAVA_SOURCE_LIST) : source_list_prime resources $(FILES_class) - touch $@ - -.delete.classlist: - rm -f $(JAVA_SOURCE_LIST) - -# Make sure all newer sources are compiled (in a batch) -classes : $(CLASSES_INIT) .delete.classlist .compile.classlist - -.compile.classlist : $(JAVA_SOURCE_LIST) - $(MKDIR) -p $(CLASSDESTDIR) - $(RM) $<.filtered - $(CAT) $< | $(NAWK) 'length>0' | $(SORT) -u > $<.filtered - numfiles=`$(WC) -l < $<.filtered` ; \ - if [ $$numfiles -ge 1 ] ; then \ - $(ECHO) "# Java sources to be compiled: (listed in file $<)"; \ - $(CAT) $<.filtered; \ - $(ECHO) "# Running javac: $$numfiles files; in $(CURDIR)"; \ - $(ECHO) $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered; \ - $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered && \ - $(ECHO) "# javac finished"; \ - fi - $(java-vm-cleanup) - -clobber clean:: - rm -f $(JAVA_SOURCE_LIST) - -ifndef DONT_CLOBBER_CLASSES - ifndef PACKAGE - DONT_CLOBBER_CLASSES = true - else - DONT_CLOBBER_CLASSES = false - endif -endif - -packages.clean: -ifeq ($(DONT_CLOBBER_CLASSES),false) - ifdef AUTO_FILES_JAVA_DIRS - for sdir in $(AUTO_FILES_JAVA_DIRS); do \ - echo "rm -f -r $(CLASSDESTDIR)/$$sdir"; \ - rm -f -r $(CLASSDESTDIR)/$$sdir; \ - done - else - rm -f -r $(CLASSDESTDIR)/$(PKGDIR) - endif -endif - -ifdef DEMOS -classes.clean: - rm -f -r $(DEMODST) $(CLASSDESTDIR) -else -classes.clean: packages.clean - rm -f $(JAVA_SOURCE_LIST) -endif - -# -# C and C++ make dependencies -# -include $(JDK_TOPDIR)/makefiles/common/internal/NativeCompileRules.gmk - -# -# Running Javah to generate stuff into CClassHeaders. -# - -ifdef FILES_export - -CLASSES.export = $(subst /,.,$(FILES_export:%.java=%)) -CLASSES.export += $(subst /,.,$(FILES_export2:%.java=%)) -CLASSES.export += $(subst /,.,$(FILES_export3:%.java=%)) -CLASSES_export = $(FILES_export:%.java=$(CLASSDESTDIR)/%.class) -CLASSES_export += $(FILES_export2:%.java=$(CLASSDESTDIR)/%.class) -CLASSES_export += $(FILES_export3:%.java=$(CLASSDESTDIR)/%.class) - -# Fix when deploy workspace makefiles don't depend on this name -#CLASSHDR_DOTFILE=$(CLASSHDRDIR)/.classheaders - -CLASSHDR_DOTFILE=$(OBJDIR)/.class.headers.$(ARCH) - -classheaders: classes $(CLASSHDR_DOTFILE) - -$(CLASSHDR_DOTFILE): $(CLASSES_export) - $(prep-target) - echo "# Running javah:" - echo $(UNCYGDRIVE) $(JAVAH_CMD) -d $(CLASSHDRDIR)/ \ - $(CLASSES.export) $(subst $$,\$$,$(EXPORTED_inner)) - $(UNCYGDRIVE) $(JAVAH_CMD) -d $(CLASSHDRDIR)/ \ - $(CLASSES.export) $(subst $$,\$$,$(EXPORTED_inner)) - $(java-vm-cleanup) - touch $@ - -classheaders.clean: - rm -f $(CLASSHDR_DOTFILE) - rm -f -r $(CLASSHDRDIR) - -else # FILES_export - -classheaders: classes - -classheaders.clean: - -endif # FILES_export - -clean clobber:: classheaders.clean classes.clean .delete.classlist - -# -# Default dependencies -# - -all: build - -build: classheaders - -default: all - -.PHONY: all build clean clobber \ - .delete.classlist classes .compile.classlist classes.clean \ - classheaders classheaders.clean \ - batch_compile - diff --git a/jdk/makefiles/common/Subdirs.gmk b/jdk/makefiles/common/Subdirs.gmk deleted file mode 100644 index b8c5405d160..00000000000 --- a/jdk/makefiles/common/Subdirs.gmk +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright (c) 2010, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Generic makefile for building subdirectories. -# -# SUBDIRS variables to specify the subdirectories to build recursively. -# Makefile has to include Subdirs.gmk AFTER all SUBDIRS variables are -# defined. -# -# This file does not contain any rule. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. - -# -# SUBDIRS subdirs for the base module always get built -# SUBDIRS_ subdirs for the named group -# -# By default, subdirs specified in the SUBDIRS and all SUBDIRS_* -# variables will be built. -# -# Variables of the currently supported groups are: -# SUBDIRS_desktop -# SUBDIRS_management -# SUBDIRS_enterprise -# SUBDIRS_misc -# SUBDIRS_tools -# -# Change to the above list also need to update -# make/common/shared/Sanity.gmk. NOTE: this list is subject -# to change. -# -# Eventually we want to restructure the make directory -# according to these grouping (e.g. make/desktop/...) and -# the SUBDIRS_ variables would not be needed. -# - -# Iterate the subdirectories specified in $1. -# - cd into each subdir and make them - -# Given a SUBDIRS* list (first argument), cd into them and make them -# SUBDIRS_MAKEFLAGS Make settings for a subdir make -# SUBDIRS_MAKEFLAGS-$@ Make settings specific to this target -# -define subdirs-group-loop -$(ECHO) "Begin Processing SUBDIRS: $($1)" -for i in DUMMY $($1) ; do \ - if [ "$$i" != "DUMMY" ] ; then \ - $(MAKE) -C $$i $@ $(SUBDIRS_MAKEFLAGS) $(SUBDIRS_MAKEFLAGS-$@) \ - FULL_VERSION=$(FULL_VERSION) RELEASE=$(RELEASE) || exit 1; \ - fi ; \ -done -$(ECHO) "Done Processing SUBDIRS: $($1)" -endef - -# Given a OTHERSUBDIRS list, cd into them and make them (extra loop define) -# OTHERSUBDIRS_MAKEFLAGS Make settings for a subdir make -define OTHERSUBDIRS-loop -$(ECHO) "Begin Processing OTHERSUBDIRS: $(OTHERSUBDIRS)" -for i in DUMMY $(OTHERSUBDIRS) ; do \ - if [ "$$i" != "DUMMY" ] ; then \ - $(MAKE) -C $$i $@ $(OTHERSUBDIRS_MAKEFLAGS) \ - FULL_VERSION=$(FULL_VERSION) RELEASE=$(RELEASE) || exit 1; \ - fi ; \ -done -$(ECHO) "Done Processing OTHERSUBDIRS: $(OTHERSUBDIRS)" -endef - -# -# Iterate the list specified in SUBDIRS_ only if -# SUBDIRS_ is set. -# -ifdef SUBDIRS_desktop - define subdirs-desktop-loop - $(call subdirs-group-loop,SUBDIRS_desktop) - endef -else - define subdirs-desktop-loop - endef -endif # SUBDIRS_desktop - -ifdef SUBDIRS_enterprise - define subdirs-enterprise-loop - $(call subdirs-group-loop,SUBDIRS_enterprise) - endef -else -define subdirs-enterprise-loop -endef -endif # SUBDIRS_enterprise - -ifdef SUBDIRS_management - define subdirs-management-loop - $(call subdirs-group-loop,SUBDIRS_management) - endef -else - define subdirs-management-loop - endef -endif # SUBDIRS_management - -ifdef SUBDIRS_misc - define subdirs-misc-loop - $(call subdirs-group-loop,SUBDIRS_misc) - endef -else - define subdirs-misc-loop - endef -endif # SUBDIRS_misc - -ifdef SUBDIRS_tools - define subdirs-tools-loop - $(call subdirs-group-loop,SUBDIRS_tools) - endef -else - define subdirs-tools-loop - endef -endif # SUBDIRS_tools - -# -# If BUILD_MODULES is not set or it's set to "all", -# iterate all groups. -SUBDIRS_all = $(SUBDIRS) $(SUBDIRS_desktop) $(SUBDIRS_enterprise) \ - $(SUBDIRS_management) $(SUBDIRS_misc) $(SUBDIRS_tools) - -define SUBDIRS-loop - $(call subdirs-group-loop,SUBDIRS_all) -endef diff --git a/jdk/makefiles/common/internal/Defs-corba.gmk b/jdk/makefiles/common/internal/Defs-corba.gmk deleted file mode 100644 index 20468696196..00000000000 --- a/jdk/makefiles/common/internal/Defs-corba.gmk +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) 1997, 2007, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# The specific packages that come from or go to rt.jar and tools.jar -IMPORT_RT_PACKAGES += \ - org/omg/CORBA \ - org/omg/CORBA_2_3 \ - org/omg/CosNaming \ - org/omg/Dynamic \ - org/omg/DynamicAny \ - org/omg/IOP \ - org/omg/Messaging \ - org/omg/PortableInterceptor \ - org/omg/PortableServer \ - org/omg/SendingContext \ - org/omg/stub/java/rmi \ - javax/rmi \ - javax/rmi/CORBA \ - javax/activity \ - javax/transaction \ - com/sun/corba/se/GiopIDL \ - com/sun/corba/se/PortableActivationIDL \ - com/sun/corba/se/impl \ - com/sun/corba/se/internal \ - com/sun/corba/se/org/omg/CORBA \ - com/sun/corba/se/pept \ - com/sun/corba/se/spi \ - com/sun/org/omg/CORBA \ - com/sun/org/omg/SendingContext \ - com/sun/tools/corba/se/logutil \ - sun/corba \ - sun/rmi/rmic/iiop - -IMPORT_TOOLS_PACKAGES += \ - com/sun/tools/corba/se/idl \ - sun/rmi/rmic/iiop - -IMPORT_CORBA_BINARIES += \ - lib/orb.idl \ - lib/ir.idl - diff --git a/jdk/makefiles/common/internal/Defs-jaxp.gmk b/jdk/makefiles/common/internal/Defs-jaxp.gmk deleted file mode 100644 index eb5813c970e..00000000000 --- a/jdk/makefiles/common/internal/Defs-jaxp.gmk +++ /dev/null @@ -1,53 +0,0 @@ -# -# Copyright (c) 1997, 2007, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# The specific packages that come from or go to rt.jar and tools.jar -IMPORT_RT_PACKAGES += \ - org/w3c/dom \ - org/xml/sax \ - javax/xml/XMLConstants.class \ - javax/xml/datatype \ - javax/xml/namespace \ - javax/xml/parsers \ - javax/xml/stream \ - javax/xml/transform \ - javax/xml/validation \ - javax/xml/xpath \ - com/sun/java_cup \ - com/sun/org/apache/bcel \ - com/sun/org/apache/regexp \ - com/sun/org/apache/xalan \ - com/sun/org/apache/xerces \ - com/sun/org/apache/xml/internal/dtm \ - com/sun/org/apache/xml/internal/res \ - com/sun/org/apache/xml/internal/resolver \ - com/sun/org/apache/xml/internal/serialize \ - com/sun/org/apache/xml/internal/serializer \ - com/sun/org/apache/xml/internal/utils \ - com/sun/org/apache/xpath \ - com/sun/xml/internal/stream - -IMPORT_TOOLS_PACKAGES += - diff --git a/jdk/makefiles/common/internal/Defs-jaxws.gmk b/jdk/makefiles/common/internal/Defs-jaxws.gmk deleted file mode 100644 index f0ba12b292a..00000000000 --- a/jdk/makefiles/common/internal/Defs-jaxws.gmk +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) 1997, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# The specific packages that come from or go to rt.jar and tools.jar -IMPORT_RT_PACKAGES += \ - META-INF/mailcap.default \ - META-INF/mimetypes.default \ - javax/activation \ - com/sun/activation \ - javax/xml/bind \ - javax/xml/soap \ - javax/xml/ws \ - javax/jws \ - javax/annotation \ - com/sun/xml/internal/bind \ - com/sun/xml/internal/fastinfoset \ - com/sun/xml/internal/messaging \ - com/sun/xml/internal/org/jvnet \ - com/sun/xml/internal/txw2 \ - com/sun/xml/internal/ws \ - com/sun/xml/internal/stream/buffer - -NOT_USED_PACKAGES += \ - com/sun/tools/internal/txw2 - -IMPORT_TOOLS_PACKAGES += \ - com/sun/codemodel \ - com/sun/istack/internal/tools \ - com/sun/xml/internal/rngom \ - com/sun/xml/internal/xsom \ - com/sun/xml/internal/dtdparser \ - com/sun/tools/internal/xjc \ - com/sun/tools/internal/ws \ - com/sun/tools/internal/jxc \ - org/relaxng \ - META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ - META-INF/services/com.sun.tools.internal.xjc.Plugin \ - com/sun/tools/internal/jxc/ap \ - com/sun/tools/internal/ws/wscompile/plugin/at_generated - - diff --git a/jdk/makefiles/common/internal/Defs-langtools.gmk b/jdk/makefiles/common/internal/Defs-langtools.gmk deleted file mode 100644 index eebbfd0cbcb..00000000000 --- a/jdk/makefiles/common/internal/Defs-langtools.gmk +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (c) 1997, 2008, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# The specific packages that come from or go to rt.jar and tools.jar - -IMPORT_RT_PACKAGES += \ - javax/annotation/processing \ - javax/lang/model \ - javax/tools - -IMPORT_TOOLS_PACKAGES += \ - com/sun/javadoc \ - com/sun/source \ - com/sun/tools/classfile \ - com/sun/tools/doclets \ - com/sun/tools/javac \ - com/sun/tools/javadoc \ - com/sun/tools/javah \ - com/sun/tools/javap - diff --git a/jdk/makefiles/common/internal/ImportComponents.gmk b/jdk/makefiles/common/internal/ImportComponents.gmk deleted file mode 100644 index 995de5b6e9a..00000000000 --- a/jdk/makefiles/common/internal/ImportComponents.gmk +++ /dev/null @@ -1,173 +0,0 @@ -# -# Copyright (c) 1997, 2008, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - --include $(SPEC) - -# JDK jars where component classes come from as second choice -JDK_RT_JAR = $(JDK_IMPORT_PATH)/jre/lib/rt.jar -JDK_TOOLS_JAR = $(JDK_IMPORT_PATH)/lib/tools.jar -JDK_RESOURCES_JAR = $(JDK_IMPORT_PATH)/jre/lib/resources.jar - -# The specific packages that come from or go to rt.jar and tools.jar -# IF the component deliverables are not available. -IMPORT_TOOLS_PACKAGES = -IMPORT_RT_PACKAGES = - -# The following will add to IMPORT_TOOLS_PACKAGES and/or IMPORT_RT_PACKAGES -ifndef LANGTOOLS_DIST - include $(BUILDDIR)/common/internal/Defs-langtools.gmk -endif -ifndef CORBA_DIST - include $(BUILDDIR)/common/internal/Defs-corba.gmk -endif -ifndef JAXP_DIST - include $(BUILDDIR)/common/internal/Defs-jaxp.gmk -endif -ifndef JAXWS_DIST - include $(BUILDDIR)/common/internal/Defs-jaxws.gmk -endif - -# Clean up these lists so empty lists are empty -IMPORT_TOOLS_PACKAGES := $(strip $(IMPORT_TOOLS_PACKAGES)) -IMPORT_RT_PACKAGES := $(strip $(IMPORT_RT_PACKAGES)) - -# Relative paths to import component deliverables -CLASSES_JAR_FILE=lib/classes.jar -SRC_ZIP_FILE=lib/src.zip -BIN_ZIP_FILE=lib/bin.zip -DOC_ZIP_FILE=lib/doc.zip - -################################################################# -# Macros: - -# Importing component class files -define import-one-classes -if [ "$($1)" != "" ] ; then \ - $(ECHO) "Importing classes from component $1"; \ - $(call Unjar,$2,$($1)/$(CLASSES_JAR_FILE),); \ -fi -endef - -# Importing optional component doc files (for man pages?) -define import-one-docs -if [ "$($1)" != "" -a -f $($1)/$(DOC_ZIP_FILE) ] ; then \ - $(ECHO) "Importing docs from component $1"; \ - $(call Unzipper,$2,$($1)/$(DOC_ZIP_FILE)); \ -fi -endef - -# Importing optional component src files (for jdk src.zip and javadoc) -define import-one-sources -if [ "$($1)" != "" ] ; then \ - $(ECHO) "Importing sources from component $1"; \ - $(call Unzipper,$2,$($1)/$(SRC_ZIP_FILE)); \ -fi -endef - -# Importing optional component bin files (for install image) -define import-one-binaries -if [ "$($1)" != "" -a -f $($1)/$(BIN_ZIP_FILE) ] ; then \ - $(ECHO) "Importing binaries from component $1"; \ - $(call Unzipper,$2,$($1)/$(BIN_ZIP_FILE)); \ -fi -endef - -# Unzip zip file $2 into directory $1 (if $2 exists) -# Warning: $2 must be absolute path not relative -define Unzipper -( \ - $(MKDIR) -p $1; \ - ( $(CD) $1 && $(UNZIP) -o $2 > /dev/null ) \ -) -endef - -# Unjar directories $3 from jar file $2 into directory $1 (if $2 exists) -# Warning: $2 must be absolute path not relative -define Unjar -( \ - $(MKDIR) -p $1; \ - ( $(CD) $1 && $(BOOT_JAR_CMD) xf $2 $3 $(BOOT_JAR_JFLAGS) ) && \ - ( $(CD) $1 && $(java-vm-cleanup) ) \ -) -endef - -# Import all component sources into directory $1 -define import-component-sources -$(call import-one-sources,LANGTOOLS_DIST,$1) -$(call import-one-sources,CORBA_DIST,$1) -$(call import-one-sources,JAXP_DIST,$1) -$(call import-one-sources,JAXWS_DIST,$1) -endef - -# Import all component docs into directory $1 (optional) -define import-component-docs -$(call import-one-docs,LANGTOOLS_DIST,$1) -$(call import-one-docs,CORBA_DIST,$1) -$(call import-one-docs,JAXP_DIST,$1) -$(call import-one-docs,JAXWS_DIST,$1) -endef - -# Import all component bins into directory $1 (optional) -define import-component-binaries -$(call import-one-binaries,LANGTOOLS_DIST,$1) -$(call import-one-binaries,CORBA_DIST,$1) -$(call import-one-binaries,JAXP_DIST,$1) -$(call import-one-binaries,JAXWS_DIST,$1) -if [ "$(CORBA_DIST)" = "" ] ; then \ - $(MKDIR) -p $(OUTPUTDIR)/lib ; \ - ( $(CD) $(JDK_IMPORT_PATH) && $(CP) $(IMPORT_CORBA_BINARIES) $(ABS_OUTPUTDIR)/lib ) ; \ -fi -endef - -# Import all component classes into directory $1 -# Here we special case classes coming from JDK when component not supplied -define import-component-classes -$(ECHO) "Import classes from $(JDK_IMPORT_PATH)" -if [ "$(IMPORT_TOOLS_PACKAGES)" != "" ] ; then \ - $(call Unjar,$1,$(JDK_RESOURCES_JAR),$(IMPORT_TOOLS_PACKAGES)); \ - $(call Unjar,$1,$(JDK_TOOLS_JAR),$(IMPORT_TOOLS_PACKAGES)); \ -fi -if [ "$(IMPORT_RT_PACKAGES)" != "" ] ; then \ - $(call Unjar,$1,$(JDK_RESOURCES_JAR),$(IMPORT_RT_PACKAGES)); \ - $(call Unjar,$1,$(JDK_RT_JAR),$(IMPORT_RT_PACKAGES)); \ -fi -$(call import-one-classes,LANGTOOLS_DIST,$1) -$(call import-one-classes,CORBA_DIST,$1) -$(call import-one-classes,JAXP_DIST,$1) -$(call import-one-classes,JAXWS_DIST,$1) -endef - -# Clean up import files -define import-component-sources-clean -$(RM) -r $1 -endef -define import-component-docs-clean -$(RM) -r $1 -endef -define import-component-classes-clean -$(RM) -r $(IMPORT_TOOLS_PACKAGES:%=$1/%) -$(RM) -r $(IMPORT_RT_PACKAGES:%=$1/%) -endef - diff --git a/jdk/makefiles/common/internal/NativeCompileRules.gmk b/jdk/makefiles/common/internal/NativeCompileRules.gmk deleted file mode 100644 index 68d5eca4d69..00000000000 --- a/jdk/makefiles/common/internal/NativeCompileRules.gmk +++ /dev/null @@ -1,238 +0,0 @@ -# -# Copyright (c) 1995, 2007, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Native C/C++ Compile Rules -# - --include $(SPEC) --include $(VARS) - -COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c -COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c - -# -# INCREMENTAL_BUILD: Record the #include file dependencies. -# -# NOTE: We build make include files with the suffix -# $(DEPEND_SUFFIX) on every compilation. These are initially -# created as temp files just in case a ^C kills it in the middle. -# Compiler is smart enough to handle ^C and not create the .o file, or -# is supposed to be that smart, but the .$(DEPEND_SUFFIX) file -# creation here isn't. -# These .$(DEPEND_SUFFIX) files are included by Library.gmk and -# Program.gmk, when they exist (Search for 'make dependencies'). -# - -ifeq ($(INCREMENTAL_BUILD),true) - -$(OBJDIR)/%.$(DEPEND_SUFFIX): %.c - @$(prep-target) - @$(ECHO) "Creating $@" - @$(RM) $@.temp - @$(CC) $(CC_DEPEND) $(CPPFLAGS) $< 2> $(DEV_NULL) | \ - $(CC_DEPEND_FILTER) > $@.temp - @$(MV) $@.temp $@ - -$(OBJDIR)/%.$(DEPEND_SUFFIX): %.cpp - @$(prep-target) - @$(ECHO) "Creating $@" - @$(RM) $@.temp - @$(CXX) $(CC_DEPEND) $(CPPFLAGS) $(CXXFLAGS) $< 2> $(DEV_NULL) | \ - $(CC_DEPEND_FILTER) > $@.temp - @$(MV) $@.temp $@ - -endif # INCREMENTAL_BUILD - -# -# C, C++, asm files. -# -# Normal or parallel compile rule is the same, but batch compiles require -# we save up the sources files that use the same compile line so that we -# can do one compile line. -# - -ifneq ($(COMPILE_APPROACH), batch) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.cpp - @$(prep-target) - $(COMPILE.cc) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -else - - # - # Batch compiling might be faster if the compiler was smart about recognizing - # optimization opportunities available when all files are being compiled - # the same way. Unfortunately this is rare. - # Automatic pre-compiled headers (pch) might be a possibility so we - # add any auto pch options here. - # So we save all the source files that have the same compile line as the - # first file. A normal compile pass is made after the batch compile - # to catch anything missed. - # If the compilers had a -o option that allowed us to direct where to - # write the object files to, then we would not need to save the object - # file list or move them from the make directory to the build directory. - # - - # Source names - COMPILE_LIST.c = $(OBJDIR)/.source_names_c - COMPILE_LIST.cpp = $(OBJDIR)/.source_names_cpp - - # Object file list - COMPILE_OBJ_LIST.c = $(OBJDIR)/.obj_names_c - COMPILE_OBJ_LIST.cpp = $(OBJDIR)/.obj_names_cpp - - # The compile line - COMPILE_BATCH.c = $(OBJDIR)/.compile_c - COMPILE_BATCH.cpp = $(OBJDIR)/.compile_cpp - - # The compile line for the current target - THIS_COMPILE_BATCH.c = $(COMPILE_BATCH.c)-$(@F) - THIS_COMPILE_BATCH.cpp = $(COMPILE_BATCH.cpp)-$(@F) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - @$(ECHO) "$(COMPILE.c) $(CFLAGS_GPROF)" > $(THIS_COMPILE_BATCH.c) - @if [ ! -s $(COMPILE_BATCH.c) ] ; then \ - $(CP) $(THIS_COMPILE_BATCH.c) $(COMPILE_BATCH.c) ; \ - $(ECHO) $< > $(COMPILE_LIST.c); \ - $(ECHO) $(@F) > $(COMPILE_OBJ_LIST.c); \ - elif [ "`$(DIFF) -w -b $(THIS_COMPILE_BATCH.c) $(COMPILE_BATCH.c)`" \ - = "" ] ; then \ - $(ECHO) $< >> $(COMPILE_LIST.c); \ - $(ECHO) $(@F) >> $(COMPILE_OBJ_LIST.c); \ - fi - @$(RM) $(THIS_COMPILE_BATCH.c) - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.cpp - @$(prep-target) - @$(ECHO) "$(COMPILE.cc) $(CFLAGS_GPROF)" > $(THIS_COMPILE_BATCH.cpp) - @if [ ! -s $(COMPILE_BATCH.cpp) ] ; then \ - $(CP) $(THIS_COMPILE_BATCH.cpp) $(COMPILE_BATCH.cpp) ; \ - $(ECHO) $< > $(COMPILE_LIST.cpp); \ - $(ECHO) $(@F) > $(COMPILE_OBJ_LIST.cpp); \ - elif [ "`$(DIFF) -w -b $(THIS_COMPILE_BATCH.cpp) $(COMPILE_BATCH.cpp)`"\ - = "" ] ; then \ - $(ECHO) $< >> $(COMPILE_LIST.cpp); \ - $(ECHO) $(@F) >> $(COMPILE_OBJ_LIST.cpp); \ - fi - @$(RM) $(THIS_COMPILE_BATCH.cpp) - @$(check-conventions) - -batch_compile: $(FILES_o) - @$(ECHO) "Doing batch compilations" - @if [ -s $(COMPILE_LIST.c) ] ; then \ - $(ECHO) "$(COMPILE.c) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.c)`" ; \ - ( $(COMPILE.c) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.c)` && \ - $(ECHO) "$(MV) `$(CAT) $(COMPILE_OBJ_LIST.c)` $(OBJDIR)" && \ - $(MV) `$(CAT) $(COMPILE_OBJ_LIST.c)` $(OBJDIR) ) || exit 1 ; \ - fi - @if [ -s $(COMPILE_LIST.cpp) ] ; then \ - $(ECHO) "$(COMPILE.cc) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.cpp)`" ; \ - ( $(COMPILE.cc) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.cpp)` && \ - $(ECHO) "$(MV) `$(CAT) $(COMPILE_OBJ_LIST.cpp)` $(OBJDIR)" && \ - $(MV) `$(CAT) $(COMPILE_OBJ_LIST.cpp)` $(OBJDIR) ) || exit 1 ; \ - fi - @$(RM) $(COMPILE_BATCH.c) $(COMPILE_LIST.c) $(COMPILE_OBJ_LIST.c) - @$(RM) $(COMPILE_BATCH.cpp) $(COMPILE_LIST.cpp) $(COMPILE_OBJ_LIST.cpp) - -endif - -# newer as does not handle c++ style comments -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.s - ifneq ($(CC_VERSION), gcc) - @$(prep-target) - $(COMPILE.s) $(CC_OBJECT_OUTPUT_FLAG)$@ $< - else - @$(prep-target) - $(CPP) -x assembler-with-cpp $< | $(COMPILE.s) -o $@ - endif - @$(check-conventions) - -# Obj-C files (Mac OS X only). -ifeq ($(PLATFORM), macosx) -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.m - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.mm - @$(prep-target) - $(COMPILE.cc) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) -endif # PLATFORM - -# -# Quick hack for making the compiler generate just the assembly file. -# $ gnumake obj/sparc/myfile.s -# -$(OBJDIR)/%.s: %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ -S $< - @$(check-conventions) - -# remove the intermediate files from the directories. -# (If VARIANT=OPT, this removes all debug and fastdebug files too) -clobber clean:: - $(RM) -r $(OBJDIR) - $(RM) -r $(OBJDIR)_* - -# -# Lint support -# (The 'lint' rule below is an older rule not using the .$(LINT_SUFFIX) files) -# - -ifeq ($(PLATFORM), solaris) -$(OBJDIR)/%.$(LINT_SUFFIX): %.c - @$(prep-target) - $(LINT.c) -dirout=$(OBJDIR) -c $< -lint.clean: - $(RM) $(OBJDIR)/*.$(LINT_SUFFIX) -# Old rule -lint: $(FILES_c) - ifneq ($(FILES_c),) - $(LINT.c) -Ncheck -Nlevel=3 $? $(LDLIBS) > lint.$(ARCH) 2>&1 - endif -endif - -.PHONY: batch_compile - - diff --git a/jdk/makefiles/common/internal/Resources.gmk b/jdk/makefiles/common/internal/Resources.gmk deleted file mode 100644 index 2b5c1e7bd16..00000000000 --- a/jdk/makefiles/common/internal/Resources.gmk +++ /dev/null @@ -1,262 +0,0 @@ -# -# Copyright (c) 1997, 2010, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Generic mechanism for installing properties files, resource bundles, -# and other resource files. -# -# FILES_properties should be defined. -# FILES_compiled_properties should be defined. -# -# If COMPILED_PROPERTIES_SUPERCLASS is defined, ALL the FILES_properties -# files will be compiled into java with this super class. -# -# You can add locales to LOCALE_SUFFIXES explicitly, or use the -# LOCALE_SET_DEFINITION variable to add some pre-defined locale lists. -# The LOCALE_SET_DEFINITION can have the value: jre, plugin, or jdk. -# -# Resource bundles to be installed are identified using the following variables. -# Note that only the file name of the base bundle is given; localized versions -# are added automatically. For Java files, use a format suitable for inclusion -# in the FILES_java list; dito for properties, all relative paths. -# -# NEW_RESOURCE_BUNDLES_JAVA - new resource bundles implemented in -# Java, not localized -# RESOURCE_BUNDLES_JAVA - resource bundles implemented in -# Java, localized -# -# The following variable is now used for most .properties files in the JDK. -# These properties files are converted into java and compiled with javac. -# The resulting .class files are usually smaller and are always faster to load. -# The relative path to the properties file becomes a relative path to a -# java source file. -# -# RESOURCE_BUNDLES_COMPILED_PROPERTIES - resource bundles implemented as -# properties files, localized -# NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES - same as above, not localized -# -# For non-compiled properties files, use the following variables: -# -# NEW_RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES - new resource bundles implemented as -# properties files, not localized -# RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES - resource bundles implemented as -# properties files, localized -# -# Other properties files to be installed are identified using the variable: -# -# OTHER_PROPERTIES -# - -include $(SPEC) -include $(SRC_ROOT)/jdk/makefiles/Tools.gmk - -# Compile properties files into java source? -ifdef COMPILED_PROPERTIES_SUPERCLASS - # Add all properties files to the compiled properties list (all or nothing) - COMPILED_PROPERTIES += $(FILES_compiled_properties) $(FILES_properties) -else - COMPILED_PROPERTIES_SUPERCLASS = ListResourceBundle - COMPILED_PROPERTIES += $(FILES_compiled_properties) -endif - -# Determine the locale suffixes needed beyond the base bundle - -ifeq ($(LOCALE_SET_DEFINITION), plugin) - LOCALE_SUFFIXES += $(PLUGIN_LOCALES) -endif -ifeq ($(LOCALE_SET_DEFINITION), jdk) - LOCALE_SUFFIXES += $(JDK_LOCALES) -endif -ifeq ($(LOCALE_SET_DEFINITION), jre) - LOCALE_SUFFIXES += $(JRE_LOCALES) -endif - -# Java files get tacked onto the standard list of files to compile -RESOURCE_BUNDLE_FILES_java += $(NEW_RESOURCE_BUNDLES_JAVA) -RESOURCE_BUNDLE_FILES_java += $(RESOURCE_BUNDLES_JAVA) \ - $(foreach file,$(RESOURCE_BUNDLES_JAVA), \ - $(foreach locale,$(LOCALE_SUFFIXES), \ - $(basename $(file))_$(locale).java)) - -# Add to java sources list -FILES_java += $(RESOURCE_BUNDLE_FILES_java) - -# Compiled properties files are translated to .java. -# The .java files are generated into GENSRCDIR. -COMPILED_PROPERTIES += $(NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES) -COMPILED_PROPERTIES += $(RESOURCE_BUNDLES_COMPILED_PROPERTIES) \ - $(foreach file,$(RESOURCE_BUNDLES_COMPILED_PROPERTIES),\ - $(foreach locale,$(LOCALE_SUFFIXES),\ - $(basename $(file))_$(locale)$(suffix $(file)))) - -# Add to java sources list -FILES_java += $(COMPILED_PROPERTIES:%.properties=%.java) - -# Non-compiled files -PROPERTIES_FILES += $(NEW_RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES) -PROPERTIES_FILES += $(RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES) \ - $(foreach file,$(RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES), \ - $(foreach locale,$(LOCALE_SUFFIXES), \ - $(basename $(file))_$(locale)$(suffix $(file)))) -# other properties -PROPERTIES_FILES += $(OTHER_PROPERTIES) - -# -# Process and strip all non-compiled properties files (in a batch mode) -# -STRIP_PROP_FILES = $(PROPERTIES_FILES:%=$(CLASSDESTDIR)/%) -# To efficiently strip properties we use one run of StripProperties. -# This macro gathers an option for use later. -STRIP_PROP_options=$(TEMPDIR)/strip_prop_options -define install-properties-file -$(install-file) -$(call chmod-file, a+rw) -@$(ECHO) "# Adding to strip properties list: $@" -$(ECHO) "$@" >> $(STRIP_PROP_options) -endef - -# Constructs command line options file -$(STRIP_PROP_options): $(STRIP_PROP_FILES) - @$(TOUCH) $@ -strip_prop_options_clean: - @$(RM) $(STRIP_PROP_options) - -# Strip the properties files -strip_all_props: $(BUILD_TOOLS) $(STRIP_PROP_options) - @if [ -s $(STRIP_PROP_options) ] ; then \ - $(ECHO) "$(TOOL_STRIPPROPERTIES) @$(STRIP_PROP_options)" ; \ - $(TOOL_STRIPPROPERTIES) @$(STRIP_PROP_options) ; \ - fi - @$(java-vm-cleanup) - -# -# Creates files in CLASSDESTDIR -# - -# In some cases, we move files from package to resources subdir -$(CLASSDESTDIR)/$(PKGDIR)/resources/%.properties: \ - $(SHARE_SRC)/classes/$(PKGDIR)/%.properties - $(install-properties-file) -$(CLASSDESTDIR)/%.properties: $(SHARE_SRC)/classes/%.properties - $(install-properties-file) -$(CLASSDESTDIR)/%.res: $(SHARE_SRC)/classes/%.res - $(install-file) -$(CLASSDESTDIR)/%.dtd: $(SHARE_SRC)/classes/%.dtd - $(install-file) -$(CLASSDESTDIR)/%.xml: $(SHARE_SRC)/classes/%.xml - $(install-file) -$(CLASSDESTDIR)/%.prp: $(SHARE_SRC)/classes/%.prp - $(install-file) - -# -# To efficiently compile properties into java sources we use one run -# of compileproperties. This macro gathers an option for use later. -# Note: The properties file and java source name can be different -# locales, e.g. zh_TW and zh_HK. The java source filename -# determines the name of the class. -COMPILE_PROP_options=$(TEMPDIR)/compile_prop_options -define add-property-java-file -@$(prep-target) -@$(ECHO) "# Adding to compile properties list: $? -> $@" -$(ECHO) "-compile $? $@ $(COMPILED_PROPERTIES_SUPERCLASS)" \ - >> $(COMPILE_PROP_options) -endef - -$(GENSRCDIR)/%.java: $(PLATFORM_SRC)/classes/%.properties - $(add-property-java-file) -$(GENSRCDIR)/%.java: $(SHARE_SRC)/classes/%.properties - $(add-property-java-file) -$(GENSRCDIR)/%.java: $(GENSRCDIR)/%.properties - $(add-property-java-file) -ifndef OPENJDK -$(GENSRCDIR)/%.java: $(CLOSED_PLATFORM_SRC)/classes/%.properties - $(add-property-java-file) -$(GENSRCDIR)/%.java: $(CLOSED_SHARE_SRC)/classes/%.properties - $(add-property-java-file) -endif - -# Create HK java file from zh_TW (explicit resource bundles only) -define create-hk-java-file -@$(prep-target) -$(CAT) $< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $@ -endef - -# Explicit resource bundles -$(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC)/classes/%_zh_TW.java - $(create-hk-java-file) -$(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.java - $(create-hk-java-file) - -# Compile of zh_HK properties just uses the zh_TW properties files -$(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC)/classes/%_zh_TW.properties - $(add-property-java-file) -$(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.properties - $(add-property-java-file) - -# Simple delivery of zh_HK properties files just copies zh_TW properties files -$(CLASSDESTDIR)/%_zh_HK.properties: \ - $(PLATFORM_SRC)/classes/%_zh_TW.properties - $(install-properties-file) -$(CLASSDESTDIR)/%_zh_HK.properties: \ - $(SHARE_SRC)/classes/%_zh_TW.properties - $(install-properties-file) - -# List of java files converted from properties files needed -COMPILE_PROP_JAVA_FILES = $(COMPILED_PROPERTIES:%.properties=$(GENSRCDIR)/%.java) - -# Constructs command line options file -$(COMPILE_PROP_options): $(COMPILE_PROP_JAVA_FILES) - @$(TOUCH) $@ -compile_prop_options_clean: - @$(RM) $(COMPILE_PROP_options) - -# Make sure all are compiled, one compiler run -compile_all_props: $(BUILD_TOOLS) $(COMPILE_PROP_options) - @if [ `$(CAT) $(COMPILE_PROP_options) | $(WC) -l` -ge 1 ] ; then \ - $(MKDIR) -p $(GENSRCDIR); \ - $(ECHO) "$(TOOL_COMPILEPROPERTIES) @$(COMPILE_PROP_options)";\ - $(TOOL_COMPILEPROPERTIES) @$(COMPILE_PROP_options) ; \ - $(java-vm-cleanup); \ - fi - -# Make sure the build rule creates all the properties -resources: - -ifneq ($(strip $(PROPERTIES_FILES)),) - resources: strip_prop_options_clean strip_all_props - clobber clean:: - $(RM) $(STRIP_PROP_FILES) $(STRIP_PROP_options) -endif - -ifneq ($(strip $(COMPILED_PROPERTIES)),) - resources: compile_prop_options_clean compile_all_props - clobber clean:: - $(RM) $(COMPILE_PROP_JAVA_FILES) $(COMPILE_PROP_options) -endif - -.PHONY: resources \ - compile_prop_options_clean compile_all_props \ - strip_prop_options_clean strip_all_props - diff --git a/jdk/makefiles/common/shared/Compiler-gcc.gmk b/jdk/makefiles/common/shared/Compiler-gcc.gmk deleted file mode 100644 index 3b6923eac06..00000000000 --- a/jdk/makefiles/common/shared/Compiler-gcc.gmk +++ /dev/null @@ -1,98 +0,0 @@ -# -# Copyright (c) 2005, 2010, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# GCC Compiler settings -# - -ifeq ($(PLATFORM), windows) - - # Settings specific to Windows, pretty stale, hasn't been used - CC ?= $(COMPILER_PATH)gcc - CPP ?= $(COMPILER_PATH)gcc -E - CXX ?= $(COMPILER_PATH)g++ - CCC ?= $(COMPILER_PATH)g++ - AR ?= $(COMPILER_PATH)lib - LINK ?= $(COMPILER_PATH)link - RC ?= $(COMPILER_PATH)rc - LINK32 = $(LINK) - RSC = $(RC) - # unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake - NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo - ifeq ($(ARCH_DATA_MODEL), 32) - CC_VER = UNKNOWN - else - CC_VER = UNKNOWN - endif - _LINK_VER :=$(shell $(LINK) 2>&1 | $(HEAD) -n 1) - LINK_VER :=$(call GetVersion,"$(_LINK_VER)") - -endif - -ifeq ($(PLATFORM), linux) - -# Settings specific to Linux - CC ?= $(COMPILER_PATH)gcc - CPP ?= $(COMPILER_PATH)gcc -E -# Acquire the paths to the compilers and tools - # statically link libstdc++ before C++ ABI is stablized on Linux - STATIC_CXX = true - ifeq ($(STATIC_CXX),true) - # g++ always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++" - # We need to use gcc to statically link the C++ runtime. gcc and g++ use - # the same subprocess to compile C++ files, so it is OK to build using gcc. - CXX ?= $(CC) - #$(COMPILER_PATH)gcc - else -# CXX = $(COMPILER_PATH)g++ - endif - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -shared - SUN_COMP_VER := $(shell $(CC) --verbose 2>&1 ) - -endif - -ifeq ($(PLATFORM), solaris) - - # Settings specific to Solaris - CC ?= $(COMPILER_PATH)gcc - CPP ?= $(COMPILER_PATH)gcc -E - CXX ?= $(COMPILER_PATH)g++ - - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G - -endif - -# Get gcc version -_CC_VER :=$(shell $(CC) -dumpversion 2>&1 ) -CC_VER :=$(call GetVersion,"$(_CC_VER)") -CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) -CC_MINORVER :=$(call MinorVersion,$(CC_VER)) - -# Name of compiler -COMPILER_NAME = GCC$(call MajorVersion,$(CC_VER)) -COMPILER_VERSION = $(COMPILER_NAME) - diff --git a/jdk/makefiles/common/shared/Compiler-llvm.gmk b/jdk/makefiles/common/shared/Compiler-llvm.gmk deleted file mode 100644 index 0b26a08cd24..00000000000 --- a/jdk/makefiles/common/shared/Compiler-llvm.gmk +++ /dev/null @@ -1,59 +0,0 @@ -# -# Copyright (c) 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# LLVM Compiler settings -# - -ifeq ($(PLATFORM), macosx) - - # Settings specific to Mac OS X - ifeq ($(origin CC), default) - CC = $(COMPILER_PATH)llvm-gcc - endif - CPP = $(COMPILER_PATH)llvm-gcc -E - ifeq ($(origin CXX), default) - CXX = $(COMPILER_PATH)llvm-g++ - endif - - REQUIRED_CC_VER = 4.2.1 - - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -Wl,-install_name,@rpath/$(@F) -dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 - SUN_COMP_VER := $(shell $(CC) --verbose 2>&1 ) - - AR = $(CC) - ARFLAGS = -nostdlib -r -arch i386 -arch x86_64 -o - -endif - -# Get llvm version -_CC_VER :=$(shell $(CC) -dumpversion 2>&1 ) -CC_VER :=$(call GetVersion,"$(_CC_VER)") - -# Name of compiler -COMPILER_NAME = LLVM-GCC$(call MajorVersion,$(CC_VER)) -COMPILER_VERSION = $(COMPILER_NAME) - diff --git a/jdk/makefiles/common/shared/Compiler-msvc.gmk b/jdk/makefiles/common/shared/Compiler-msvc.gmk deleted file mode 100644 index b5007022664..00000000000 --- a/jdk/makefiles/common/shared/Compiler-msvc.gmk +++ /dev/null @@ -1,93 +0,0 @@ -# -# Copyright (c) 2005, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# MSVC Compiler settings -# - -ifeq ($(PLATFORM), windows) - CC ?= $(COMPILER_PATH)cl - CPP ?= $(COMPILER_PATH)cl - CXX ?= $(COMPILER_PATH)cl - CCC ?= $(COMPILER_PATH)cl - AR ?= $(COMPILER_PATH)lib - LINK ?= $(COMPILER_PATH)link - LINK32 ?= $(LINK) -# TODO Add dumpbin.exe to configure - DUMPBIN ?= $(COMPILER_PATH)dumpbin.exe - - # Fill in unknown values - COMPILER_NAME=Unknown MSVC Compiler - COMPILER_VERSION= - - # unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake - NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo - - # Compiler version and type (Always get word after "Version") - CC_VER := $(shell $(CC) 2>&1 | $(HEAD) -n 1 | $(SED) 's/.*\(Version.*\)/\1/' | $(NAWK) '{print $$2}') - - LINK_VER := $(shell $(LINK) | $(HEAD) -n 1 | $(NAWK) '{print $$6}') - CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) - - # The VS2010 compiler is the same one used on both 32bit and 64bit - ifeq ($(CC_MAJORVER), 16) - COMPILER_NAME=Microsoft Visual Studio 10 (16.00.30319.01) - COMPILER_VERSION=VS2010 - ifeq ($(WINDOWSSDKDIR),) - WINDOWSSDKDIR := $(error WINDOWSSDKDIR cannot be empty here) - endif - ifeq ($(ARCH_DATA_MODEL), 32) - _OTHER_TOOLS_BIN = $(WINDOWSSDKDIR)/Bin - else - ifeq ($(ARCH), ia64) - _OTHER_TOOLS_BIN = $(WINDOWSSDKDIR)/Bin/ia64 - else - _OTHER_TOOLS_BIN = $(WINDOWSSDKDIR)/Bin/x64 - endif - endif - RC = $(_OTHER_TOOLS_BIN)/RC.Exe - REBASE = $(_OTHER_TOOLS_BIN)/ReBase.Exe - MT = $(_OTHER_TOOLS_BIN)/mt.exe - MTL = $(_OTHER_TOOLS_BIN)/midl.exe - endif - - # These variables can never be empty - ifndef COMPILER_PATH - COMPILER_PATH := $(error COMPILER_PATH cannot be empty here) - endif - ifndef COMPILER_VERSION - COMPILER_VERSION := $(error COMPILER_VERSION cannot be empty here) - endif - ifneq ($(COMPILER_VERSION),VS2010) - COMPILER_VERSION := $(error COMPILER_VERSION must be VS2010) - endif - - # Shared library generation flag - SHARED_LIBRARY_FLAG = -LD - # RSC is always same as RC (Not sure who uses this RSC variable) - RSC = $(RC) - -endif - diff --git a/jdk/makefiles/common/shared/Compiler-sun.gmk b/jdk/makefiles/common/shared/Compiler-sun.gmk deleted file mode 100644 index 539ba98f22a..00000000000 --- a/jdk/makefiles/common/shared/Compiler-sun.gmk +++ /dev/null @@ -1,138 +0,0 @@ -# -# Copyright (c) 2005, 2010, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Sun Studio Compiler settings -# - -# Sun Studio Compiler settings specific to Solaris -ifeq ($(PLATFORM), solaris) - CC ?= $(COMPILER_PATH)cc - CPP ?= $(COMPILER_PATH)cc -E - CXX ?= $(COMPILER_PATH)CC - LINT ?= $(COMPILER_PATH)lint - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G - GCC =$(GCC_COMPILER_PATH)gcc -endif - -# Sun Studio Compiler settings specific to Linux -ifeq ($(PLATFORM), linux) - # This has not been tested - CC ?= $(COMPILER_PATH)cc - CPP ?= $(COMPILER_PATH)cc -E - CXX ?= $(COMPILER_PATH)CC - LINT ?= $(COMPILER_PATH)lint - # statically link libstdc++ before C++ ABI is stablized on Linux - STATIC_CXX = true - ifeq ($(STATIC_CXX),true) - # CC always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++" - # We need to use cc to statically link the C++ runtime. - CXX ?= $(COMPILER_PATH)cc - else - CXX ?= $(COMPILER_PATH)CC - endif - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G -endif - -# Get compiler version -_CC_VER :=$(shell $(CC) -V 2>&1 | $(HEAD) -n 1) -CC_VER :=$(call GetVersion,"$(_CC_VER)") -CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) -CC_MINORVER :=$(call MinorVersion,$(CC_VER)) - -# Name of compilers being used -COMPILER_VERSION-5.7 = SS10 -COMPILER_NAME-5.7 = Sun Studio 10 -COMPILER_VERSION-5.8 = SS11 -COMPILER_NAME-5.8 = Sun Studio 11 -COMPILER_VERSION-5.9 = SS12 -COMPILER_NAME-5.9 = Sun Studio 12 -COMPILER_VERSION-5.10 = SS12u1 -COMPILER_NAME-5.10 = Sun Studio 12 Update 1 -COMPILER_VERSION-5.11 = OSS12u2 -COMPILER_NAME-5.11 = Oracle Solaris Studio 12 Update 2 -COMPILER_VERSION = $(COMPILER_VERSION-$(CC_VER)) -COMPILER_NAME = $(COMPILER_NAME-$(CC_VER)) - -# Arch specific settings (determines type of .o files and instruction set) -# Starting in SS12 (5.9), the arch options changed. -# The assembler /usr/ccs/bin/as wants older SS11 (5.8) style options. -# Note: We need to have both 32 and 64 values at all times for awt Makefiles. -# -XARCH_OPTION_OLD/32 = -XARCH_OPTION_OLD/64 = -XARCH_OPTION_NEW/32 = -m32 -XARCH_OPTION_NEW/64 = -m64 -# Lint options are slightly different -LINT_XARCH_OPTION_OLD/32 = -LINT_XARCH_OPTION_OLD/64 = -LINT_XARCH_OPTION_NEW/32 = -m32 -LINT_XARCH_OPTION_NEW/64 = -m64 -ifeq ($(ARCH_FAMILY), sparc) - ifdef VIS_NEEDED - XARCH_OPTION_OLD/32 += -xarch=v8plusa - XARCH_OPTION_OLD/64 += -xarch=v9a - XARCH_OPTION_NEW/32 += -xarch=sparcvis - XARCH_OPTION_NEW/64 += -xarch=sparcvis - else - # Someday this should change to improve optimization on UltraSPARC - # and abandon v8, even change to sparcvis or sparcvis2, this - # abandons machines like the SPARCstation 10. - # Indications with jdk6 is that alacrity runs do not show a - # big improvement using v8plus over v8, but other benchmarks might. - XARCH_OPTION_OLD/32 += -xarch=v8 - XARCH_OPTION_OLD/64 += -xarch=v9 - # Note that this new option (SS12+) effectively means v8plus - XARCH_OPTION_NEW/32 += -xarch=sparc - XARCH_OPTION_NEW/64 += -xarch=sparc - endif - LINT_XARCH_OPTION_OLD/64 += -Xarch=v9 -endif -ifeq ($(ARCH_FAMILY), i586) - XARCH_OPTION_OLD/64 += -xarch=amd64 - LINT_XARCH_OPTION_OLD/64 += -Xarch=amd64 -endif -# Pick the options we want based on the compiler being used. (5.9 or newer) -CC_59_OR_NEWER := \ - $(shell expr $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \>= 9 \) ) -ifeq ($(CC_59_OR_NEWER), 1) - XARCH_OPTION/32 = $(XARCH_OPTION_NEW/32) - XARCH_OPTION/64 = $(XARCH_OPTION_NEW/64) - LINT_XARCH_OPTION/32 = $(LINT_XARCH_OPTION_NEW/32) - LINT_XARCH_OPTION/64 = $(LINT_XARCH_OPTION_NEW/64) -else - XARCH_OPTION/32 = $(XARCH_OPTION_OLD/32) - XARCH_OPTION/64 = $(XARCH_OPTION_OLD/64) - LINT_XARCH_OPTION/32 = $(LINT_XARCH_OPTION_OLD/32) - LINT_XARCH_OPTION/64 = $(LINT_XARCH_OPTION_OLD/64) -endif -XARCH_OPTION = $(XARCH_OPTION/$(ARCH_DATA_MODEL)) -LINT_XARCH_OPTION = $(LINT_XARCH_OPTION/$(ARCH_DATA_MODEL)) -# The /usr/ccs/bin/as assembler always wants the older SS11 (5.8) options. -AS_XARCH_OPTION = $(XARCH_OPTION_OLD/$(ARCH_DATA_MODEL)) - diff --git a/jdk/makefiles/common/shared/Defs-control.gmk b/jdk/makefiles/common/shared/Defs-control.gmk deleted file mode 100644 index 3a5dc1686d2..00000000000 --- a/jdk/makefiles/common/shared/Defs-control.gmk +++ /dev/null @@ -1,143 +0,0 @@ -# -# Copyright (c) 1995, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Common variables used by all the Java makefiles. This file should -# not contain rules. -# - -# WARNING: This file is shared with other components. -# - -ifndef JDK_MAKE_SHARED_DIR - JDK_MAKE_SHARED_DIR = $(JDK_TOPDIR)/makefiles/common/shared -endif - -ifndef HOTSPOT_TOPDIR - HOTSPOT_TOPDIR=$(TOPDIR)/hotspot -endif -ifndef LANGTOOLS_TOPDIR - LANGTOOLS_TOPDIR=$(TOPDIR)/langtools -endif -ifndef CORBA_TOPDIR - CORBA_TOPDIR=$(TOPDIR)/corba -endif -ifndef JAXP_TOPDIR - JAXP_TOPDIR=$(TOPDIR)/jaxp -endif -ifndef JAXWS_TOPDIR - JAXWS_TOPDIR=$(TOPDIR)/jaxws -endif -ifndef JDK_TOPDIR - JDK_TOPDIR=$(TOPDIR)/jdk -endif -ifndef INSTALL_TOPDIR - INSTALL_TOPDIR=$(TOPDIR)/install -endif -ifndef SPONSORS_TOPDIR - SPONSORS_TOPDIR=$(TOPDIR)/sponsors -endif -ifndef DEPLOY_TOPDIR - DEPLOY_TOPDIR=$(TOPDIR)/deploy -endif - -# Get shared platform settings -include $(JDK_MAKE_SHARED_DIR)/Platform.gmk - -# Default directory immediately above the "build" output directory (OUTPUTDIR) -BUILD_PARENT_DIRECTORY=$(TOPDIR) - -# Get platform specific settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -SRC_BUNDLEDIR = $(OUTPUTDIR)/source-bundles -ABS_SRC_BUNDLEDIR = $(ABS_OUTPUTDIR)/source-bundles -BIN_BUNDLEDIR = $(OUTPUTDIR)/bundles -BIN_DEMOS_BUNDLEDIR = $(OUTPUTDIR)/demos-bundles -ABS_BIN_BUNDLEDIR = $(ABS_OUTPUTDIR)/bundles - -dummy := $(shell $(MKDIR) -p $(BIN_BUNDLEDIR)) -dummy := $(shell $(MKDIR) -p $(BIN_DEMOS_BUNDLEDIR) ) -dummy := $(shell $(MKDIR) -p $(SRC_BUNDLEDIR) ) - -TEMP_DIR = $(OUTPUTDIR)/tmp -ABS_TEMP_DIR = $(ABS_OUTPUTDIR)/tmp - -dummy := $(shell $(MKDIR) -p $(TEMP_DIR)) - -# The language version we want for this jdk build -SOURCE_LANGUAGE_VERSION=7 -# The class version we want for this jdk build -TARGET_CLASS_VERSION=7 - -# The MESSAGE, WARNING and ERROR files are used to store sanity check and -# source check messages, warnings and errors. -export ERROR_FILE := $(ABS_OUTPUTDIR)/sanityCheckErrors.txt -export WARNING_FILE := $(ABS_OUTPUTDIR)/sanityCheckWarnings.txt -export MESSAGE_FILE := $(ABS_OUTPUTDIR)/sanityCheckMessages.txt - -# source bundle generation definitions -BUNDLE_DATE := $(shell $(DATE) '+%d_%b_%Y' | $(TR) "[A-Z]" "[a-z]") -ifdef ALT_BUNDLE_DATE - BUNDLE_DATE := $(ALT_BUNDLE_DATE) -endif - -# If the update version contains non-numeric characters, we need -# to massage it into a numeric format. Unfortunately, the -# Windows VERSIONINFO resource that we stick in jvm.dll cannot -# handle non-numeric characters. We have to do this here because -# Hotspot (nmake) cannot handle calculations. So we use the -# following formula: -# COOKED_JDK_UPDATE_VERSION = JDK_UPDATE_VERSION * 10 + EXCEPTION_VERSION -# -# Here are some examples: -# 1.5.0 b01 -> 5,0,0,1 -# 1.5.0_10 b01 -> 5,0,100,1 -# 1.4.2 b01 -> 4,2,0,1 -# 1.4.2_02 b01 -> 4,2,20,1 -# 1.4.2_02a b01 -> 4,2,21,1 -# 1.4.2_02b b01 -> 4,2,22,1 -ifdef JDK_UPDATE_VERSION - VTMP := $(shell $(ECHO) $(JDK_UPDATE_VERSION) | $(TR) "abcde" "12345") - CHAR1 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 1, 1);}') - CHAR2 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 2, 1);}') - CHAR3 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 3, 1);}') - ifeq ($(CHAR3),) - CHAR3 := 0 - endif - ifeq ($(CHAR1), 0) - COOKED_JDK_UPDATE_VERSION := $(CHAR2)$(CHAR3) - else - COOKED_JDK_UPDATE_VERSION := $(CHAR1)$(CHAR2)$(CHAR3) - endif -endif - -ifneq ($(JDK_BUILD_NUMBER),) - COOKED_BUILD_NUMBER = $(shell $(ECHO) $(JDK_BUILD_NUMBER) \ - | $(SED) -e 's/^b//' | $(SED) -e 's/^0//') -else - COOKED_BUILD_NUMBER = 0 -endif - diff --git a/jdk/makefiles/common/shared/Defs-java.gmk b/jdk/makefiles/common/shared/Defs-java.gmk deleted file mode 100644 index 897b24d77a3..00000000000 --- a/jdk/makefiles/common/shared/Defs-java.gmk +++ /dev/null @@ -1,249 +0,0 @@ -# -# Copyright (c) 2007, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Common java/javac/jdk variables used by all the Java makefiles. -# This file should not contain rules. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - --include $(SPEC) - -# -# Memory related -J flags that all uses of java tools should use. -# -#JAVA_MEM_FLAGS = -Xmx$(MAX_VM_MEMORY)m -#ifeq ($(ARCH), ia64) - # Special flags for javac on ia64 to work around a VM problem with - # bad code generation during inlining (what version had this problem?): - # Suspect this may not be needed anymore. -# JAVA_MEM_FLAGS += -Xms$(MAX_VM_MEMORY)m -XX:-Inline -#else -# JAVA_MEM_FLAGS += -Xms$(MIN_VM_MEMORY)m -XX:PermSize=32m -XX:MaxPermSize=160m -#endif - -# -# All java tools (javac, javah, and javadoc) run faster with certain java -# options, this macro should be used with all these tools. -# In particular, the client VM makes these tools run faster when -# it's available. -# -ADD_CLIENT_VM_OPTION = false -ifeq ($(PLATFORM), solaris) - ADD_CLIENT_VM_OPTION = true -else - ifeq ($(ARCH_DATA_MODEL), 32) - ADD_CLIENT_VM_OPTION = true - endif -endif - -# Options for hotspot to turn off printing of options with fastdebug version -# and creating the hotspot.log file. -#JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS = \ -# -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput - -# JVM options -ifeq ($(PLATFORM), macosx) - JAVA_JVM_FLAGS = $(JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS) -Djava.awt.headless=true -else - JAVA_JVM_FLAGS = $(JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS) -endif - -#ifeq ($(ADD_CLIENT_VM_OPTION), true) -# JAVA_JVM_FLAGS += -client -#endif -#ifdef USE_HOTSPOT_INTERPRETER_MODE -# JAVA_JVM_FLAGS += -Xint -#endif - -# Various VM flags -JAVA_TOOLS_FLAGS = $(JAVA_JVM_FLAGS) $(JAVA_MEM_FLAGS) - -# The VM flags for javac -JAVAC_JVM_FLAGS = - -# 64-bit builds require a larger thread stack size. -#ifeq ($(ARCH_DATA_MODEL), 32) -# JAVAC_JVM_FLAGS += -J-XX:ThreadStackSize=768 -#else -# JAVAC_JVM_FLAGS += -J-XX:ThreadStackSize=1536 -#endif -JAVAC_JVM_FLAGS += $(JAVA_TOOLS_FLAGS:%=-J%) - -# The jar -J options are special, must be added at the end of the command line -JAR_JFLAGS = $(JAVA_TOOLS_FLAGS:%=-J%) - -# JAVA_TOOLS_DIR is the default location to find Java tools to run, if -# langtools is not available. -# This should be the latest promoted JDK javac. -ifndef JAVA_TOOLS_DIR - JAVA_TOOLS_DIR = $(JDK_IMPORT_PATH)/bin -endif - -# -# Invoking the Java compiler. In leaf makefiles, choose as follows: -# -- Use JAVAC if you want to take full control of what options get -# passed to javac. -# -- Use JAVAC_CMD if you want to take the defaults given to you. -# - -ifndef DEBUG_CLASSFILES - ifeq ($(VARIANT), DBG) - DEBUG_CLASSFILES = true - endif -endif -JAVACFLAGS = -ifeq ($(DEBUG_CLASSFILES),true) - JAVACFLAGS += -g -endif -ifeq ($(JAVAC_MAX_WARNINGS), true) - JAVAC_LINT_OPTIONS += -Xlint:all -endif -ifeq ($(JAVAC_WARNINGS_FATAL), true) - JAVACFLAGS += -Werror -endif - -# TODO: Workaround for CR 7063027. Remove -path eventually. -JAVAC_LINT_OPTIONS += -Xlint:-path - -JAVACFLAGS += $(JAVAC_LINT_OPTIONS) - -# -# Some licensees do not get the Security Source bundles. We will -# fall back on the prebuilt jce.jar so that we can do a best -# attempt at building. If sources exist, we always want to -# build/use the most recent source instead of an older jce.jar, whether -# built implicitly/explicitly. -# -ifeq ($(wildcard $(SHARE_SRC)/classes/javax/crypto/Cipher.java),) - JCE_PATH = $(CLASSPATH_SEPARATOR)$(LIBDIR)/jce.jar -endif - -# Add the source level -SOURCE_LANGUAGE_VERSION = 7 -LANGUAGE_VERSION = -source $(SOURCE_LANGUAGE_VERSION) -JAVACFLAGS += $(LANGUAGE_VERSION) - -# Add the class version we want -TARGET_CLASS_VERSION = 7 -CLASS_VERSION = -target $(TARGET_CLASS_VERSION) -JAVACFLAGS += $(CLASS_VERSION) -JAVACFLAGS += -encoding ascii -JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)$(JCE_PATH)" -JAVACFLAGS += $(OTHER_JAVACFLAGS) - -# Needed for javah -JAVAHFLAGS += -bootclasspath "$(CLASSBINDIR)$(JCE_PATH)" - -# Needed for javadoc to ensure it builds documentation -# against the newly built classes -JAVADOCFLAGS += -bootclasspath $(CLASSBINDIR) - -# Needed for JAVADOC and BOOT_JAVACFLAGS -NO_PROPRIETARY_API_WARNINGS = -XDignore.symbol.file=true - -# Langtools -LANGTOOLS_DIST ?= $(ALT_LANGTOOLS_DIST) - -ifdef LANGTOOLS_DIST - JAVAC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javac.jar - JAVAH_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javah.jar - JAVADOC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javadoc.jar - DOCLETS_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/doclets.jar - JAVAC_CMD = $(BOOT_JAVA_CMD) \ - "-Xbootclasspath/p:$(JAVAC_JAR)" \ - -jar $(JAVAC_JAR) $(JAVACFLAGS) - JAVAH_CMD = $(BOOT_JAVA_CMD) \ - "-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \ - -jar $(JAVAH_JAR) $(JAVAHFLAGS) - JAVADOC_CMD = $(BOOT_JAVA_CMD) \ - "-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \ - -jar $(JAVADOC_JAR) $(JAVADOCFLAGS) -else - # If no explicit tools, use boot tools (add VM flags in this case) - JAVAC_CMD = $(UNCYGDRIVE) $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \ - $(JAVACFLAGS) - JAVAH_CMD = $(UNCYGDRIVE) $(JAVA_TOOLS_DIR)/javah \ - $(JAVAHFLAGS) - JAVADOC_CMD = $(UNCYGDRIVE) $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%) \ - $(JAVADOCFLAGS) -endif - -# Override of what javac to use (see deploy workspace) -#ifdef JAVAC -# JAVAC_CMD = $(JAVAC) -#endif - -# -# The bootstrap java compiler (defined as the javac in the ALT_BOOTDIR jdk). -# Will be used to compile java code used to build the jdk, e.g. class files -# created by this compiler will NOT become part of this built jdk, but just -# used to build this jdk, e.g. run with the java in the ALT_BOOTDIR jdk. -# -# The javac supplied with the LANGTOOLS_DIST should be used to build the -# classes that will be put into the built jdk. But note that this javac -# will use the ALT_BOOTDIR java runtime. Any classes created by the -# LANGTOOLS_DIST javac should not be run during this jdk build and indeed -# may not even run with the ALT_BOOTDIR jdk because they may be a newer -# class file version that the ALT_BOOTDIR jdk doesn't understand. -# -# The important observation here is that the built jdk is NOT run during -# the build. If the built jdk needs to be verified that it can build this -# same jdk, then it should be supplied to the build process as the ALT_BOOTDIR -# jdk, and this resulting built jdk should be compared to the first one. -# (They should be the same). Re-using this built jdk as the ALT_BOOTDIR -# jdk will be the only way and the recommeneded way to verify the built jdk -# can bootstrap itself. -# - -# The javac options supplied to the boot javac is limited. This compiler -# should only be used to build the 'make/tools' sources, which are not -# class files that end up in the classes directory. -BOOT_JAVACFLAGS += $(JAVAC_LINT_OPTIONS) -ifeq ($(JAVAC_WARNINGS_FATAL), true) - BOOT_JAVACFLAGS += -Werror -endif - -BOOT_JAVACFLAGS += -encoding ascii -BOOT_JAR_JFLAGS += $(JAR_JFLAGS) - -BOOT_JAVACFLAGS += $(NO_PROPRIETARY_API_WARNINGS) - -BOOT_JAVA_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/java $(JAVA_TOOLS_FLAGS) -BOOT_JAVAC_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/javac $(JAVAC_JVM_FLAGS) $(BOOT_JAVACFLAGS) -BOOT_JAR_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/jar -BOOT_JARSIGNER_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/jarsigner - -# Various tools we need to run (FIXUP: Are these the right ones?) -NATIVE2ASCII = $(UNCYGDRIVE) $(BOOTDIR)/bin/native2ascii $(JAVA_TOOLS_FLAGS:%=-J%) -RMIC = $(UNCYGDRIVE) $(BOOTDIR)/bin/rmic $(JAVA_TOOLS_FLAGS:%=-J%) -IDLJ = $(UNCYGDRIVE) $(BOOTDIR)/bin/idlj $(JAVA_TOOLS_FLAGS:%=-J%) - -# Should not be used -#JAVA = /should/not/be/used - diff --git a/jdk/makefiles/common/shared/Defs-javadoc.gmk b/jdk/makefiles/common/shared/Defs-javadoc.gmk deleted file mode 100644 index c222ad10fa4..00000000000 --- a/jdk/makefiles/common/shared/Defs-javadoc.gmk +++ /dev/null @@ -1,71 +0,0 @@ -# -# Copyright (c) 1997, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# Copyright year for beginning of Java and some of the apis -# (Needed when creating the javadocs) -FIRST_COPYRIGHT_YEAR = 1993 -DOMAPI_FIRST_COPYRIGHT_YEAR = 2005 -MIRROR_FIRST_COPYRIGHT_YEAR = 2004 -DOCLETAPI_FIRST_COPYRIGHT_YEAR = 1993 -TAGLETAPI_FIRST_COPYRIGHT_YEAR = 1993 -JDI_FIRST_COPYRIGHT_YEAR = 1999 -JAAS_FIRST_COPYRIGHT_YEAR = 1998 -JGSS_FIRST_COPYRIGHT_YEAR = 2000 -SMARTCARDIO_FIRST_COPYRIGHT_YEAR = 2005 -HTTPSERVER_FIRST_COPYRIGHT_YEAR = 2005 -MGMT_FIRST_COPYRIGHT_YEAR = 2003 -ATTACH_FIRST_COPYRIGHT_YEAR = 2005 -JCONSOLE_FIRST_COPYRIGHT_YEAR = 2006 -SCTPAPI_FIRST_COPYRIGHT_YEAR = 2009 -TRACING_FIRST_COPYRIGHT_YEAR = 2008 -TREEAPI_FIRST_COPYRIGHT_YEAR = 2005 -JNLP_FIRST_COPYRIGHT_YEAR = 1998 -PLUGIN2_FIRST_COPYRIGHT_YEAR = 2007 - -# Oracle name -FULL_COMPANY_NAME = Oracle and/or its affiliates - -# Copyright address -COMPANY_ADDRESS = 500 Oracle Parkway
Redwood Shores, CA 94065 USA. - -# The trademark symbol -TRADEMARK = ™ - -# Common copyright lines used -# The word "Copyright" might optionally be a link to the file cpyr.html. -# The first year of copyright may vary or not be available. -# The address to the company might be optional. -COMMA:= , -EMPTY:= -SPACE:=$(EMPTY) $(EMPTY) -COPYRIGHT_SYMBOL = &\#x00a9; -# Macro to construct the copyright line -# (The GNU make 3.78.1 "if" conditional is broken, fixed in GNU make 3.81) -define CopyrightLine # optionalurl optionalfirstyear optionaladdress -$(if $(strip $1),Copyright,Copyright) \ -$(COPYRIGHT_SYMBOL) $(if $2,$2${COMMA},) $(COPYRIGHT_YEAR),\ -$(FULL_COMPANY_NAME). $3 All rights reserved. -endef - diff --git a/jdk/makefiles/common/shared/Defs-linux.gmk b/jdk/makefiles/common/shared/Defs-linux.gmk deleted file mode 100644 index 1e0559dbf4a..00000000000 --- a/jdk/makefiles/common/shared/Defs-linux.gmk +++ /dev/null @@ -1,213 +0,0 @@ -# -# Copyright (c) 2005, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Definitions for Linux. -# - -# Default for COMPILER_WARNINGS_FATAL on Linux (C & C++ compiler warnings) -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif - -# Linux should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = parallel -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -ifndef INCREMENTAL_BUILD - INCREMENTAL_BUILD = false -endif - -# FullPath just makes sure it never ends with a / and no duplicates -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef - -# OptFullPath: Absolute path name of a dir that might not initially exist. -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef - -# Location on system where jdk installs might be -USRJDKINSTANCES_PATH =/opt/java - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCOMMAND_PATH)" "undefined" - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) -else - UNIXCOMMAND_PATH = /bin/ -endif - -# USRBIN_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_USRBIN_PATH)" "undefined" - USRBIN_PATH :=$(call PrefixPath,$(ALT_USRBIN_PATH)) -else - USRBIN_PATH = /usr/bin/ -endif - -# UNIXCCS_PATH: path to where the Solaris ported UNIX commands can be found -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCCS_PATH)" "undefined" - UNIXCCS_PATH :=$(call PrefixPath,$(ALT_UNIXCCS_PATH)) -else - UNIXCCS_PATH = /usr/ccs/bin/ -endif - -# SLASH_JAVA: location of all network accessable files -ifdef ALT_SLASH_JAVA - SLASH_JAVA :=$(ALT_SLASH_JAVA) -else - SLASH_JAVA := $(call DirExists,/java,/java,/NOT-SET) -endif - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - JDK_DEVTOOLS_DIR =$(ALT_JDK_DEVTOOLS_DIR) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - COMPILER_PATH =/usr/bin/ -endif - -# OPENWIN_HOME: path to where the X11 environment is installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq ($(ALT_OPENWIN_HOME),) - OPENWIN_HOME :=$(call PrefixPath,$(ALT_OPENWIN_HOME)) -else - OPENWIN_HOME ?=$(SYS_ROOT)/usr/X11R6/ -endif - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" - DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH)) -else - DEVTOOLS_PATH =/usr/bin/ -endif - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) -endif - -# Always build headless on Linux -BUILD_HEADLESS = true -LIBM=-lm - -# GCC29_COMPILER_PATH: is the path to where the gcc 2.9 compiler is installed -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_GCC29_COMPILER_PATH - GCC29_COMPILER_PATH :=$(call PrefixPath,$(ALT_GCC29_COMPILER_PATH)) -else - GCC29_COMPILER_PATH = $(JDK_DEVTOOLS_DIR)/$(PLATFORM)/gcc29/usr/ -endif - -_CUPS_HEADERS_PATH=/usr/include - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, linux-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif - -# JDK_IMPORT_PATH: location of JDK install tree (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif - -# HOTSPOT_IMPORT_PATH: location of hotspot pre-built files -ifdef ALT_HOTSPOT_IMPORT_PATH - HOTSPOT_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_IMPORT_PATH)) -else - HOTSPOT_IMPORT_PATH ?=$(JDK_IMPORT_PATH) -endif - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif - -# Special define for checking the binaries - -# Debug builds should downgrade warnings to just info -MAPFILE_WARNING-DBG=INFO -MAPFILE_WARNING-OPT=WARNING -MAPFILE_WARNING-=WARNING -MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT)) - -# Macro to check it's input file for banned dependencies and verify the -# binary built properly. Relies on process exit code. -ifndef CROSS_COMPILE_ARCH -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(NM) -D -g --defined-only $1 | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(READELF) -d $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) -endef -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification for cross-compile build" \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs-macosx.gmk b/jdk/makefiles/common/shared/Defs-macosx.gmk deleted file mode 100644 index a847d8ae9f3..00000000000 --- a/jdk/makefiles/common/shared/Defs-macosx.gmk +++ /dev/null @@ -1,252 +0,0 @@ -# -# Copyright (c) 2005, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Definitions for Bsd. -# - -# Default for COMPILER_WARNINGS_FATAL on Bsd (C & C++ compiler warnings) -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif - -# Bsd should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = parallel -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -ifndef INCREMENTAL_BUILD - INCREMENTAL_BUILD = false -endif - -# FullPath just makes sure it never ends with a / and no duplicates -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef - -# OptFullPath: Absolute path name of a dir that might not initially exist. -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef - -# Location on system where jdk installs might be -USRJDKINSTANCES_PATH = $(PACKAGE_PATH) - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCOMMAND_PATH)" "undefined" - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) -else - UNIXCOMMAND_PATH = /bin/ -endif - -# USRBIN_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_USRBIN_PATH)" "undefined" - USRBIN_PATH :=$(call PrefixPath,$(ALT_USRBIN_PATH)) -else - USRBIN_PATH = /usr/bin/ -endif - -# UNIXCCS_PATH: path to where the Solaris ported UNIX commands can be found -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCCS_PATH)" "undefined" - UNIXCCS_PATH :=$(call PrefixPath,$(ALT_UNIXCCS_PATH)) -else - UNIXCCS_PATH = /usr/ccs/bin/ -endif - -# SLASH_JAVA: location of all network accessable files -ifdef ALT_SLASH_JAVA - SLASH_JAVA :=$(ALT_SLASH_JAVA) -else - SLASH_JAVA := $(call DirExists,/java,/java,/NOT-SET) -endif - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - JDK_DEVTOOLS_DIR =$(ALT_JDK_DEVTOOLS_DIR) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - ifeq ($(OS_VENDOR), Apple) - ifndef DEVELOPER_DIR - DEVELOPER_DIR = $(shell /usr/bin/xcode-select -print-path)/usr/bin/ - endif - - COMPILER_PATH := $(call DirExists,$(DEVELOPER_DIR),/usr/bin/,/NOT-SET) - else - COMPILER_PATH =/usr/bin/ - endif -endif - -# OPENWIN_HOME: path to where the X11 environment is installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq ($(ALT_OPENWIN_HOME),) - OPENWIN_HOME :=$(call PrefixPath,$(ALT_OPENWIN_HOME)) -else - OPENWIN_HOME ?=$(X11_PATH) -endif - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" - DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH)) -else - DEVTOOLS_PATH =$(PACKAGE_PATH)/bin/ -endif - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) -endif - -# Always build headless on Bsd -BUILD_HEADLESS = true -LIBM=-lm - -ifeq ($(OS_VENDOR), Apple) - _CUPS_HEADERS_PATH=/usr/include -else - _CUPS_HEADERS_PATH=$(PACKAGE_PATH)/include -endif - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, bsd-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif -BUILD_JDK_IMPORT_PATH:=$(call AltCheckValue,BUILD_JDK_IMPORT_PATH) - -# JDK_IMPORT_PATH: location of JDK install tree (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif -JDK_IMPORT_PATH:=$(call AltCheckValue,JDK_IMPORT_PATH) - -# HOTSPOT_IMPORT_PATH: location of hotspot pre-built files -ifdef ALT_HOTSPOT_IMPORT_PATH - HOTSPOT_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_IMPORT_PATH)) -else - HOTSPOT_IMPORT_PATH ?=$(JDK_IMPORT_PATH) -endif -HOTSPOT_IMPORT_PATH:=$(call AltCheckValue,HOTSPOT_IMPORT_PATH) - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif - HOTSPOT_CLIENT_PATH:=$(call AltCheckValue,HOTSPOT_CLIENT_PATH) -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif -HOTSPOT_SERVER_PATH:=$(call AltCheckValue,HOTSPOT_SERVER_PATH) - -# Special define for checking the binaries - -# Debug builds should downgrade warnings to just info -MAPFILE_WARNING-DBG=INFO -MAPFILE_WARNING-OPT=WARNING -MAPFILE_WARNING-=WARNING -MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT)) - -# Macro to check it's input file for banned dependencies and verify the -# binary built properly. Relies on process exit code. -ifndef CROSS_COMPILE_ARCH -ifeq ($(OS_VENDOR), Apple) -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(NM) -g $1 | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "WARNING: File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(OTOOL) -L $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(OTOOL) -l $1 | $(EGREP) 'path ' ) \ -) || true -endef -else -ifeq ($(OS_VENDOR), OpenBSD) -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(OBJDUMP) -T $1 | $(EGREP) '[0-9a-f]* g *DF \.text.*SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(READELF) -d $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) || true -endef -else -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(NM) -D -g --defined-only $1 | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(READELF) -d $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) -endef -endif # OS_VENDOR == OpenBSD -endif # OS_VENDOR == Apple -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification for cross-compile build" \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs-solaris.gmk b/jdk/makefiles/common/shared/Defs-solaris.gmk deleted file mode 100644 index cd7fa15d27c..00000000000 --- a/jdk/makefiles/common/shared/Defs-solaris.gmk +++ /dev/null @@ -1,239 +0,0 @@ -# -# Copyright (c) 2005, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Definitions for Solaris. -# - -# Default for COMPILER_WARNINGS_FATAL on Solaris (C & C++ compiler warnings) -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif - -# Solaris should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = parallel -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -ifndef INCREMENTAL_BUILD - INCREMENTAL_BUILD = false -endif - -# FullPath just makes sure it never ends with a / and no duplicates -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef - -# OptFullPath: Absolute path name of a dir that might not initially exist. -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef - -# Location on system where jdk installs might be -USRJDKINSTANCES_PATH =/usr/jdk/instances - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCOMMAND_PATH)" "undefined" - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) -else - UNIXCOMMAND_PATH = /usr/bin/ -endif - -# UNIXCCS_PATH: path to where the less common UNIX commands can be found -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCCS_PATH)" "undefined" - UNIXCCS_PATH :=$(call PrefixPath,$(ALT_UNIXCCS_PATH)) -else - UNIXCCS_PATH = /usr/ccs/bin/ -endif - -# SLASH_JAVA: location of all network accessable files -ifdef ALT_SLASH_JAVA - SLASH_JAVA :=$(ALT_SLASH_JAVA) -else - SLASH_JAVA := $(call DirExists,/java,/java,/NOT-SET) -endif - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - JDK_DEVTOOLS_DIR =$(ALT_JDK_DEVTOOLS_DIR) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - # If the place where we keep a set of Sun Studio compilers doesn't exist, - # try and use /opt/SUNWspro, the default location for the SS compilers. - # (DirExists checks for this path twice, an automount double check) - _SUNSTUDIO_SET_ROOT=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/SUNWspro - SUNSTUDIO_SET_ROOT:=$(call DirExists,$(_SUNSTUDIO_SET_ROOT),$(_SUNSTUDIO_SET_ROOT),) - ifneq ($(SUNSTUDIO_SET_ROOT),) - COMPILER_PATH =$(SUNSTUDIO_SET_ROOT)/$(REQUIRED_COMPILER_VERSION)/bin/ - else - COMPILER_PATH =/opt/SUNWspro/bin/ - endif -endif - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" - DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH)) -else - ifdef ALT_JDK_DEVTOOLS_DIR - DEVTOOLS_PATH =$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/bin/ - else - ifdef OPENJDK - DEVTOOLS_PATH = /usr/bin/ - else - DEVTOOLS_PATH =$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/bin/ - endif - endif -endif - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) -endif - -# GCC_COMPILER_PATH: path to where the gcc/g++ compiler and tools are installed -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_GCC_COMPILER_PATH)" "undefined" - GCC_COMPILER_PATH :=$(call PrefixPath,$(ALT_GCC_COMPILER_PATH)) -else - GCC_COMPILER_PATH = $(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/gnucc/bin/ -endif - - -# Always build headless on Solaris -BUILD_HEADLESS = true - -_CUPS_HEADERS_PATH=/opt/sfw/cups/include - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, linux-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif - -# JDK_IMPORT_PATH: location of previously built JDK (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif - -# HOTSPOT_IMPORT_PATH: location of hotspot pre-built files -ifdef ALT_HOTSPOT_IMPORT_PATH - HOTSPOT_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_IMPORT_PATH)) -else - HOTSPOT_IMPORT_PATH ?=$(JDK_IMPORT_PATH) -endif - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif - -# Special define for checking the binaries - -# Debug builds should downgrade warnings to just info -MAPFILE_WARNING-DBG=INFO -MAPFILE_WARNING-OPT=WARNING -MAPFILE_WARNING-=WARNING -MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT)) - -# Some libraries do not have mapfiles for multiple reasons. -# These libraries for sparc and sparcv9 are exceptions to the mapfile rule: -# libjdgaSUNWafb.so -# libjdgaSUNWcg6.so -# libjdgaSUNWffb.so -# libjdgaSUNWm64.so -# libxinerama.so -# The library libJdbcOdbc.so has also been given an exception. -# The JNI/JVMTI demo libraries are also missing mapfiles, no exceptions yet. -ifeq ($(ARCH_FAMILY),sparc) - MAPFILE_EXCEPTIONS = \ - (libJdbcOdbc|libjdgaSUNWafb|libjdgaSUNWcg6|libjdgaSUNWffb|libjdgaSUNWm64|libxinerama) -else - MAPFILE_EXCEPTIONS = (libJdbcOdbc) -endif - -# Macro to check it's input file for banned dependencies and verify the -# binary built properly. Relies on process exit code. -ifndef CROSS_COMPILE_ARCH -ifneq (,$(DUMP)) -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(ECHO) $(basename $(notdir $1)) | $(EGREP) '$(MAPFILE_EXCEPTIONS)'`" = "" \ - -a "`$(NM) -g -D $1 | $(EGREP) -v 'UNDEF' | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(DUMP) -L -v $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) -endef -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification since no dump command found" \ -) -endef -endif -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification for cross-compile build" \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs-versions.gmk b/jdk/makefiles/common/shared/Defs-versions.gmk deleted file mode 100644 index fba70370ba2..00000000000 --- a/jdk/makefiles/common/shared/Defs-versions.gmk +++ /dev/null @@ -1,215 +0,0 @@ -# -# Copyright (c) 2009, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# WARNING: This file is shared with other workspaces. -# - -# This file needs these set: PLATFORM, ARCH_FAMILY, and ARCH_DATA_MODEL. - -# Windows uses Microsoft compilers by default -ifeq ($(PLATFORM), windows) - override CC_VERSION = msvc -endif - -# Solaris uses Sun Studio compilers by default -ifeq ($(PLATFORM), solaris) - override CC_VERSION = sun -endif - -# Linux uses GNU compilers by default -ifeq ($(PLATFORM), linux) - override CC_VERSION = gcc -endif - -# Mac OS X uses LLVM by default -ifeq ($(PLATFORM), macosx) - override CC_VERSION = llvm -endif - -########################################################################## -# -# List of JDK official minimum, expected, or required versions: -# -# REQUIRED_ALSA_VERSION -# Linux only: The ALSA sound library version expected. -# -# REQUIRED_ANT_VER -# The minimum 'ant' version. -# -# REQUIRED_BOOT_VER -# The minimum boot jdk version. -# -# REQUIRED_CC_VER -# The primary C compiler version expected. -# -# REQUIRED_COMPILER_NAME -# The long descriptive name of the compiler we should use -# -# REQUIRED_COMPILER_VERSION -# The one word name that identifies the compilers being used. -# -# REQUIRED_CYGWIN_VER -# Windows only: If CYGWIN is used, the minimum CYGWIN version. -# -# REQUIRED_DXSDK_VER -# Windows only: The version of DirectX SDK expected. -# -# REQUIRED_FREETYPE_VERSION -# If we are using freetype, the freetype version expected. -# -# REQUIRED_GCC_VER -# Solaris and Linux only. The required version of gcc/g++ for the legacy OJI plugin. -# -# REQUIRED_LINK_VER -# Windows only: The version of link.exe expected. -# -# REQUIRED_MAKE_VER -# The minimum version of GNU make. -# -# REQUIRED_MKS_VER -# Windows only: If MKS used instead of CYGWIN, the minimum version of MKS. -# -# REQUIRED_OS_VARIANT_NAME -# The OS variation name required. -# Solaris: Solaris or OpenSolaris -# Windows: Windows2000, WindowsXP, Windows2003, etc. -# Linux: Fedora, RedHat, SuSE, Ubuntu, etc. -# -# REQUIRED_OS_VARIANT_VERSION -# The version number associated with the above OS variant name. -# Solaris: output of uname -r -# Windows: 5.0 for Windows2000, 5.1 for WindowsXP, 5.2 for Windows2003, etc. -# Linux: number for the variant, e.g. 9 for Fedora 9 -# -# REQUIRED_OS_VERSION -# The formal OS version number. -# Solaris & Windows: same as REQUIRED_OS_VARIANT_VERSION -# Linux: the kernel version, or output of uname -r -# -# REQUIRED_UNZIP_VER -# The minimum version of unzip. -# -# REQUIRED_ZIP_VER -# The minimum version of unzip. -# -########### -# -# Differences in the build platform from these versions may trigger warnings -# messages during the sanity checking when building the JDK. -# -# When building the OpenJDK most of these required or expected versions are -# ignored or allowed to vary widely to accomodate the many build situations -# of the OpenJDK. -# -########################################################################## - -# Solaris specific -ifeq ($(PLATFORM), solaris) - REQUIRED_OS_NAME = SunOS - REQUIRED_OS_VERSION = 5.10 - REQUIRED_OS_VARIANT_NAME = Solaris - REQUIRED_OS_VARIANT_VERSION = $(REQUIRED_OS_VERSION) - REQUIRED_COMPILER_NAME = Sun Studio 12 Update 1 - REQUIRED_COMPILER_VERSION = SS12u1 - # Cross-compilation compiler versions are target specific - # so don't set a required version if cross-compiling - ifndef CROSS_COMPILE_ARCH - ifeq ($(CC_VERSION),sun) - REQUIRED_CC_VER = 5.10 - endif - ifeq ($(CC_VERSION),gcc) - REQUIRED_CC_VER = 3.4.3 - endif - endif - REQUIRED_GCC_VER = 2.95.2 -endif - -# Linux specific -ifeq ($(PLATFORM), linux) - REQUIRED_OS_NAME = Linux - REQUIRED_OS_VERSION = 2.6 - REQUIRED_OS_VARIANT_NAME = Fedora - REQUIRED_OS_VARIANT_VERSION = 9 - REQUIRED_ALSA_VERSION = 0.9.1 - REQUIRED_COMPILER_NAME = GCC4 - REQUIRED_COMPILER_VERSION = GCC4 - REQUIRED_GCC_VER = 2.95 - # Cross-compilation compiler versions are target specific - # so don't set a required version if cross-compiling - ifndef CROSS_COMPILE_ARCH - ifeq ($(CC_VERSION),gcc) - REQUIRED_CC_VER = 4.3.0 - endif - ifeq ($(CC_VERSION),sun) - REQUIRED_CC_VER = 5.10 - endif - endif -endif - -# Mac specific -ifeq ($(PLATFORM), macosx) - REQUIRED_OS_NAME = Darwin - REQUIRED_OS_VERSION = 11.2 - REQUIRED_OS_VARIANT_NAME = MacOSX - REQUIRED_OS_VARIANT_VERSION = 10.7.2 - REQUIRED_COMPILER_NAME = GCC4 - REQUIRED_COMPILER_VERSION = GCC4 - REQUIRED_CC_VER = 4.2.1 -endif - -# Windows specific -ifeq ($(PLATFORM), windows) - REQUIRED_OS_NAME = Windows - ifeq ($(ARCH_DATA_MODEL),64) - REQUIRED_OS_VERSION = 5.2 - REQUIRED_OS_VARIANT_NAME = Windows2003 - else - REQUIRED_OS_VERSION = 5.1 - REQUIRED_OS_VARIANT_NAME = WindowsXP - endif - REQUIRED_OS_VARIANT_VERSION = $(REQUIRED_OS_VERSION) - REQUIRED_CYGWIN_VER = 4.0 - REQUIRED_MKS_VER = 6.1 - REQUIRED_DXSDK_VER = 0x0900 - ifeq ($(CC_VERSION),msvc) - REQUIRED_COMPILER_NAME = Visual Studio 10 - REQUIRED_COMPILER_VERSION = VS2010 - REQUIRED_CC_VER = 16.00.30319.01 - REQUIRED_LINK_VER = 10.00.30319.01 - endif - ifeq ($(CC_VERSION),gcc) - REQUIRED_CC_VER = 3.4.3 - endif -endif - -# Generic -REQUIRED_ANT_VER = 1.7.1 -REQUIRED_BOOT_VER = 1.7 -REQUIRED_FREETYPE_VERSION = 2.3.0 -REQUIRED_MAKE_VER = 3.81 -REQUIRED_UNZIP_VER = 5.12 -REQUIRED_ZIP_VER = 2.2 - diff --git a/jdk/makefiles/common/shared/Defs-windows.gmk b/jdk/makefiles/common/shared/Defs-windows.gmk deleted file mode 100644 index da796ee3f9f..00000000000 --- a/jdk/makefiles/common/shared/Defs-windows.gmk +++ /dev/null @@ -1,696 +0,0 @@ -# -# Copyright (c) 2005, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Definitions for Windows. -# - -# Default for COMPILER_WARNINGS_FATAL on Windows (C++ compiler warnings) -# Level: Default is 3, 0 means none, 4 is the most but may be unreliable -# Some makefiles may have set this to 0 to turn off warnings completely, -# which also effectively creates a COMPILER_WARNINGS_FATAL=false situation. -# Program.gmk may turn this down to 2 (building .exe's). -# Windows 64bit platforms are less likely to be warning free. -# Historically, Windows 32bit builds should be mostly warning free. -# VS2010 introduced a large number of security warnings that are off by -# default but will be turned back on with SHOW_ALL_WARNINGS=true. -ifndef COMPILER_WARNING_LEVEL - COMPILER_WARNING_LEVEL=3 -endif -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif -ifndef SHOW_ALL_WARNINGS - SHOW_ALL_WARNINGS = false -endif - -# Windows should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = normal -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -# (This may not be working on windows yet, always force to false.) -override INCREMENTAL_BUILD = false - -# WARNING: This is extremely touch stuff, between CYGWIN vs. MKS and all -# variations of MKS and CYGWIN releases, and 32bit vs 64bit, -# this file can give you nightmares. -# -# Notes: -# Keep all paths in the windows "mixed" style except CYGWIN UNXIXCOMMAND_PATH. -# Use of PrefixPath is critical, some variables must end with / (see NOTE). -# Use of quotes is critical due to possible spaces in paths coming from -# the environment variables, be careful. -# First convert \ to / with subst, keep it quoted due to blanks, then -# use cygpath -s or dosname -s to get the short non-blank name. -# If the MKS is old and doesn't have a dosname -s, you will be forced -# to set ALT variables with the short non-space directory names. -# If dosname doesn't appear to work, we won't use it. -# The dosname utility also wants to accept stdin if it is not supplied -# any path on the command line, this is really dangerous when using -# make variables that can easily become empty, so I use: -# echo $1 | dosname -s instead of dosname -s $1 -# to prevent dosname from hanging up the make process when $1 is empty. -# The cygpath utility does not have this problem. -# The ALT values should never really have spaces or use \. -# Suspect these environment variables to have spaces and/or \ characters: -# SYSTEMROOT, SystemRoot, WINDIR, windir, PROGRAMFILES, ProgramFiles, -# DXSDK_DIR, MSTOOLS, Mstools, MSSDK, MSSdk, VCnnCOMNTOOLS, -# MSVCDIR, MSVCDir. -# So use $(subst \,/,) on them first adding quotes and placing them in -# their own variable assigned with :=, then use FullPath. -# - -ifdef USING_CYGWIN -# Macro to effectively do a toupper without an exec -define ToUpper -$(subst a,A,$(subst b,B,$(subst c,C,$(subst d,D,$(subst e,E,$(subst f,F,\ -$(subst g,G,$(subst h,H,$(subst i,I,$(subst j,J,$(subst k,K,$(subst l,L,\ -$(subst m,M,$(subst n,N,$(subst o,O,$(subst p,P,$(subst q,Q,$(subst r,R,\ -$(subst s,S,$(subst t,T,$(subst u,U,$(subst v,V,$(subst w,W,$(subst x,X,\ -$(subst y,Y,$(subst z,Z,$1)))))))))))))))))))))))))) -endef -# All possible drive letters -drives=a b c d e f g h i j k l m n o p q r s t v u w x y z -# Convert /cygdrive/ paths to the mixed style without an exec of cygpath -# Must be a path with no spaces. /cygdrive/letter is always lowercase -# and letter:/ is always uppercase coming from cygpath. -define MixedPath -$(patsubst /%,$(CYGWIN_HOME)/%,$(sort $(filter-out /cygdrive/%,$(foreach drive,$(drives),$(patsubst /cygdrive/$(drive)/%,$(call ToUpper,$(drive)):/%,$1))))) -endef -# Use FullPath to get C:/ style non-spaces path. Never ends with a /! -# We assume cygpath is available in the search path -# NOTE: Use of 'pwd' with CYGWIN will not get you a mixed style path! -define FullPath -$(if $(word 2,$1),$(shell $(CYGPATH_CMD) $1 2> $(DEV_NULL)),$(call MixedPath,$(realpath $(subst ",,$1)))) -endef -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then $(CYGPATH_CMD) "$1" 2> $(DEV_NULL); else echo "$1"; fi) -endef -else -# Temporary until we upgrade to MKS 8.7, MKS pwd returns mixed mode path -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef -endif - -# System drive -ifdef SYSTEMDRIVE - _system_drive =$(SYSTEMDRIVE) -else - ifdef SystemDrive - _system_drive =$(SystemDrive) - endif -endif -_system_drive:=$(call CheckValue,_system_drive,C:) - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -# With cygwin, just use this as is don't use FullPath on it. -ifdef ALT_UNIXCOMMAND_PATH - ifdef USING_CYGWIN - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) - else - xALT_UNIXCOMMAND_PATH :="$(subst \,/,$(ALT_UNIXCOMMAND_PATH))" - fxALT_UNIXCOMMAND_PATH :=$(call FullPath,$(xALT_UNIXCOMMAND_PATH)) - UNIXCOMMAND_PATH :=$(call PrefixPath,$(fxALT_UNIXCOMMAND_PATH)) - endif -else - ifdef USING_CYGWIN - UNIXCOMMAND_PATH :=$(call PrefixPath,/usr/bin) - else - ifdef ROOTDIR - xROOTDIR :="$(subst \,/,$(ROOTDIR))" - _rootdir :=$(call FullPath,$(xROOTDIR)) - else - xROOTDIR :="$(_system_drive)/mksnt" - _rootdir :=$(call FullPath,$(xROOTDIR)) - endif - ifneq ($(_rootdir),) - UNIXCOMMAND_PATH :=$(call PrefixPath,$(_rootdir)/mksnt) - endif - endif -endif -UNIXCOMMAND_PATH:=$(call AltCheckSpaces,UNIXCOMMAND_PATH) - -# Get version of MKS or CYGWIN -ifndef USING_CYGWIN -_MKS_VER :=$(shell $(MKSINFO) 2>&1 | $(GREP) Release | $(TAIL) -1 | $(SED) -e 's@.*\(Release.*\)@\1@') -MKS_VER :=$(call GetVersion,$(_MKS_VER)) -# At this point, we can re-define FullPath to use DOSNAME_CMD -CHECK_MKS87:=$(call CheckVersions,$(MKS_VER),8.7) -TRY_DOSNAME:=false -ifeq ($(CHECK_MKS87),same) -TRY_DOSNAME:=true -endif -# Newer should be ok -ifeq ($(CHECK_MKS87),newer) -TRY_DOSNAME:=true -endif -ifeq ($(TRY_DOSNAME),true) -ifeq ($(shell $(UNIXCOMMAND_PATH)dosname -s $(_system_drive)/ 2> $(DEV_NULL)),$(_system_drive)/) -_DOSNAME=$(UNIXCOMMAND_PATH)dosname -DOSNAME_CMD:=$(_DOSNAME) -s -define FullPath -$(subst //,/,$(shell echo $1 | $(DOSNAME_CMD) 2> $(DEV_NULL))) -endef -endif # test dosname -s -endif # TRY_DOSNAME -endif # MKS - -# We try to get references to what we need via the default component -# environment variables, or what was used historically. - -# Process Windows values into FullPath values, these paths may have \ chars - -# System root -ifdef SYSTEMROOT - xSYSTEMROOT :="$(subst \,/,$(SYSTEMROOT))" - _system_root :=$(call FullPath,$(xSYSTEMROOT)) -else - ifdef SystemRoot - xSYSTEMROOT :="$(subst \,/,$(SystemRoot))" - _system_root :=$(call FullPath,$(xSYSTEMROOT)) - else - ifdef WINDIR - xWINDIR :="$(subst \,/,$(WINDIR))" - _system_root :=$(call FullPath,$(xWINDIR)) - else - ifdef windir - xWINDIR :="$(subst \,/,$(windir))" - _system_root :=$(call FullPath,$(xWINDIR)) - endif - endif - endif -endif -_system_root:=$(call CheckValue,_system_root,$(_system_drive)/WINNT) - -# Program Files directory -ifdef PROGRAMFILES - xPROGRAMFILES :="$(subst \,/,$(PROGRAMFILES))" -else - ifeq ($(ARCH_DATA_MODEL), 32) - xPROGRAMFILES :="$(_system_drive)/Program Files" - else - xPROGRAMFILES :="$(_system_drive)/Program Files (x86)" - endif -endif -ifeq ($(ARCH_DATA_MODEL), 32) - _program_files :=$(call FullPath,$(xPROGRAMFILES)) - _program_files32 :=$(_program_files) -else - ifdef PROGRAMW6432 - xPROGRAMW6432 :="$(subst \,/,$(PROGRAMW6432))" - else - xPROGRAMW6432 :="$(_system_drive)/Program Files" - endif - _program_files :=$(call FullPath,$(xPROGRAMW6432)) - _program_files32 :=$(call FullPath,$(xPROGRAMFILES)) - ifneq ($(word 1,$(_program_files32)),$(_program_files32)) - _program_files32:= - endif -endif -ifneq ($(word 1,$(_program_files)),$(_program_files)) - _program_files:= -endif - -# DirectX SDK -ifdef ALT_DXSDK_DRIVE - _dx_sdk_dir =$(ALT_DXSDK_DRIVE):/DXSDK -else - ifdef DXSDK_DIR - xDXSDK_DIR :="$(subst \,/,$(DXSDK_DIR))" - else - xDXSDK_DIR :="$(_system_drive)/DXSDK" - endif - _dx_sdk_dir :=$(call FullPath,$(xDXSDK_DIR)) -endif - -# Use of the Visual Studio compilers requires certain env variables be set: -# PATH should include the path to cl.exe -# INCLUDE should be defined -# LIB should be defined -# LIBPATH should be defined -# VS100COMNTOOLS should be defined -# WINDOWSSDKDIR should be defined -# The 7.0a path is from VS2010 Pro, the 7.1 path is the standalone SDK. -# For 64bit either will work for us. -# If a developer chooses to install the standalone SDK in some other -# location, then they need to set WINDOWSSDKDIR. -# -# Compilers for 64bit may be from the free SDK, or Visual Studio Professional. -# The free Express compilers don't contain 64 bit compilers, which is why -# you instead need the SDK. -# Release enginering will use VS2010 Pro, so the frequency of testing of -# SDK based builds will depend entirely on individual usage. - -# We only need to do this once -ifndef VS2010_EXISTS - # The 2 key paths we need are WINDOWSSDKDIR and VS100COMNTOOLS. - # If not defined try to see if default location exists. - # If defined make sure that the path has no spaces. - # Finally, export path with no spaces so logic minimizes FullPath calls. - ifndef WINDOWSSDKDIR - # The 7.0a SDK is the second choice. - xWINDOWSSDKDIR :="$(_program_files32)/Microsoft SDKs/Windows/v7.0a/" - fWINDOWSSDKDIR :=$(call FullPath,$(xWINDOWSSDKDIR)) - # The 7.1 SDK is the second choice. - ifeq ($(fWINDOWSSDKDIR),) - xWINDOWSSDKDIR :="$(_program_files32)/Microsoft SDKs/Windows/v7.1/" - fWINDOWSSDKDIR :=$(call FullPath,$(xWINDOWSSDKDIR)) - endif - else - ifneq ($(word 2,$(WINDOWSSDKDIR)),) - xWINDOWSSDKDIR :="$(subst \,/,$(WINDOWSSDKDIR))" - fWINDOWSSDKDIR :=$(call FullPath,$(xWINDOWSSDKDIR)) - else - fWINDOWSSDKDIR :=$(WINDOWSSDKDIR) - endif - endif - ifneq ($(fWINDOWSSDKDIR),) - WINDOWSSDKDIR :=$(fWINDOWSSDKDIR)/ - endif - ifndef VS100COMNTOOLS - xVS100COMNTOOLS :="$(_program_files32)/Microsoft Visual Studio 10.0/Common7/Tools/" - fVS100COMNTOOLS :=$(call FullPath,$(xVS100COMNTOOLS)) - else - xVS100COMNTOOLS :="$(subst \,/,$(VS100COMNTOOLS))" - ifneq ($(word 2,$(VS100COMNTOOLS)),) - fVS100COMNTOOLS :=$(call FullPath,$(xVS100COMNTOOLS)) - else - fVS100COMNTOOLS :=$(xVS100COMNTOOLS) - endif - endif - ifneq ($(fVS100COMNTOOLS),) - VS100COMNTOOLS :=$(fVS100COMNTOOLS)/ - endif - # Check to see that both exist - ifeq ($(WINDOWSSDKDIR),) - _vs2010_message := No WINDOWSSDKDIR found on system. $(_vs2010_message) - VS2010_EXISTS := false - endif - ifeq ($(VS100COMNTOOLS),) - _vs2010_message := No VS100COMNTOOLS found on system. $(_vs2010_message) - VS2010_EXISTS := false - endif - ifeq ($(VS2010_EXISTS),false) - x:=$(warning WARNING: No VS2010 available. $(_vs2010_message)) - VS100COMNTOOLS := - WINDOWSSDKDIR := - else - VS2010_EXISTS := true - _msvc_dir :=$(VS100COMNTOOLS)/../../Vc - endif - export VS2010_EXISTS - export VS100COMNTOOLS - export WINDOWSSDKDIR -endif - -ifneq ($(VS2010_EXISTS),true) - x:=$(error ERROR: No VS2010 found on system.) -endif - -# VS2010 Compiler root directory -_msvc_dir :=$(VS100COMNTOOLS)/../../Vc -# SDK root directory -_ms_sdk :=$(WINDOWSSDKDIR) -# Compiler bin directory and redist directory -ifeq ($(ARCH_DATA_MODEL), 32) - _compiler_bin :=$(_msvc_dir)/Bin - _redist_sdk :=$(call FullPath,$(_msvc_dir)/redist/x86/Microsoft.VC100.CRT) -endif -ifeq ($(ARCH_DATA_MODEL), 64) - _compiler_bin :=$(_msvc_dir)/bin/amd64 - _redist_sdk :=$(call FullPath,$(_msvc_dir)/redist/x64/Microsoft.VC100.CRT) -endif -ifeq ($(_redist_sdk),) - _redist_sdk :=$(_system_root)/system32 -endif - -# Location on system where jdk installs might be -ifneq ($(_program_files),) - USRJDKINSTANCES_PATH =$(_program_files)/Java -else - USRJDKINSTANCES_PATH =$(_system_drive)/ -endif - -# SLASH_JAVA: location of all network accessable files -# NOTE: Do not use FullPath on this because it's often a drive letter and -# plain drive letters are ambiguous, so just use this 'as is'. -ifdef ALT_SLASH_JAVA - xALT_SLASH_JAVA :="$(subst \,/,$(ALT_SLASH_JAVA))" - SLASH_JAVA :=$(xALT_SLASH_JAVA) -else - ifdef ALT_JDK_JAVA_DRIVE - SLASH_JAVA =$(JDK_JAVA_DRIVE) - else - SLASH_JAVA =J: - endif -endif -#SLASH_JAVA:=$(call AltCheckSpaces,SLASH_JAVA) - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - xALT_JDK_DEVTOOLS_DIR :="$(subst \,/,$(ALT_JDK_DEVTOOLS_DIR))" - JDK_DEVTOOLS_DIR :=$(call FullPath,$(xALT_JDK_DEVTOOLS_DIR)) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif -JDK_DEVTOOLS_DIR:=$(call AltCheckSpaces,JDK_DEVTOOLS_DIR) - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_COMPILER_PATH - xALT_COMPILER_PATH :="$(subst \,/,$(ALT_COMPILER_PATH))" - fxALT_COMPILER_PATH :=$(call FullPath,$(xALT_COMPILER_PATH)) - COMPILER_PATH :=$(call PrefixPath,$(fxALT_COMPILER_PATH)) -else - COMPILER_PATH :=$(call PrefixPath,$(_compiler_bin)) -endif -COMPILER_PATH :=$(call AltCheckSpaces,COMPILER_PATH) - -# MSDEVTOOLS_PATH: path to where the additional MS Compiler tools are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_MSDEVTOOLS_PATH - xALT_MSDEVTOOLS_PATH :="$(subst \,/,$(ALT_MSDEVTOOLS_PATH))" - fxALT_MSDEVTOOLS_PATH :=$(call FullPath,$(xALT_MSDEVTOOLS_PATH)) - MSDEVTOOLS_PATH :=$(call PrefixPath,$(fxALT_MSDEVTOOLS_PATH)) -else - ifeq ($(ARCH_DATA_MODEL), 64) - ifdef MSTOOLS - xMSTOOLS :="$(subst \,/,$(MSTOOLS))" - _ms_tools :=$(call FullPath,$(xMSTOOLS)) - else - ifdef Mstools - xMSTOOLS :="$(subst \,/,$(Mstools))" - _ms_tools :=$(call FullPath,$(xMSTOOLS)) - else - _ms_tools := - endif - endif - ifneq ($(_ms_tools),) - _ms_tools_bin :=$(_ms_tools)/Bin - else - # Assumes compiler bin is .../Bin/win64/x86/AMD64, rc.exe is 3 levels up - _ms_tools_bin :=$(_compiler_bin)/../../.. - endif - else - _ms_tools_bin :=$(_compiler_bin) - endif - MSDEVTOOLS_PATH :=$(call PrefixPath,$(_ms_tools_bin)) -endif -MSDEVTOOLS_PATH:=$(call AltCheckSpaces,MSDEVTOOLS_PATH) - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_DEVTOOLS_PATH - xALT_DEVTOOLS_PATH :="$(subst \,/,$(ALT_DEVTOOLS_PATH))" - fxALT_DEVTOOLS_PATH :=$(call FullPath,$(xALT_DEVTOOLS_PATH)) - DEVTOOLS_PATH :=$(call PrefixPath,$(fxALT_DEVTOOLS_PATH)) -else - ifdef USING_CYGWIN - DEVTOOLS_PATH :=$(UNIXCOMMAND_PATH) - else - xDEVTOOLS_PATH :="$(_system_drive)/utils" - fxDEVTOOLS_PATH :=$(call FullPath,$(xDEVTOOLS_PATH)) - DEVTOOLS_PATH :=$(call PrefixPath,$(fxDEVTOOLS_PATH)) - endif -endif -DEVTOOLS_PATH:=$(call AltCheckSpaces,DEVTOOLS_PATH) - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -# The _BOOTDIR3 is defind optionally. -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(_system_drive)/jdk$(PREVIOUS_JDK_VERSION) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) - _BOOTDIR3 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) -endif - -# Everybody needs the MSVCRNN runtime starting with VS2010 -_NEEDS_MSVCRNN = true - -ifeq ($(_NEEDS_MSVCRNN), true) - # MSVCRNN_DLL_PATH: location of msvcrnn.dll that will be re-distributed - ifdef ALT_MSVCRNN_DLL_PATH - xALT_MSVCRNN_DLL_PATH :="$(subst \,/,$(ALT_MSVCRNN_DLL_PATH))" - MSVCRNN_DLL_PATH :=$(call FullPath,$(xALT_MSVCRNN_DLL_PATH)) - else - MSVCRNN_DLL_PATH :=$(_redist_sdk) - endif - MSVCRNN_DLL_PATH :=$(call AltCheckSpaces,MSVCRNN_DLL_PATH) -endif - -# DXSDK_PATH: path to Microsoft DirectX SDK Include and Lib -ifdef ALT_DXSDK_PATH - xALT_DXSDK_PATH :="$(subst \,/,$(ALT_DXSDK_PATH))" - DXSDK_PATH :=$(call FullPath,$(xALT_DXSDK_PATH)) -else - _DXSDK_PATH1 :=$(_dx_sdk_dir) - _DXSDK_PATH2 :=$(JDK_DEVTOOLS_DIR)/windows/dxsdk - DXSDK_PATH :=$(call DirExists,$(_DXSDK_PATH1),$(_DXSDK_PATH2),$(_dx_sdk_dir)) -endif -DXSDK_PATH :=$(call AltCheckSpaces,DXSDK_PATH) - -# DXSDK_INCLUDE_PATH: path to Microsoft DirectX SDK Include -ifdef ALT_DXSDK_INCLUDE_PATH - xALT_DXSDK_INCLUDE_PATH :="$(subst \,/,$(ALT_DXSDK_INCLUDE_PATH))" - DXSDK_INCLUDE_PATH :=$(call FullPath,$(xALT_DXSDK_INCLUDE_PATH)) -else - DXSDK_INCLUDE_PATH =$(subst //,/,$(DXSDK_PATH)/Include) -endif - -# DXSDK_LIB_PATH: path to Microsoft DirectX SDK Lib -ifdef ALT_DXSDK_LIB_PATH - xALT_DXSDK_LIB_PATH :="$(subst \,/,$(ALT_DXSDK_LIB_PATH))" - DXSDK_LIB_PATH :=$(call FullPath,$(xALT_DXSDK_LIB_PATH)) -else - ifeq ($(ARCH_DATA_MODEL), 64) - # 64bit libs are located in "Lib/x64" subdir - DXSDK_LIB_PATH =$(subst //,/,$(DXSDK_PATH)/Lib/x64) - else - DXSDK_LIB_PATH =$(subst //,/,$(DXSDK_PATH)/Lib) - endif -endif - -# DEPLOY_MSSDK: Microsoft SDK for this platform (for deploy) -ifdef ALT_DEPLOY_MSSDK - xALT_DEPLOY_MSSDK :="$(subst \,/,$(ALT_DEPLOY_MSSDK))" - DEPLOY_MSSDK :=$(call FullPath,$(xALT_DEPLOY_MSSDK)) -else - DEPLOY_MSSDK :=$(_ms_sdk) -endif -DEPLOY_MSSDK:=$(call AltCheckSpaces,DEPLOY_MSSDK) - -# INSTALL_MSSDK: Microsoft Installer SDK for this platform (for install) -ifdef ALT_INSTALL_MSSDK - xALT_INSTALL_MSSDK :="$(subst \,/,$(ALT_INSTALL_MSSDK))" - INSTALL_MSSDK :=$(call FullPath,$(xALT_INSTALL_MSSDK)) -else - INSTALL_MSSDK :=$(_ms_sdk) -endif -INSTALL_MSSDK:=$(call AltCheckSpaces,INSTALL_MSSDK) - -# WSCRIPT: path to wscript.exe (used in creating install bundles) -ifdef ALT_WSCRIPT - xALT_WSCRIPT :="$(subst \,/,$(ALT_WSCRIPT))" - WSCRIPT =$(xALT_WSCRIPT) -else - _WSCRIPT1 :=$(_system_root)/system32/wscript.exe - _WSCRIPT2 :=$(DEVTOOLS_PATH)wscript.exe - WSCRIPT :=$(call FileExists,$(_WSCRIPT1),$(_WSCRIPT2)) -endif -WSCRIPT:=$(call AltCheckSpaces,WSCRIPT) -# batch mode no modal dialogs on errors, please. -WSCRIPT += -B - -# CSCRIPT: path to cscript.exe (used in creating install bundles) -ifdef ALT_CSCRIPT - xALT_CSCRIPT :="$(subst \,/,$(ALT_CSCRIPT))" - CSCRIPT =$(xALT_CSCRIPT) -else - _CSCRIPT1 :=$(_system_root)/system32/cscript.exe - _CSCRIPT2 :=$(DEVTOOLS_PATH)cscript.exe - CSCRIPT :=$(call FileExists,$(_CSCRIPT1),$(_CSCRIPT2)) -endif -CSCRIPT:=$(call AltCheckSpaces,CSCRIPT) - -# CABARC: path to cabarc.exe (used in creating install bundles) -ifdef ALT_CABARC - xALT_CABARC :="$(subst \,/,$(ALT_CABARC))" - CABARC =$(xALT_CABARC) -else - _CABARC1 :=$(_system_root)/system32/cabarc.exe - _CABARC2 :=$(DEVTOOLS_PATH)cabarc.exe - CABARC :=$(call FileExists,$(_CABARC1),$(_CABARC2)) -endif -CABARC:=$(call AltCheckSpaces,CABARC) - -# MSICERT: path to msicert.exe (used in creating install bundles) -ifdef ALT_MSICERT - xALT_MSICERT :="$(subst \,/,$(ALT_MSICERT))" - MSICERT =$(xALT_MSICERT) -else - _MSICERT1 :=$(INSTALL_MSSDK)/Bin/msicert.exe - _MSICERT2 :=$(DEVTOOLS_PATH)msicert.exe - MSICERT :=$(call FileExists,$(_MSICERT1),$(_MSICERT2)) -endif -MSICERT:=$(call AltCheckSpaces,MSICERT) - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, linux-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif -BUILD_JDK_IMPORT_PATH:=$(call AltCheckSpaces,BUILD_JDK_IMPORT_PATH) - -# JDK_IMPORT_PATH: location of previously built JDK (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif -JDK_IMPORT_PATH:=$(call AltCheckSpaces,JDK_IMPORT_PATH) - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif - HOTSPOT_CLIENT_PATH:=$(call AltCheckSpaces,HOTSPOT_CLIENT_PATH) -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif -HOTSPOT_SERVER_PATH:=$(call AltCheckSpaces,HOTSPOT_SERVER_PATH) - -# HOTSPOT_LIB_PATH: location of jvm.lib file. -ifdef ALT_HOTSPOT_LIB_PATH - xALT_HOTSPOT_LIB_PATH :="$(subst \,/,$(ALT_HOTSPOT_LIB_PATH))" - HOTSPOT_LIB_PATH :=$(call FullPath,$(xALT_HOTSPOT_LIB_PATH)) -else - HOTSPOT_LIB_PATH =$(HOTSPOT_IMPORT_PATH)/lib -endif -HOTSPOT_LIB_PATH:=$(call AltCheckSpaces,HOTSPOT_LIB_PATH) - -# Special define for checking the binaries - -# All windows dll and exe files should have been built with /NXCOMPAT -# and be setup for dynamic base addresses. -# In addition, we should not be dependent on certain dll files that -# we do not or cannot redistribute. - -# List of filenames we should NOT be dependent on -ifeq ($(MFC_DEBUG),true) - BANNED_DLLS=msvcp100[.]dll -else - BANNED_DLLS=msvcp100[.]dll|msvcr100d[.]dll|msvcrtd[.]dll -endif - -# Check for /safeseh (only used on 32bit) -define binary_file_safeseh_verification # binary_file -( \ - $(ECHO) "Checking for /SAFESEH usage in: $1" && \ - if [ "`$(DUMPBIN) /loadconfig $1 | $(EGREP) -i 'Safe Exception Handler Table'`" = "" ] ; then \ - $(ECHO) "ERROR: Did not find 'Safe Exception Handler Table' in loadconfig: $1" ; \ - $(DUMPBIN) /loadconfig $1 ; \ - exit 6 ; \ - fi ; \ -) -endef - -# Check for /NXCOMPAT usage -define binary_file_nxcompat_verification # binary_file -( \ - $(ECHO) "Checking for /NXCOMPAT usage in: $1" && \ - if [ "`$(DUMPBIN) /headers $1 | $(EGREP) -i 'NX compatible'`" = "" ] ; then \ - $(ECHO) "ERROR: Did not find 'NX compatible' in headers: $1" ; \ - $(DUMPBIN) /headers $1 ; \ - exit 7 ; \ - fi ; \ -) -endef - -# Check for /DYNAMICBASE usage -define binary_file_dynamicbase_verification # binary_file -( \ - $(ECHO) "Checking for /DYNAMICBASE usage in: $1" && \ - if [ "`$(DUMPBIN) /headers $1 | $(EGREP) -i 'Dynamic base'`" = "" ] ; then \ - $(ECHO) "ERROR: Did not find 'Dynamic base' in headers: $1" ; \ - $(DUMPBIN) /headers $1 ; \ - exit 8 ; \ - fi ; \ -) -endef - -# Check for banned dll usage -define binary_file_dll_verification # binary_file -( \ - $(ECHO) "Checking for banned dependencies in: $1" && \ - if [ "`$(DUMPBIN) /dependents $1 | $(EGREP) -i '$(BANNED_DLLS)'`" != "" ] ; then \ - $(ECHO) "ERROR: Found use of $(BANNED_DLLS)"; \ - $(DUMPBIN) /dependents $1 ; \ - exit 9 ; \ - fi ; \ -) -endef - -# Macro to check it's input file for properly built executables. -# Relies on process exit code. Different for 32bit vs 64bit. -ifeq ($(ARCH_DATA_MODEL),32) -define binary_file_verification # binary_file -( \ - $(call binary_file_safeseh_verification,$1); \ - $(call binary_file_nxcompat_verification,$1); \ - $(call binary_file_dynamicbase_verification,$1); \ - $(call binary_file_dll_verification,$1); \ -) -endef -else -define binary_file_verification # binary_file -( \ - $(call binary_file_nxcompat_verification,$1); \ - $(call binary_file_dynamicbase_verification,$1); \ - $(call binary_file_dll_verification,$1); \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs.gmk b/jdk/makefiles/common/shared/Defs.gmk deleted file mode 100644 index 89af038a7cb..00000000000 --- a/jdk/makefiles/common/shared/Defs.gmk +++ /dev/null @@ -1,662 +0,0 @@ -# -# Copyright (c) 2005, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Definitions for all platforms. -# -# Normally the convention is that these alternate definitions of -# primary make variables are never defined inside the Makefiles anywhere -# but are defined via environment variables or set on the make command -# line. So you should never see an ALT_* variable defined in any -# makefiles, just used. This is the convention and there are some -# exceptions, either mistakes or unusual circumstances. -# -# The naming convention for the default value of one of these variables -# that has an ALT_* override capability is to name the default value with a -# leading underscore (_). So for XXX you would have: -# _XXX default value -# ALT_XXX any override the user is providing if any -# XXX the final value, either the default _XXX or the ALT_XXX value. -# - -# On Directory names. In very rare cases should the Windows directory -# names use the backslash, please use the C:/ style of windows paths. -# Avoid duplicating the // characters in paths, this has known to cause -# strange problems with jar and other utilities, e.g. /a//b/ != /a/b/. -# Some of these variables have an explicit trailing / character, but in -# general, they should NOT have the trailing / character. - --include $(SPEC) --include $(VARS) - -# Assumes ARCH, PLATFORM, ARCH_VM_SUBDIR, JDK_TOPDIR, etc. have been defined. - -# Simple pwd path -# NOTE: Just use the shell's cd and pwd here, more reliable at sanity time. -define PwdPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef -define AbsPwdPathCheck -$(shell cd .. 2> $(DEV_NULL) && cd $1 2> $(DEV_NULL) && pwd) -endef - -# Checks an ALT value for spaces (should be one word), -# warns and returns Check_ALT_$1 if spaces -define AltCheckSpaces -$(if $(word 2,$($1)),$(warning "WARNING: Value of $1 contains a space: '$($1)', check or set ALT_$1")Check_ALT_$1,$($1)) -endef - -# Checks an ALT value for empty, warns and returns Check_ALT_$1 if empty -define AltCheckValue -$(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, check or set ALT_$1")Check_ALT_$1) -endef - -# Checks any value for empty, warns and returns $2 if empty -define CheckValue -$(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, will use '$2'")$2) -endef - -# Prefix for a utility prefix path, if empty leave alone, otherwise end with a / -define PrefixPath -$(if $1,$(subst //,/,$1/),) -endef - -# Select a directory if it exists, or the alternate 2 or the alternate 3 -define DirExists -$(shell \ - if [ -d "$1" ]; then \ - echo "$1"; \ - elif [ -d "$2" ]; then \ - echo "$2"; \ - else \ - echo "$3"; \ - fi) -endef - -# Select a directory if it exists, or the alternate 2, or the alternate 3, or the alternate 4 -define DirExists4 -$(shell \ - if [ -d "$1" ]; then \ - echo "$1"; \ - elif [ -d "$2" ]; then \ - echo "$2"; \ - elif [ -d "$3" ]; then \ - echo "$3"; \ - else \ - echo "$4"; \ - fi) -endef - - -# Select a writable directory if it exists and is writable, or the alternate -define WriteDirExists -$(shell \ - if [ -d "$1" -a -w "$1" ]; then \ - echo "$1"; \ - else \ - echo "$2"; \ - fi) -endef - -# Select a file if it exists, or the alternate 1, or the alternate 2 -define FileExists -$(shell \ - if [ -r "$1" ]; then \ - echo "$1"; \ - elif [ -r "$2" ]; then \ - echo "$2"; \ - else \ - echo "NO_FILE_EXISTS"; \ - fi) -endef - -# Given a line of text, get the version number from it -define GetVersion -$(shell echo $1 | sed -e 's@[^0-9]*\([0-9][0-9]*\.[0-9][.0-9]*\).*@\1@' ) -endef - -# Return one part of the version numbers, watch out for non digits. -define VersionWord # Number Version -$(word $1,$(subst ., ,$(subst -, ,$2))) -endef - -# Given a major.minor.micro version, return the major, minor, or micro number -define MajorVersion -$(if $(call VersionWord,1,$1),$(call VersionWord,1,$1),0) -endef -define MinorVersion -$(if $(call VersionWord,2,$1),$(call VersionWord,2,$1),0) -endef -define MicroVersion -$(if $(call VersionWord,3,$1),$(call VersionWord,3,$1),0) -endef - -# Macro that returns missing, same, newer, or older $1=version $2=required -define CheckVersions -$(shell \ - if [ "$1" = "" -o "$2" = "" ]; then \ - echo missing; \ - elif [ "$1" = "$2" ]; then \ - echo same; \ - elif [ $(call MajorVersion,$1) -lt $(call MajorVersion,$2) ] ; then \ - echo older; \ - elif [ $(call MajorVersion,$1) -gt $(call MajorVersion,$2) ] ; then \ - echo newer; \ - elif [ $(call MinorVersion,$1) -lt $(call MinorVersion,$2) ]; then \ - echo older; \ - elif [ $(call MinorVersion,$1) -gt $(call MinorVersion,$2) ]; then \ - echo newer; \ - elif [ $(call MicroVersion,$1) -lt $(call MicroVersion,$2) ]; then \ - echo older; \ - elif [ $(call MicroVersion,$1) -gt $(call MicroVersion,$2) ]; then \ - echo newer; \ - else \ - echo same; \ - fi) -endef - -# Expand SRCDIR_LIST, which is used to automatically include various -# platform and shared sources/headers. This is mainly useful for the -# Mac OS X build, which pulls its platform sources from the solaris and/or -# macosx trees, depending on the component. -ifeq ($(PLATFORM), macosx) - define JavaSrcDirList - $(JAVA_SRCDIR_LIST:%=$1$(JDK_TOPDIR)/%/$2) - endef - define NativeSrcDirList - $(NATIVE_SRCDIR_LIST:%=$1$(JDK_TOPDIR)/%/$2) - endef -endif - -# Make sure certain variables are non-empty at this point -_check_values:=\ -$(call CheckValue,ARCH,),\ -$(call CheckValue,ARCH_DATA_MODEL,),\ -$(call CheckValue,ARCH_VM_SUBDIR,),\ -$(call CheckValue,JDK_TOPDIR,),\ -$(call CheckValue,JDK_MAKE_SHARED_DIR,),\ -$(call CheckValue,VARIANT,),\ -$(call CheckValue,PLATFORM,) - -# Misc common settings for all workspaces -# This determines the version of the product, and the previous version or boot -ifndef JDK_MAJOR_VERSION - JDK_MAJOR_VERSION = 1 - PREVIOUS_MAJOR_VERSION = 1 -endif - -ifndef JDK_MINOR_VERSION - JDK_MINOR_VERSION = 8 - PREVIOUS_MINOR_VERSION = 7 -endif - -ifndef JDK_MICRO_VERSION - JDK_MICRO_VERSION = 0 - PREVIOUS_MICRO_VERSION = 0 -endif - -ifndef MILESTONE - MILESTONE = internal -endif - -# Default names -ifdef OPENJDK - LAUNCHER_NAME = openjdk - PRODUCT_NAME = OpenJDK - PRODUCT_SUFFIX = Runtime Environment - JDK_RC_PLATFORM_NAME = Platform - COMPANY_NAME = N/A -else - LAUNCHER_NAME = java - PRODUCT_NAME = Java(TM) - PRODUCT_SUFFIX = SE Runtime Environment - JDK_RC_PLATFORM_NAME = Platform SE - COMPANY_NAME = Oracle Corporation -endif - -RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX) - -ifndef BUILD_NUMBER - JDK_BUILD_NUMBER = b00 -else - ifndef JDK_BUILD_NUMBER - JDK_BUILD_NUMBER = $(BUILD_NUMBER) - endif -endif - -# Default variant is the optimized version of everything -# can be OPT or DBG, default is OPT -# Determine the extra pattern to add to the release name for debug/fastdebug. -# Determine the JDK_IMPORT_VARIANT, so we get the right VM files copied over. -# Determine suffix for obj directory or OBJDIR, for .o files. -# (by keeping .o files separate, just .o files, they don't clobber each -# other, however, the library files will clobber each other). -# -ifeq ($(VARIANT), DBG) - BUILD_VARIANT_RELEASE=-debug - OBJDIRNAME_SUFFIX=_g -else - BUILD_VARIANT_RELEASE= - OBJDIRNAME_SUFFIX= -endif -ifeq ($(FASTDEBUG), true) - VARIANT=DBG - BUILD_VARIANT_RELEASE=-fastdebug - OBJDIRNAME_SUFFIX=_gO - _JDK_IMPORT_VARIANT=/fastdebug -endif - -# Depending on the flavor of the build, add a -debug or -fastdebug to the name -ifdef DEBUG_NAME - BUILD_VARIANT_RELEASE=-$(DEBUG_NAME) -endif - -# These default values are redefined during a release build. -# CTE can set JDK_UPDATE_VERSION during the update release -ifdef JDK_UPDATE_VERSION - JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)_$(JDK_UPDATE_VERSION) - MARKETING_NUMBER := $(shell \ - $(ECHO) $(JDK_UPDATE_VERSION) | $(NAWK) '{if (substr($$0,1,1)=="0") print substr($$0, 2); else print $$0;}') - MARKET_NAME= $(shell $(ECHO) " Update $(MARKETING_NUMBER)") - JDK_MKTG_VERSION = $(JDK_MINOR_VERSION)u$(MARKETING_NUMBER) -else - JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) - JDK_MKTG_VERSION = $(JDK_MINOR_VERSION) - MARKET_NAME= -endif -JDK_UNDERSCORE_VERSION = $(subst .,_,$(JDK_VERSION)) -JDK_MKTG_UNDERSCORE_VERSION = $(subst .,_,$(JDK_MKTG_VERSION)) - -# RELEASE is JDK_VERSION and -MILESTONE if MILESTONE is set -ifneq ($(MILESTONE),fcs) - RELEASE = $(JDK_VERSION)-$(MILESTONE)$(BUILD_VARIANT_RELEASE) -else - RELEASE = $(JDK_VERSION)$(BUILD_VARIANT_RELEASE) -endif - -# FULL_VERSION is RELEASE and -BUILD_NUMBER if BUILD_NUMBER is set -ifdef BUILD_NUMBER - FULL_VERSION = $(RELEASE)-$(BUILD_NUMBER) -else - BUILD_NUMBER = b00 - ifndef USER_RELEASE_SUFFIX - BUILD_DATE := $(shell $(DATE) '+%Y_%m_%d_%H_%M') - # Avoid [:alnum:] since it depends on the locale. - CLEAN_USERNAME := $(shell $(ECHO) "$(USER)" | $(TR) -d -c 'abcdefghijklmnopqrstuvqxyz0123456789') - USER_RELEASE_SUFFIX := $(shell $(ECHO) "$(CLEAN_USERNAME)_$(BUILD_DATE)" | $(TR) 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz') - endif - export USER_RELEASE_SUFFIX - FULL_VERSION = $(RELEASE)-$(USER_RELEASE_SUFFIX)-$(BUILD_NUMBER) -endif - -# Promoted build location -PROMOTED_RE_AREA = $(SLASH_JAVA)/re/jdk/$(JDK_VERSION)/promoted -PROMOTED_BUILD_LATEST = latest -PROMOTED_BUILD_BASEDIR = $(PROMOTED_RE_AREA)/$(PROMOTED_BUILD_LATEST) -PROMOTED_BUILD_DISTDIR = $(PROMOTED_BUILD_BASEDIR)/dist/$(PLATFORM)-$(ARCH) -PROMOTED_BUILD_BINARIES = $(PROMOTED_BUILD_BASEDIR)/binaries - -# PARALLEL_COMPILE_JOBS: is the number of compiles done in parallel. -# If the user sets ALT_PARALLEL_COMPILE_JOBS, then COMPILE_APPROACH is set -# to parallel. -# -# Recommended setting: 2 seems to be ideal for single cpu machines, -# 2 times the number of CPU's is a basic formula, -# but probably not more than 4 if the machine is -# being shared by others, or the machine is limited -# in RAM or swap. -# -ifdef ALT_PARALLEL_COMPILE_JOBS - PARALLEL_COMPILE_JOBS=$(ALT_PARALLEL_COMPILE_JOBS) -else - PARALLEL_COMPILE_JOBS=2 -endif - -# Previous JDK release (version of BOOTDIR version) -ifdef ALT_PREVIOUS_JDK_VERSION - PREVIOUS_JDK_VERSION = $(ALT_PREVIOUS_JDK_VERSION) -else - PREVIOUS_JDK_VERSION = $(PREVIOUS_MAJOR_VERSION).$(PREVIOUS_MINOR_VERSION).$(PREVIOUS_MICRO_VERSION) -endif -export PREVIOUS_JDK_VERSION -PREVIOUS_JDK_VERSION:=$(call AltCheckSpaces,PREVIOUS_JDK_VERSION) - -# Version with _ instead of . in number -ifeq ($(PREVIOUS_MINOR_VERSION),5) - PREVIOUS_JDK_UNDERSCORE_VERSION = $(subst .,_,$(PREVIOUS_JDK_VERSION)) -else - PREVIOUS_JDK_UNDERSCORE_VERSION = $(PREVIOUS_MINOR_VERSION) -endif - -# Include any private definitions for this set of workspaces -_PRIVATE_DEFS_FILE=$(JDK_MAKE_SHARED_DIR)/PrivateDefs.gmk -ifeq ($(USING_PRIVATE_DEFS),) - USING_PRIVATE_DEFS:=$(shell if [ -f $(_PRIVATE_DEFS_FILE) ]; then echo true; else echo false; fi) -endif -ifeq ($(USING_PRIVATE_DEFS),true) -dummy:=$(warning "WARNING: Using definitions from $(_PRIVATE_DEFS_FILE)") -include $(_PRIVATE_DEFS_FILE) -endif - -# OUTPUTDIR: Location of all output for the build -ifdef ALT_OUTPUTDIR - OUTPUTDIR:=$(subst \,/,$(ALT_OUTPUTDIR)) - # Assumes this is absolute (checks later) - ABS_OUTPUTDIR:=$(OUTPUTDIR) -else - ifndef _OUTPUTDIR - # Default: Get "build" parent directory, which should always exist - ifndef BUILD_PARENT_DIRECTORY - BUILD_PARENT_DIRECTORY=$(BUILDDIR)/.. - endif - ifdef OPENJDK - _OUTPUTDIRNAME=$(PLATFORM)-$(ARCH)$(OPENJDK_SUFFIX) - else - _OUTPUTDIRNAME=$(PLATFORM)-$(ARCH) - endif - _OUTPUTDIR=$(BUILD_PARENT_DIRECTORY)/build/$(_OUTPUTDIRNAME) - endif - OUTPUTDIR:=$(_OUTPUTDIR) -endif -# Check for spaces and null value -OUTPUTDIR:=$(call AltCheckSpaces,OUTPUTDIR) - -# Get platform specific settings -# NB: OUTPUTDIR must be defined. Otherwise hotspot import detection will not work correctly -# On other hand this must be included early as it provides platform specific defines such as FullPath -include $(JDK_MAKE_SHARED_DIR)/Defs-versions.gmk - -# Get platform specific settings (defines COMPILER_PATH) -include $(JDK_MAKE_SHARED_DIR)/Defs-$(PLATFORM).gmk - -# Components -ifdef ALT_LANGTOOLS_DIST - LANGTOOLS_DIST :=$(call FullPath,$(ALT_LANGTOOLS_DIST)) -else - LANGTOOLS_DIST = -endif -ifdef ALT_CORBA_DIST - CORBA_DIST :=$(call FullPath,$(ALT_CORBA_DIST)) -else - CORBA_DIST = -endif -ifdef ALT_JAXP_DIST - JAXP_DIST :=$(call FullPath,$(ALT_JAXP_DIST)) -else - JAXP_DIST = -endif -ifdef ALT_JAXWS_DIST - JAXWS_DIST :=$(call FullPath,$(ALT_JAXWS_DIST)) -else - JAXWS_DIST = -endif - -# HOTSPOT_DOCS_IMPORT_PATH: Path to hotspot docs files to import into the docs generation -ifdef ALT_HOTSPOT_DOCS_IMPORT_PATH - HOTSPOT_DOCS_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_DOCS_IMPORT_PATH)) -else - HOTSPOT_DOCS_IMPORT_PATH :=$(call DirExists,$(HOTSPOT_IMPORT_PATH)/docs,$(PROMOTED_BUILD_BASEDIR)/docs,/NO_DOCS_DIR) -endif - -# These are the same on all platforms but require the above platform include 1st - -# BOOTDIR: Bootstrap JDK, previous released JDK. -# _BOOTDIR1 and _BOOTDIR2 picked by platform -# Platform may optionally define _BOOTDIR3 as well. -ifdef ALT_BOOTDIR - BOOTDIR =$(ALT_BOOTDIR) -else - ifdef _BOOTDIR3 - BOOTDIR :=$(call DirExists4,$(_BOOTDIR1),$(_BOOTDIR2),$(_BOOTDIR3),/NO_BOOTDIR) - else - BOOTDIR :=$(call DirExists,$(_BOOTDIR1),$(_BOOTDIR2),/NO_BOOTDIR) - endif -endif -export BOOTDIR -BOOTDIR:=$(call AltCheckSpaces,BOOTDIR) - -# PREVIOUS_FCS_RE_AREA: re path to where previous release binaries/bundles are -PREVIOUS_FCS_RE_AREA = $(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs - -# PREVIOUS_RELEASE_IMAGE: Previous install image to compare against -ifdef ALT_PREVIOUS_RELEASE_IMAGE - - # Explicit image provided, no bundle access needed - PREVIOUS_RELEASE_IMAGE :=$(call FullPath,$(ALT_PREVIOUS_RELEASE_IMAGE)) - -else - - # PREVIOUS_RELEASE_PATH: path to where previous release bundles are - ifdef ALT_PREVIOUS_RELEASE_PATH - PREVIOUS_RELEASE_PATH :=$(call OptFullPath,$(ALT_PREVIOUS_RELEASE_PATH)) - else - PREVIOUS_RELEASE_PATH := \ - $(call DirExists,$(PREVIOUS_FCS_RE_AREA)/bundles/$(PLATFORM)-$(ARCH),,) - endif - - # Depending on if we have access to these bundles - ifeq ($(PREVIOUS_RELEASE_PATH),) - # Use images in re area or BOOTDIR (which is normally the previous release) - PREVIOUS_RELEASE_IMAGE := \ - $(call DirExists,$(PREVIOUS_FCS_RE_AREA)/binaries/$(PLATFORM)-$(ARCH),$(BOOTDIR),) - else - # Get names of and paths to bundles - PREVIOUS_RELEASE_PATH:=$(call AltCheckSpaces,PREVIOUS_RELEASE_PATH) - export PREVIOUS_RELEASE_PATH - - # PREVIOUS_JDK_FILE: filename of install bundle for previous JDK - ifdef ALT_PREVIOUS_JDK_FILE - PREVIOUS_JDK_FILE =$(ALT_PREVIOUS_JDK_FILE) - else - PREVIOUS_JDK_FILE = \ - jdk-$(PREVIOUS_JDK_UNDERSCORE_VERSION)-$(PLATFORM)-$(ARCH)$(BUNDLE_FILE_SUFFIX) - endif - export PREVIOUS_JDK_FILE - PREVIOUS_JDK_FILE:=$(call AltCheckSpaces,PREVIOUS_JDK_FILE) - - # PREVIOUS_JRE_FILE: filename of install bundle for previous JRE - ifdef ALT_PREVIOUS_JRE_FILE - PREVIOUS_JRE_FILE =$(ALT_PREVIOUS_JRE_FILE) - else - PREVIOUS_JRE_FILE = \ - jre-$(PREVIOUS_JDK_UNDERSCORE_VERSION)-$(PLATFORM)-$(ARCH)$(BUNDLE_FILE_SUFFIX) - endif - export PREVIOUS_JRE_FILE - PREVIOUS_JRE_FILE:=$(call AltCheckSpaces,PREVIOUS_JRE_FILE) - - # Paths to these bundles - PREVIOUS_JRE_BUNDLE = $(PREVIOUS_RELEASE_PATH)/$(PREVIOUS_JRE_FILE) - PREVIOUS_JDK_BUNDLE = $(PREVIOUS_RELEASE_PATH)/$(PREVIOUS_JDK_FILE) - endif - -endif - -# Indicate we are using an image comparison -ifneq ($(PREVIOUS_RELEASE_IMAGE),) - PREVIOUS_RELEASE_PATH = USING-PREVIOUS_RELEASE_IMAGE - PREVIOUS_JRE_BUNDLE = USING-PREVIOUS_RELEASE_IMAGE - PREVIOUS_JDK_BUNDLE = USING-PREVIOUS_RELEASE_IMAGE -endif - -# CACERTS_FILE: if OPENJDK is false and the internal version of the file -# (that is, non-empty) is available, use it, otherwise use an -# empty keystore. -# -# We put this variable here for sanity checks and in case another -# components will need to know which cacerts file is being used. -# -ifdef ALT_CACERTS_FILE - CACERTS_FILE = $(ALT_CACERTS_FILE) -else - CACERTS_EXT = $(SHARE_SRC)/lib/security/cacerts - ifdef OPENJDK - CACERTS_FILE :=$(CACERTS_EXT) - else # (!OPENJDK) - CACERTS_INT = $(CLOSED_SHARE_SRC)/lib/security/cacerts.internal - CACERTS_FILE :=$(call FileExists,$(CACERTS_INT),$(CACERTS_EXT)) - endif # (OPENJDK) -endif -CACERTS_FILE:=$(call AltCheckSpaces,CACERTS_FILE) - -# -# When signing the JCE framework and provider, we could be using built -# bits on a read-only filesystem. If so, this test will fail and crash -# the build. -# -ifndef IGNORE_WRITABLE_OUTPUTDIR_TEST -# Create the output directory and make sure it exists and is writable -_create_outputdir:=$(shell $(MKDIR) -p "$(OUTPUTDIR)" > $(DEV_NULL) 2>&1) -ifeq ($(call WriteDirExists,$(OUTPUTDIR),/dev/null),/dev/null) - _outputdir_error:=$(error "ERROR: OUTPUTDIR '$(OUTPUTDIR)' not created or not writable") -endif -endif - -# Define absolute path if needed and check for spaces and null value -ifndef ABS_OUTPUTDIR - ifdef _OUTPUTDIRNAME - #Could not define this at the same time as _OUTPUTDIRNAME as FullPath is not defined at that point - ABS_BUILD_PARENT_DIRECTORY:=$(call FullPath,$(BUILD_PARENT_DIRECTORY)) - ABS_OUTPUTDIR:=$(ABS_BUILD_PARENT_DIRECTORY)/build/$(_OUTPUTDIRNAME) - else - ABS_OUTPUTDIR:=$(call FullPath,$(OUTPUTDIR)) - endif -endif -ABS_OUTPUTDIR:=$(call AltCheckSpaces,ABS_OUTPUTDIR) -# Make doubly sure this is a full path -ifeq ($(call AbsPwdPathCheck,$(ABS_OUTPUTDIR)), ) - ifdef ALT_OUTPUTDIR - _outputdir_error:=$(error "ERROR: Trouble with the absolute path for OUTPUTDIR '$(OUTPUTDIR)', was ALT_OUTPUTDIR '$(ALT_OUTPUTDIR)' an absolute path?") - else - _outputdir_error:=$(error "ERROR: Trouble with the absolute path for OUTPUTDIR '$(OUTPUTDIR)'") - endif -endif -_dir1:=$(call FullPath,$(ABS_OUTPUTDIR)) -_dir2:=$(call FullPath,$(OUTPUTDIR)) -ifneq ($(_dir1),$(_dir2)) - _outputdir_error:=$(error "ERROR: ABS_OUTPUTDIR '$(ABS_OUTPUTDIR)' is not the same directory as OUTPUTDIR '$(OUTPUTDIR)', '$(_dir1)'!='$(_dir2)'") -endif - -# Bin directory -# NOTE: ISA_DIR is usually empty, on Solaris it might be /sparcv9 or /amd64 -BINDIR = $(OUTPUTDIR)/bin$(ISA_DIR) - -# MOZILLA_HEADERS_PATH: path to mozilla header files for plugin -ifdef ALT_MOZILLA_HEADERS_PATH - MOZILLA_HEADERS_PATH :=$(call FullPath,$(ALT_MOZILLA_HEADERS_PATH)) -else - MOZILLA_HEADERS_PATH =$(JDK_DEVTOOLS_DIR)/share/plugin -endif -MOZILLA_HEADERS_PATH:=$(call AltCheckSpaces,MOZILLA_HEADERS_PATH) - -# CUPS_HEADERS_PATH: path to Cups headers files for Unix printing -#ifneq ($(PLATFORM), windows) -#JDK_CUPS_HEADERS_PATH=$(JDK_DEVTOOLS_DIR)/share/cups/include -# ifdef ALT_CUPS_HEADERS_PATH -# CUPS_HEADERS_PATH:=$(call FullPath,$(ALT_CUPS_HEADERS_PATH)) -# CUPS_HEADERS_PATH:=$(call AltCheckValue,CUPS_HEADERS_PATH) -# else -# CUPS_HEADERS_PATH:= \ -# $(shell if [ -d "$(JDK_CUPS_HEADERS_PATH)" ]; then \ -# echo "$(JDK_CUPS_HEADERS_PATH)"; \ -# else \ -# echo "$(_CUPS_HEADERS_PATH)";\ -# fi) -# endif -#endif - -# Utilities ant -ifeq ($(PLATFORM), windows) - ifeq ($(ANT_HOME),) - ANT_HOME := $(call DirExists,$(JDK_DEVTOOLS_DIR)/share/ant/latest,,) - endif -endif - -# There are few problems with ant we need to workaround: -# 1) ant is using temporary directory java.io.tmpdir -# However, this directory is not unique enough and two separate ant processes -# can easily end up using the exact same temp directory. This may lead to weird build failures -# To workaround this we will define tmp dir explicitly -# 2) ant attempts to detect JDK location based on java.exe location -# This is fragile as developer may have JRE first on the PATH. -# To workaround this we will specify JAVA_HOME explicitly - -ANT_TMPDIR = $(ABS_OUTPUTDIR)/tmp -ANT_WORKAROUNDS = ANT_OPTS=-Djava.io.tmpdir='$(ANT_TMPDIR)' JAVA_HOME='$(BOOTDIR)' - -ifeq ($(ANT_HOME),) - ANT = $(ANT_WORKAROUNDS) ant -else - ANT = $(ANT_WORKAROUNDS) $(ANT_HOME)/bin/ant -endif - -ifdef ALT_COPYRIGHT_YEAR - COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) -else - COPYRIGHT_YEAR = $(shell $(DATE) '+%Y') -endif - -# Create file with source information -SOURCE_TIPS=$(ABS_OUTPUTDIR)/source_tips - -# 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 -# directory as the original $(HGDIR) directory. -# These should not be := assignments, only used from the root Makefile. -HG_VERSION = $(shell $(HG) version 2> $(DEV_NULL)) -HG_DIRECTORY=.hg -HGTIP_FILENAME=.hgtip -HG_SEARCH = ./REPO ./*/REPO ./*/*/REPO ./*/*/*/REPO -REPO_LIST = $(patsubst ./%,%,$(patsubst %/,%,$(sort $(dir \ - $(shell ( $(LS) -d $(HG_SEARCH:%/REPO=%/$(HG_DIRECTORY)) ; \ - $(LS) $(HG_SEARCH:%/REPO=%/$(HGTIP_FILENAME)) ) \ - 2> $(DEV_NULL)))))) - -# Emit the repo:tip pairs to $@ -define GetSourceTips -for i in $(REPO_LIST) IGNORE ; do \ - if [ "$${i}" = "IGNORE" ] ; then \ - continue; \ - elif [ -d $${i}/$(HG_DIRECTORY) -a "$(HG_VERSION)" != "" ] ; then \ - $(PRINTF) " %s:%s" \ - "$${i}" `$(HG) tip --repository $${i} --template '{node|short}\n'` ; \ - elif [ -f $${i}/$(HGTIP_FILENAME) ] ; then \ - $(PRINTF) " %s:%s" \ - "$${i}" `$(CAT) $${i}/$(HGTIP_FILENAME)` ; \ - fi; \ -done >> $@ -$(PRINTF) "\n" >> $@ -endef - -# Create the HGTIP_FILENAME file -define CreateHgTip -$(HG) tip --repository $1 --template '{node|short}\n' > $1/$(HGTIP_FILENAME);\ -$(ECHO) $1/$(HGTIP_FILENAME) -endef - -# Get the compiler specific settings (will run the compiler to find out) -# NOTE: COMPILER_PATH must be set by this time. -# Up until we include this file, we don't know what specific compiler -# version is actually being used (i.e. what is in PATH or COMPILER_PATH). -include $(JDK_MAKE_SHARED_DIR)/Compiler-$(CC_VERSION).gmk diff --git a/jdk/makefiles/common/shared/Platform.gmk b/jdk/makefiles/common/shared/Platform.gmk deleted file mode 100644 index 56ee0195d14..00000000000 --- a/jdk/makefiles/common/shared/Platform.gmk +++ /dev/null @@ -1,526 +0,0 @@ -# -# Copyright (c) 1997, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Shared platform (OS/ARCH) variable settings for the JDK builds. -# -# Includes basic system requirements, versions of utilities required, -# suffixes on files, and basic defaults attributed to the build platform. -# - -# -# Assumes some basic unix system utilities (e.g. uname) are in the search path -# in order to figure out the system. -# - -ifndef PLATFORM_SHARED - -PLATFORM_SHARED=done - -# Possible Input variables: -# ARCH_DATA_MODEL 32 or 64, default to 32 -# USER, LOGNAME user name (runs logname, or id if not set) -# PROCESSOR_IDENTIFIER windows only: needed in environment -# -# (Also gets input by running the utilities uname, logname, isainfo, or id.) -# -# Variables set by this file: -# SYSTEM_UNAME what 'uname' says this system is -# USER login name of user (minus blanks) -# PLATFORM windows, solaris, or linux -# VARIANT OPT or DBG, OPT is the default -# TEMP_DISK /tmp or C:/temp -# ARCH_DATA_MODEL 32 or 64 -# ARCH sparc, sparcv9, i586, amd64, or ia64 -# ARCH_FAMILY sparc or i586 -# ARCHPROP sparc or x86 -# ARCH_VM_SUBDIR jre/bin, jre/lib/sparc, etc. -# LIBARCH sparc, sparcv9, i386, amd64, or ia64 -# DEV_NULL destination of /dev/null, NUL or /dev/NULL -# CLASSPATH_SEPARATOR separator in classpath, ; or : -# LIB_PREFIX dynamic or static library prefix, lib or empty -# LIB_SUFFIX static library file suffix, .lib or .a? -# LIBRARY_SUFFIX dynamic library file suffix, .dll or .so -# OBJECT_SUFFIX object file suffix, .o or .obj -# EXE_SUFFIX executable file suffix, .exe or empty -# BUNDLE_FILE_SUFFIX suffix for bundles: .tar or .tar.gz -# ISA_DIR solaris only: /sparcv9 or /amd64 -# LIBARCH32 solaris only: sparc or i386 -# LIBARCH64 solaris only: sparcv9 or amd64 -# USING_CYGWIN windows only: true or false -# ISHIELD_TEMP_MIN windows only: minimum disk space in temp area - -# Only run uname once in this make session. -ifndef SYSTEM_UNAME - SYSTEM_UNAME := $(shell uname) - export SYSTEM_UNAME -endif - -# -# Prune out all known SCM (Source Code Management) directories -# so they will not be included when copying directory trees -# or packaging up .jar files, etc. This applies to all workspaces. -# -SCM_DIRs = .hg .svn CVS RCS SCCS Codemgr_wsdata deleted_files .hgignore .hgtags -# When changing SCM_DIRs also change SCM_DIRS_rexp and SCM_DIRS_prune: -SCM_DIRS_rexp = ".hg|.svn|CVS|RCS|SCCS|Codemgr_wsdata|deleted_files|.hgignore|.hgtags" -SCM_DIRS_prune = \( -name .hg -o -name .svn -o -name CVS -o -name RCS -o -name SCCS -o -name Codemgr_wsdata -o -name deleted_files -o -name .hgignore -o -name .hgtags \) -prune - -# Don't define this unless it's not defined -ifndef VARIANT - VARIANT=OPT -endif - -# Platform settings specific to Solaris -ifeq ($(SYSTEM_UNAME), SunOS) - PLATFORM = solaris - # Solaris sparc build can be either 32-bit or 64-bit. - # Default to 32, but allow explicit setting to 32 or 64. - ifndef ARCH_DATA_MODEL - ARCH_DATA_MODEL=32 - endif - ifeq ($(ARCH_DATA_MODEL), 32) - processor := $(shell uname -p) - archExpr = case "$(processor)" in \ - i[3-9]86) \ - echo i586 \ - ;; \ - sparc*) \ - echo sparc \ - ;; \ - *) \ - echo $(processor) \ - ;; \ - esac - ARCH := $(shell $(archExpr)) - else - ARCH := $(shell isainfo -n) - # ISA_DIR is used to locate 64-bit specific libraries which are generally - # in the same general place as other libraries under the ./$(ARCH) directory - ISA_DIR = /$(ARCH) - endif - # Need to maintain the jre/lib/i386 location for 32-bit Intel - ifeq ($(ARCH), i586) - ARCH_FAMILY = $(ARCH) - LIBARCH = i386 - # Value of Java os.arch property - ARCHPROP = x86 - else - ifeq ($(ARCH), amd64) - ARCH_FAMILY = i586 - else - ARCH_FAMILY = sparc - endif - LIBARCH = $(ARCH) - # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - endif - # The two LIBARCH names - ifeq ($(ARCH_FAMILY), sparc) - LIBARCH32 = sparc - LIBARCH64 = sparcv9 - else - LIBARCH32 = i386 - LIBARCH64 = amd64 - endif - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar - # How much RAM does this machine have (zones send an error to stderr): - MB_OF_MEMORY:=$(shell /usr/sbin/prtconf 2>/dev/null | fgrep 'Memory size:' | expand | cut -d' ' -f3) -endif - -# Platform settings specific to Linux -ifeq ($(SYSTEM_UNAME), Linux) - PLATFORM = linux - # Arch and OS name/version - ifdef CROSS_COMPILE_ARCH - mach := $(CROSS_COMPILE_ARCH) - else - mach := $(shell uname -m) - endif - archExpr = case "$(mach)" in \ - i[3-9]86) \ - echo i586 \ - ;; \ - ia64) \ - echo ia64 \ - ;; \ - x86_64) \ - echo amd64 \ - ;; \ - sparc*) \ - echo sparc \ - ;; \ - arm*) \ - echo arm \ - ;; \ - *) \ - echo $(mach) \ - ;; \ - esac - ARCH := $(shell $(archExpr) ) - ARCH_FAMILY := $(ARCH) - - # Linux builds may be 32-bit or 64-bit data model. - ifeq ($(ARCH), sparc) - # Linux sparc build can be either 32-bit or 64-bit. - # Default to 32, but allow explicit setting to 32 or 64. - ifndef ARCH_DATA_MODEL - ARCH_DATA_MODEL=32 - endif - ifeq ($(ARCH_DATA_MODEL), 32) - ARCH=sparc - else - ARCH=sparcv9 - endif - else - # Most archs are 32-bit - ifndef ARCH_DATA_MODEL - ARCH_DATA_MODEL=32 - ifeq ($(ARCH), amd64) - ARCH_DATA_MODEL=64 - endif - ifeq ($(ARCH), ia64) - ARCH_DATA_MODEL=64 - endif - endif - endif - - # Need to maintain the jre/lib/i386 location for 32-bit Intel - ifeq ($(ARCH), i586) - LIBARCH = i386 - else - LIBARCH = $(ARCH) - endif - - # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar.gz - # How much RAM does this machine have: - MB_OF_MEMORY := $(shell free -m | fgrep Mem: | awk '{print $$2;}' ) -endif - -ifeq ($(SYSTEM_UNAME), Darwin) - PLATFORM = macosx - OS_NAME = darwin - OS_VENDOR = Apple - GB_OF_MEMORY := $(shell system_profiler SPHardwareDataType | fgrep Memory: | awk '{print $$2}') - MB_OF_MEMORY := $(shell expr ${GB_OF_MEMORY} '*' 1024) -endif - -# Platform settings specific to BSD/Mac OS X -ifeq ($(PLATFORM), macosx) - OS_VERSION := $(shell uname -r) - - # Arch and OS name/version - # Darwin x86 builds are i386/amd64 universal by default. - # Allow arch to be set from the environment to avoid this. - ifeq ($(origin ARCH), undefined) - ifeq ($(PLATFORM), macosx) -# ifdef OPENJDK -- when universal 32/64 binaries available in Hotspot -# mach := universal -# else - mach := x86_64 -# endif - else - mach := $(shell uname -m) - endif - else - mach := $(ARCH) - endif - - archExpr = case "$(mach)" in \ - i[3-9]86) \ - echo i586 \ - ;; \ - sparc64) \ - echo sparcv9 \ - ;; \ - sparc*) \ - echo sparc \ - ;; \ - x86_64) \ - echo amd64 \ - ;; \ - universal) \ - echo universal \ - ;; \ - "Power Macintosh") \ - echo ppc \ - ;; \ - *) \ - echo $(mach) \ - ;; \ - esac - ARCH := $(shell $(archExpr) ) - ARCH_FAMILY := $(ARCH) - - # i586, sparc, and ppc are 32 bit, amd64 and sparc64 are 64 - # ARCH_DATA_MODEL does not exactly mean anything in universal - # but it has to be one or the other, so pick 32 - ifneq (,$(findstring $(ARCH), i586 sparc ppc universal)) - ARCH_DATA_MODEL=32 - else - ARCH_DATA_MODEL=64 - endif - - # Need to maintain the jre/lib/i386 location for 32-bit Intel - ifeq ($(ARCH), i586) - LIBARCH = i386 - else - LIBARCH = $(ARCH) - endif - - # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar.gz - # How much RAM does this machine have: -endif - -# Windows with and without CYGWIN will be slightly different -ifeq ($(SYSTEM_UNAME), Windows_NT) - PLATFORM = windows -endif -ifneq (,$(findstring CYGWIN,$(SYSTEM_UNAME))) - PLATFORM = windows - USING_CYGWIN = true - export USING_CYGWIN - CYGPATH_CMD=cygpath -a -s -m - # Only run "cygpath /" once in this make session. - ifndef CYGWIN_HOME - CYGWIN_HOME := $(shell $(CYGPATH_CMD) /) - export CYGWIN_HOME - endif -endif - -# Platform settings specific to Windows -ifeq ($(PLATFORM), windows) - # Windows builds default to the appropriate for the underlaying - # architecture. - # Temporary disk area - TEMP_DISK=C:/temp - # GNU Make or MKS overrides $(PROCESSOR_ARCHITECTURE) to always - # return "x86". Use the first word of $(PROCESSOR_IDENTIFIER) instead. - # And sometimes PROCESSOR_IDENTIFIER is not defined at all - # (in some restricted shells), so we use uname if we have to. - ifeq ($(PROCESSOR_IDENTIFIER),) - # Only run uname -m once in this make session. - ifndef SYSTEM_UNAME_M - SYSTEM_UNAME_M := $(shell uname -m) - export SYSTEM_UNAME_M - endif - PROC_ARCH:=$(SYSTEM_UNAME_M) - else - PROC_ARCH:=$(word 1, $(PROCESSOR_IDENTIFIER)) - endif - # Cover all the possibilities, MKS uname, CYGWIN uname, PROCESSOR_IDENTIFIER - # Get: X86, X64, or IA64 - PROC_ARCH:=$(patsubst 386,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 486,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 586,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 686,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i386,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i486,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i586,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i686,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst x86,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst intel64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst Intel64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst INTEL64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst em64t,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst EM64T,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst amd64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst AMD64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 8664,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst x86_64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst ia64,IA64,$(PROC_ARCH)) - ifndef ARCH_DATA_MODEL - ifeq ($(PROC_ARCH),IA64) - ARCH_DATA_MODEL=64 - else - ifeq ($(PROC_ARCH),X64) - ARCH_DATA_MODEL=64 - else - ARCH_DATA_MODEL=32 - endif - endif - endif - export ARCH_DATA_MODEL - ifeq ($(ARCH_DATA_MODEL), 64) - # If the user wants to perform a cross compile build then they must - # - set ARCH_DATA_MODEL=64 and either - # + set ARCH to ia64 or amd64, or - ifeq ($(PROC_ARCH),X64) - ARCH=amd64 - else - ifeq ($(PROC_ARCH),IA64) - ARCH=ia64 - endif - endif - LIBARCH=$(ARCH) - # Value of Java os.arch property - ARCHPROP=$(LIBARCH) - else - # LIBARCH is used to preserve the jre/lib/i386 directory name for 32-bit intel - ARCH=i586 - LIBARCH=i386 - # Value of Java os.arch property - ARCHPROP=x86 - endif - ARCH_FAMILY = $(ARCH) - # Where is unwanted output to be delivered? - # MKS uses the special file "NUL", cygwin uses the customary unix file. - ifeq ($(USING_CYGWIN),true) - DEV_NULL = /dev/null - else - DEV_NULL = NUL - endif - export DEV_NULL - # Classpath separator - CLASSPATH_SEPARATOR = ; - # The suffix used for object file (.o for unix .obj for windows) - OBJECT_SUFFIX = obj - # The suffix applied to executables (.exe for windows, nothing for solaris) - EXE_SUFFIX = .exe - # The prefix applied to library files (lib for solaris, nothing for windows) - LIB_PREFIX= - LIBRARY_SUFFIX = dll - LIB_SUFFIX = lib - # User name determination (set _USER) - ifndef USER - ifdef USERNAME - _USER := $(USERNAME) - else - ifdef LOGNAME - _USER := $(LOGNAME) - else - _USER := $(shell id -un) - endif - endif - else - _USER:=$(USER) - endif - # Location of client/server directories - ARCH_VM_SUBDIR=jre/bin - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar - # ISHIELD_TEMP_MIN is the difference of an empty C:\TEMP vs. one after a - # bundles build on windows. - ISHIELD_TEMP_MIN=250000 - # How much RAM does this machine have: - ifeq ($(JDK_HAS_MEM_INFO),) - MB_OF_MEMORY := 1024 - endif -endif - -# Unix type settings (same for all unix platforms) -ifneq ($(PLATFORM), windows) - # Temporary disk area - TEMP_DISK=/tmp - # Where is unwanted output to be delivered? - DEV_NULL = /dev/null - export DEV_NULL - # Character used between entries in classpath - CLASSPATH_SEPARATOR = : - # suffix used for object file (.o for unix .obj for windows) - OBJECT_SUFFIX = o - # The suffix applied to runtime libraries - LIBRARY_SUFFIX = so - # The suffix applied to link libraries - LIB_SUFFIX = so - # The suffix applied to executables (.exe for windows, nothing for solaris) - EXE_SUFFIX = - # The prefix applied to library files (lib for solaris, nothing for windows) - LIB_PREFIX = lib - # User name determination (set _USER) - ifndef USER - ifdef LOGNAME - _USER := $(LOGNAME) - else - _USER := $(shell logname) - endif - else - _USER:=$(USER) - endif - # Location of client/server directories - ARCH_VM_SUBDIR=jre/lib/$(LIBARCH) -endif - -# Darwin-specific Overrides -ifeq ($(SYSTEM_UNAME),Darwin) - # The suffix applied to runtime libraries - LIBRARY_SUFFIX = dylib - # The suffix applied to link libraries - ifeq ($(ARCH), universal) - LIB_SUFFIX = o - else - LIB_SUFFIX = a - endif - - ifeq ($(PLATFORM), macosx) - ARCH_VM_SUBDIR=jre/lib/$(LIBARCH) - endif -endif - -# Machines with 512Mb or less of real memory are considered low memory -# build machines and adjustments will be made to prevent excessing -# system swapping during the build. -ifeq ($(JDK_HAS_MEM_INFO),) - JDK_HAS_MEM_INFO=true - export JDK_HAS_MEM_INFO - ifneq ($(MB_OF_MEMORY),) - LOW_MEMORY_MACHINE := $(shell \ - if [ $(MB_OF_MEMORY) -le 512 ] ; then \ - echo "true"; \ - else \ - echo "false"; \ - fi) - MAX_VM_MEMORY := 512 - MIN_VM_MEMORY := $(MAX_VM_MEMORY) - else - MB_OF_MEMORY := unknown - LOW_MEMORY_MACHINE := true - MAX_VM_MEMORY := 384 - MIN_VM_MEMORY := 128 - endif - export MB_OF_MEMORY - export LOW_MEMORY_MACHINE - export MAX_VM_MEMORY - export MIN_VM_MEMORY -endif - -# If blanks in the username, use the first 4 words and pack them together -_USER1:=$(subst ', ,$(_USER)) -_USER2:=$(subst ", ,$(_USER1)) -USER:=$(word 1,$(_USER2))$(word 2,$(_USER2))$(word 3,$(_USER2))$(word 4,$(_USER2)) -export USER - -export PLATFORM -endif - diff --git a/jdk/makefiles/common/shared/PrivateDefs.gmk-example b/jdk/makefiles/common/shared/PrivateDefs.gmk-example deleted file mode 100644 index 93f6a43fb47..00000000000 --- a/jdk/makefiles/common/shared/PrivateDefs.gmk-example +++ /dev/null @@ -1,19 +0,0 @@ - -# This file, when re-named to PrivateDefs.gmk will get included in the -# makefile definitions (before the ALT_ variables are read) so that you can -# override makefile settings permanently for a workspace. -# Use of this file will cause WARNING errors, repeatedly, for a reason. -# -# WARNING: Use with caution. -# - -# EXAMPLE: Testing a special build of hotspot -# (this is the build/solaris/export-solaris-sparc directory from doing -# a 'cd hotspot/make; gnumake' build) -# -ifeq ($(PLATFORM),solaris) - ifeq ($(ARCH),sparc) - ALT_HOTSPOT_IMPORT_PATH=$(JDK_TOPDIR)/../export-solaris-sparc - endif -endif - diff --git a/jdk/makefiles/common/shared/Sanity-Settings.gmk b/jdk/makefiles/common/shared/Sanity-Settings.gmk deleted file mode 100644 index e571b068f82..00000000000 --- a/jdk/makefiles/common/shared/Sanity-Settings.gmk +++ /dev/null @@ -1,267 +0,0 @@ -# -# Copyright (c) 2005, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Shared sanity settings file. Fills in the variable ALL_SETTINGS. -# - -# On Windows in particular, it can happen that quotes get into the PATH -# variable. This is very bad, and must be caught early or you can -# see errors like: sh: -c: line 0: syntax error near unexpected token -# -ifneq ($(PATH), $(subst ",,$(PATH))) - dummy1:=$(error ERROR: PATH variable contains double quotes, fix your PATH.) -endif -ifneq ($(PATH), $(subst ',,$(PATH))) - dummy1:=$(error ERROR: PATH variable contains single quotes, fix your PATH.) -endif - -# Used to add a heading to ALL_SETTINGS -define addHeading -"\n$1:\n" -endef - -# Used to add a line to ALL_SETTINGS for an optional value -# (need if test for windows which has issues with ; characters in values) -define addOptionalSetting -$(if $($1)," $1 = $($1)\n"," $1 = $($1)\n") -endef - -# Used to add a line to ALL_SETTINGS for something that must have a value -define addRequiredSetting -$(if $($1)," $1 = $($1)\n",$(warning WARNING: $1 should not be empty [Sanity-Settings.gmk])) -endef - -# Used to add a line to ALL_SETTINGS for something that must have a value -define addRequiredVersionSetting -$(if $($1)," $1 = $($1) [requires at least $(REQUIRED_$1)]\n",$(warning WARNING: $1 should not be empty [Sanity-Settings.gmk])) -endef - -# Used to add a series of lines to ALL_SETTINGS -define addAltSetting -" $1 = $($1)\n ALT_$1 = $(ALT_$1)\n" -endef - -# Variable that contains a string of all information - -# Make sure this is a 'do it now' variable. -ALL_SETTINGS:=$(call addHeading,Bootstrap Settings) -ALL_SETTINGS+=$(call addAltSetting,BOOTDIR) -ALL_SETTINGS+=$(call addRequiredVersionSetting,BOOT_VER) -ALL_SETTINGS+=$(call addAltSetting,OUTPUTDIR) -ALL_SETTINGS+=$(call addRequiredSetting,ABS_OUTPUTDIR) - - -ALL_SETTINGS+=$(call addHeading,Build Tool Settings) -ALL_SETTINGS+=$(call addAltSetting,SLASH_JAVA) -ALL_SETTINGS+=$(call addRequiredSetting,VARIANT) -ALL_SETTINGS+=$(call addAltSetting,JDK_DEVTOOLS_DIR) -ALL_SETTINGS+=$(call addOptionalSetting,ANT_HOME) -ALL_SETTINGS+=$(call addAltSetting,UNIXCOMMAND_PATH) -ALL_SETTINGS+=$(call addAltSetting,COMPILER_PATH) -ALL_SETTINGS+=$(call addAltSetting,DEVTOOLS_PATH) -ifeq ($(PLATFORM),linux) - ALL_SETTINGS+=$(call addAltSetting,UNIXCCS_PATH) - ALL_SETTINGS+=$(call addAltSetting,USRBIN_PATH) - ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,GCC29_COMPILER_PATH) - endif -endif -ifeq ($(PLATFORM),solaris) - ALL_SETTINGS+=$(call addAltSetting,UNIXCCS_PATH) - ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,GCC_COMPILER_PATH) - endif -endif -ifeq ($(PLATFORM),windows) - ifneq ($(MSVCRNN_DLL),) - ALL_SETTINGS+=$(call addAltSetting,MSVCRNN_DLL_PATH) - endif - ALL_SETTINGS+=$(call addRequiredSetting,INCLUDE) - ALL_SETTINGS+=$(call addRequiredSetting,LIB) -endif -ALL_SETTINGS+=$(call addOptionalSetting,COMPILER_NAME) -ALL_SETTINGS+=$(call addOptionalSetting,COMPILER_VERSION) -ifdef REQUIRED_CC_VER - ALL_SETTINGS+=$(call addRequiredVersionSetting,CC_VER) -else - ALL_SETTINGS+=$(call addOptionalSetting,CC_VER) -endif -ifeq ($(PLATFORM),solaris) - ifeq ($(ARCH_DATA_MODEL), 32) - ifndef OPENJDK - ALL_SETTINGS+=$(call addRequiredVersionSetting,GCC_VER) - endif - endif -endif -ALL_SETTINGS+=$(call addRequiredVersionSetting,ZIP_VER) -ALL_SETTINGS+=$(call addRequiredVersionSetting,UNZIP_VER) -ifeq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addRequiredVersionSetting,LINK_VER) - ALL_SETTINGS+=$(call addRequiredSetting,CC) - ALL_SETTINGS+=$(call addRequiredSetting,LINK) - ALL_SETTINGS+=$(call addRequiredSetting,DUMPBIN) -endif -ALL_SETTINGS+=$(call addRequiredVersionSetting,ANT_VER) -ALL_SETTINGS+=$(call addRequiredSetting,TEMPDIR) - - -ALL_SETTINGS+=$(call addHeading,Build Directives) -ALL_SETTINGS+=$(call addOptionalSetting,OPENJDK) -ALL_SETTINGS+=$(call addOptionalSetting,USE_HOTSPOT_INTERPRETER_MODE) -ALL_SETTINGS+=$(call addOptionalSetting,PEDANTIC) -ALL_SETTINGS+=$(call addOptionalSetting,DEV_ONLY) -ALL_SETTINGS+=$(call addOptionalSetting,NO_DOCS) -ALL_SETTINGS+=$(call addOptionalSetting,NO_DEMOS) -ALL_SETTINGS+=$(call addOptionalSetting,NO_SAMPLES) -ALL_SETTINGS+=$(call addOptionalSetting,NO_IMAGES) -ALL_SETTINGS+=$(call addOptionalSetting,TOOLS_ONLY) -ALL_SETTINGS+=$(call addOptionalSetting,INSANE) -ALL_SETTINGS+=$(call addRequiredSetting,COMPILE_APPROACH) -ifeq ($(COMPILE_APPROACH), parallel) - ALL_SETTINGS+=$(call addAltSetting,PARALLEL_COMPILE_JOBS) -endif -ALL_SETTINGS+=$(call addOptionalSetting,FASTDEBUG) -ALL_SETTINGS+=$(call addRequiredSetting,COMPILER_WARNINGS_FATAL) -ALL_SETTINGS+=$(call addOptionalSetting,COMPILER_WARNING_LEVEL) -ALL_SETTINGS+=$(call addOptionalSetting,SHOW_ALL_WARNINGS) -ALL_SETTINGS+=$(call addRequiredSetting,INCREMENTAL_BUILD) -ALL_SETTINGS+=$(call addOptionalSetting,CC_HIGHEST_OPT) -ALL_SETTINGS+=$(call addOptionalSetting,CC_HIGHER_OPT) -ALL_SETTINGS+=$(call addOptionalSetting,CC_LOWER_OPT) -ALL_SETTINGS+=$(call addOptionalSetting,CXXFLAGS) -ALL_SETTINGS+=$(call addOptionalSetting,CFLAGS) - -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JAVA_CMD) -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JAVAC_CMD) -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JAR_CMD) -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JARSIGNER_CMD) - -# These don't print out well with windows due to the ';' characters -ifneq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addOptionalSetting,JAVAC_CMD) - ALL_SETTINGS+=$(call addOptionalSetting,JAVAH_CMD) - ALL_SETTINGS+=$(call addOptionalSetting,JAVADOC_CMD) -endif - -ALL_SETTINGS+=$(call addHeading,Build Platform Settings) -ALL_SETTINGS+=$(call addRequiredSetting,USER) -ALL_SETTINGS+=$(call addRequiredSetting,PLATFORM) -ALL_SETTINGS+=$(call addRequiredSetting,ARCH) -ALL_SETTINGS+=$(call addRequiredSetting,LIBARCH) -ALL_SETTINGS+=$(call addRequiredSetting,ARCH_FAMILY) -ALL_SETTINGS+=$(call addRequiredSetting,ARCH_DATA_MODEL) -ALL_SETTINGS+=$(call addRequiredSetting,ARCHPROP) -ifeq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addRequiredSetting,PROCESSOR_ARCHITECTURE) - ALL_SETTINGS+=$(call addRequiredSetting,PROCESSOR_IDENTIFIER) - ifdef USING_CYGWIN - ALL_SETTINGS+=$(call addRequiredSetting,USING_CYGWIN) - ALL_SETTINGS+=$(call addRequiredVersionSetting,CYGWIN_VER) - ALL_SETTINGS+=$(call addRequiredSetting,CYGPATH_CMD) - else - ALL_SETTINGS+=$(call addRequiredVersionSetting,MKS_VER) - ALL_SETTINGS+=$(call addOptionalSetting,DOSNAME_CMD) - endif -endif -ifeq ($(PLATFORM),linux) - ifdef REQUIRED_ALSA_VERSION - ALL_SETTINGS+=$(call addRequiredSetting,ALSA_VERSION) - endif -endif -ALL_SETTINGS+=$(call addRequiredVersionSetting,OS_VERSION) -ALL_SETTINGS+=$(call addOptionalSetting,OS_VARIANT_NAME) -ALL_SETTINGS+=$(call addOptionalSetting,OS_VARIANT_VERSION) -ALL_SETTINGS+=$(call addRequiredSetting,MB_OF_MEMORY) - - -ALL_SETTINGS+=$(call addHeading,GNU Make Settings) -ALL_SETTINGS+=$(call addRequiredSetting,MAKE) -ALL_SETTINGS+=$(call addRequiredVersionSetting,MAKE_VER) -ALL_SETTINGS+=$(call addOptionalSetting,MAKECMDGOALS) -ALL_SETTINGS+=$(call addOptionalSetting,MAKEFLAGS) -ALL_SETTINGS+=$(call addRequiredSetting,SHELL) - - -ALL_SETTINGS+=$(call addHeading,Target Build Versions) -ALL_SETTINGS+=$(call addRequiredSetting,JDK_VERSION) -ALL_SETTINGS+=$(call addOptionalSetting,MILESTONE) -ALL_SETTINGS+=$(call addOptionalSetting,RELEASE) -ALL_SETTINGS+=$(call addRequiredSetting,FULL_VERSION) -ALL_SETTINGS+=$(call addOptionalSetting,BUILD_NUMBER) - - -ALL_SETTINGS+=$(call addHeading,External File/Binary Locations) -ALL_SETTINGS+=$(call addRequiredSetting,USRJDKINSTANCES_PATH) -ALL_SETTINGS+=$(call addAltSetting,BUILD_JDK_IMPORT_PATH) -ALL_SETTINGS+=$(call addAltSetting,JDK_IMPORT_PATH) -ALL_SETTINGS+=$(call addAltSetting,LANGTOOLS_DIST) -ALL_SETTINGS+=$(call addAltSetting,CORBA_DIST) -ALL_SETTINGS+=$(call addAltSetting,JAXP_DIST) -ALL_SETTINGS+=$(call addAltSetting,JAXWS_DIST) -ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_DOCS_IMPORT_PATH) -ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_IMPORT_PATH) -ifeq ($(ARCH_DATA_MODEL), 32) - ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_CLIENT_PATH) -endif -ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_SERVER_PATH) -ifeq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_LIB_PATH) - ALL_SETTINGS+=$(call addRequiredSetting,DXSDK_VER) - ALL_SETTINGS+=$(call addAltSetting,DXSDK_PATH) - ALL_SETTINGS+=$(call addAltSetting,DXSDK_INCLUDE_PATH) - ALL_SETTINGS+=$(call addAltSetting,DXSDK_LIB_PATH) - ALL_SETTINGS+=$(call addAltSetting,WINDOWSSDKDIR) - ALL_SETTINGS+=$(call addRequiredSetting,RC) - ALL_SETTINGS+=$(call addRequiredSetting,REBASE) - ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,DEPLOY_MSSDK) - ALL_SETTINGS+=$(call addAltSetting,INSTALL_MSSDK) - ALL_SETTINGS+=$(call addAltSetting,WSCRIPT) - ALL_SETTINGS+=$(call addAltSetting,MSICERT) - endif -endif -ALL_SETTINGS+=$(call addAltSetting,CACERTS_FILE) -ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,MOZILLA_HEADERS_PATH) -endif -ifneq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addAltSetting,CUPS_HEADERS_PATH) -endif - -ifdef OPENJDK - ALL_SETTINGS+=$(call addHeading,OpenJDK-specific settings) - ALL_SETTINGS+=$(call addAltSetting,FREETYPE_HEADERS_PATH) - ALL_SETTINGS+=$(call addAltSetting,FREETYPE_LIB_PATH) -endif - -ifdef OPENJDK - ALL_SETTINGS+=$(call addHeading,Previous JDK Settings) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_RELEASE_PATH) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JDK_VERSION) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JDK_FILE) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JRE_FILE) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_RELEASE_IMAGE) -endif diff --git a/jdk/makefiles/java/Makefile b/jdk/makefiles/java/Makefile deleted file mode 100644 index 57399f5ac83..00000000000 --- a/jdk/makefiles/java/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -# -# Copyright (c) 1995, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile for building all of java -# - -PRODUCT=java -BUILDDIR=.. -include $(BUILDDIR)/common/Defs.gmk - -# -# The order of subdirs here is important -# -SUBDIRS += redist - -# Others -# Note: java_crw_demo java_hprof_demo are demos but must be delivered built in sdk - -SUBDIRS += - -SUBDIRS_management = -SUBDIRS_misc = - -#TODO Check invoke -# logging instrument invoke sql rmi - -ifeq ($(PLATFORM), macosx) - SUBDIRS += jobjc -endif # PLATFORM - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/java/invoke/Makefile b/jdk/makefiles/java/invoke/Makefile deleted file mode 100644 index 93b1f46f5d3..00000000000 --- a/jdk/makefiles/java/invoke/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (c) 2008, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -BUILDDIR = ../.. - -PACKAGE = java.lang.invoke -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk - -AUTO_FILES_JAVA_DIRS = java/lang/invoke sun/invoke -FILES_java = \ - java/lang/ClassValue.java \ - java/lang/BootstrapMethodError.java - -# The sources built here use new language syntax to generate -# method handle calls. Let's be sure we are using that format. -LANGUAGE_VERSION = -source 7 -CLASS_VERSION = -target 7 - -include $(BUILDDIR)/common/Classes.gmk diff --git a/jdk/makefiles/java/redist/Makefile b/jdk/makefiles/java/redist/Makefile deleted file mode 100644 index 88420927a80..00000000000 --- a/jdk/makefiles/java/redist/Makefile +++ /dev/null @@ -1,497 +0,0 @@ -# -# Copyright (c) 1997, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Imports files exported by a hotspot build or provided from an external -# location into the OUTPUTDIR, and also primes the OUTPUTDIR with files -# that are provided inside this workspace. -# -# IMPORT_LIST contains the list of destination files that are copied -# from external places (outside this workspace). -# -# INTERNAL_IMPORT_LIST is the list of destination files from BUILDDIR. -# - -BUILDDIR = ../.. -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk -include $(BUILDDIR)/Tools.gmk - -$(info ENTERING redist) - -SERVER_LOCATION = server -CLIENT_LOCATION = client -KERNEL_LOCATION = kernel - -DB_SUFFIX = _db -DTRACE_SUFFIX = _dtrace - -ifeq ($(PLATFORM), windows) - LIB_LOCATION = $(BINDIR) -else ifeq ($(PLATFORM), macosx) - LIB_LOCATION = $(LIBDIR) -else - LIB_LOCATION = $(LIBDIR)/$(LIBARCH) -endif - -JVM_NAME = $(LIB_PREFIX)jvm.$(LIBRARY_SUFFIX) -JVMLIB_NAME = $(LIB_PREFIX)jvm.$(LIB_SUFFIX) -JVMMAP_NAME = $(LIB_PREFIX)jvm.map -JVMPDB_NAME = $(LIB_PREFIX)jvm.pdb -LIBJSIG_NAME = $(LIB_PREFIX)jsig.$(LIBRARY_SUFFIX) -JVMDB_NAME = $(LIB_PREFIX)jvm$(DB_SUFFIX).$(LIBRARY_SUFFIX) -JVMDTRACE_NAME = $(LIB_PREFIX)jvm$(DTRACE_SUFFIX).$(LIBRARY_SUFFIX) - -JVM_DEBUGINFO_NAME = $(LIB_PREFIX)jvm.debuginfo -LIBJSIG_DEBUGINFO_NAME = $(LIB_PREFIX)jsig.debuginfo -JVMDB_DEBUGINFO_NAME = $(LIB_PREFIX)jvm$(DB_SUFFIX).debuginfo -JVMDTRACE_DEBUGINFO_NAME = $(LIB_PREFIX)jvm$(DTRACE_SUFFIX).debuginfo - -CLASSSHARINGDATA_DIR = $(BUILDDIR)/../make/tools/sharing - -# Needed to do file copy -ABS_BUILDDIR :=$(call FullPath,$(BUILDDIR)) - -SUBDIRS_desktop = -SUBDIRS_tools = sajdi -include $(BUILDDIR)/common/Subdirs.gmk - -all clean clobber:: - $(SUBDIRS-loop) - -all:: build - -# List of files created here or coming from BUILDDIR area (this workspace) -INTERNAL_IMPORT_LIST = $(LIBDIR)/classlist - -# List of files coming from outside this workspace -ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST = $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_NAME) \ - $(LIB_LOCATION)/$(SERVER_LOCATION)/Xusage.txt - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVM_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DEBUGINFO_NAME) - endif - endif -endif -ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME) \ - $(LIB_LOCATION)/$(CLIENT_LOCATION)/Xusage.txt - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVM_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DEBUGINFO_NAME) - endif - endif -endif - -$(info ENTERING redist 2) -ifeq ($(PLATFORM), windows) - IMPORT_LIST += $(BINDIR)/$(notdir $(MSVCR100DLL)) - - $(BINDIR)/$(notdir $(MSVCR100DLL)): $(MSVCR100DLL) - $(install-import-file) - $(call chmod-file, a+x) - - # Get the hotspot .map and .pdb files for client and server - ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST += \ - $(LIBDIR)/$(JVMLIB_NAME) \ - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMMAP_NAME) \ - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME) - endif - - # Add .map and .pdb files to the import path for client and kernel VMs. - ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMMAP_NAME) \ - $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMPDB_NAME) - endif - ifeq ($(JVM_VARIANT_KERNEL),true) - IMPORT_LIST += $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMMAP_NAME) \ - $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME) - endif - - $(info XXXX $(LIBDIR)/$(JVMLIB_NAME): $(HOTSPOT_LIB_PATH)/$(JVMLIB_NAME)) - $(LIBDIR)/$(JVMLIB_NAME): $(HOTSPOT_LIB_PATH)/$(JVMLIB_NAME) - $(install-import-file) - - # it is OK for the .map and .pdb files to not exist, so do not force a - # dependency on them from the bootstrap location, and allow the copy to fail. - $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMMAP_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVMMAP_NAME) $@ - - $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMMAP_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMMAP_NAME) $@ - - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMMAP_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMMAP_NAME) $@ - - $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMPDB_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVMPDB_NAME) $@ - - $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMPDB_NAME) $@ - - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMPDB_NAME) $@ - -else - # Posix like systems - IMPORT_LIST += $(LIB_LOCATION)/$(LIBJSIG_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) - endif - endif - ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain the target of the symlink - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) - endif - endif - endif - ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain the target of the symlink - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) - endif - endif - endif - - ifeq ($(PLATFORM), solaris) - - ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_NAME) - - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME) not found!) - endif - - $(LIB_LOCATION)/$(JVM_NAME): $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME) - @$(prep-target) - endif - - ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDB_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DEBUGINFO_NAME) - endif - endif - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_SERVER_PATH)/$(JVMDB_NAME) not found!) - endif - - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_NAME) not found!) - endif - - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_NAME) not found!) - endif - endif - endif -endif - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVM_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVM_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVM_NAME): $(HOTSPOT_KERNEL_PATH)/$(JVM_NAME) - $(install-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(LIBJSIG_NAME): $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_NAME)) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) \ -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_DEBUGINFO_NAME)) -endif -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_NAME)) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_DEBUGINFO_NAME)) -endif - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_NAME): $(HOTSPOT_SERVER_PATH)/$(JVM_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVM_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/Xusage.txt : $(HOTSPOT_SERVER_PATH)/Xusage.txt - $(install-import-file) - - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/Xusage.txt : $(HOTSPOT_CLIENT_PATH)/Xusage.txt - $(install-import-file) - -$(LIB_LOCATION)/$(KERNEL_LOCATION)/Xusage.txt : $(HOTSPOT_KERNEL_PATH)/Xusage.txt - $(install-file) - -# -# Specific to non-OpenJDK building -# -ifndef OPENJDK - -INTERNAL_IMPORT_LIST += \ - $(LIBDIR)/security/US_export_policy.jar \ - $(LIBDIR)/security/local_policy.jar \ - $(LIBDIR)/jce.jar - -$(LIBDIR)/jce.jar: \ - $(JDK_TOPDIR)/make/closed/tools/crypto/jce/jce.jar - $(install-file) -$(LIBDIR)/security/US_export_policy.jar: \ - $(JDK_TOPDIR)/make/closed/tools/crypto/jce/US_export_policy.jar - $(install-file) -$(LIBDIR)/security/local_policy.jar: \ - $(JDK_TOPDIR)/make/closed/tools/crypto/jce/local_policy.jar - $(install-file) - -endif # OPENJDK - -# Construct classlist file -$(LIBDIR)/classlist: \ - $(CLASSSHARINGDATA_DIR)/classlist.$(PLATFORM) \ - $(ADDJSUM_JARFILE) - @$(prep-target) - @$(RM) -f $@.temp - $(TOOL_ADDJSUM) \ - $(CLASSSHARINGDATA_DIR)/classlist.$(PLATFORM) $@.temp - $(MV) $@.temp $@ - -# Import internal files (ones that are stashed in this source tree) -import_internal_files : $(INTERNAL_IMPORT_LIST) - -# Import files from the JDK that we are not building -import_files: $(IMPORT_LIST) - -# Get component information variables and rules -include $(BUILDDIR)/common/internal/ImportComponents.gmk - -# Security files we need to import -SEC_FILES_ZIP=$(ABS_BUILDDIR)/tools/crypto/sec-bin.zip -SEC_FILES_WIN_ZIP=$(ABS_BUILDDIR)/tools/crypto/sec-windows-bin.zip -JGSS_WIN32_FILES_ZIP=$(ABS_BUILDDIR)/tools/crypto/jgss-windows-i586-bin.zip -JGSS_WIN64_FILES_ZIP=$(ABS_BUILDDIR)/tools/crypto/jgss-windows-x64-bin.zip - -# Unzip zip file $2 into directory $1 (if $2 exists) -# Warning: $2 must be absolute path not relative -define SecUnzipper -if [ -f $2 ] ; then \ - $(MKDIR) -p $1; \ - $(ECHO) "( $(CD) $1 && $(UNZIP) -o $2 )"; \ - ( $(CD) $1 && $(UNZIP) -o $2 ); \ -fi -endef - -# If sec-bin exists, unpack it into the build directory -# Also, the library recompile build indirectly depends on two SSL classes, -# so copy those as well FIXUP -# if sec-windows-bin exists, unpack it into the build directory -# if JGSS files exists, unpack it into the build directory -$(TEMPDIR)/security_imported: - @$(prep-target) - @$(call SecUnzipper,$(OUTPUTDIR),$(SEC_FILES_ZIP)) -ifeq ($(PLATFORM), windows) - @$(call SecUnzipper,$(OUTPUTDIR),$(SEC_FILES_WIN_ZIP)) -endif -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - @$(call SecUnzipper,$(OUTPUTDIR),$(JGSS_WIN32_FILES_ZIP)) - else - @$(call SecUnzipper,$(OUTPUTDIR),$(JGSS_WIN64_FILES_ZIP)) - endif -endif - @$(ECHO) "Imported on `$(DATE)`" > $@ - -# Import all files from other components -$(TEMPDIR)/components_imported: - @$(prep-target) - $(call import-component-binaries,$(ABS_OUTPUTDIR)) - $(call import-component-sources,$(IMPORTSRCDIR)) - $(call import-component-docs,$(IMPORTDOCDIR)) - $(call import-component-classes,$(CLASSDESTDIR)) - @$(ECHO) "Imported on `$(DATE)`" > $@ - -# Do pretty much everything -build : import_files \ - import_internal_files \ - $(TEMPDIR)/components_imported \ - $(TEMPDIR)/security_imported - -# Clean up what we imported (except for component files) -clean clobber:: - $(RM) $(IMPORT_LIST) - $(RM) $(INTERNAL_IMPORT_LIST) - $(call import-component-sources-clean,$(IMPORTSRCDIR)) - $(call import-component-docs-clean,$(IMPORTDOCDIR)) - $(call import-component-classes-clean,$(CLASSDESTDIR)) - $(RM) $(TEMPDIR)/components_imported - $(RM) $(TEMPDIR)/security_imported - -.PHONY: import_files import_internal_files - diff --git a/jdk/makefiles/java/redist/sajdi/Makefile b/jdk/makefiles/java/redist/sajdi/Makefile deleted file mode 100644 index 6bec18ce9d0..00000000000 --- a/jdk/makefiles/java/redist/sajdi/Makefile +++ /dev/null @@ -1,116 +0,0 @@ -# -# Copyright (c) 1997, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -BUILDDIR = ../../.. -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk - -ifeq ($(PLATFORM), windows) - LIB_LOCATION = $(BINDIR) -else ifeq ($(PLATFORM), macosx) - LIB_LOCATION = $(LIBDIR) -else - LIB_LOCATION = $(LIBDIR)/$(LIBARCH) -endif - -# INCLUDE_SA is false on platforms where SA is not supported. -# On platforms where it is supported, we want to allow it to -# not be present, at least temporarily. So, -# if the SA files (well, just sa-jdi.jar) do not exist -# in the HOTSPOT_IMPORT_PATH, then we won't build SA. -SA_EXISTS := $(shell if [ -r $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar ] ; then \ - $(ECHO) true; \ - else \ - $(ECHO) false; \ - fi) - -ifeq ($(SA_EXISTS), false) - INCLUDE_SA := false -endif - -IMPORT_LIST = -ifeq ($(INCLUDE_SA), true) - IMPORT_LIST += $(LIBDIR)/sa-jdi.jar \ - $(LIB_LOCATION)/$(SALIB_NAME) - ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - # the import JDK may not contain .diz files - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SA_DIZ_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SA_DIZ_NAME) - endif - else - ifeq ($(PLATFORM), windows) - # the import JDK may not contain .pdb files - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SAPDB_NAME)),) - # assume .map file is present if .pdb is present - IMPORT_LIST += $(LIB_LOCATION)/$(SAMAP_NAME) \ - $(LIB_LOCATION)/$(SAPDB_NAME) - endif - else - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SA_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SA_DEBUGINFO_NAME) - endif - endif - endif - endif -endif # INCLUDE_SA - - -ifeq ($(INCLUDE_SA), true) -# The Serviceability Agent is built in the Hotspot workspace. -# It contains two files: -# - sa-jdi.jar: This goes into the same dir as tools.jar. -# - a shared library: sawindbg.dll on windows / libproc.sa on unix -# This goes into the same dir as the other -# shared libs, eg. libjdwp.so. -$(LIBDIR)/sa-jdi.jar: $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar - $(install-importonly-file) - -$(LIB_LOCATION)/$(SALIB_NAME): $(HOTSPOT_SALIB_PATH)/$(SALIB_NAME) - $(install-import-file) - - ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) -$(LIB_LOCATION)/$(SA_DIZ_NAME): $(HOTSPOT_SALIB_PATH)/$(SA_DIZ_NAME) - $(install-import-file) - else - ifeq ($(PLATFORM), windows) -$(LIB_LOCATION)/$(SAPDB_NAME): $(HOTSPOT_SALIB_PATH)/$(SAPDB_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SAMAP_NAME): $(HOTSPOT_SALIB_PATH)/$(SAMAP_NAME) - $(install-import-file) - else -$(LIB_LOCATION)/$(SA_DEBUGINFO_NAME): $(HOTSPOT_SALIB_PATH)/$(SA_DEBUGINFO_NAME) - $(install-import-file) - endif - endif - endif -endif # INCLUDE_SA - -all: $(IMPORT_LIST) - -clean clobber:: diff --git a/jdk/makefiles/javax/crypto/Defs-jce.gmk b/jdk/makefiles/javax/crypto/Defs-jce.gmk deleted file mode 100644 index 0bfd00c8cf8..00000000000 --- a/jdk/makefiles/javax/crypto/Defs-jce.gmk +++ /dev/null @@ -1,105 +0,0 @@ -# -# Copyright (c) 2007, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -include $(BUILDDIR)/common/Release.gmk - -# -# Include these extra attributes for now, should probably take out. -# -JCE_MANIFEST_FILE = $(TEMPDIR)/manifest.mf -$(JCE_MANIFEST_FILE): $(MAINMANIFEST) - $(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - $(ECHO) "Extension-Name: javax.crypto" >> $@ - $(ECHO) "Implementation-Vendor-Id: com.sun" >> $@ - -README-MAKEFILE_WARNING = \ - "\nPlease read make/javax/crypto/Makefile for further build instructions." - -define no-source-warning - @$(ECHO) "\n***JCE sources are not available, skipping build.***" \ - $(README-MAKEFILE_WARNING) -endef - -ifndef OPENJDK - -PREBUILT_DIR = $(JDK_TOPDIR)/make/closed/tools/crypto - -define build-warning - @$(ECHO) "\n***JCE in JDK builds require special tools/procedures.***" \ - $(README-MAKEFILE_WARNING) -endef - -# -# Location for JCE codesigning key. -# -SIGNING_KEY_DIR = /security/ws/JCE-signing/src -SIGNING_KEYSTORE = $(SIGNING_KEY_DIR)/KeyStore.jks -SIGNING_PASSPHRASE = $(SIGNING_KEY_DIR)/passphrase.txt -SIGNING_ALIAS = oracle_jce_rsa - -# -# Defines for signing the various jar files. -# - -define presign - @if [ ! -f $(SIGNING_KEYSTORE) -o ! -f $(SIGNING_PASSPHRASE) ]; then \ - $(ECHO) "\n$(SIGNING_KEYSTORE): Signing mechanism *NOT* available..." \ - $(README-MAKEFILE_WARNING); \ - exit 2; \ - fi -endef - -define sign-target - $(BOOT_JARSIGNER_CMD) -keystore $(SIGNING_KEYSTORE) \ - $@ $(SIGNING_ALIAS) < $(SIGNING_PASSPHRASE) - @$(java-vm-cleanup) - @$(ECHO) "\nJar codesigning finished." -endef - -RELEASE_DIR = $(OUTPUTDIR)/jce-release - -define release-warning - @$(ECHO) \ - "\n***The jar files built by the 'release' target must***" \ - "\n***still be checked into the closed workspace! ***" \ - $(README-MAKEFILE_WARNING) -endef - -# -# Convenience macros for signing a jar file. -# -# Call through $(call sign-file, target file) -# -define sign-file - $(presign) - $(prep-target) - $(CP) $1 $@ - $(sign-target) -endef - -endif # !OPENJDK diff --git a/jdk/makefiles/javax/crypto/Makefile b/jdk/makefiles/javax/crypto/Makefile deleted file mode 100644 index f9089f902d3..00000000000 --- a/jdk/makefiles/javax/crypto/Makefile +++ /dev/null @@ -1,484 +0,0 @@ -# -# Copyright (c) 2007, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile for building jce.jar and the various cryptographic strength -# policy jar files. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. There are some -# javac options currently specific to JCE, so we recompile now to make -# sure any implicit compilations didn't use any incorrect flags. -# -# For OpenJDK, the jar files built here are installed directly into the -# OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built and signed, and the resulting jar files *MUST BE CHECKED INTO -# THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE -# FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual. -# If OpenJDK: builds/installs the -# jce.jar/limited policy files. -# If JDK: builds but does not install. -# During full tops-down builds, -# prebuilt/presigned jce.jar & -# limited policy files are copied -# in by make/java/redist/Makefile. -# If you are working in this directory -# and want to install the prebuilts, -# use the "install-prebuilt" target. -# -# jar Builds/installs jce.jar -# If OpenJDK, does not sign -# If JDK, tries to sign -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds jce.jar (does not sign/install) -# -# build-policy Builds policy files (does not sign/install) -# -# install-jar Alias for "jar" above -# -# install-limited Builds/installs limited policy files -# If OpenJDK, does not sign -# If JDK, tries to sign -# install-unlimited Builds/nstalls unlimited policy files -# If OpenJDK, does not sign -# If JDK, tries to sign -# -# Other targets (JDK only): -# -# sign Alias for sign-jar and sign-policy -# sign-jar Builds/signs jce.jar file (no install) -# sign-policy Builds/signs policy files (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../.. -PACKAGE = javax.crypto -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS = true -JAVAC_WARNINGS_FATAL = true -include $(BUILDDIR)/common/Defs.gmk - -# -# Location for the newly built classfiles. -# -CLASSDESTDIR = $(TEMPDIR)/classes - -# -# Subdirectories of these are automatically included. -# -AUTO_FILES_JAVA_DIRS = \ - javax/crypto \ - sun/security/internal/interfaces \ - sun/security/internal/spec - -include $(BUILDDIR)/common/Classes.gmk - -# -# Rules -# - -# -# Some licensees do not get the security sources, but we still need to -# be able to build "all" for them. Check here to see if the sources were -# available. If not, then we don't need to continue this rule. -# - -ifdef OPENJDK -all: build-jar install-jar build-policy install-limited -else # OPENJDK -ifeq ($(strip $(FILES_java)),) -all: - $(no-source-warning) -else # FILES_java/policy files available -all: build-jar build-policy - $(build-warning) -endif # $(FILES_java)/policy files available -endif # OPENJDK - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, they will be -# placed in the appropriate areas. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -include Defs-jce.gmk - - -# ===================================================== -# Build the unsigned jce.jar file. Signing comes later. -# - -JAR_DESTFILE = $(LIBDIR)/jce.jar - -# -# JCE building is somewhat involved. -# -# OpenJDK: Since we do not ship prebuilt JCE files, previous compiles -# in the build may have needed JCE class signatures. There were then -# implicitly built by javac (likely using the boot javac). While using -# those class files was fine for signatures, we need to rebuild using -# the right compiler. -# -# JDK: Even through the jce.jar was previously installed, since the -# source files are accessible in the source directories, they will -# always be "newer" than the prebuilt files inside the jar, and thus -# make will always rebuild them. (We could "hide" the JCE source in a -# separate directory, but that would make the build logic for JDK and -# OpenJDK more complicated.) -# -# Thus in either situation, we shouldn't use these files. -# -# To make sure the classes were built with the right compiler options, -# delete the existing files in $(CLASSBINDIR), rebuild the right way in a -# directory under $(TEMPDIR), then copy the files back to -# $(CLASSBINDIR). Building in $(TEMPDIR) allows us to use our make -# infrastructure without modification: .classes.list, macros, etc. -# - -# -# The list of directories that will be remade from scratch, using the -# right compilers/options. -# -DELETE_DIRS = $(patsubst %, $(CLASSBINDIR)/%, $(AUTO_FILES_JAVA_DIRS)) - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/jce.jar - -# -# Build jce.jar, then replace the previously built JCE files in the -# classes directory with these. This ensures we have consistently built -# files throughout the workspaces. -# -$(UNSIGNED_DIR)/jce.jar: prebuild build $(JCE_MANIFEST_FILE) - $(prep-target) - $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - $(CP) -r $(CLASSDESTDIR)/* $(CLASSBINDIR) - @$(java-vm-cleanup) - -build: prebuild - -prebuild: - $(RM) -r $(DELETE_DIRS) - - -# ===================================================== -# Build the unsigned policy files. -# -# Given the current state of world export/import policies, -# these settings work for Sun's situation. This note is not -# legal guidance, you must still resolve any export/import issues -# applicable for your situation. Contact your export/import -# counsel for more information. -# - -POLICY_DESTDIR = $(LIBDIR)/security -UNSIGNED_POLICY_BUILDDIR = $(UNSIGNED_DIR)/policy - -build-policy: unlimited limited - -# -# Build the unsigned unlimited policy files. -# -unlimited: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar - -$(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar: \ - policy/unlimited/default_US_export.policy \ - policy/unlimited/UNLIMITED - $(prep-target) - $(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@ \ - -C policy/unlimited default_US_export.policy \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -$(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar: \ - policy/unlimited/default_local.policy \ - policy/unlimited/UNLIMITED - $(prep-target) - $(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@ \ - -C policy/unlimited default_local.policy \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -# -# Build the unsigned limited policy files. -# -# NOTE: We currently do not place restrictions on our limited export -# policy. This was not a typo. -# -limited: \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar - -$(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar - $(install-file) - -$(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \ - policy/limited/default_local.policy \ - policy/limited/exempt_local.policy \ - policy/limited/LIMITED - $(prep-target) - $(BOOT_JAR_CMD) cmf policy/limited/LIMITED $@ \ - -C policy/limited default_local.policy \ - -C policy/limited exempt_local.policy \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -UNSIGNED_POLICY_FILES = \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \ - - -ifndef OPENJDK -# ===================================================== -# Sign the various jar files. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed -SIGNED_POLICY_BUILDDIR = $(SIGNED_DIR)/policy - -SIGNED_POLICY_FILES = \ - $(patsubst $(UNSIGNED_POLICY_BUILDDIR)/%,$(SIGNED_POLICY_BUILDDIR)/%, \ - $(UNSIGNED_POLICY_FILES)) - -sign: sign-jar sign-policy - -sign-jar: $(SIGNED_DIR)/jce.jar - -sign-policy: $(SIGNED_POLICY_FILES) - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/jce.jar: $(UNSIGNED_DIR)/jce.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/jce.jar: - @if [ ! -r $(UNSIGNED_DIR)/jce.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/jce.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/jce.jar) - -$(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar - $(call sign-file, $<) - -$(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar - $(call sign-file, $<) - -$(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar - $(call sign-file, $<) - -$(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar - $(call sign-file, $<) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, -# unlimited policy file distribution, etc. -# - -CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto - -release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/README.txt - $(RM) -r \ - $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy \ - $(JCE_BUILD_DIR)/release/jce.jar \ - $(JCE_BUILD_DIR)/release/US_export_policy.jar \ - $(JCE_BUILD_DIR)/release/local_policy.jar \ - $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy.zip - $(MKDIR) -p $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy - $(CP) $(SIGNED_DIR)/jce.jar $(JCE_BUILD_DIR)/release - $(CP) \ - $(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ - $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \ - $(JCE_BUILD_DIR)/release - $(CP) \ - $(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ - $(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar \ - $(CLOSED_DIR)/doc/README.txt \ - $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy - cd $(JCE_BUILD_DIR)/release ; \ - $(ZIPEXE) -qr UnlimitedJCEPolicy.zip UnlimitedJCEPolicy - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install jce.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/jce.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/jce.jar -endif - $(install-file) - -# -# Install the appropriate policy file, depending on the type of build. -# -ifdef OPENJDK -INSTALL_POLICYDIR = $(UNSIGNED_POLICY_BUILDDIR) -else -INSTALL_POLICYDIR = $(SIGNED_POLICY_BUILDDIR) -endif - -install-limited-jars: \ - $(INSTALL_POLICYDIR)/limited/US_export_policy.jar \ - $(INSTALL_POLICYDIR)/limited/local_policy.jar - $(MKDIR) -p $(POLICY_DESTDIR) - $(RM) \ - $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar - $(CP) $^ $(POLICY_DESTDIR) - -install-limited: install-limited-jars -ifndef OPENJDK - $(release-warning) -endif - -install-unlimited-jars: \ - $(INSTALL_POLICYDIR)/unlimited/US_export_policy.jar \ - $(INSTALL_POLICYDIR)/unlimited/local_policy.jar - $(MKDIR) -p $(POLICY_DESTDIR) - $(RM) \ - $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar - $(CP) $^ $(POLICY_DESTDIR) - -install-unlimited: install-unlimited-jars -ifndef OPENJDK - $(release-warning) -endif - -ifndef OPENJDK -install-prebuilt-jars: - @$(ECHO) "\n>>>Installing prebuilt JCE framework..." - $(RM) $(JAR_DESTFILE) \ - $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar - $(CP) $(PREBUILT_DIR)/jce/jce.jar $(JAR_DESTFILE) - $(CP) \ - $(PREBUILT_DIR)/jce/US_export_policy.jar \ - $(PREBUILT_DIR)/jce/local_policy.jar \ - $(POLICY_DESTDIR) - -install-prebuilt: install-prebuilt-jars -endif - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar $(DELETE_DIRS) $(TEMPDIR) \ - $(JCE_BUILD_DIR) - -.PHONY: build-jar jar build-policy unlimited limited install-jar \ - install-limited install-unlimited -ifndef OPENJDK -.PHONY: sign sign-jar sign-policy release install-prebuilt -endif diff --git a/jdk/makefiles/javax/crypto/policy/limited/LIMITED b/jdk/makefiles/javax/crypto/policy/limited/LIMITED deleted file mode 100644 index b58f7acd930..00000000000 --- a/jdk/makefiles/javax/crypto/policy/limited/LIMITED +++ /dev/null @@ -1 +0,0 @@ -Crypto-Strength: limited diff --git a/jdk/makefiles/javax/crypto/policy/limited/default_local.policy b/jdk/makefiles/javax/crypto/policy/limited/default_local.policy deleted file mode 100644 index 2a6d5134047..00000000000 --- a/jdk/makefiles/javax/crypto/policy/limited/default_local.policy +++ /dev/null @@ -1,14 +0,0 @@ -// Some countries have import limits on crypto strength. This policy file -// is worldwide importable. - -grant { - permission javax.crypto.CryptoPermission "DES", 64; - permission javax.crypto.CryptoPermission "DESede", *; - permission javax.crypto.CryptoPermission "RC2", 128, - "javax.crypto.spec.RC2ParameterSpec", 128; - permission javax.crypto.CryptoPermission "RC4", 128; - permission javax.crypto.CryptoPermission "RC5", 128, - "javax.crypto.spec.RC5ParameterSpec", *, 12, *; - permission javax.crypto.CryptoPermission "RSA", *; - permission javax.crypto.CryptoPermission *, 128; -}; diff --git a/jdk/makefiles/javax/crypto/policy/limited/exempt_local.policy b/jdk/makefiles/javax/crypto/policy/limited/exempt_local.policy deleted file mode 100644 index f3255a2d970..00000000000 --- a/jdk/makefiles/javax/crypto/policy/limited/exempt_local.policy +++ /dev/null @@ -1,13 +0,0 @@ -// Some countries have import limits on crypto strength. So this file -// will be useful. - -grant { - // There is no restriction to any algorithms if KeyRecovery is enforced. - permission javax.crypto.CryptoPermission *, "KeyRecovery"; - - // There is no restriction to any algorithms if KeyEscrow is enforced. - permission javax.crypto.CryptoPermission *, "KeyEscrow"; - - // There is no restriction to any algorithms if KeyWeakening is enforced. - permission javax.crypto.CryptoPermission *, "KeyWeakening"; -}; diff --git a/jdk/makefiles/javax/crypto/policy/unlimited/UNLIMITED b/jdk/makefiles/javax/crypto/policy/unlimited/UNLIMITED deleted file mode 100644 index 7fc7743c416..00000000000 --- a/jdk/makefiles/javax/crypto/policy/unlimited/UNLIMITED +++ /dev/null @@ -1 +0,0 @@ -Crypto-Strength: unlimited diff --git a/jdk/makefiles/javax/crypto/policy/unlimited/default_US_export.policy b/jdk/makefiles/javax/crypto/policy/unlimited/default_US_export.policy deleted file mode 100644 index 67d0acc47a3..00000000000 --- a/jdk/makefiles/javax/crypto/policy/unlimited/default_US_export.policy +++ /dev/null @@ -1,5 +0,0 @@ -// Manufacturing policy file. -grant { - // There is no restriction to any algorithms. - permission javax.crypto.CryptoAllPermission; -}; diff --git a/jdk/makefiles/javax/crypto/policy/unlimited/default_local.policy b/jdk/makefiles/javax/crypto/policy/unlimited/default_local.policy deleted file mode 100644 index 8dc9702e9da..00000000000 --- a/jdk/makefiles/javax/crypto/policy/unlimited/default_local.policy +++ /dev/null @@ -1,5 +0,0 @@ -// Country-specific policy file for countries with no limits on crypto strength. -grant { - // There is no restriction to any algorithms. - permission javax.crypto.CryptoAllPermission; -}; diff --git a/jdk/makefiles/mapfiles/libjava/mapfile-vers b/jdk/makefiles/mapfiles/libjava/mapfile-vers index 8517e713dd9..23cca532fd7 100644 --- a/jdk/makefiles/mapfiles/libjava/mapfile-vers +++ b/jdk/makefiles/mapfiles/libjava/mapfile-vers @@ -232,7 +232,6 @@ SUNWprivate_1.1 { Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedExceptionAction_2Ljava_security_AccessControlContext_2; Java_java_security_AccessController_getStackAccessControlContext; Java_java_security_AccessController_getInheritedAccessControlContext; - Java_java_sql_DriverManager_getCallerClassLoader; Java_java_util_ResourceBundle_getClassContext; Java_java_util_TimeZone_getSystemTimeZoneID; Java_java_util_TimeZone_getSystemGMTOffsetID; diff --git a/jdk/makefiles/mapfiles/libjfr/mapfile-vers b/jdk/makefiles/mapfiles/libjfr/mapfile-vers index aed19a75be3..5ed216eee9d 100644 --- a/jdk/makefiles/mapfiles/libjfr/mapfile-vers +++ b/jdk/makefiles/mapfiles/libjfr/mapfile-vers @@ -6,34 +6,34 @@ # Define library interface. SUNWprivate_1.1 { - global: - Java_oracle_jrockit_jfr_util_os_Process_getpid; - Java_oracle_jrockit_jfr_util_os_Timing_counterTime; - Java_oracle_jrockit_jfr_util_os_Timing_init; - Java_oracle_jrockit_jfr_util_log_NativeLogger_output0; - Java_oracle_jrockit_jfr_VMJFR_isEnabled; - Java_oracle_jrockit_jfr_VMJFR_options; - Java_oracle_jrockit_jfr_VMJFR_init; - Java_oracle_jrockit_jfr_VMJFR_addConstPool; - Java_oracle_jrockit_jfr_VMJFR_removeConstPool; - Java_oracle_jrockit_jfr_VMJFR_storeConstPool; - Java_oracle_jrockit_jfr_VMJFR_classID; - Java_oracle_jrockit_jfr_VMJFR_stackTraceID; - Java_oracle_jrockit_jfr_VMJFR_threadID; - Java_oracle_jrockit_jfr_VMJFR_rotate; - Java_oracle_jrockit_jfr_VMJFR_shutdown; - Java_oracle_jrockit_jfr_VMJFR_start; - Java_oracle_jrockit_jfr_VMJFR_stop; - Java_oracle_jrockit_jfr_VMJFR_buffer; - Java_oracle_jrockit_jfr_VMJFR_flush; - Java_oracle_jrockit_jfr_VMJFR_write; - Java_oracle_jrockit_jfr_VMJFR_add; - Java_oracle_jrockit_jfr_VMJFR_remove; - Java_oracle_jrockit_jfr_VMJFR_setThreshold; - Java_oracle_jrockit_jfr_VMJFR_setPeriod; - Java_oracle_jrockit_jfr_VMJFR_getPeriod; - Java_oracle_jrockit_jfr_VMJFR_descriptors; + global: + Java_oracle_jrockit_jfr_Process_getpid; + Java_oracle_jrockit_jfr_Timing_counterTime; + Java_oracle_jrockit_jfr_Timing_init; + Java_oracle_jrockit_jfr_NativeLogger_output0; + Java_oracle_jrockit_jfr_VMJFR_isEnabled; + Java_oracle_jrockit_jfr_VMJFR_options; + Java_oracle_jrockit_jfr_VMJFR_init; + Java_oracle_jrockit_jfr_VMJFR_addConstPool; + Java_oracle_jrockit_jfr_VMJFR_removeConstPool; + Java_oracle_jrockit_jfr_VMJFR_storeConstPool; + Java_oracle_jrockit_jfr_VMJFR_classID; + Java_oracle_jrockit_jfr_VMJFR_stackTraceID; + Java_oracle_jrockit_jfr_VMJFR_threadID; + Java_oracle_jrockit_jfr_VMJFR_rotate; + Java_oracle_jrockit_jfr_VMJFR_shutdown; + Java_oracle_jrockit_jfr_VMJFR_start; + Java_oracle_jrockit_jfr_VMJFR_stop; + Java_oracle_jrockit_jfr_VMJFR_buffer; + Java_oracle_jrockit_jfr_VMJFR_flush; + Java_oracle_jrockit_jfr_VMJFR_write; + Java_oracle_jrockit_jfr_VMJFR_add; + Java_oracle_jrockit_jfr_VMJFR_remove; + Java_oracle_jrockit_jfr_VMJFR_setThreshold; + Java_oracle_jrockit_jfr_VMJFR_setPeriod; + Java_oracle_jrockit_jfr_VMJFR_getPeriod; + Java_oracle_jrockit_jfr_VMJFR_descriptors; JNI_OnLoad; - local: - *; + local: + *; }; diff --git a/jdk/makefiles/mapfiles/libnio/mapfile-linux b/jdk/makefiles/mapfiles/libnio/mapfile-linux index d72244170b9..63c9cbf1443 100644 --- a/jdk/makefiles/mapfiles/libnio/mapfile-linux +++ b/jdk/makefiles/mapfiles/libnio/mapfile-linux @@ -39,7 +39,6 @@ SUNWprivate_1.1 { Java_sun_nio_ch_EPollArrayWrapper_epollCreate; Java_sun_nio_ch_EPollArrayWrapper_epollCtl; Java_sun_nio_ch_EPollArrayWrapper_epollWait; - Java_sun_nio_ch_EPollArrayWrapper_fdLimit; Java_sun_nio_ch_EPollArrayWrapper_init; Java_sun_nio_ch_EPollArrayWrapper_interrupt; Java_sun_nio_ch_EPollArrayWrapper_offsetofData; @@ -87,7 +86,9 @@ SUNWprivate_1.1 { Java_sun_nio_ch_IOUtil_configureBlocking; Java_sun_nio_ch_IOUtil_drain; Java_sun_nio_ch_IOUtil_fdVal; + Java_sun_nio_ch_IOUtil_fdLimit; Java_sun_nio_ch_IOUtil_initIDs; + Java_sun_nio_ch_IOUtil_iovMax; Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; diff --git a/jdk/makefiles/mapfiles/libnio/mapfile-solaris b/jdk/makefiles/mapfiles/libnio/mapfile-solaris index 4d86f28a566..5a4908e1f6d 100644 --- a/jdk/makefiles/mapfiles/libnio/mapfile-solaris +++ b/jdk/makefiles/mapfiles/libnio/mapfile-solaris @@ -36,7 +36,6 @@ SUNWprivate_1.1 { Java_sun_nio_ch_DatagramDispatcher_readv0; Java_sun_nio_ch_DatagramDispatcher_write0; Java_sun_nio_ch_DatagramDispatcher_writev0; - Java_sun_nio_ch_DevPollArrayWrapper_fdLimit; Java_sun_nio_ch_DevPollArrayWrapper_init; Java_sun_nio_ch_DevPollArrayWrapper_interrupt; Java_sun_nio_ch_DevPollArrayWrapper_poll0; @@ -74,8 +73,10 @@ SUNWprivate_1.1 { Java_sun_nio_ch_InheritedChannel_soType0; Java_sun_nio_ch_IOUtil_configureBlocking; Java_sun_nio_ch_IOUtil_drain; + Java_sun_nio_ch_IOUtil_fdLimit; Java_sun_nio_ch_IOUtil_fdVal; Java_sun_nio_ch_IOUtil_initIDs; + Java_sun_nio_ch_IOUtil_iovMax; Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; @@ -112,13 +113,13 @@ SUNWprivate_1.1 { Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_accept0; Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_initIDs; Java_sun_nio_ch_UnixAsynchronousSocketChannelImpl_checkConnect; - Java_sun_nio_ch_SolarisEventPort_init; - Java_sun_nio_ch_SolarisEventPort_portCreate; - Java_sun_nio_ch_SolarisEventPort_portClose; - Java_sun_nio_ch_SolarisEventPort_portAssociate; - Java_sun_nio_ch_SolarisEventPort_portGet; - Java_sun_nio_ch_SolarisEventPort_portGetn; - Java_sun_nio_ch_SolarisEventPort_portSend; + Java_sun_nio_ch_SolarisEventPort_port_1create; + Java_sun_nio_ch_SolarisEventPort_port_1close; + Java_sun_nio_ch_SolarisEventPort_port_1associate; + Java_sun_nio_ch_SolarisEventPort_port_1dissociate; + Java_sun_nio_ch_SolarisEventPort_port_1get; + Java_sun_nio_ch_SolarisEventPort_port_1getn; + Java_sun_nio_ch_SolarisEventPort_port_1send; Java_sun_nio_fs_GnomeFileTypeDetector_initializeGio; Java_sun_nio_fs_GnomeFileTypeDetector_probeUsingGio; Java_sun_nio_fs_GnomeFileTypeDetector_initializeGnomeVfs; diff --git a/jdk/makefiles/mkdemo/Makefile b/jdk/makefiles/mkdemo/Makefile deleted file mode 100644 index 4cbe431a884..00000000000 --- a/jdk/makefiles/mkdemo/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -# -# Copyright (c) 1997, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile for building all the demos -# - -BUILDDIR = .. -PRODUCT = demos -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = jni -SUBDIRS_desktop = -SUBDIRS_management = -SUBDIRS_misc = -SUBDIRS_tools = jvmti - -include $(BUILDDIR)/common/Subdirs.gmk - -TOPLEVEL_FILES = \ - $(DEMODIR)/README - -all build:: nbproject - $(SUBDIRS-loop) - -all build:: $(TOPLEVEL_FILES) - -nbproject: - $(RM) -r $(DEMODIR)/nbproject - $(MKDIR) -p $(DEMODIR) - ( $(CD) $(SHARE_SRC)/demo && $(TAR) -cf - \ - `$(FIND) nbproject $(SCM_DIRS_prune) -o -type f -print` ) | \ - ( $(CD) $(DEMODIR) && $(TAR) -xf - ) -ifndef OPENJDK - ( $(CD) $(CLOSED_SHARE_SRC)/demo && $(TAR) -cf - \ - `$(FIND) nbproject $(SCM_DIRS_prune) -o -type f -print` ) | \ - ( $(CD) $(DEMODIR) && $(TAR) -xf - ) -endif - -$(DEMODIR)/%: $(DEMOSRCDIR)/% - $(install-file) - -clean clobber:: - $(SUBDIRS-loop) - $(RM) -r $(DEMODIR) - $(RM) -r $(DEMOCLASSDIR) diff --git a/jdk/makefiles/mkdemo/jni/Makefile b/jdk/makefiles/mkdemo/jni/Makefile deleted file mode 100644 index b24a5f32ac6..00000000000 --- a/jdk/makefiles/mkdemo/jni/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 1999, 2010, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile for building the jni demo(s) -# - -BUILDDIR = ../.. -PRODUCT = demos -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = - -ifeq ($(PLATFORM),solaris) - SUBDIRS += Poller -endif - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/mkdemo/jni/Poller/Makefile b/jdk/makefiles/mkdemo/jni/Poller/Makefile deleted file mode 100644 index baf23e39c8d..00000000000 --- a/jdk/makefiles/mkdemo/jni/Poller/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (c) 1999, 2006, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Build Poller class demo. -# - -BUILDDIR = ../../.. -PRODUCT = demo/jni -DEMONAME = Poller -include $(BUILDDIR)/common/Defs.gmk - -DEMO_ROOT = $(PLATFORM_SRC)/demo/jni/$(DEMONAME) -DEMO_TOPFILES = ./README.txt -DEMO_MAINCLASS = Client -DEMO_NATIVECLASS= $(DEMONAME) -DEMO_DESTDIR = $(DEMODIR)/jni/$(DEMONAME) - -# -# Demo jar building rules. -# -include $(BUILDDIR)/common/Demo.gmk - diff --git a/jdk/makefiles/mkdemo/jvmti/Makefile b/jdk/makefiles/mkdemo/jvmti/Makefile deleted file mode 100644 index 88434cf464e..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -# -# Copyright (c) 2004, 2011, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile for building the jvmti demo(s) -# - -BUILDDIR = ../.. -PRODUCT = demos -include $(BUILDDIR)/common/Defs.gmk - -# Can be built in any order, the JRE version of hprof and java_crw_demo are -# really built in make/java. -# The hprof target here just delivers the sources and README files. -# The java_crw_demo and agent_util files are copied into each demo that -# uses them. -SUBDIRS = \ - hprof - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - -all build :: $(DEMODIR)/jvmti/index.html - -$(DEMODIR)/jvmti/index.html: $(SHARE_SRC)/demo/jvmti/index.html - $(install-file) - diff --git a/jdk/makefiles/mkdemo/jvmti/README.txt b/jdk/makefiles/mkdemo/jvmti/README.txt deleted file mode 100644 index 99e2a8f021d..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/README.txt +++ /dev/null @@ -1,58 +0,0 @@ -# -# Copyright (c) 2004, 2010, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -Instructions on adding a jvmti demo agent. - -Basically you want to mimic the jvmti demo agent "mtrace". - -* Create and populate a source directory at src/share/demo/jvmti - (Try and re-use code in agent_util area like src/share/demo/jvmti/mtrace) - (This should include a small README.txt document on what this demo is) - -* Make sure the appropriate "demo" copyright notice is added to all the - source files. - -* Edit src/share/demo/jvmti/index.html and add in reference to this demo. - -* Create make directory at make/mkdemo/jvmti - (Mimic make/mkdemo/jvmti/mtrace/Makefile) - -* Edit make/mkdemo/jvmti/Makefile and add in the new demo - -* Create test directory at test/demo/jvmti, create at least one test - (Use test/demo/jvmti/mtrace as a template) - -* Don't forget to check in all the new files - -* Build and create images (cd make && gnumake && gnumake images) - (Do this on Solaris, Linux, and at least one Windows platform) - -* Verify that browsing build/*/j2sdk-images/demo/jvmti looks right - -* Run the tests: cd test/demo/jvmti && runregress . - (Do this on Solaris, Linux, and at least one Windows platform) - -Contact: serviceability-dev@openjdk.java.net for more information or help. - diff --git a/jdk/makefiles/mkdemo/jvmti/hprof/Makefile b/jdk/makefiles/mkdemo/jvmti/hprof/Makefile deleted file mode 100644 index e2529192a8e..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/hprof/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright (c) 2004, 2010, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -BUILDDIR = ../../.. -PRODUCT = demo/jvmti -DEMONAME = hprof -include $(BUILDDIR)/common/Defs.gmk - -DEMO_ROOT = $(SHARE_SRC)/demo/jvmti/$(DEMONAME) -DEMO_TOPFILES = ./README.txt -DEMO_PSRCDIR = $(PLATFORM_SRC)/demo/jvmti/$(DEMONAME) -DEMO_DESTDIR = $(DEMODIR)/jvmti/$(DEMONAME) - -DEMO_OBJECTS = java_crw_demo.$(OBJECT_SUFFIX) - -ifeq ($(PLATFORM), windows) - EXTRA_LIBS += wsock32.lib winmm.lib -endif -ifeq ($(PLATFORM), solaris) - OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl -endif -ifeq ($(PLATFORM), linux) - OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl -lpthread -endif - -# -# Demo jar building rules. -# -include $(BUILDDIR)/common/Demo.gmk - diff --git a/jdk/makefiles/mkdemo/jvmti/mapfile-vers b/jdk/makefiles/mkdemo/jvmti/mapfile-vers deleted file mode 100644 index 5d5740463bc..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/mapfile-vers +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (c) 2004, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# Define public interface for a Java JVMTI agent library (Solaris & Linux). - -SUNWprivate_1.1 { - global: - Agent_OnLoad; - Agent_OnUnload; - local: - *; -}; diff --git a/jdk/makefiles/mkdemo/management/README.txt b/jdk/makefiles/mkdemo/management/README.txt deleted file mode 100644 index ab667a17078..00000000000 --- a/jdk/makefiles/mkdemo/management/README.txt +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright (c) 2004, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -Instructions on adding a java.lang.management demo. - -Basically you want to mimic the java.lang.management demo "FullThreadDump". - -* Create and populate a source directory at src/demo/management - (This should include a small README.txt document on what this demo is) - -* Make sure the appropriate "demo" copyright notice is added to all the - source files. - -* Edit src/share/demo/management/index.html and add in reference to this demo. - -* Create make directory at make/mkdemo/management - (Mimic make/mkdemo/management/FullThreadDump/Makefile) - -* Edit make/mkdemo/management/Makefile and add in the new demo - -* Create test directory at test/demo/management, create at least one test - (Use test/demo/management/FullThreadDump as a template) - -* Don't forget to put all files under SCM control - -* Build and create images (cd make && gnumake && gnumake images) - (Do this on Solaris, Linux, and at least one Windows platform) - -* Verify that browsing build/*/j2sdk-images/demo/management looks right - -* Run the tests: cd test/demo/management && runregress . - (Do this on Solaris, Linux, and at least one Windows platform) - -Contact: jk-svc-group@sun.com for more information or help. - diff --git a/jdk/makefiles/sun/jkernel/Makefile b/jdk/makefiles/sun/jkernel/Makefile deleted file mode 100644 index 5abf87b57f5..00000000000 --- a/jdk/makefiles/sun/jkernel/Makefile +++ /dev/null @@ -1,94 +0,0 @@ -# -# Copyright (c) 2008, 2010, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -BUILDDIR = ../.. -MODULE = jkernel -PACKAGE = sun.jkernel -LIBRARY = jkernel -PRODUCT = sun - -include $(BUILDDIR)/common/Defs.gmk - -# -# Use highest optimization level -# -_OPT = $(CC_HIGHEST_OPT) - -# -# Java source files -# -include FILES_java.gmk -AUTO_FILES_JAVA_DIRS = sun/jkernel - -LOCALE_SUFFIXES = $(JDK_LOCALES) - -# -# Native source files -# - -ifeq ($(ARCH_DATA_MODEL), 32) - -ifeq ($(PLATFORM), windows) - -# If this is the VS Express compiler it will lack vc/atlmfc/ -ATL_MFC_DIR :=$(call DirExists,$(COMPILER_PATH)/../atlmfc,,) - -ifneq ($(ATL_MFC_DIR),) - -include FILES_c_windows.gmk - -vpath %.cpp $(PLATFORM_SRC)/native/sun/jkernel - - -VERSIONINFO_RESOURCE = $(PLATFORM_SRC)/native/sun/jkernel/kernel.rc - -LDLIBS += urlmon.lib wininet.lib shlwapi.lib version.lib comctl32.lib gdi32.lib -def:$(PLATFORM_SRC)/native/sun/jkernel/kernel.def - -include $(BUILDDIR)/common/Library.gmk - -endif - -endif - -endif - -# -# Resources -# -include $(JDK_TOPDIR)/makefiles/common/internal/Resources.gmk - -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk - -# If extra compression is going to be available in the deploy build enable -# its use here by defining the JRE-relative pathname of the shared library - -ifeq ($(PLATFORM), windows) - ifdef EXTRA_COMP_INSTALL_PATH - CPPFLAGS += -DEXTRA_COMP_INSTALL_PATH=$(EXTRA_COMP_INSTALL_PATH) - endif -endif diff --git a/jdk/makefiles/sun/security/ec/Makefile b/jdk/makefiles/sun/security/ec/Makefile deleted file mode 100644 index d09dbecf629..00000000000 --- a/jdk/makefiles/sun/security/ec/Makefile +++ /dev/null @@ -1,333 +0,0 @@ -# -# Copyright (c) 2009, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile for building sunec.jar and sunec native library. -# -# This file was derived from make/com/sun/crypto/provider/Makefile. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. For OpenJDK, -# the jar files built here are installed directly into the OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built, signed, and then the resulting jar files MUST BE CHECKED -# INTO THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT -# BE FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual, plus the native libraries. -# If OpenJDK, installs sunec.jar. -# If JDK, installs prebuilt -# sunec.jar. -# -# jar Builds/installs sunec.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds sunec.jar -# (does not sign/install) -# -# install-jar Alias for "jar" above. -# -# Other targets (JDK only): -# -# sign Alias for sign-jar -# sign-jar Builds/signs sunec.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.ec -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS=false -JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL=true -include $(BUILDDIR)/common/Defs.gmk - -# -# Location for the newly built classfiles. -# -CLASSDESTDIR = $(TEMPDIR)/classes - -# -# Java files -# -AUTO_FILES_JAVA_DIRS = $(PKGDIR) - -# -# Exclude the sources that get built by ../other/Makefile -# -AUTO_JAVA_PRUNE = \ - ECKeyFactory.java \ - ECParameters.java \ - ECPrivateKeyImpl.java \ - ECPublicKeyImpl.java \ - NamedCurve.java - -# -# Some licensees do not get the native ECC sources, but we still need to -# be able to build "all" for them. Check here to see if the sources are -# available. If not, then skip them. -# - -NATIVE_ECC_AVAILABLE := $(shell \ - if [ -d $(SHARE_SRC)/native/$(PKGDIR)/impl ] ; then \ - $(ECHO) true; \ - else \ - $(ECHO) false; \ - fi) - -ifeq ($(NATIVE_ECC_AVAILABLE), true) - - LIBRARY = sunec - - # - # Java files that define native methods - # - FILES_export = \ - $(PKGDIR)/ECDHKeyAgreement.java \ - $(PKGDIR)/ECDSASignature.java \ - $(PKGDIR)/ECKeyPairGenerator.java - - JAVAHFLAGS = -bootclasspath \ - "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)$(JCE_PATH)" - - # - # C and C++ files - # - include FILES_c.gmk - - FILES_cpp = ECC_JNI.cpp - - CPLUSPLUSLIBRARY=true - - FILES_m = mapfile-vers - - # - # Find native code - # - vpath %.cpp $(SHARE_SRC)/native/$(PKGDIR) - - vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/impl - - # - # Find include files - # - OTHER_INCLUDES += -I$(SHARE_SRC)/native/$(PKGDIR)/impl - - # - # Compiler flags - # - OTHER_CFLAGS += -DMP_API_COMPATIBLE -DNSS_ECC_MORE_THAN_SUITE_B - - # - # Libraries to link - # - ifneq ($(PLATFORM), windows) - OTHER_LDLIBS = $(LIBCXX) - endif - - include $(BUILDDIR)/common/Mapfile-vers.gmk - - include $(BUILDDIR)/common/Library.gmk - -else # NATIVE_ECC_AVAILABLE - - include $(BUILDDIR)/common/Classes.gmk - -endif # NATIVE_ECC_AVAILABLE - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, -# they will be placed in the appropriate area. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - -# -# Rules -# - -ifdef OPENJDK -all: build-jar install-jar -else -all: build-jar install-prebuilt - $(build-warning) -endif - - -# ===================================================== -# Build the unsigned sunec.jar file. -# - -JAR_DESTFILE = $(EXTDIR)/sunec.jar - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/sunec.jar - -# -# Build sunec.jar. -# -$(UNSIGNED_DIR)/sunec.jar: build - $(prep-target) - $(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - -ifndef OPENJDK -# ===================================================== -# Sign the provider jar file. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed - -sign: sign-jar - -sign-jar: $(SIGNED_DIR)/sunec.jar - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/sunec.jar: $(UNSIGNED_DIR)/sunec.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/sunec.jar: - @if [ ! -r $(UNSIGNED_DIR)/sunec.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunec.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/sunec.jar) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, etc. -# - -release: $(SIGNED_DIR)/sunec.jar - $(RM) $(JCE_BUILD_DIR)/release/sunec.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/sunec.jar $(JCE_BUILD_DIR)/release - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install sunec.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/sunec.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/sunec.jar -endif - $(install-file) - -ifndef OPENJDK -install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt SunEC provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/ec/sunec.jar $(JAR_DESTFILE) -endif - - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - -.PHONY: build-jar jar install-jar -ifndef OPENJDK -.PHONY: sign sign-jar release install-prebuilt -endif diff --git a/jdk/makefiles/sun/security/pkcs11/FILES_c.gmk b/jdk/makefiles/sun/security/pkcs11/FILES_c.gmk deleted file mode 100644 index 328547a3f4a..00000000000 --- a/jdk/makefiles/sun/security/pkcs11/FILES_c.gmk +++ /dev/null @@ -1,41 +0,0 @@ -# -# Copyright (c) 2003, 2007, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -FILES_c = \ - j2secmod.c \ - j2secmod_md.c \ - p11_convert.c \ - p11_crypt.c \ - p11_digest.c \ - p11_dual.c \ - p11_general.c \ - p11_keymgmt.c \ - p11_mutex.c \ - p11_objmgmt.c \ - p11_sessmgmt.c \ - p11_sign.c \ - p11_util.c \ - p11_md.c - diff --git a/jdk/makefiles/sun/security/pkcs11/Makefile b/jdk/makefiles/sun/security/pkcs11/Makefile deleted file mode 100644 index b94a6dbc109..00000000000 --- a/jdk/makefiles/sun/security/pkcs11/Makefile +++ /dev/null @@ -1,313 +0,0 @@ -# -# Copyright (c) 2003, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile for building sunpkcs11.jar and native libraries. -# -# This file was derived from make/com/sun/crypto/provider/Makefile. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. For OpenJDK, -# the jar files built here are installed directly into the OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built, signed, and then the resulting jar files MUST BE CHECKED -# INTO THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT -# BE FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual, plus the native libraries. -# If OpenJDK, installs sunpkcs11.jar. -# If JDK, installs prebuilt -# sunpkcs11.jar. -# -# jar Builds/installs sunpkcs11.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds sunpkcs11.jar -# (does not sign/install) -# -# install-jar Alias for "jar" above. -# -# Other targets (JDK only): -# -# sign Alias for sign-jar -# sign-jar Builds/signs sunpkcs11.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.pkcs11 -LIBRARY = j2pkcs11 -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing/obfuscation) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS=false -JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL=true -include $(BUILDDIR)/common/Defs.gmk - -# -# C and Java Files -# -include FILES_c.gmk - -# -# Subdirectories of these are automatically included. -# -AUTO_FILES_JAVA_DIRS = sun/security/pkcs11 - -# -# Java files that define native methods -# -FILES_export = \ - sun/security/pkcs11/wrapper/PKCS11.java \ - sun/security/pkcs11/Secmod.java - -# -# Find native code -# -vpath %.c \ - $(SHARE_SRC)/native/sun/security/pkcs11/wrapper \ - $(PLATFORM_SRC)/native/sun/security/pkcs11/wrapper \ - -# -# Find include files -# -OTHER_INCLUDES += \ - -I$(SHARE_SRC)/native/sun/security/pkcs11/wrapper \ - -I$(PLATFORM_SRC)/native/sun/security/pkcs11/wrapper - -# -# Rules -# -CLASSDESTDIR = $(TEMPDIR)/classes -JAVAHFLAGS = -bootclasspath \ - "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)$(JCE_PATH)" - -include $(BUILDDIR)/common/Mapfile-vers.gmk - -include $(BUILDDIR)/common/Library.gmk - -# -# Libraries to link -# -ifneq ($(PLATFORM), windows) - OTHER_LDLIBS = $(LIBDL) -endif - -# Other config files -SUNPKCS11_CFG = - -ifeq ($(PLATFORM), solaris) -#SUNPKCS11_CFG = sunpkcs11-cfg -endif # PLATFORM - -SUNPKCS11_CFG_SRC = $(TOPDIR)/src/share/lib/security/sunpkcs11-solaris.cfg -SUNPKCS11_CFG_BUILD = $(LIBDIR)/security/sunpkcs11-solaris.cfg - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, -# they will be placed in the appropriate area. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -# -# Rules -# - -ifdef OPENJDK -all: $(SUNPKCS11_CFG) build-jar install-jar -else -all: $(SUNPKCS11_CFG) build-jar install-prebuilt - $(build-warning) -endif - -sunpkcs11-cfg: $(SUNPKCS11_CFG_BUILD) - -$(SUNPKCS11_CFG_BUILD): $(SUNPKCS11_CFG_SRC) - $(install-file) - -include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - - -# ===================================================== -# Build the unsigned sunpkcs11.jar file. -# - -JAR_DESTFILE = $(EXTDIR)/sunpkcs11.jar - -# -# The sunpkcs11.jar needs to be in the extension class directory, -# therefore none of its classes can appear in $(CLASSBINDIR). -# Currently no one is using any of the PKCS11 internals, so these files -# should not have been built. -# - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/sunpkcs11.jar - -# -# Build sunpkcs11.jar. -# -$(UNSIGNED_DIR)/sunpkcs11.jar: build - $(prep-target) - $(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - -ifndef OPENJDK -# ===================================================== -# Sign the provider jar file. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed - -sign: sign-jar - -sign-jar: $(SIGNED_DIR)/sunpkcs11.jar - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/sunpkcs11.jar: $(UNSIGNED_DIR)/sunpkcs11.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/sunpkcs11.jar: - @if [ ! -r $(UNSIGNED_DIR)/sunpkcs11.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunpkcs11.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/sunpkcs11.jar) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, etc. -# - -release: $(SIGNED_DIR)/sunpkcs11.jar - $(RM) $(JCE_BUILD_DIR)/release/sunpkcs11.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/sunpkcs11.jar $(JCE_BUILD_DIR)/release - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install sunpkcs11.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/sunpkcs11.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/sunpkcs11.jar -endif - $(install-file) - -ifndef OPENJDK -install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt SunPKCS11 provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/pkcs11/sunpkcs11.jar $(JAR_DESTFILE) -endif - - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - $(RM) $(SUNPKCS11_CFG_BUILD) - -.PHONY: build-jar jar install-jar -ifndef OPENJDK -.PHONY: sign sign-jar release install-prebuilt -endif diff --git a/jdk/makefiles/sun/security/pkcs11/mapfile-vers b/jdk/makefiles/sun/security/pkcs11/mapfile-vers deleted file mode 100644 index 7301c11417d..00000000000 --- a/jdk/makefiles/sun/security/pkcs11/mapfile-vers +++ /dev/null @@ -1,110 +0,0 @@ -# -# Copyright (c) 2003, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# Define public interface. - -SUNWprivate_1.1 { - global: - JNI_OnLoad; - Java_sun_security_pkcs11_wrapper_PKCS11_initializeLibrary; - Java_sun_security_pkcs11_wrapper_PKCS11_finalizeLibrary; - Java_sun_security_pkcs11_wrapper_PKCS11_connect; - Java_sun_security_pkcs11_wrapper_PKCS11_disconnect; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Initialize; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Finalize; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetInfo; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetSlotList; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetSlotInfo; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetTokenInfo; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetMechanismList; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetMechanismInfo; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1InitToken; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1InitPIN; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1SetPIN; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1OpenSession; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1CloseSession; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1CloseAllSessions; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetSessionInfo; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetOperationState; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SetOperationState; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Login; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Logout; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1CreateObject; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1CopyObject; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DestroyObject; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetObjectSize; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetAttributeValue; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SetAttributeValue; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1FindObjectsInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1FindObjects; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1FindObjectsFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1EncryptInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Encrypt; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1EncryptUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1EncryptFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DecryptInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Decrypt; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DecryptUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DecryptFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestSingle; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestKey; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Sign; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignRecoverInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignRecover; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1VerifyInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Verify; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1VerifyUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1VerifyFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1VerifyRecoverInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1VerifyRecover; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestEncryptUpdate; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1DecryptDigestUpdate; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignEncryptUpdate; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1DecryptVerifyUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GenerateKey; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GenerateKeyPair; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1WrapKey; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1UnwrapKey; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DeriveKey; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SeedRandom; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GenerateRandom; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetFunctionStatus; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1CancelFunction; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1WaitForSlotEvent; - Java_sun_security_pkcs11_Secmod_nssGetLibraryHandle; - Java_sun_security_pkcs11_Secmod_nssLoadLibrary; - Java_sun_security_pkcs11_Secmod_nssVersionCheck; - Java_sun_security_pkcs11_Secmod_nssInit; - Java_sun_security_pkcs11_Secmod_nssGetModuleList; - - local: - *; -}; From f7b99ca7f6a2a305c855f458f13bd5e8399a6193 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Tue, 3 Jul 2012 16:11:12 -0700 Subject: [PATCH 60/83] 7181504: Update of latest build-infra Makefiles Reviewed-by: ohair --- common/autoconf/autogen.sh | 18 +- common/autoconf/build-aux/config.guess | 1553 +-- common/autoconf/builddeps.conf.example | 8 +- common/autoconf/builddeps.m4 | 62 +- common/autoconf/configure | 16836 +---------------------- common/autoconf/configure.ac | 2956 +--- common/autoconf/cores.m4 | 103 - common/autoconf/help.m4 | 105 +- common/autoconf/platform.m4 | 521 +- common/autoconf/spec.gmk.in | 150 +- common/bin/compareimage.sh | 60 +- common/bin/diffexec.sh | 17 +- common/bin/diffjarzip.sh | 6 +- common/bin/difflib.sh | 24 +- common/makefiles/IdlCompilation.gmk | 3 +- common/makefiles/JavaCompilation.gmk | 31 +- common/makefiles/MakeBase.gmk | 1 + common/makefiles/Makefile | 233 +- common/makefiles/NativeCompilation.gmk | 406 +- common/makefiles/RMICompile.gmk | 103 - 20 files changed, 1233 insertions(+), 21963 deletions(-) delete mode 100644 common/autoconf/cores.m4 delete mode 100644 common/makefiles/RMICompile.gmk diff --git a/common/autoconf/autogen.sh b/common/autoconf/autogen.sh index 5f6937c52f7..ce56d2719d6 100644 --- a/common/autoconf/autogen.sh +++ b/common/autoconf/autogen.sh @@ -22,5 +22,19 @@ # questions. # -autoconf -W all configure.ac > configure -rm -rf config.status config.log autom4te.cache +script_dir=`dirname $0` +closed_script_dir="$script_dir/../../jdk/make/closed/autoconf" + +# Create a timestamp as seconds since epoch +TIMESTAMP=`date +%s` + +cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | autoconf -W all -I$script_dir - > $script_dir/generated-configure.sh +rm -rf autom4te.cache + +if test -e $closed_script_dir/closed-hook.m4; then + # We have closed sources available; also generate configure script + # with closed hooks compiled in. + cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | \ + sed -e "s|AC_DEFUN_ONCE(\[CLOSED_HOOK\])|m4_include([$closed_script_dir/closed-hook.m4])|" | autoconf -W all -I$script_dir - > $closed_script_dir/generated-configure.sh + rm -rf autom4te.cache +fi diff --git a/common/autoconf/build-aux/config.guess b/common/autoconf/build-aux/config.guess index e69905d5201..389eedfc1d1 100644 --- a/common/autoconf/build-aux/config.guess +++ b/common/autoconf/build-aux/config.guess @@ -1,1531 +1,38 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -# Free Software Foundation, Inc. - -timestamp='2008-01-23' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. +#!/bin/sh # -# This program 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 for more details. +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. +# 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. # -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# 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). # -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. +# 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. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. -me=`echo "$0" | sed -e 's,.*/,,'` +# This is a wrapper for the config.guess from autoconf. The latter does not properly +# detect amd64 systems, since that require isainfo instead of uname. Instead of patching +# the autoconf system (which might easily get lost in a future update), we wrap it and +# fix the broken property, if needed. -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 +DIR=`dirname $0` +OUT=`. $DIR/autoconf-config.guess` +echo $OUT | grep i386-pc-solaris > /dev/null 2> /dev/null +if test $? = 0; then + # isainfo -n returns either i386 or amd64 on Intel systems + REAL_CPU=`isainfo -n` + OUT=$REAL_CPU`echo $OUT | sed -e 's/[^-]*//'` fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T | authenticamd) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - echo "int main(){}" > $dummy.c - if test "`$CC_FOR_BUILD -o $dummy $dummy.c; file $dummy | grep -c x86_64`" = 1 ; then - UNAME_PROCESSOR=x86_64 - fi - case $UNAME_PROCESSOR in - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: +echo $OUT diff --git a/common/autoconf/builddeps.conf.example b/common/autoconf/builddeps.conf.example index f285ffb4a29..d97033611f7 100644 --- a/common/autoconf/builddeps.conf.example +++ b/common/autoconf/builddeps.conf.example @@ -31,11 +31,11 @@ # Translate a configuration triplet/quadruplet into something # known by this configuration file. -# If no rewrite was found, then rewritten_host=${host} +# If no rewrite was found, then rewritten_target=${OPENJDK_TARGET_SYSTEM} REWRITE_i686_pc_linux_gnu=i686-unknown-linux-gnu REWRITE_i386_pc_solaris2_10=i686-sun-solaris2_10 -# The needed cups builddeps are host independent header files. +# The needed cups builddeps are platform independent header files. # I.e. they need not be part of the devkit. builddep_cups=lib/cups_1_3_9.zip builddep_cups_CFLAGS=-I${depdir} @@ -44,10 +44,10 @@ builddep_cups_CFLAGS=-I${depdir} # for the build platform. builddep_devkit=sdk/sdk-${rewritten_build}-20110921.tar.gz -# The freetype dependency is partyl host dependent. +# The freetype dependency is partly platform dependent. # It is stored inside the sys-root. builddep_freetype2=sdk/sdk-${rewritten_build}-20110921.tar.gz -builddep_freetype2_CFLAGS=-I${depdir}/${rewritten_host}/sys-root/usr/include/freetype2 +builddep_freetype2_CFLAGS=-I${depdir}/${rewritten_target}/sys-root/usr/include/freetype2 builddep_freetype2_LIBS=-lfreetype # There are many other build dependencies, but they are implicitly diff --git a/common/autoconf/builddeps.m4 b/common/autoconf/builddeps.m4 index 1be92ecf870..31797070da1 100644 --- a/common/autoconf/builddeps.m4 +++ b/common/autoconf/builddeps.m4 @@ -23,7 +23,7 @@ # questions. # -AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS], +AC_DEFUN_ONCE([BDEPS_SCAN_FOR_BUILDDEPS], [ define(LIST_OF_BUILD_DEPENDENCIES,) if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then @@ -50,27 +50,27 @@ AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS], AC_MSG_ERROR([Could not find any builddeps.conf at all!]) fi fi - # Create build and host names that use _ instead of "-" and ".". + # Create build and target names that use _ instead of "-" and ".". # This is necessary to use them in variable names. - build_var=`echo ${build} | tr '-' '_' | tr '.' '_'` - host_var=`echo ${host} | tr '-' '_' | tr '.' '_'` - # Extract rewrite information for build and host + build_var=`echo ${OPENJDK_BUILD_SYSTEM} | tr '-' '_' | tr '.' '_'` + target_var=`echo ${OPENJDK_TARGET_SYSTEM} | tr '-' '_' | tr '.' '_'` + # Extract rewrite information for build and target eval rewritten_build=\${REWRITE_${build_var}} if test "x$rewritten_build" = x; then - rewritten_build=${build} + rewritten_build=${OPENJDK_BUILD_SYSTEM} echo Build stays the same $rewritten_build else echo Rewriting build for builddeps into $rewritten_build fi - eval rewritten_host=\${REWRITE_${host_var}} - if test "x$rewritten_host" = x; then - rewritten_host=${host} - echo Host stays the same $rewritten_host + eval rewritten_target=\${REWRITE_${target_var}} + if test "x$rewritten_target" = x; then + rewritten_target=${OPENJDK_TARGET_SYSTEM} + echo Target stays the same $rewritten_target else - echo Rewriting host for builddeps into $rewritten_host + echo Rewriting target for builddeps into $rewritten_target fi rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` - rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'` + rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'` fi AC_CHECK_PROGS(BDEPS_UNZIP, [7z unzip]) if test "x$BDEPS_UNZIP" = x7z; then @@ -127,11 +127,11 @@ AC_DEFUN([BDEPS_CHECK_MODULE], if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then # Source the builddeps file again, to make sure it uses the latest variables! . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} + # Look for a target and build machine specific resource! + eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_$2_HOST_${rewritten_host_var}} + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_$2_TARGET_${rewritten_target_var}} fi if test "x$resource" = x; then # Ok, lets instead look for a build specific resource @@ -228,3 +228,33 @@ AC_DEFUN([BDEPS_FETCH], $5=$installdir fi ]) + +AC_DEFUN_ONCE([BDEPS_CONFIGURE_BUILDDEPS], +[ +AC_ARG_WITH(builddeps-conf, [AS_HELP_STRING([--with-builddeps-conf], + [use this configuration file for the builddeps])]) + +AC_ARG_WITH(builddeps-server, [AS_HELP_STRING([--with-builddeps-server], + [download and use build dependencies from this server url, e.g. --with-builddeps-server=ftp://example.com/dir])]) + +AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir], + [store downloaded build dependencies here @<:@d/localhome/builddeps@:>@])], + [], + [with_builddeps_dir=/localhome/builddeps]) + +AC_ARG_WITH(builddeps-group, [AS_HELP_STRING([--with-builddeps-group], + [chgrp the downloaded build dependencies to this group])]) + +AC_ARG_ENABLE([list-builddeps], [AS_HELP_STRING([--enable-list-builddeps], + [list all build dependencies known to the configure script])], + [LIST_BUILDDEPS="${enableval}"], [LIST_BUILDDEPS='no']) + +if test "x$LIST_BUILDDEPS" = xyes; then + echo + echo List of build dependencies known to the configure script, + echo that can be used in builddeps.conf files: + cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODUL[E]\( | cut -f 2 -d ',' | tr -d ' ' | sort + echo + exit 1 +fi +]) diff --git a/common/autoconf/configure b/common/autoconf/configure index 68f93765ea6..85861c9ce1b 100644 --- a/common/autoconf/configure +++ b/common/autoconf/configure @@ -1,16781 +1,121 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for openjdk version-0.1. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## +#!/bin/sh -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: build-infra-dev@openjdk.java.net about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='openjdk' -PACKAGE_TARNAME='openjdk' -PACKAGE_VERSION='version-0.1' -PACKAGE_STRING='openjdk version-0.1' -PACKAGE_BUGREPORT='build-infra-dev@openjdk.java.net' -PACKAGE_URL='' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='LTLIBOBJS -LIBOBJS -CACERTS_FILE -TEST_IN_BUILD -SALIB_NAME -OS_VERSION_MICRO -OS_VERSION_MINOR -OS_VERSION_MAJOR -LIBCXX -LDFLAGS_JDKEXE_SUFFIX -LDFLAGS_JDKLIB_SUFFIX -LDFLAGS_JDKEXE -LDFLAGS_JDKLIB -CXXFLAGS_JDKEXE -CXXFLAGS_JDKLIB -CFLAGS_JDKEXE -CFLAGS_JDKLIB -PACKAGE_PATH -IMAGES_MAKE_ARGS -IMAGES_OUTPUTDIR -JDK_MAKE_ARGS -JDK_OUTPUTDIR -HOTSPOT_MAKE_ARGS -HOTSPOT_DIST -HOTSPOT_OUTPUTDIR -JAXWS_MAKE_ARGS -JAXWS_DIST -JAXWS_OUTPUTDIR -JAXP_MAKE_ARGS -JAXP_DIST -JAXP_OUTPUTDIR -CORBA_MAKE_ARGS -CORBA_DIST -CORBA_OUTPUTDIR -LANGTOOLS_MAKE_ARGS -LANGTOOLS_DIST -LANGTOOLS_OUTPUTDIR -CXX_FLAG_DEPS -C_FLAG_DEPS -CXX_O_FLAG_NONE -CXX_O_FLAG_NORM -CXX_O_FLAG_HI -CXX_O_FLAG_HIGHEST -C_O_FLAG_NONE -C_O_FLAG_NORM -C_O_FLAG_HI -C_O_FLAG_HIGHEST -DISABLE_NIMBUS -GENERATE_DOCS -ENABLE_DOCS -LIBDL -LIBM -USE_EXTERNAL_LIBZ -USE_EXTERNAL_LIBGIF -USE_EXTERNAL_LIBJPEG -PULSE_LIBS -PULSE_CFLAGS -LIBPULSE_LIBS -LIBPULSE_CFLAGS -ALSA_LIBS -ALSA_CFLAGS -FREETYPE2_LIB_PATH -USING_SYSTEM_FT_LIB -FREETYPE2_LIBS -FREETYPE2_CFLAGS -CUPS_LIBS -CUPS_CFLAGS -OPENWIN_HOME -X_EXTRA_LIBS -X_LIBS -X_PRE_LIBS -X_CFLAGS -XMKMF -JAVAC_USE_MODE -JAVAC_USE_DEPS -JAVAC_SERVER_CORES -JAVAC_SERVERS -JAVAC_USE_REMOTE -SERVER_JAVA -BOOT_JDK_JVMARGS -OVERRIDE_SRC_ROOT -ADD_SRC_ROOT -NATIVE2ASCII -RMIC -JAR -JAVAH -JAVAC_FLAGS -JAVAC -BOOT_JDK_SOURCETARGET -JAVA -BOOT_TOOLSJAR -BOOT_RTJAR -BOOT_JDK -JAVA_CHECK -JAVAC_CHECK -ENDIAN -POST_MCS_CMD -POST_STRIP_CMD -SET_SHARED_LIBRARY_ORIGIN -CXX_FLAG_REORDER -C_FLAG_REORDER -SET_SHARED_LIBRARY_MAPFILE -SET_SHARED_LIBRARY_NAME -SHARED_LIBRARY_FLAGS -EXE_SUFFIX -STATIC_LIBRARY_SUFFIX -SHARED_LIBRARY_SUFFIX -LIBRARY_PREFIX -STATIC_LIBRARY -SHARED_LIBRARY -OBJ_SUFFIX -USE_PRECOMPILED_HEADER -ARCH_DATA_MODEL -LP64 -BUILD_LOG_WRAPPER -BUILD_LOG -CCACHE -UNCYGDRIVE -MCS -STRIP -NM -ASFLAGS -AS -CXXCPP -CPP -COMPILER_TYPE -RC_FLAGS -DUMPBIN -WINAR -RC -MT -WINLD -ARFLAGS -AR -LDEXECXX -LDCXX -LDEXE -LD -ac_ct_OBJC -OBJCFLAGS -OBJC -ac_ct_CXX -CXXFLAGS -CXX -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -HOSTCXX -HOSTCC -HOST_CXX -HOST_CC -DEFINE_CROSS_COMPILE_ARCH -AR_OUT_OPTION -LD_OUT_OPTION -EXE_OUT_OPTION -CC_OUT_OPTION -SYS_ROOT -BDEPS_FTP -BDEPS_UNZIP -PKG_CONFIG -JDK_TOPDIR -HOTSPOT_TOPDIR -JAXWS_TOPDIR -JAXP_TOPDIR -CORBA_TOPDIR -LANGTOOLS_TOPDIR -OUTPUT_ROOT -CONF_NAME -SPEC -MSVCR100DLL -CHECK_FOR_VCINSTALLDIR -SETUPDEVENV -COOKED_BUILD_NUMBER -FULL_VERSION -RELEASE -JDK_VERSION -RUNTIME_NAME -COPYRIGHT_YEAR -COMPANY_NAME -JDK_RC_PLATFORM_NAME -PRODUCT_SUFFIX -PRODUCT_NAME -LAUNCHER_NAME -MILESTONE -JDK_BUILD_NUMBER -JDK_UPDATE_VERSION -JDK_MICRO_VERSION -JDK_MINOR_VERSION -JDK_MAJOR_VERSION -BUILD_VARIANT_RELEASE -DEBUG_CLASSFILES -FASTDEBUG -VARIANT -DEBUG_LEVEL -JVM_VARIANT_ZEROSHARK -JVM_VARIANT_ZERO -JVM_VARIANT_KERNEL -JVM_VARIANT_CLIENT -JVM_VARIANT_SERVER -JVM_VARIANTS -BUILD_HEADLESS_ONLY -BUILD_HEADLESS -SUPPORT_HEADFUL -SUPPORT_HEADLESS -JDK_VARIANT -MINIMIZE_RAM_USAGE -JAVASE_EMBEDDED -JIGSAW -SET_OPENJDK -PATH_SEP -CYGPATH -SRC_ROOT -MEMORY_SIZE -CONCURRENT_BUILD_JOBS -NUM_CORES -DATE_WHEN_CONFIGURED -REQUIRED_OS_VERSION -REQUIRED_OS_NAME -LEGACY_BUILD_CPU3 -LEGACY_BUILD_CPU2 -LEGACY_BUILD_CPU1 -BUILD_CPU_ENDIAN -BUILD_CPU_BITS -BUILD_CPU_ARCH -BUILD_CPU -LEGACY_BUILD_OS_API -BUILD_OS_API -BUILD_OS_FAMILY -BUILD_OS -LEGACY_HOST_CPU3 -LEGACY_HOST_CPU2 -LEGACY_HOST_CPU1 -HOST_CPU_ENDIAN -HOST_CPU_BITS -HOST_CPU_ARCH -HOST_CPU -LEGACY_HOST_OS_API -HOST_OS_API -HOST_OS_FAMILY -HOST_OS -BUILD -HOST -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -HG -FILE -EXPR -READELF -OTOOL -LDD -UNZIP -ZIP -XARGS -WC -TOUCH -TR -TEE -TAIL -TAR -SORT -SH -SED -RM -THEPWDCMD -PRINTF -NAWK -MV -MKDIR -MAKE -LS -LN -HEAD -FIND_DELETE -FIND -FGREP -EGREP -GREP -ECHO -DIFF -DF -DATE -CUT -CPIO -CP -CHMOD -CAT -AWK -READLINK -CONFIGURE_COMMAND_LINE -PKGHANDLER -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -with_data_model -with_num_cores -with_memory_size -enable_openjdk_only -enable_jigsaw -with_jdk_variant -enable_headful -with_jvm_variants -enable_debug -with_debug_level -with_msvcr100dll -with_builddeps_conf -with_builddeps_server -with_builddeps_dir -with_builddeps_group -enable_list_builddeps -with_sys_root -enable_ccache -with_ccache_dir -enable_precompiled_headers -with_boot_jdk -with_add_source_root -with_override_source_root -with_adds_and_overrides -with_override_langtools -with_override_corba -with_override_jaxp -with_override_jaxws -with_override_hotspot -with_override_jdk -with_boot_jdk_jvmargs -with_server_java -enable_javac_server -with_javac_server_cores -enable_javac_deps -enable_javac_multi_core -enable_macosx_runtime_support -with_x -with_cups -with_cups_include -with_cups_lib -with_freetype -with_alsa -with_alsa_include -with_alsa_lib -with_pulse -with_pulse_include -with_pulse_lib -enable_docs -enable_nimbus -enable_static_link_stdc__ -enable_hotspot_test_in_build -with_cacerts_file -' - ac_precious_vars='build_alias -host_alias -target_alias -PKG_CONFIG -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -OBJC -OBJCFLAGS -CPP -CXXCPP -XMKMF -FREETYPE2_CFLAGS -FREETYPE2_LIBS -ALSA_CFLAGS -ALSA_LIBS -LIBPULSE_CFLAGS -LIBPULSE_LIBS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures openjdk version-0.1 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/openjdk] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -X features: - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of openjdk version-0.1:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-openjdk-only build OpenJDK regardless of the presence of closed - repositories [disabled] - --enable-jigsaw build Jigsaw images (not yet available) [disabled] - --disable-headful build headful support (graphical UI support) - [enabled] - --enable-debug set the debug level to fastdebug (shorthand for - --with-debug-level=fastdebug) [disabled] - --enable-list-builddeps list all build dependencies known to the configure - script - --disable-ccache use ccache to speed up recompilations [enabled] - --disable-precompiled-headers - use precompiled headers when compiling C++ [enabled] - --enable-javac-server enable the shared javac server during the build - process [disabled] - --enable-javac-deps enable the dependency tracking between Java packages - [disabled] - --enable-javac-multi-core - compile Java packages concurrently [disabled] - --disable-macosx-runtime-support - disable the use of MacOSX Java runtime support - framework [enabled] - --enable-docs enable generation of Javadoc documentation - [disabled] - --disable-nimbus disable Nimbus L&F [enabled] - --disable-static-link-stdc++ - disable static linking of the C++ runtime on Linux - [enabled] - --enable-hotspot-test-in-build - enable running of Queens test after Hotspot build - (not yet available) [disabled] - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-data-model build 32-bit or 64-bit binaries (for platforms that - support it), e.g. --with-data-model=32 [guessed] - --with-num-cores number of cores in the build system, e.g. - --with-num-cores=8 [probed] - --with-memory-size memory (in MB) available in the build system, e.g. - --with-memory-size=1024 [probed] - --with-jdk-variant JDK variant to build (normal, embedded) [normal] - --with-jvm-variants JVM variants (separated by commas) to build (server, - client, kernel, zero, zeroshark) [server] - --with-debug-level set the debug level (release, fastdebug, slowdebug) - [release] - --with-msvcr100dll copy this msvcr100.dll into the built JDK - --with-builddeps-conf use this configuration file for the builddeps - --with-builddeps-server download and use build dependencies from this server - url, e.g. - --with-builddeps-server=ftp://example.com/dir - --with-builddeps-dir store downloaded build dependencies here - [d/localhome/builddeps] - --with-builddeps-group chgrp the downloaded build dependencies to this - group - --with-sys-root pass this sys-root to the compilers and linker - (useful if the sys-root encoded in the cross - compiler tools is incorrect) - --with-ccache-dir where to store ccache files [~/.ccache] - --with-boot-jdk path to Boot JDK (used to bootstrap build) [probed] - --with-add-source-root for each and every source directory, look in this - additional source root for the same directory; if it - exists and have files in it, include it in the build - --with-override-source-root - for each and every source directory, look in this - override source root for the same directory; if it - exists, use that directory instead and ignore the - directory in the original source root - --with-adds-and-overrides - use the subdirs 'adds' and 'overrides' in the - specified directory as add-source-root and - override-source-root - --with-override-langtools - use this langtools dir for the build - --with-override-corba use this corba dir for the build - --with-override-jaxp use this jaxp dir for the build - --with-override-jaxws use this jaxws dir for the build - --with-override-hotspot use this hotspot dir for the build - --with-override-jdk use this jdk dir for the build - --with-boot-jdk-jvmargs specify JVM arguments to be passed to all - invocations of the Boot JDK, overriding the default - values, e.g --with-boot-jdk-jvmargs="-Xmx8G - -enableassertions" - --with-server-java use this java binary for running the javac - background server and other long running java tasks - in the build process, e.g. - ---with-server-java="/opt/jrockit/bin/java -server" - --with-javac-server-cores - use at most this number of concurrent threads on the - javac server [probed] - --with-x use the X Window System - --with-cups specify prefix directory for the cups package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-cups-include specify directory for the cups include files - --with-cups-lib specify directory for the cups library - --with-freetype specify prefix directory for the freetype2 package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-alsa specify prefix directory for the alsa package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-alsa-include specify directory for the alsa include files - --with-alsa-lib specify directory for the alsa library - --with-pulse specify prefix directory for the pulseaudio package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-pulse-include specify directory for the pulseaudio include files - --with-pulse-lib specify directory for the pulseaudio library - --with-cacerts-file specify alternative cacerts file - -Some influential environment variables: - PKG_CONFIG path to pkg-config utility - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CXX C++ compiler command - CXXFLAGS C++ compiler flags - OBJC Objective C compiler command - OBJCFLAGS Objective C compiler flags - CPP C preprocessor - CXXCPP C++ preprocessor - XMKMF Path to xmkmf, Makefile generator for X Window System - FREETYPE2_CFLAGS - C compiler flags for FREETYPE2, overriding pkg-config - FREETYPE2_LIBS - linker flags for FREETYPE2, overriding pkg-config - ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config - ALSA_LIBS linker flags for ALSA, overriding pkg-config - LIBPULSE_CFLAGS - C compiler flags for LIBPULSE, overriding pkg-config - LIBPULSE_LIBS - linker flags for LIBPULSE, overriding pkg-config - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -openjdk configure version-0.1 -generated by GNU Autoconf 2.67 - -Copyright (C) 2010 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_objc_try_compile LINENO -# ----------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_objc_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_objc_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_objc_try_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link - -# ac_fn_cxx_try_run LINENO -# ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_cxx_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_run - -# ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES -# ---------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_cxx_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_header_compile - -# ac_fn_cxx_check_func LINENO FUNC VAR -# ------------------------------------ -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_cxx_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_func - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ----------------------------------------------- ## -## Report this to build-infra-dev@openjdk.java.net ## -## ----------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ----------------------------------------------- ## -## Report this to build-infra-dev@openjdk.java.net ## -## ----------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_header_mongrel -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by openjdk $as_me version-0.1, which was -generated by GNU Autoconf 2.67. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5 ; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_aux_dir= -for ac_dir in build-aux "$srcdir"/build-aux; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# -# Copyright © 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- -# PKG_PROG_PKG_CONFIG - -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# -# Similar to PKG_CHECK_MODULES, make sure that the first instance of -# this or PKG_CHECK_MODULES is called, or make sure to call -# PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- - - - -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- -# _PKG_CONFIG - -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- -# _PKG_SHORT_ERRORS_SUPPORTED - - -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- -# PKG_CHECK_MODULES - -# -# Copyright (c) 2011, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - - - - - - - - - -# -# Copyright (c) 2011, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Fixes paths on windows hosts to be mixed mode short. - - - - -# -# Copyright (c) 2011, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - - - - - -# -# Copyright (c) 2011, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -function prepare_help_system { - for ac_prog in apt-get yum port pkgutil pkgadd -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PKGHANDLER+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PKGHANDLER"; then - ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PKGHANDLER="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PKGHANDLER=$ac_cv_prog_PKGHANDLER -if test -n "$PKGHANDLER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5 -$as_echo "$PKGHANDLER" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PKGHANDLER" && break -done - -} - -function help_on_build_dependency { - # Print a helpful message on how to acquire the necessary build dependency. - # $1 is the help tag: freetyp2, cups, pulse, alsa etc - MISSING_DEPENDENCY=$1 - 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 ;; - * ) - break ;; - esac - - if test "x$PKGHANDLER_COMMAND" != x; then - HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." - fi -} - -function apt_help { - case $1 in - devkit) - PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; - openjdk) - PKGHANDLER_COMMAND="sudo apt-get install openjdk-7-jdk" ;; - alsa) - PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;; - cups) - PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;; - freetype2) - PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;; - pulse) - PKGHANDLER_COMMAND="sudo apt-get install libpulse-dev" ;; - x11) - PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev" ;; - ccache) - PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; - * ) - break ;; - esac -} - -function yum_help { - case $1 in - devkit) - PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;; - openjdk) - PKGHANDLER_COMMAND="sudo yum install java-1.7.0-openjdk" ;; - alsa) - PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;; - cups) - PKGHANDLER_COMMAND="sudo yum install cups-devel" ;; - freetype2) - PKGHANDLER_COMMAND="sudo yum install freetype2-devel" ;; - pulse) - PKGHANDLER_COMMAND="sudo yum install pulseaudio-libs-devel" ;; - x11) - PKGHANDLER_COMMAND="sudo yum install libXtst-devel" ;; - ccache) - PKGHANDLER_COMMAND="sudo yum install ccache" ;; - * ) - break ;; - esac -} - -function port_help { - PKGHANDLER_COMMAND="" -} - -function pkgutil_help { - PKGHANDLER_COMMAND="" -} - -function pkgadd_help { - PKGHANDLER_COMMAND="" -} - - -# Save the command line. Do this very early, before it is lost by calling autoconf macros. CONFIGURE_COMMAND_LINE="$@" +conf_script_dir=`dirname $0` +conf_closed_script_dir="$conf_script_dir/../../jdk/make/closed/autoconf" +### +### Test that the generated configure is up-to-date +### -# Locate the directory of this script. -SCRIPT="$0" +# On Solaris /bin/sh doesn't support test -nt but /usr/bin/test does. +TEST=`which test` - if test "x$BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READLINK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READLINK in - [\\/]* | ?:[\\/]*) - ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +print_error_not_up_to_date() { + echo "Error: The configure source files is newer than the generated files." + echo "Please run 'sh autogen.sh' to update the generated files." +} - ;; -esac -fi -READLINK=$ac_cv_path_READLINK -if test -n "$READLINK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 -$as_echo "$READLINK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - SCRIPT=`$READLINK -f $SCRIPT` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname $SCRIPT` - FIL=`basename $SCRIPT` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - SCRIPT=$DIR/$FIL - fi - fi - -AUTOCONF_DIR=`dirname $0` - -# Start with tools that do not need have cross compilation support -# and can be expected to be found in the default PATH. These tools are -# used by configure. Nor are these tools expected to be found in the -# devkit from the builddeps server either, since they are -# needed to download the devkit. -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - - - # Test that variable AWK is not empty. - if test "" = "$AWK"; then as_fn_error $? "Could not find awk !" "$LINENO" 5 ; fi - -# Extract the first word of "cat", so it can be a program name with args. -set dummy cat; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CAT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CAT in - [\\/]* | ?:[\\/]*) - ac_cv_path_CAT="$CAT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CAT=$ac_cv_path_CAT -if test -n "$CAT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5 -$as_echo "$CAT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CAT is not empty. - if test "" = "$CAT"; then as_fn_error $? "Could not find cat !" "$LINENO" 5 ; fi - -# Extract the first word of "chmod", so it can be a program name with args. -set dummy chmod; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHMOD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHMOD in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHMOD=$ac_cv_path_CHMOD -if test -n "$CHMOD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 -$as_echo "$CHMOD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CHMOD is not empty. - if test "" = "$CHMOD"; then as_fn_error $? "Could not find chmod !" "$LINENO" 5 ; fi - -# Extract the first word of "cp", so it can be a program name with args. -set dummy cp; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CP in - [\\/]* | ?:[\\/]*) - ac_cv_path_CP="$CP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CP=$ac_cv_path_CP -if test -n "$CP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 -$as_echo "$CP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CP is not empty. - if test "" = "$CP"; then as_fn_error $? "Could not find cp !" "$LINENO" 5 ; fi - -# Extract the first word of "cpio", so it can be a program name with args. -set dummy cpio; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CPIO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CPIO in - [\\/]* | ?:[\\/]*) - ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CPIO=$ac_cv_path_CPIO -if test -n "$CPIO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 -$as_echo "$CPIO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CPIO is not empty. - if test "" = "$CPIO"; then as_fn_error $? "Could not find cpio !" "$LINENO" 5 ; fi - -# Extract the first word of "cut", so it can be a program name with args. -set dummy cut; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CUT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CUT in - [\\/]* | ?:[\\/]*) - ac_cv_path_CUT="$CUT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CUT=$ac_cv_path_CUT -if test -n "$CUT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5 -$as_echo "$CUT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CUT is not empty. - if test "" = "$CUT"; then as_fn_error $? "Could not find cut !" "$LINENO" 5 ; fi - -# Extract the first word of "date", so it can be a program name with args. -set dummy date; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DATE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DATE in - [\\/]* | ?:[\\/]*) - ac_cv_path_DATE="$DATE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DATE=$ac_cv_path_DATE -if test -n "$DATE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5 -$as_echo "$DATE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable DATE is not empty. - if test "" = "$DATE"; then as_fn_error $? "Could not find date !" "$LINENO" 5 ; fi - -# Extract the first word of "df", so it can be a program name with args. -set dummy df; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DF in - [\\/]* | ?:[\\/]*) - ac_cv_path_DF="$DF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DF=$ac_cv_path_DF -if test -n "$DF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 -$as_echo "$DF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable DF is not empty. - if test "" = "$DF"; then as_fn_error $? "Could not find df !" "$LINENO" 5 ; fi - -# Extract the first word of "diff", so it can be a program name with args. -set dummy diff; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DIFF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DIFF in - [\\/]* | ?:[\\/]*) - ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DIFF=$ac_cv_path_DIFF -if test -n "$DIFF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 -$as_echo "$DIFF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable DIFF is not empty. - if test "" = "$DIFF"; then as_fn_error $? "Could not find diff !" "$LINENO" 5 ; fi - -# Warning echo is really, really unportable!!!!! Different -# behaviour in bash and dash and in a lot of other shells! -# Use printf for serious work! -# Extract the first word of "echo", so it can be a program name with args. -set dummy echo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ECHO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ECHO in - [\\/]* | ?:[\\/]*) - ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ECHO=$ac_cv_path_ECHO -if test -n "$ECHO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 -$as_echo "$ECHO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable ECHO is not empty. - if test "" = "$ECHO"; then as_fn_error $? "Could not find echo !" "$LINENO" 5 ; fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - - - # Test that variable EGREP is not empty. - if test "" = "$EGREP"; then as_fn_error $? "Could not find egrep !" "$LINENO" 5 ; fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - - - # Test that variable FGREP is not empty. - if test "" = "$FGREP"; then as_fn_error $? "Could not find fgrep !" "$LINENO" 5 ; fi - - -# Extract the first word of "find", so it can be a program name with args. -set dummy find; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_FIND+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $FIND in - [\\/]* | ?:[\\/]*) - ac_cv_path_FIND="$FIND" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -FIND=$ac_cv_path_FIND -if test -n "$FIND"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 -$as_echo "$FIND" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable FIND is not empty. - if test "" = "$FIND"; then as_fn_error $? "Could not find find !" "$LINENO" 5 ; fi - - - # Test if find supports -delete - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5 -$as_echo_n "checking if find supports -delete... " >&6; } - FIND_DELETE="-delete" - - DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) - - echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete - - TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` - if test -f $DELETEDIR/TestIfFindSupportsDelete; then - # No, it does not. - rm $DELETEDIR/TestIfFindSupportsDelete - FIND_DELETE="-exec rm \{\} \+" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - rmdir $DELETEDIR - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - - - # Test that variable GREP is not empty. - if test "" = "$GREP"; then as_fn_error $? "Could not find grep !" "$LINENO" 5 ; fi - -# Extract the first word of "head", so it can be a program name with args. -set dummy head; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HEAD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HEAD in - [\\/]* | ?:[\\/]*) - ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HEAD=$ac_cv_path_HEAD -if test -n "$HEAD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5 -$as_echo "$HEAD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable HEAD is not empty. - if test "" = "$HEAD"; then as_fn_error $? "Could not find head !" "$LINENO" 5 ; fi - -# Extract the first word of "ln", so it can be a program name with args. -set dummy ln; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $LN in - [\\/]* | ?:[\\/]*) - ac_cv_path_LN="$LN" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LN=$ac_cv_path_LN -if test -n "$LN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 -$as_echo "$LN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable LN is not empty. - if test "" = "$LN"; then as_fn_error $? "Could not find ln !" "$LINENO" 5 ; fi - -# Extract the first word of "ls", so it can be a program name with args. -set dummy ls; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $LS in - [\\/]* | ?:[\\/]*) - ac_cv_path_LS="$LS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LS=$ac_cv_path_LS -if test -n "$LS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5 -$as_echo "$LS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable LS is not empty. - if test "" = "$LS"; then as_fn_error $? "Could not find ls !" "$LINENO" 5 ; fi - -for ac_prog in gmake make -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_MAKE="$MAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MAKE=$ac_cv_path_MAKE -if test -n "$MAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5 -$as_echo "$MAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$MAKE" && break -done - - - # Test that variable MAKE is not empty. - if test "" = "$MAKE"; then as_fn_error $? "Could not find make !" "$LINENO" 5 ; fi - -MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[12346789]'` -if test "x$MAKE_VERSION" = x; then - as_fn_error $? "You must use GNU make 3.81 or newer! Please put it in the path." "$LINENO" 5 -fi -# Extract the first word of "mkdir", so it can be a program name with args. -set dummy mkdir; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MKDIR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MKDIR in - [\\/]* | ?:[\\/]*) - ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MKDIR=$ac_cv_path_MKDIR -if test -n "$MKDIR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 -$as_echo "$MKDIR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable MKDIR is not empty. - if test "" = "$MKDIR"; then as_fn_error $? "Could not find mkdir !" "$LINENO" 5 ; fi - -# Extract the first word of "mv", so it can be a program name with args. -set dummy mv; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MV+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MV in - [\\/]* | ?:[\\/]*) - ac_cv_path_MV="$MV" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MV=$ac_cv_path_MV -if test -n "$MV"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 -$as_echo "$MV" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable MV is not empty. - if test "" = "$MV"; then as_fn_error $? "Could not find mv !" "$LINENO" 5 ; fi - -for ac_prog in nawk gawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_NAWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $NAWK in - [\\/]* | ?:[\\/]*) - ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -NAWK=$ac_cv_path_NAWK -if test -n "$NAWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 -$as_echo "$NAWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$NAWK" && break -done - - - # Test that variable NAWK is not empty. - if test "" = "$NAWK"; then as_fn_error $? "Could not find nawk !" "$LINENO" 5 ; fi - -# Extract the first word of "printf", so it can be a program name with args. -set dummy printf; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PRINTF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PRINTF in - [\\/]* | ?:[\\/]*) - ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PRINTF=$ac_cv_path_PRINTF -if test -n "$PRINTF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5 -$as_echo "$PRINTF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable PRINTF is not empty. - if test "" = "$PRINTF"; then as_fn_error $? "Could not find printf !" "$LINENO" 5 ; fi - -# Extract the first word of "pwd", so it can be a program name with args. -set dummy pwd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_THEPWDCMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $THEPWDCMD in - [\\/]* | ?:[\\/]*) - ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -THEPWDCMD=$ac_cv_path_THEPWDCMD -if test -n "$THEPWDCMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5 -$as_echo "$THEPWDCMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "rm", so it can be a program name with args. -set dummy rm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_RM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $RM in - [\\/]* | ?:[\\/]*) - ac_cv_path_RM="$RM" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -RM=$ac_cv_path_RM -if test -n "$RM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 -$as_echo "$RM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable RM is not empty. - if test "" = "$RM"; then as_fn_error $? "Could not find rm !" "$LINENO" 5 ; fi - -RM="$RM -f" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - - - # Test that variable SED is not empty. - if test "" = "$SED"; then as_fn_error $? "Could not find sed !" "$LINENO" 5 ; fi - -# Extract the first word of "sh", so it can be a program name with args. -set dummy sh; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_SH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $SH in - [\\/]* | ?:[\\/]*) - ac_cv_path_SH="$SH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -SH=$ac_cv_path_SH -if test -n "$SH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 -$as_echo "$SH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable SH is not empty. - if test "" = "$SH"; then as_fn_error $? "Could not find sh !" "$LINENO" 5 ; fi - -# Extract the first word of "sort", so it can be a program name with args. -set dummy sort; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_SORT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $SORT in - [\\/]* | ?:[\\/]*) - ac_cv_path_SORT="$SORT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -SORT=$ac_cv_path_SORT -if test -n "$SORT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5 -$as_echo "$SORT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable SORT is not empty. - if test "" = "$SORT"; then as_fn_error $? "Could not find sort !" "$LINENO" 5 ; fi - -# Extract the first word of "tar", so it can be a program name with args. -set dummy tar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TAR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TAR in - [\\/]* | ?:[\\/]*) - ac_cv_path_TAR="$TAR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TAR=$ac_cv_path_TAR -if test -n "$TAR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 -$as_echo "$TAR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TAR is not empty. - if test "" = "$TAR"; then as_fn_error $? "Could not find tar !" "$LINENO" 5 ; fi - -# Extract the first word of "tail", so it can be a program name with args. -set dummy tail; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TAIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TAIL in - [\\/]* | ?:[\\/]*) - ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TAIL=$ac_cv_path_TAIL -if test -n "$TAIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5 -$as_echo "$TAIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TAIL is not empty. - if test "" = "$TAIL"; then as_fn_error $? "Could not find tail !" "$LINENO" 5 ; fi - -# Extract the first word of "tee", so it can be a program name with args. -set dummy tee; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TEE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TEE in - [\\/]* | ?:[\\/]*) - ac_cv_path_TEE="$TEE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TEE=$ac_cv_path_TEE -if test -n "$TEE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5 -$as_echo "$TEE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TEE is not empty. - if test "" = "$TEE"; then as_fn_error $? "Could not find tee !" "$LINENO" 5 ; fi - -# Extract the first word of "tr", so it can be a program name with args. -set dummy tr; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TR in - [\\/]* | ?:[\\/]*) - ac_cv_path_TR="$TR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TR=$ac_cv_path_TR -if test -n "$TR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5 -$as_echo "$TR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TR is not empty. - if test "" = "$TR"; then as_fn_error $? "Could not find tr !" "$LINENO" 5 ; fi - -# Extract the first word of "touch", so it can be a program name with args. -set dummy touch; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TOUCH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TOUCH in - [\\/]* | ?:[\\/]*) - ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TOUCH=$ac_cv_path_TOUCH -if test -n "$TOUCH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 -$as_echo "$TOUCH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TOUCH is not empty. - if test "" = "$TOUCH"; then as_fn_error $? "Could not find touch !" "$LINENO" 5 ; fi - -# Extract the first word of "wc", so it can be a program name with args. -set dummy wc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_WC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $WC in - [\\/]* | ?:[\\/]*) - ac_cv_path_WC="$WC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -WC=$ac_cv_path_WC -if test -n "$WC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5 -$as_echo "$WC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable WC is not empty. - if test "" = "$WC"; then as_fn_error $? "Could not find wc !" "$LINENO" 5 ; fi - -# Extract the first word of "xargs", so it can be a program name with args. -set dummy xargs; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_XARGS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $XARGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -XARGS=$ac_cv_path_XARGS -if test -n "$XARGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5 -$as_echo "$XARGS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable XARGS is not empty. - if test "" = "$XARGS"; then as_fn_error $? "Could not find xargs !" "$LINENO" 5 ; fi - -# Extract the first word of "zip", so it can be a program name with args. -set dummy zip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ZIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ZIP=$ac_cv_path_ZIP -if test -n "$ZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 -$as_echo "$ZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable ZIP is not empty. - if test "" = "$ZIP"; then as_fn_error $? "Could not find zip !" "$LINENO" 5 ; fi - -# Extract the first word of "unzip", so it can be a program name with args. -set dummy unzip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_UNZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $UNZIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -UNZIP=$ac_cv_path_UNZIP -if test -n "$UNZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 -$as_echo "$UNZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable UNZIP is not empty. - if test "" = "$UNZIP"; then as_fn_error $? "Could not find unzip !" "$LINENO" 5 ; fi - -# Extract the first word of "ldd", so it can be a program name with args. -set dummy ldd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LDD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $LDD in - [\\/]* | ?:[\\/]*) - ac_cv_path_LDD="$LDD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LDD=$ac_cv_path_LDD -if test -n "$LDD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 -$as_echo "$LDD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$LDD" = "x"; then - # List shared lib dependencies is used for - # debug output and checking for forbidden dependencies. - # We can build without it. - LDD="true" -fi -# Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $OTOOL in - [\\/]* | ?:[\\/]*) - ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -OTOOL=$ac_cv_path_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$OTOOL" = "x"; then - OTOOL="true" -fi -# Extract the first word of "readelf", so it can be a program name with args. -set dummy readelf; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READELF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READELF in - [\\/]* | ?:[\\/]*) - ac_cv_path_READELF="$READELF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READELF=$ac_cv_path_READELF -if test -n "$READELF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 -$as_echo "$READELF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "expr", so it can be a program name with args. -set dummy expr; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_EXPR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $EXPR in - [\\/]* | ?:[\\/]*) - ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -EXPR=$ac_cv_path_EXPR -if test -n "$EXPR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5 -$as_echo "$EXPR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable EXPR is not empty. - if test "" = "$EXPR"; then as_fn_error $? "Could not find expr !" "$LINENO" 5 ; fi - -# Extract the first word of "file", so it can be a program name with args. -set dummy file; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_FILE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $FILE in - [\\/]* | ?:[\\/]*) - ac_cv_path_FILE="$FILE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -FILE=$ac_cv_path_FILE -if test -n "$FILE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5 -$as_echo "$FILE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable FILE is not empty. - if test "" = "$FILE"; then as_fn_error $? "Could not find file !" "$LINENO" 5 ; fi - -# Extract the first word of "hg", so it can be a program name with args. -set dummy hg; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HG in - [\\/]* | ?:[\\/]*) - ac_cv_path_HG="$HG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HG=$ac_cv_path_HG -if test -n "$HG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 -$as_echo "$HG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - -# Figure out the build and host system. -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - - -# Check whether --with-data-model was given. -if test "${with_data_model+set}" = set; then : - withval=$with_data_model; -fi - - -if test "x$with_data_model" != x && \ - test "x$with_data_model" != x32 && \ - test "x$with_data_model" != x64 ; then - as_fn_error $? "The data model can only be 32 or 64!" "$LINENO" 5 -fi -# Translate the standard cpu-vendor-kernel-os quadruplets into -# the new HOST_.... and BUILD_... and the legacy names used by -# the openjdk build. -# It uses $host_os $host_cpu $build_os $build_cpu and $with_data_model - - # Expects $host_os $host_cpu $build_os and $build_cpu - # and $with_data_model to have been setup! - # - # Translate the standard triplet(quadruplet) definition - # of the host/build system into - # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows - # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince - # HOST_OS_API=posix,winapi - # - # HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 - # HOST_CPU_ARCH=x86,sparc,pcc,arm - # HOST_CPU_BITS=32,64 - # HOST_CPU_ENDIAN=big,little - # - # The same values are setup for BUILD_... - # - # And the legacy variables, for controlling the old makefiles. - # LEGACY_HOST_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris) - # LEGACY_HOST_OS_API=solaris,windows - # - # We also copy the autoconf trip/quadruplet - # verbatim to HOST and BUILD - HOST=${host} - - BUILD=${build} - - - - - case "$host_os" in - *linux*) - VAR_OS=linux - VAR_OS_API=posix - VAR_OS_FAMILY=gnu - ;; - *solaris*) - VAR_OS=solaris - VAR_OS_API=posix - VAR_OS_FAMILY=sysv - ;; - *darwin*) - VAR_OS=macosx - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *bsd*) - VAR_OS=bsd - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *cygwin*|*windows*) - VAR_OS=windows - VAR_OS_API=winapi - VAR_OS_FAMILY=windows - ;; - *) - as_fn_error $? "unsupported host operating system $host_os" "$LINENO" 5 - ;; - esac - - HOST_OS="$VAR_OS" - HOST_OS_FAMILY="$VAR_OS_FAMILY" - HOST_OS_API="$VAR_OS_API" - - - - - - if test "x$HOST_OS_API" = xposix; then - LEGACY_HOST_OS_API="solaris" - fi - if test "x$HOST_OS_API" = xwinapi; then - LEGACY_HOST_OS_API="windows" - fi - - - - - # First argument is the cpu name from the trip/quad - case "$host_cpu" in - x86_64) - VAR_CPU=x64 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=amd64 - ;; - i?86) - VAR_CPU=ia32 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=i586 - ;; - alpha*) - VAR_CPU=alpha - VAR_CPU_ARCH=alpha - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=alpha - ;; - arm*) - VAR_CPU=arm - VAR_CPU_ARCH=arm - VAR_CPU_BITS=3264 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=arm - ;; - mips) - VAR_CPU=mips - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mips - ;; - mipsel) - VAR_CPU=mipsel - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mipsel - ;; - powerpc) - VAR_CPU=ppc - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=ppc - ;; - powerpc64) - VAR_CPU=ppc64 - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=32 - VAR_LEGACY_CPU=ppc64 - ;; - sparc) - VAR_CPU=sparc - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc - ;; - sparc64) - VAR_CPU=sparcv9 - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc_sparcv9 - ;; - s390) - VAR_CPU=s390 - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390 - VAR_LEGACY_CPU=s390 - ;; - s390x) - VAR_CPU=s390x - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390x - ;; - *) - as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5 - ;; - esac - - # Workaround cygwin not knowing about 64 bit. - if test "x$VAR_OS" = "xwindows"; then - if test "x$PROCESSOR_IDENTIFIER" != "x"; then - PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` - case "$PROC_ARCH" in - intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - ;; - esac - fi - fi - - if test "x$VAR_CPU_ARCH" = "xx86"; then - if test "x$with_data_model" = "x64"; then - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - fi - if test "x$with_data_model" = "x32"; then - VAR_CPU=ia32 - VAR_CPU_BITS=32 - VAR_LEGACY_CPU=i586 - fi - fi - - HOST_CPU="$VAR_CPU" - HOST_CPU_ARCH="$VAR_CPU_ARCH" - HOST_CPU_BITS="$VAR_CPU_BITS" - HOST_CPU_ENDIAN="$VAR_CPU_ENDIAN" - - - - - - - # Also store the legacy naming of the cpu. - # Ie i586 and amd64 instead of ia32 and x64 - LEGACY_HOST_CPU1="$VAR_LEGACY_CPU" - - - # And the second legacy naming of the cpu. - # Ie i386 and amd64 instead of ia32 and x64. - LEGACY_HOST_CPU2="$LEGACY_HOST_CPU1" - if test "x$LEGACY_HOST_CPU1" = xi586; then - LEGACY_HOST_CPU2=i386 - fi - - - # And the third legacy naming of the cpu. - # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. - LEGACY_HOST_CPU3="" - if test "x$HOST_CPU" = xx64; then - LEGACY_HOST_CPU3=amd64 - fi - if test "x$HOST_CPU" = xsparcv9; then - LEGACY_HOST_CPU3=sparvc9 - fi - - - - - - case "$build_os" in - *linux*) - VAR_OS=linux - VAR_OS_API=posix - VAR_OS_FAMILY=gnu - ;; - *solaris*) - VAR_OS=solaris - VAR_OS_API=posix - VAR_OS_FAMILY=sysv - ;; - *darwin*) - VAR_OS=macosx - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *bsd*) - VAR_OS=bsd - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *cygwin*|*windows*) - VAR_OS=windows - VAR_OS_API=winapi - VAR_OS_FAMILY=windows - ;; - *) - as_fn_error $? "unsupported host operating system $build_os" "$LINENO" 5 - ;; - esac - - BUILD_OS="$VAR_OS" - BUILD_OS_FAMILY="$VAR_OS_FAMILY" - BUILD_OS_API="$VAR_OS_API" - - - - - - if test "x$BUILD_OS_API" = xposix; then - LEGACY_BUILD_OS_API="solaris" - fi - if test "x$BUILD_OS_API" = xwinapi; then - LEGACY_BUILD_OS_API="windows" - fi - - - - - # First argument is the cpu name from the trip/quad - case "$build_cpu" in - x86_64) - VAR_CPU=x64 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=amd64 - ;; - i?86) - VAR_CPU=ia32 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=i586 - ;; - alpha*) - VAR_CPU=alpha - VAR_CPU_ARCH=alpha - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=alpha - ;; - arm*) - VAR_CPU=arm - VAR_CPU_ARCH=arm - VAR_CPU_BITS=3264 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=arm - ;; - mips) - VAR_CPU=mips - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mips - ;; - mipsel) - VAR_CPU=mipsel - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mipsel - ;; - powerpc) - VAR_CPU=ppc - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=ppc - ;; - powerpc64) - VAR_CPU=ppc64 - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=32 - VAR_LEGACY_CPU=ppc64 - ;; - sparc) - VAR_CPU=sparc - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc - ;; - sparc64) - VAR_CPU=sparcv9 - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc_sparcv9 - ;; - s390) - VAR_CPU=s390 - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390 - VAR_LEGACY_CPU=s390 - ;; - s390x) - VAR_CPU=s390x - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390x - ;; - *) - as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5 - ;; - esac - - # Workaround cygwin not knowing about 64 bit. - if test "x$VAR_OS" = "xwindows"; then - if test "x$PROCESSOR_IDENTIFIER" != "x"; then - PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` - case "$PROC_ARCH" in - intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - ;; - esac - fi - fi - - if test "x$VAR_CPU_ARCH" = "xx86"; then - if test "x$with_data_model" = "x64"; then - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - fi - if test "x$with_data_model" = "x32"; then - VAR_CPU=ia32 - VAR_CPU_BITS=32 - VAR_LEGACY_CPU=i586 - fi - fi - - BUILD_CPU="$VAR_CPU" - BUILD_CPU_ARCH="$VAR_CPU_ARCH" - BUILD_CPU_BITS="$VAR_CPU_BITS" - BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" - - - - - - - # Also store the legacy naming of the cpu. - # Ie i586 and amd64 instead of ia32 and x64 - LEGACY_BUILD_CPU1="$VAR_LEGACY_CPU" - - - # And the second legacy naming of the cpu. - # Ie i386 and amd64 instead of ia32 and x64. - LEGACY_BUILD_CPU2="$LEGACY_BUILD_CPU1" - if test "x$LEGACY_BUILD_CPU1" = xi586; then - LEGACY_BUILD_CPU2=i386 - fi - - - # And the third legacy naming of the cpu. - # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. - LEGACY_BUILD_CPU3="" - if test "x$BUILD_CPU" = xx64; then - LEGACY_BUILD_CPU3=amd64 - fi - if test "x$BUILD_CPU" = xsparcv9; then - LEGACY_BUILD_CPU3=sparvc9 - fi - - - - if test "x$HOST_OS" != xsolaris; then - LEGACY_HOST_CPU3="" - LEGACY_BUILD_CPU3="" - fi - - # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_HOST_CPU1) ... - if test "x$HOST_OS" = xmacosx && test "x$HOST_CPU" = xx64; then - LEGACY_HOST_CPU1="x86_64" - fi - - - if test "x$HOST_OS" = "xsolaris"; then - REQUIRED_OS_NAME=SunOS - REQUIRED_OS_VERSION=5.10 - fi - if test "x$HOST_OS" = "xlinux"; then - REQUIRED_OS_NAME=Linux - REQUIRED_OS_VERSION=2.6 - fi - if test "x$HOST_OS" = "xwindows"; then - REQUIRED_OS_NAME=Windows - REQUIRED_OS_VERSION=5.1 - fi - if test "x$HOST_OS" = "xmacosx"; then - REQUIRED_OS_NAME=Darwin - REQUIRED_OS_VERSION=11.2 - fi - - - - - -# Now the following vars are defined. -# HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows -# HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince -# HOST_OS_API=posix,winapi -# -# HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 -# HOST_CPU_ARCH=x86,sparc,pcc,arm -# HOST_CPU_BITS=32,64 -# HOST_CPU_ENDIAN=big,little -# -# There is also a: -# LEGACY_HOST_CPU1=i586,amd64,.... # used to set the old var ARCH -# LEGACY_HOST_CPU2=i386,amd64,.... # used to set the old var LIBARCH -# LEGACY_HOST_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris -# There was also a BUILDARCH that had i486,amd64,... but we do not use that -# in the new build. -# LEGACY_HOST_OS_API=solaris,windows # used to select source roots - -DATE_WHEN_CONFIGURED=`LANG=C date` - - -# How many cores do we have on this build system? - -# Check whether --with-num-cores was given. -if test "${with_num_cores+set}" = set; then : - withval=$with_num_cores; -fi - -if test "x$with_num_cores" = x; then - # The number of cores were not specified, try to probe them. - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for number of cores" >&5 -$as_echo_n "checking for number of cores... " >&6; } - NUM_CORES=1 - FOUND_CORES=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - NUM_CORES=`cat /proc/cpuinfo | grep -c processor` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/psrinfo; then - # Looks like a Solaris system - NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` - FOUND_CORES=yes - fi - - if test "x$build_os" = xwindows; then - NUM_CORES=4 - fi - - # For c/c++ code we run twice as many concurrent build - # jobs than we have cores, otherwise we will stall on io. - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` - - if test "x$FOUND_CORES" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NUM_CORES" >&5 -$as_echo "$NUM_CORES" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1!" >&5 -$as_echo "could not detect number of cores, defaulting to 1!" >&6; } - fi - - -else - NUM_CORES=$with_num_cores - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` -fi - - - -# How many cores do we have on this build system? - -# Check whether --with-memory-size was given. -if test "${with_memory_size+set}" = set; then : - withval=$with_memory_size; -fi - -if test "x$with_memory_size" = x; then - # The memory size was not specified, try to probe it. - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memory size" >&5 -$as_echo_n "checking for memory size... " >&6; } - # Default to 1024MB - MEMORY_SIZE=1024 - FOUND_MEM=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/prtconf; then - # Looks like a Solaris system - MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print $3 }'` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print $2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` - FOUND_MEM=yes - fi - - if test "x$build_os" = xwindows; then - MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print $4 }' | sed 's/,//'` - FOUND_MEM=yes - fi - - if test "x$FOUND_MEM" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MEMORY_SIZE MB" >&5 -$as_echo "$MEMORY_SIZE MB" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size defaulting to 1024MB!" >&5 -$as_echo "could not detect memory size defaulting to 1024MB!" >&6; } - fi - -else - MEMORY_SIZE=$with_memory_size -fi - - -# Where is the source? It is located two levels above the configure script. -CURDIR="$PWD" -cd "$AUTOCONF_DIR/../.." -SRC_ROOT="`pwd`" - -cd "$CURDIR" - -# For cygwin we need cygpath first, since it is used everywhere. -# Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CYGPATH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CYGPATH in - [\\/]* | ?:[\\/]*) - ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CYGPATH=$ac_cv_path_CYGPATH -if test -n "$CYGPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 -$as_echo "$CYGPATH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -PATH_SEP=":" -if test "x$BUILD_OS" = "xwindows"; then - if test "x$CYGPATH" = x; then - as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5 - fi - PATH_SEP=";" -fi - - - - # Fail with message the path to the source root if var SRC_ROOT contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$SRC_ROOT" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - SRC_ROOT=`$CYGPATH -s -m -a "$SRC_ROOT"` - SRC_ROOT=`$CYGPATH -u "$SRC_ROOT"` - else - as_fn_error $? "You cannot have spaces in the path to the source root! \"$SRC_ROOT\"" "$LINENO" 5 - fi - fi - - - # Fail with message the path to the current directory if var CURDIR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$CURDIR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - CURDIR=`$CYGPATH -s -m -a "$CURDIR"` - CURDIR=`$CYGPATH -u "$CURDIR"` - else - as_fn_error $? "You cannot have spaces in the path to the current directory! \"$CURDIR\"" "$LINENO" 5 - fi - fi - - -if test "x$BUILD_OS" = "xsolaris"; then - # Also search in /usr/ccs/bin for utilities like ar and as. - PATH="/usr/ccs/bin:$PATH" -fi - -############################################################################### -# -# OpenJDK or closed -# -# Check whether --enable-openjdk-only was given. -if test "${enable_openjdk_only+set}" = set; then : - enableval=$enable_openjdk_only; -fi - - -if test "x$enable_openjdk_only" = "xyes"; then - OPENJDK=true -elif test "x$enable_openjdk_only" = "xno"; then - OPENJDK=false -elif test -d "$SRC_ROOT/jdk/src/closed"; then - OPENJDK=false -else - OPENJDK=true -fi - -if test "x$OPENJDK" = "xtrue"; then - SET_OPENJDK=OPENJDK=true -fi - - - -############################################################################### -# -# JIGSAW or not. The JIGSAW variable is used during the intermediate -# stage when we are building both the old style JDK and the new style modularized JDK. -# When the modularized JDK is finalized, this option will go away. -# -# Check whether --enable-jigsaw was given. -if test "${enable_jigsaw+set}" = set; then : - enableval=$enable_jigsaw; -fi - - -if test "x$enable_jigsaw" = "xyes"; then - JIGSAW=true -else - JIGSAW=false -fi - - -############################################################################### -# -# Check which variant of the JDK that we want to build. -# Currently we have: -# normal: standard edition -# embedded: cut down to a smaller footprint -# -# Effectively the JDK variant gives a name to a specific set of -# modules to compile into the JDK. In the future, these modules -# might even be Jigsaw modules. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of the JDK to build" >&5 -$as_echo_n "checking which variant of the JDK to build... " >&6; } - -# Check whether --with-jdk-variant was given. -if test "${with_jdk_variant+set}" = set; then : - withval=$with_jdk_variant; -fi - - -if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then - JAVASE_EMBEDDED="" - MINIMIZE_RAM_USAGE="" - JDK_VARIANT="normal" -elif test "x$with_jdk_variant" = xembedded; then - JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" - MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" - JDK_VARIANT="embedded" -else - as_fn_error $? "The available JDK variants are: normal, embedded" "$LINENO" 5 -fi - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JDK_VARIANT" >&5 -$as_echo "$JDK_VARIANT" >&6; } - -############################################################################### -# -# Should we build a JDK/JVM with head support (ie a graphical ui)? -# We always build headless support. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking headful support" >&5 -$as_echo_n "checking headful support... " >&6; } -# Check whether --enable-headful was given. -if test "${enable_headful+set}" = set; then : - enableval=$enable_headful; SUPPORT_HEADFUL=${enable_headful} -else - SUPPORT_HEADFUL=yes -fi - - -SUPPORT_HEADLESS=yes -BUILD_HEADLESS="BUILD_HEADLESS:=true" - -if test "x$SUPPORT_HEADFUL" = xyes; then - # We are building both headful and headless. - BUILD_HEADLESS_ONLY="" - headful_msg="inlude support for both headful and headless" -fi - -if test "x$SUPPORT_HEADFUL" = xno; then - # Thus we are building headless only. - BUILD_HEADLESS="BUILD_HEADLESS:=true" - BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" - headful_msg="headless only" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $headful_msg" >&5 -$as_echo "$headful_msg" >&6; } - - - - - - -############################################################################### -# -# Check which variants of the JVM that we want to build. -# Currently we have: -# server: normal interpreter and a tiered C1/C2 compiler -# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) -# kernel: kernel footprint JVM that passes the TCK without major performance problems, -# ie normal interpreter and C1, only the serial GC, kernel jvmti etc -# zero: no machine code interpreter, no compiler -# zeroshark: zero interpreter and shark/llvm compiler backend -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM that should be built" >&5 -$as_echo_n "checking which variants of the JVM that should be built... " >&6; } - -# Check whether --with-jvm-variants was given. -if test "${with_jvm_variants+set}" = set; then : - withval=$with_jvm_variants; -fi - - -if test "x$with_jvm_variants" = x; then - if test "x$JDK_VARIANT" = xembedded; then - with_jvm_variants="kernel" - elif test "x$HOST_CPU_BITS" = x64; then - with_jvm_variants="server" - else - # Yes, on 32-bit machines, the same source (almost) is compiled twice - # to generate two libjvm.so files. Fun, fun. - with_jvm_variants="client,server" - fi -fi - -JVM_VARIANTS=",$with_jvm_variants," -TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` - -if test "x$TEST_VARIANTS" != "x,"; then - as_fn_error $? "The available JVM variants are: server, client, kernel, zero, zeroshark" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_variants" >&5 -$as_echo "$with_jvm_variants" >&6; } - -JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` -JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` -JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` -JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` -JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - as_fn_error $? "You cannot build a client JVM for a 64-bit machine." "$LINENO" 5 - fi -fi -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - as_fn_error $? "You cannot build a kernel JVM for a 64-bit machine." "$LINENO" 5 - fi -fi - -COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` -# Replace the commas with AND for use in the build directory name. -ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` -if test "x$COUNT_VARIANTS" != "x,1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants" >&5 -$as_echo "$as_me: NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants" >&6;} -fi - - - - - - - - -############################################################################### -# -# Set the debug level -# release: no debug information, all optimizations, no asserts. -# fastdebug: debug information (-g), all optimizations, all asserts -# slowdebug: debug information (-g), no optimizations, all asserts -# -DEBUG_LEVEL="release" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which debug level to use" >&5 -$as_echo_n "checking which debug level to use... " >&6; } -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; - ENABLE_DEBUG="${enableval}" - DEBUG_LEVEL="fastdebug" - -else - ENABLE_DEBUG="no" -fi - - - -# Check whether --with-debug-level was given. -if test "${with_debug_level+set}" = set; then : - withval=$with_debug_level; - DEBUG_LEVEL="${withval}" - if test "x$ENABLE_DEBUG" = xyes; then - as_fn_error $? "You cannot use both --enable-debug and --with-debug-level at the same time." "$LINENO" 5 - fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBUG_LEVEL" >&5 -$as_echo "$DEBUG_LEVEL" >&6; } - -if test "x$DEBUG_LEVEL" != xrelease && \ - test "x$DEBUG_LEVEL" != xfastdebug && \ - test "x$DEBUG_LEVEL" != xslowdebug; then - as_fn_error $? "Allowed debug levels are: release, fastdebug and slowdebug" "$LINENO" 5 -fi - -case $DEBUG_LEVEL in - release ) - VARIANT="OPT" - FASTDEBUG="false" - DEBUG_CLASSFILES="false" - BUILD_VARIANT_RELEASE="" - ;; - fastdebug ) - VARIANT="DBG" - FASTDEBUG="true" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-fastdebug" - ;; - slowdebug ) - VARIANT="DBG" - FASTDEBUG="false" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-debug" - ;; -esac - - - - - - - -# Source the version numbers -. $AUTOCONF_DIR/version.numbers -if test "x$OPENJDK" = "xfalse"; then - . $AUTOCONF_DIR/closed.version.numbers -fi -# Now set the JDK version, milestone, build number etc. - - - - - - - - - - - - -COPYRIGHT_YEAR=`date +'%Y'` - - -RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" - - -if test "x$JDK_UPDATE_VERSION" != x; then - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" -else - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" -fi - - -if test "x$MILESTONE" != x; then - RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" -else - RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" -fi - - -if test "x$JDK_BUILD_NUMBER" != x; then - FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" -else - JDK_BUILD_NUMBER=b00 - BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` - # Avoid [:alnum:] since it depends on the locale. - CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` - USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" -fi - -COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` - - -# Test from where we are running configure, in or outside of src root. -if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then - # We are running configure from the src root. - # Create a default ./build/host-variant-debuglevel output root. - CONF_NAME="${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" - OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" - mkdir -p "$OUTPUT_ROOT" - if test ! -d "$OUTPUT_ROOT"; then - as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 - fi -else - # We are running configure from outside of the src dir. - # Then use the current directory as output dir! - # If configuration is situated in normal build directory, just use the build - # directory name as configuration name, otherwise use the complete path. - CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` - OUTPUT_ROOT="$CURDIR" -fi - - - # Fail with message the path to the output root if var OUTPUT_ROOT contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$OUTPUT_ROOT" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - OUTPUT_ROOT=`$CYGPATH -s -m -a "$OUTPUT_ROOT"` - OUTPUT_ROOT=`$CYGPATH -u "$OUTPUT_ROOT"` - else - as_fn_error $? "You cannot have spaces in the path to the output root! \"$OUTPUT_ROOT\"" "$LINENO" 5 - fi - fi - - -# Save the arguments given to us -echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments - -# Check if the VS env variables were setup prior to running configure. -# If not, then find vcvarsall.bat and run it automatically, and integrate -# the set env variables into the spec file. -SETUPDEVENV="# No special vars" -if test "x$BUILD_OS" = "xwindows"; then - # If vcvarsall.bat has been run, then VCINSTALLDIR is set. - if test "x$VCINSTALLDIR" != x; then - # No further setup is needed. The build will happen from this kind - # of shell. - SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." - # Make sure to remind you, if you forget to run make from a cygwin bash shell - # that is spawned "bash -l" from a VS command prompt. - CHECK_FOR_VCINSTALLDIR=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you are running from within a VS command prompt" >&5 -$as_echo_n "checking if you are running from within a VS command prompt... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. - if test "x$VS100COMNTOOLS" != x; then - VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` - SEARCH_ROOT="$VS100COMNTOOLS" - else - VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` - SEARCH_ROOT="$PROGRAMFILES" - fi - VCPATH=`dirname "$VARSBAT"` - VCPATH=`cygpath -w "$VCPATH"` - if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 -$as_echo_n "checking if we can find the VS installation... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - case "$LEGACY_HOST_CPU1" in - i?86) - VARSBAT_ARCH=x86 - ;; - *) - VARSBAT_ARCH=$LEGACY_HOST_CPU1 - ;; - esac - # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat - cd $OUTPUT_ROOT - bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" - cd $CURDIR - if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can extract the needed env variables" >&5 -$as_echo_n "checking if we can extract the needed env variables... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not succesfully extract the env variables needed for the VS setup. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - # Now set all paths and other env variables. This will allow the rest of - # the configure script to find and run the compiler in the proper way. - . $OUTPUT_ROOT/localdevenv.sh - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 -$as_echo_n "checking if we can find the VS installation... " >&6; } - if test "x$VCINSTALLDIR" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VCINSTALLDIR" >&5 -$as_echo "$VCINSTALLDIR" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not find VS installation. Please install. If you are sure you have installed VS, then please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - CHECK_FOR_VCINSTALLDIR=no - SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5 -$as_echo_n "checking for msvcr100.dll... " >&6; } - -# Check whether --with-msvcr100dll was given. -if test "${with_msvcr100dll+set}" = set; then : - withval=$with_msvcr100dll; -fi - - if test "x$with_msvcr100dll" != x; then - MSVCR100DLL="$with_msvcr100dll" - else - if test "x$HOST_CPU_BITS" = x64; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` - else - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` - if test "x$MSVCR100DLL" = x; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` - fi - fi - fi - if test "x$MSVCR100DLL" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR100DLL" >&5 -$as_echo "$MSVCR100DLL" >&6; } - - # Fail with message the path to msvcr100.dll if var MSVCR100DLL contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$MSVCR100DLL" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - MSVCR100DLL=`$CYGPATH -s -m -a "$MSVCR100DLL"` - MSVCR100DLL=`$CYGPATH -u "$MSVCR100DLL"` - else - as_fn_error $? "You cannot have spaces in the path to msvcr100.dll! \"$MSVCR100DLL\"" "$LINENO" 5 - fi - fi - - fi -fi - - - - -# Most of the probed defines are put into config.h -ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" - -# The spec.gmk file contains all variables for the make system. -ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" - -# The generated Makefile knows where the spec.gmk is and where the source is. -# You can run make from the OUTPUT_ROOT. If you have only -# one configured host, then you can also run make from the SRC_ROOT, -# since it will go look for a single spec.gmk file. Or perhaps it -# should instead make all configured hosts it can find? -ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" - - -SPEC=$OUTPUT_ROOT/spec.gmk - -CONF_NAME=$CONF_NAME - -OUTPUT_ROOT=$OUTPUT_ROOT - - -# Where are the sources. Any of these can be overridden -# using --with-override-corba and the likes. -LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" -CORBA_TOPDIR="$SRC_ROOT/corba" -JAXP_TOPDIR="$SRC_ROOT/jaxp" -JAXWS_TOPDIR="$SRC_ROOT/jaxws" -HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" -JDK_TOPDIR="$SRC_ROOT/jdk" - - - - - - - -# Check if pkg-config is available. - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PKG_CONFIG="" - fi - -fi - - -# Check whether --with-builddeps-conf was given. -if test "${with_builddeps_conf+set}" = set; then : - withval=$with_builddeps_conf; -fi - - - -# Check whether --with-builddeps-server was given. -if test "${with_builddeps_server+set}" = set; then : - withval=$with_builddeps_server; -fi - - - -# Check whether --with-builddeps-dir was given. -if test "${with_builddeps_dir+set}" = set; then : - withval=$with_builddeps_dir; -else - with_builddeps_dir=/localhome/builddeps -fi - - - -# Check whether --with-builddeps-group was given. -if test "${with_builddeps_group+set}" = set; then : - withval=$with_builddeps_group; -fi - - -# Check whether --enable-list-builddeps was given. -if test "${enable_list_builddeps+set}" = set; then : - enableval=$enable_list_builddeps; LIST_BUILDDEPS="${enableval}" -else - LIST_BUILDDEPS='no' -fi - - -if test "x$LIST_BUILDDEPS" = xyes; then - echo - echo List of build dependencies known to the configure script, - echo that can be used in builddeps.conf files: - cat $SRC_ROOT/configure.ac | grep BDEPS_CHECK_MODUL | grep -v configure.ac | cut -f 2 -d ',' | tr -d ' ' | sort - echo +for file in configure.ac *.m4 ; do + if $TEST $file -nt generated-configure.sh; then + print_error_not_up_to_date exit 1 -fi - -# If builddeps server or conf file is given. Setup buildeps usage. - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - if test "x$with_builddeps_conf" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5 -$as_echo_n "checking for supplied builddeps configuration file... " >&6; } - builddepsfile=$with_builddeps_conf - if test -s $builddepsfile; then - . $builddepsfile - { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5 -$as_echo "loaded!" >&6; } - else - as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5 - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5 -$as_echo_n "checking for builddeps.conf files in sources...... " >&6; } - builddepsfile=`mktemp` - touch $builddepsfile - # Put all found confs into a single file. - find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile - # Source the file to acquire the variables - if test -s $builddepsfile; then - . $builddepsfile - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5 -$as_echo "found at least one!" >&6; } - else - as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5 - fi - fi - # Create build and host names that use _ instead of "-" and ".". - # This is necessary to use them in variable names. - build_var=`echo ${build} | tr '-' '_' | tr '.' '_'` - host_var=`echo ${host} | tr '-' '_' | tr '.' '_'` - # Extract rewrite information for build and host - eval rewritten_build=\${REWRITE_${build_var}} - if test "x$rewritten_build" = x; then - rewritten_build=${build} - echo Build stays the same $rewritten_build - else - echo Rewriting build for builddeps into $rewritten_build - fi - eval rewritten_host=\${REWRITE_${host_var}} - if test "x$rewritten_host" = x; then - rewritten_host=${host} - echo Host stays the same $rewritten_host - else - echo Rewriting host for builddeps into $rewritten_host - fi - rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` - rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'` - fi - for ac_prog in 7z unzip -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$BDEPS_UNZIP"; then - ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_BDEPS_UNZIP="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 fi done - done -IFS=$as_save_IFS -fi -fi -BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP -if test -n "$BDEPS_UNZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5 -$as_echo "$BDEPS_UNZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$BDEPS_UNZIP" && break -done - - if test "x$BDEPS_UNZIP" = x7z; then - BDEPS_UNZIP="7z x" +if $TEST -e $conf_closed_script_dir/generated-configure.sh; then + # If closed source configure is available, make sure it is up-to-date as well. + for file in configure.ac *.m4 $conf_closed_script_dir/*.m4; do + if $TEST $file -nt $conf_closed_script_dir/generated-configure.sh; then + print_error_not_up_to_date + exit 1 fi - - for ac_prog in wget lftp ftp -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$BDEPS_FTP"; then - ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_BDEPS_FTP="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done done -IFS=$as_save_IFS -fi -fi -BDEPS_FTP=$ac_cv_prog_BDEPS_FTP -if test -n "$BDEPS_FTP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5 -$as_echo "$BDEPS_FTP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + # Test if open configure is newer than closed configure, if so, closed needs to + # be regenerated. + conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_script_dir/generated-configure.sh | cut -d" " -f 3` + conf_closed_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_closed_script_dir/generated-configure.sh | cut -d" " -f 3` + if $TEST $conf_open_configure_timestamp -gt $conf_closed_configure_timestamp; then + print_error_not_up_to_date + exit 1 + fi + fi +### +### Process command-line arguments +### +conf_processed_arguments= +conf_openjdk_target= +conf_extra_cflags= +conf_extra_cxxflags= - test -n "$BDEPS_FTP" && break -done - - - -############################################################################### -# -# Configure the development tool paths and potential sysroot. -# -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -DEVKIT= -SYS_ROOT=/ - - -# The option used to specify the target .o,.a or .so file. -# When compiling, how to specify the to be created object file. -CC_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created executable. -EXE_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created dynamically linkable library. -LD_OUT_OPTION='-o$(SPACE)' -# When archiving, how to specify the to be create static archive for object files. -AR_OUT_OPTION='rcs$(SPACE)' - - - - - -# If --build AND --host is set, then the configure script will find any -# cross compilation tools in the PATH. Cross compilation tools -# follows the cross compilation standard where they are prefixed with ${host}. -# For example the binary i686-sun-solaris2.10-gcc -# will cross compile for i686-sun-solaris2.10 -# If neither of build and host is not set, then build=host and the -# default compiler found in the path will be used. -# Setting only --host, does not seem to be really supported. -# Please set both --build and --host if you want to cross compile. - -DEFINE_CROSS_COMPILE_ARCH="" -HOSTCC="" -HOSTCXX="" - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if this is a cross compile" >&5 -$as_echo_n "checking if this is a cross compile... " >&6; } -if test "x$build_var" != "x$host_var"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, from $build_var to $host_var" >&5 -$as_echo "yes, from $build_var to $host_var" >&6; } - # We have detected a cross compile! - DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_HOST_CPU1" - # Now we to find a C/C++ compiler that can build executables for the build - # platform. We can't use the AC_PROG_CC macro, since it can only be used - # once. - for ac_prog in cl cc gcc +for conf_option do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HOSTCC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HOSTCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_HOSTCC="$HOSTCC" # Let the user override the test with a path. - ;; + case $conf_option in + --openjdk-target=*) + conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'` + continue ;; + --with-extra-cflags=*) + conf_extra_cflags=`expr "X$conf_option" : '[^=]*=\(.*\)'` + continue ;; + --with-extra-cxxflags=*) + conf_extra_cxxflags=`expr "X$conf_option" : '[^=]*=\(.*\)'` + continue ;; *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HOSTCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HOSTCC=$ac_cv_path_HOSTCC -if test -n "$HOSTCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCC" >&5 -$as_echo "$HOSTCC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$HOSTCC" && break -done - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$HOSTCC" - car="${tmp%% *}" - tmp="$HOSTCC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - HOSTCC="$car ${cdr% *}" - else - HOSTCC="$car" - fi - - for ac_prog in cl CC g++ -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HOSTCXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HOSTCXX in - [\\/]* | ?:[\\/]*) - ac_cv_path_HOSTCXX="$HOSTCXX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HOSTCXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HOSTCXX=$ac_cv_path_HOSTCXX -if test -n "$HOSTCXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCXX" >&5 -$as_echo "$HOSTCXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$HOSTCXX" && break -done - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$HOSTCXX" - car="${tmp%% *}" - tmp="$HOSTCXX EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - HOSTCXX="$car ${cdr% *}" - else - HOSTCXX="$car" - fi - - # Building for the build platform should be easy. Therefore - # we do not need any linkers or assemblers etc. -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -# You can force the sys-root if the sys-root encoded into the cross compiler tools -# is not correct. - -# Check whether --with-sys-root was given. -if test "${with_sys_root+set}" = set; then : - withval=$with_sys_root; -fi - - -if test "x$with_sys_root" != x; then - SYS_ROOT=$with_sys_root -fi - -# If a devkit is found on the builddeps server, then prepend its path to the -# PATH variable. If there are cross compilers available in the devkit, these -# will be found by AC_PROG_CC et al. - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_devkit_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The devkit comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_devkit} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for devkit" >&5 -$as_echo "$as_me: Using builddeps $resource for devkit" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# devkit is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/devkit.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_devkit_ROOT} - thecflags=${builddep_devkit_CFLAGS} - thelibs=${builddep_devkit_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency devkit" "$LINENO" 5 - fi - DEVKIT=$depdir - if test "x$theroot" != x; then - DEVKIT="$theroot" - fi - if test "x$thecflags" != x; then - DEVKIT_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - DEVKIT_LIBS="$thelibs" - fi - # Found devkit - PATH="$DEVKIT/bin:$PATH" - SYS_ROOT="$DEVKIT/${rewritten_host}/sys-root" - if test "x$x_includes" = "xNONE"; then - x_includes="$SYS_ROOT/usr/include/X11" - fi - if test "x$x_libraries" = "xNONE"; then - x_libraries="$SYS_ROOT/usr/lib" - fi - - - fi - - fi - - -if test "x$SYS_ROOT" != "x/" ; then - CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" - CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" - OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" - LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" -fi - -# Store the CFLAGS etal passed to the configure script. -ORG_CFLAGS="$CFLAGS" -ORG_CXXFLAGS="$CXXFLAGS" -ORG_OBJCFLAGS="$OBJCFLAGS" - -prepare_help_system - -# gcc is almost always present, but on Windows we -# prefer cl.exe and on Solaris we prefer CC. -# Thus test for them in this order. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in cl cc gcc - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl cc gcc -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5 ; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5 ; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5 ; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -if test "x$CC" = x; then - help_on_build_dependency devkit - as_fn_error $? "Could not find a compiler. $HELP_MSG" "$LINENO" 5 -fi -if test "x$CC" = xcc && test "x$BUILD_OS" = xmacosx; then - # Do not use cc on MacOSX use gcc instead. - CC="gcc" -fi - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CC" - car="${tmp%% *}" - tmp="$CC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CC="$car ${cdr% *}" - else - CC="$car" - fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in cl CC g++ - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in cl CC g++ -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -if test "x$CXX" = xCC && test "x$BUILD_OS" = xmacosx; then - # The found CC, even though it seems to be a g++ derivate, cannot compile - # c++ code. Override. - CXX="g++" -fi - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CXX" - car="${tmp%% *}" - tmp="$CXX EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CXX="$car ${cdr% *}" - else - CXX="$car" - fi - - -if test "x$CXX" = x || test "x$CC" = x; then - help_on_build_dependency devkit - as_fn_error $? "Could not find the needed compilers! $HELP_MSG " "$LINENO" 5 -fi - -if test "x$BUILD_OS" != xwindows; then - ac_ext=m -ac_cpp='$OBJCPP $CPPFLAGS' -ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_objc_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in gcc objcc objc cc CC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJC"; then - ac_cv_prog_OBJC="$OBJC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJC=$ac_cv_prog_OBJC -if test -n "$OBJC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJC" >&5 -$as_echo "$OBJC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$OBJC" && break - done -fi -if test -z "$OBJC"; then - ac_ct_OBJC=$OBJC - for ac_prog in gcc objcc objc cc CC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJC"; then - ac_cv_prog_ac_ct_OBJC="$ac_ct_OBJC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJC=$ac_cv_prog_ac_ct_OBJC -if test -n "$ac_ct_OBJC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJC" >&5 -$as_echo "$ac_ct_OBJC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_OBJC" && break -done - - if test "x$ac_ct_OBJC" = x; then - OBJC="gcc" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJC=$ac_ct_OBJC - fi -fi - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5 -$as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; } -if test "${ac_cv_objc_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_objc_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objc_compiler_gnu" >&5 -$as_echo "$ac_cv_objc_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GOBJC=yes -else - GOBJC= -fi -ac_test_OBJCFLAGS=${OBJCFLAGS+set} -ac_save_OBJCFLAGS=$OBJCFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5 -$as_echo_n "checking whether $OBJC accepts -g... " >&6; } -if test "${ac_cv_prog_objc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_objc_werror_flag=$ac_objc_werror_flag - ac_objc_werror_flag=yes - ac_cv_prog_objc_g=no - OBJCFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - ac_cv_prog_objc_g=yes -else - OBJCFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - -else - ac_objc_werror_flag=$ac_save_objc_werror_flag - OBJCFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - ac_cv_prog_objc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_objc_werror_flag=$ac_save_objc_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_objc_g" >&5 -$as_echo "$ac_cv_prog_objc_g" >&6; } -if test "$ac_test_OBJCFLAGS" = set; then - OBJCFLAGS=$ac_save_OBJCFLAGS -elif test $ac_cv_prog_objc_g = yes; then - if test "$GOBJC" = yes; then - OBJCFLAGS="-g -O2" - else - OBJCFLAGS="-g" - fi -else - if test "$GOBJC" = yes; then - OBJCFLAGS="-O2" - else - OBJCFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$OBJC" - car="${tmp%% *}" - tmp="$OBJC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - OBJC="$car ${cdr% *}" - else - OBJC="$car" - fi - -else - OBJC= -fi - -# Restore the flags to the user specified values. -# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" -CFLAGS="$ORG_CFLAGS" -CXXFLAGS="$ORG_CXXFLAGS" -OBJCFLAGS="$ORG_OBJCFLAGS" - -# If we are not cross compiling, use the same compilers for -# building the build platform executables. -if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then - HOSTCC="$CC" - HOSTCXX="$CXX" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. -set dummy ${ac_tool_prefix}ld; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LD"; then - ac_cv_prog_LD="$LD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LD="${ac_tool_prefix}ld" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LD=$ac_cv_prog_LD -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LD"; then - ac_ct_LD=$LD - # Extract the first word of "ld", so it can be a program name with args. -set dummy ld; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LD"; then - ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LD="ld" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LD=$ac_cv_prog_ac_ct_LD -if test -n "$ac_ct_LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 -$as_echo "$ac_ct_LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LD" = x; then - LD="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LD=$ac_ct_LD - fi -else - LD="$ac_cv_prog_LD" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$LD" - car="${tmp%% *}" - tmp="$LD EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - LD="$car ${cdr% *}" - else - LD="$car" - fi - -LD="$CC" -LDEXE="$CC" -LDCXX="$CXX" -LDEXECXX="$CXX" -# LDEXE is the linker to use, when creating executables. - -# Linking C++ libraries. - -# Linking C++ executables. - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$AR" - car="${tmp%% *}" - tmp="$AR EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - AR="$car ${cdr% *}" - else - AR="$car" - fi - -if test "x$BUILD_OS" = xmacosx; then - ARFLAGS="-r" -else - ARFLAGS="" -fi - - -COMPILER_NAME=gcc -COMPILER_TYPE=CC -if test "x$BUILD_OS" = xwindows; then : - - # For now, assume that we are always compiling using cl.exe. - CC_OUT_OPTION=-Fo - EXE_OUT_OPTION=-out: - LD_OUT_OPTION=-out: - AR_OUT_OPTION=-out: - # On Windows, reject /usr/bin/link, which is a cygwin - # program for something completely different. - # Extract the first word of "link", so it can be a program name with args. -set dummy link; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_WINLD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$WINLD"; then - ac_cv_prog_WINLD="$WINLD" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/link"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_WINLD="link" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_WINLD - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set WINLD to just the basename; use the full file name. - shift - ac_cv_prog_WINLD="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -WINLD=$ac_cv_prog_WINLD -if test -n "$WINLD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINLD" >&5 -$as_echo "$WINLD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - # Since we must ignore the first found link, WINLD will contain - # the full path to the link.exe program. - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$WINLD" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$WINLD"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - WINLD="$tmp" - - LD="$WINLD" - LDEXE="$WINLD" - LDCXX="$WINLD" - LDEXECXX="$WINLD" - - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_MT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MT"; then - ac_cv_prog_MT="$MT" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/mt"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_MT="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_MT - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set MT to just the basename; use the full file name. - shift - ac_cv_prog_MT="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -MT=$ac_cv_prog_MT -if test -n "$MT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MT" >&5 -$as_echo "$MT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$MT" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$MT"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - MT="$tmp" - - # The resource compiler - # Extract the first word of "rc", so it can be a program name with args. -set dummy rc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RC"; then - ac_cv_prog_RC="$RC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/rc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_RC="rc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_RC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set RC to just the basename; use the full file name. - shift - ac_cv_prog_RC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -RC=$ac_cv_prog_RC -if test -n "$RC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 -$as_echo "$RC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$RC" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$RC"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - RC="$tmp" - - - RC_FLAGS="-nologo /l 0x409 /r" - if test "x$VARIANT" = xOPT; then : - - RC_FLAGS="$RC_FLAGS -d NDEBUG" - -fi - JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION - if test "x$JDK_UPDATE_VERSION" = x; then : - - JDK_UPDATE_VERSION_NOTNULL=0 - -fi - RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" - - # lib.exe is used to create static libraries. - # Extract the first word of "lib", so it can be a program name with args. -set dummy lib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_WINAR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$WINAR"; then - ac_cv_prog_WINAR="$WINAR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_WINAR="lib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -WINAR=$ac_cv_prog_WINAR -if test -n "$WINAR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINAR" >&5 -$as_echo "$WINAR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$WINAR" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$WINAR"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - WINAR="$tmp" - - AR="$WINAR" - ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" - - # Extract the first word of "dumpbin", so it can be a program name with args. -set dummy dumpbin; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="dumpbin" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$DUMPBIN" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$DUMPBIN"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - DUMPBIN="$tmp" - - - COMPILER_TYPE=CL - CCXXFLAGS="$CCXXFLAGS -nologo" - LDFLAGS="$LDFLAGS -nologo -opt:ref -incremental:no" - if test "x$LEGACY_HOST_CPU1" = xi586; then - LDFLAGS="$LDFLAGS -safeseh" - fi - # TODO: make -debug optional "--disable-full-debug-symbols" - LDFLAGS="$LDFLAGS -debug" - -fi - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5 ; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CPP" - car="${tmp%% *}" - tmp="$CPP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CPP="$car ${cdr% *}" - else - CPP="$car" - fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5 ; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CXXCPP" - car="${tmp%% *}" - tmp="$CXXCPP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CXXCPP="$car ${cdr% *}" - else - CXXCPP="$car" - fi - - -# Find the right assembler. -if test "x$BUILD_OS" = xsolaris; then - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_AS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $AS in - [\\/]* | ?:[\\/]*) - ac_cv_path_AS="$AS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -AS=$ac_cv_path_AS -if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$AS" - car="${tmp%% *}" - tmp="$AS EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - AS="$car ${cdr% *}" - else - AS="$car" - fi - - ASFLAGS=" " -else - AS="$CC -c" - ASFLAGS=" " -fi - - - -if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = xmacosx; then - # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. - # While waiting for a better solution, the current workaround is to use -mstackrealign. - CFLAGS="$CFLAGS -mstackrealign" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 32-bit compiler supports -mstackrealign" >&5 -$as_echo_n "checking if 32-bit compiler supports -mstackrealign... " >&6; } - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main() { return 0; } -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path." "$LINENO" 5 - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -if test "x$BUILD_OS" = xsolaris; then - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $NM in - [\\/]* | ?:[\\/]*) - ac_cv_path_NM="$NM" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -NM=$ac_cv_path_NM -if test -n "$NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 -$as_echo "$NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$NM" - car="${tmp%% *}" - tmp="$NM EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - NM="$car ${cdr% *}" - else - NM="$car" - fi - - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $STRIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -STRIP=$ac_cv_path_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$STRIP" - car="${tmp%% *}" - tmp="$STRIP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - STRIP="$car ${cdr% *}" - else - STRIP="$car" - fi - - # Extract the first word of "mcs", so it can be a program name with args. -set dummy mcs; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MCS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MCS in - [\\/]* | ?:[\\/]*) - ac_cv_path_MCS="$MCS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MCS=$ac_cv_path_MCS -if test -n "$MCS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 -$as_echo "$MCS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MCS" - car="${tmp%% *}" - tmp="$MCS EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MCS="$car ${cdr% *}" - else - MCS="$car" - fi - -else - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. -set dummy ${ac_tool_prefix}nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - ac_cv_prog_NM="$NM" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NM="${ac_tool_prefix}nm" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NM=$ac_cv_prog_NM -if test -n "$NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 -$as_echo "$NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NM"; then - ac_ct_NM=$NM - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NM"; then - ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NM="nm" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NM=$ac_cv_prog_ac_ct_NM -if test -n "$ac_ct_NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 -$as_echo "$ac_ct_NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NM" = x; then - NM="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NM=$ac_ct_NM - fi -else - NM="$ac_cv_prog_NM" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$NM" - car="${tmp%% *}" - tmp="$NM EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - NM="$car ${cdr% *}" - else - NM="$car" - fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$STRIP" - car="${tmp%% *}" - tmp="$STRIP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - STRIP="$car ${cdr% *}" - else - STRIP="$car" - fi - -fi - -# When using cygwin, we need a wrapper binary that renames -# /cygdrive/c/ arguments into c:/ arguments and peeks into -# @files and rewrites these too! This wrapper binary is -# called uncygdrive.exe. -UNCYGDRIVE= -if test "x$BUILD_OS" = xwindows; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive can be created" >&5 -$as_echo_n "checking if uncygdrive can be created... " >&6; } - UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` - rm -f $OUTPUT_ROOT/uncygdrive* - UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` - cd $OUTPUT_ROOT - $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 - cd $CURDIR - - if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - cat $OUTPUT_ROOT/uncygdrive1.log - as_fn_error $? "Could not create $OUTPUT_ROOT/uncygdrive.exe" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNCYGDRIVE" >&5 -$as_echo "$UNCYGDRIVE" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive.exe works" >&5 -$as_echo_n "checking if uncygdrive.exe works... " >&6; } - cd $OUTPUT_ROOT - $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 - cd $CURDIR - if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - cat $OUTPUT_ROOT/uncygdrive2.log - as_fn_error $? "Uncygdrive did not work!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj -fi - - - - - # Check whether --enable-ccache was given. -if test "${enable_ccache+set}" = set; then : - enableval=$enable_ccache; ENABLE_CCACHE=${enable_ccache} -else - ENABLE_CCACHE=yes -fi - - if test "x$ENABLE_CCACHE" = xyes; then - # Extract the first word of "ccache", so it can be a program name with args. -set dummy ccache; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CCACHE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CCACHE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CCACHE=$ac_cv_path_CCACHE -if test -n "$CCACHE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5 -$as_echo "$CCACHE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccache" >&5 -$as_echo_n "checking for ccache... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: explicitly disabled" >&5 -$as_echo "explicitly disabled" >&6; } - CCACHE= - fi - - - -# Check whether --with-ccache-dir was given. -if test "${with_ccache_dir+set}" = set; then : - withval=$with_ccache_dir; -fi - - - if test "x$with_ccache_dir" != x; then - # When using a non home ccache directory, assume the use is to share ccache files - # with other users. Thus change the umask. - SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" - fi - CCACHE_FOUND="" - if test "x$CCACHE" != x; then - - if test "x$CCACHE" != x; then - CCACHE_FOUND="true" - # Only use ccache if it is 3.1.4 or later, which supports - # precompiled headers. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ccache supports precompiled headers" >&5 -$as_echo_n "checking if ccache supports precompiled headers... " >&6; } - HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.[456789]) 2> /dev/null` - if test "x$HAS_GOOD_CCACHE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccache" >&5 -$as_echo "no, disabling ccache" >&6; } - CCACHE= - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C-compiler supports ccache precompiled headers" >&5 -$as_echo_n "checking if C-compiler supports ccache precompiled headers... " >&6; } - PUSHED_FLAGS="$CXXFLAGS" - CXXFLAGS="-fpch-preprocess $CXXFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - CC_KNOWS_CCACHE_TRICK=yes -else - CC_KNOWS_CCACHE_TRICK=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CXXFLAGS="$PUSHED_FLAGS" - if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccaching of precompiled headers" >&5 -$as_echo "no, disabling ccaching of precompiled headers" >&6; } - CCACHE= - fi - fi - fi - - if test "x$CCACHE" != x; then - CCACHE_SLOPPINESS=time_macros - CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" - CCACHE_FLAGS=-fpch-preprocess - - if test "x$SET_CCACHE_DIR" != x; then - mkdir -p $CCACHE_DIR > /dev/null 2>&1 - chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 - fi - fi - - fi - - -# Used on GNU/Linux systems, can be empty... -#AC_PATH_PROG(ELFDUMP, elfdump) - -# Setup default logging of stdout and stderr to build.log in the output root. -BUILD_LOG='$(OUTPUT_ROOT)/build.log' -BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' - - - -############################################################################### -# -# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. -# (The JVM can use 32 or 64 bit Java pointers but that decision -# is made at runtime.) -# -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -OLD_CXXFLAGS="$CXXFLAGS" -if test "x$HOST_OS" = xsolaris && test "x$with_data_model" != x; then - CXXFLAGS="-m{$with_data_model} $CXXFLAGS" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5 -$as_echo_n "checking size of int *... " >&6; } -if test "${ac_cv_sizeof_int_p+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_int_p" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (int *) -See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_int_p=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int_p" >&5 -$as_echo "$ac_cv_sizeof_int_p" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT_P $ac_cv_sizeof_int_p -_ACEOF - - -CXXFLAGS="$OLD_CXXFLAGS" -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -if test "x$ac_cv_sizeof_int_p" = x0; then - # The test failed, lets pick the assumed value. - ARCH_DATA_MODEL=$HOST_CPU_BITS -else - ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` -fi - -if test "x$ARCH_DATA_MODEL" = x64; then - A_LP64="LP64:=" - ADD_LP64="-D_LP64=1" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for host address size" >&5 -$as_echo_n "checking for host address size... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ARCH_DATA_MODEL bits" >&5 -$as_echo "$ARCH_DATA_MODEL bits" >&6; } -LP64=$A_LP64 - - - -if test "x$ARCH_DATA_MODEL" != "x$HOST_CPU_BITS"; then - as_fn_error $? "The tested number of bits in the host ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the host ($HOST_CPU_BITS)" "$LINENO" 5 -fi - -############################################################################### -# -# Can the C/C++ compiler use precompiled headers? -# -# Check whether --enable-precompiled-headers was given. -if test "${enable_precompiled_headers+set}" = set; then : - enableval=$enable_precompiled_headers; ENABLE_PRECOMPH=${enable_precompiled-headers} -else - ENABLE_PRECOMPH=yes -fi - - -USE_PRECOMPILED_HEADER=1 -if test "x$ENABLE_PRECOMPH" = xno; then - USE_PRECOMPILED_HEADER=0 -fi - -if test "x$ENABLE_PRECOMPH" = xyes; then - # Check that the compiler actually supports precomp headers. - if test "x$GCC" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking that precompiled headers work" >&5 -$as_echo_n "checking that precompiled headers work... " >&6; } - echo "int alfa();" > conftest.h - $CXX -x c++-header conftest.h -o conftest.hpp.gch - if test ! -f conftest.hpp.gch; then - echo Precompiled header is not working! - USE_PRECOMPILED_HEADER=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - rm -f conftest.h - fi -fi - - - -############################################################################### -# -# How to compile shared libraries. -# - -if test "x$GCC" = xyes; then - COMPILER_NAME=gcc - PICFLAG="-fPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-shared" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' - SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1' - C_FLAG_REORDER='' - CXX_FLAG_REORDER='' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' - LD="$CC" - LDEXE="$CC" - LDCXX="$CXX" - LDEXECXX="$CXX" - # TODO: for embedded set --strip-unneeded - POST_STRIP_CMD="$STRIP -g" - - # Linking is different on MacOSX - if test "x$BUILD_OS" = xmacosx; then - # Might change in the future to clang. - COMPILER_NAME=gcc - SHARED_LIBRARY='lib$1.dylib' - SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" - SHARED_LIBRARY_SUFFIX='.dylib' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' - POST_STRIP_CMD="$STRIP -S" - fi -else - if test "x$BUILD_OS" = xsolaris; then - # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler - COMPILER_NAME=ossc - PICFLAG="-KPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-G" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='-M $1' - C_FLAG_REORDER='-xF' - CXX_FLAG_REORDER='-xF' - SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' - CFLAGS_JDKLIB_EXTRA='-xstrconst -D__solaris__' - POST_STRIP_CMD="$STRIP -x" - POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" - fi - if test "x$BUILD_OS" = xwindows; then - # If it is not gcc, then assume it is the MS Visual Studio compiler - COMPILER_NAME=cl - PICFLAG="" - LIBRARY_PREFIX= - SHARED_LIBRARY='$1.dll' - STATIC_LIBRARY='$1.lib' - SHARED_LIBRARY_FLAGS="-LD" - SHARED_LIBRARY_SUFFIX='.dll' - STATIC_LIBRARY_SUFFIX='.lib' - OBJ_SUFFIX='.obj' - EXE_SUFFIX='.exe' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='' - fi -fi - - - - - - - - - - - - - - - - - -# The (cross) compiler is now configured, we can now test capabilities -# of the host platform. - -############################################################################### -# -# Is the host little of big endian? -# - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - ENDIAN="big";; #( - no) - ENDIAN="little" ;; #( - universal) - ENDIAN="universal" - ;; #( - *) - ENDIAN="unknown" ;; - esac - - -if test "x$ENDIAN" = xuniversal; then - as_fn_error $? "It seems like someone needs to decide how we are to deal with universal binaries on the MacOSX?" "$LINENO" 5 -fi -if test "x$ENDIAN" = xunknown; then - ENDIAN="$HOST_CPU_ENDIAN" -fi -if test "x$ENDIAN" != "x$HOST_CPU_ENDIAN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)" >&5 -$as_echo "$as_me: WARNING: The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)" >&2;} - ENDIAN="$HOST_CPU_ENDIAN" -fi - - -############################################################################### -# -# We need a Boot JDK to bootstrap the build. -# -BOOT_JDK_FOUND=no - -# Check whether --with-boot-jdk was given. -if test "${with_boot_jdk+set}" = set; then : - withval=$with_boot_jdk; -fi - - -if test "x$with_boot_jdk" != x; then - BOOT_JDK=$with_boot_jdk - BOOT_JDK_FOUND=yes -fi -if test "x$BOOT_JDK_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_boot-jdk_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The boot-jdk comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_boot-jdk} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for boot-jdk" >&5 -$as_echo "$as_me: Using builddeps $resource for boot-jdk" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# boot-jdk is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/boot-jdk.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_boot-jdk_ROOT} - thecflags=${builddep_boot-jdk_CFLAGS} - thelibs=${builddep_boot-jdk_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency boot-jdk" "$LINENO" 5 - fi - BOOT_JDK=$depdir - if test "x$theroot" != x; then - BOOT_JDK="$theroot" - fi - if test "x$thecflags" != x; then - BOOT_JDK_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - BOOT_JDK_LIBS="$thelibs" - fi - BOOT_JDK_FOUND=yes - else BOOT_JDK_FOUND=no - - fi - else BOOT_JDK_FOUND=no - - fi - -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - if test "x$JAVA_HOME" != x; then - if test ! -d "$JAVA_HOME"; then - as_fn_error $? "Your JAVA_HOME points to a non-existing directory!" "$LINENO" 5 - fi - # Aha, the user has set a JAVA_HOME - # let us use that as the Boot JDK. - BOOT_JDK="$JAVA_HOME" - BOOT_JDK_FOUND=yes - # To be on the safe side, lets check that it is a JDK. - if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then - JAVAC="$BOOT_JDK/bin/javac" - JAVA="$BOOT_JDK/bin/java" - BOOT_JDK_FOUND=yes - else - as_fn_error $? "Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=$JAVA_HOME" "$LINENO" 5 - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Extract the first word of "javac", so it can be a program name with args. -set dummy javac; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_JAVAC_CHECK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $JAVAC_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_JAVAC_CHECK="$JAVAC_CHECK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_JAVAC_CHECK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -JAVAC_CHECK=$ac_cv_path_JAVAC_CHECK -if test -n "$JAVAC_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC_CHECK" >&5 -$as_echo "$JAVAC_CHECK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - # Extract the first word of "java", so it can be a program name with args. -set dummy java; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $JAVA_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -JAVA_CHECK=$ac_cv_path_JAVA_CHECK -if test -n "$JAVA_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 -$as_echo "$JAVA_CHECK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - BINARY="$JAVAC_CHECK" - if test "x$JAVAC_CHECK" = x; then - BINARY="$JAVA_CHECK" - fi - if test "x$BINARY" != x; then - # So there is a java(c) binary, it might be part of a JDK. - # Lets find the JDK/JRE directory by following symbolic links. - # Linux/GNU systems often have links from /usr/bin/java to - # /etc/alternatives/java to the real JDK binary. - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$BINARY" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$BINARY"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - BINARY="$tmp" - - - if test "x$BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READLINK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READLINK in - [\\/]* | ?:[\\/]*) - ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READLINK=$ac_cv_path_READLINK -if test -n "$READLINK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 -$as_echo "$READLINK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - BINARY=`$READLINK -f $BINARY` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname $BINARY` - FIL=`basename $BINARY` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - BINARY=$DIR/$FIL - fi - fi - - BOOT_JDK=`dirname $BINARY` - BOOT_JDK=`cd $BOOT_JDK/..; pwd` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Try the MacOSX way. - if test -x /usr/libexec/java_home; then - BOOT_JDK=`/usr/libexec/java_home` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Extract the first word of "java", so it can be a program name with args. -set dummy java; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $JAVA_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -JAVA_CHECK=$ac_cv_path_JAVA_CHECK -if test -n "$JAVA_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 -$as_echo "$JAVA_CHECK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$JAVA_CHECK" != x; then - # There is a java in the path. But apparently we have not found a javac - # in the path, since that would have been tested earlier. - if test "x$HOST_OS" = xwindows; then - # Now if this is a windows platform. The default installation of a JDK - # actually puts the JRE in the path and keeps the JDK out of the path! - # Go look in the default installation location. - BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=yes - fi - fi - if test "x$BOOT_JDK_FOUND" = xno; then - help_on_build_dependency openjdk - as_fn_error $? "Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG" "$LINENO" 5 - fi - else - help_on_build_dependency openjdk - as_fn_error $? "Could not find a JDK. $HELP_MSG" "$LINENO" 5 - fi -fi - - - if test "x$BUILD_OS" = "xwindows"; then - # Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CYGPATH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CYGPATH in - [\\/]* | ?:[\\/]*) - ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CYGPATH=$ac_cv_path_CYGPATH -if test -n "$CYGPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 -$as_echo "$CYGPATH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - tmp="$BOOT_JDK" - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - BOOT_JDK="$tmp" - fi - - -# Now see if we can find the rt.jar, or its nearest equivalent. -BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" - - # Fail with message the path to the Boot JDK rt.jar (or nearest equivalent) if var BOOT_RTJAR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_RTJAR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - BOOT_RTJAR=`$CYGPATH -s -m -a "$BOOT_RTJAR"` - BOOT_RTJAR=`$CYGPATH -u "$BOOT_RTJAR"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK rt.jar (or nearest equivalent)! \"$BOOT_RTJAR\"" "$LINENO" 5 - fi - fi - - -BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" - - # Fail with message the path to the Boot JDK tools.jar (or nearest equivalent) if var BOOT_TOOLSJAR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_TOOLSJAR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - BOOT_TOOLSJAR=`$CYGPATH -s -m -a "$BOOT_TOOLSJAR"` - BOOT_TOOLSJAR=`$CYGPATH -u "$BOOT_TOOLSJAR"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK tools.jar (or nearest equivalent)! \"$BOOT_TOOLSJAR\"" "$LINENO" 5 - fi - fi - - -if test ! -f $BOOT_RTJAR; then - # On MacOSX it is called classes.jar - BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar - if test ! -f $BOOT_RTJAR; then - as_fn_error $? "Cannot find the rt.jar or its equivalent!" "$LINENO" 5 - fi - # Remove the .. - BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" - # The tools.jar is part of classes.jar - BOOT_TOOLSJAR="$BOOT_RTJAR" -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 -$as_echo_n "checking for Boot JDK... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 -$as_echo "$BOOT_JDK" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot rt.jar" >&5 -$as_echo_n "checking for Boot rt.jar... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_RTJAR" >&5 -$as_echo "$BOOT_RTJAR" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot tools.jar" >&5 -$as_echo_n "checking for Boot tools.jar... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_TOOLSJAR" >&5 -$as_echo "$BOOT_TOOLSJAR" >&6; } - -# Use the java tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 -$as_echo_n "checking for java in Boot JDK... " >&6; } -JAVA=$BOOT_JDK/bin/java -if test ! -x $JAVA; then - as_fn_error $? "Could not find a working java" "$LINENO" 5 -fi -BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes $BOOT_JDK_VERSION" >&5 -$as_echo "yes $BOOT_JDK_VERSION" >&6; } - - -# Extra M4 quote needed to protect [] in grep expression. -FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` -if test "x$FOUND_VERSION_78" = x; then - help_on_build_dependency openjdk - as_fn_error $? "Your boot-jdk must be version 7 or 8. $HELP_MSG" "$LINENO" 5 -fi - -# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. -BOOT_JDK_SOURCETARGET="-source 7 -target 7" - - -# Use the javac tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 -$as_echo_n "checking for javac in Boot JDK... " >&6; } -JAVAC=$BOOT_JDK/bin/javac -if test ! -x $JAVAC; then - as_fn_error $? "Could not find a working javac" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - - -# Use the javah tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 -$as_echo_n "checking for javah in Boot JDK... " >&6; } -JAVAH=$BOOT_JDK/bin/javah -if test ! -x $JAVAH; then - as_fn_error $? "Could not find a working javah" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - -# Use the jar tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 -$as_echo_n "checking for jar in Boot JDK... " >&6; } -JAR=$BOOT_JDK/bin/jar -if test ! -x $JAR; then - as_fn_error $? "Could not find a working jar" "$LINENO" 5 -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -# Use the rmic tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rmic in Boot JDK" >&5 -$as_echo_n "checking for rmic in Boot JDK... " >&6; } -RMIC=$BOOT_JDK/bin/rmic -if test ! -x $RMIC; then - as_fn_error $? "Could not find a working rmic" "$LINENO" 5 -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -# Use the native2ascii tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 -$as_echo_n "checking for native2ascii in Boot JDK... " >&6; } -NATIVE2ASCII=$BOOT_JDK/bin/native2ascii -if test ! -x $NATIVE2ASCII; then - as_fn_error $? "Could not find a working native2ascii" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - -############################################################################### -# -# Pickup additional source for a component from outside of the source root -# or override source for a component. -# - -# Check whether --with-add-source-root was given. -if test "${with_add_source_root+set}" = set; then : - withval=$with_add_source_root; -fi - - - -# Check whether --with-override-source-root was given. -if test "${with_override_source_root+set}" = set; then : - withval=$with_override_source_root; -fi - - - -# Check whether --with-adds-and-overrides was given. -if test "${with_adds_and_overrides+set}" = set; then : - withval=$with_adds_and_overrides; -fi - - -if test "x$with_adds_and_overrides" != x; then - with_add_source_root="$with_adds_and_overrides/adds" - with_override_source_root="$with_adds_and_overrides/overrides" -fi - -if test "x$with_add_source_root" != x; then - if ! test -d $with_add_source_root; then - as_fn_error $? "Trying to use a non-existant add-source-root $with_add_source_root" "$LINENO" 5 - fi - CURDIR="$PWD" - cd "$with_add_source_root" - ADD_SRC_ROOT="`pwd`" - cd "$CURDIR" - # Verify that the addon source root does not have any root makefiles. - # If it does, then it is usually an error, prevent this. - if test -f $with_add_source_root/langtools/makefiles/Makefile || \ - test -f $with_add_source_root/langtools/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/corba/makefiles/Makefile || \ - test -f $with_add_source_root/corba/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full corba repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ - test -f $with_add_source_root/jaxp/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ - test -f $with_add_source_root/jaxws/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ - test -f $with_add_source_root/hotspot/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/jdk/makefiles/Makefile || \ - test -f $with_add_source_root/jdk/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources." "$LINENO" 5 - fi -fi - - -if test "x$with_override_source_root" != x; then - if ! test -d $with_override_source_root; then - as_fn_error $? "Trying to use a non-existant override-source-root $with_override_source_root" "$LINENO" 5 - fi - CURDIR="$PWD" - cd "$with_override_source_root" - OVERRIDE_SRC_ROOT="`pwd`" - cd "$CURDIR" - if test -f $with_override_source_root/langtools/makefiles/Makefile || \ - test -f $with_override_source_root/langtools/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/corba/makefiles/Makefile || \ - test -f $with_override_source_root/corba/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full corba repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ - test -f $with_override_source_root/jaxp/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ - test -f $with_override_source_root/jaxws/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ - test -f $with_override_source_root/hotspot/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/jdk/makefiles/Makefile || \ - test -f $with_override_source_root/jdk/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override." "$LINENO" 5 - fi -fi - - -############################################################################### -# -# Override a repo completely, this is used for example when you have 3 small -# development sandboxes of the langtools sources and want to avoid having 3 full -# OpenJDK sources checked out on disk. -# -# Assuming that the 3 langtools sandboxes are located here: -# /home/fredrik/sandbox1/langtools -# /home/fredrik/sandbox2/langtools -# /home/fredrik/sandbox3/langtools -# -# From the source root you create build subdirs manually: -# mkdir -p build1 build2 build3 -# in each build directory run: -# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) -# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) -# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) -# - - -# Check whether --with-override-langtools was given. -if test "${with_override_langtools+set}" = set; then : - withval=$with_override_langtools; -fi - - - -# Check whether --with-override-corba was given. -if test "${with_override_corba+set}" = set; then : - withval=$with_override_corba; -fi - - - -# Check whether --with-override-jaxp was given. -if test "${with_override_jaxp+set}" = set; then : - withval=$with_override_jaxp; -fi - - - -# Check whether --with-override-jaxws was given. -if test "${with_override_jaxws+set}" = set; then : - withval=$with_override_jaxws; -fi - - - -# Check whether --with-override-hotspot was given. -if test "${with_override_hotspot+set}" = set; then : - withval=$with_override_hotspot; -fi - - - -# Check whether --with-override-jdk was given. -if test "${with_override_jdk+set}" = set; then : - withval=$with_override_jdk; -fi - - -if test "x$with_override_langtools" != x; then - CURDIR="$PWD" - cd "$with_override_langtools" - LANGTOOLS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override langtools with a full langtools repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if langtools should be overridden" >&5 -$as_echo_n "checking if langtools should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $LANGTOOLS_TOPDIR" >&5 -$as_echo "yes with $LANGTOOLS_TOPDIR" >&6; } -fi -if test "x$with_override_corba" != x; then - CURDIR="$PWD" - cd "$with_override_corba" - CORBA_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override corba with a full corba repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if corba should be overridden" >&5 -$as_echo_n "checking if corba should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $CORBA_TOPDIR" >&5 -$as_echo "yes with $CORBA_TOPDIR" >&6; } -fi -if test "x$with_override_jaxp" != x; then - CURDIR="$PWD" - cd "$with_override_jaxp" - JAXP_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override jaxp with a full jaxp repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxp should be overridden" >&5 -$as_echo_n "checking if jaxp should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXP_TOPDIR" >&5 -$as_echo "yes with $JAXP_TOPDIR" >&6; } -fi -if test "x$with_override_jaxws" != x; then - CURDIR="$PWD" - cd "$with_override_jaxws" - JAXWS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override jaxws with a full jaxws repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxws should be overridden" >&5 -$as_echo_n "checking if jaxws should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXWS_TOPDIR" >&5 -$as_echo "yes with $JAXWS_TOPDIR" >&6; } -fi -if test "x$with_override_hotspot" != x; then - CURDIR="$PWD" - cd "$with_override_hotspot" - HOTSPOT_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ - ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override hotspot with a full hotspot repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if hotspot should be overridden" >&5 -$as_echo_n "checking if hotspot should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $HOTSPOT_TOPDIR" >&5 -$as_echo "yes with $HOTSPOT_TOPDIR" >&6; } -fi -if test "x$with_override_jdk" != x; then - CURDIR="$PWD" - cd "$with_override_jdk" - JDK_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JDK_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override JDK with a full JDK repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if JDK should be overridden" >&5 -$as_echo_n "checking if JDK should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JDK_TOPDIR" >&5 -$as_echo "yes with $JDK_TOPDIR" >&6; } -fi - -############################################################################### -# -# Specify options for anything that is run with the Boot JDK. -# - -# Check whether --with-boot-jdk-jvmargs was given. -if test "${with_boot_jdk_jvmargs+set}" = set; then : - withval=$with_boot_jdk_jvmargs; -fi - - -if test "x$with_boot_jdk_jvmargs" = x; then - # Not all JVM:s accept the same arguments on the command line. - # OpenJDK specific increase in thread stack for JDK build, - # well more specifically, when running javac. - if test "x$BUILD_NUM_BITS" = x32; then - STACK_SIZE=768 - else - # Running Javac on a JVM on a 64-bit machine, the stack takes more space - # since 64-bit pointers are pushed on the stach. Apparently, we need - # to increase the stack space when javacing the JDK.... - STACK_SIZE=1536 - fi - - # Minimum amount of heap memory. - - # Test if -Xms64M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xms64M to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -Xms64M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xms64M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xms64M" - fi - - if test "x$HOST_OS" = "xmacosx"; then - # Why does macosx need more heap? Its the huge JDK batch. - - # Test if -Xmx1600M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xmx1600M to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -Xmx1600M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xmx1600M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1600M" - fi - - else - - # Test if -Xmx1100M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xmx1100M to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -Xmx1100M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xmx1100M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1100M" - fi - - fi - # When is adding -client something that speeds up the JVM? - # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) - - # Test if -XX:PermSize=32m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:PermSize=32m to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:PermSize=32m -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:PermSize=32m -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:PermSize=32m" - fi - - - # Test if -XX:MaxPermSize=160m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:MaxPermSize=160m to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:MaxPermSize=160m" - fi - - - # Test if -XX:ThreadStackSize=$STACK_SIZE is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:ThreadStackSize=$STACK_SIZE to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:ThreadStackSize=$STACK_SIZE" - fi - - # Disable special log output when a debug build is used as Boot JDK... - - # Test if -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput" - fi - -fi - -BOOT_JDK_JVMARGS=$boot_jdk_jvmargs - - - -# Check whether --with-server-java was given. -if test "${with_server_java+set}" = set; then : - withval=$with_server_java; -fi - - -if test "x$with_server_java" != x; then - SERVER_JAVA="$with_server_java" - FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" = x; then - as_fn_error $? "Could not execute server java: $SERVER_JAVA" "$LINENO" 5 - fi -else - SERVER_JAVA="" - # Hotspot specific options. - - # Test if -XX:+UseParallelOldGC is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:+UseParallelOldGC to SERVER_JAVA - FOUND_WARN=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -XX:+UseParallelOldGC" - fi - - - # Test if -verbosegc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -verbosegc to SERVER_JAVA - FOUND_WARN=`$JAVA -verbosegc -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -verbosegc -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -verbosegc" - fi - - # JRockit specific options. - - # Test if -Xverbose:gc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xverbose:gc to SERVER_JAVA - FOUND_WARN=`$JAVA -Xverbose:gc -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xverbose:gc -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xverbose:gc" - fi - - SERVER_JAVA="$JAVA $SERVER_JAVA" -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use shared server for javac" >&5 -$as_echo_n "checking whether to use shared server for javac... " >&6; } -# Check whether --enable-javac-server was given. -if test "${enable_javac_server+set}" = set; then : - enableval=$enable_javac_server; ENABLE_JAVAC_SERVER="${enableval}" -else - ENABLE_JAVAC_SERVER='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_SERVER" >&5 -$as_echo "$ENABLE_JAVAC_SERVER" >&6; } -if test "x$ENABLE_JAVAC_SERVER" = xyes; then - JAVAC_USE_REMOTE=true - JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" -else - JAVAC_USE_REMOTE=false - JAVAC_SERVERS= -fi - - - - -# Check whether --with-javac-server-cores was given. -if test "${with_javac_server_cores+set}" = set; then : - withval=$with_javac_server_cores; -fi - -if test "x$with_javac_server_cores" != x; then - JAVAC_SERVER_CORES="$with_javac_server_cores" -else - if test "$NUM_CORES" -gt 16; then - # We set this arbitrary limit because we want to limit the heap - # size of the javac server. - # In the future we will make the javac compilers in the server - # share more and more state, thus enabling us to use more and - # more concurrent threads in the server. - JAVAC_SERVER_CORES="16" - else - JAVAC_SERVER_CORES="$NUM_CORES" - fi - - if test "$MEMORY_SIZE" -gt "17000"; then - MAX_HEAP_MEM=10000 - - # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -d64 to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -d64" - fi - - - # Test if -Xms10G -Xmx10G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms10G -Xmx10G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms10G -Xmx10G" - fi - - - # Test if -Xmn2G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn2G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn2G" - fi - - elif test "$MEMORY_SIZE" -gt "10000"; then - MAX_HEAP_MEM=6000 - - # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -d64 to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -d64" - fi - - - # Test if -Xms6G -Xmx6G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms6G -Xmx6G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms6G -Xmx6G" - fi - - - # Test if -Xmn1G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn1G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn1G" - fi - - elif test "$MEMORY_SIZE" -gt "5000"; then - MAX_HEAP_MEM=3000 - - # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -d64 to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -d64" - fi - - - # Test if -Xms1G -Xmx3G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms1G -Xmx3G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx3G" - fi - - - # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn256M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn256M" - fi - - elif test "$MEMORY_SIZE" -gt "3800"; then - MAX_HEAP_MEM=2500 - - # Test if -Xms1G -Xmx2500M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms1G -Xmx2500M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx2500M" - fi - - - # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn256M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn256M" - fi - - elif test "$MEMORY_SIZE" -gt "1900"; then - MAX_HEAP_MEM=1200 - - # Test if -Xms700M -Xmx1200M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms700M -Xmx1200M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms700M -Xmx1200M" - fi - - - # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn256M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn256M" - fi - - elif test "$MEMORY_SIZE" -gt "1000"; then - MAX_HEAP_MEM=900 - - # Test if -Xms400M -Xmx900M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms400M -Xmx900M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms400M -Xmx900M" - fi - - - # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn128M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn128M" - fi - - else - MAX_HEAP_MEM=512 - - # Test if -Xms256M -Xmx512M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms256M -Xmx512M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms256M -Xmx512M" - fi - - - # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn128M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn128M" - fi - - fi - - MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` - if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if number of server cores must be reduced" >&5 -$as_echo_n "checking if number of server cores must be reduced... " >&6; } - JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&5 -$as_echo "yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&6; } - fi -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to track dependencies between Java packages" >&5 -$as_echo_n "checking whether to track dependencies between Java packages... " >&6; } -# Check whether --enable-javac-deps was given. -if test "${enable_javac_deps+set}" = set; then : - enableval=$enable_javac_deps; ENABLE_JAVAC_DEPS="${enableval}" -else - ENABLE_JAVAC_DEPS='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_DEPS" >&5 -$as_echo "$ENABLE_JAVAC_DEPS" >&6; } -if test "x$ENABLE_JAVAC_DEPS" = xyes; then - JAVAC_USE_DEPS=true -else - JAVAC_USE_DEPS=false -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use multiple cores for javac compilation" >&5 -$as_echo_n "checking whether to use multiple cores for javac compilation... " >&6; } -# Check whether --enable-javac-multi-core was given. -if test "${enable_javac_multi_core+set}" = set; then : - enableval=$enable_javac_multi_core; ENABLE_JAVAC_MULTICORE="${enableval}" -else - ENABLE_JAVAC_MULTICORE='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_MULTICORE" >&5 -$as_echo "$ENABLE_JAVAC_MULTICORE" >&6; } -if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then - JAVAC_USE_MODE=MULTI_CORE_CONCURRENT -else - JAVAC_USE_MODE=SINGLE_THREADED_BATCH - if test "x$ENABLE_JAVAC_DEPS" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&5 -$as_echo "$as_me: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling dependency tracking for you now." >&5 -$as_echo "$as_me: WARNING: Disabling dependency tracking for you now." >&2;} - JAVAC_USE_DEPS=false - fi - if test "x$ENABLE_JAVAC_SERVER" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&5 -$as_echo "$as_me: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling javac server for you now." >&5 -$as_echo "$as_me: WARNING: Disabling javac server for you now." >&2;} - JAVAC_USE_REMOTE=false - fi -fi - - -############################################################################### -# -# OS specific settings that we never will need to probe. -# -if test "x$HOST_OS" = xlinux; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Linux?" >&5 -$as_echo_n "checking what is not needed on Linux?... " >&6; } - PULSE_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: pulse" >&5 -$as_echo "pulse" >&6; } -fi - -if test "x$HOST_OS" = xsolaris; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Solaris?" >&5 -$as_echo_n "checking what is not needed on Solaris?... " >&6; } - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 -$as_echo "alsa pulse" >&6; } -fi - -if test "x$HOST_OS" = xwindows; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Windows?" >&5 -$as_echo_n "checking what is not needed on Windows?... " >&6; } - CUPS_NOT_NEEDED=yes - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - X11_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa cups pulse x11" >&5 -$as_echo "alsa cups pulse x11" >&6; } -fi - -if test "x$HOST_OS" = xmacosx; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on MacOSX?" >&5 -$as_echo_n "checking what is not needed on MacOSX?... " >&6; } - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - X11_NOT_NEEDED=yes - FREETYPE2_NOT_NEEDED=yes - # If the java runtime framework is disabled, then we need X11. - # This will be adjusted below. - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse x11" >&5 -$as_echo "alsa pulse x11" >&6; } -fi - -if test "x$HOST_OS" = xbsd; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on bsd?" >&5 -$as_echo_n "checking what is not needed on bsd?... " >&6; } - ALSA_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa" >&5 -$as_echo "alsa" >&6; } -fi - -############################################################################### -# -# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM -# that uses this API. -# -# Check whether --enable-macosx-runtime-support was given. -if test "${enable_macosx_runtime_support+set}" = set; then : - enableval=$enable_macosx_runtime_support; MACOSX_RUNTIME_SUPPORT="${enableval}" -else - MACOSX_RUNTIME_SUPPORT="no" -fi - - -USE_MACOSX_RUNTIME_SUPPORT=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for explicit Java runtime support in the OS" >&5 -$as_echo_n "checking for explicit Java runtime support in the OS... " >&6; } -if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then - if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then - MACOSX_RUNTIME_SUPPORT=yes - USE_MACOSX_RUNTIME_SUPPORT=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, does not need alsa freetype2 pulse and X11" >&5 -$as_echo "yes, does not need alsa freetype2 pulse and X11" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, but explicitly disabled." >&5 -$as_echo "yes, but explicitly disabled." >&6; } - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -if test "x$HOST_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on an X11 build on MacOSX?" >&5 -$as_echo_n "checking what is not needed on an X11 build on MacOSX?... " >&6; } - X11_NOT_NEEDED= - FREETYPE2_NOT_NEEDED= - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 -$as_echo "alsa pulse" >&6; } -fi - -############################################################################### -# -# Check for X Windows -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 -$as_echo_n "checking for X... " >&6; } - - -# Check whether --with-x was given. -if test "${with_x+set}" = set; then : - withval=$with_x; -fi - -# $have_x is `yes', `no', `disabled', or empty when we do not yet know. -if test "x$with_x" = xno; then - # The user explicitly disabled X. - have_x=disabled -else - case $x_includes,$x_libraries in #( - *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #( - *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # One or both of the vars are not set, and there is no cached value. -ac_x_includes=no ac_x_libraries=no -rm -f -r conftest.dir -if mkdir conftest.dir; then - cd conftest.dir - cat >Imakefile <<'_ACEOF' -incroot: - @echo incroot='${INCROOT}' -usrlibdir: - @echo usrlibdir='${USRLIBDIR}' -libdir: - @echo libdir='${LIBDIR}' -_ACEOF - if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then - # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. - for ac_var in incroot usrlibdir libdir; do - eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" - done - # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. - for ac_extension in a so sl dylib la dll; do - if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && - test -f "$ac_im_libdir/libX11.$ac_extension"; then - ac_im_usrlibdir=$ac_im_libdir; break - fi - done - # Screen out bogus values from the imake configuration. They are - # bogus both because they are the default anyway, and because - # using them would break gcc on systems where it needs fixed includes. - case $ac_im_incroot in - /usr/include) ac_x_includes= ;; - *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; - esac - case $ac_im_usrlibdir in - /usr/lib | /usr/lib64 | /lib | /lib64) ;; - *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; - esac - fi - cd .. - rm -f -r conftest.dir -fi - -# Standard set of common directories for X headers. -# Check X11 before X11Rn because it is often a symlink to the current release. -ac_x_header_dirs=' -/usr/X11/include -/usr/X11R7/include -/usr/X11R6/include -/usr/X11R5/include -/usr/X11R4/include - -/usr/include/X11 -/usr/include/X11R7 -/usr/include/X11R6 -/usr/include/X11R5 -/usr/include/X11R4 - -/usr/local/X11/include -/usr/local/X11R7/include -/usr/local/X11R6/include -/usr/local/X11R5/include -/usr/local/X11R4/include - -/usr/local/include/X11 -/usr/local/include/X11R7 -/usr/local/include/X11R6 -/usr/local/include/X11R5 -/usr/local/include/X11R4 - -/usr/X386/include -/usr/x386/include -/usr/XFree86/include/X11 - -/usr/include -/usr/local/include -/usr/unsupported/include -/usr/athena/include -/usr/local/x11r5/include -/usr/lpp/Xamples/include - -/usr/openwin/include -/usr/openwin/share/include' - -if test "$ac_x_includes" = no; then - # Guess where to find include files, by looking for Xlib.h. - # First, try using that file with no special directory specified. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # We can compile using X headers with no special include directory. -ac_x_includes= -else - for ac_dir in $ac_x_header_dirs; do - if test -r "$ac_dir/X11/Xlib.h"; then - ac_x_includes=$ac_dir - break - fi -done -fi -rm -f conftest.err conftest.i conftest.$ac_ext -fi # $ac_x_includes = no - -if test "$ac_x_libraries" = no; then - # Check for the libraries. - # See if we find them without any special options. - # Don't add to $LIBS permanently. - ac_save_LIBS=$LIBS - LIBS="-lX11 $LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -XrmInitialize () - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - LIBS=$ac_save_LIBS -# We can link X programs with no special library path. -ac_x_libraries= -else - LIBS=$ac_save_LIBS -for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` -do - # Don't even attempt the hair of trying to link an X program! - for ac_extension in a so sl dylib la dll; do - if test -r "$ac_dir/libX11.$ac_extension"; then - ac_x_libraries=$ac_dir - break 2 - fi - done -done -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi # $ac_x_libraries = no - -case $ac_x_includes,$ac_x_libraries in #( - no,* | *,no | *\'*) - # Didn't find X, or a directory has "'" in its name. - ac_cv_have_x="have_x=no";; #( - *) - # Record where we found X for the cache. - ac_cv_have_x="have_x=yes\ - ac_x_includes='$ac_x_includes'\ - ac_x_libraries='$ac_x_libraries'" -esac -fi -;; #( - *) have_x=yes;; - esac - eval "$ac_cv_have_x" -fi # $with_x != no - -if test "$have_x" != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 -$as_echo "$have_x" >&6; } - no_x=yes -else - # If each of the values was on the command line, it overrides each guess. - test "x$x_includes" = xNONE && x_includes=$ac_x_includes - test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries - # Update the cache value to reflect the command line values. - ac_cv_have_x="have_x=yes\ - ac_x_includes='$x_includes'\ - ac_x_libraries='$x_libraries'" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 -$as_echo "libraries $x_libraries, headers $x_includes" >&6; } -fi - -if test "$no_x" = yes; then - # Not all programs may use this symbol, but it does not hurt to define it. - -$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h - - X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= -else - if test -n "$x_includes"; then - X_CFLAGS="$X_CFLAGS -I$x_includes" - fi - - # It would also be nice to do this for all -L options, not just this one. - if test -n "$x_libraries"; then - X_LIBS="$X_LIBS -L$x_libraries" - # For Solaris; some versions of Sun CC require a space after -R and - # others require no space. Words are not sufficient . . . . - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 -$as_echo_n "checking whether -R must be followed by a space... " >&6; } - ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" - ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - X_LIBS="$X_LIBS -R$x_libraries" -else - LIBS="$ac_xsave_LIBS -R $x_libraries" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - X_LIBS="$X_LIBS -R $x_libraries" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 -$as_echo "neither works" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag - LIBS=$ac_xsave_LIBS - fi - - # Check for system-dependent libraries X programs must link with. - # Do this before checking for the system-independent R6 libraries - # (-lICE), since we may need -lsocket or whatever for X linking. - - if test "$ISC" = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" - else - # Martyn Johnson says this is needed for Ultrix, if the X - # libraries were built with DECnet support. And Karl Berry says - # the Alpha needs dnet_stub (dnet does not exist). - ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char XOpenDisplay (); -int -main () -{ -return XOpenDisplay (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } -if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dnet_ntoa (); -int -main () -{ -return dnet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_dnet_dnet_ntoa=yes -else - ac_cv_lib_dnet_dnet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 -$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" -fi - - if test $ac_cv_lib_dnet_dnet_ntoa = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } -if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet_stub $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dnet_ntoa (); -int -main () -{ -return dnet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_dnet_stub_dnet_ntoa=yes -else - ac_cv_lib_dnet_stub_dnet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 -$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" -fi - - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$ac_xsave_LIBS" - - # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, - # to get the SysV transport functions. - # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) - # needs -lnsl. - # The nsl library prevents programs from opening the X display - # on Irix 5.2, according to T.E. Dickey. - # The functions gethostbyname, getservbyname, and inet_addr are - # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. - ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" -if test "x$ac_cv_func_gethostbyname" = x""yes; then : - -fi - - if test $ac_cv_func_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 -$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } -if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_nsl_gethostbyname=yes -else - ac_cv_lib_nsl_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 -$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" -fi - - if test $ac_cv_lib_nsl_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 -$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } -if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lbsd $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_bsd_gethostbyname=yes -else - ac_cv_lib_bsd_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 -$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } -if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" -fi - - fi - fi - - # lieder@skyler.mavd.honeywell.com says without -lsocket, - # socket/setsockopt and other routines are undefined under SCO ODT - # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary - # on later versions), says Simon Leinen: it contains gethostby* - # variants that don't use the name server (or something). -lsocket - # must be given before -lnsl if both are needed. We assume that - # if connect needs -lnsl, so does gethostbyname. - ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect" -if test "x$ac_cv_func_connect" = x""yes; then : - -fi - - if test $ac_cv_func_connect = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 -$as_echo_n "checking for connect in -lsocket... " >&6; } -if test "${ac_cv_lib_socket_connect+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $X_EXTRA_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char connect (); -int -main () -{ -return connect (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_socket_connect=yes -else - ac_cv_lib_socket_connect=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 -$as_echo "$ac_cv_lib_socket_connect" >&6; } -if test "x$ac_cv_lib_socket_connect" = x""yes; then : - X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" -fi - - fi - - # Guillermo Gomez says -lposix is necessary on A/UX. - ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove" -if test "x$ac_cv_func_remove" = x""yes; then : - -fi - - if test $ac_cv_func_remove = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 -$as_echo_n "checking for remove in -lposix... " >&6; } -if test "${ac_cv_lib_posix_remove+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lposix $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char remove (); -int -main () -{ -return remove (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_posix_remove=yes -else - ac_cv_lib_posix_remove=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 -$as_echo "$ac_cv_lib_posix_remove" >&6; } -if test "x$ac_cv_lib_posix_remove" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" -fi - - fi - - # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. - ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat" -if test "x$ac_cv_func_shmat" = x""yes; then : - -fi - - if test $ac_cv_func_shmat = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 -$as_echo_n "checking for shmat in -lipc... " >&6; } -if test "${ac_cv_lib_ipc_shmat+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lipc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shmat (); -int -main () -{ -return shmat (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_ipc_shmat=yes -else - ac_cv_lib_ipc_shmat=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 -$as_echo "$ac_cv_lib_ipc_shmat" >&6; } -if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" -fi - - fi - fi - - # Check for libraries that X11R6 Xt/Xaw programs need. - ac_save_LDFLAGS=$LDFLAGS - test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" - # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to - # check for ICE first), but we must link in the order -lSM -lICE or - # we get undefined symbols. So assume we have SM if we have ICE. - # These have to be linked with before -lX11, unlike the other - # libraries we check for below, so use a different variable. - # John Interrante, Karl Berry - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 -$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } -if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lICE $X_EXTRA_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char IceConnectionNumber (); -int -main () -{ -return IceConnectionNumber (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_ICE_IceConnectionNumber=yes -else - ac_cv_lib_ICE_IceConnectionNumber=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 -$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } -if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : - X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" -fi - - LDFLAGS=$ac_save_LDFLAGS - -fi - - -if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - as_fn_error $? "Could not find X11 libraries. $HELP_MSG" "$LINENO" 5 -fi - -# Some of the old makefiles require a setting of OPENWIN_HOME -# Since the X11R6 directory has disappeared on later Linuxes, -# we need to probe for it. -if test "x$HOST_OS" = xlinux; then - if test -d "$SYS_ROOT/usr/X11R6"; then - OPENWIN_HOME="$SYS_ROOT/usr/X11R6" - fi - if test -d "$SYS_ROOT/usr/include/X11"; then - OPENWIN_HOME="$SYS_ROOT/usr" - fi -fi -if test "x$HOST_OS" = xsolaris; then - OPENWIN_HOME="/usr/openwin" -fi - - - -# -# Weird Sol10 something check...TODO change to try compile -# -if test "x${HOST_OS}" = xsolaris; then - if test "`uname -r`" = "5.10"; then - if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then - X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" - fi - fi -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -OLD_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $X_CFLAGS" - - -for ac_header in X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - X11_A_OK=yes -else - X11_A_OK=no -fi - -done - -CFLAGS="$OLD_CFLAGS" -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - as_fn_error $? "Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG" "$LINENO" 5 -fi - - - - -############################################################################### -# -# The common unix printing system cups is used to print from java. -# - -# Check whether --with-cups was given. -if test "${with_cups+set}" = set; then : - withval=$with_cups; -fi - - -# Check whether --with-cups-include was given. -if test "${with_cups_include+set}" = set; then : - withval=$with_cups_include; -fi - - -# Check whether --with-cups-lib was given. -if test "${with_cups_lib+set}" = set; then : - withval=$with_cups_lib; -fi - - -if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cups not used, so --with-cups is ignored" >&5 -$as_echo "$as_me: WARNING: cups not used, so --with-cups is ignored" >&2;} - fi - CUPS_CFLAGS= - CUPS_LIBS= -else - CUPS_FOUND=no - - if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then - as_fn_error $? "It is not possible to disable the use of cups. Remove the --without-cups option." "$LINENO" 5 - fi - - if test "x${with_cups}" != x; then - CUPS_LIBS="-L${with_cups}/lib -lcups" - CUPS_CFLAGS="-I${with_cups}/include" - CUPS_FOUND=yes - fi - if test "x${with_cups_include}" != x; then - CUPS_CFLAGS="-I${with_cups_include}" - CUPS_FOUND=yes - fi - if test "x${with_cups_lib}" != x; then - CUPS_LIBS="-L${with_cups_lib} -lcups" - CUPS_FOUND=yes - fi - if test "x$CUPS_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_cups_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_cups_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_cups_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The cups comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_cups} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for cups" >&5 -$as_echo "$as_me: Using builddeps $resource for cups" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# cups is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/cups.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_cups_ROOT} - thecflags=${builddep_cups_CFLAGS} - thelibs=${builddep_cups_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency cups" "$LINENO" 5 - fi - CUPS=$depdir - if test "x$theroot" != x; then - CUPS="$theroot" - fi - if test "x$thecflags" != x; then - CUPS_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - CUPS_LIBS="$thelibs" - fi - CUPS_FOUND=yes - - fi - - fi - - fi - if test "x$CUPS_FOUND" = xno; then - # Are the cups headers installed in the default /usr/include location? - for ac_header in cups/cups.h cups/ppd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - CUPS_FOUND=yes - CUPS_CFLAGS= - CUPS_LIBS="-lcups" - DEFAULT_CUPS=yes -fi - -done - - fi - if test "x$CUPS_FOUND" = xno; then - # Getting nervous now? Lets poke around for standard Solaris third-party - # package installation locations. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers and libs" >&5 -$as_echo_n "checking for cups headers and libs... " >&6; } - if test -s /opt/sfw/cups/include/cups/cups.h; then - # An SFW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/sfw/cups/include" - CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" - elif test -s /opt/csw/include/cups/cups.h; then - # A CSW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/csw/include" - CUPS_LIBS="-L/opt/csw/lib -lcups" - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5 -$as_echo "$CUPS_FOUND" >&6; } - fi - if test "x$CUPS_FOUND" = xno; then - help_on_build_dependency cups - as_fn_error $? "Could not find cups! $HELP_MSG " "$LINENO" 5 - fi -fi - - - - -############################################################################### -# -# The ubiquitous freetype2 library is used to render fonts. -# - -# Check whether --with-freetype was given. -if test "${with_freetype+set}" = set; then : - withval=$with_freetype; -fi - - -# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree -USING_SYSTEM_FT_LIB=false - -if test "x$FREETYPE2_NOT_NEEDED" = xyes; then - if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: freetype not used, so --with-freetype is ignored" >&5 -$as_echo "$as_me: WARNING: freetype not used, so --with-freetype is ignored" >&2;} - fi - FREETYPE2_CFLAGS= - FREETYPE2_LIBS= - FREETYPE2_LIB_PATH= -else - FREETYPE2_FOUND=no - - if test "x$with_freetype" != x; then - - # Fail with message the path to freetype if var with_freetype contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$with_freetype" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - with_freetype=`$CYGPATH -s -m -a "$with_freetype"` - with_freetype=`$CYGPATH -u "$with_freetype"` - else - as_fn_error $? "You cannot have spaces in the path to freetype! \"$with_freetype\"" "$LINENO" 5 - fi - fi - - FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" - if test "x$HOST_OS" = xwindows; then - FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" - fi - FREETYPE2_LIB_PATH="$with_freetype/lib" - FREETYPE2_CFLAGS="-I$with_freetype/include" - if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then - FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" - fi - FREETYPE2_FOUND=yes - if test "x$FREETYPE2_FOUND" = xyes; then - # Verify that the directories exist - if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then - as_fn_error $? "Could not find the expected directories $with_freetype/lib and $with_freetype/include" "$LINENO" 5 - fi - # List the contents of the lib. - FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` - if test "x$FREETYPELIB" = x; then - as_fn_error $? "Could not find libfreetype.se nor freetype.dll in $with_freetype/lib" "$LINENO" 5 - fi - # Check one h-file - if ! test -s "$with_freetype/include/ft2build.h"; then - as_fn_error $? "Could not find $with_freetype/include/ft2build.h" "$LINENO" 5 - fi - fi - fi - if test "x$FREETYPE2_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_freetype2_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The freetype2 comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_freetype2} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for freetype2" >&5 -$as_echo "$as_me: Using builddeps $resource for freetype2" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# freetype2 is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/freetype2.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_freetype2_ROOT} - thecflags=${builddep_freetype2_CFLAGS} - thelibs=${builddep_freetype2_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency freetype2" "$LINENO" 5 - fi - FREETYPE2=$depdir - if test "x$theroot" != x; then - FREETYPE2="$theroot" - fi - if test "x$thecflags" != x; then - FREETYPE2_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - FREETYPE2_LIBS="$thelibs" - fi - FREETYPE2_FOUND=yes - else FREETYPE2_FOUND=no - - fi - else FREETYPE2_FOUND=no - - fi - - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE2" >&5 -$as_echo_n "checking for FREETYPE2... " >&6; } - -if test -n "$FREETYPE2_CFLAGS"; then - pkg_cv_FREETYPE2_CFLAGS="$FREETYPE2_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$FREETYPE2_LIBS"; then - pkg_cv_FREETYPE2_LIBS="$FREETYPE2_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FREETYPE2_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "freetype2" 2>&1` - else - FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --print-errors "freetype2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$FREETYPE2_PKG_ERRORS" >&5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - FREETYPE2_FOUND=no -elif test $pkg_failed = untried; then - FREETYPE2_FOUND=no -else - FREETYPE2_CFLAGS=$pkg_cv_FREETYPE2_CFLAGS - FREETYPE2_LIBS=$pkg_cv_FREETYPE2_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - FREETYPE2_FOUND=yes -fi - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard locations" >&5 -$as_echo_n "checking for freetype in some standard locations... " >&6; } - - if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" - DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" - fi - if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2" - DEFAULT_FREETYPE_LIBS="-lfreetype" - fi - - PREV_CXXCFLAGS="$CXXFLAGS" - PREV_LDFLAGS="$LDFLAGS" - CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS" - LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include FT_FREETYPE_H - int main() { return 0; } - -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - # Yes, the default cflags and libs did the trick. - FREETYPE2_FOUND=yes - FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS" - FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS" - -else - - FREETYPE2_FOUND=no - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CXXCFLAGS="$PREV_CXXFLAGS" - LDFLAGS="$PREV_LDFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE2_FOUND" >&5 -$as_echo "$FREETYPE2_FOUND" >&6; } - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - help_on_build_dependency freetype2 - as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5 - fi -fi - - - - - - -############################################################################### -# -# Check for alsa headers and libraries. Used on Linux/GNU systems. -# - -# Check whether --with-alsa was given. -if test "${with_alsa+set}" = set; then : - withval=$with_alsa; -fi - - -# Check whether --with-alsa-include was given. -if test "${with_alsa_include+set}" = set; then : - withval=$with_alsa_include; -fi - - -# Check whether --with-alsa-lib was given. -if test "${with_alsa_lib+set}" = set; then : - withval=$with_alsa_lib; -fi - - -if test "x$ALSA_NOT_NEEDED" = xyes; then - if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: alsa not used, so --with-alsa is ignored" >&5 -$as_echo "$as_me: WARNING: alsa not used, so --with-alsa is ignored" >&2;} - fi - ALSA_CFLAGS= - ALSA_LIBS= -else - ALSA_FOUND=no - - if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then - as_fn_error $? "It is not possible to disable the use of alsa. Remove the --without-alsa option." "$LINENO" 5 - fi - - if test "x${with_alsa}" != x; then - ALSA_LIBS="-L${with_alsa}/lib -lalsa" - ALSA_CFLAGS="-I${with_alsa}/include" - ALSA_FOUND=yes - fi - if test "x${with_alsa_include}" != x; then - ALSA_CFLAGS="-I${with_alsa_include}" - ALSA_FOUND=yes - fi - if test "x${with_alsa_lib}" != x; then - ALSA_LIBS="-L${with_alsa_lib} -lalsa" - ALSA_FOUND=yes - fi - if test "x$ALSA_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_alsa_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The alsa comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_alsa} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for alsa" >&5 -$as_echo "$as_me: Using builddeps $resource for alsa" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# alsa is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/alsa.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_alsa_ROOT} - thecflags=${builddep_alsa_CFLAGS} - thelibs=${builddep_alsa_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency alsa" "$LINENO" 5 - fi - ALSA=$depdir - if test "x$theroot" != x; then - ALSA="$theroot" - fi - if test "x$thecflags" != x; then - ALSA_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - ALSA_LIBS="$thelibs" - fi - ALSA_FOUND=yes - else ALSA_FOUND=no - - fi - else ALSA_FOUND=no - - fi - - fi - if test "x$ALSA_FOUND" = xno; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA" >&5 -$as_echo_n "checking for ALSA... " >&6; } - -if test -n "$ALSA_CFLAGS"; then - pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 - ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$ALSA_LIBS"; then - pkg_cv_ALSA_LIBS="$ALSA_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 - ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "alsa" 2>&1` - else - ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors "alsa" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$ALSA_PKG_ERRORS" >&5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ALSA_FOUND=no -elif test $pkg_failed = untried; then - ALSA_FOUND=no -else - ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS - ALSA_LIBS=$pkg_cv_ALSA_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - ALSA_FOUND=yes -fi - fi - if test "x$ALSA_FOUND" = xno; then - for ac_header in alsa/asoundlib.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default" -if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ALSA_ASOUNDLIB_H 1 -_ACEOF - ALSA_FOUND=yes - ALSA_CFLAGS=-Iignoreme - ALSA_LIBS=-lasound - DEFAULT_ALSA=yes -else - ALSA_FOUND=no -fi - -done - - fi - if test "x$ALSA_FOUND" = xno; then - help_on_build_dependency alsa - as_fn_error $? "Could not find alsa! $HELP_MSG " "$LINENO" 5 - fi -fi - - - - -############################################################################### -# -# Check for pulse audio headers and libraries. -# -PULSE_FOUND=no - -# Check whether --with-pulse was given. -if test "${with_pulse+set}" = set; then : - withval=$with_pulse; -fi - - -# Check whether --with-pulse-include was given. -if test "${with_pulse_include+set}" = set; then : - withval=$with_pulse_include; -fi - - -# Check whether --with-pulse-lib was given. -if test "${with_pulse_lib+set}" = set; then : - withval=$with_pulse_lib; -fi - - -if test "x${with_pulse}" != x; then - PULSE_LIBS="-L${with_pulse}/lib -lfreetype" - PULSE_CFLAGS="-I${with_pulse}/include" - PULSE_FOUND=yes -fi -if test "x${with_pulse_include}" != x; then - PULSE_CFLAGS="-I${with_pulse_include}" - PULSE_FOUND=yes -fi -if test "x${with_pulse_lib}" != x; then - PULSE_LIBS="-L${with_pulse_lib} -lpulse" - PULSE_FOUND=yes -fi -if test "x$PULSE_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_pulse_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_pulse_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_pulse_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The pulse comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_pulse} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for pulse" >&5 -$as_echo "$as_me: Using builddeps $resource for pulse" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# pulse is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency pulse from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency pulse from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/pulse.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_pulse_ROOT} - thecflags=${builddep_pulse_CFLAGS} - thelibs=${builddep_pulse_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency pulse" "$LINENO" 5 - fi - PULSE=$depdir - if test "x$theroot" != x; then - PULSE="$theroot" - fi - if test "x$thecflags" != x; then - PULSE_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - PULSE_LIBS="$thelibs" - fi - PULSE_FOUND=yes - else PULSE_FOUND=no - - fi - else PULSE_FOUND=no - - fi - -fi -if test "x$PULSE_FOUND" = xno; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPULSE" >&5 -$as_echo_n "checking for LIBPULSE... " >&6; } - -if test -n "$LIBPULSE_CFLAGS"; then - pkg_cv_LIBPULSE_CFLAGS="$LIBPULSE_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.11\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.11") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBPULSE_CFLAGS=`$PKG_CONFIG --cflags "libpulse >= 0.9.11" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$LIBPULSE_LIBS"; then - pkg_cv_LIBPULSE_LIBS="$LIBPULSE_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.11\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.11") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBPULSE_LIBS=`$PKG_CONFIG --libs "libpulse >= 0.9.11" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - LIBPULSE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libpulse >= 0.9.11" 2>&1` - else - LIBPULSE_PKG_ERRORS=`$PKG_CONFIG --print-errors "libpulse >= 0.9.11" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$LIBPULSE_PKG_ERRORS" >&5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PULSE_FOUND=no -elif test $pkg_failed = untried; then - PULSE_FOUND=no -else - LIBPULSE_CFLAGS=$pkg_cv_LIBPULSE_CFLAGS - LIBPULSE_LIBS=$pkg_cv_LIBPULSE_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PULSE_FOUND=yes -fi -fi -if test "x$PULSE_FOUND" = xno; then - for ac_header in pulse/pulseaudio.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "pulse/pulseaudio.h" "ac_cv_header_pulse_pulseaudio_h" "$ac_includes_default" -if test "x$ac_cv_header_pulse_pulseaudio_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PULSE_PULSEAUDIO_H 1 -_ACEOF - PULSE_FOUND=yes - PULSE_CFLAGS=-Iignoreme - PULSE_LIBS= - DEFAULT_PULSE=yes -else - PULSE_FOUND=no -fi - -done - -fi - -if test "x$PULSE_FOUND" = xno && test "x$PULSE_NOT_NEEDED" != xyes; then - help_on_build_dependency pulse - as_fn_error $? "Could not find pulse audio libraries. $HELP_MSG " "$LINENO" 5 -fi - - - - -############################################################################### -# -# Check for the jpeg library -# - -USE_EXTERNAL_LIBJPEG=true -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5 -$as_echo_n "checking for main in -ljpeg... " >&6; } -if test "${ac_cv_lib_jpeg_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ljpeg $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_jpeg_main=yes -else - ac_cv_lib_jpeg_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5 -$as_echo "$ac_cv_lib_jpeg_main" >&6; } -if test "x$ac_cv_lib_jpeg_main" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBJPEG 1 -_ACEOF - - LIBS="-ljpeg $LIBS" - -else - USE_EXTERNAL_LIBJPEG=false - { $as_echo "$as_me:${as_lineno-$LINENO}: Will use jpeg decoder bundled with the OpenJDK source" >&5 -$as_echo "$as_me: Will use jpeg decoder bundled with the OpenJDK source" >&6;} - -fi - - - -############################################################################### -# -# Check for the gif library -# - -USE_EXTERNAL_LIBJPEG=true -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5 -$as_echo_n "checking for main in -lgif... " >&6; } -if test "${ac_cv_lib_gif_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgif $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_gif_main=yes -else - ac_cv_lib_gif_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5 -$as_echo "$ac_cv_lib_gif_main" >&6; } -if test "x$ac_cv_lib_gif_main" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBGIF 1 -_ACEOF - - LIBS="-lgif $LIBS" - -else - USE_EXTERNAL_LIBGIF=false - { $as_echo "$as_me:${as_lineno-$LINENO}: Will use gif decoder bundled with the OpenJDK source" >&5 -$as_echo "$as_me: Will use gif decoder bundled with the OpenJDK source" >&6;} - -fi - - - -############################################################################### -# -# Check for the zlib library -# - -USE_EXTERNAL_LIBZ=true -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lz" >&5 -$as_echo_n "checking for main in -lz... " >&6; } -if test "${ac_cv_lib_z_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lz $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_z_main=yes -else - ac_cv_lib_z_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_main" >&5 -$as_echo "$ac_cv_lib_z_main" >&6; } -if test "x$ac_cv_lib_z_main" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBZ 1 -_ACEOF - - LIBS="-lz $LIBS" - -else - USE_EXTERNAL_LIBZ=false - { $as_echo "$as_me:${as_lineno-$LINENO}: Will use zlib bundled with the OpenJDK source" >&5 -$as_echo "$as_me: Will use zlib bundled with the OpenJDK source" >&6;} - -fi - - - -############################################################################### -# -# Check if altzone exists in time.h -# - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -return (int)altzone; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - has_altzone=yes -else - has_altzone=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "x$has_altzone" = xyes; then - -$as_echo "#define HAVE_ALTZONE 1" >>confdefs.h - -fi - -############################################################################### -# -# Check the maths library -# - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 -$as_echo_n "checking for cos in -lm... " >&6; } -if test "${ac_cv_lib_m_cos+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char cos (); -int -main () -{ -return cos (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_m_cos=yes -else - ac_cv_lib_m_cos=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 -$as_echo "$ac_cv_lib_m_cos" >&6; } -if test "x$ac_cv_lib_m_cos" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBM 1 -_ACEOF - - LIBS="-lm $LIBS" - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: Maths library was not found" >&5 -$as_echo "$as_me: Maths library was not found" >&6;} - -fi - - - -############################################################################### -# -# Check for libdl.so - -save_LIBS="$LIBS" -LIBS="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBDL 1 -_ACEOF - - LIBS="-ldl $LIBS" - -fi - -LIBDL="$LIBS" - -LIBS="$save_LIBS" - -############################################################################### -# -# Should we run the painfully slow javadoc tool? -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build documentation" >&5 -$as_echo_n "checking whether to build documentation... " >&6; } -# Check whether --enable-docs was given. -if test "${enable_docs+set}" = set; then : - enableval=$enable_docs; ENABLE_DOCS="${enableval}" -else - ENABLE_DOCS='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_DOCS" >&5 -$as_echo "$ENABLE_DOCS" >&6; } - -GENERATE_DOCS=false -if test "x$ENABLE_DOCS" = xyes; then - GENERATE_DOCS=true -fi - - -############################################################################### -# -# Should we compile nimbus swing L&F? We can probably remove this option -# since nimbus is officially part of javax now. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build nimbus L&F" >&5 -$as_echo_n "checking whether to build nimbus L&F... " >&6; } -# Check whether --enable-nimbus was given. -if test "${enable_nimbus+set}" = set; then : - enableval=$enable_nimbus; ENABLE_NIMBUS="${enableval}" -else - ENABLE_NIMBUS='yes' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_NIMBUS" >&5 -$as_echo "$ENABLE_NIMBUS" >&6; } -DISABLE_NIMBUS= -if test "x$ENABLE_NIMBUS" = xno; then - DISABLE_NIMBUS=true -fi - - -############################################################################### -# -# Setup the opt flags for different compilers -# and different operating systems. -# -C_FLAG_DEPS="-MMD -MF" -CXX_FLAG_DEPS="-MMD -MF" - -case $COMPILER_TYPE in - CC ) - D_FLAG="-g" - case $COMPILER_NAME in - gcc ) - case $PLATFORM in - macosx ) - # On MacOSX we optimize for size, something - # we should do for all platforms? - C_O_FLAG_HI="-Os" - C_O_FLAG_NORM="-Os" - C_O_FLAG_NONE="" - ;; - *) - C_O_FLAG_HI="-O3" - C_O_FLAG_NORM="-O2" - C_O_FLAG_NONE="-O0" - ;; - esac - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; - ossc ) - # - # Forte has different names for this with their C++ compiler... - # - CXX_FLAG_DEPS="-xMMD -xMF" - -# Extra options used with HIGHEST -# -# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be -# done with care, there are some assumptions below that need to -# be understood about the use of pointers, and IEEE behavior. -# -# Use non-standard floating point mode (not IEEE 754) -CC_HIGHEST="$CC_HIGHEST -fns" -# Do some simplification of floating point arithmetic (not IEEE 754) -CC_HIGHEST="$CC_HIGHEST -fsimple" -# Use single precision floating point with 'float' -CC_HIGHEST="$CC_HIGHEST -fsingle" -# Assume memory references via basic pointer types do not alias -# (Source with excessing pointer casting and data access with mixed -# pointer types are not recommended) -CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" -# Use intrinsic or inline versions for math/std functions -# (If you expect perfect errno behavior, do not use this) -CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" -# Loop data dependency optimizations (need -xO3 or higher) -CC_HIGHEST="$CC_HIGHEST -xdepend" -# Pointer parameters to functions do not overlap -# (Similar to -xalias_level=basic usage, but less obvious sometimes. -# If you pass in multiple pointers to the same data, do not use this) -CC_HIGHEST="$CC_HIGHEST -xrestrict" -# Inline some library routines -# (If you expect perfect errno behavior, do not use this) -CC_HIGHEST="$CC_HIGHEST -xlibmil" -# Use optimized math routines -# (If you expect perfect errno behavior, do not use this) -# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now -#CC_HIGHEST="$CC_HIGHEST -xlibmopt" - - case $LEGACY_HOST_CPU1 in - i586) - C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" - C_O_FLAG_HI="-xO4 -Wu,-O4~yz" - C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" - C_O_FLAG_NONE="" - CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" - CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" - CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" - CXX_O_FLAG_NONE="" - ;; - sparc) - C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" - C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NONE="" - CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" - CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NONE="" - ;; - esac - esac - ;; - CL ) - D_FLAG= - C_O_FLAG_HI="-O2" - C_O_FLAG_NORM="-O1" - C_O_FLAG_NONE="-Od" - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; -esac - -if test -z "$C_O_FLAG_HIGHEST"; then - C_O_FLAG_HIGHEST="$C_O_FLAG_HI" -fi - -if test -z "$CXX_O_FLAG_HIGHEST"; then - CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" -fi - - - - - - - - - - - - -############################################################################### -# -# Setup legacy vars/targets and new vars to deal with different debug levels. -# -case $DEBUG_LEVEL in - release ) - HOTSPOT_DEBUG_LEVEL="product" - HOTSPOT_EXPORT="product" - ;; - fastdebug ) - HOTSPOT_DEBUG_LEVEL="fastdebug" - HOTSPOT_EXPORT="fastdebug" - CFLAGS="$CFLAGS $D_FLAG" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; - slowdebug ) - HOTSPOT_DEBUG_LEVEL="jvmg" - HOTSPOT_EXPORT="debug" - CFLAGS="$CFLAGS $D_FLAG" - C_O_FLAG_HI="$C_O_FLAG_NONE" - C_O_FLAG_NORM="$C_O_FLAG_NONE" - CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" - CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; -esac - -############################################################################### -# -# Generate the legacy makefile targets for hotspot. -# The hotspot api for selecting the build artifacts, really, needs to be improved. -# -HOTSPOT_TARGET="" - -if test "x$JVM_VARIANT_SERVER" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " -fi - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " -fi - -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " -fi - -if test "x$JVM_VARIANT_ZERO" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " -fi - -if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " -fi - -HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" - -############################################################################### -# -# Setup all directories for the subrepoes and the arguments to the sub makes. -# -LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" -LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" -LANGTOOLS_MAKE_ARGS="" - - - - -CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" -CORBA_DIST="$OUTPUT_ROOT/corba/dist" -CORBA_MAKE_ARGS="" - - - - -JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" -JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" -JAXP_MAKE_ARGS="" - - - - -JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" -JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" -JAXWS_MAKE_ARGS="" - - - - -HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" -HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" -HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" - - - - -JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" -JDK_MAKE_ARGS="ALT_OUTPUTDIR=\"$OUTPUT_ROOT/jdk\"" - - - -IMAGES_OUTPUTDIR=$OUTPUT_ROOT/images -IMAGES_MAKE_ARGS="ALT_OUTPUTDIR=$OUTPUT_ROOT/jdk \ - SHARE_SRC=$JDK_TOPDIR/src/share \ - PLATFORM_SRC=$JDK_TOPDIR/src/$LEGACY_HOST_OS_API \ - TEMPDIR=$IMAGES_OUTPUTDIR/tmp \ - ABS_TEMPDIR=$IMAGES_OUTPUTDIR/tmp " - - - -############################################################################### -# -# Now setup the CFLAGS and LDFLAGS for the JDK build. -# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. -# -case $COMPILER_NAME in - gcc ) - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ - -pipe -fno-omit-frame-pointer \ - -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" - CFLAGS_JDK="$CFLAGS_JDK -fno-strict-aliasing" - ;; - ossc ) - CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" - CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" - ;; - cl ) - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ - -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ - -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ - -DWIN32 -DIAL" - case $LEGACY_HOST_CPU1 in - i?86 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" - ;; - amd64 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" - ;; - esac - ;; -esac - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" - -# The package path is used only on macosx? -PACKAGE_PATH=/opt/local - - -# Sometimes we use a cpu dir (.../lib/amd64/server) -# Sometimes not (.../lib/server) -LIBARCHDIR="$LEGACY_HOST_CPU2/" -if test "x$ENDIAN" = xlittle; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" -fi -if test "x$HOST_OS" = xlinux; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" -fi -if test "x$HOST_OS" = xwindows; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" -fi -if test "x$HOST_OS" = xsolaris; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" -fi -if test "x$HOST_OS" = xmacosx; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" - LIBARCHDIR="" -fi -if test "x$HOST_OS" = xbsd; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" -fi -if test "x$DEBUG_LEVEL" = xrelease; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" -fi - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_HOST_CPU1\"' -D$LEGACY_HOST_CPU1" -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ - -I${JDK_OUTPUTDIR}/include \ - -I${JDK_OUTPUTDIR}/include/$PLATFORM \ - -I${JDK_TOPDIR}/src/share/javavm/export \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/javavm/export \ - -I${JDK_TOPDIR}/src/share/native/common \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/native/common" - -# The shared libraries are compiled using the picflag. -CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" -CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG" - -# Executable flags -CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" -CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" - -# Now this is odd. The JDK native libraries have to link against libjvm.so -# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. -# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library -# is identical for client and server? Yes. Which is picked at runtime (client or server)? -# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following -# libraries will link to whatever is in memory. Yuck. -# -# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. -if test "x$COMPILER_TYPE" = xCL; then - LDFLAGS_JDKLIB="$LDFLAGS -dll -libpath:${JDK_OUTPUTDIR}/lib -libpath:${JDK_OUTPUTDIR}/objs" - LDFLAGS_JDKLIB_SUFFIX="" - if test "$HOST_CPU_BITS" == "64"; then - LDFLAGS_STACK_SIZE=1048576 - else - LDFLAGS_STACK_SIZE=327680 - fi - LDFLAGS_JDKEXE="$LDFLAGS /STACK:$LDFLAGS_STACK_SIZE" -else - # If this is a --hash-style=gnu system, use --hash-style=both, why? - HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` - if test -n "$HAS_GNU_HASH"; then - # And since we now know that the linker is gnu, then add -z defs, to forbid - # undefined symbols in object files. - LDFLAGS="$LDFLAGS -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" == "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS="$LDFLAGS -Xlinker -O1" - fi - fi - - LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS \ - -L${JDK_OUTPUTDIR}/objs \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" - LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" - if test "x$COMPILER_NAME" = xossc; then - LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" - fi - - # Only the jli library is explicitly linked when the launchers are built. - # The libjvm is then dynamically loaded/linked by the launcher. - if test "x$HOST_OS" != "xmacosx"; then - LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" - LDFLAGS_JDKEXE_SUFFIX="-ljli" - fi -fi - - - - - - - - - - - - - - -############################################################################### -# -# statically link libstdc++ before C++ ABI is stablized on Linux unless -# dynamic build is configured on command line. -# -# Check whether --enable-static-link-stdc++ was given. -if test "${enable_static_link_stdc__+set}" = set; then : - enableval=$enable_static_link_stdc__; -else - - enable_static_link_stdc__=yes - -fi - - -if test "x$HOST_OS" = xlinux; then - # Test if -lstdc++ works. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if dynamic link of stdc++ is possible" >&5 -$as_echo_n "checking if dynamic link of stdc++ is possible... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - OLD_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -lstdc++" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - has_dynamic_libstdcxx=yes -else - has_dynamic_libstdcxx=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CXXFLAGS="$OLD_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_dynamic_libstdcxx" >&5 -$as_echo "$has_dynamic_libstdcxx" >&6; } - - # Test if stdc++ can be linked statically. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if static link of stdc++ is possible" >&5 -$as_echo_n "checking if static link of stdc++ is possible... " >&6; } - STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - OLD_LIBS="$LIBS" - OLD_CXX="$CXX" - LIBS="$STATIC_STDCXX_FLAGS" - CXX="$CC" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - has_static_libstdcxx=yes -else - has_static_libstdcxx=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$OLD_LIBS" - CXX="$OLD_CXX" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_static_libstdcxx" >&5 -$as_echo "$has_static_libstdcxx" >&6; } - - if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then - as_fn_error $? "I cannot link to stdc++! Neither dynamically nor statically." "$LINENO" 5 - fi - - if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Static linking of libstdc++ was not possible reverting to dynamic linking." >&5 -$as_echo "$as_me: Static linking of libstdc++ was not possible reverting to dynamic linking." >&6;} - enable_static_link_stdc__=no - fi - - if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic linking of libstdc++ was not possible reverting to static linking." >&5 -$as_echo "$as_me: Dynamic linking of libstdc++ was not possible reverting to static linking." >&6;} - enable_static_link_stdc__=yes - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libstdc++" >&5 -$as_echo_n "checking how to link with libstdc++... " >&6; } - if test "x$enable_static_link_stdc__" = xyes; then - LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" - LDCXX="$CC" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 -$as_echo "static" >&6; } - else - LIBCXX="$LIBCXX -lstdc++" - LDCXX="$CXX" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic" >&5 -$as_echo "dynamic" >&6; } - fi -fi - -############################################################################### -# -# Could someone enlighten this configure script with a comment about libCrun? -# The LEGACY_HOST_CPU3 is the setting for ISA_DIR. -# -if test "x$HOST_OS" = xsolaris && test "x$LIBCXX" = x; then - LIBCXX="/usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1" -fi - -# TODO better (platform agnostic) test -if test "x$HOST_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then - LIBCXX="-lstdc++" -fi - - - -############################################################################### - -OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" -OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" -OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" -OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" - - - - -############################################################################### -# -# Misc -# - -# The name of the Service Agent jar. -SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" -if test "x$HOST_OS" = "xwindows"; then - SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" -fi - - -# Control wether Hotspot runs Queens test after build. -# Check whether --enable-hotspot-test-in-build was given. -if test "${enable_hotspot_test_in_build+set}" = set; then : - enableval=$enable_hotspot_test_in_build; -else - enable_hotspot_test_in_build=no -fi - -if test "x$enable_hotspot_test_in_build" = "xyes"; then - TEST_IN_BUILD=true -else - TEST_IN_BUILD=false -fi - - -############################################################################### -# -# Choose cacerts source file -# - -# Check whether --with-cacerts-file was given. -if test "${with_cacerts_file+set}" = set; then : - withval=$with_cacerts_file; -fi - -if test "x$with_cacerts_file" != x; then - CACERTS_FILE=$with_cacerts_file -else - if test "x$OPENJDK" = "xtrue"; then - CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts - else - CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal - fi -fi - - -# Check if build directory is on local disk. -# return 0 if it is on local disk, non-0 if on remote disk or failure -function is_directory_on_local_disk { - # df -l lists only local disks; if the given directory is not found then - # a non-zero exit code is given - $DF -l $1 > /dev/null 2>&1 -} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if build directory is on local disk" >&5 -$as_echo_n "checking if build directory is on local disk... " >&6; } -if is_directory_on_local_disk $OUTPUT_ROOT; then - OUTPUT_DIR_IS_LOCAL="yes" -else - OUTPUT_DIR_IS_LOCAL="no" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OUTPUT_DIR_IS_LOCAL" >&5 -$as_echo "$OUTPUT_DIR_IS_LOCAL" >&6; } - -# We're messing a bit with internal autoconf variables to put the config.status in the -# output directory instead of the current directory. -CONFIG_STATUS=$OUTPUT_ROOT/config.status - -# Now create the actual output files, after this, the main work of configure is done -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by openjdk $as_me version-0.1, which was -generated by GNU Autoconf 2.67. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -openjdk config.status version-0.1 -configured by $0, generated by GNU Autoconf 2.67, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; + conf_processed_arguments="$conf_processed_arguments $conf_option" ;; esac - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "$OUTPUT_ROOT/config.h") CONFIG_HEADERS="$CONFIG_HEADERS $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" ;; - "$OUTPUT_ROOT/spec.gmk") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" ;; - "$OUTPUT_ROOT/Makefile") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + case $conf_option in + -build | --build | --buil | --bui | --bu |-build=* | --build=* | --buil=* | --bui=* | --bu=*) + conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; + -target | --target | --targe | --targ | --tar | --ta | --t | -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; + -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*) + conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; esac done - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +if $TEST "x$conf_legacy_crosscompile" != "x"; then + if $TEST "x$conf_openjdk_target" != "x"; then + echo "Error: Specifying --openjdk-target together with autoconf" + echo "legacy cross-compilation flags is not supported." + echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile." + echo "The recommended use is just --openjdk-target." + exit 1 else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + echo "Warning: You are using legacy autoconf cross-compilation flags." + echo "It is recommended that you use --openjdk-target instead." + echo "" fi -done -rm -f conf$$subs.sh +fi -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" +if $TEST "x$conf_openjdk_target" != "x"; then + conf_build_platform=`sh $conf_script_dir/build-aux/config.guess` + conf_processed_arguments="--build=$conf_build_platform --host=$conf_openjdk_target --target=$conf_openjdk_target $conf_processed_arguments" +fi -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } +# Make configure exit with error on invalid options as default. +# Can be overridden by --disable-option-checking, since we prepend our argument +# and later options override earlier. +conf_processed_arguments="--enable-option-checking=fatal $conf_processed_arguments" - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +### +### Call the configure script +### +if $TEST -e $conf_closed_script_dir/generated-configure.sh; then + # Closed source configure available; run that instead + . $conf_closed_script_dir/generated-configure.sh $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' + . $conf_script_dir/generated-configure.sh $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" fi -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" +### +### Post-processing +### -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi - ;; - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - -# Finally output some useful information to the user - -if test "x$CCACHE_FOUND" != x; then - if test "x$HAS_GOOD_CCACHE" = x; then - CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" - CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." - else - CCACHE_STATUS="installed and in use" - fi -else - if test "x$GCC" = xyes; then - CCACHE_STATUS="not installed (consider installing)" - CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." - else - CCACHE_STATUS="not available for your system" - fi -fi - -printf "\n" -printf "====================================================\n" -printf "A new configuration has been successfully created in\n" -printf "$OUTPUT_ROOT\n" -if test "x$CONFIGURE_COMMAND_LINE" != x; then - printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" -else - printf "using default settings.\n" -fi - -printf "\n" -printf "Configuration summary:\n" -printf "* Debug level: $DEBUG_LEVEL\n" -printf "* JDK variant: $JDK_VARIANT\n" -printf "* JVM variants: $with_jvm_variants\n" -printf "* Host info: OS: $HOST_OS, CPU architecture: $HOST_CPU_ARCH, address length: $HOST_CPU_BITS\n" -printf "* Boot JDK: $BOOT_JDK\n" - -printf "\n" -printf "Build performance summary:\n" -printf "* Cores to use: $NUM_CORES\n" -printf "* Memory limit: $MEMORY_SIZE MB\n" -printf "* ccache status: $CCACHE_STATUS\n" - -if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then - printf "\n" - printf "WARNING: Your build output directory is not on a local disk.\n" - printf "This will severely degrade build performance!\n" - printf "It is recommended that you create an output directory on a local disk,\n" - printf "and run the configure script again from that directory.\n" -fi - -if test "x$CCACHE_HELP_MSG" != x; then - printf "\n" - printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" - printf "$CCACHE_HELP_MSG\n" - - help_on_build_dependency ccache - printf "$HELP_MSG\n" +# Move the log file to the output root, if this was successfully created +if $TEST -d "$OUTPUT_ROOT"; then + mv -f config.log "$OUTPUT_ROOT" 2> /dev/null fi diff --git a/common/autoconf/configure.ac b/common/autoconf/configure.ac index be678cc2f15..df8c5f1bcb5 100644 --- a/common/autoconf/configure.ac +++ b/common/autoconf/configure.ac @@ -23,2856 +23,204 @@ # questions. # +############################################################################### +# +# Includes and boilerplate +# +############################################################################### + + AC_PREREQ([2.61]) -AC_INIT(openjdk, version-0.1, build-infra-dev@openjdk.java.net) +AC_INIT(openjdk, jdk8, build-dev@openjdk.java.net) + +# Do not change or remove the following line, it is needed for consistency checks: +# DATE_WHEN_GENERATED: @DATE_WHEN_GENERATED@ AC_CONFIG_AUX_DIR([build-aux]) - m4_include([build-aux/pkg.m4]) + +# Include these first... +m4_include([basics.m4]) m4_include([builddeps.m4]) -m4_include([platform.m4]) -m4_include([cores.m4]) +# ... then the rest +m4_include([boot-jdk.m4]) +m4_include([build-performance.m4]) m4_include([help.m4]) +m4_include([jdk-options.m4]) +m4_include([libraries.m4]) +m4_include([platform.m4]) +m4_include([source-dirs.m4]) +m4_include([toolchain.m4]) -# Save the command line. Do this very early, before it is lost by calling autoconf macros. -CONFIGURE_COMMAND_LINE="$@" -AC_SUBST(CONFIGURE_COMMAND_LINE) - -# Locate the directory of this script. -SCRIPT="[$]0" -REMOVE_SYMBOLIC_LINKS(SCRIPT) -AUTOCONF_DIR=`dirname [$]0` - -# Start with tools that do not need have cross compilation support -# and can be expected to be found in the default PATH. These tools are -# used by configure. Nor are these tools expected to be found in the -# devkit from the builddeps server either, since they are -# needed to download the devkit. -AC_PROG_AWK -CHECK_NONEMPTY(AWK) -AC_PATH_PROG(CAT, cat) -CHECK_NONEMPTY(CAT) -AC_PATH_PROG(CHMOD, chmod) -CHECK_NONEMPTY(CHMOD) -AC_PATH_PROG(CP, cp) -CHECK_NONEMPTY(CP) -AC_PATH_PROG(CPIO, cpio) -CHECK_NONEMPTY(CPIO) -AC_PATH_PROG(CUT, cut) -CHECK_NONEMPTY(CUT) -AC_PATH_PROG(DATE, date) -CHECK_NONEMPTY(DATE) -AC_PATH_PROG(DF, df) -CHECK_NONEMPTY(DF) -AC_PATH_PROG(DIFF, diff) -CHECK_NONEMPTY(DIFF) -# Warning echo is really, really unportable!!!!! Different -# behaviour in bash and dash and in a lot of other shells! -# Use printf for serious work! -AC_PATH_PROG(ECHO, echo) -CHECK_NONEMPTY(ECHO) -AC_PROG_EGREP -CHECK_NONEMPTY(EGREP) -AC_PROG_FGREP -CHECK_NONEMPTY(FGREP) - -AC_PATH_PROG(FIND, find) -CHECK_NONEMPTY(FIND) -CHECK_FIND_DELETE -AC_SUBST(FIND_DELETE) - -AC_PROG_GREP -CHECK_NONEMPTY(GREP) -AC_PATH_PROG(HEAD, head) -CHECK_NONEMPTY(HEAD) -AC_PATH_PROG(LN, ln) -CHECK_NONEMPTY(LN) -AC_PATH_PROG(LS, ls) -CHECK_NONEMPTY(LS) -AC_PATH_PROGS(MAKE, [gmake make]) -CHECK_NONEMPTY(MAKE) -MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[[12346789]]'` -if test "x$MAKE_VERSION" = x; then - AC_MSG_ERROR([You must use GNU make 3.81 or newer! Please put it in the path.]) -fi -AC_PATH_PROG(MKDIR, mkdir) -CHECK_NONEMPTY(MKDIR) -AC_PATH_PROG(MV, mv) -CHECK_NONEMPTY(MV) -AC_PATH_PROGS(NAWK, [nawk gawk awk]) -CHECK_NONEMPTY(NAWK) -AC_PATH_PROG(PRINTF, printf) -CHECK_NONEMPTY(PRINTF) -AC_PATH_PROG(THEPWDCMD, pwd) -AC_PATH_PROG(RM, rm) -CHECK_NONEMPTY(RM) -RM="$RM -f" -AC_PROG_SED -CHECK_NONEMPTY(SED) -AC_PATH_PROG(SH, sh) -CHECK_NONEMPTY(SH) -AC_PATH_PROG(SORT, sort) -CHECK_NONEMPTY(SORT) -AC_PATH_PROG(TAR, tar) -CHECK_NONEMPTY(TAR) -AC_PATH_PROG(TAIL, tail) -CHECK_NONEMPTY(TAIL) -AC_PATH_PROG(TEE, tee) -CHECK_NONEMPTY(TEE) -AC_PATH_PROG(TR, tr) -CHECK_NONEMPTY(TR) -AC_PATH_PROG(TOUCH, touch) -CHECK_NONEMPTY(TOUCH) -AC_PATH_PROG(WC, wc) -CHECK_NONEMPTY(WC) -AC_PATH_PROG(XARGS, xargs) -CHECK_NONEMPTY(XARGS) -AC_PATH_PROG(ZIP, zip) -CHECK_NONEMPTY(ZIP) -AC_PATH_PROG(UNZIP, unzip) -CHECK_NONEMPTY(UNZIP) -AC_PATH_PROG(LDD, ldd) -if test "x$LDD" = "x"; then - # List shared lib dependencies is used for - # debug output and checking for forbidden dependencies. - # We can build without it. - LDD="true" -fi -AC_PATH_PROG(OTOOL, otool) -if test "x$OTOOL" = "x"; then - OTOOL="true" -fi -AC_PATH_PROG(READELF, readelf) -AC_PATH_PROG(EXPR, expr) -CHECK_NONEMPTY(EXPR) -AC_PATH_PROG(FILE, file) -CHECK_NONEMPTY(FILE) -AC_PATH_PROG(HG, hg) - -# Figure out the build and host system. -AC_CANONICAL_BUILD -AC_CANONICAL_HOST - -AC_ARG_WITH(data-model, [AS_HELP_STRING([--with-data-model], - [build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-data-model=32 @<:@guessed@:>@])]) - -if test "x$with_data_model" != x && \ - test "x$with_data_model" != x32 && \ - test "x$with_data_model" != x64 ; then - AC_MSG_ERROR([The data model can only be 32 or 64!]) -fi -# Translate the standard cpu-vendor-kernel-os quadruplets into -# the new HOST_.... and BUILD_... and the legacy names used by -# the openjdk build. -# It uses $host_os $host_cpu $build_os $build_cpu and $with_data_model -EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS -# Now the following vars are defined. -# HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows -# HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince -# HOST_OS_API=posix,winapi -# -# HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 -# HOST_CPU_ARCH=x86,sparc,pcc,arm -# HOST_CPU_BITS=32,64 -# HOST_CPU_ENDIAN=big,little -# -# There is also a: -# LEGACY_HOST_CPU1=i586,amd64,.... # used to set the old var ARCH -# LEGACY_HOST_CPU2=i386,amd64,.... # used to set the old var LIBARCH -# LEGACY_HOST_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris -# There was also a BUILDARCH that had i486,amd64,... but we do not use that -# in the new build. -# LEGACY_HOST_OS_API=solaris,windows # used to select source roots - -DATE_WHEN_CONFIGURED=`LANG=C date` -AC_SUBST(DATE_WHEN_CONFIGURED) - -# How many cores do we have on this build system? -AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores], - [number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])]) -if test "x$with_num_cores" = x; then - # The number of cores were not specified, try to probe them. - CHECK_CORES -else - NUM_CORES=$with_num_cores - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` -fi -AC_SUBST(NUM_CORES) -AC_SUBST(CONCURRENT_BUILD_JOBS) - -# How many cores do we have on this build system? -AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size], - [memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])]) -if test "x$with_memory_size" = x; then - # The memory size was not specified, try to probe it. - CHECK_MEMORY_SIZE -else - MEMORY_SIZE=$with_memory_size -fi -AC_SUBST(MEMORY_SIZE) - -# Where is the source? It is located two levels above the configure script. -CURDIR="$PWD" -cd "$AUTOCONF_DIR/../.." -SRC_ROOT="`pwd`" -AC_SUBST(SRC_ROOT) -cd "$CURDIR" - -# For cygwin we need cygpath first, since it is used everywhere. -AC_PATH_PROG(CYGPATH, cygpath) -PATH_SEP=":" -if test "x$BUILD_OS" = "xwindows"; then - if test "x$CYGPATH" = x; then - AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) - fi - PATH_SEP=";" -fi -AC_SUBST(PATH_SEP) - -SPACESAFE(SRC_ROOT,[the path to the source root]) -SPACESAFE(CURDIR,[the path to the current directory]) - -if test "x$BUILD_OS" = "xsolaris"; then - # Also search in /usr/ccs/bin for utilities like ar and as. - PATH="/usr/ccs/bin:$PATH" -fi +# This line needs to be here, verbatim, after all includes. +# It is replaced with closed functionality when building +# closed sources. +AC_DEFUN_ONCE([CLOSED_HOOK]) ############################################################################### # -# OpenJDK or closed +# Initialization # -AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only], - [build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,) - -if test "x$enable_openjdk_only" = "xyes"; then - OPENJDK=true -elif test "x$enable_openjdk_only" = "xno"; then - OPENJDK=false -elif test -d "$SRC_ROOT/jdk/src/closed"; then - OPENJDK=false -else - OPENJDK=true -fi - -if test "x$OPENJDK" = "xtrue"; then - SET_OPENJDK=OPENJDK=true -fi - -AC_SUBST(SET_OPENJDK) - ############################################################################### -# -# JIGSAW or not. The JIGSAW variable is used during the intermediate -# stage when we are building both the old style JDK and the new style modularized JDK. -# When the modularized JDK is finalized, this option will go away. -# -AC_ARG_ENABLE([jigsaw], [AS_HELP_STRING([--enable-jigsaw], - [build Jigsaw images (not yet available) @<:@disabled@:>@])],,) -if test "x$enable_jigsaw" = "xyes"; then - JIGSAW=true -else - JIGSAW=false -fi -AC_SUBST(JIGSAW) +# Basic initialization that must happen first of all +BASIC_INIT +BASIC_SETUP_PATHS +BASIC_SETUP_LOGGING -############################################################################### -# -# Check which variant of the JDK that we want to build. -# Currently we have: -# normal: standard edition -# embedded: cut down to a smaller footprint -# -# Effectively the JDK variant gives a name to a specific set of -# modules to compile into the JDK. In the future, these modules -# might even be Jigsaw modules. -# -AC_MSG_CHECKING([which variant of the JDK to build]) -AC_ARG_WITH([jdk-variant], [AS_HELP_STRING([--with-jdk-variant], - [JDK variant to build (normal, embedded) @<:@normal@:>@])]) +# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. +HELP_SETUP_DEPENDENCY_HELP -if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then - JAVASE_EMBEDDED="" - MINIMIZE_RAM_USAGE="" - JDK_VARIANT="normal" -elif test "x$with_jdk_variant" = xembedded; then - JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" - MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" - JDK_VARIANT="embedded" -else - AC_MSG_ERROR([The available JDK variants are: normal, embedded]) -fi - -AC_SUBST(JAVASE_EMBEDDED) -AC_SUBST(MINIMIZE_RAM_USAGE) -AC_SUBST(JDK_VARIANT) +# Setup simple tools, that do not need have cross compilation support. +# Without these, we can't properly run the rest of the configure script. +BASIC_SETUP_TOOLS -AC_MSG_RESULT([$JDK_VARIANT]) - -############################################################################### -# -# Should we build a JDK/JVM with head support (ie a graphical ui)? -# We always build headless support. -# -AC_MSG_CHECKING([headful support]) -AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful], - [build headful support (graphical UI support) @<:@enabled@:>@])], - [SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes]) - -SUPPORT_HEADLESS=yes -BUILD_HEADLESS="BUILD_HEADLESS:=true" - -if test "x$SUPPORT_HEADFUL" = xyes; then - # We are building both headful and headless. - BUILD_HEADLESS_ONLY="" - headful_msg="inlude support for both headful and headless" -fi - -if test "x$SUPPORT_HEADFUL" = xno; then - # Thus we are building headless only. - BUILD_HEADLESS="BUILD_HEADLESS:=true" - BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" - headful_msg="headless only" -fi - -AC_MSG_RESULT([$headful_msg]) - -AC_SUBST(SUPPORT_HEADLESS) -AC_SUBST(SUPPORT_HEADFUL) -AC_SUBST(BUILD_HEADLESS) -AC_SUBST(BUILD_HEADLESS_ONLY) - -############################################################################### -# -# Check which variants of the JVM that we want to build. -# Currently we have: -# server: normal interpreter and a tiered C1/C2 compiler -# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) -# kernel: kernel footprint JVM that passes the TCK without major performance problems, -# ie normal interpreter and C1, only the serial GC, kernel jvmti etc -# zero: no machine code interpreter, no compiler -# zeroshark: zero interpreter and shark/llvm compiler backend -AC_MSG_CHECKING([which variants of the JVM that should be built]) -AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants], - [JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])]) - -if test "x$with_jvm_variants" = x; then - if test "x$JDK_VARIANT" = xembedded; then - with_jvm_variants="kernel" - elif test "x$HOST_CPU_BITS" = x64; then - with_jvm_variants="server" - else - # Yes, on 32-bit machines, the same source (almost) is compiled twice - # to generate two libjvm.so files. Fun, fun. - with_jvm_variants="client,server" - fi -fi - -JVM_VARIANTS=",$with_jvm_variants," -TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` - -if test "x$TEST_VARIANTS" != "x,"; then - AC_MSG_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark]) -fi -AC_MSG_RESULT([$with_jvm_variants]) - -JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` -JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` -JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` -JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` -JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - AC_MSG_ERROR([You cannot build a client JVM for a 64-bit machine.]) - fi -fi -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - AC_MSG_ERROR([You cannot build a kernel JVM for a 64-bit machine.]) - fi -fi - -COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` -# Replace the commas with AND for use in the build directory name. -ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` -if test "x$COUNT_VARIANTS" != "x,1"; then - AC_MSG_NOTICE([NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants]) -fi - -AC_SUBST(JVM_VARIANTS) -AC_SUBST(JVM_VARIANT_SERVER) -AC_SUBST(JVM_VARIANT_CLIENT) -AC_SUBST(JVM_VARIANT_KERNEL) -AC_SUBST(JVM_VARIANT_ZERO) -AC_SUBST(JVM_VARIANT_ZEROSHARK) - -############################################################################### -# -# Set the debug level -# release: no debug information, all optimizations, no asserts. -# fastdebug: debug information (-g), all optimizations, all asserts -# slowdebug: debug information (-g), no optimizations, all asserts -# -DEBUG_LEVEL="release" -AC_MSG_CHECKING([which debug level to use]) -AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], - [set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])], - [ - ENABLE_DEBUG="${enableval}" - DEBUG_LEVEL="fastdebug" - ], [ENABLE_DEBUG="no"]) - -AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level], - [set the debug level (release, fastdebug, slowdebug) @<:@release@:>@])], - [ - DEBUG_LEVEL="${withval}" - if test "x$ENABLE_DEBUG" = xyes; then - AC_MSG_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.]) - fi - ]) -AC_MSG_RESULT([$DEBUG_LEVEL]) - -if test "x$DEBUG_LEVEL" != xrelease && \ - test "x$DEBUG_LEVEL" != xfastdebug && \ - test "x$DEBUG_LEVEL" != xslowdebug; then - AC_MSG_ERROR([Allowed debug levels are: release, fastdebug and slowdebug]) -fi - -case $DEBUG_LEVEL in - release ) - VARIANT="OPT" - FASTDEBUG="false" - DEBUG_CLASSFILES="false" - BUILD_VARIANT_RELEASE="" - ;; - fastdebug ) - VARIANT="DBG" - FASTDEBUG="true" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-fastdebug" - ;; - slowdebug ) - VARIANT="DBG" - FASTDEBUG="false" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-debug" - ;; -esac - -AC_SUBST(DEBUG_LEVEL) -AC_SUBST(VARIANT) -AC_SUBST(FASTDEBUG) -AC_SUBST(DEBUG_CLASSFILES) -AC_SUBST(BUILD_VARIANT_RELEASE) - -# Source the version numbers -. $AUTOCONF_DIR/version.numbers -if test "x$OPENJDK" = "xfalse"; then - . $AUTOCONF_DIR/closed.version.numbers -fi -# Now set the JDK version, milestone, build number etc. -AC_SUBST(JDK_MAJOR_VERSION) -AC_SUBST(JDK_MINOR_VERSION) -AC_SUBST(JDK_MICRO_VERSION) -AC_SUBST(JDK_UPDATE_VERSION) -AC_SUBST(JDK_BUILD_NUMBER) -AC_SUBST(MILESTONE) -AC_SUBST(LAUNCHER_NAME) -AC_SUBST(PRODUCT_NAME) -AC_SUBST(PRODUCT_SUFFIX) -AC_SUBST(JDK_RC_PLATFORM_NAME) -AC_SUBST(COMPANY_NAME) - -COPYRIGHT_YEAR=`date +'%Y'` -AC_SUBST(COPYRIGHT_YEAR) - -RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" -AC_SUBST(RUNTIME_NAME) - -if test "x$JDK_UPDATE_VERSION" != x; then - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" -else - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" -fi -AC_SUBST(JDK_VERSION) - -if test "x$MILESTONE" != x; then - RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" -else - RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" -fi -AC_SUBST(RELEASE) - -if test "x$JDK_BUILD_NUMBER" != x; then - FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" -else - JDK_BUILD_NUMBER=b00 - BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` - # Avoid [:alnum:] since it depends on the locale. - CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` - USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" -fi -AC_SUBST(FULL_VERSION) -COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` -AC_SUBST(COOKED_BUILD_NUMBER) - -# Test from where we are running configure, in or outside of src root. -if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then - # We are running configure from the src root. - # Create a default ./build/host-variant-debuglevel output root. - CONF_NAME="${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" - OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" - mkdir -p "$OUTPUT_ROOT" - if test ! -d "$OUTPUT_ROOT"; then - AC_MSG_ERROR([Could not create build directory $OUTPUT_ROOT]) - fi -else - # We are running configure from outside of the src dir. - # Then use the current directory as output dir! - # If configuration is situated in normal build directory, just use the build - # directory name as configuration name, otherwise use the complete path. - CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` - OUTPUT_ROOT="$CURDIR" -fi - -SPACESAFE(OUTPUT_ROOT,[the path to the output root]) - -# Save the arguments given to us -echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments - -# Check if the VS env variables were setup prior to running configure. -# If not, then find vcvarsall.bat and run it automatically, and integrate -# the set env variables into the spec file. -SETUPDEVENV="# No special vars" -if test "x$BUILD_OS" = "xwindows"; then - # If vcvarsall.bat has been run, then VCINSTALLDIR is set. - if test "x$VCINSTALLDIR" != x; then - # No further setup is needed. The build will happen from this kind - # of shell. - SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." - # Make sure to remind you, if you forget to run make from a cygwin bash shell - # that is spawned "bash -l" from a VS command prompt. - CHECK_FOR_VCINSTALLDIR=yes - AC_MSG_CHECKING([if you are running from within a VS command prompt]) - AC_MSG_RESULT([yes]) - else - # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. - if test "x$VS100COMNTOOLS" != x; then - VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` - SEARCH_ROOT="$VS100COMNTOOLS" - else - VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` - SEARCH_ROOT="$PROGRAMFILES" - fi - VCPATH=`dirname "$VARSBAT"` - VCPATH=`cygpath -w "$VCPATH"` - if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then - AC_MSG_CHECKING([if we can find the VS installation]) - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - case "$LEGACY_HOST_CPU1" in - i?86) - VARSBAT_ARCH=x86 - ;; - *) - VARSBAT_ARCH=$LEGACY_HOST_CPU1 - ;; - esac - # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat - cd $OUTPUT_ROOT - bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" - cd $CURDIR - if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then - AC_MSG_CHECKING([if we can extract the needed env variables]) - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - # Now set all paths and other env variables. This will allow the rest of - # the configure script to find and run the compiler in the proper way. - . $OUTPUT_ROOT/localdevenv.sh - AC_MSG_CHECKING([if we can find the VS installation]) - if test "x$VCINSTALLDIR" != x; then - AC_MSG_RESULT([$VCINSTALLDIR]) - else - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - CHECK_FOR_VCINSTALLDIR=no - SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" - - AC_MSG_CHECKING([for msvcr100.dll]) - AC_ARG_WITH(msvcr100dll, [AS_HELP_STRING([--with-msvcr100dll], - [copy this msvcr100.dll into the built JDK])]) - if test "x$with_msvcr100dll" != x; then - MSVCR100DLL="$with_msvcr100dll" - else - if test "x$HOST_CPU_BITS" = x64; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` - else - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` - if test "x$MSVCR100DLL" = x; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` - fi - fi - fi - if test "x$MSVCR100DLL" = x; then - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not find msvcr100.dll !]) - fi - AC_MSG_RESULT([$MSVCR100DLL]) - SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll]) - fi -fi -AC_SUBST(SETUPDEVENV) -AC_SUBST(CHECK_FOR_VCINSTALLDIR) -AC_SUBST(MSVCR100DLL) - -# Most of the probed defines are put into config.h -AC_CONFIG_HEADERS([$OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in]) -# The spec.gmk file contains all variables for the make system. -AC_CONFIG_FILES([$OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in]) -# The generated Makefile knows where the spec.gmk is and where the source is. -# You can run make from the OUTPUT_ROOT. If you have only -# one configured host, then you can also run make from the SRC_ROOT, -# since it will go look for a single spec.gmk file. Or perhaps it -# should instead make all configured hosts it can find? -AC_CONFIG_FILES([$OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in]) - -AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk) -AC_SUBST(CONF_NAME, $CONF_NAME) -AC_SUBST(OUTPUT_ROOT, $OUTPUT_ROOT) - -# Where are the sources. Any of these can be overridden -# using --with-override-corba and the likes. -LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" -CORBA_TOPDIR="$SRC_ROOT/corba" -JAXP_TOPDIR="$SRC_ROOT/jaxp" -JAXWS_TOPDIR="$SRC_ROOT/jaxws" -HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" -JDK_TOPDIR="$SRC_ROOT/jdk" -AC_SUBST(LANGTOOLS_TOPDIR) -AC_SUBST(CORBA_TOPDIR) -AC_SUBST(JAXP_TOPDIR) -AC_SUBST(JAXWS_TOPDIR) -AC_SUBST(HOTSPOT_TOPDIR) -AC_SUBST(JDK_TOPDIR) +# Setup builddeps, for automatic downloading of tools we need. +# This is needed before we can call BDEPS_CHECK_MODULE, which is done in +# boot-jdk setup, but we need to have basic tools setup first. +BDEPS_CONFIGURE_BUILDDEPS +BDEPS_SCAN_FOR_BUILDDEPS # Check if pkg-config is available. PKG_PROG_PKG_CONFIG -AC_ARG_WITH(builddeps-conf, [AS_HELP_STRING([--with-builddeps-conf], - [use this configuration file for the builddeps])]) +############################################################################### +# +# Determine OpenJDK build and target platforms. +# +############################################################################### -AC_ARG_WITH(builddeps-server, [AS_HELP_STRING([--with-builddeps-server], - [download and use build dependencies from this server url, e.g. --with-builddeps-server=ftp://example.com/dir])]) +PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET +PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION -AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir], - [store downloaded build dependencies here @<:@d/localhome/builddeps@:>@])], - [], - [with_builddeps_dir=/localhome/builddeps]) - -AC_ARG_WITH(builddeps-group, [AS_HELP_STRING([--with-builddeps-group], - [chgrp the downloaded build dependencies to this group])]) - -AC_ARG_ENABLE([list-builddeps], [AS_HELP_STRING([--enable-list-builddeps], - [list all build dependencies known to the configure script])], - [LIST_BUILDDEPS="${enableval}"], [LIST_BUILDDEPS='no']) - -if test "x$LIST_BUILDDEPS" = xyes; then - echo - echo List of build dependencies known to the configure script, - echo that can be used in builddeps.conf files: - cat $SRC_ROOT/configure.ac | grep BDEPS_CHECK_MODUL | grep -v configure.ac | cut -f 2 -d ',' | tr -d ' ' | sort - echo - exit 1 -fi - -# If builddeps server or conf file is given. Setup buildeps usage. -BDEPS_SCAN_FOR_BUILDDEPS +# With knowledge of the build platform, setup more basic things. +BASIC_SETUP_PATH_SEP +BASIC_SETUP_SEARCHPATH ############################################################################### # -# Configure the development tool paths and potential sysroot. +# Determine OpenJDK variants, options and version numbers. # -AC_LANG(C++) -DEVKIT= -SYS_ROOT=/ -AC_SUBST(SYS_ROOT) +############################################################################### -# The option used to specify the target .o,.a or .so file. -# When compiling, how to specify the to be created object file. -CC_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created executable. -EXE_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created dynamically linkable library. -LD_OUT_OPTION='-o$(SPACE)' -# When archiving, how to specify the to be create static archive for object files. -AR_OUT_OPTION='rcs$(SPACE)' -AC_SUBST(CC_OUT_OPTION) -AC_SUBST(EXE_OUT_OPTION) -AC_SUBST(LD_OUT_OPTION) -AC_SUBST(AR_OUT_OPTION) +# We need build & target for this. +JDKOPT_SETUP_JDK_VARIANT +JDKOPT_SETUP_JVM_VARIANTS +JDKOPT_SETUP_DEBUG_LEVEL +JDKOPT_SETUP_JDK_OPTIONS +JDKOPT_SETUP_JDK_VERSION_NUMBERS -# If --build AND --host is set, then the configure script will find any -# cross compilation tools in the PATH. Cross compilation tools -# follows the cross compilation standard where they are prefixed with ${host}. -# For example the binary i686-sun-solaris2.10-gcc -# will cross compile for i686-sun-solaris2.10 -# If neither of build and host is not set, then build=host and the -# default compiler found in the path will be used. -# Setting only --host, does not seem to be really supported. -# Please set both --build and --host if you want to cross compile. - -DEFINE_CROSS_COMPILE_ARCH="" -HOSTCC="" -HOSTCXX="" -AC_SUBST(DEFINE_CROSS_COMPILE_ARCH) -AC_SUBST(HOST_CC) -AC_SUBST(HOST_CXX) -AC_MSG_CHECKING([if this is a cross compile]) -if test "x$build_var" != "x$host_var"; then - AC_MSG_RESULT([yes, from $build_var to $host_var]) - # We have detected a cross compile! - DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_HOST_CPU1" - # Now we to find a C/C++ compiler that can build executables for the build - # platform. We can't use the AC_PROG_CC macro, since it can only be used - # once. - AC_PATH_PROGS(HOSTCC, [cl cc gcc]) - WHICHCMD(HOSTCC) - AC_PATH_PROGS(HOSTCXX, [cl CC g++]) - WHICHCMD(HOSTCXX) - # Building for the build platform should be easy. Therefore - # we do not need any linkers or assemblers etc. -else - AC_MSG_RESULT([no]) -fi - -# You can force the sys-root if the sys-root encoded into the cross compiler tools -# is not correct. -AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root], - [pass this sys-root to the compilers and linker (useful if the sys-root encoded in - the cross compiler tools is incorrect)])]) - -if test "x$with_sys_root" != x; then - SYS_ROOT=$with_sys_root -fi - -# If a devkit is found on the builddeps server, then prepend its path to the -# PATH variable. If there are cross compilers available in the devkit, these -# will be found by AC_PROG_CC et al. -BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx, - [# Found devkit - PATH="$DEVKIT/bin:$PATH" - SYS_ROOT="$DEVKIT/${rewritten_host}/sys-root" - if test "x$x_includes" = "xNONE"; then - x_includes="$SYS_ROOT/usr/include/X11" - fi - if test "x$x_libraries" = "xNONE"; then - x_libraries="$SYS_ROOT/usr/lib" - fi - ], - []) - -if test "x$SYS_ROOT" != "x/" ; then - CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" - CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" - OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" - LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" -fi - -# Store the CFLAGS etal passed to the configure script. -ORG_CFLAGS="$CFLAGS" -ORG_CXXFLAGS="$CXXFLAGS" -ORG_OBJCFLAGS="$OBJCFLAGS" - -prepare_help_system - -# gcc is almost always present, but on Windows we -# prefer cl.exe and on Solaris we prefer CC. -# Thus test for them in this order. -AC_PROG_CC([cl cc gcc]) -if test "x$CC" = x; then - help_on_build_dependency devkit - AC_MSG_ERROR([Could not find a compiler. $HELP_MSG]) -fi -if test "x$CC" = xcc && test "x$BUILD_OS" = xmacosx; then - # Do not use cc on MacOSX use gcc instead. - CC="gcc" -fi -WHICHCMD(CC) - -AC_PROG_CXX([cl CC g++]) -if test "x$CXX" = xCC && test "x$BUILD_OS" = xmacosx; then - # The found CC, even though it seems to be a g++ derivate, cannot compile - # c++ code. Override. - CXX="g++" -fi -WHICHCMD(CXX) - -if test "x$CXX" = x || test "x$CC" = x; then - help_on_build_dependency devkit - AC_MSG_ERROR([Could not find the needed compilers! $HELP_MSG ]) -fi - -if test "x$BUILD_OS" != xwindows; then - AC_PROG_OBJC - WHICHCMD(OBJC) -else - OBJC= -fi - -# Restore the flags to the user specified values. -# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" -CFLAGS="$ORG_CFLAGS" -CXXFLAGS="$ORG_CXXFLAGS" -OBJCFLAGS="$ORG_OBJCFLAGS" - -# If we are not cross compiling, use the same compilers for -# building the build platform executables. -if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then - HOSTCC="$CC" - HOSTCXX="$CXX" -fi - -AC_CHECK_TOOL(LD, ld) -WHICHCMD(LD) -LD="$CC" -LDEXE="$CC" -LDCXX="$CXX" -LDEXECXX="$CXX" -# LDEXE is the linker to use, when creating executables. -AC_SUBST(LDEXE) -# Linking C++ libraries. -AC_SUBST(LDCXX) -# Linking C++ executables. -AC_SUBST(LDEXECXX) - -AC_CHECK_TOOL(AR, ar) -WHICHCMD(AR) -if test "x$BUILD_OS" = xmacosx; then - ARFLAGS="-r" -else - ARFLAGS="" -fi -AC_SUBST(ARFLAGS) - -COMPILER_NAME=gcc -COMPILER_TYPE=CC -AS_IF([test "x$BUILD_OS" = xwindows], [ - # For now, assume that we are always compiling using cl.exe. - CC_OUT_OPTION=-Fo - EXE_OUT_OPTION=-out: - LD_OUT_OPTION=-out: - AR_OUT_OPTION=-out: - # On Windows, reject /usr/bin/link, which is a cygwin - # program for something completely different. - AC_CHECK_PROG([WINLD], [link],[link],,, [/usr/bin/link]) - # Since we must ignore the first found link, WINLD will contain - # the full path to the link.exe program. - WHICHCMD_SPACESAFE([WINLD]) - LD="$WINLD" - LDEXE="$WINLD" - LDCXX="$WINLD" - LDEXECXX="$WINLD" - - AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) - WHICHCMD_SPACESAFE([MT]) - # The resource compiler - AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) - WHICHCMD_SPACESAFE([RC]) - - RC_FLAGS="-nologo /l 0x409 /r" - AS_IF([test "x$VARIANT" = xOPT], [ - RC_FLAGS="$RC_FLAGS -d NDEBUG" - ]) - JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION - AS_IF([test "x$JDK_UPDATE_VERSION" = x], [ - JDK_UPDATE_VERSION_NOTNULL=0 - ]) - RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" - - # lib.exe is used to create static libraries. - AC_CHECK_PROG([WINAR], [lib],[lib],,,) - WHICHCMD_SPACESAFE([WINAR]) - AR="$WINAR" - ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" - - AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) - WHICHCMD_SPACESAFE([DUMPBIN]) - - COMPILER_TYPE=CL - CCXXFLAGS="$CCXXFLAGS -nologo" - LDFLAGS="$LDFLAGS -nologo -opt:ref -incremental:no" - if test "x$LEGACY_HOST_CPU1" = xi586; then - LDFLAGS="$LDFLAGS -safeseh" - fi - # TODO: make -debug optional "--disable-full-debug-symbols" - LDFLAGS="$LDFLAGS -debug" -]) -AC_SUBST(RC_FLAGS) -AC_SUBST(COMPILER_TYPE) - -AC_PROG_CPP -WHICHCMD(CPP) - -AC_PROG_CXXCPP -WHICHCMD(CXXCPP) - -# Find the right assembler. -if test "x$BUILD_OS" = xsolaris; then - AC_PATH_PROG(AS, as) - WHICHCMD(AS) - ASFLAGS=" " -else - AS="$CC -c" - ASFLAGS=" " -fi -AC_SUBST(AS) -AC_SUBST(ASFLAGS) - -if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = xmacosx; then - # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. - # While waiting for a better solution, the current workaround is to use -mstackrealign. - CFLAGS="$CFLAGS -mstackrealign" - AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign]) - AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], - [ - AC_MSG_RESULT([yes]) - ], - [ - AC_MSG_RESULT([no]) - AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) - ]) -fi - -if test "x$BUILD_OS" = xsolaris; then - AC_PATH_PROG(NM, nm) - WHICHCMD(NM) - AC_PATH_PROG(STRIP, strip) - WHICHCMD(STRIP) - AC_PATH_PROG(MCS, mcs) - WHICHCMD(MCS) -else - AC_CHECK_TOOL(NM, nm) - WHICHCMD(NM) - AC_CHECK_TOOL(STRIP, strip) - WHICHCMD(STRIP) -fi - -# When using cygwin, we need a wrapper binary that renames -# /cygdrive/c/ arguments into c:/ arguments and peeks into -# @files and rewrites these too! This wrapper binary is -# called uncygdrive.exe. -UNCYGDRIVE= -if test "x$BUILD_OS" = xwindows; then - AC_MSG_CHECKING([if uncygdrive can be created]) - UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` - rm -f $OUTPUT_ROOT/uncygdrive* - UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` - cd $OUTPUT_ROOT - $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 - cd $CURDIR - - if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then - AC_MSG_RESULT([no]) - cat $OUTPUT_ROOT/uncygdrive1.log - AC_MSG_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe]) - fi - AC_MSG_RESULT([$UNCYGDRIVE]) - AC_MSG_CHECKING([if uncygdrive.exe works]) - cd $OUTPUT_ROOT - $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 - cd $CURDIR - if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then - AC_MSG_RESULT([no]) - cat $OUTPUT_ROOT/uncygdrive2.log - AC_MSG_ERROR([Uncygdrive did not work!]) - fi - AC_MSG_RESULT([yes]) - rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj -fi - -AC_SUBST(UNCYGDRIVE) - -TESTFOR_PROG_CCACHE - -# Used on GNU/Linux systems, can be empty... -#AC_PATH_PROG(ELFDUMP, elfdump) - -# Setup default logging of stdout and stderr to build.log in the output root. -BUILD_LOG='$(OUTPUT_ROOT)/build.log' -BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' -AC_SUBST(BUILD_LOG) -AC_SUBST(BUILD_LOG_WRAPPER) +# To properly create a configuration name, we need to have the OpenJDK target +# and options (variants and debug level) parsed. +BASIC_SETUP_OUTPUT_DIR ############################################################################### # -# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. -# (The JVM can use 32 or 64 bit Java pointers but that decision -# is made at runtime.) +# Setup BootJDK, used to bootstrap the build. # -AC_LANG_PUSH(C++) -OLD_CXXFLAGS="$CXXFLAGS" -if test "x$HOST_OS" = xsolaris && test "x$with_data_model" != x; then - CXXFLAGS="-m{$with_data_model} $CXXFLAGS" -fi -AC_CHECK_SIZEOF([int *], [1111]) -CXXFLAGS="$OLD_CXXFLAGS" -AC_LANG_POP(C++) +############################################################################### -if test "x$ac_cv_sizeof_int_p" = x0; then - # The test failed, lets pick the assumed value. - ARCH_DATA_MODEL=$HOST_CPU_BITS -else - ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` -fi - -if test "x$ARCH_DATA_MODEL" = x64; then - A_LP64="LP64:=" - ADD_LP64="-D_LP64=1" -fi -AC_MSG_CHECKING([for host address size]) -AC_MSG_RESULT([$ARCH_DATA_MODEL bits]) -AC_SUBST(LP64,$A_LP64) -AC_SUBST(ARCH_DATA_MODEL) - -if test "x$ARCH_DATA_MODEL" != "x$HOST_CPU_BITS"; then - AC_MSG_ERROR([The tested number of bits in the host ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the host ($HOST_CPU_BITS)]) -fi +BOOTJDK_SETUP_BOOT_JDK +BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS ############################################################################### # +# Configure the sources to use. We can add or override individual directories. +# +############################################################################### + +SRCDIRS_SETUP_TOPDIRS +SRCDIRS_SETUP_ALTERNATIVE_TOPDIRS +SRCDIRS_SETUP_OUTPUT_DIRS + +############################################################################### +# +# Setup the toolchain (compilers etc), i.e. the tools that need to be +# cross-compilation aware. +# +############################################################################### + +TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS +TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV +# Locate the actual tools +TOOLCHAIN_SETUP_PATHS + +# FIXME: Currently we must test this after paths but before flags. Fix! + +# And we can test some aspects on the target using configure macros. +PLATFORM_TEST_OPENJDK_TARGET_BITS +PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS + +# Configure flags for the tools +TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS +TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION +TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK + +# After we have toolchain, we can compile the uncygdrive helper +BASIC_COMPILE_UNCYGDRIVE + + +# Setup debug symbols (need objcopy from the toolchain for that) +JDKOPT_SETUP_DEBUG_SYMBOLS + +############################################################################### +# +# Check dependencies for external and internal libraries. +# +############################################################################### + +LIB_SETUP_INIT +LIB_SETUP_X11 +LIB_SETUP_CUPS +LIB_SETUP_FREETYPE +LIB_SETUP_ALSA +LIB_SETUP_MISC_LIBS +LIB_SETUP_STATIC_LINK_LIBSTDCPP + +############################################################################### +# +# We need to do some final tweaking, when everything else is done. +# +############################################################################### + +JDKOPT_SETUP_BUILD_TWEAKS + +############################################################################### +# +# Configure parts of the build that only affect the build performance, +# not the result. +# +############################################################################### + +BPERF_SETUP_BUILD_CORES +BPERF_SETUP_BUILD_MEMORY + +# Setup smart javac (after cores and memory have been setup) +BPERF_SETUP_SMART_JAVAC + # Can the C/C++ compiler use precompiled headers? -# -AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers], - [use precompiled headers when compiling C++ @<:@enabled@:>@])], - [ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes]) +BPERF_SETUP_PRECOMPILED_HEADERS -USE_PRECOMPILED_HEADER=1 -if test "x$ENABLE_PRECOMPH" = xno; then - USE_PRECOMPILED_HEADER=0 -fi - -if test "x$ENABLE_PRECOMPH" = xyes; then - # Check that the compiler actually supports precomp headers. - if test "x$GCC" = xyes; then - AC_MSG_CHECKING([that precompiled headers work]) - echo "int alfa();" > conftest.h - $CXX -x c++-header conftest.h -o conftest.hpp.gch - if test ! -f conftest.hpp.gch; then - echo Precompiled header is not working! - USE_PRECOMPILED_HEADER=0 - AC_MSG_RESULT([no]) - else - AC_MSG_RESULT([yes]) - fi - rm -f conftest.h - fi -fi - -AC_SUBST(USE_PRECOMPILED_HEADER) +# Setup use of ccache, if available +BPERF_SETUP_CCACHE ############################################################################### # -# How to compile shared libraries. +# And now the finish... # - -if test "x$GCC" = xyes; then - COMPILER_NAME=gcc - PICFLAG="-fPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-shared" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' - SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1' - C_FLAG_REORDER='' - CXX_FLAG_REORDER='' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' - LD="$CC" - LDEXE="$CC" - LDCXX="$CXX" - LDEXECXX="$CXX" - # TODO: for embedded set --strip-unneeded - POST_STRIP_CMD="$STRIP -g" - - # Linking is different on MacOSX - if test "x$BUILD_OS" = xmacosx; then - # Might change in the future to clang. - COMPILER_NAME=gcc - SHARED_LIBRARY='lib$1.dylib' - SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" - SHARED_LIBRARY_SUFFIX='.dylib' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' - POST_STRIP_CMD="$STRIP -S" - fi -else - if test "x$BUILD_OS" = xsolaris; then - # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler - COMPILER_NAME=ossc - PICFLAG="-KPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-G" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='-M $1' - C_FLAG_REORDER='-xF' - CXX_FLAG_REORDER='-xF' - SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' - CFLAGS_JDKLIB_EXTRA='-xstrconst -D__solaris__' - POST_STRIP_CMD="$STRIP -x" - POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" - fi - if test "x$BUILD_OS" = xwindows; then - # If it is not gcc, then assume it is the MS Visual Studio compiler - COMPILER_NAME=cl - PICFLAG="" - LIBRARY_PREFIX= - SHARED_LIBRARY='$1.dll' - STATIC_LIBRARY='$1.lib' - SHARED_LIBRARY_FLAGS="-LD" - SHARED_LIBRARY_SUFFIX='.dll' - STATIC_LIBRARY_SUFFIX='.lib' - OBJ_SUFFIX='.obj' - EXE_SUFFIX='.exe' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='' - fi -fi - -AC_SUBST(OBJ_SUFFIX) -AC_SUBST(SHARED_LIBRARY) -AC_SUBST(STATIC_LIBRARY) -AC_SUBST(LIBRARY_PREFIX) -AC_SUBST(SHARED_LIBRARY_SUFFIX) -AC_SUBST(STATIC_LIBRARY_SUFFIX) -AC_SUBST(EXE_SUFFIX) -AC_SUBST(SHARED_LIBRARY_FLAGS) -AC_SUBST(SET_SHARED_LIBRARY_NAME) -AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) -AC_SUBST(C_FLAG_REORDER) -AC_SUBST(CXX_FLAG_REORDER) -AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) -AC_SUBST(POST_STRIP_CMD) -AC_SUBST(POST_MCS_CMD) - -# The (cross) compiler is now configured, we can now test capabilities -# of the host platform. - -############################################################################### -# -# Is the host little of big endian? -# -AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal"]) - -if test "x$ENDIAN" = xuniversal; then - AC_MSG_ERROR([It seems like someone needs to decide how we are to deal with universal binaries on the MacOSX?]) -fi -if test "x$ENDIAN" = xunknown; then - ENDIAN="$HOST_CPU_ENDIAN" -fi -if test "x$ENDIAN" != "x$HOST_CPU_ENDIAN"; then - AC_MSG_WARN([The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)]) - ENDIAN="$HOST_CPU_ENDIAN" -fi -AC_SUBST(ENDIAN) - -############################################################################### -# -# We need a Boot JDK to bootstrap the build. -# -BOOT_JDK_FOUND=no -AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk], - [path to Boot JDK (used to bootstrap build) @<:@probed@:>@])]) - -if test "x$with_boot_jdk" != x; then - BOOT_JDK=$with_boot_jdk - BOOT_JDK_FOUND=yes -fi -if test "x$BOOT_JDK_FOUND" = xno; then - BDEPS_CHECK_MODULE(BOOT_JDK, boot-jdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no]) -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - if test "x$JAVA_HOME" != x; then - if test ! -d "$JAVA_HOME"; then - AC_MSG_ERROR([Your JAVA_HOME points to a non-existing directory!]) - fi - # Aha, the user has set a JAVA_HOME - # let us use that as the Boot JDK. - BOOT_JDK="$JAVA_HOME" - BOOT_JDK_FOUND=yes - # To be on the safe side, lets check that it is a JDK. - if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then - JAVAC="$BOOT_JDK/bin/javac" - JAVA="$BOOT_JDK/bin/java" - BOOT_JDK_FOUND=yes - else - AC_MSG_ERROR([Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=[$]JAVA_HOME]) - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - AC_PATH_PROG(JAVAC_CHECK, javac) - AC_PATH_PROG(JAVA_CHECK, java) - BINARY="$JAVAC_CHECK" - if test "x$JAVAC_CHECK" = x; then - BINARY="$JAVA_CHECK" - fi - if test "x$BINARY" != x; then - # So there is a java(c) binary, it might be part of a JDK. - # Lets find the JDK/JRE directory by following symbolic links. - # Linux/GNU systems often have links from /usr/bin/java to - # /etc/alternatives/java to the real JDK binary. - WHICHCMD_SPACESAFE(BINARY,[path to javac]) - REMOVE_SYMBOLIC_LINKS(BINARY) - BOOT_JDK=`dirname $BINARY` - BOOT_JDK=`cd $BOOT_JDK/..; pwd` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Try the MacOSX way. - if test -x /usr/libexec/java_home; then - BOOT_JDK=`/usr/libexec/java_home` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - AC_PATH_PROG(JAVA_CHECK, java) - if test "x$JAVA_CHECK" != x; then - # There is a java in the path. But apparently we have not found a javac - # in the path, since that would have been tested earlier. - if test "x$HOST_OS" = xwindows; then - # Now if this is a windows platform. The default installation of a JDK - # actually puts the JRE in the path and keeps the JDK out of the path! - # Go look in the default installation location. - BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=yes - fi - fi - if test "x$BOOT_JDK_FOUND" = xno; then - help_on_build_dependency openjdk - AC_MSG_ERROR([Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG]) - fi - else - help_on_build_dependency openjdk - AC_MSG_ERROR([Could not find a JDK. $HELP_MSG]) - fi -fi - -WIN_FIX_PATH(BOOT_JDK) - -# Now see if we can find the rt.jar, or its nearest equivalent. -BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" -SPACESAFE(BOOT_RTJAR,[the path to the Boot JDK rt.jar (or nearest equivalent)]) - -BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" -SPACESAFE(BOOT_TOOLSJAR,[the path to the Boot JDK tools.jar (or nearest equivalent)]) - -if test ! -f $BOOT_RTJAR; then - # On MacOSX it is called classes.jar - BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar - if test ! -f $BOOT_RTJAR; then - AC_MSG_ERROR([Cannot find the rt.jar or its equivalent!]) - fi - # Remove the .. - BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" - # The tools.jar is part of classes.jar - BOOT_TOOLSJAR="$BOOT_RTJAR" -fi - -AC_SUBST(BOOT_JDK) -AC_SUBST(BOOT_RTJAR) -AC_SUBST(BOOT_TOOLSJAR) -AC_MSG_CHECKING([for Boot JDK]) -AC_MSG_RESULT([$BOOT_JDK]) -AC_MSG_CHECKING([for Boot rt.jar]) -AC_MSG_RESULT([$BOOT_RTJAR]) -AC_MSG_CHECKING([for Boot tools.jar]) -AC_MSG_RESULT([$BOOT_TOOLSJAR]) - -# Use the java tool from the Boot JDK. -AC_MSG_CHECKING([for java in Boot JDK]) -JAVA=$BOOT_JDK/bin/java -if test ! -x $JAVA; then - AC_MSG_ERROR([Could not find a working java]) -fi -BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` -AC_MSG_RESULT([yes $BOOT_JDK_VERSION]) -AC_SUBST(JAVA) - -# Extra M4 quote needed to protect [] in grep expression. -[FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`] -if test "x$FOUND_VERSION_78" = x; then - help_on_build_dependency openjdk - AC_MSG_ERROR([Your boot-jdk must be version 7 or 8. $HELP_MSG]) -fi - -# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. -BOOT_JDK_SOURCETARGET="-source 7 -target 7" -AC_SUBST(BOOT_JDK_SOURCETARGET) - -# Use the javac tool from the Boot JDK. -AC_MSG_CHECKING([for javac in Boot JDK]) -JAVAC=$BOOT_JDK/bin/javac -if test ! -x $JAVAC; then - AC_MSG_ERROR([Could not find a working javac]) -fi -AC_MSG_RESULT(yes) -AC_SUBST(JAVAC) -AC_SUBST(JAVAC_FLAGS) - -# Use the javah tool from the Boot JDK. -AC_MSG_CHECKING([for javah in Boot JDK]) -JAVAH=$BOOT_JDK/bin/javah -if test ! -x $JAVAH; then - AC_MSG_ERROR([Could not find a working javah]) -fi -AC_MSG_RESULT(yes) -AC_SUBST(JAVAH) - -# Use the jar tool from the Boot JDK. -AC_MSG_CHECKING([for jar in Boot JDK]) -JAR=$BOOT_JDK/bin/jar -if test ! -x $JAR; then - AC_MSG_ERROR([Could not find a working jar]) -fi -AC_SUBST(JAR) -AC_MSG_RESULT(yes) - -# Use the rmic tool from the Boot JDK. -AC_MSG_CHECKING([for rmic in Boot JDK]) -RMIC=$BOOT_JDK/bin/rmic -if test ! -x $RMIC; then - AC_MSG_ERROR([Could not find a working rmic]) -fi -AC_SUBST(RMIC) -AC_MSG_RESULT(yes) - -# Use the native2ascii tool from the Boot JDK. -AC_MSG_CHECKING([for native2ascii in Boot JDK]) -NATIVE2ASCII=$BOOT_JDK/bin/native2ascii -if test ! -x $NATIVE2ASCII; then - AC_MSG_ERROR([Could not find a working native2ascii]) -fi -AC_MSG_RESULT(yes) -AC_SUBST(NATIVE2ASCII) - -############################################################################### -# -# Pickup additional source for a component from outside of the source root -# or override source for a component. -# -AC_ARG_WITH(add-source-root, [AS_HELP_STRING([--with-add-source-root], - [for each and every source directory, look in this additional source root for - the same directory; if it exists and have files in it, include it in the build])]) - -AC_ARG_WITH(override-source-root, [AS_HELP_STRING([--with-override-source-root], - [for each and every source directory, look in this override source root for - the same directory; if it exists, use that directory instead and - ignore the directory in the original source root])]) - -AC_ARG_WITH(adds-and-overrides, [AS_HELP_STRING([--with-adds-and-overrides], - [use the subdirs 'adds' and 'overrides' in the specified directory as - add-source-root and override-source-root])]) - -if test "x$with_adds_and_overrides" != x; then - with_add_source_root="$with_adds_and_overrides/adds" - with_override_source_root="$with_adds_and_overrides/overrides" -fi - -if test "x$with_add_source_root" != x; then - if ! test -d $with_add_source_root; then - AC_MSG_ERROR([Trying to use a non-existant add-source-root $with_add_source_root]) - fi - CURDIR="$PWD" - cd "$with_add_source_root" - ADD_SRC_ROOT="`pwd`" - cd "$CURDIR" - # Verify that the addon source root does not have any root makefiles. - # If it does, then it is usually an error, prevent this. - if test -f $with_add_source_root/langtools/makefiles/Makefile || \ - test -f $with_add_source_root/langtools/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/corba/makefiles/Makefile || \ - test -f $with_add_source_root/corba/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full corba repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ - test -f $with_add_source_root/jaxp/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ - test -f $with_add_source_root/jaxws/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ - test -f $with_add_source_root/hotspot/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/jdk/makefiles/Makefile || \ - test -f $with_add_source_root/jdk/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources.]) - fi -fi -AC_SUBST(ADD_SRC_ROOT) - -if test "x$with_override_source_root" != x; then - if ! test -d $with_override_source_root; then - AC_MSG_ERROR([Trying to use a non-existant override-source-root $with_override_source_root]) - fi - CURDIR="$PWD" - cd "$with_override_source_root" - OVERRIDE_SRC_ROOT="`pwd`" - cd "$CURDIR" - if test -f $with_override_source_root/langtools/makefiles/Makefile || \ - test -f $with_override_source_root/langtools/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/corba/makefiles/Makefile || \ - test -f $with_override_source_root/corba/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full corba repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ - test -f $with_override_source_root/jaxp/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ - test -f $with_override_source_root/jaxws/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ - test -f $with_override_source_root/hotspot/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/jdk/makefiles/Makefile || \ - test -f $with_override_source_root/jdk/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override.]) - fi -fi -AC_SUBST(OVERRIDE_SRC_ROOT) - -############################################################################### -# -# Override a repo completely, this is used for example when you have 3 small -# development sandboxes of the langtools sources and want to avoid having 3 full -# OpenJDK sources checked out on disk. -# -# Assuming that the 3 langtools sandboxes are located here: -# /home/fredrik/sandbox1/langtools -# /home/fredrik/sandbox2/langtools -# /home/fredrik/sandbox3/langtools -# -# From the source root you create build subdirs manually: -# mkdir -p build1 build2 build3 -# in each build directory run: -# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) -# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) -# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) -# - -AC_ARG_WITH(override-langtools, [AS_HELP_STRING([--with-override-langtools], - [use this langtools dir for the build])]) - -AC_ARG_WITH(override-corba, [AS_HELP_STRING([--with-override-corba], - [use this corba dir for the build])]) - -AC_ARG_WITH(override-jaxp, [AS_HELP_STRING([--with-override-jaxp], - [use this jaxp dir for the build])]) - -AC_ARG_WITH(override-jaxws, [AS_HELP_STRING([--with-override-jaxws], - [use this jaxws dir for the build])]) - -AC_ARG_WITH(override-hotspot, [AS_HELP_STRING([--with-override-hotspot], - [use this hotspot dir for the build])]) - -AC_ARG_WITH(override-jdk, [AS_HELP_STRING([--with-override-jdk], - [use this jdk dir for the build])]) - -if test "x$with_override_langtools" != x; then - CURDIR="$PWD" - cd "$with_override_langtools" - LANGTOOLS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override langtools with a full langtools repo!]) - fi - AC_MSG_CHECKING([if langtools should be overridden]) - AC_MSG_RESULT([yes with $LANGTOOLS_TOPDIR]) -fi -if test "x$with_override_corba" != x; then - CURDIR="$PWD" - cd "$with_override_corba" - CORBA_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override corba with a full corba repo!]) - fi - AC_MSG_CHECKING([if corba should be overridden]) - AC_MSG_RESULT([yes with $CORBA_TOPDIR]) -fi -if test "x$with_override_jaxp" != x; then - CURDIR="$PWD" - cd "$with_override_jaxp" - JAXP_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override jaxp with a full jaxp repo!]) - fi - AC_MSG_CHECKING([if jaxp should be overridden]) - AC_MSG_RESULT([yes with $JAXP_TOPDIR]) -fi -if test "x$with_override_jaxws" != x; then - CURDIR="$PWD" - cd "$with_override_jaxws" - JAXWS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override jaxws with a full jaxws repo!]) - fi - AC_MSG_CHECKING([if jaxws should be overridden]) - AC_MSG_RESULT([yes with $JAXWS_TOPDIR]) -fi -if test "x$with_override_hotspot" != x; then - CURDIR="$PWD" - cd "$with_override_hotspot" - HOTSPOT_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ - ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override hotspot with a full hotspot repo!]) - fi - AC_MSG_CHECKING([if hotspot should be overridden]) - AC_MSG_RESULT([yes with $HOTSPOT_TOPDIR]) -fi -if test "x$with_override_jdk" != x; then - CURDIR="$PWD" - cd "$with_override_jdk" - JDK_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JDK_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override JDK with a full JDK repo!]) - fi - AC_MSG_CHECKING([if JDK should be overridden]) - AC_MSG_RESULT([yes with $JDK_TOPDIR]) -fi - -############################################################################### -# -# Specify options for anything that is run with the Boot JDK. -# -AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs], - [specify JVM arguments to be passed to all invocations of the Boot JDK, overriding the default values, - e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])]) - -if test "x$with_boot_jdk_jvmargs" = x; then - # Not all JVM:s accept the same arguments on the command line. - # OpenJDK specific increase in thread stack for JDK build, - # well more specifically, when running javac. - if test "x$BUILD_NUM_BITS" = x32; then - STACK_SIZE=768 - else - # Running Javac on a JVM on a 64-bit machine, the stack takes more space - # since 64-bit pointers are pushed on the stach. Apparently, we need - # to increase the stack space when javacing the JDK.... - STACK_SIZE=1536 - fi - - # Minimum amount of heap memory. - ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA]) - if test "x$HOST_OS" = "xmacosx"; then - # Why does macosx need more heap? Its the huge JDK batch. - ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA]) - else - ADD_JVM_ARG_IF_OK([-Xmx1100M],boot_jdk_jvmargs,[$JAVA]) - fi - # When is adding -client something that speeds up the JVM? - # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) - ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],boot_jdk_jvmargs,[$JAVA]) - ADD_JVM_ARG_IF_OK([-XX:MaxPermSize=160m],boot_jdk_jvmargs,[$JAVA]) - ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs,[$JAVA]) - # Disable special log output when a debug build is used as Boot JDK... - ADD_JVM_ARG_IF_OK([-XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput],boot_jdk_jvmargs,[$JAVA]) -fi - -AC_SUBST(BOOT_JDK_JVMARGS, $boot_jdk_jvmargs) - -AC_ARG_WITH(server-java, [AS_HELP_STRING([--with-server-java], - [use this java binary for running the javac background server and other long running java tasks in the build process, - e.g. ---with-server-java="/opt/jrockit/bin/java -server"])]) - -if test "x$with_server_java" != x; then - SERVER_JAVA="$with_server_java" - FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" = x; then - AC_MSG_ERROR([Could not execute server java: $SERVER_JAVA]) - fi -else - SERVER_JAVA="" - # Hotspot specific options. - ADD_JVM_ARG_IF_OK([-XX:+UseParallelOldGC],SERVER_JAVA,[$JAVA]) - ADD_JVM_ARG_IF_OK([-verbosegc],SERVER_JAVA,[$JAVA]) - # JRockit specific options. - ADD_JVM_ARG_IF_OK([-Xverbose:gc],SERVER_JAVA,[$JAVA]) - SERVER_JAVA="$JAVA $SERVER_JAVA" -fi -AC_SUBST(SERVER_JAVA) - -AC_MSG_CHECKING([whether to use shared server for javac]) -AC_ARG_ENABLE([javac-server], [AS_HELP_STRING([--enable-javac-server], - [enable the shared javac server during the build process @<:@disabled@:>@])], - [ENABLE_JAVAC_SERVER="${enableval}"], [ENABLE_JAVAC_SERVER='no']) -AC_MSG_RESULT([$ENABLE_JAVAC_SERVER]) -if test "x$ENABLE_JAVAC_SERVER" = xyes; then - JAVAC_USE_REMOTE=true - JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" -else - JAVAC_USE_REMOTE=false - JAVAC_SERVERS= -fi -AC_SUBST(JAVAC_USE_REMOTE) -AC_SUBST(JAVAC_SERVERS) - -AC_ARG_WITH(javac-server-cores, [AS_HELP_STRING([--with-javac-server-cores], - [use at most this number of concurrent threads on the javac server @<:@probed@:>@])]) -if test "x$with_javac_server_cores" != x; then - JAVAC_SERVER_CORES="$with_javac_server_cores" -else - if test "$NUM_CORES" -gt 16; then - # We set this arbitrary limit because we want to limit the heap - # size of the javac server. - # In the future we will make the javac compilers in the server - # share more and more state, thus enabling us to use more and - # more concurrent threads in the server. - JAVAC_SERVER_CORES="16" - else - JAVAC_SERVER_CORES="$NUM_CORES" - fi - - if test "$MEMORY_SIZE" -gt "17000"; then - MAX_HEAP_MEM=10000 - ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn2G],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "10000"; then - MAX_HEAP_MEM=6000 - ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn1G],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "5000"; then - MAX_HEAP_MEM=3000 - ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "3800"; then - MAX_HEAP_MEM=2500 - ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "1900"; then - MAX_HEAP_MEM=1200 - ADD_JVM_ARG_IF_OK([-Xms700M -Xmx1200M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "1000"; then - MAX_HEAP_MEM=900 - ADD_JVM_ARG_IF_OK([-Xms400M -Xmx900M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) - else - MAX_HEAP_MEM=512 - ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) - fi - - MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` - if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then - AC_MSG_CHECKING([if number of server cores must be reduced]) - JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" - AC_MSG_RESULT([yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB]) - fi -fi -AC_SUBST(JAVAC_SERVER_CORES) - -AC_MSG_CHECKING([whether to track dependencies between Java packages]) -AC_ARG_ENABLE([javac-deps], [AS_HELP_STRING([--enable-javac-deps], - [enable the dependency tracking between Java packages @<:@disabled@:>@])], - [ENABLE_JAVAC_DEPS="${enableval}"], [ENABLE_JAVAC_DEPS='no']) -AC_MSG_RESULT([$ENABLE_JAVAC_DEPS]) -if test "x$ENABLE_JAVAC_DEPS" = xyes; then - JAVAC_USE_DEPS=true -else - JAVAC_USE_DEPS=false -fi -AC_SUBST(JAVAC_USE_DEPS) - -AC_MSG_CHECKING([whether to use multiple cores for javac compilation]) -AC_ARG_ENABLE([javac-multi-core], [AS_HELP_STRING([--enable-javac-multi-core], - [compile Java packages concurrently @<:@disabled@:>@])], - [ENABLE_JAVAC_MULTICORE="${enableval}"], [ENABLE_JAVAC_MULTICORE='no']) -AC_MSG_RESULT([$ENABLE_JAVAC_MULTICORE]) -if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then - JAVAC_USE_MODE=MULTI_CORE_CONCURRENT -else - JAVAC_USE_MODE=SINGLE_THREADED_BATCH - if test "x$ENABLE_JAVAC_DEPS" = xyes; then - AC_MSG_WARN([Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options.]) - AC_MSG_WARN([Disabling dependency tracking for you now.]) - JAVAC_USE_DEPS=false - fi - if test "x$ENABLE_JAVAC_SERVER" = xyes; then - AC_MSG_WARN([The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options.]) - AC_MSG_WARN([Disabling javac server for you now.]) - JAVAC_USE_REMOTE=false - fi -fi -AC_SUBST(JAVAC_USE_MODE) - -############################################################################### -# -# OS specific settings that we never will need to probe. -# -if test "x$HOST_OS" = xlinux; then - AC_MSG_CHECKING([what is not needed on Linux?]) - PULSE_NOT_NEEDED=yes - AC_MSG_RESULT([pulse]) -fi - -if test "x$HOST_OS" = xsolaris; then - AC_MSG_CHECKING([what is not needed on Solaris?]) - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - AC_MSG_RESULT([alsa pulse]) -fi - -if test "x$HOST_OS" = xwindows; then - AC_MSG_CHECKING([what is not needed on Windows?]) - CUPS_NOT_NEEDED=yes - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - X11_NOT_NEEDED=yes - AC_MSG_RESULT([alsa cups pulse x11]) -fi - -if test "x$HOST_OS" = xmacosx; then - AC_MSG_CHECKING([what is not needed on MacOSX?]) - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - X11_NOT_NEEDED=yes - FREETYPE2_NOT_NEEDED=yes - # If the java runtime framework is disabled, then we need X11. - # This will be adjusted below. - AC_MSG_RESULT([alsa pulse x11]) -fi - -if test "x$HOST_OS" = xbsd; then - AC_MSG_CHECKING([what is not needed on bsd?]) - ALSA_NOT_NEEDED=yes - AC_MSG_RESULT([alsa]) -fi - -############################################################################### -# -# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM -# that uses this API. -# -AC_ARG_ENABLE([macosx-runtime-support], [AS_HELP_STRING([--disable-macosx-runtime-support], - [disable the use of MacOSX Java runtime support framework @<:@enabled@:>@])], - [MACOSX_RUNTIME_SUPPORT="${enableval}"],[MACOSX_RUNTIME_SUPPORT="no"]) - -USE_MACOSX_RUNTIME_SUPPORT=no -AC_MSG_CHECKING([for explicit Java runtime support in the OS]) -if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then - if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then - MACOSX_RUNTIME_SUPPORT=yes - USE_MACOSX_RUNTIME_SUPPORT=yes - AC_MSG_RESULT([yes, does not need alsa freetype2 pulse and X11]) - else - AC_MSG_RESULT([yes, but explicitly disabled.]) - fi -else - AC_MSG_RESULT([no]) -fi - -if test "x$HOST_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then - AC_MSG_CHECKING([what is not needed on an X11 build on MacOSX?]) - X11_NOT_NEEDED= - FREETYPE2_NOT_NEEDED= - AC_MSG_RESULT([alsa pulse]) -fi - -############################################################################### -# -# Check for X Windows -# -AC_PATH_XTRA - -if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - AC_MSG_ERROR([Could not find X11 libraries. $HELP_MSG]) -fi - -# Some of the old makefiles require a setting of OPENWIN_HOME -# Since the X11R6 directory has disappeared on later Linuxes, -# we need to probe for it. -if test "x$HOST_OS" = xlinux; then - if test -d "$SYS_ROOT/usr/X11R6"; then - OPENWIN_HOME="$SYS_ROOT/usr/X11R6" - fi - if test -d "$SYS_ROOT/usr/include/X11"; then - OPENWIN_HOME="$SYS_ROOT/usr" - fi -fi -if test "x$HOST_OS" = xsolaris; then - OPENWIN_HOME="/usr/openwin" -fi -AC_SUBST(OPENWIN_HOME) - - -# -# Weird Sol10 something check...TODO change to try compile -# -if test "x${HOST_OS}" = xsolaris; then - if test "`uname -r`" = "5.10"; then - if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then - X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" - fi - fi -fi - -AC_LANG_PUSH(C) -OLD_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $X_CFLAGS" -AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h], - [X11_A_OK=yes], - [X11_A_OK=no]) -CFLAGS="$OLD_CFLAGS" -AC_LANG_POP(C) - -if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - AC_MSG_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG]) -fi - -AC_SUBST(X_CFLAGS) -AC_SUBST(X_LIBS) - -############################################################################### -# -# The common unix printing system cups is used to print from java. -# -AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups], - [specify prefix directory for the cups package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) -AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include], - [specify directory for the cups include files])]) -AC_ARG_WITH(cups-lib, [AS_HELP_STRING([--with-cups-lib], - [specify directory for the cups library])]) - -if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then - AC_MSG_WARN([cups not used, so --with-cups is ignored]) - fi - CUPS_CFLAGS= - CUPS_LIBS= -else - CUPS_FOUND=no - - if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then - AC_MSG_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.]) - fi - - if test "x${with_cups}" != x; then - CUPS_LIBS="-L${with_cups}/lib -lcups" - CUPS_CFLAGS="-I${with_cups}/include" - CUPS_FOUND=yes - fi - if test "x${with_cups_include}" != x; then - CUPS_CFLAGS="-I${with_cups_include}" - CUPS_FOUND=yes - fi - if test "x${with_cups_lib}" != x; then - CUPS_LIBS="-L${with_cups_lib} -lcups" - CUPS_FOUND=yes - fi - if test "x$CUPS_FOUND" = xno; then - BDEPS_CHECK_MODULE(CUPS, cups, xxx, [CUPS_FOUND=yes]) - fi - if test "x$CUPS_FOUND" = xno; then - # Are the cups headers installed in the default /usr/include location? - AC_CHECK_HEADERS([cups/cups.h cups/ppd.h], - [CUPS_FOUND=yes - CUPS_CFLAGS= - CUPS_LIBS="-lcups" - DEFAULT_CUPS=yes]) - fi - if test "x$CUPS_FOUND" = xno; then - # Getting nervous now? Lets poke around for standard Solaris third-party - # package installation locations. - AC_MSG_CHECKING([for cups headers and libs]) - if test -s /opt/sfw/cups/include/cups/cups.h; then - # An SFW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/sfw/cups/include" - CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" - elif test -s /opt/csw/include/cups/cups.h; then - # A CSW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/csw/include" - CUPS_LIBS="-L/opt/csw/lib -lcups" - fi - AC_MSG_RESULT([$CUPS_FOUND]) - fi - if test "x$CUPS_FOUND" = xno; then - help_on_build_dependency cups - AC_MSG_ERROR([Could not find cups! $HELP_MSG ]) - fi -fi - -AC_SUBST(CUPS_CFLAGS) -AC_SUBST(CUPS_LIBS) - -############################################################################### -# -# The ubiquitous freetype2 library is used to render fonts. -# -AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype], - [specify prefix directory for the freetype2 package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) - -# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree -USING_SYSTEM_FT_LIB=false - -if test "x$FREETYPE2_NOT_NEEDED" = xyes; then - if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then - AC_MSG_WARN([freetype not used, so --with-freetype is ignored]) - fi - FREETYPE2_CFLAGS= - FREETYPE2_LIBS= - FREETYPE2_LIB_PATH= -else - FREETYPE2_FOUND=no - - if test "x$with_freetype" != x; then - SPACESAFE(with_freetype,[the path to freetype]) - FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" - if test "x$HOST_OS" = xwindows; then - FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" - fi - FREETYPE2_LIB_PATH="$with_freetype/lib" - FREETYPE2_CFLAGS="-I$with_freetype/include" - if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then - FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" - fi - FREETYPE2_FOUND=yes - if test "x$FREETYPE2_FOUND" = xyes; then - # Verify that the directories exist - if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then - AC_MSG_ERROR([Could not find the expected directories $with_freetype/lib and $with_freetype/include]) - fi - # List the contents of the lib. - FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` - if test "x$FREETYPELIB" = x; then - AC_MSG_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib]) - fi - # Check one h-file - if ! test -s "$with_freetype/include/ft2build.h"; then - AC_MSG_ERROR([Could not find $with_freetype/include/ft2build.h]) - fi - fi - fi - if test "x$FREETYPE2_FOUND" = xno; then - BDEPS_CHECK_MODULE(FREETYPE2, freetype2, xxx, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - AC_MSG_CHECKING([for freetype in some standard locations]) - - if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" - DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" - fi - if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2" - DEFAULT_FREETYPE_LIBS="-lfreetype" - fi - - PREV_CXXCFLAGS="$CXXFLAGS" - PREV_LDFLAGS="$LDFLAGS" - CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS" - LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS" - AC_LINK_IFELSE([AC_LANG_SOURCE([[#include - #include FT_FREETYPE_H - int main() { return 0; } - ]])], - [ - # Yes, the default cflags and libs did the trick. - FREETYPE2_FOUND=yes - FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS" - FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS" - ], - [ - FREETYPE2_FOUND=no - ]) - CXXCFLAGS="$PREV_CXXFLAGS" - LDFLAGS="$PREV_LDFLAGS" - AC_MSG_RESULT([$FREETYPE2_FOUND]) - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - help_on_build_dependency freetype2 - AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ]) - fi -fi - -AC_SUBST(USING_SYSTEM_FT_LIB) -AC_SUBST(FREETYPE2_LIB_PATH) -AC_SUBST(FREETYPE2_CFLAGS) -AC_SUBST(FREETYPE2_LIBS) - -############################################################################### -# -# Check for alsa headers and libraries. Used on Linux/GNU systems. -# -AC_ARG_WITH(alsa, [AS_HELP_STRING([--with-alsa], - [specify prefix directory for the alsa package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) -AC_ARG_WITH(alsa-include, [AS_HELP_STRING([--with-alsa-include], - [specify directory for the alsa include files])]) -AC_ARG_WITH(alsa-lib, [AS_HELP_STRING([--with-alsa-lib], - [specify directory for the alsa library])]) - -if test "x$ALSA_NOT_NEEDED" = xyes; then - if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then - AC_MSG_WARN([alsa not used, so --with-alsa is ignored]) - fi - ALSA_CFLAGS= - ALSA_LIBS= -else - ALSA_FOUND=no - - if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then - AC_MSG_ERROR([It is not possible to disable the use of alsa. Remove the --without-alsa option.]) - fi - - if test "x${with_alsa}" != x; then - ALSA_LIBS="-L${with_alsa}/lib -lalsa" - ALSA_CFLAGS="-I${with_alsa}/include" - ALSA_FOUND=yes - fi - if test "x${with_alsa_include}" != x; then - ALSA_CFLAGS="-I${with_alsa_include}" - ALSA_FOUND=yes - fi - if test "x${with_alsa_lib}" != x; then - ALSA_LIBS="-L${with_alsa_lib} -lalsa" - ALSA_FOUND=yes - fi - if test "x$ALSA_FOUND" = xno; then - BDEPS_CHECK_MODULE(ALSA, alsa, xxx, [ALSA_FOUND=yes], [ALSA_FOUND=no]) - fi - if test "x$ALSA_FOUND" = xno; then - PKG_CHECK_MODULES(ALSA, alsa, [ALSA_FOUND=yes], [ALSA_FOUND=no]) - fi - if test "x$ALSA_FOUND" = xno; then - AC_CHECK_HEADERS([alsa/asoundlib.h], - [ALSA_FOUND=yes - ALSA_CFLAGS=-Iignoreme - ALSA_LIBS=-lasound - DEFAULT_ALSA=yes], - [ALSA_FOUND=no]) - fi - if test "x$ALSA_FOUND" = xno; then - help_on_build_dependency alsa - AC_MSG_ERROR([Could not find alsa! $HELP_MSG ]) - fi -fi - -AC_SUBST(ALSA_CFLAGS) -AC_SUBST(ALSA_LIBS) - -############################################################################### -# -# Check for pulse audio headers and libraries. -# -PULSE_FOUND=no -AC_ARG_WITH(pulse, [AS_HELP_STRING([--with-pulse], - [specify prefix directory for the pulseaudio package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) -AC_ARG_WITH(pulse-include, [AS_HELP_STRING([--with-pulse-include], - [specify directory for the pulseaudio include files])]) -AC_ARG_WITH(pulse-lib, [AS_HELP_STRING([--with-pulse-lib], - [specify directory for the pulseaudio library])]) - -if test "x${with_pulse}" != x; then - PULSE_LIBS="-L${with_pulse}/lib -lfreetype" - PULSE_CFLAGS="-I${with_pulse}/include" - PULSE_FOUND=yes -fi -if test "x${with_pulse_include}" != x; then - PULSE_CFLAGS="-I${with_pulse_include}" - PULSE_FOUND=yes -fi -if test "x${with_pulse_lib}" != x; then - PULSE_LIBS="-L${with_pulse_lib} -lpulse" - PULSE_FOUND=yes -fi -if test "x$PULSE_FOUND" = xno; then - BDEPS_CHECK_MODULE(PULSE, pulse, xxx, [PULSE_FOUND=yes], [PULSE_FOUND=no]) -fi -if test "x$PULSE_FOUND" = xno; then - PKG_CHECK_MODULES(LIBPULSE,[libpulse >= 0.9.11],[PULSE_FOUND=yes],[PULSE_FOUND=no]) -fi -if test "x$PULSE_FOUND" = xno; then - AC_CHECK_HEADERS([pulse/pulseaudio.h], - [PULSE_FOUND=yes - PULSE_CFLAGS=-Iignoreme - PULSE_LIBS= - DEFAULT_PULSE=yes], - [PULSE_FOUND=no]) -fi - -if test "x$PULSE_FOUND" = xno && test "x$PULSE_NOT_NEEDED" != xyes; then - help_on_build_dependency pulse - AC_MSG_ERROR([Could not find pulse audio libraries. $HELP_MSG ]) -fi - -AC_SUBST(PULSE_CFLAGS) -AC_SUBST(PULSE_LIBS) - -############################################################################### -# -# Check for the jpeg library -# - -USE_EXTERNAL_LIBJPEG=true -AC_CHECK_LIB(jpeg, main, [], - [ USE_EXTERNAL_LIBJPEG=false - AC_MSG_NOTICE([Will use jpeg decoder bundled with the OpenJDK source]) - ]) -AC_SUBST(USE_EXTERNAL_LIBJPEG) - -############################################################################### -# -# Check for the gif library -# - -USE_EXTERNAL_LIBJPEG=true -AC_CHECK_LIB(gif, main, [], - [ USE_EXTERNAL_LIBGIF=false - AC_MSG_NOTICE([Will use gif decoder bundled with the OpenJDK source]) - ]) -AC_SUBST(USE_EXTERNAL_LIBGIF) - -############################################################################### -# -# Check for the zlib library -# - -USE_EXTERNAL_LIBZ=true -AC_CHECK_LIB(z, main, [], - [ USE_EXTERNAL_LIBZ=false - AC_MSG_NOTICE([Will use zlib bundled with the OpenJDK source]) - ]) -AC_SUBST(USE_EXTERNAL_LIBZ) - -############################################################################### -# -# Check if altzone exists in time.h -# - -AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [return (int)altzone;])], - [has_altzone=yes], - [has_altzone=no]) -if test "x$has_altzone" = xyes; then - AC_DEFINE([HAVE_ALTZONE], 1, [Define if you have the external 'altzone' variable in time.h]) -fi - -############################################################################### -# -# Check the maths library -# - -AC_CHECK_LIB(m, cos, [], - [ - AC_MSG_NOTICE([Maths library was not found]) - ]) -AC_SUBST(LIBM) - -############################################################################### -# -# Check for libdl.so - -save_LIBS="$LIBS" -LIBS="" -AC_CHECK_LIB(dl,dlopen) -LIBDL="$LIBS" -AC_SUBST(LIBDL) -LIBS="$save_LIBS" - -############################################################################### -# -# Should we run the painfully slow javadoc tool? -# -AC_MSG_CHECKING([whether to build documentation]) -AC_ARG_ENABLE([docs], [AS_HELP_STRING([--enable-docs], - [enable generation of Javadoc documentation @<:@disabled@:>@])], - [ENABLE_DOCS="${enableval}"], [ENABLE_DOCS='no']) -AC_MSG_RESULT([$ENABLE_DOCS]) -AC_SUBST(ENABLE_DOCS) -GENERATE_DOCS=false -if test "x$ENABLE_DOCS" = xyes; then - GENERATE_DOCS=true -fi -AC_SUBST(GENERATE_DOCS) - -############################################################################### -# -# Should we compile nimbus swing L&F? We can probably remove this option -# since nimbus is officially part of javax now. -# -AC_MSG_CHECKING([whether to build nimbus L&F]) -AC_ARG_ENABLE([nimbus], [AS_HELP_STRING([--disable-nimbus], - [disable Nimbus L&F @<:@enabled@:>@])], - [ENABLE_NIMBUS="${enableval}"], [ENABLE_NIMBUS='yes']) -AC_MSG_RESULT([$ENABLE_NIMBUS]) -DISABLE_NIMBUS= -if test "x$ENABLE_NIMBUS" = xno; then - DISABLE_NIMBUS=true -fi -AC_SUBST(DISABLE_NIMBUS) - -############################################################################### -# -# Setup the opt flags for different compilers -# and different operating systems. -# -C_FLAG_DEPS="-MMD -MF" -CXX_FLAG_DEPS="-MMD -MF" - -case $COMPILER_TYPE in - CC ) - D_FLAG="-g" - case $COMPILER_NAME in - gcc ) - case $PLATFORM in - macosx ) - # On MacOSX we optimize for size, something - # we should do for all platforms? - C_O_FLAG_HI="-Os" - C_O_FLAG_NORM="-Os" - C_O_FLAG_NONE="" - ;; - *) - C_O_FLAG_HI="-O3" - C_O_FLAG_NORM="-O2" - C_O_FLAG_NONE="-O0" - ;; - esac - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; - ossc ) - # - # Forte has different names for this with their C++ compiler... - # - CXX_FLAG_DEPS="-xMMD -xMF" - -# Extra options used with HIGHEST -# -# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be -# done with care, there are some assumptions below that need to -# be understood about the use of pointers, and IEEE behavior. -# -# Use non-standard floating point mode (not IEEE 754) -CC_HIGHEST="$CC_HIGHEST -fns" -# Do some simplification of floating point arithmetic (not IEEE 754) -CC_HIGHEST="$CC_HIGHEST -fsimple" -# Use single precision floating point with 'float' -CC_HIGHEST="$CC_HIGHEST -fsingle" -# Assume memory references via basic pointer types do not alias -# (Source with excessing pointer casting and data access with mixed -# pointer types are not recommended) -CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" -# Use intrinsic or inline versions for math/std functions -# (If you expect perfect errno behavior, do not use this) -CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" -# Loop data dependency optimizations (need -xO3 or higher) -CC_HIGHEST="$CC_HIGHEST -xdepend" -# Pointer parameters to functions do not overlap -# (Similar to -xalias_level=basic usage, but less obvious sometimes. -# If you pass in multiple pointers to the same data, do not use this) -CC_HIGHEST="$CC_HIGHEST -xrestrict" -# Inline some library routines -# (If you expect perfect errno behavior, do not use this) -CC_HIGHEST="$CC_HIGHEST -xlibmil" -# Use optimized math routines -# (If you expect perfect errno behavior, do not use this) -# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now -#CC_HIGHEST="$CC_HIGHEST -xlibmopt" - - case $LEGACY_HOST_CPU1 in - i586) - C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" - C_O_FLAG_HI="-xO4 -Wu,-O4~yz" - C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" - C_O_FLAG_NONE="" - CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" - CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" - CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" - CXX_O_FLAG_NONE="" - ;; - sparc) - C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" - C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NONE="" - CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" - CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NONE="" - ;; - esac - esac - ;; - CL ) - D_FLAG= - C_O_FLAG_HI="-O2" - C_O_FLAG_NORM="-O1" - C_O_FLAG_NONE="-Od" - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; -esac - -if test -z "$C_O_FLAG_HIGHEST"; then - C_O_FLAG_HIGHEST="$C_O_FLAG_HI" -fi - -if test -z "$CXX_O_FLAG_HIGHEST"; then - CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" -fi - -AC_SUBST(C_O_FLAG_HIGHEST) -AC_SUBST(C_O_FLAG_HI) -AC_SUBST(C_O_FLAG_NORM) -AC_SUBST(C_O_FLAG_NONE) -AC_SUBST(CXX_O_FLAG_HIGHEST) -AC_SUBST(CXX_O_FLAG_HI) -AC_SUBST(CXX_O_FLAG_NORM) -AC_SUBST(CXX_O_FLAG_NONE) -AC_SUBST(C_FLAG_DEPS) -AC_SUBST(CXX_FLAG_DEPS) - -############################################################################### -# -# Setup legacy vars/targets and new vars to deal with different debug levels. -# -case $DEBUG_LEVEL in - release ) - HOTSPOT_DEBUG_LEVEL="product" - HOTSPOT_EXPORT="product" - ;; - fastdebug ) - HOTSPOT_DEBUG_LEVEL="fastdebug" - HOTSPOT_EXPORT="fastdebug" - CFLAGS="$CFLAGS $D_FLAG" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; - slowdebug ) - HOTSPOT_DEBUG_LEVEL="jvmg" - HOTSPOT_EXPORT="debug" - CFLAGS="$CFLAGS $D_FLAG" - C_O_FLAG_HI="$C_O_FLAG_NONE" - C_O_FLAG_NORM="$C_O_FLAG_NONE" - CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" - CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; -esac - -############################################################################### -# -# Generate the legacy makefile targets for hotspot. -# The hotspot api for selecting the build artifacts, really, needs to be improved. -# -HOTSPOT_TARGET="" - -if test "x$JVM_VARIANT_SERVER" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " -fi - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " -fi - -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " -fi - -if test "x$JVM_VARIANT_ZERO" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " -fi - -if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " -fi - -HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" - -############################################################################### -# -# Setup all directories for the subrepoes and the arguments to the sub makes. -# -LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" -LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" -LANGTOOLS_MAKE_ARGS="" -AC_SUBST(LANGTOOLS_OUTPUTDIR) -AC_SUBST(LANGTOOLS_DIST) -AC_SUBST(LANGTOOLS_MAKE_ARGS) - -CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" -CORBA_DIST="$OUTPUT_ROOT/corba/dist" -CORBA_MAKE_ARGS="" -AC_SUBST(CORBA_OUTPUTDIR) -AC_SUBST(CORBA_DIST) -AC_SUBST(CORBA_MAKE_ARGS) - -JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" -JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" -JAXP_MAKE_ARGS="" -AC_SUBST(JAXP_OUTPUTDIR) -AC_SUBST(JAXP_DIST) -AC_SUBST(JAXP_MAKE_ARGS) - -JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" -JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" -JAXWS_MAKE_ARGS="" -AC_SUBST(JAXWS_OUTPUTDIR) -AC_SUBST(JAXWS_DIST) -AC_SUBST(JAXWS_MAKE_ARGS) - -HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" -HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" -HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" -AC_SUBST(HOTSPOT_OUTPUTDIR) -AC_SUBST(HOTSPOT_DIST) -AC_SUBST(HOTSPOT_MAKE_ARGS) - -JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" -JDK_MAKE_ARGS="ALT_OUTPUTDIR=\"$OUTPUT_ROOT/jdk\"" -AC_SUBST(JDK_OUTPUTDIR) -AC_SUBST(JDK_MAKE_ARGS) - -IMAGES_OUTPUTDIR=$OUTPUT_ROOT/images -IMAGES_MAKE_ARGS="ALT_OUTPUTDIR=$OUTPUT_ROOT/jdk \ - SHARE_SRC=$JDK_TOPDIR/src/share \ - PLATFORM_SRC=$JDK_TOPDIR/src/$LEGACY_HOST_OS_API \ - TEMPDIR=$IMAGES_OUTPUTDIR/tmp \ - ABS_TEMPDIR=$IMAGES_OUTPUTDIR/tmp " -AC_SUBST(IMAGES_OUTPUTDIR) -AC_SUBST(IMAGES_MAKE_ARGS) - -############################################################################### -# -# Now setup the CFLAGS and LDFLAGS for the JDK build. -# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. -# -case $COMPILER_NAME in - gcc ) - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ - -pipe -fno-omit-frame-pointer \ - -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" - CFLAGS_JDK="$CFLAGS_JDK -fno-strict-aliasing" - ;; - ossc ) - CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" - CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" - ;; - cl ) - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ - -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ - -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ - -DWIN32 -DIAL" - case $LEGACY_HOST_CPU1 in - i?86 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" - ;; - amd64 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" - ;; - esac - ;; -esac - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" - -# The package path is used only on macosx? -PACKAGE_PATH=/opt/local -AC_SUBST(PACKAGE_PATH) - -# Sometimes we use a cpu dir (.../lib/amd64/server) -# Sometimes not (.../lib/server) -LIBARCHDIR="$LEGACY_HOST_CPU2/" -if test "x$ENDIAN" = xlittle; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" -fi -if test "x$HOST_OS" = xlinux; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" -fi -if test "x$HOST_OS" = xwindows; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" -fi -if test "x$HOST_OS" = xsolaris; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" -fi -if test "x$HOST_OS" = xmacosx; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" - LIBARCHDIR="" -fi -if test "x$HOST_OS" = xbsd; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" -fi -if test "x$DEBUG_LEVEL" = xrelease; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" -fi - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_HOST_CPU1\"' -D$LEGACY_HOST_CPU1" -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ - -I${JDK_OUTPUTDIR}/include \ - -I${JDK_OUTPUTDIR}/include/$PLATFORM \ - -I${JDK_TOPDIR}/src/share/javavm/export \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/javavm/export \ - -I${JDK_TOPDIR}/src/share/native/common \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/native/common" - -# The shared libraries are compiled using the picflag. -CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" -CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG" - -# Executable flags -CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" -CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" - -# Now this is odd. The JDK native libraries have to link against libjvm.so -# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. -# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library -# is identical for client and server? Yes. Which is picked at runtime (client or server)? -# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following -# libraries will link to whatever is in memory. Yuck. -# -# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. -if test "x$COMPILER_TYPE" = xCL; then - LDFLAGS_JDKLIB="$LDFLAGS -dll -libpath:${JDK_OUTPUTDIR}/lib -libpath:${JDK_OUTPUTDIR}/objs" - LDFLAGS_JDKLIB_SUFFIX="" - if test "$HOST_CPU_BITS" == "64"; then - LDFLAGS_STACK_SIZE=1048576 - else - LDFLAGS_STACK_SIZE=327680 - fi - LDFLAGS_JDKEXE="$LDFLAGS /STACK:$LDFLAGS_STACK_SIZE" -else - # If this is a --hash-style=gnu system, use --hash-style=both, why? - HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` - if test -n "$HAS_GNU_HASH"; then - # And since we now know that the linker is gnu, then add -z defs, to forbid - # undefined symbols in object files. - LDFLAGS="$LDFLAGS -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" == "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS="$LDFLAGS -Xlinker -O1" - fi - fi - - LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS \ - -L${JDK_OUTPUTDIR}/objs \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" - LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" - if test "x$COMPILER_NAME" = xossc; then - LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" - fi - - # Only the jli library is explicitly linked when the launchers are built. - # The libjvm is then dynamically loaded/linked by the launcher. - if test "x$HOST_OS" != "xmacosx"; then - LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" - LDFLAGS_JDKEXE_SUFFIX="-ljli" - fi -fi - - -AC_SUBST(CFLAGS_JDKLIB) -AC_SUBST(CFLAGS_JDKEXE) - -AC_SUBST(CXXFLAGS_JDKLIB) -AC_SUBST(CXXFLAGS_JDKEXE) - -AC_SUBST(LDFLAGS_JDKLIB) -AC_SUBST(LDFLAGS_JDKEXE) -AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) -AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) - - -############################################################################### -# -# statically link libstdc++ before C++ ABI is stablized on Linux unless -# dynamic build is configured on command line. -# -AC_ARG_ENABLE([static-link-stdc++], [AS_HELP_STRING([--disable-static-link-stdc++], - [disable static linking of the C++ runtime on Linux @<:@enabled@:>@])],, - [ - enable_static_link_stdc__=yes - ]) - -if test "x$HOST_OS" = xlinux; then - # Test if -lstdc++ works. - AC_MSG_CHECKING([if dynamic link of stdc++ is possible]) - AC_LANG_PUSH(C++) - OLD_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -lstdc++" - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], - [has_dynamic_libstdcxx=yes], - [has_dynamic_libstdcxx=no]) - CXXFLAGS="$OLD_CXXFLAGS" - AC_LANG_POP(C++) - AC_MSG_RESULT([$has_dynamic_libstdcxx]) - - # Test if stdc++ can be linked statically. - AC_MSG_CHECKING([if static link of stdc++ is possible]) - STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" - AC_LANG_PUSH(C++) - OLD_LIBS="$LIBS" - OLD_CXX="$CXX" - LIBS="$STATIC_STDCXX_FLAGS" - CXX="$CC" - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], - [has_static_libstdcxx=yes], - [has_static_libstdcxx=no]) - LIBS="$OLD_LIBS" - CXX="$OLD_CXX" - AC_LANG_POP(C++) - AC_MSG_RESULT([$has_static_libstdcxx]) - - if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then - AC_MSG_ERROR([I cannot link to stdc++! Neither dynamically nor statically.]) - fi - - if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then - AC_MSG_NOTICE([Static linking of libstdc++ was not possible reverting to dynamic linking.]) - enable_static_link_stdc__=no - fi - - if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then - AC_MSG_NOTICE([Dynamic linking of libstdc++ was not possible reverting to static linking.]) - enable_static_link_stdc__=yes - fi - - AC_MSG_CHECKING([how to link with libstdc++]) - if test "x$enable_static_link_stdc__" = xyes; then - LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" - LDCXX="$CC" - AC_MSG_RESULT([static]) - else - LIBCXX="$LIBCXX -lstdc++" - LDCXX="$CXX" - AC_MSG_RESULT([dynamic]) - fi -fi - -############################################################################### -# -# Could someone enlighten this configure script with a comment about libCrun? -# The LEGACY_HOST_CPU3 is the setting for ISA_DIR. -# -if test "x$HOST_OS" = xsolaris && test "x$LIBCXX" = x; then - LIBCXX="/usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1" -fi - -# TODO better (platform agnostic) test -if test "x$HOST_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then - LIBCXX="-lstdc++" -fi - -AC_SUBST(LIBCXX) - ############################################################################### -OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" -OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" -OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" -OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" -AC_SUBST(OS_VERSION_MAJOR) -AC_SUBST(OS_VERSION_MINOR) -AC_SUBST(OS_VERSION_MICRO) +# Check for some common pitfalls +BASIC_TEST_USABILITY_ISSUES -############################################################################### -# -# Misc -# +# At the end, call the closed hook. (Dummy macro if no closed sources available) +CLOSED_HOOK -# The name of the Service Agent jar. -SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" -if test "x$HOST_OS" = "xwindows"; then - SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" -fi -AC_SUBST(SALIB_NAME) - -# Control wether Hotspot runs Queens test after build. -AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build], - [enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],, - [enable_hotspot_test_in_build=no]) -if test "x$enable_hotspot_test_in_build" = "xyes"; then - TEST_IN_BUILD=true -else - TEST_IN_BUILD=false -fi -AC_SUBST(TEST_IN_BUILD) - -############################################################################### -# -# Choose cacerts source file -# -AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file], - [specify alternative cacerts file])]) -if test "x$with_cacerts_file" != x; then - CACERTS_FILE=$with_cacerts_file -else - if test "x$OPENJDK" = "xtrue"; then - CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts - else - CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal - fi -fi -AC_SUBST(CACERTS_FILE) - -# Check if build directory is on local disk. -# return 0 if it is on local disk, non-0 if on remote disk or failure -function is_directory_on_local_disk { - # df -l lists only local disks; if the given directory is not found then - # a non-zero exit code is given - $DF -l $1 > /dev/null 2>&1 -} - -AC_MSG_CHECKING([if build directory is on local disk]) -if is_directory_on_local_disk $OUTPUT_ROOT; then - OUTPUT_DIR_IS_LOCAL="yes" -else - OUTPUT_DIR_IS_LOCAL="no" -fi -AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL) - -# We're messing a bit with internal autoconf variables to put the config.status in the -# output directory instead of the current directory. -CONFIG_STATUS=$OUTPUT_ROOT/config.status - -# Now create the actual output files, after this, the main work of configure is done +# We're messing a bit with internal autoconf variables to put the config.status +# in the output directory instead of the current directory. +CONFIG_STATUS="$OUTPUT_ROOT/config.status" +# Create the actual output files. Now the main work of configure is done. AC_OUTPUT # Finally output some useful information to the user - -if test "x$CCACHE_FOUND" != x; then - if test "x$HAS_GOOD_CCACHE" = x; then - CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" - CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." - else - CCACHE_STATUS="installed and in use" - fi -else - if test "x$GCC" = xyes; then - CCACHE_STATUS="not installed (consider installing)" - CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." - else - CCACHE_STATUS="not available for your system" - fi -fi - -printf "\n" -printf "====================================================\n" -printf "A new configuration has been successfully created in\n" -printf "$OUTPUT_ROOT\n" -if test "x$CONFIGURE_COMMAND_LINE" != x; then - printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" -else - printf "using default settings.\n" -fi - -printf "\n" -printf "Configuration summary:\n" -printf "* Debug level: $DEBUG_LEVEL\n" -printf "* JDK variant: $JDK_VARIANT\n" -printf "* JVM variants: $with_jvm_variants\n" -printf "* Host info: OS: $HOST_OS, CPU architecture: $HOST_CPU_ARCH, address length: $HOST_CPU_BITS\n" -printf "* Boot JDK: $BOOT_JDK\n" - -printf "\n" -printf "Build performance summary:\n" -printf "* Cores to use: $NUM_CORES\n" -printf "* Memory limit: $MEMORY_SIZE MB\n" -printf "* ccache status: $CCACHE_STATUS\n" - -if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then - printf "\n" - printf "WARNING: Your build output directory is not on a local disk.\n" - printf "This will severely degrade build performance!\n" - printf "It is recommended that you create an output directory on a local disk,\n" - printf "and run the configure script again from that directory.\n" -fi - -if test "x$CCACHE_HELP_MSG" != x; then - printf "\n" - printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" - printf "$CCACHE_HELP_MSG\n" - - help_on_build_dependency ccache - printf "$HELP_MSG\n" -fi +HELP_PRINT_SUMMARY_AND_WARNINGS diff --git a/common/autoconf/cores.m4 b/common/autoconf/cores.m4 deleted file mode 100644 index f48887d36be..00000000000 --- a/common/autoconf/cores.m4 +++ /dev/null @@ -1,103 +0,0 @@ -# -# Copyright (c) 2011, 2012, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -AC_DEFUN([CHECK_CORES], -[ - AC_MSG_CHECKING([for number of cores]) - NUM_CORES=1 - FOUND_CORES=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - NUM_CORES=`cat /proc/cpuinfo | grep -c processor` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/psrinfo; then - # Looks like a Solaris system - NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` - FOUND_CORES=yes - fi - - if test "x$build_os" = xwindows; then - NUM_CORES=4 - fi - - # For c/c++ code we run twice as many concurrent build - # jobs than we have cores, otherwise we will stall on io. - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` - - if test "x$FOUND_CORES" = xyes; then - AC_MSG_RESULT([$NUM_CORES]) - else - AC_MSG_RESULT([could not detect number of cores, defaulting to 1!]) - fi - -]) - -AC_DEFUN([CHECK_MEMORY_SIZE], -[ - AC_MSG_CHECKING([for memory size]) - # Default to 1024MB - MEMORY_SIZE=1024 - FOUND_MEM=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/prtconf; then - # Looks like a Solaris system - MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` - FOUND_MEM=yes - fi - - if test "x$build_os" = xwindows; then - MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'` - FOUND_MEM=yes - fi - - if test "x$FOUND_MEM" = xyes; then - AC_MSG_RESULT([$MEMORY_SIZE MB]) - else - AC_MSG_RESULT([could not detect memory size defaulting to 1024MB!]) - fi -]) diff --git a/common/autoconf/help.m4 b/common/autoconf/help.m4 index 6f74b5e65e9..01b48172dae 100644 --- a/common/autoconf/help.m4 +++ b/common/autoconf/help.m4 @@ -23,11 +23,13 @@ # questions. # -function prepare_help_system { +AC_DEFUN_ONCE([HELP_SETUP_DEPENDENCY_HELP], +[ AC_CHECK_PROGS(PKGHANDLER, apt-get yum port pkgutil pkgadd) -} - -function help_on_build_dependency { +]) + +AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY], +[ # Print a helpful message on how to acquire the necessary build dependency. # $1 is the help tag: freetyp2, cups, pulse, alsa etc MISSING_DEPENDENCY=$1 @@ -51,9 +53,9 @@ function help_on_build_dependency { if test "x$PKGHANDLER_COMMAND" != x; then HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." fi -} +]) -function apt_help { +apt_help() { case $1 in devkit) PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; @@ -76,7 +78,7 @@ function apt_help { esac } -function yum_help { +yum_help() { case $1 in devkit) PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;; @@ -99,14 +101,97 @@ function yum_help { esac } -function port_help { +port_help() { PKGHANDLER_COMMAND="" } -function pkgutil_help { +pkgutil_help() { PKGHANDLER_COMMAND="" } -function pkgadd_help { +pkgadd_help() { PKGHANDLER_COMMAND="" } + +AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS], +[ +# Finally output some useful information to the user + +if test "x$CCACHE_FOUND" != x; then + if test "x$HAS_GOOD_CCACHE" = x; then + CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" + CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." + else + CCACHE_STATUS="installed and in use" + fi +else + if test "x$GCC" = xyes; then + CCACHE_STATUS="not installed (consider installing)" + CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." + else + CCACHE_STATUS="not available for your system" + fi +fi + +printf "\n" +printf "====================================================\n" +printf "A new configuration has been successfully created in\n" +printf "$OUTPUT_ROOT\n" +if test "x$CONFIGURE_COMMAND_LINE" != x; then + printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" +else + printf "using default settings.\n" +fi + +printf "\n" +printf "Configuration summary:\n" +printf "* Debug level: $DEBUG_LEVEL\n" +printf "* JDK variant: $JDK_VARIANT\n" +printf "* JVM variants: $with_jvm_variants\n" +printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n" +printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Build performance summary:\n" +printf "* Cores to use: $NUM_CORES\n" +printf "* Memory limit: $MEMORY_SIZE MB\n" +printf "* ccache status: $CCACHE_STATUS\n" +printf "\n" + +if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then + printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" + printf "$CCACHE_HELP_MSG\n" + HELP_MSG_MISSING_DEPENDENCY([ccache]) + printf "$HELP_MSG\n" + printf "\n" +fi + +if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then + printf "NOTE: You have requested to build more than one version of the JVM, which\n" + printf "will result in longer build times.\n" + printf "\n" +fi + +if test "x$FOUND_ALT_VARIABLES" != "x"; then + printf "WARNING: You have old-style ALT_ environment variables set.\n" + printf "These are not respected, and will be ignored. It is recommended\n" + printf "that you clean your environment. The following variables are set:\n" + printf "$FOUND_ALT_VARIABLES\n" + printf "\n" +fi + +if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then + printf "WARNING: Your build output directory is not on a local disk.\n" + printf "This will severely degrade build performance!\n" + printf "It is recommended that you create an output directory on a local disk,\n" + printf "and run the configure script again from that directory.\n" + printf "\n" +fi + +if test "x$IS_RECONFIGURE" = "xyes"; then + printf "WARNING: The result of this configuration has overridden an older\n" + printf "configuration. You *should* run 'make clean' to make sure you get a\n" + printf "proper build. Failure to do so might result in strange build problems.\n" + printf "\n" +fi +]) diff --git a/common/autoconf/platform.m4 b/common/autoconf/platform.m4 index adfae47e3b8..5135c7c6a61 100644 --- a/common/autoconf/platform.m4 +++ b/common/autoconf/platform.m4 @@ -23,272 +23,59 @@ # questions. # -AC_DEFUN([CHECK_FIND_DELETE], -[ - # Test if find supports -delete - AC_MSG_CHECKING([if find supports -delete]) - FIND_DELETE="-delete" - - DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) - - echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete - - TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` - if test -f $DELETEDIR/TestIfFindSupportsDelete; then - # No, it does not. - rm $DELETEDIR/TestIfFindSupportsDelete - FIND_DELETE="-exec rm \{\} \+" - AC_MSG_RESULT([no]) - else - AC_MSG_RESULT([yes]) - fi - rmdir $DELETEDIR -]) - -AC_DEFUN([CHECK_NONEMPTY], -[ - # Test that variable $1 is not empty. - if test "" = "[$]$1"; then AC_MSG_ERROR(Could not find translit($1,A-Z,a-z) !); fi -]) - -AC_DEFUN([ADD_JVM_ARG_IF_OK], -[ - # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3) - # If so, then append $1 to $2 - FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - $2="[$]$2 $1" - fi -]) - -AC_DEFUN([WHICHCMD], -[ - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="[$]$1" - car="${tmp%% *}" - tmp="[$]$1 EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - WHICHCMD_SPACESAFE(car) - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - $1="$car ${cdr% *}" - else - $1="$car" - fi -]) - -AC_DEFUN([SPACESAFE], -[ - # Fail with message $2 if var $1 contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "[$]$1" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - $1=`$CYGPATH -s -m -a "[$]$1"` - $1=`$CYGPATH -u "[$]$1"` - else - AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"]) - fi - fi -]) - -AC_DEFUN([WHICHCMD_SPACESAFE], -[ - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="[$]$1" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "[$]$1"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - $1="$tmp" -]) - -AC_DEFUN([REMOVE_SYMBOLIC_LINKS], -[ - if test "x$BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - AC_PATH_PROG(READLINK, readlink) - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - $1=`$READLINK -f [$]$1` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname [$]$1` - FIL=`basename [$]$1` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - $1=$DIR/$FIL - fi - fi -]) - -AC_DEFUN([TESTFOR_PROG_CCACHE], -[ - AC_ARG_ENABLE([ccache], - [AS_HELP_STRING([--disable-ccache], - [use ccache to speed up recompilations @<:@enabled@:>@])], - [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) - if test "x$ENABLE_CCACHE" = xyes; then - AC_PATH_PROG(CCACHE, ccache) - else - AC_MSG_CHECKING([for ccache]) - AC_MSG_RESULT([explicitly disabled]) - CCACHE= - fi - AC_SUBST(CCACHE) - - AC_ARG_WITH([ccache-dir], - [AS_HELP_STRING([--with-ccache-dir], - [where to store ccache files @<:@~/.ccache@:>@])]) - - if test "x$with_ccache_dir" != x; then - # When using a non home ccache directory, assume the use is to share ccache files - # with other users. Thus change the umask. - SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" - fi - CCACHE_FOUND="" - if test "x$CCACHE" != x; then - SETUP_CCACHE_USAGE - fi -]) - -AC_DEFUN([SETUP_CCACHE_USAGE], -[ - if test "x$CCACHE" != x; then - CCACHE_FOUND="true" - # Only use ccache if it is 3.1.4 or later, which supports - # precompiled headers. - AC_MSG_CHECKING([if ccache supports precompiled headers]) - HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null` - if test "x$HAS_GOOD_CCACHE" = x; then - AC_MSG_RESULT([no, disabling ccache]) - CCACHE= - else - AC_MSG_RESULT([yes]) - AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) - PUSHED_FLAGS="$CXXFLAGS" - CXXFLAGS="-fpch-preprocess $CXXFLAGS" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no]) - CXXFLAGS="$PUSHED_FLAGS" - if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no, disabling ccaching of precompiled headers]) - CCACHE= - fi - fi - fi - - if test "x$CCACHE" != x; then - CCACHE_SLOPPINESS=time_macros - CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" - CCACHE_FLAGS=-fpch-preprocess - - if test "x$SET_CCACHE_DIR" != x; then - mkdir -p $CCACHE_DIR > /dev/null 2>&1 - chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 - fi - fi -]) - -AC_DEFUN([EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS], +AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS], [ # Expects $host_os $host_cpu $build_os and $build_cpu - # and $with_data_model to have been setup! + # and $with_target_bits to have been setup! # # Translate the standard triplet(quadruplet) definition - # of the host/build system into - # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows - # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince - # HOST_OS_API=posix,winapi + # of the target/build system into + # OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows + # OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince + # OPENJDK_TARGET_OS_API=posix,winapi # - # HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 - # HOST_CPU_ARCH=x86,sparc,pcc,arm - # HOST_CPU_BITS=32,64 - # HOST_CPU_ENDIAN=big,little + # OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 + # OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm + # OPENJDK_TARGET_CPU_BITS=32,64 + # OPENJDK_TARGET_CPU_ENDIAN=big,little # # The same values are setup for BUILD_... # # And the legacy variables, for controlling the old makefiles. - # LEGACY_HOST_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris) - # LEGACY_HOST_OS_API=solaris,windows + # LEGACY_OPENJDK_TARGET_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU3=sparcv9,amd64 (but only on solaris) + # LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # # We also copy the autoconf trip/quadruplet - # verbatim to HOST and BUILD - AC_SUBST(HOST, ${host}) - AC_SUBST(BUILD, ${build}) + # verbatim to OPENJDK_TARGET_SYSTEM (from the autoconf "host") and OPENJDK_BUILD_SYSTEM + OPENJDK_TARGET_SYSTEM="$host" + OPENJDK_BUILD_SYSTEM="$build" + AC_SUBST(OPENJDK_TARGET_SYSTEM) + AC_SUBST(OPENJDK_BUILD_SYSTEM) - EXTRACT_VARS_FROM_OS_TO(HOST,$host_os) - EXTRACT_VARS_FROM_CPU_TO(HOST,$host_cpu) + PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_TARGET,$host_os) + PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_TARGET,$host_cpu) - EXTRACT_VARS_FROM_OS_TO(BUILD,$build_os) - EXTRACT_VARS_FROM_CPU_TO(BUILD,$build_cpu) + PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_BUILD,$build_os) + PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_BUILD,$build_cpu) - if test "x$HOST_OS" != xsolaris; then - LEGACY_HOST_CPU3="" - LEGACY_BUILD_CPU3="" + if test "x$OPENJDK_TARGET_OS" != xsolaris; then + LEGACY_OPENJDK_TARGET_CPU3="" + LEGACY_OPENJDK_BUILD_CPU3="" fi - # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_HOST_CPU1) ... - if test "x$HOST_OS" = xmacosx && test "x$HOST_CPU" = xx64; then - LEGACY_HOST_CPU1="x86_64" + # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_OPENJDK_TARGET_CPU1) ... + if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$OPENJDK_TARGET_CPU" = xx64; then + LEGACY_OPENJDK_TARGET_CPU1="x86_64" fi - SET_RELEASE_FILE_OS_VALUES() + PLATFORM_SET_RELEASE_FILE_OS_VALUES ]) -AC_DEFUN([EXTRACT_VARS_FROM_OS_TO], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS_TO], [ - EXTRACT_VARS_FROM_OS($2) + PLATFORM_EXTRACT_VARS_FROM_OS($2) $1_OS="$VAR_OS" $1_OS_FAMILY="$VAR_OS_FAMILY" $1_OS_API="$VAR_OS_API" @@ -306,9 +93,9 @@ AC_DEFUN([EXTRACT_VARS_FROM_OS_TO], AC_SUBST(LEGACY_$1_OS_API) ]) -AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU_TO], [ - EXTRACT_VARS_FROM_CPU($2) + PLATFORM_EXTRACT_VARS_FROM_CPU($2) $1_CPU="$VAR_CPU" $1_CPU_ARCH="$VAR_CPU_ARCH" $1_CPU_BITS="$VAR_CPU_BITS" @@ -339,12 +126,12 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO], LEGACY_$1_CPU3=amd64 fi if test "x$$1_CPU" = xsparcv9; then - LEGACY_$1_CPU3=sparvc9 + LEGACY_$1_CPU3=sparcv9 fi AC_SUBST(LEGACY_$1_CPU3) ]) -AC_DEFUN([EXTRACT_VARS_FROM_CPU], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU], [ # First argument is the cpu name from the trip/quad case "$1" in @@ -372,8 +159,8 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], arm*) VAR_CPU=arm VAR_CPU_ARCH=arm - VAR_CPU_BITS=3264 - VAR_CPU_ENDIAN=big + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little VAR_LEGACY_CPU=arm ;; mips) @@ -401,7 +188,7 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], VAR_CPU=ppc64 VAR_CPU_ARCH=ppc VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=32 + VAR_CPU_ENDIAN=big VAR_LEGACY_CPU=ppc64 ;; sparc) @@ -416,7 +203,7 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], VAR_CPU_ARCH=sparc VAR_CPU_BITS=64 VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc_sparcv9 + VAR_LEGACY_CPU=sparcv9 ;; s390) VAR_CPU=s390 @@ -452,21 +239,37 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], fi fi + # on solaris x86...default seems to be 32-bit + if test "x$VAR_OS" = "xsolaris" && \ + test "x$with_target_bits" = "x" && \ + test "x$VAR_CPU_ARCH" = "xx86" + then + with_target_bits=32 + fi + if test "x$VAR_CPU_ARCH" = "xx86"; then - if test "x$with_data_model" = "x64"; then + if test "x$with_target_bits" = "x64"; then VAR_CPU=x64 VAR_CPU_BITS=64 VAR_LEGACY_CPU=amd64 fi - if test "x$with_data_model" = "x32"; then + if test "x$with_target_bits" = "x32"; then VAR_CPU=ia32 VAR_CPU_BITS=32 VAR_LEGACY_CPU=i586 fi fi + + if test "x$VAR_CPU_ARCH" = "xsparc"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=sparcv9 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=sparcv9 + fi + fi ]) -AC_DEFUN([EXTRACT_VARS_FROM_OS], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS], [ case "$1" in *linux*) @@ -495,49 +298,26 @@ AC_DEFUN([EXTRACT_VARS_FROM_OS], VAR_OS_FAMILY=windows ;; *) - AC_MSG_ERROR([unsupported host operating system $1]) + AC_MSG_ERROR([unsupported operating system $1]) ;; esac ]) -AC_DEFUN([CHECK_COMPILER_VERSION], +AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES], [ - # Test the compilers that their versions are new enough. -# AC_MSG_CHECKING([version of GCC]) - gcc_ver=`${CC} -dumpversion` - gcc_major_ver=`echo ${gcc_ver}|cut -d'.' -f1` - gcc_minor_ver=`echo ${gcc_ver}|cut -d'.' -f2` -# AM_CONDITIONAL(GCC_OLD, test ! ${gcc_major_ver} -ge 4 -a ${gcc_minor_ver} -ge 3) -# AC_MSG_RESULT([${gcc_ver} (major version ${gcc_major_ver}, minor version ${gcc_minor_ver})]) -]) - -# Fixes paths on windows hosts to be mixed mode short. -AC_DEFUN([WIN_FIX_PATH], -[ - if test "x$BUILD_OS" = "xwindows"; then - AC_PATH_PROG(CYGPATH, cygpath) - tmp="[$]$1" - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - $1="$tmp" - fi -]) - -AC_DEFUN([SET_RELEASE_FILE_OS_VALUES], -[ - if test "x$HOST_OS" = "xsolaris"; then + if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then REQUIRED_OS_NAME=SunOS REQUIRED_OS_VERSION=5.10 fi - if test "x$HOST_OS" = "xlinux"; then + if test "x$OPENJDK_TARGET_OS" = "xlinux"; then REQUIRED_OS_NAME=Linux REQUIRED_OS_VERSION=2.6 fi - if test "x$HOST_OS" = "xwindows"; then + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then REQUIRED_OS_NAME=Windows REQUIRED_OS_VERSION=5.1 fi - if test "x$HOST_OS" = "xmacosx"; then + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then REQUIRED_OS_NAME=Darwin REQUIRED_OS_VERSION=11.2 fi @@ -545,3 +325,174 @@ AC_DEFUN([SET_RELEASE_FILE_OS_VALUES], AC_SUBST(REQUIRED_OS_NAME) AC_SUBST(REQUIRED_OS_VERSION) ]) + +#%%% Build and target systems %%% +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET], +[ +# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" +# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the +# product you're building. The target of this build is called "host". Since this is confusing to most people, we +# have not adopted that system, but use "target" as the platform we are building for. In some places though we need +# to use the configure naming style. +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_CANONICAL_TARGET + +AC_ARG_WITH(target-bits, [AS_HELP_STRING([--with-target-bits], + [build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-target-bits=32 @<:@guessed@:>@])]) + +if test "x$with_target_bits" != x && \ + test "x$with_target_bits" != x32 && \ + test "x$with_target_bits" != x64 ; then + AC_MSG_ERROR([--with-target-bits can only be 32 or 64, you specified $with_target_bits!]) +fi +# Translate the standard cpu-vendor-kernel-os quadruplets into +# the new TARGET_.... and BUILD_... and the legacy names used by +# the openjdk build. +# It uses $host_os $host_cpu $build_os $build_cpu and $with_target_bits +PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS + +# The LEGACY_OPENJDK_TARGET_CPU3 is the setting for ISA_DIR. +if test "x$LEGACY_OPENJDK_TARGET_CPU3" != x; then + LEGACY_OPENJDK_TARGET_CPU3="/${LEGACY_OPENJDK_TARGET_CPU3}" +fi + +# Now the following vars are defined. +# OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows +# OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince +# OPENJDK_TARGET_OS_API=posix,winapi +# +# OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 +# OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm +# OPENJDK_TARGET_CPU_BITS=32,64 +# OPENJDK_TARGET_CPU_ENDIAN=big,little +# +# There is also a: +# LEGACY_OPENJDK_TARGET_CPU1=i586,amd64,.... # used to set the old var ARCH +# LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,.... # used to set the old var LIBARCH +# LEGACY_OPENJDK_TARGET_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris +# There was also a BUILDARCH that had i486,amd64,... but we do not use that +# in the new build. +# LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # used to select source roots +]) + +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION], +[ +############################################################################### + +# Note that this is the build platform OS version! + +OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" +OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" +OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" +OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" +AC_SUBST(OS_VERSION_MAJOR) +AC_SUBST(OS_VERSION_MINOR) +AC_SUBST(OS_VERSION_MICRO) +]) + +AC_DEFUN_ONCE([PLATFORM_TEST_OPENJDK_TARGET_BITS], +[ +############################################################################### +# +# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. +# (The JVM can use 32 or 64 bit Java pointers but that decision +# is made at runtime.) +# +AC_LANG_PUSH(C++) +OLD_CXXFLAGS="$CXXFLAGS" +if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + CXXFLAGS="-m${with_target_bits} $CXXFLAGS" +fi +AC_CHECK_SIZEOF([int *], [1111]) +CXXFLAGS="$OLD_CXXFLAGS" +AC_LANG_POP(C++) + +# keep track of c/cxx flags that we added outselves... +# to prevent emitting warning... +ADDED_CFLAGS= +ADDED_CXXFLAGS= +ADDED_LDFLAGS= + +if test "x$ac_cv_sizeof_int_p" = x0; then + # The test failed, lets pick the assumed value. + ARCH_DATA_MODEL=$OPENJDK_TARGET_CPU_BITS +else + ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + ADDED_CFLAGS=" -m${with_target_bits}" + ADDED_CXXFLAGS=" -m${with_target_bits}" + ADDED_LDFLAGS=" -m${with_target_bits}" + + CFLAGS="${CFLAGS}${ADDED_CFLAGS}" + CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" + LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}" + + CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}" + CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}" + LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}" + fi +fi + +if test "x$ARCH_DATA_MODEL" = x64; then + A_LP64="LP64:=" + ADD_LP64="-D_LP64=1" +fi +AC_MSG_CHECKING([for target address size]) +AC_MSG_RESULT([$ARCH_DATA_MODEL bits]) +AC_SUBST(LP64,$A_LP64) +AC_SUBST(ARCH_DATA_MODEL) + +if test "x$ARCH_DATA_MODEL" != "x$OPENJDK_TARGET_CPU_BITS"; then + AC_MSG_ERROR([The tested number of bits in the target ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)]) +fi + +# +# NOTE: check for -mstackrealign needs to be below potential addition of -m32 +# +if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. + # While waiting for a better solution, the current workaround is to use -mstackrealign. + CFLAGS="$CFLAGS -mstackrealign" + AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign]) + AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) + ]) +fi +]) + +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS], +[ +############################################################################### +# +# Is the target little of big endian? +# +AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal_endianness"]) + +if test "x$ENDIAN" = xuniversal_endianness; then + AC_MSG_ERROR([Building with both big and little endianness is not supported]) +fi +if test "x$ENDIAN" = xunknown; then + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi +if test "x$ENDIAN" != "x$OPENJDK_TARGET_CPU_ENDIAN"; then + AC_MSG_WARN([The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)]) + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi +AC_SUBST(ENDIAN) +]) + +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ISADIR], +[ +############################################################################### +# +# Could someone enlighten this configure script with a comment about libCrun? +# +# +]) diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index 28e248b019c..5c2e43c2fed 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -23,8 +23,8 @@ # questions. # -# Configured @DATE_WHEN_CONFIGURED@ to build for a @HOST@ system, -# using ./configure @CONFIGURE_COMMAND_LINE@ +# Configured @DATE_WHEN_CONFIGURED@ to build for a @OPENJDK_TARGET_SYSTEM@ system, +# using 'configure @CONFIGURE_COMMAND_LINE@' # When calling macros, the spaces between arguments are # often semantically important! Sometimes we need to subst @@ -67,48 +67,50 @@ SPEC:=@SPEC@ # The "human readable" name of this configuration CONF_NAME:=@CONF_NAME@ -# The built jdk will run in this host system. -HOST:=@HOST@ -HOST_OS:=@HOST_OS@ -HOST_OS_FAMILY:=@HOST_OS_FAMILY@ -HOST_OS_API:=@HOST_OS_API@ +# The built jdk will run in this target system. +OPENJDK_TARGET_SYSTEM:=@OPENJDK_TARGET_SYSTEM@ -HOST_CPU:=@HOST_CPU@ -HOST_CPU_ARCH:=@HOST_CPU_ARCH@ -HOST_CPU_BITS:=@HOST_CPU_BITS@ -HOST_CPU_ENDIAN:=@HOST_CPU_ENDIAN@ +OPENJDK_TARGET_OS:=@OPENJDK_TARGET_OS@ +OPENJDK_TARGET_OS_FAMILY:=@OPENJDK_TARGET_OS_FAMILY@ +OPENJDK_TARGET_OS_API:=@OPENJDK_TARGET_OS_API@ + +OPENJDK_TARGET_CPU:=@OPENJDK_TARGET_CPU@ +OPENJDK_TARGET_CPU_ARCH:=@OPENJDK_TARGET_CPU_ARCH@ +OPENJDK_TARGET_CPU_BITS:=@OPENJDK_TARGET_CPU_BITS@ +OPENJDK_TARGET_CPU_ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@ # We are building on this build system. -# When not cross-compiling, it is the same as the host. -BUILD:=@BUILD@ -BUILD_OS:=@BUILD_OS@ -BUILD_OS_FAMILY:=@BUILD_OS_FAMILY@ -BUILD_OS_API:=@BUILD_OS_API@ +# When not cross-compiling, it is the same as the target. +OPENJDK_BUILD_SYSTEM:=@OPENJDK_BUILD_SYSTEM@ -BUILD_CPU:=@BUILD_CPU@ -BUILD_CPU_ARCH:=@BUILD_CPU_ARCH@ -BUILD_CPU_BITS:=@BUILD_CPU_BITS@ -BUILD_CPU_ENDIAN:=@BUILD_CPU_ENDIAN@ +OPENJDK_BUILD_OS:=@OPENJDK_BUILD_OS@ +OPENJDK_BUILD_OS_FAMILY:=@OPENJDK_BUILD_OS_FAMILY@ +OPENJDK_BUILD_OS_API:=@OPENJDK_BUILD_OS_API@ + +OPENJDK_BUILD_CPU:=@OPENJDK_BUILD_CPU@ +OPENJDK_BUILD_CPU_ARCH:=@OPENJDK_BUILD_CPU_ARCH@ +OPENJDK_BUILD_CPU_BITS:=@OPENJDK_BUILD_CPU_BITS@ +OPENJDK_BUILD_CPU_ENDIAN:=@OPENJDK_BUILD_CPU_ENDIAN@ # Legacy OS values for use in release file. REQUIRED_OS_NAME:=@REQUIRED_OS_NAME@ REQUIRED_OS_VERSION:=@REQUIRED_OS_VERSION@ -# Old name for HOST_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) -PLATFORM:=@HOST_OS@ -# Old name for HOST_CPU, uses i586 and amd64, instead of ia32 and x64. -ARCH:=@LEGACY_HOST_CPU1@ +# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) +PLATFORM:=@OPENJDK_TARGET_OS@ +# Old name for OPENJDK_TARGET_CPU, uses i586 and amd64, instead of ia32 and x64. +ARCH:=@LEGACY_OPENJDK_TARGET_CPU1@ # Yet another name for arch used for an extra subdir below the jvm lib. # Uses i386 and amd64, instead of ia32 and x64. -LIBARCH:=@LEGACY_HOST_CPU2@ +LIBARCH:=@LEGACY_OPENJDK_TARGET_CPU2@ # Use to switch between solaris and windows subdirs in the jdk. -LEGACY_HOST_OS_API:=@LEGACY_HOST_OS_API@ +LEGACY_OPENJDK_TARGET_OS_API:=@LEGACY_OPENJDK_TARGET_OS_API@ # 32 or 64 bit -ARCH_DATA_MODEL:=@HOST_CPU_BITS@ +ARCH_DATA_MODEL:=@OPENJDK_TARGET_CPU_BITS@ # Legacy setting for building for a 64 bit machine. # If yes then this expands to _LP64:=1 @LP64@ -ENDIAN:=@HOST_CPU_ENDIAN@ +ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@ @SET_OPENJDK@ JIGSAW:=@JIGSAW@ LIBM:=-lm @@ -185,7 +187,6 @@ SUPPORT_HEADLESS:=@SUPPORT_HEADLESS@ # The java launcher uses the default. # The other can be selected by specifying -client -server -kernel -zero or -zeroshark # on the java launcher command line. -DEFAULT_JVM_VARIANT:=@DEFAULT_JVM_VARIANT@ JVM_VARIANTS:=@JVM_VARIANTS@ JVM_VARIANT_SERVER:=@JVM_VARIANT_SERVER@ JVM_VARIANT_CLIENT:=@JVM_VARIANT_CLIENT@ @@ -202,53 +203,42 @@ DEBUG_CLASSFILES:=@DEBUG_CLASSFILES@ # Legacy setting: -debug or -fastdebug BUILD_VARIANT_RELEASE:=@BUILD_VARIANT_RELEASE@ -LANGTOOLS_OUTPUTDIR:=@OUTPUT_ROOT@/langtools -LANGTOOLS_DIST:=@OUTPUT_ROOT@/langtools/dist -LANGTOOLS_MAKE_ARGS:=@LANGTOOLS_MAKE_ARGS@ - -CORBA_OUTPUTDIR:=@OUTPUT_ROOT@/corba -CORBA_DIST:=@OUTPUT_ROOT@/corba/dist -CORBA_MAKE_ARGS:=@CORBA_MAKE_ARGS@ - -JAXP_OUTPUTDIR:=@OUTPUT_ROOT@/jaxp -JAXP_DIST:=@OUTPUT_ROOT@/jaxp/dist -JAXP_MAKE_ARGS:=@JAXP_MAKE_ARGS@ - -JAXWS_OUTPUTDIR:=@OUTPUT_ROOT@/jaxws -JAXWS_DIST:=@OUTPUT_ROOT@/jaxws/dist -JAXWS_MAKE_ARGS:=@JAXWS_MAKE_ARGS@ - -HOTSPOT_OUTPUTDIR:=@OUTPUT_ROOT@/hotspot -HOTSPOT_DIST:=@OUTPUT_ROOT@/hotspot/dist -HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ +LANGTOOLS_OUTPUTDIR:=@LANGTOOLS_OUTPUTDIR@ +CORBA_OUTPUTDIR:=@CORBA_OUTPUTDIR@ +JAXP_OUTPUTDIR:=@JAXP_OUTPUTDIR@ +JAXWS_OUTPUTDIR:=@JAXWS_OUTPUTDIR@ +HOTSPOT_OUTPUTDIR:=@HOTSPOT_OUTPUTDIR@ # This where a working jvm is built. # You can run $(JDK_OUTPUTDIR)/bin/java # Though the layout of the contents of $(JDK_OUTPUTDIR) is not # yet the same as a default installation. -HOTSPOT_IMPORT_PATH:=@OUTPUT_ROOT@/hotspot/dist JDK_OUTPUTDIR:=@OUTPUT_ROOT@/jdk -JDK_MAKE_ARGS:=@JDK_MAKE_ARGS@ # When you run "make install" it will create the standardized # layout for the jdk and the jre inside the images subdir. # Then it will copy the contents of the jdk into the installation # directory. IMAGES_OUTPUTDIR:=@OUTPUT_ROOT@/images -IMAGES_MAKE_ARGS:=@IMAGES_MAKE_ARGS@ + +LANGTOOLS_DIST:=@LANGTOOLS_DIST@ +CORBA_DIST:=@CORBA_DIST@ +JAXP_DIST:=@JAXP_DIST@ +JAXWS_DIST:=@JAXWS_DIST@ +HOTSPOT_DIST:=@HOTSPOT_DIST@ + # Legacy variables used by Release.gmk JDK_IMAGE_DIR:=$(IMAGES_OUTPUTDIR)/j2sdk-image JRE_IMAGE_DIR:=$(IMAGES_OUTPUTDIR)/j2re-image # Can be /sparcv9 or /amd64 on Solaris -ISA_DIR:=@LEGACY_HOST_CPU3@ +ISA_DIR:=@LEGACY_OPENJDK_TARGET_CPU3@ BINDIR:=$(JDK_OUTPUTDIR)/bin$(ISA_DIR) # The boot jdk to use ALT_BOOTDIR:=@BOOT_JDK@ BOOT_JDK:=@BOOT_JDK@ BOOT_JDK_JVMARGS:=@BOOT_JDK_JVMARGS@ -BOOT_JAVAC_ARGS:=@BOOT_JAVAC_ARGS@ BOOT_RTJAR:=@BOOT_RTJAR@ BOOT_TOOLSJAR:=@BOOT_TOOLSJAR@ @@ -258,8 +248,6 @@ BOOT_JDK_SOURCETARGET:=@BOOT_JDK_SOURCETARGET@ # Information about the build system NUM_CORES:=@NUM_CORES@ -# This is used from the libjvm build for C/C++ code. -HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@ # This is used from the jdk build for C/C++ code. PARALLEL_COMPILE_JOBS:=@CONCURRENT_BUILD_JOBS@ # Store javac server synchronization files here, and @@ -282,6 +270,8 @@ JAVAC_SERVER_CORES:=@JAVAC_SERVER_CORES@ JAVAC_USE_DEPS:=@JAVAC_USE_DEPS@ # We can invoke javac: SINGLE_THREADED_BATCH or MULTI_CORE_CONCURRENT JAVAC_USE_MODE:=@JAVAC_USE_MODE@ +# Enable not yet complete sjavac support. +ENABLE_SJAVAC:=@ENABLE_SJAVAC@ # The OpenJDK makefiles should be changed to using the standard # configure output ..._CFLAGS and ..._LIBS. In the meantime we @@ -375,22 +365,24 @@ LDEXECXX:=@UNCYGDRIVE@ @LDEXECXX@ @DEFINE_CROSS_COMPILE_ARCH@ # The HOSTCC should really be named BUILDCC, ie build executable for # the build platform. Same as CC when not cross compiling. -HOSTCC:=@HOSTCC@ -HOSTCXX:=@HOSTCXX@ +HOSTCC:=@UNCYGDRIVE@ @HOSTCC@ +HOSTCXX:=@UNCYGDRIVE@ @HOSTCXX@ # And of course, the jdk spells HOSTCC as NIO_CC/HOST_CC -HOST_CC:=@HOSTCC@ -NIO_CC:=@HOSTCC@ +HOST_CC:=@UNCYGDRIVE@ @HOSTCC@ +NIO_CC:=@UNCYGDRIVE@ @HOSTCC@ -AS:=@AS@ +HOST_LD:=@UNCYGDRIVE@ @HOSTLD@ + +AS:=@UNCYGDRIVE@ @AS@ ASFLAGS:=@ASFLAGS@ # AR is used to create a static library (is ar in posix, lib.exe in winapi) AR:=@UNCYGDRIVE@ @AR@ ARFLAGS:=@ARFLAGS@ -NM:=@NM@ -STRIP:=@STRIP@ -MCS:=@MCS@ +NM:=@UNCYGDRIVE@ @NM@ +STRIP:=@UNCYGDRIVE@ @STRIP@ +MCS:=@UNCYGDRIVE@ @MCS@ # Command to create a shared library SHARED_LIBRARY_FLAGS:=@SHARED_LIBRARY_FLAGS@ @@ -404,6 +396,17 @@ SET_SHARED_LIBRARY_MAPFILE=@SET_SHARED_LIBRARY_MAPFILE@ C_FLAG_REORDER:=@C_FLAG_REORDER@ CXX_FLAG_REORDER:=@CXX_FLAG_REORDER@ +# +# Options for generating debug symbols +ENABLE_DEBUG_SYMBOLS:=@ENABLE_DEBUG_SYMBOLS@ +CFLAGS_DEBUG_SYMBOLS:=@CFLAGS_DEBUG_SYMBOLS@ +CXXFLAGS_DEBUG_SYMBOLS:=@CXXFLAGS_DEBUG_SYMBOLS@ +ZIP_DEBUGINFO_FILES:=@ZIP_DEBUGINFO_FILES@ + +# +# Compress (or not) jars +COMPRESS_JARS=@COMPRESS_JARS@ + # Options to linker to specify the library name. # (Note absence of := assignment, because we do not want to evaluate the macro body here) SET_SHARED_LIBRARY_NAME=@SET_SHARED_LIBRARY_NAME@ @@ -507,23 +510,28 @@ READELF:=@READELF@ EXPR:=@EXPR@ FILE:=@FILE@ HG:=@HG@ +OBJCOPY:=@OBJCOPY@ UNCYGDRIVE:=@UNCYGDRIVE@ # Where the build output is stored for your convenience. BUILD_LOG:=@BUILD_LOG@ +BUILD_LOG_PREVIOUS:=@BUILD_LOG_PREVIOUS@ BUILD_LOG_WRAPPER:=@BUILD_LOG_WRAPPER@ # Build setup ENABLE_DOCS:=@ENABLE_DOCS@ GENERATE_DOCS:=@ENABLE_DOCS@ DISABLE_NIMBUS:=@DISABLE_NIMBUS@ +ENABLE_JFR=@ENABLE_JFR@ USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@ USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@ USE_EXTERNAL_LIBZ:=@USE_EXTERNAL_LIBZ@ +LIBZIP_CAN_USE_MMAP:=@LIBZIP_CAN_USE_MMAP@ CHECK_FOR_VCINSTALLDIR=@CHECK_FOR_VCINSTALLDIR@ MSVCRNN_DLL:=@MSVCR100DLL@ + # ADD_SRCS takes a single argument with source roots # and appends any corresponding source roots found # below --with-add-source-root and below @@ -551,6 +559,17 @@ else OVR_SRCS:= endif +#################################################### +# +# Legacy Hotspot support + +HOTSPOT_DIST:=@HOTSPOT_DIST@ +HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ +# This is used from the libjvm build for C/C++ code. +HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@ +# Control wether Hotspot runs Queens test after building +TEST_IN_BUILD=@TEST_IN_BUILD@ + #################################################### # # INSTALLATION @@ -611,10 +630,9 @@ INSTALL_SYSCONFDIR=@sysconfdir@ # Name of Service Agent library SALIB_NAME=@SALIB_NAME@ -# Control wether Hotspot runs Queens test after building -TEST_IN_BUILD=@TEST_IN_BUILD@ - OS_VERSION_MAJOR:=@OS_VERSION_MAJOR@ OS_VERSION_MINOR:=@OS_VERSION_MINOR@ OS_VERSION_MICRO:=@OS_VERSION_MICRO@ +# Include the closed-spec.gmk file if it exists +-include $(dir @SPEC@)/closed-spec.gmk diff --git a/common/bin/compareimage.sh b/common/bin/compareimage.sh index 2e9e8051384..0e5d1f031dd 100644 --- a/common/bin/compareimage.sh +++ b/common/bin/compareimage.sh @@ -177,40 +177,44 @@ else fi fi -if [ "`uname`" == "SunOS" ]; then - PERM="gstat -c%a" -elif [ $OSTYPE == "cygwin" ]; then - PERM= -elif [ "`uname`" == "Darwin" ]; then - PERM="stat -f%p" -elif [ "`uname`" == "Linux" ]; then - PERM="stat -c%A" -else - PERM="stat -c%a" -fi +echo -n Permissions... +found="" +for f in `cd $OLD && find . -type f` +do + if [ ! -f ${OLD}/$f ]; then continue; fi + if [ ! -f ${NEW}/$f ]; then continue; fi + OP=`ls -l ${OLD}/$f | awk '{printf("%.10s\n", $1);}'` + NP=`ls -l ${NEW}/$f | awk '{printf("%.10s\n", $1);}'` + if [ "$OP" != "$NP" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + printf "\told: ${OP} new: ${NP}\t$f\n" + fi -if [ "${PERM}" ] -then - echo -n Permissions... - found="" - for f in `cd $OLD && find . -type f` - do - if [ ! -f ${OLD}/$f ]; then continue; fi - if [ ! -f ${NEW}/$f ]; then continue; fi - OP=`${PERM} ${OLD}/$f` - NP=`${PERM} ${NEW}/$f` - if [ "$OP" != "$NP" ] + OF=`cd ${OLD} && file $f` + NF=`cd ${NEW} && file $f` + if [ "$f" = "./src.zip" ] + then + if [ "`echo $OF | grep -ic zip`" -gt 0 -a "`echo $NF | grep -ic zip`" -gt 0 ] then - if [ -z "$found" ]; then echo ; found="yes"; fi - printf "\told: ${OP} new: ${NP}\t$f\n" + # the way we produces zip-files make it so that directories are stored in old file + # but not in new (only files with full-path) + # this makes file-5.09 report them as different + continue; fi - done - if [ -z "$found" ]; then echo ; found="yes"; fi -fi + fi + + if [ "$OF" != "$NF" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + printf "\tFILE: old: ${OF} new: ${NF}\t$f\n" + fi +done +if [ -z "$found" ]; then echo ; found="yes"; fi GENERAL_FILES=$(cd $OLD && find . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ - ! -name "ct.sym" \ + ! -name "ct.sym" ! -name "*.diz" \ | grep -v "./bin/" | sort | $FILTER) echo General files... for f in $GENERAL_FILES diff --git a/common/bin/diffexec.sh b/common/bin/diffexec.sh index 8621e9147f1..85f7b67c69f 100644 --- a/common/bin/diffexec.sh +++ b/common/bin/diffexec.sh @@ -49,21 +49,24 @@ then fi if [ "`uname`" == "SunOS" ]; then - NM=gnm - STAT="gstat -c%s" + if [ -f "`which nm`" ]; then + NM=nm + elif [ -f "`which gnm`" ]; then + NM=gnm + else + echo "No nm command found" + exit 10 + fi LDD=ldd elif [ $OSTYPE == "cygwin" ]; then NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" NM_ARGS=/exports - STAT="stat -c%s" LDD= elif [ "`uname`" == "Darwin" ]; then NM=nm - STAT="stat -f%z" LDD="otool -L" else NM=nm - STAT="stat -c%s" LDD=ldd fi @@ -79,8 +82,8 @@ fi OLD=$(cd $(dirname $1) && pwd)/$(basename $1) NEW=$(cd $(dirname $2) && pwd)/$(basename $2) -OLD_SIZE=$($STAT "$OLD") -NEW_SIZE=$($STAT "$NEW") +OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') +NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') if [ $# -gt 3 ] then diff --git a/common/bin/diffjarzip.sh b/common/bin/diffjarzip.sh index 3bd96b7e112..6ad0a42c2f6 100644 --- a/common/bin/diffjarzip.sh +++ b/common/bin/diffjarzip.sh @@ -72,7 +72,11 @@ else fi if [ "`uname`" == "SunOS" ]; then - DIFF=gdiff + if [ -f "`which gdiff`" ]; then + DIFF=gdiff + else + DIFF=diff + fi else DIFF=diff fi diff --git a/common/bin/difflib.sh b/common/bin/difflib.sh index e6f8a20ee9a..dc5eed14877 100644 --- a/common/bin/difflib.sh +++ b/common/bin/difflib.sh @@ -53,21 +53,27 @@ then fi if [ "`uname`" == "SunOS" ]; then - NM=gnm - STAT="gstat -c%s" + if [ -f "`which gnm`" ]; then + NM=gnm +# Jonas 2012-05-29: solaris native nm produces radically different output than gnm +# so if using that...we need different filter than "cut -f 2-" +# + elif [ -f "`which nm`" ]; then + NM=nm + else + echo "No nm command found" + exit 10 + fi LDD=ldd elif [ $OSTYPE == "cygwin" ]; then NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" NM_ARGS=/exports - STAT="stat -c%s" LDD= elif [ "`uname`" == "Darwin" ]; then NM=nm - STAT="stat -f%z" LDD="otool -L" else NM=nm - STAT="stat -c%s" LDD=ldd fi @@ -83,8 +89,8 @@ fi OLD=$(cd $(dirname $1) && pwd)/$(basename $1) NEW=$(cd $(dirname $2) && pwd)/$(basename $2) -OLD_SIZE=$($STAT "$OLD") -NEW_SIZE=$($STAT "$NEW") +OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') +NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') if [ $# -gt 3 ] then @@ -122,8 +128,8 @@ then exit 0 fi -OLD_SYMBOLS=$COMPARE_ROOT/$OLD_NAME.old -NEW_SYMBOLS=$COMPARE_ROOT/$NEW_NAME.new +OLD_SYMBOLS=$COMPARE_ROOT/nm.$OLD_NAME.old +NEW_SYMBOLS=$COMPARE_ROOT/nm.$NEW_NAME.new mkdir -p $(dirname $OLD_SYMBOLS) mkdir -p $(dirname $NEW_SYMBOLS) diff --git a/common/makefiles/IdlCompilation.gmk b/common/makefiles/IdlCompilation.gmk index ae85d378d6f..41758011ac9 100644 --- a/common/makefiles/IdlCompilation.gmk +++ b/common/makefiles/IdlCompilation.gmk @@ -87,6 +87,8 @@ $(if $6,$1_$(strip $6)) $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) +$(if $(10),$(error Internal makefile error: Too many arguments to SetupIdlCompilation, please update IdlCompilation.gmk)) + # Remove any relative addressing in the paths. $1_SRC := $$(abspath $$($1_SRC)) $1_BIN := $$(abspath $$($1_BIN)) @@ -111,4 +113,3 @@ $$(foreach p,$$($1),$$(eval $$(call add_idl_package,$1,$$($1_SRC),$$($1_BIN),$$( endef .SUFFIXES: .java .class .package - diff --git a/common/makefiles/JavaCompilation.gmk b/common/makefiles/JavaCompilation.gmk index a9ddb11a644..38d20969d5c 100644 --- a/common/makefiles/JavaCompilation.gmk +++ b/common/makefiles/JavaCompilation.gmk @@ -94,6 +94,7 @@ define SetupJavaCompiler $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) + $(if $(10),$(error Internal makefile error: Too many arguments to SetupJavaCompiler, please update JavaCompilation.gmk)) ifeq ($$($1_MODE),MULTI_CORE_CONCURRENT) ifneq (,$$($1_SERVER_DIR)) @@ -130,6 +131,7 @@ define SetupArchive # SKIP_METAINF:=Set to prevent contents of an META-INF directory to be automatically # added to the archive. # EXTRA_MANIFEST_ATTR:=Extra attribute to add to manifest. + # CHECK_COMPRESS_JAR Check the COMPRESS_JAR variable $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) $(if $5,$1_$(strip $5)) @@ -143,6 +145,7 @@ define SetupArchive $(if $(13),$1_$(strip $(13))) $(if $(14),$1_$(strip $(14))) $(if $(15),$1_$(strip $(15))) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupArchive, please update JavaCompilation.gmk)) $1_JARMAIN:=$(strip $$($1_JARMAIN)) $1_JARNAME:=$$(notdir $$($1_JAR)) @@ -243,6 +246,16 @@ define SetupArchive ($(FIND) $$(src) -name _the.package -exec $(TOUCH) -r $$($1_JAR) \{\} \; ; true) &&) # Use a slightly shorter name for logging, but with enough path to identify this jar. $1_NAME:=$$(subst $$(OUTPUT_ROOT)/,,$$($1_JAR)) + + ifneq (,$$($1_CHECK_COMPRESS_JAR)) + $1_JAR_CREATE_OPTIONS := c0fm + ifeq ($(COMPRESS_JARS), true) + $1_JAR_CREATE_OPTIONS := cfm + endif + else + $1_JAR_CREATE_OPTIONS := cfm + endif + # Here is the rule that creates/updates the jar file. $$($1_JAR) : $2 $$($1_ALL_SRC) $(MKDIR) -p $$($1_BIN) @@ -283,7 +296,7 @@ define SetupArchive $$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.api.notify $(FIND_DELETE); true) &&) true ; \ fi ; \ else \ - $(ECHO) Creating $$($1_NAME) && $(JAR) cfm $$@ $$($1_MANIFEST_FILE) && \ + $(ECHO) Creating $$($1_NAME) && $(JAR) $$($1_JAR_CREATE_OPTIONS) $$@ $$($1_MANIFEST_FILE) && \ $$($1_SCAPTURE_CONTENTS) \ $$($1_SCAPTURE_METAINF) \ $$($1_SUPDATE_CONTENTS) \ @@ -311,6 +324,7 @@ define SetupZipArchive $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) + $(if $(10),$(error Internal makefile error: Too many arguments to SetupZipArchive, please update JavaCompilation.gmk)) # Find all files in the source tree. $1_SUFFIX_FILTER := $$(patsubst %,-o -name $(DQUOTE)*%$(DQUOTE),$$($1_SUFFIXES)) @@ -648,6 +662,7 @@ define SetupJavaCompilation $(if $(12),$1_$(strip $(12))) $(if $(13),$1_$(strip $(13))) $(if $(14),$1_$(strip $(14))) + $(if $(15),$(error Internal makefile error: Too many arguments to SetupJavaCompilation, please update JavaCompilation.gmk)) # Extract the info from the java compiler setup. $1_MODE := $$($$($1_SETUP)_MODE) @@ -688,6 +703,12 @@ $1_BINS := $$(shell $(FIND) $$($1_BIN) -name "*.class") # Now we have a list of all java files to compile: $$($1_SRCS) # and we have a list of all existing class files: $$($1_BINS) +# Create the corresponding smart javac wrapper command line. +$1_SJAVAC_ARGS:=$$(addprefix -x ,$$(addsuffix .*,$$(subst /,.,$$($1_EXCLUDES)))) \ +$$(addprefix -i ,$$(addsuffix .*,$$(subst /,.,$$($1_INCLUDES)))) \ +$$(addprefix -xf *,$$(strip $$($1_EXCLUDE_FILES))) \ +$$(addprefix -if *,$$(strip $$($1_INCLUDE_FILES))) -src $$(subst $$(SPACE),$$(PATH_SEP),$$(strip $$($1_SRC))) + # Prepend the source/bin path to the filter expressions. ifneq ($$($1_INCLUDES),) $1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES)))) @@ -799,6 +820,12 @@ ifeq ($$($1_MODE),SINGLE_THREADED_BATCH) $(RM) $$($1_BIN)/_the.batch $$($1_BIN)/_the.batch.tmp $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.batch.tmp) $(ECHO) Compiling `$(WC) $$($1_BIN)/_the.batch.tmp | $(TR) -s ' ' | $(CUT) -f 2 -d ' '` files in batch $1 +ifeq ($$($1_NOSJAVAC),) +ifeq ($$(ENABLE_SJAVAC),yes) + mkdir -p $$($1_BIN)_sjavac + $$($1_JVM) $$(word 1,$$($1_JAVAC)) com.sun.tools.javac.smart.Main $$($1_SJAVAC_ARGS) -mfl $$($1_BIN)/_the.batch.tmp -d $$($1_BIN)_sjavac +endif +endif ($$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) -implicit:none -sourcepath "$$($1_SRCROOTSC)" -d $$($1_BIN) $$($1_HEADERS_ARG) @$$($1_BIN)/_the.batch.tmp && \ $(MV) $$($1_BIN)/_the.batch.tmp $$($1_BIN)/_the.batch) else @@ -890,5 +917,3 @@ ifneq (,$$($1_SRCZIP)) endif endef - - diff --git a/common/makefiles/MakeBase.gmk b/common/makefiles/MakeBase.gmk index 3018a414f3b..be0a6726a28 100644 --- a/common/makefiles/MakeBase.gmk +++ b/common/makefiles/MakeBase.gmk @@ -138,6 +138,7 @@ endef # Hook to be called as the very first thing when running a normal build define AtRootMakeStart + $(if $(findstring -j,$(MAKEFLAGS)), $(error make -j is not supported, use make JOBS=n)) $(call PrintStartMessage) $(call StartTimer) endef diff --git a/common/makefiles/Makefile b/common/makefiles/Makefile index 77420a84296..de5da99f78b 100644 --- a/common/makefiles/Makefile +++ b/common/makefiles/Makefile @@ -26,241 +26,128 @@ # This must be the first rule default: all -# Find out which variables were passed explicitely on the make command line. These -# will be passed on to sub-makes, overriding spec.gmk settings. -MAKE_ARGS=$(foreach var,$(subst =command,,$(filter %=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))),$(var)=$($(var))) - -define fatal-error - # If the user specificed a "global" target (e.g. 'help'), do not exit but continue running - $$(if $$(findstring help,$$(MAKECMDGOALS)),,$$(error Cannot continue)) -endef - -ifeq ($(origin VERBOSE),undefined) - # Setup logging according to LOG (but only if VERBOSE is not given) - ifeq ($(LOG),) - # Set LOG to "warn" as default if not set (and no VERBOSE given) - LOG=warn - endif - ifeq ($(LOG),warn) - VERBOSE=-s - else ifeq ($(LOG),info) - VERBOSE= - else ifeq ($(LOG),debug) - VERBOSE= - else ifeq ($(LOG),trace) - VERBOSE=-d -p - else - $(info Error: LOG must be one of: warn, info, debug or trace.) - $(eval $(call fatal-error)) - endif -else - ifneq ($(LOG),) - # We have both a VERBOSE and a LOG argument. This is OK only if this is a repeated call by ourselves, - # but complain if this is the top-level make call. - ifeq ($(MAKELEVEL),0) - $(info Cannot use LOG=$(LOG) and VERBOSE=$(VERBOSE) at the same time. Choose one.) - $(eval $(call fatal-error)) - endif - endif -endif - -# TODO: Fix duplication in MakeBase.gmk -define SetupLogging - ifneq ($(findstring $(LOG),debug trace),) - # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make - OLD_SHELL:=$$(SHELL) - SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x - endif -endef - -$(eval $(call SetupLogging)) - -# Find all environment or command line variables that begin with ALT. -list_alt_overrides_with_origins = $(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var))))) -list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins))) - +# Locate this Makefile ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),) - makefile_path=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) + makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) else - makefile_path=$(lastword $(MAKEFILE_LIST)) + makefile_path:=$(lastword $(MAKEFILE_LIST)) endif -root_dir=$(patsubst %/common/makefiles/Makefile,%,$(makefile_path)) -output_dir=$(root_dir)/build +root_dir:=$(patsubst %/common/makefiles/Makefile,%,$(makefile_path)) -ifneq ($(origin SPEC),undefined) - # We have been given a SPEC, check that it works out properly - ifeq ($(wildcard $(SPEC)),) - $(info Cannot locate spec.gmk, given by SPEC=$(SPEC)) - $(eval $(call fatal-error)) - endif - ifneq ($(origin CONF),undefined) - # We also have a CONF argument. This is OK only if this is a repeated call by ourselves, - # but complain if this is the top-level make call. - ifeq ($(MAKELEVEL),0) - $(info Cannot use CONF=$(CONF) and SPEC=$(SPEC) at the same time. Choose one.) - $(eval $(call fatal-error)) - endif - endif - # ... OK, we're satisfied, we'll use this SPEC later on -else - # Find all spec.gmk files in the build output directory - all_spec_files=$(wildcard $(output_dir)/*/spec.gmk) - ifeq ($(all_spec_files),) - $(info No configurations found for $(root_dir)! Please run configure to create a configuration.) - $(eval $(call fatal-error)) - endif - # Extract the configuration names from the path - all_confs=$(patsubst %/spec.gmk,%,$(patsubst $(output_dir)/%,%,$(all_spec_files))) +# ... and then we can include our helper functions +include $(dir $(makefile_path))/MakeHelpers.gmk - ifneq ($(origin CONF),undefined) - # User have given a CONF= argument. - ifeq ($(CONF),) - # If given CONF=, match all configurations - matching_confs=$(strip $(all_confs)) - else - # Otherwise select those that contain the given CONF string - matching_confs=$(strip $(foreach var,$(all_confs),$(if $(findstring $(CONF),$(var)),$(var)))) - endif - ifeq ($(matching_confs),) - $(info No configurations found matching CONF=$(CONF)) - $(info Available configurations:) - $(foreach var,$(all_confs),$(info * $(var))) - $(eval $(call fatal-error)) - else - ifeq ($(words $(matching_confs)),1) - $(info Building '$(matching_confs)' (matching CONF=$(CONF))) - else - $(info Building the following configurations (matching CONF=$(CONF)):) - $(foreach var,$(matching_confs),$(info * $(var))) - endif - endif +$(eval $(call ParseLogLevel)) +$(eval $(call SetupLogging)) +$(eval $(call ParseConfAndSpec)) - # Create a SPEC definition. This will contain the path to one or more spec.gmk files. - SPEC=$(addsuffix /spec.gmk,$(addprefix $(output_dir)/,$(matching_confs))) - else - # No CONF or SPEC given, check the available configurations - ifneq ($(words $(all_spec_files)),1) - $(info No CONF or SPEC given, but more than one spec.gmk found in $(output_dir).) - $(info Available configurations:) - $(foreach var,$(all_confs),$(info * $(var))) - $(info Please retry building with CONF= or SPEC=) - $(eval $(call fatal-error)) - endif - - # We found exactly one configuration, use it - SPEC=$(strip $(all_spec_files)) - endif +# Setup number of jobs to use. -jN is unfortunately not available for us to parse from the command line, +# hence this workaround. +ifeq ($(JOBS),) + JOBS=$(NUM_CORES) endif ifneq ($(words $(SPEC)),1) -# We have multiple configurations to build, call make repeatedly -all jdk hotspot jaxws jaxp corba langtools install images packages clean dist-clean: +### We have multiple configurations to build, call make repeatedly +all jdk hotspot jaxws jaxp corba langtools install images clean dist-clean: @$(foreach spec,$(SPEC),($(MAKE) -f $(makefile_path) SPEC=$(spec) $(VERBOSE) VERBOSE=$(VERBOSE) $@ $(MAKE_ARGS)) &&) true -.PHONY: all jdk hotspot jaxws jaxp corba langtools install images packages clean dist-clean +.PHONY: all jdk hotspot jaxws jaxp corba langtools install images clean dist-clean else -# This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file. +### This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file. # Now load the spec --include $(SPEC) +include $(SPEC) # Load the vital tools for all the makefiles. --include $(SRC_ROOT)/common/makefiles/MakeBase.gmk +include $(SRC_ROOT)/common/makefiles/MakeBase.gmk -# Remove any build.log from a previous run +### Clean up from previous run + +# Remove any build.log from a previous run, if they exist ifneq (,$(BUILD_LOG)) - $(shell $(RM) $(BUILD_LOG)) + ifneq (,$(BUILD_LOG_PREVIOUS)) + # Rotate old log + $(shell $(RM) $(BUILD_LOG_PREVIOUS) 2> /dev/null) + $(shell $(MV) $(BUILD_LOG) $(BUILD_LOG_PREVIOUS) 2> /dev/null) + else + $(shell $(RM) $(BUILD_LOG) 2> /dev/null) + endif endif - # Remove any javac server logs and port files. This # prevents a new make run to reuse the previous servers. ifneq (,$(JAVAC_SERVERS)) $(shell mkdir -p $(JAVAC_SERVERS) && rm -rf $(JAVAC_SERVERS)/*) endif -# Reset the build timers. -$(eval $(call ResetTimers)) # Clean out any notifications from the previous build. $(shell find $(OUTPUT_ROOT) -name "_the.*.notify" $(FIND_DELETE)) -# If make was called explicitely with -j, don't add a -j ourself to sub-makes, since -# this will be inherited automatically by make. Otherwise use our default for sub-makes. -# The -j in MAKEFLAGS is only visible when executing a recipe, hence this macro. -define GetMakeJobFlag - $(if $(findstring -j,$(MAKEFLAGS)),,-j$(NUM_CORES)) -endef +# Reset the build timers. +$(eval $(call ResetTimers)) -define CheckEnvironment - $(if $(list_alt_overrides), - @$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n" - @$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n" - @$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n" - ) -endef - -define PrintStartMessage - $(if $(VERBOSE),,@$(ECHO) Running make as $(MAKE) $(MFLAGS) $(MAKE_ARGS)) - $(call CheckEnvironment) - @$(ECHO) "Building OpenJDK for target $(if $(MAKECMDGOALS),'$(MAKECMDGOALS)','all') in configuration '$(CONF_NAME)'" -endef - -define PrintEndMessage - @$(ECHO) "Finished building OpenJDK for target '$@'" - $(call CheckEnvironment) -endef +### Main targets all: jdk @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) @$(call AtRootMakeEnd) -langtools: start-make +langtools: start-make langtools-only +langtools-only: @$(call MakeStart,langtools,all) - @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(LANGTOOLS_MAKE_ARGS) $(MAKE_ARGS)) + @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,langtools,all) -corba: langtools +corba: langtools corba-only +corba-only: @$(call MakeStart,corba,all) - @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS)) + @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,corba,all) -jaxp: langtools +jaxp: langtools jaxp-only +jaxp-only: @$(call MakeStart,jaxp,all) - @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS)) + @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,jaxp,all) -jaxws: langtools jaxp +jaxws: langtools jaxp jaxws-only +jaxws-only: @$(call MakeStart,jaxws,all) - @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS)) + @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,jaxws,all) -hotspot: langtools +hotspot: langtools hotspot-only +hotspot-only: @$(call MakeStart,hotspot,all) @($(CD) $(HOTSPOT_TOPDIR)/make && $(BUILD_LOG_WRAPPER) $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS) $(MAKE_ARGS)) @$(call MakeFinish,hotspot,all) -jdk: langtools corba jaxp jaxws hotspot +jdk: langtools corba jaxp jaxws hotspot jdk-only +jdk-only: @$(call MakeStart,jdk,all) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS)) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,jdk,all) -images install packages: source-tips start-make jdk langtools corba jaxp jaxws hotspot +images: source-tips start-make jdk langtools corba jaxp jaxws hotspot images-only +images-only: @$(call MakeStart,jdk-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS) $@) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(JDK_MAKE_ARGS) $(MAKE_ARGS) images) @$(call MakeFinish,jdk-images,$@) @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) @$(call AtRootMakeEnd) -old-images: source-tips start-make jdk langtools corba jaxp jaxws hotspot - @$(call MakeStart,jdk-old-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS) $@) - @$(call MakeFinish,old-jdk-images,$@) +install: source-tips start-make jdk langtools corba jaxp jaxws hotspot install-only +install-only: + @$(call MakeStart,jdk-images,$@) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(JDK_MAKE_ARGS) $(MAKE_ARGS) install) + @$(call MakeFinish,jdk-images,$@) @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) @$(call AtRootMakeEnd) start-make: @$(call AtRootMakeStart) -.PHONY: jdk hotspot jaxws jaxp corba langtools install images packages start-make +.PHONY: jdk hotspot jaxws jaxp corba langtools install images start-make test: start-make @$(call MakeStart,test,$(if $(TEST),$(TEST),all)) @@ -281,7 +168,7 @@ $(OUTPUT_ROOT)/source_tips: FRC # Remove everything, except the output from configure. clean: - @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | grep -v "localdevenv.*" | grep -v uncygdrive.exe`) + @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v spec.sh | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | grep -v "localdevenv.*" | grep -v uncygdrive.exe`) @$(ECHO) Cleaned everything except the build configuration. .PHONY: clean @@ -292,7 +179,7 @@ dist-clean: .PHONY: dist-clean clean-jdk: - @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | \ + @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v spec.sh | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | \ grep -v langtools | grep -v corba | grep -v jaxp | grep -v jaxws | grep -v hotspot`) @$(ECHO) "Cleaned jdk build artifacts (but not langtools,corba,jaxp,jaxws,hotspot nor the build configuration)" .PHONY: clean diff --git a/common/makefiles/NativeCompilation.gmk b/common/makefiles/NativeCompilation.gmk index ee18f186c8e..d259459cf8f 100644 --- a/common/makefiles/NativeCompilation.gmk +++ b/common/makefiles/NativeCompilation.gmk @@ -51,47 +51,55 @@ define add_native_source # param 5 = the c compiler # param 6 = the c++ flags to the compiler # param 7 = the c++ compiler + # param 8 = the flags to the assembler ifneq (,$$(filter %.c,$2)) # Compile as a C file - $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) + $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) -c $1_$2_COMP=$5 $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) else ifneq (,$$(filter %.m,$2)) # Compile as a objective-c file - $1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) + $1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) -c $1_$2_COMP=$5 $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) + else ifneq (,$$(filter %.s,$2)) + # Compile as assembler file + $1_$2_FLAGS=$8 + $1_$2_COMP=$(AS) + $1_$2_DEP_FLAG:= else # Compile as a C++ file - $1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) + $1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) -c $1_$2_COMP=$7 $1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS) endif # Generate the .o (.obj) file name and place it in the bin dir. - $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(notdir $2)))) + $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(patsubst %.s,%$(OBJ_SUFFIX),$$(notdir $2))))) # Only continue if this object file hasn't been processed already. This lets the first found # source file override any other with the same name. ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_OBJS_SO_FAR))) $1_OBJS_SO_FAR+=$$($1_$2_OBJ) - # And this is the dependency file for this obj file. - $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ)) - # Include previously generated dependency information. (if it exists) - -include $$($1_$2_DEP) + ifeq (,$$(filter %.s,$2)) + # And this is the dependency file for this obj file. + $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ)) + # Include previously generated dependency information. (if it exists) + -include $$($1_$2_DEP) - ifeq ($(COMPILER_TYPE),CL) - $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \ - -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ)) + ifeq ($(COMPILER_TYPE),CL) + $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \ + -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ)) + endif endif $$($1_$2_OBJ) : $2 ifeq ($(COMPILER_TYPE),CC) $$(call COMPILING_MSG,$$(notdir $2)) - $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 + $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 endif ifeq ($(COMPILER_TYPE),CL) $$(call COMPILING_MSG,$$(notdir $2)) - $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 + $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 endif endif endef @@ -107,9 +115,9 @@ define SetupNativeCompilation # LDFLAGS_SUFFIX the linker flags to be added last on the commandline # typically the libraries linked to. # ARFLAGS the archiver flags to be used - # BIN the directory where we store the object files - # LIB the resulting library file - # EXE the resulting exec file + # OBJECT_DIR the directory where we store the object files + # LIBRARY the resulting library file + # PROGRAM the resulting exec file # INCLUDES only pick source from these directories # EXCLUDES do not pick source from these directories # INCLUDE_FILES only compile exactly these files! @@ -118,6 +126,9 @@ define SetupNativeCompilation # RC_FLAGS flags for RC. # MAPFILE mapfile # REORDER reorder file + # DEBUG_SYMBOLS add debug symbols (if configured on) + # CC the compiler to use, default is $(CC) + # LDEXE the linker to use for linking executables, default is $(LDEXE) $(if $2,$1_$(strip $2)) $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) @@ -137,13 +148,94 @@ define SetupNativeCompilation $(if $(18),$1_$(strip $(18))) $(if $(19),$1_$(strip $(19))) $(if $(20),$1_$(strip $(20))) + $(if $(21),$1_$(strip $(21))) + $(if $(22),$(error Internal makefile error: Too many arguments to SetupNativeCompilation, please update NativeCompilation.gmk)) + + ifneq (,$$($1_BIN)) + $$(error BIN has been replaced with OBJECT_DIR) + endif + + ifneq (,$$($1_LIB)) + $$(error LIB has been replaced with LIBRARY) + endif + + ifneq (,$$($1_EXE)) + $$(error EXE has been replaced with PROGRAM) + endif + + ifneq (,$$($1_LIBRARY)) + ifeq (,$$($1_OUTPUT_DIR)) + $$(error LIBRARY requires OUTPUT_DIR) + endif + + ifneq ($$($1_LIBRARY),$(basename $$($1_LIBRARY))) + $$(error directory of LIBRARY should be specified using OUTPUT_DIR) + endif + + ifneq (,$(findstring $(SHARED_LIBRARY_SUFFIX),$$($1_LIBRARY))) + $$(error LIBRARY should be specified without SHARED_LIBRARY_SUFFIX: $(SHARED_LIBRARY_SUFFIX)) + endif + + ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_LIBRARY))) + $$(error LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX)) + endif + + $1_BASENAME:=$(LIBRARY_PREFIX)$$($1_LIBRARY)$(SHARED_LIBRARY_SUFFIX) + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) + + endif + + ifneq (,$$($1_STATIC_LIBRARY)) + ifeq (,$$($1_OUTPUT_DIR)) + $$(error STATIC_LIBRARY requires OUTPUT_DIR) + endif + + ifneq ($$($1_STATIC_LIBRARY),$(basename $$($1_STATIC_LIBRARY))) + $$(error directory of STATIC_LIBRARY should be specified using OUTPUT_DIR) + endif + + ifneq (,$(findstring $(STATIC_LIBRARY_SUFFIX),$$($1_STATIC_LIBRARY))) + $$(error STATIC_LIBRARY should be specified without STATIC_LIBRARY_SUFFIX: $(STATIC_LIBRARY_SUFFIX)) + endif + + ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_STATIC_LIBRARY))) + $$(error STATIC_LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX)) + endif + + $1_BASENAME:=$(LIBRARY_PREFIX)$$($1_STATIC_LIBRARY)$(STATIC_LIBRARY_SUFFIX) + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) + endif + + ifneq (,$$($1_PROGRAM)) + ifeq (,$$($1_OUTPUT_DIR)) + $$(error PROGRAM requires OUTPUT_DIR) + endif + + ifneq ($$($1_PROGRAM),$(basename $$($1_PROGRAM))) + $$(error directory of PROGRAM should be specified using OUTPUT_DIR) + endif + + ifneq (,$(findstring $(EXE_SUFFIX),$$($1_PROGRAM))) + $$(error PROGRAM should be specified without EXE_SUFFIX: $(EXE_SUFFIX)) + endif + + $1_BASENAME:=$$($1_PROGRAM)$(EXE_SUFFIX) + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) + + endif + + ifeq (,$$($1_TARGET)) + $$(error Neither PROGRAM, LIBRARY nor STATIC_LIBRARY has been specified for SetupNativeCompilation) + endif ifeq (,$$($1_LANG)) $$(error You have to specify LANG for native compilation $1) endif ifeq (C,$$($1_LANG)) + ifeq ($$($1_LDEXE),) + $1_LDEXE:=$(LDEXE) + endif $1_LD:=$(LD) - $1_LDEXE:=$(LDEXE) else ifeq (C++,$$($1_LANG)) $1_LD:=$(LDCXX) @@ -153,8 +245,12 @@ define SetupNativeCompilation endif endif + ifeq ($$($1_CC),) + $1_CC:=$(CC) + endif + # Make sure the dirs exist. - $$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN) $$(dir $$($1_LIB)) $$(dir $$($1_EXE))) + $$(shell $(MKDIR) -p $$($1_SRC) $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR)) # Find all files in the source trees. Sort to remove duplicates. $1_ALL_SRCS := $$(sort $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f))) # Extract the C/C++ files. @@ -163,7 +259,7 @@ define SetupNativeCompilation ifneq ($$($1_EXCLUDE_FILES),) $1_EXCLUDE_FILES:=$$(addprefix %,$$($1_EXCLUDE_FILES)) endif - $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.c %.cpp %.m,$$($1_ALL_SRCS))) + $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.s %.c %.cpp %.m,$$($1_ALL_SRCS))) ifneq (,$$(strip $$($1_INCLUDE_FILES))) $1_SRCS := $$(filter $$($1_INCLUDE_FILES),$$($1_SRCS)) endif @@ -171,7 +267,7 @@ define SetupNativeCompilation $$(error No sources found for $1 when looking inside the dirs $$($1_SRC)) endif # There can be only a single bin dir root, no need to foreach over the roots. - $1_BINS := $$(wildcard $$($1_BIN)/*$(OBJ_SUFFIX)) + $1_BINS := $$(wildcard $$($1_OBJECT_DIR)/*$(OBJ_SUFFIX)) # Now we have a list of all c/c++ files to compile: $$($1_SRCS) # and we have a list of all existing object files: $$($1_BINS) @@ -187,37 +283,36 @@ define SetupNativeCompilation # Calculate the expected output from compiling the sources (sort to remove duplicates. Also provides # a reproducable order on the input files to the linker). - $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_BIN)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS))))))) - $1 := $$($1_EXPECTED_OBJS) + $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_OBJECT_DIR)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(patsubst %.s,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS)))))))) # Are there too many object files on disk? Perhaps because some source file was removed? $1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS))) # Clean out the superfluous object files. $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS)) - # Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CFLAGS. - $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(HOST_OS_API)) $$($1_CFLAGS_$(PLATFORM)) + # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CFLAGS. + $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) ifneq ($(DEBUG_LEVEL),release) # Pickup extra debug dependent variables for CFLAGS $1_EXTRA_CFLAGS+=$$($1_CFLAGS_debug) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_debug) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_debug) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)_debug) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug) else $1_EXTRA_CFLAGS+=$$($1_CFLAGS_release) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_release) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_release) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)_release) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release) endif - # Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CXXFLAGS. - $1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(HOST_OS_API)) $$($1_CXXFLAGS_$(PLATFORM)) + # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CXXFLAGS. + $1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)) ifneq ($(DEBUG_LEVEL),release) # Pickup extra debug dependent variables for CXXFLAGS $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_debug) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_debug) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_debug) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)_debug) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_debug) else $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_release) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_release) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_release) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)_release) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release) endif ifeq ($$($1_CXXFLAGS),) @@ -232,33 +327,62 @@ define SetupNativeCompilation $1_EXTRA_CXXFLAGS += $$(CXX_FLAG_REORDER) endif + ifneq (no, $(ENABLE_DEBUG_SYMBOLS)) + ifneq ($(OPENJDK_TARGET_OS), solaris) +# +# There is very weird code in Defs-solaris.gmk that first sets variables as decribed below +# and then a couple of hundreds of line below resets them... +# this feels like a sure bug...but before this is confirmed, mimic this behaviour +# (note: skip indenting this as it will surely be removed anyway) +# + + ifneq (,$$($1_DEBUG_SYMBOLS)) + $1_OPTIMIZATION := LOW + $1_EXTRA_CFLAGS += $(CFLAGS_DEBUG_SYMBOLS) + $1_EXTRA_CXXFLAGS += $(CXXFLAGS_DEBUG_SYMBOLS) + endif + +# + endif +# + endif + + ifeq (NONE, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_NONE) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_NONE) + else ifeq (LOW, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_NORM) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_NORM) + else ifeq (HIGH, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_HI) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_HI) + else ifeq (HIGHEST, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_HIGHEST) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_HIGHEST) + else ifneq (, $$($1_OPTIMIZATION)) + $$(error Unknown value for OPTIMIZATION: $$($1_OPTIMIZATION)) + endif + # Now create a list of the packages that are about to compile. Used when sending source # in a batch to the compiler. - $$(shell $(RM) $$($1_BIN)/_the.list_of_sources) - $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_BIN)/_the.list_of_sources)) + $$(shell $(RM) $$($1_OBJECT_DIR)/_the.list_of_sources) + $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_OBJECT_DIR)/_the.list_of_sources)) # Now call add_native_source for each source file we are going to compile. $$(foreach p,$$($1_SRCS),\ - $$(eval $$(call add_native_source,$1,$$p,$$($1_BIN),\ - $$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$(CC),\ - $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX)))) + $$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR),\ + $$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$$($1_CC),\ + $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX),$$($1_ASFLAGS)))) # On windows we need to create a resource file - ifeq ($(HOST_OS_API), winapi) + ifeq ($(OPENJDK_TARGET_OS_API), winapi) ifneq (,$$($1_VERSIONINFO_RESOURCE)) - ifneq (,$$($1_LIB)) - $1_BASENAME:=$$(basename $$(notdir $$($1_LIB))) - endif - ifneq (,$$($1_EXE)) - $1_BASENAME:=$$(basename $$(notdir $$($1_EXE))) - endif - $1_RES:=$$($1_BIN)/$$($1_BASENAME).res + $1_RES:=$$($1_OBJECT_DIR)/$$($1_BASENAME).res $$($1_RES): $$($1_VERSIONINFO_RESOURCE) $(RC) $$($1_RC_FLAGS) $(CC_OUT_OPTION)$$@ $$($1_VERSIONINFO_RESOURCE) endif ifneq (,$$($1_MANIFEST)) - $1_PROGRAM:=$$(basename $$(notdir $$($1_EXE))) - $1_GEN_MANIFEST:=$$($1_BIN)/$$($1_PROGRAM).manifest + $1_GEN_MANIFEST:=$$($1_OBJECT_DIR)/$$($1_PROGRAM).manifest IMVERSIONVALUE:=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VERSION).$(COOKED_BUILD_NUMBER) $$($1_GEN_MANIFEST): $$($1_MANIFEST) $(SED) 's%IMVERSION%$$(IMVERSIONVALUE)%g;s%PROGRAM%$$($1_PROGRAM)%g' $$< > $$@ @@ -266,54 +390,182 @@ define SetupNativeCompilation endif # mapfile doesnt seem to be implemented on macosx (yet??) - ifneq ($(HOST_OS),macosx) - ifneq ($(HOST_OS),windows) - $1_REAL_MAPFILE := $$($1_MAPFILE) + ifneq ($(OPENJDK_TARGET_CPU),ppc) + ifneq ($(OPENJDK_TARGET_CPU),arm) + ifneq ($(OPENJDK_TARGET_OS),macosx) + ifneq ($(OPENJDK_TARGET_OS),windows) + $1_REAL_MAPFILE:=$$($1_MAPFILE) ifneq (,$$($1_REORDER)) - $1_REAL_MAPFILE := $$($1_BIN)/mapfile + $1_REAL_MAPFILE:=$$($1_OBJECT_DIR)/mapfile $$($1_REAL_MAPFILE) : $$($1_MAPFILE) $$($1_REORDER) $$(MKDIR) -p $$(@D) $$(CP) $$($1_MAPFILE) $$@.tmp - $$(SED) -e 's=OUTPUTDIR=$$($1_BIN)=' $$($1_REORDER) >> $$@.tmp + $$(SED) -e 's=OUTPUTDIR=$$($1_OBJECT_DIR)=' $$($1_REORDER) >> $$@.tmp $$(MV) $$@.tmp $$@ endif endif endif + endif + endif - # Pickup extra HOST_OS_API dependent variables (posix or winapi) and + # Pickup extra OPENJDK_TARGET_OS_API dependent variables (posix or winapi) and # (linux,solaris,windows,bsd) for LDFLAGS and LDFLAGS_SUFFIX - $1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(HOST_OS_API)) $$($1_LDFLAGS_$(PLATFORM)) - $1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(HOST_OS_API)) $$($1_LDFLAGS_SUFFIX_$(PLATFORM)) + $1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_LDFLAGS_$(OPENJDK_TARGET_OS)) + $1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(OPENJDK_TARGET_OS_API)) $$($1_LDFLAGS_SUFFIX_$(OPENJDK_TARGET_OS)) ifneq (,$$($1_REAL_MAPFILE)) - $1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE)) + $1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE)) endif - ifneq (,$$($1_LIB)) - ifeq (dynamic,$$(patsubst %$(SHARED_LIBRARY_SUFFIX),dynamic,$$($1_LIB))) - # Generating a dynamic library. - $1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$(notdir $$($1_LIB))) - $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) - $$(call LINKING_MSG,$$(notdir $$($1_LIB))) - $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$($1_LIB) \ - $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) - else - # Generating a static library, ie object file archive. - $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) - $$(call ARCHIVING_MSG,$$(notdir $$($1_LIB))) - $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_LIB) $$($1_EXPECTED_OBJS) \ - $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) - endif + $1 := $$($1_TARGET) + ifneq (,$$($1_LIBRARY)) + # Generating a dynamic library. + $1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$($1_BASENAME)) + ifeq ($(OPENJDK_TARGET_OS), windows) + $1_EXTRA_LDFLAGS+="-implib:$$($1_OBJECT_DIR)/$$($1_LIBRARY).lib" + endif + + ifneq (,$$($1_DEBUG_SYMBOLS)) + ifeq ($(ENABLE_DEBUG_SYMBOLS), yes) + ifeq ($(OPENJDK_TARGET_OS), windows) + $1_EXTRA_LDFLAGS+="-pdb:$$($1_OBJECT_DIR)/$$($1_LIBRARY).pdb" \ + "-map:$$($1_OBJECT_DIR)/$$($1_LIBRARY).map" + endif + + $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/% + $(CP) $$< $$@ + + + ifeq ($(OPENJDK_TARGET_OS), solaris) + # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. + # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from + # empty section headers until a fixed $(OBJCOPY) is available. + # An empty section header has sh_addr == 0 and sh_size == 0. + # This problem has only been seen on Solaris X64, but we call this tool + # on all Solaris builds just in case. + # + # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. + # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \ + $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK) + $(RM) $$@ + $(FIX_EMPTY_SEC_HDR_FLAGS) $$< + $(OBJCOPY) --only-keep-debug $$< $$@ + $(ADD_GNU_DEBUGLINK) $$@ $$< + else # not solaris + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) + $(RM) $$@ + $(OBJCOPY) --only-keep-debug $$< $$@ + $(OBJCOPY) --add-gnu-debuglink=$$@ $$< + endif + + ifeq ($(ZIP_DEBUGINFO_FILES), 1) + $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz + + ifeq ($(OPENJDK_TARGET_OS), windows) + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz : $$($1_TARGET) + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$($1_LIBRARY).map $$($1_LIBRARY).pdb + else + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz : $$($1_TARGET) \ + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo + endif + else + ifeq ($(OPENJDK_TARGET_OS), windows) + $1 += $$($1_OUTPUT_DIR)/$$($1_LIBRARY).map \ + $$($1_OUTPUT_DIR)/$$($1_LIBRARY).pdb + else + $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo + endif + endif + endif + endif + + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) + $$(call LINKING_MSG,$$($1_BASENAME)) + $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$@ \ + $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ + $$($1_EXTRA_LDFLAGS_SUFFIX) + endif - ifneq (,$$($1_EXE)) + + ifneq (,$$($1_STATIC_LIBRARY)) + # Generating a static library, ie object file archive. + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) + $$(call ARCHIVING_MSG,$$($1_LIBRARY)) + $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \ + $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) + endif + + ifneq (,$$($1_PROGRAM)) # A executable binary has been specified, setup the target for it. - $$($1_EXE) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_GEN_MANIFEST) - $$(call LINKING_EXE_MSG,$$(notdir $$($1_EXE))) - $$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_EXE) \ + ifneq (,$$($1_DEBUG_SYMBOLS)) + ifeq ($(ENABLE_DEBUG_SYMBOLS), yes) + ifeq ($(OPENJDK_TARGET_OS), windows) + $1_EXTRA_LDFLAGS+="-pdb:$$($1_OBJECT_DIR)/$$($1_PROGRAM).pdb" \ + "-map:$$($1_OBJECT_DIR)/$$($1_PROGRAM).map" + endif + + $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/% + $(CP) $$< $$@ + + ifeq ($(OPENJDK_TARGET_OS), solaris) + # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. + # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from + # empty section headers until a fixed $(OBJCOPY) is available. + # An empty section header has sh_addr == 0 and sh_size == 0. + # This problem has only been seen on Solaris X64, but we call this tool + # on all Solaris builds just in case. + # + # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. + # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. + $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \ + $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK) + $(RM) $$@ + $(FIX_EMPTY_SEC_HDR_FLAGS) $$< + $(OBJCOPY) --only-keep-debug $$< $$@ + $(ADD_GNU_DEBUGLINK) $$@ $$< + else # not solaris + $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) + $(RM) $$@ + $(OBJCOPY) --only-keep-debug $$< $$@ + $(OBJCOPY) --add-gnu-debuglink=$$@ $$< + endif + + ifeq ($(ZIP_DEBUGINFO_FILES), 1) + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).diz + + ifeq ($(OPENJDK_TARGET_OS), windows) + $$($1_OBJECT_DIR)/$$($1_PROGRAM).diz : $$($1_TARGET) + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$($1_PROGRAM).map $$($1_PROGRAM).pdb + else + $$($1_OBJECT_DIR)/$$(PROGRAM_PREFIX)$$($1_PROGRAM).diz : $$($1_TARGET) \ + $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$($1_PROGRAM).debuginfo + endif + else + ifeq ($(OPENJDK_TARGET_OS), windows) + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).map \ + $$($1_OUTPUT_DIR)/$$($1_PROGRAM).pdb + else + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).debuginfo + endif + endif + endif + endif + + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_GEN_MANIFEST) + $$(call LINKING_EXE_MSG,$$($1_BASENAME)) + $$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_TARGET) \ $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ $$($1_EXTRA_LDFLAGS_SUFFIX) ifneq (,$$($1_GEN_MANIFEST)) $(MT) -nologo /manifest $$($1_GEN_MANIFEST) /outputresource:$$@;#1 endif + endif endef diff --git a/common/makefiles/RMICompile.gmk b/common/makefiles/RMICompile.gmk deleted file mode 100644 index b6168dae7be..00000000000 --- a/common/makefiles/RMICompile.gmk +++ /dev/null @@ -1,103 +0,0 @@ -# -# Copyright (c) 2011, 2012 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -define SetupRMICompilation - # param 1 is a name for a variable to depend on. - # param 2 and up are named args. - # CLASSES:=List of classes to generate stubs for - # CLASSES_DIR:=Directory where to look for classes - # 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 - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - - - $1_DEP_FILE := $$($1_STUB_CLASSES_DIR)/$1_rmic - - $1_CLASSES_SLASH := $$(subst .,/,$$($1_CLASSES)) - $1_CLASS_FILES := $$(addprefix $$($1_CLASSES_DIR)/,$$(addsuffix .class,$$($1_CLASSES_SLASH))) - $1_STUB_FILES := $$(addprefix $$($1_STUB_CLASSES_DIR)/,$$(addsuffix _Stub.class,$$($1_CLASSES_SLASH))) - $1_TARGETS := $$($1_STUB_FILES) - $1_ARGS := - ifneq (,$$($1_RUN_V11)) - $1_SKEL_FILES := $$(addprefix $$($1_STUB_CLASSES_DIR)/,$$(addsuffix _Skel.class,$$($1_CLASSES_SLASH))) - $1_TARGETS += $$($1_SKEL_FILES) - $1_ARGS += -v1.1 - endif - ifneq (,$$($1_RUN_V12)) - $1_ARGS += -v1.2 - endif - - $1_TIE_BASE_FILES := $$(foreach f,$$($1_CLASSES_SLASH),$$(dir $$f)_$$(notdir $$f)) - $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 - endif - ifneq (,$$($1_RUN_IIOP_STDPKG)) - $1_TARGETS += $$($1_TIE_STDPKG_FILES) - $1_ARGS2 := -iiop -standardPackage - endif - - ifneq (,$$($1_KEEP_GENERATED)) - $1_ARGS += -keepgenerated - $1_TARGETS += $$(subst .class,.java,$$($1_TARGETS)) - endif - - $1_DOLLAR_SAFE_CLASSES := $$(subst $$$$,\$$$$,$$($1_CLASSES)) - - $$($1_TARGETS): $$($1_DEP_FILE) $$($1_CLASS_FILES) - - $$($1_DEP_FILE): $$($1_CLASS_FILES) - $(MKDIR) -p $$($1_STUB_CLASSES_DIR) - if [ "x$$($1_ARGS)" != "x" ]; then \ - $(ECHO) Running rmic $$($1_ARGS) for $$($1_DOLLAR_SAFE_CLASSES) &&\ - $(RMIC) $$($1_ARGS) -classpath "$$($1_CLASSES_DIR)" \ - -d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES);\ - fi; - if [ "x$$($1_ARGS2)" != "x" ]; then \ - $(ECHO) Running rmic $$($1_ARGS2) for $$($1_DOLLAR_SAFE_CLASSES) &&\ - $(RMIC) $$($1_ARGS2) -classpath "$$($1_CLASSES_DIR)" \ - -d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES);\ - fi; - - - $1 := $$($1_TARGETS) - - # By marking as secondary, this "touch" file doesn't need to be touched and will never exist. - .SECONDARY: $$($1_DEP_FILE) -endef From 046f2c92e27737091d5026d9ff621bf42930ecb3 Mon Sep 17 00:00:00 2001 From: Xue-Lei Andrew Fan Date: Tue, 3 Jul 2012 20:29:16 -0700 Subject: [PATCH 61/83] 7180038: regression test failure, SSLEngineBadBufferArrayAccess.java Reviewed-by: weijun --- .../SSLEngineBadBufferArrayAccess.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java index f9cd5185b33..aeaf5792cb9 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, 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 @@ -287,18 +287,27 @@ public class SSLEngineBadBufferArrayAccess { if (serverClose) { serverEngine.closeOutbound(); } + } + + if (closed && isEngineClosed(serverEngine)) { serverIn.flip(); /* * A sanity check to ensure we got what was sent. */ if (serverIn.remaining() != clientMsg.length) { - throw new Exception("Client: Data length error"); + throw new Exception("Client: Data length error -" + + " IF THIS FAILS, PLEASE REPORT THIS TO THE" + + " SECURITY TEAM. WE HAVE BEEN UNABLE TO" + + " RELIABLY DUPLICATE."); } for (int i = 0; i < clientMsg.length; i++) { if (clientMsg[i] != serverIn.get()) { - throw new Exception("Client: Data content error"); + throw new Exception("Client: Data content error -" + + " IF THIS FAILS, PLEASE REPORT THIS TO THE" + + " SECURITY TEAM. WE HAVE BEEN UNABLE TO" + + " RELIABLY DUPLICATE."); } } serverIn.compact(); From 34570ba690704271f5c09a8cb87fe9fc1ab034c4 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Thu, 5 Jul 2012 18:27:07 -0700 Subject: [PATCH 62/83] 7182051: Update of latest build-infra Makefiles (missing files) Reviewed-by: ohair --- common/autoconf/basics.m4 | 485 + common/autoconf/boot-jdk.m4 | 295 + .../autoconf/build-aux/autoconf-config.guess | 1531 ++ common/autoconf/build-performance.m4 | 378 + common/autoconf/generated-configure.sh | 18054 ++++++++++++++++ common/autoconf/jdk-options.m4 | 551 + common/autoconf/libraries.m4 | 642 + common/autoconf/source-dirs.m4 | 280 + common/autoconf/spec.sh.in | 527 + common/autoconf/toolchain.m4 | 908 + common/bin/compare-objects.sh | 235 + common/makefiles/IdlCompilation.gmk | 18 +- common/makefiles/MakeHelpers.gmk | 185 + common/makefiles/NativeCompilation.gmk | 12 +- common/makefiles/RMICompilation.gmk | 104 + 15 files changed, 24191 insertions(+), 14 deletions(-) create mode 100644 common/autoconf/basics.m4 create mode 100644 common/autoconf/boot-jdk.m4 create mode 100644 common/autoconf/build-aux/autoconf-config.guess create mode 100644 common/autoconf/build-performance.m4 create mode 100644 common/autoconf/generated-configure.sh create mode 100644 common/autoconf/jdk-options.m4 create mode 100644 common/autoconf/libraries.m4 create mode 100644 common/autoconf/source-dirs.m4 create mode 100644 common/autoconf/spec.sh.in create mode 100644 common/autoconf/toolchain.m4 create mode 100644 common/bin/compare-objects.sh create mode 100644 common/makefiles/MakeHelpers.gmk create mode 100644 common/makefiles/RMICompilation.gmk diff --git a/common/autoconf/basics.m4 b/common/autoconf/basics.m4 new file mode 100644 index 00000000000..370854d45fc --- /dev/null +++ b/common/autoconf/basics.m4 @@ -0,0 +1,485 @@ +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +AC_DEFUN([ADD_JVM_ARG_IF_OK], +[ + # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3) + # If so, then append $1 to $2 + FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + $2="[$]$2 $1" + fi +]) + +AC_DEFUN([WHICHCMD], +[ + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="[$]$1" + car="${tmp%% *}" + tmp="[$]$1 EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + WHICHCMD_SPACESAFE(car) + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + $1="$car ${cdr% *}" + else + $1="$car" + fi +]) + +AC_DEFUN([SPACESAFE], +[ + # Fail with message $2 if var $1 contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "[$]$1" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + $1=`$CYGPATH -s -m -a "[$]$1"` + $1=`$CYGPATH -u "[$]$1"` + else + AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"]) + fi + fi +]) + +AC_DEFUN([WHICHCMD_SPACESAFE], +[ + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="[$]$1" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "[$]$1"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + $1="$tmp" +]) + +AC_DEFUN([REMOVE_SYMBOLIC_LINKS], +[ + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + AC_PATH_PROG(READLINK, readlink) + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | grep GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + $1=`$READLINK -f [$]$1` + else + STARTDIR=$PWD + COUNTER=0 + DIR=`dirname [$]$1` + FIL=`basename [$]$1` + while test $COUNTER -lt 20; do + ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $DIR + cd `dirname $ISLINK` + DIR=`pwd` + FIL=`basename $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + $1=$DIR/$FIL + fi + fi +]) + +AC_DEFUN_ONCE([BASIC_INIT], +[ +# Save the original command line. This is passed to us by the wrapper configure script. +AC_SUBST(CONFIGURE_COMMAND_LINE) +DATE_WHEN_CONFIGURED=`LANG=C date` +AC_SUBST(DATE_WHEN_CONFIGURED) + +# Locate the directory of this script. +SCRIPT="[$]0" +REMOVE_SYMBOLIC_LINKS(SCRIPT) +AUTOCONF_DIR=`dirname [$]0` +]) + +AC_DEFUN_ONCE([BASIC_SETUP_PATHS], +[ +# Where is the source? It is located two levels above the configure script. +CURDIR="$PWD" +cd "$AUTOCONF_DIR/../.." +SRC_ROOT="`pwd`" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + SRC_ROOT_LENGTH=`pwd|wc -m` + if test $SRC_ROOT_LENGTH -gt 100; then + AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported]) + fi +fi +AC_SUBST(SRC_ROOT) +cd "$CURDIR" + +SPACESAFE(SRC_ROOT,[the path to the source root]) +SPACESAFE(CURDIR,[the path to the current directory]) +]) + +AC_DEFUN_ONCE([BASIC_SETUP_SEARCHPATH], +[ +if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then + # Add extra search paths on solaris for utilities like ar and as etc... + PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" +fi +]) + +AC_DEFUN_ONCE([BASIC_SETUP_PATH_SEP], +[ +# For cygwin we need cygpath first, since it is used everywhere. +AC_PATH_PROG(CYGPATH, cygpath) +PATH_SEP=":" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$CYGPATH" = x; then + AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) + fi + PATH_SEP=";" +fi +AC_SUBST(PATH_SEP) +]) + +AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR], +[ + +AC_ARG_WITH(conf-name, [AS_HELP_STRING([--with-conf-name], + [use this as the name of the configuration, overriding the generated default])], + [ CONF_NAME=${with_conf_name} ]) + +# Test from where we are running configure, in or outside of src root. +if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then + # We are running configure from the src root. + # Create a default ./build/target-variant-debuglevel output root. + if test "x${CONF_NAME}" = x; then + CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + fi + OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" + mkdir -p "$OUTPUT_ROOT" + if test ! -d "$OUTPUT_ROOT"; then + AC_MSG_ERROR([Could not create build directory $OUTPUT_ROOT]) + fi +else + # We are running configure from outside of the src dir. + # Then use the current directory as output dir! + # If configuration is situated in normal build directory, just use the build + # directory name as configuration name, otherwise use the complete path. + if test "x${CONF_NAME}" = x; then + CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` + fi + OUTPUT_ROOT="$CURDIR" +fi + +SPACESAFE(OUTPUT_ROOT,[the path to the output root]) + +AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk) +AC_SUBST(CONF_NAME, $CONF_NAME) +AC_SUBST(OUTPUT_ROOT, $OUTPUT_ROOT) + +# Most of the probed defines are put into config.h +AC_CONFIG_HEADERS([$OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in]) +# The spec.gmk file contains all variables for the make system. +AC_CONFIG_FILES([$OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in]) +# The spec.sh file contains variables for compare{images|-objects}.sh scrips. +AC_CONFIG_FILES([$OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in]) +# The generated Makefile knows where the spec.gmk is and where the source is. +# You can run make from the OUTPUT_ROOT, or from the top-level Makefile +# which will look for generated configurations +AC_CONFIG_FILES([$OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in]) + +# Save the arguments given to us +echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments +]) + +AC_DEFUN_ONCE([BASIC_SETUP_LOGGING], +[ +# Setup default logging of stdout and stderr to build.log in the output root. +BUILD_LOG='$(OUTPUT_ROOT)/build.log' +BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' +BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' +AC_SUBST(BUILD_LOG) +AC_SUBST(BUILD_LOG_PREVIOUS) +AC_SUBST(BUILD_LOG_WRAPPER) +]) + + +#%%% Simple tools %%% + +AC_DEFUN([BASIC_CHECK_FIND_DELETE], +[ + # Test if find supports -delete + AC_MSG_CHECKING([if find supports -delete]) + FIND_DELETE="-delete" + + DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) + + echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete + + TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` + if test -f $DELETEDIR/TestIfFindSupportsDelete; then + # No, it does not. + rm $DELETEDIR/TestIfFindSupportsDelete + FIND_DELETE="-exec rm \{\} \+" + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + fi + rmdir $DELETEDIR +]) + +AC_DEFUN([CHECK_NONEMPTY], +[ + # Test that variable $1 is not empty. + if test "" = "[$]$1"; then AC_MSG_ERROR(Could not find translit($1,A-Z,a-z) !); fi +]) + +AC_DEFUN_ONCE([BASIC_SETUP_TOOLS], +[ +# Start with tools that do not need have cross compilation support +# and can be expected to be found in the default PATH. These tools are +# used by configure. Nor are these tools expected to be found in the +# devkit from the builddeps server either, since they are +# needed to download the devkit. +AC_PROG_AWK +CHECK_NONEMPTY(AWK) +AC_PATH_PROG(CAT, cat) +CHECK_NONEMPTY(CAT) +AC_PATH_PROG(CHMOD, chmod) +CHECK_NONEMPTY(CHMOD) +AC_PATH_PROG(CP, cp) +CHECK_NONEMPTY(CP) +AC_PATH_PROG(CPIO, cpio) +CHECK_NONEMPTY(CPIO) +AC_PATH_PROG(CUT, cut) +CHECK_NONEMPTY(CUT) +AC_PATH_PROG(DATE, date) +CHECK_NONEMPTY(DATE) +AC_PATH_PROG(DF, df) +CHECK_NONEMPTY(DF) +AC_PATH_PROG(DIFF, diff) +CHECK_NONEMPTY(DIFF) +# Warning echo is really, really unportable!!!!! Different +# behaviour in bash and dash and in a lot of other shells! +# Use printf for serious work! +AC_PATH_PROG(ECHO, echo) +CHECK_NONEMPTY(ECHO) +AC_PROG_EGREP +CHECK_NONEMPTY(EGREP) +AC_PROG_FGREP +CHECK_NONEMPTY(FGREP) + +AC_PATH_PROG(FIND, find) +CHECK_NONEMPTY(FIND) +BASIC_CHECK_FIND_DELETE +AC_SUBST(FIND_DELETE) + +AC_PROG_GREP +CHECK_NONEMPTY(GREP) +AC_PATH_PROG(HEAD, head) +CHECK_NONEMPTY(HEAD) +AC_PATH_PROG(LN, ln) +CHECK_NONEMPTY(LN) +AC_PATH_PROG(LS, ls) +CHECK_NONEMPTY(LS) +AC_PATH_PROGS(MAKE, [gmake make]) +CHECK_NONEMPTY(MAKE) +MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[[12346789]]'` +if test "x$MAKE_VERSION" = x; then + AC_MSG_ERROR([You must use GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure.]) +fi +AC_PATH_PROG(MKDIR, mkdir) +CHECK_NONEMPTY(MKDIR) +AC_PATH_PROG(MV, mv) +CHECK_NONEMPTY(MV) +AC_PATH_PROGS(NAWK, [nawk gawk awk]) +CHECK_NONEMPTY(NAWK) +AC_PATH_PROG(PRINTF, printf) +CHECK_NONEMPTY(PRINTF) +AC_PATH_PROG(THEPWDCMD, pwd) +AC_PATH_PROG(RM, rm) +CHECK_NONEMPTY(RM) +RM="$RM -f" +AC_PROG_SED +CHECK_NONEMPTY(SED) +AC_PATH_PROG(SH, sh) +CHECK_NONEMPTY(SH) +AC_PATH_PROG(SORT, sort) +CHECK_NONEMPTY(SORT) +AC_PATH_PROG(TAR, tar) +CHECK_NONEMPTY(TAR) +AC_PATH_PROG(TAIL, tail) +CHECK_NONEMPTY(TAIL) +AC_PATH_PROG(TEE, tee) +CHECK_NONEMPTY(TEE) +AC_PATH_PROG(TR, tr) +CHECK_NONEMPTY(TR) +AC_PATH_PROG(TOUCH, touch) +CHECK_NONEMPTY(TOUCH) +AC_PATH_PROG(WC, wc) +CHECK_NONEMPTY(WC) +AC_PATH_PROG(XARGS, xargs) +CHECK_NONEMPTY(XARGS) +AC_PATH_PROG(ZIP, zip) +CHECK_NONEMPTY(ZIP) +AC_PATH_PROG(UNZIP, unzip) +CHECK_NONEMPTY(UNZIP) +AC_PATH_PROG(LDD, ldd) +if test "x$LDD" = "x"; then + # List shared lib dependencies is used for + # debug output and checking for forbidden dependencies. + # We can build without it. + LDD="true" +fi +AC_PATH_PROG(OTOOL, otool) +if test "x$OTOOL" = "x"; then + OTOOL="true" +fi +AC_PATH_PROG(READELF, readelf) +AC_PATH_PROG(EXPR, expr) +CHECK_NONEMPTY(EXPR) +AC_PATH_PROG(FILE, file) +CHECK_NONEMPTY(FILE) +AC_PATH_PROG(HG, hg) +]) + + + +AC_DEFUN_ONCE([BASIC_COMPILE_UNCYGDRIVE], +[ +# When using cygwin, we need a wrapper binary that renames +# /cygdrive/c/ arguments into c:/ arguments and peeks into +# @files and rewrites these too! This wrapper binary is +# called uncygdrive.exe. +UNCYGDRIVE= +if test "x$OPENJDK_BUILD_OS" = xwindows; then + AC_MSG_CHECKING([if uncygdrive can be created]) + UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` + rm -f $OUTPUT_ROOT/uncygdrive* + UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` + cd $OUTPUT_ROOT + $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 + cd $CURDIR + + if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then + AC_MSG_RESULT([no]) + cat $OUTPUT_ROOT/uncygdrive1.log + AC_MSG_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe]) + fi + AC_MSG_RESULT([$UNCYGDRIVE]) + AC_MSG_CHECKING([if uncygdrive.exe works]) + cd $OUTPUT_ROOT + $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 + cd $CURDIR + if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then + AC_MSG_RESULT([no]) + cat $OUTPUT_ROOT/uncygdrive2.log + AC_MSG_ERROR([Uncygdrive did not work!]) + fi + AC_MSG_RESULT([yes]) + rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj +fi + +AC_SUBST(UNCYGDRIVE) +]) + + +# Check if build directory is on local disk. +# Argument 1: directory to test +# Argument 2: what to do if it is on local disk +# Argument 3: what to do otherwise (remote disk or failure) +AC_DEFUN([BASIC_CHECK_DIR_ON_LOCAL_DISK], +[ + # df -l lists only local disks; if the given directory is not found then + # a non-zero exit code is given + if $DF -l $1 > /dev/null 2>&1; then + $2 + else + $3 + fi +]) + +AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES], +[ + +AC_MSG_CHECKING([if build directory is on local disk]) +BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUT_ROOT, + [OUTPUT_DIR_IS_LOCAL="yes"], + [OUTPUT_DIR_IS_LOCAL="no"]) +AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL) + +# Check if the user has any old-style ALT_ variables set. +FOUND_ALT_VARIABLES=`env | grep ^ALT_` + +# Before generating output files, test if they exist. If they do, this is a reconfigure. +# Since we can't properly handle the dependencies for this, warn the user about the situation +if test -e $OUTPUT_ROOT/spec.gmk; then + IS_RECONFIGURE=yes +else + IS_RECONFIGURE=no +fi + +if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then + HIDE_PERFORMANCE_HINTS=yes +else + HIDE_PERFORMANCE_HINTS=no + # Hide it the next time around... + $TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1 +fi + +]) diff --git a/common/autoconf/boot-jdk.m4 b/common/autoconf/boot-jdk.m4 new file mode 100644 index 00000000000..f8204f9c2d2 --- /dev/null +++ b/common/autoconf/boot-jdk.m4 @@ -0,0 +1,295 @@ +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +# Fixes paths on windows to be mixed mode short. +AC_DEFUN([BOOTJDK_WIN_FIX_PATH], +[ + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + AC_PATH_PROG(CYGPATH, cygpath) + tmp="[$]$1" + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + $1="$tmp" + fi +]) + +AC_DEFUN([BOOTJDK_MISSING_ERROR], +[ + AC_MSG_NOTICE([This might be fixed by explicitely setting --with-boot-jdk]) + AC_MSG_ERROR([Cannot continue]) +]) + +############################################################################### +# +# We need a Boot JDK to bootstrap the build. +# + +AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK], +[ +BOOT_JDK_FOUND=no +AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk], + [path to Boot JDK (used to bootstrap build) @<:@probed@:>@])]) + +if test "x$with_boot_jdk" != x; then + BOOT_JDK=$with_boot_jdk + BOOT_JDK_FOUND=yes +fi +if test "x$BOOT_JDK_FOUND" = xno; then + BDEPS_CHECK_MODULE(BOOT_JDK, boot-jdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no]) +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + if test "x$JAVA_HOME" != x; then + if test ! -d "$JAVA_HOME"; then + AC_MSG_NOTICE([Your JAVA_HOME points to a non-existing directory!]) + BOOTJDK_MISSING_ERROR + fi + # Aha, the user has set a JAVA_HOME + # let us use that as the Boot JDK. + BOOT_JDK="$JAVA_HOME" + BOOT_JDK_FOUND=yes + # To be on the safe side, lets check that it is a JDK. + if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then + JAVAC="$BOOT_JDK/bin/javac" + JAVA="$BOOT_JDK/bin/java" + BOOT_JDK_FOUND=yes + else + AC_MSG_NOTICE([Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=[$]JAVA_HOME]) + BOOTJDK_MISSING_ERROR + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + AC_PATH_PROG(JAVAC_CHECK, javac) + AC_PATH_PROG(JAVA_CHECK, java) + BINARY="$JAVAC_CHECK" + if test "x$JAVAC_CHECK" = x; then + BINARY="$JAVA_CHECK" + fi + if test "x$BINARY" != x; then + # So there is a java(c) binary, it might be part of a JDK. + # Lets find the JDK/JRE directory by following symbolic links. + # Linux/GNU systems often have links from /usr/bin/java to + # /etc/alternatives/java to the real JDK binary. + WHICHCMD_SPACESAFE(BINARY,[path to javac]) + REMOVE_SYMBOLIC_LINKS(BINARY) + BOOT_JDK=`dirname $BINARY` + BOOT_JDK=`cd $BOOT_JDK/..; pwd` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Try the MacOSX way. + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + AC_PATH_PROG(JAVA_CHECK, java) + if test "x$JAVA_CHECK" != x; then + # There is a java in the path. But apparently we have not found a javac + # in the path, since that would have been tested earlier. + if test "x$OPENJDK_TARGET_OS" = xwindows; then + # Now if this is a windows platform. The default installation of a JDK + # actually puts the JRE in the path and keeps the JDK out of the path! + # Go look in the default installation location. + BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=yes + fi + fi + if test "x$BOOT_JDK_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([openjdk]) + AC_MSG_NOTICE([Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG]) + BOOTJDK_MISSING_ERROR + fi + else + HELP_MSG_MISSING_DEPENDENCY([openjdk]) + AC_MSG_NOTICE([Could not find a JDK. $HELP_MSG]) + BOOTJDK_MISSING_ERROR + fi +fi + +BOOTJDK_WIN_FIX_PATH(BOOT_JDK) + +# Now see if we can find the rt.jar, or its nearest equivalent. +BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" +SPACESAFE(BOOT_RTJAR,[the path to the Boot JDK rt.jar (or nearest equivalent)]) + +BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" +SPACESAFE(BOOT_TOOLSJAR,[the path to the Boot JDK tools.jar (or nearest equivalent)]) + +if test ! -f $BOOT_RTJAR; then + # On MacOSX it is called classes.jar + BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar + if test ! -f $BOOT_RTJAR; then + AC_MSG_NOTICE([Cannot find the rt.jar or its equivalent!]) + AC_MSG_NOTICE([This typically means that configure failed to automatically find a suitable Boot JDK]) + BOOTJDK_MISSING_ERROR + fi + # Remove the .. + BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" + # The tools.jar is part of classes.jar + BOOT_TOOLSJAR="$BOOT_RTJAR" +fi + +AC_SUBST(BOOT_JDK) +AC_SUBST(BOOT_RTJAR) +AC_SUBST(BOOT_TOOLSJAR) +AC_MSG_CHECKING([for Boot JDK]) +AC_MSG_RESULT([$BOOT_JDK]) +AC_MSG_CHECKING([for Boot rt.jar]) +AC_MSG_RESULT([$BOOT_RTJAR]) +AC_MSG_CHECKING([for Boot tools.jar]) +AC_MSG_RESULT([$BOOT_TOOLSJAR]) + +# Use the java tool from the Boot JDK. +AC_MSG_CHECKING([for java in Boot JDK]) +JAVA=$BOOT_JDK/bin/java +if test ! -x $JAVA; then + AC_MSG_NOTICE([Could not find a working java]) + BOOTJDK_MISSING_ERROR +fi +BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` +AC_MSG_RESULT([yes $BOOT_JDK_VERSION]) +AC_SUBST(JAVA) + +# Extra M4 quote needed to protect [] in grep expression. +[FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`] +if test "x$FOUND_VERSION_78" = x; then + HELP_MSG_MISSING_DEPENDENCY([openjdk]) + AC_MSG_NOTICE([Your boot-jdk must be version 7 or 8. $HELP_MSG]) + BOOTJDK_MISSING_ERROR +fi + +# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. +BOOT_JDK_SOURCETARGET="-source 7 -target 7" +AC_SUBST(BOOT_JDK_SOURCETARGET) + +# Use the javac tool from the Boot JDK. +AC_MSG_CHECKING([for javac in Boot JDK]) +JAVAC=$BOOT_JDK/bin/javac +if test ! -x $JAVAC; then + AC_MSG_ERROR([Could not find a working javac]) +fi +AC_MSG_RESULT(yes) +AC_SUBST(JAVAC) +AC_SUBST(JAVAC_FLAGS) + +# Use the javah tool from the Boot JDK. +AC_MSG_CHECKING([for javah in Boot JDK]) +JAVAH=$BOOT_JDK/bin/javah +if test ! -x $JAVAH; then + AC_MSG_NOTICE([Could not find a working javah]) + BOOTJDK_MISSING_ERROR +fi +AC_MSG_RESULT(yes) +AC_SUBST(JAVAH) + +# Use the jar tool from the Boot JDK. +AC_MSG_CHECKING([for jar in Boot JDK]) +JAR=$BOOT_JDK/bin/jar +if test ! -x $JAR; then + AC_MSG_NOTICE([Could not find a working jar]) + BOOTJDK_MISSING_ERROR +fi +AC_SUBST(JAR) +AC_MSG_RESULT(yes) + +# Use the rmic tool from the Boot JDK. +AC_MSG_CHECKING([for rmic in Boot JDK]) +RMIC=$BOOT_JDK/bin/rmic +if test ! -x $RMIC; then + AC_MSG_NOTICE([Could not find a working rmic]) + BOOTJDK_MISSING_ERROR +fi +AC_SUBST(RMIC) +AC_MSG_RESULT(yes) + +# Use the native2ascii tool from the Boot JDK. +AC_MSG_CHECKING([for native2ascii in Boot JDK]) +NATIVE2ASCII=$BOOT_JDK/bin/native2ascii +if test ! -x $NATIVE2ASCII; then + AC_MSG_NOTICE([Could not find a working native2ascii]) + BOOTJDK_MISSING_ERROR +fi +AC_MSG_RESULT(yes) +AC_SUBST(NATIVE2ASCII) +]) + +AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], +[ +############################################################################## +# +# Specify options for anything that is run with the Boot JDK. +# +AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs], + [specify JVM arguments to be passed to all invocations of the Boot JDK, overriding the default values, + e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])]) + +if test "x$with_boot_jdk_jvmargs" = x; then + # Not all JVM:s accept the same arguments on the command line. + # OpenJDK specific increase in thread stack for JDK build, + # well more specifically, when running javac. + if test "x$BUILD_NUM_BITS" = x32; then + STACK_SIZE=768 + else + # Running Javac on a JVM on a 64-bit machine, the stack takes more space + # since 64-bit pointers are pushed on the stach. Apparently, we need + # to increase the stack space when javacing the JDK.... + STACK_SIZE=1536 + fi + + # Minimum amount of heap memory. + ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA]) + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + # Why does macosx need more heap? Its the huge JDK batch. + ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA]) + else + ADD_JVM_ARG_IF_OK([-Xmx1100M],boot_jdk_jvmargs,[$JAVA]) + fi + # When is adding -client something that speeds up the JVM? + # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-XX:MaxPermSize=160m],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs,[$JAVA]) + # Disable special log output when a debug build is used as Boot JDK... + ADD_JVM_ARG_IF_OK([-XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput],boot_jdk_jvmargs,[$JAVA]) +fi + +AC_SUBST(BOOT_JDK_JVMARGS, $boot_jdk_jvmargs) +]) diff --git a/common/autoconf/build-aux/autoconf-config.guess b/common/autoconf/build-aux/autoconf-config.guess new file mode 100644 index 00000000000..e69905d5201 --- /dev/null +++ b/common/autoconf/build-aux/autoconf-config.guess @@ -0,0 +1,1531 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-01-23' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + echo "int main(){}" > $dummy.c + if test "`$CC_FOR_BUILD -o $dummy $dummy.c; file $dummy | grep -c x86_64`" = 1 ; then + UNAME_PROCESSOR=x86_64 + fi + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/common/autoconf/build-performance.m4 b/common/autoconf/build-performance.m4 new file mode 100644 index 00000000000..964f890b792 --- /dev/null +++ b/common/autoconf/build-performance.m4 @@ -0,0 +1,378 @@ +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +AC_DEFUN([BPERF_CHECK_CORES], +[ + AC_MSG_CHECKING([for number of cores]) + NUM_CORES=1 + FOUND_CORES=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + NUM_CORES=`cat /proc/cpuinfo | grep -c processor` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/psrinfo; then + # Looks like a Solaris system + NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` + FOUND_CORES=yes + fi + + if test "x$build_os" = xwindows; then + NUM_CORES=4 + fi + + # For c/c++ code we run twice as many concurrent build + # jobs than we have cores, otherwise we will stall on io. + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` + + if test "x$FOUND_CORES" = xyes; then + AC_MSG_RESULT([$NUM_CORES]) + else + AC_MSG_RESULT([could not detect number of cores, defaulting to 1!]) + fi + +]) + +AC_DEFUN([BPERF_CHECK_MEMORY_SIZE], +[ + AC_MSG_CHECKING([for memory size]) + # Default to 1024MB + MEMORY_SIZE=1024 + FOUND_MEM=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/prtconf; then + # Looks like a Solaris system + MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` + FOUND_MEM=yes + fi + + if test "x$build_os" = xwindows; then + MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'` + FOUND_MEM=yes + fi + + if test "x$FOUND_MEM" = xyes; then + AC_MSG_RESULT([$MEMORY_SIZE MB]) + else + AC_MSG_RESULT([could not detect memory size defaulting to 1024MB!]) + fi +]) + +AC_DEFUN_ONCE([BPERF_SETUP_BUILD_CORES], +[ +# How many cores do we have on this build system? +AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores], + [number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])]) +if test "x$with_num_cores" = x; then + # The number of cores were not specified, try to probe them. + BPERF_CHECK_CORES +else + NUM_CORES=$with_num_cores + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` +fi +AC_SUBST(NUM_CORES) +AC_SUBST(CONCURRENT_BUILD_JOBS) +]) + +AC_DEFUN_ONCE([BPERF_SETUP_BUILD_MEMORY], +[ +# How much memory do we have on this build system? +AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size], + [memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])]) +if test "x$with_memory_size" = x; then + # The memory size was not specified, try to probe it. + BPERF_CHECK_MEMORY_SIZE +else + MEMORY_SIZE=$with_memory_size +fi +AC_SUBST(MEMORY_SIZE) +]) + +AC_DEFUN([BPERF_SETUP_CCACHE], +[ + AC_ARG_ENABLE([ccache], + [AS_HELP_STRING([--disable-ccache], + [use ccache to speed up recompilations @<:@enabled@:>@])], + [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) + if test "x$ENABLE_CCACHE" = xyes; then + AC_PATH_PROG(CCACHE, ccache) + else + AC_MSG_CHECKING([for ccache]) + AC_MSG_RESULT([explicitly disabled]) + CCACHE= + fi + AC_SUBST(CCACHE) + + AC_ARG_WITH([ccache-dir], + [AS_HELP_STRING([--with-ccache-dir], + [where to store ccache files @<:@~/.ccache@:>@])]) + + if test "x$with_ccache_dir" != x; then + # When using a non home ccache directory, assume the use is to share ccache files + # with other users. Thus change the umask. + SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" + fi + CCACHE_FOUND="" + if test "x$CCACHE" != x; then + BPERF_SETUP_CCACHE_USAGE + fi +]) + +AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], +[ + if test "x$CCACHE" != x; then + CCACHE_FOUND="true" + # Only use ccache if it is 3.1.4 or later, which supports + # precompiled headers. + AC_MSG_CHECKING([if ccache supports precompiled headers]) + HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null` + if test "x$HAS_GOOD_CCACHE" = x; then + AC_MSG_RESULT([no, disabling ccache]) + CCACHE= + else + AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) + PUSHED_FLAGS="$CXXFLAGS" + CXXFLAGS="-fpch-preprocess $CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no]) + CXXFLAGS="$PUSHED_FLAGS" + if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no, disabling ccaching of precompiled headers]) + CCACHE= + fi + fi + fi + + if test "x$CCACHE" != x; then + CCACHE_SLOPPINESS=time_macros + CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" + CCACHE_FLAGS=-fpch-preprocess + + if test "x$SET_CCACHE_DIR" != x; then + mkdir -p $CCACHE_DIR > /dev/null 2>&1 + chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 + fi + fi +]) + +AC_DEFUN_ONCE([BPERF_SETUP_PRECOMPILED_HEADERS], +[ + +############################################################################### +# +# Can the C/C++ compiler use precompiled headers? +# +AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers], + [use precompiled headers when compiling C++ @<:@enabled@:>@])], + [ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes]) + +USE_PRECOMPILED_HEADER=1 +if test "x$ENABLE_PRECOMPH" = xno; then + USE_PRECOMPILED_HEADER=0 +fi + +if test "x$ENABLE_PRECOMPH" = xyes; then + # Check that the compiler actually supports precomp headers. + if test "x$GCC" = xyes; then + AC_MSG_CHECKING([that precompiled headers work]) + echo "int alfa();" > conftest.h + $CXX -x c++-header conftest.h -o conftest.hpp.gch + if test ! -f conftest.hpp.gch; then + echo Precompiled header is not working! + USE_PRECOMPILED_HEADER=0 + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + fi + rm -f conftest.h + fi +fi + +AC_SUBST(USE_PRECOMPILED_HEADER) +]) + + +AC_DEFUN_ONCE([BPERF_SETUP_SMART_JAVAC], +[ +AC_ARG_WITH(server-java, [AS_HELP_STRING([--with-server-java], + [use this java binary for running the javac background server and other long running java tasks in the build process, + e.g. ---with-server-java="/opt/jrockit/bin/java -server"])]) + +if test "x$with_server_java" != x; then + SERVER_JAVA="$with_server_java" + FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" = x; then + AC_MSG_ERROR([Could not execute server java: $SERVER_JAVA]) + fi +else + SERVER_JAVA="" + # Hotspot specific options. + ADD_JVM_ARG_IF_OK([-XX:+UseParallelOldGC],SERVER_JAVA,[$JAVA]) + ADD_JVM_ARG_IF_OK([-verbosegc],SERVER_JAVA,[$JAVA]) + # JRockit specific options. + ADD_JVM_ARG_IF_OK([-Xverbose:gc],SERVER_JAVA,[$JAVA]) + SERVER_JAVA="$JAVA $SERVER_JAVA" +fi +AC_SUBST(SERVER_JAVA) + +AC_MSG_CHECKING([whether to use shared server for javac]) +AC_ARG_ENABLE([javac-server], [AS_HELP_STRING([--enable-javac-server], + [enable the shared javac server during the build process @<:@disabled@:>@])], + [ENABLE_JAVAC_SERVER="${enableval}"], [ENABLE_JAVAC_SERVER='no']) +AC_MSG_RESULT([$ENABLE_JAVAC_SERVER]) +if test "x$ENABLE_JAVAC_SERVER" = xyes; then + JAVAC_USE_REMOTE=true + JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" +else + JAVAC_USE_REMOTE=false + JAVAC_SERVERS= +fi +AC_SUBST(JAVAC_USE_REMOTE) +AC_SUBST(JAVAC_SERVERS) + +AC_ARG_WITH(javac-server-cores, [AS_HELP_STRING([--with-javac-server-cores], + [use at most this number of concurrent threads on the javac server @<:@probed@:>@])]) +if test "x$with_javac_server_cores" != x; then + JAVAC_SERVER_CORES="$with_javac_server_cores" +else + if test "$NUM_CORES" -gt 16; then + # We set this arbitrary limit because we want to limit the heap + # size of the javac server. + # In the future we will make the javac compilers in the server + # share more and more state, thus enabling us to use more and + # more concurrent threads in the server. + JAVAC_SERVER_CORES="16" + else + JAVAC_SERVER_CORES="$NUM_CORES" + fi + + if test "$MEMORY_SIZE" -gt "17000"; then + MAX_HEAP_MEM=10000 + ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn2G],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "10000"; then + MAX_HEAP_MEM=6000 + ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn1G],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "5000"; then + MAX_HEAP_MEM=3000 + ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "3800"; then + MAX_HEAP_MEM=2500 + ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "1900"; then + MAX_HEAP_MEM=1200 + ADD_JVM_ARG_IF_OK([-Xms700M -Xmx1200M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "1000"; then + MAX_HEAP_MEM=900 + ADD_JVM_ARG_IF_OK([-Xms400M -Xmx900M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) + else + MAX_HEAP_MEM=512 + ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) + fi + + MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` + if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then + AC_MSG_CHECKING([if number of server cores must be reduced]) + JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" + AC_MSG_RESULT([yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB]) + fi +fi +AC_SUBST(JAVAC_SERVER_CORES) + +AC_MSG_CHECKING([whether to track dependencies between Java packages]) +AC_ARG_ENABLE([javac-deps], [AS_HELP_STRING([--enable-javac-deps], + [enable the dependency tracking between Java packages @<:@disabled@:>@])], + [ENABLE_JAVAC_DEPS="${enableval}"], [ENABLE_JAVAC_DEPS='no']) +AC_MSG_RESULT([$ENABLE_JAVAC_DEPS]) +if test "x$ENABLE_JAVAC_DEPS" = xyes; then + JAVAC_USE_DEPS=true +else + JAVAC_USE_DEPS=false +fi +AC_SUBST(JAVAC_USE_DEPS) + +AC_MSG_CHECKING([whether to use multiple cores for javac compilation]) +AC_ARG_ENABLE([javac-multi-core], [AS_HELP_STRING([--enable-javac-multi-core], + [compile Java packages concurrently @<:@disabled@:>@])], + [ENABLE_JAVAC_MULTICORE="${enableval}"], [ENABLE_JAVAC_MULTICORE='no']) +AC_MSG_RESULT([$ENABLE_JAVAC_MULTICORE]) +if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then + JAVAC_USE_MODE=MULTI_CORE_CONCURRENT +else + JAVAC_USE_MODE=SINGLE_THREADED_BATCH + if test "x$ENABLE_JAVAC_DEPS" = xyes; then + AC_MSG_WARN([Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options.]) + AC_MSG_WARN([Disabling dependency tracking for you now.]) + JAVAC_USE_DEPS=false + fi + if test "x$ENABLE_JAVAC_SERVER" = xyes; then + AC_MSG_WARN([The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options.]) + AC_MSG_WARN([Disabling javac server for you now.]) + JAVAC_USE_REMOTE=false + fi +fi +AC_SUBST(JAVAC_USE_MODE) + +AC_MSG_CHECKING([whether to use sjavac]) +AC_ARG_ENABLE([sjavac], [AS_HELP_STRING([--enable-sjavac], + [use sjavac to do fast incremental compiles @<:@disabled@:>@])], + [ENABLE_SJAVAC="${enableval}"], [ENABLE_SJAVAC='no']) +AC_MSG_RESULT([$ENABLE_SJAVAC]) +AC_SUBST(ENABLE_SJAVAC) + +]) diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh new file mode 100644 index 00000000000..5f7058f9300 --- /dev/null +++ b/common/autoconf/generated-configure.sh @@ -0,0 +1,18054 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.67 for openjdk jdk8. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: build-dev@openjdk.java.net about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='openjdk' +PACKAGE_TARNAME='openjdk' +PACKAGE_VERSION='jdk8' +PACKAGE_STRING='openjdk jdk8' +PACKAGE_BUGREPORT='build-dev@openjdk.java.net' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='LTLIBOBJS +LIBOBJS +CCACHE +USE_PRECOMPILED_HEADER +ENABLE_SJAVAC +JAVAC_USE_MODE +JAVAC_USE_DEPS +JAVAC_SERVER_CORES +JAVAC_SERVERS +JAVAC_USE_REMOTE +SERVER_JAVA +MEMORY_SIZE +CONCURRENT_BUILD_JOBS +NUM_CORES +SALIB_NAME +HOTSPOT_MAKE_ARGS +LIBCXX +LIBDL +LIBM +LIBZIP_CAN_USE_MMAP +USE_EXTERNAL_LIBZ +USE_EXTERNAL_LIBGIF +USE_EXTERNAL_LIBJPEG +ALSA_LIBS +ALSA_CFLAGS +FREETYPE2_LIB_PATH +USING_SYSTEM_FT_LIB +FREETYPE2_LIBS +FREETYPE2_CFLAGS +CUPS_LIBS +CUPS_CFLAGS +OPENWIN_HOME +X_EXTRA_LIBS +X_LIBS +X_PRE_LIBS +X_CFLAGS +XMKMF +CXXFLAGS_DEBUG_SYMBOLS +CFLAGS_DEBUG_SYMBOLS +ZIP_DEBUGINFO_FILES +ENABLE_DEBUG_SYMBOLS +UNCYGDRIVE +LDFLAGS_JDKEXE_SUFFIX +LDFLAGS_JDKLIB_SUFFIX +LDFLAGS_JDKEXE +LDFLAGS_JDKLIB +CXXFLAGS_JDKEXE +CXXFLAGS_JDKLIB +CFLAGS_JDKEXE +CFLAGS_JDKLIB +PACKAGE_PATH +CXX_FLAG_DEPS +C_FLAG_DEPS +CXX_O_FLAG_NONE +CXX_O_FLAG_NORM +CXX_O_FLAG_HI +CXX_O_FLAG_HIGHEST +C_O_FLAG_NONE +C_O_FLAG_NORM +C_O_FLAG_HI +C_O_FLAG_HIGHEST +POST_MCS_CMD +POST_STRIP_CMD +SET_SHARED_LIBRARY_ORIGIN +CXX_FLAG_REORDER +C_FLAG_REORDER +SET_SHARED_LIBRARY_MAPFILE +SET_SHARED_LIBRARY_NAME +SHARED_LIBRARY_FLAGS +EXE_SUFFIX +STATIC_LIBRARY_SUFFIX +SHARED_LIBRARY_SUFFIX +LIBRARY_PREFIX +STATIC_LIBRARY +SHARED_LIBRARY +OBJ_SUFFIX +ENDIAN +ARCH_DATA_MODEL +LP64 +OBJCOPY +MCS +STRIP +NM +ASFLAGS +AS +CXXCPP +CPP +COMPILER_TYPE +RC_FLAGS +DUMPBIN +WINAR +RC +MT +WINLD +ARFLAGS +AR +LDEXECXX +LDCXX +LDEXE +LD +ac_ct_OBJC +OBJCFLAGS +OBJC +ac_ct_CXX +CXXFLAGS +CXX +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +HOSTLD +HOSTCXX +HOSTCC +DEFINE_CROSS_COMPILE_ARCH +MSVCR100DLL +CHECK_FOR_VCINSTALLDIR +SETUPDEVENV +AR_OUT_OPTION +LD_OUT_OPTION +EXE_OUT_OPTION +CC_OUT_OPTION +SYS_ROOT +HOTSPOT_DIST +JAXWS_DIST +JAXP_DIST +CORBA_DIST +LANGTOOLS_DIST +IMAGES_OUTPUTDIR +JDK_OUTPUTDIR +HOTSPOT_OUTPUTDIR +JAXWS_OUTPUTDIR +JAXP_OUTPUTDIR +CORBA_OUTPUTDIR +LANGTOOLS_OUTPUTDIR +OVERRIDE_SRC_ROOT +ADD_SRC_ROOT +JDK_TOPDIR +HOTSPOT_TOPDIR +JAXWS_TOPDIR +JAXP_TOPDIR +CORBA_TOPDIR +LANGTOOLS_TOPDIR +BOOT_JDK_JVMARGS +NATIVE2ASCII +RMIC +JAR +JAVAH +JAVAC_FLAGS +JAVAC +BOOT_JDK_SOURCETARGET +JAVA +BOOT_TOOLSJAR +BOOT_RTJAR +BOOT_JDK +JAVA_CHECK +JAVAC_CHECK +OUTPUT_ROOT +CONF_NAME +SPEC +COOKED_BUILD_NUMBER +FULL_VERSION +RELEASE +JDK_VERSION +RUNTIME_NAME +COPYRIGHT_YEAR +COMPANY_NAME +JDK_RC_PLATFORM_NAME +PRODUCT_SUFFIX +PRODUCT_NAME +LAUNCHER_NAME +MILESTONE +JDK_BUILD_NUMBER +JDK_UPDATE_VERSION +JDK_MICRO_VERSION +JDK_MINOR_VERSION +JDK_MAJOR_VERSION +ENABLE_JFR +COMPRESS_JARS +CACERTS_FILE +TEST_IN_BUILD +DISABLE_NIMBUS +GENERATE_DOCS +ENABLE_DOCS +BUILD_HEADLESS_ONLY +BUILD_HEADLESS +SUPPORT_HEADFUL +SUPPORT_HEADLESS +JIGSAW +SET_OPENJDK +BUILD_VARIANT_RELEASE +DEBUG_CLASSFILES +FASTDEBUG +VARIANT +DEBUG_LEVEL +JVM_VARIANT_ZEROSHARK +JVM_VARIANT_ZERO +JVM_VARIANT_KERNEL +JVM_VARIANT_CLIENT +JVM_VARIANT_SERVER +JVM_VARIANTS +JDK_VARIANT +MINIMIZE_RAM_USAGE +JAVASE_EMBEDDED +PATH_SEP +CYGPATH +OS_VERSION_MICRO +OS_VERSION_MINOR +OS_VERSION_MAJOR +REQUIRED_OS_VERSION +REQUIRED_OS_NAME +LEGACY_OPENJDK_BUILD_CPU3 +LEGACY_OPENJDK_BUILD_CPU2 +LEGACY_OPENJDK_BUILD_CPU1 +OPENJDK_BUILD_CPU_ENDIAN +OPENJDK_BUILD_CPU_BITS +OPENJDK_BUILD_CPU_ARCH +OPENJDK_BUILD_CPU +LEGACY_OPENJDK_BUILD_OS_API +OPENJDK_BUILD_OS_API +OPENJDK_BUILD_OS_FAMILY +OPENJDK_BUILD_OS +LEGACY_OPENJDK_TARGET_CPU3 +LEGACY_OPENJDK_TARGET_CPU2 +LEGACY_OPENJDK_TARGET_CPU1 +OPENJDK_TARGET_CPU_ENDIAN +OPENJDK_TARGET_CPU_BITS +OPENJDK_TARGET_CPU_ARCH +OPENJDK_TARGET_CPU +LEGACY_OPENJDK_TARGET_OS_API +OPENJDK_TARGET_OS_API +OPENJDK_TARGET_OS_FAMILY +OPENJDK_TARGET_OS +OPENJDK_BUILD_SYSTEM +OPENJDK_TARGET_SYSTEM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +PKG_CONFIG +BDEPS_FTP +BDEPS_UNZIP +HG +FILE +EXPR +READELF +OTOOL +LDD +UNZIP +ZIP +XARGS +WC +TOUCH +TR +TEE +TAIL +TAR +SORT +SH +SED +RM +THEPWDCMD +PRINTF +NAWK +MV +MKDIR +MAKE +LS +LN +HEAD +FIND_DELETE +FIND +FGREP +EGREP +GREP +ECHO +DIFF +DF +DATE +CUT +CPIO +CP +CHMOD +CAT +AWK +PKGHANDLER +BUILD_LOG_WRAPPER +BUILD_LOG_PREVIOUS +BUILD_LOG +SRC_ROOT +READLINK +DATE_WHEN_CONFIGURED +CONFIGURE_COMMAND_LINE +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_builddeps_conf +with_builddeps_server +with_builddeps_dir +with_builddeps_group +enable_list_builddeps +with_target_bits +with_jdk_variant +with_jvm_variants +enable_debug +with_debug_level +enable_openjdk_only +enable_jigsaw +enable_headful +enable_docs +enable_nimbus +enable_hotspot_test_in_build +with_cacerts_file +enable_jfr +with_conf_name +with_boot_jdk +with_boot_jdk_jvmargs +with_add_source_root +with_override_source_root +with_adds_and_overrides +with_override_langtools +with_override_corba +with_override_jaxp +with_override_jaxws +with_override_hotspot +with_override_jdk +with_msvcr100dll +with_sys_root +with_tools_dir +with_devkit +with_extra_cflags +with_extra_cxxflags +with_extra_ldflags +enable_debug_symbols +enable_zip_debug_info +enable_macosx_runtime_support +with_x +with_cups +with_cups_include +with_cups_lib +with_freetype +with_alsa +with_alsa_include +with_alsa_lib +with_zlib +enable_static_link_stdc__ +with_num_cores +with_memory_size +with_server_java +enable_javac_server +with_javac_server_cores +enable_javac_deps +enable_javac_multi_core +enable_sjavac +enable_precompiled_headers +enable_ccache +with_ccache_dir +' + ac_precious_vars='build_alias +host_alias +target_alias +PKG_CONFIG +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +OBJC +OBJCFLAGS +CPP +CXXCPP +XMKMF +FREETYPE2_CFLAGS +FREETYPE2_LIBS +ALSA_CFLAGS +ALSA_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures openjdk jdk8 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/openjdk] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of openjdk jdk8:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-list-builddeps list all build dependencies known to the configure + script + --enable-debug set the debug level to fastdebug (shorthand for + --with-debug-level=fastdebug) [disabled] + --enable-openjdk-only build OpenJDK regardless of the presence of closed + repositories [disabled] + --enable-jigsaw build Jigsaw images (not yet available) [disabled] + --disable-headful build headful support (graphical UI support) + [enabled] + --enable-docs enable generation of Javadoc documentation + [disabled] + --disable-nimbus disable Nimbus L&F [enabled] + --enable-hotspot-test-in-build + enable running of Queens test after Hotspot build + (not yet available) [disabled] + --enable-jfr enable jfr (default is no) + ENABLE_JFR="${enableval}" + --disable-debug-symbols disable generation of debug symbols ([enabled]) + --disable-zip-debug-info + don't zip debug-info files ([enabled@:@) + --disable-macosx-runtime-support + disable the use of MacOSX Java runtime support + framework [enabled] + --disable-static-link-stdc++ + disable static linking of the C++ runtime on Linux + [enabled] + --enable-javac-server enable the shared javac server during the build + process [disabled] + --enable-javac-deps enable the dependency tracking between Java packages + [disabled] + --enable-javac-multi-core + compile Java packages concurrently [disabled] + --enable-sjavac use sjavac to do fast incremental compiles + [disabled] + --disable-precompiled-headers + use precompiled headers when compiling C++ [enabled] + --disable-ccache use ccache to speed up recompilations [enabled] + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-builddeps-conf use this configuration file for the builddeps + --with-builddeps-server download and use build dependencies from this server + url, e.g. + --with-builddeps-server=ftp://example.com/dir + --with-builddeps-dir store downloaded build dependencies here + [d/localhome/builddeps] + --with-builddeps-group chgrp the downloaded build dependencies to this + group + --with-target-bits build 32-bit or 64-bit binaries (for platforms that + support it), e.g. --with-target-bits=32 [guessed] + --with-jdk-variant JDK variant to build (normal, embedded) [normal] + --with-jvm-variants JVM variants (separated by commas) to build (server, + client, kernel, zero, zeroshark) [server] + --with-debug-level set the debug level (release, fastdebug, slowdebug) + [release] + --with-cacerts-file specify alternative cacerts file + --with-conf-name use this as the name of the configuration, + overriding the generated default + --with-boot-jdk path to Boot JDK (used to bootstrap build) [probed] + --with-boot-jdk-jvmargs specify JVM arguments to be passed to all + invocations of the Boot JDK, overriding the default + values, e.g --with-boot-jdk-jvmargs="-Xmx8G + -enableassertions" + --with-add-source-root for each and every source directory, look in this + additional source root for the same directory; if it + exists and have files in it, include it in the build + --with-override-source-root + for each and every source directory, look in this + override source root for the same directory; if it + exists, use that directory instead and ignore the + directory in the original source root + --with-adds-and-overrides + use the subdirs 'adds' and 'overrides' in the + specified directory as add-source-root and + override-source-root + --with-override-langtools + use this langtools dir for the build + --with-override-corba use this corba dir for the build + --with-override-jaxp use this jaxp dir for the build + --with-override-jaxws use this jaxws dir for the build + --with-override-hotspot use this hotspot dir for the build + --with-override-jdk use this jdk dir for the build + --with-msvcr100dll copy this msvcr100.dll into the built JDK + --with-sys-root pass this sys-root to the compilers and linker + (useful if the sys-root encoded in the cross + compiler tools is incorrect) + --with-tools-dir search this directory for compilers and tools + --with-devkit use this directory as base for tools-dir and + sys-root + --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 libraries under PATH/lib and the + headers under PATH/include) + --with-cups-include specify directory for the cups include files + --with-cups-lib specify directory for the cups library + --with-freetype specify prefix directory for the freetype2 package + (expecting the libraries under PATH/lib and the + headers under PATH/include) + --with-alsa specify prefix directory for the alsa package + (expecting the libraries under PATH/lib and the + headers under PATH/include) + --with-alsa-include specify directory for the alsa include files + --with-alsa-lib specify directory for the alsa library + --with-zlib use zlib from build system or OpenJDK source + (system, bundled) [bundled] + --with-num-cores number of cores in the build system, e.g. + --with-num-cores=8 [probed] + --with-memory-size memory (in MB) available in the build system, e.g. + --with-memory-size=1024 [probed] + --with-server-java use this java binary for running the javac + background server and other long running java tasks + in the build process, e.g. + ---with-server-java="/opt/jrockit/bin/java -server" + --with-javac-server-cores + use at most this number of concurrent threads on the + javac server [probed] + --with-ccache-dir where to store ccache files [~/.ccache] + +Some influential environment variables: + PKG_CONFIG path to pkg-config utility + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + OBJC Objective C compiler command + OBJCFLAGS Objective C compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + XMKMF Path to xmkmf, Makefile generator for X Window System + FREETYPE2_CFLAGS + C compiler flags for FREETYPE2, overriding pkg-config + FREETYPE2_LIBS + linker flags for FREETYPE2, overriding pkg-config + ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config + ALSA_LIBS linker flags for ALSA, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +openjdk configure jdk8 +generated by GNU Autoconf 2.67 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_objc_try_compile LINENO +# ----------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_objc_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_objc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_objc_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_run LINENO +# ------------------------ +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_run + +# ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES +# ---------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_cxx_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_cxx_check_header_compile + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_cxx_check_func LINENO FUNC VAR +# ------------------------------------ +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_cxx_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_cxx_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval "test \"\${$3+set}\"" = set; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ----------------------------------------- ## +## Report this to build-dev@openjdk.java.net ## +## ----------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# --------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval "test \"\${$3+set}\"" = set; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ----------------------------------------- ## +## Report this to build-dev@openjdk.java.net ## +## ----------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_cxx_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by openjdk $as_me jdk8, which was +generated by GNU Autoconf 2.67. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5 ; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Do not change or remove the following line, it is needed for consistency checks: +# DATE_WHEN_GENERATED: 1341161875 + +ac_aux_dir= +for ac_dir in build-aux "$srcdir"/build-aux; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- + + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +# PKG_CHECK_MODULES + + +# Include these first... +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + + + + + + + + + + + + + + + + + + + + + + + + +#%%% Simple tools %%% + + + + + + + + + + + + +# Check if build directory is on local disk. +# Argument 1: directory to test +# Argument 2: what to do if it is on local disk +# Argument 3: what to do otherwise (remote disk or failure) + + + + +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + + + + + + + + + + + +# ... then the rest +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +# Fixes paths on windows to be mixed mode short. + + + + +############################################################################### +# +# We need a Boot JDK to bootstrap the build. +# + + + + + +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + + + + + + + + + + + + + + + + + + +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + + + + + +apt_help() { + case $1 in + devkit) + PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; + openjdk) + PKGHANDLER_COMMAND="sudo apt-get install openjdk-7-jdk" ;; + alsa) + PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;; + cups) + PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;; + freetype2) + PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;; + pulse) + PKGHANDLER_COMMAND="sudo apt-get install libpulse-dev" ;; + x11) + PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev" ;; + ccache) + PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; + * ) + break ;; + esac +} + +yum_help() { + case $1 in + devkit) + PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;; + openjdk) + PKGHANDLER_COMMAND="sudo yum install java-1.7.0-openjdk" ;; + alsa) + PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;; + cups) + PKGHANDLER_COMMAND="sudo yum install cups-devel" ;; + freetype2) + PKGHANDLER_COMMAND="sudo yum install freetype2-devel" ;; + pulse) + PKGHANDLER_COMMAND="sudo yum install pulseaudio-libs-devel" ;; + x11) + PKGHANDLER_COMMAND="sudo yum install libXtst-devel" ;; + ccache) + PKGHANDLER_COMMAND="sudo yum install ccache" ;; + * ) + break ;; + esac +} + +port_help() { + PKGHANDLER_COMMAND="" +} + +pkgutil_help() { + PKGHANDLER_COMMAND="" +} + +pkgadd_help() { + PKGHANDLER_COMMAND="" +} + + + +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + + + + + + + + + + + + + + + +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + + + + + + + + + + + + + + + +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + + + + + + + + + + + + + +#%%% Build and target systems %%% + + + + + + + + + + +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + + + + + + + + +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + + + + + + + + + + + + + + + +# This line needs to be here, verbatim, after all includes. +# It is replaced with closed functionality when building +# closed sources. + + +############################################################################### +# +# Initialization +# +############################################################################### + +# Basic initialization that must happen first of all + +# Save the original command line. This is passed to us by the wrapper configure script. + +DATE_WHEN_CONFIGURED=`LANG=C date` + + +# Locate the directory of this script. +SCRIPT="$0" + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + # Extract the first word of "readlink", so it can be a program name with args. +set dummy readlink; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READLINK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | grep GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + SCRIPT=`$READLINK -f $SCRIPT` + else + STARTDIR=$PWD + COUNTER=0 + DIR=`dirname $SCRIPT` + FIL=`basename $SCRIPT` + while test $COUNTER -lt 20; do + ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $DIR + cd `dirname $ISLINK` + DIR=`pwd` + FIL=`basename $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + SCRIPT=$DIR/$FIL + fi + fi + +AUTOCONF_DIR=`dirname $0` + + +# Where is the source? It is located two levels above the configure script. +CURDIR="$PWD" +cd "$AUTOCONF_DIR/../.." +SRC_ROOT="`pwd`" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + SRC_ROOT_LENGTH=`pwd|wc -m` + if test $SRC_ROOT_LENGTH -gt 100; then + as_fn_error $? "Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported" "$LINENO" 5 + fi +fi + +cd "$CURDIR" + + + # Fail with message the path to the source root if var SRC_ROOT contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$SRC_ROOT" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + SRC_ROOT=`$CYGPATH -s -m -a "$SRC_ROOT"` + SRC_ROOT=`$CYGPATH -u "$SRC_ROOT"` + else + as_fn_error $? "You cannot have spaces in the path to the source root! \"$SRC_ROOT\"" "$LINENO" 5 + fi + fi + + + # Fail with message the path to the current directory if var CURDIR contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$CURDIR" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + CURDIR=`$CYGPATH -s -m -a "$CURDIR"` + CURDIR=`$CYGPATH -u "$CURDIR"` + else + as_fn_error $? "You cannot have spaces in the path to the current directory! \"$CURDIR\"" "$LINENO" 5 + fi + fi + + + +# Setup default logging of stdout and stderr to build.log in the output root. +BUILD_LOG='$(OUTPUT_ROOT)/build.log' +BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' +BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' + + + + + +# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. + + for ac_prog in apt-get yum port pkgutil pkgadd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PKGHANDLER+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PKGHANDLER"; then + ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PKGHANDLER="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PKGHANDLER=$ac_cv_prog_PKGHANDLER +if test -n "$PKGHANDLER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5 +$as_echo "$PKGHANDLER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PKGHANDLER" && break +done + + + +# Setup simple tools, that do not need have cross compilation support. +# Without these, we can't properly run the rest of the configure script. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + + +# Start with tools that do not need have cross compilation support +# and can be expected to be found in the default PATH. These tools are +# used by configure. Nor are these tools expected to be found in the +# devkit from the builddeps server either, since they are +# needed to download the devkit. +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + + # Test that variable AWK is not empty. + if test "" = "$AWK"; then as_fn_error $? "Could not find awk !" "$LINENO" 5 ; fi + +# Extract the first word of "cat", so it can be a program name with args. +set dummy cat; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CAT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CAT="$CAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CAT=$ac_cv_path_CAT +if test -n "$CAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5 +$as_echo "$CAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CAT is not empty. + if test "" = "$CAT"; then as_fn_error $? "Could not find cat !" "$LINENO" 5 ; fi + +# Extract the first word of "chmod", so it can be a program name with args. +set dummy chmod; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHMOD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHMOD in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHMOD=$ac_cv_path_CHMOD +if test -n "$CHMOD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 +$as_echo "$CHMOD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CHMOD is not empty. + if test "" = "$CHMOD"; then as_fn_error $? "Could not find chmod !" "$LINENO" 5 ; fi + +# Extract the first word of "cp", so it can be a program name with args. +set dummy cp; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CP="$CP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CP=$ac_cv_path_CP +if test -n "$CP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 +$as_echo "$CP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CP is not empty. + if test "" = "$CP"; then as_fn_error $? "Could not find cp !" "$LINENO" 5 ; fi + +# Extract the first word of "cpio", so it can be a program name with args. +set dummy cpio; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CPIO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CPIO in + [\\/]* | ?:[\\/]*) + ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CPIO=$ac_cv_path_CPIO +if test -n "$CPIO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 +$as_echo "$CPIO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CPIO is not empty. + if test "" = "$CPIO"; then as_fn_error $? "Could not find cpio !" "$LINENO" 5 ; fi + +# Extract the first word of "cut", so it can be a program name with args. +set dummy cut; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CUT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CUT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUT="$CUT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUT=$ac_cv_path_CUT +if test -n "$CUT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5 +$as_echo "$CUT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CUT is not empty. + if test "" = "$CUT"; then as_fn_error $? "Could not find cut !" "$LINENO" 5 ; fi + +# Extract the first word of "date", so it can be a program name with args. +set dummy date; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DATE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DATE in + [\\/]* | ?:[\\/]*) + ac_cv_path_DATE="$DATE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DATE=$ac_cv_path_DATE +if test -n "$DATE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5 +$as_echo "$DATE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable DATE is not empty. + if test "" = "$DATE"; then as_fn_error $? "Could not find date !" "$LINENO" 5 ; fi + +# Extract the first word of "df", so it can be a program name with args. +set dummy df; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DF="$DF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DF=$ac_cv_path_DF +if test -n "$DF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 +$as_echo "$DF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable DF is not empty. + if test "" = "$DF"; then as_fn_error $? "Could not find df !" "$LINENO" 5 ; fi + +# Extract the first word of "diff", so it can be a program name with args. +set dummy diff; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DIFF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DIFF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIFF=$ac_cv_path_DIFF +if test -n "$DIFF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 +$as_echo "$DIFF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable DIFF is not empty. + if test "" = "$DIFF"; then as_fn_error $? "Could not find diff !" "$LINENO" 5 ; fi + +# Warning echo is really, really unportable!!!!! Different +# behaviour in bash and dash and in a lot of other shells! +# Use printf for serious work! +# Extract the first word of "echo", so it can be a program name with args. +set dummy echo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ECHO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ECHO in + [\\/]* | ?:[\\/]*) + ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ECHO=$ac_cv_path_ECHO +if test -n "$ECHO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 +$as_echo "$ECHO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable ECHO is not empty. + if test "" = "$ECHO"; then as_fn_error $? "Could not find echo !" "$LINENO" 5 ; fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + + # Test that variable EGREP is not empty. + if test "" = "$EGREP"; then as_fn_error $? "Could not find egrep !" "$LINENO" 5 ; fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + + + # Test that variable FGREP is not empty. + if test "" = "$FGREP"; then as_fn_error $? "Could not find fgrep !" "$LINENO" 5 ; fi + + +# Extract the first word of "find", so it can be a program name with args. +set dummy find; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_FIND+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $FIND in + [\\/]* | ?:[\\/]*) + ac_cv_path_FIND="$FIND" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FIND=$ac_cv_path_FIND +if test -n "$FIND"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 +$as_echo "$FIND" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable FIND is not empty. + if test "" = "$FIND"; then as_fn_error $? "Could not find find !" "$LINENO" 5 ; fi + + + # Test if find supports -delete + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5 +$as_echo_n "checking if find supports -delete... " >&6; } + FIND_DELETE="-delete" + + DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) + + echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete + + TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` + if test -f $DELETEDIR/TestIfFindSupportsDelete; then + # No, it does not. + rm $DELETEDIR/TestIfFindSupportsDelete + FIND_DELETE="-exec rm \{\} \+" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + rmdir $DELETEDIR + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + + + # Test that variable GREP is not empty. + if test "" = "$GREP"; then as_fn_error $? "Could not find grep !" "$LINENO" 5 ; fi + +# Extract the first word of "head", so it can be a program name with args. +set dummy head; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HEAD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HEAD in + [\\/]* | ?:[\\/]*) + ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HEAD=$ac_cv_path_HEAD +if test -n "$HEAD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5 +$as_echo "$HEAD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable HEAD is not empty. + if test "" = "$HEAD"; then as_fn_error $? "Could not find head !" "$LINENO" 5 ; fi + +# Extract the first word of "ln", so it can be a program name with args. +set dummy ln; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LN in + [\\/]* | ?:[\\/]*) + ac_cv_path_LN="$LN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LN=$ac_cv_path_LN +if test -n "$LN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 +$as_echo "$LN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable LN is not empty. + if test "" = "$LN"; then as_fn_error $? "Could not find ln !" "$LINENO" 5 ; fi + +# Extract the first word of "ls", so it can be a program name with args. +set dummy ls; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LS in + [\\/]* | ?:[\\/]*) + ac_cv_path_LS="$LS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LS=$ac_cv_path_LS +if test -n "$LS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5 +$as_echo "$LS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable LS is not empty. + if test "" = "$LS"; then as_fn_error $? "Could not find ls !" "$LINENO" 5 ; fi + +for ac_prog in gmake make +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_MAKE="$MAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MAKE=$ac_cv_path_MAKE +if test -n "$MAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5 +$as_echo "$MAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MAKE" && break +done + + + # Test that variable MAKE is not empty. + if test "" = "$MAKE"; then as_fn_error $? "Could not find make !" "$LINENO" 5 ; fi + +MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[12346789]'` +if test "x$MAKE_VERSION" = x; then + as_fn_error $? "You must use GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure." "$LINENO" 5 +fi +# Extract the first word of "mkdir", so it can be a program name with args. +set dummy mkdir; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MKDIR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MKDIR in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKDIR=$ac_cv_path_MKDIR +if test -n "$MKDIR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 +$as_echo "$MKDIR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable MKDIR is not empty. + if test "" = "$MKDIR"; then as_fn_error $? "Could not find mkdir !" "$LINENO" 5 ; fi + +# Extract the first word of "mv", so it can be a program name with args. +set dummy mv; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MV+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MV in + [\\/]* | ?:[\\/]*) + ac_cv_path_MV="$MV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MV=$ac_cv_path_MV +if test -n "$MV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 +$as_echo "$MV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable MV is not empty. + if test "" = "$MV"; then as_fn_error $? "Could not find mv !" "$LINENO" 5 ; fi + +for ac_prog in nawk gawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_NAWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $NAWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NAWK=$ac_cv_path_NAWK +if test -n "$NAWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 +$as_echo "$NAWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NAWK" && break +done + + + # Test that variable NAWK is not empty. + if test "" = "$NAWK"; then as_fn_error $? "Could not find nawk !" "$LINENO" 5 ; fi + +# Extract the first word of "printf", so it can be a program name with args. +set dummy printf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PRINTF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PRINTF in + [\\/]* | ?:[\\/]*) + ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PRINTF=$ac_cv_path_PRINTF +if test -n "$PRINTF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5 +$as_echo "$PRINTF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable PRINTF is not empty. + if test "" = "$PRINTF"; then as_fn_error $? "Could not find printf !" "$LINENO" 5 ; fi + +# Extract the first word of "pwd", so it can be a program name with args. +set dummy pwd; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_THEPWDCMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $THEPWDCMD in + [\\/]* | ?:[\\/]*) + ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +THEPWDCMD=$ac_cv_path_THEPWDCMD +if test -n "$THEPWDCMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5 +$as_echo "$THEPWDCMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "rm", so it can be a program name with args. +set dummy rm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_RM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RM=$ac_cv_path_RM +if test -n "$RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable RM is not empty. + if test "" = "$RM"; then as_fn_error $? "Could not find rm !" "$LINENO" 5 ; fi + +RM="$RM -f" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + + # Test that variable SED is not empty. + if test "" = "$SED"; then as_fn_error $? "Could not find sed !" "$LINENO" 5 ; fi + +# Extract the first word of "sh", so it can be a program name with args. +set dummy sh; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_SH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $SH in + [\\/]* | ?:[\\/]*) + ac_cv_path_SH="$SH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SH=$ac_cv_path_SH +if test -n "$SH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 +$as_echo "$SH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable SH is not empty. + if test "" = "$SH"; then as_fn_error $? "Could not find sh !" "$LINENO" 5 ; fi + +# Extract the first word of "sort", so it can be a program name with args. +set dummy sort; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_SORT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $SORT in + [\\/]* | ?:[\\/]*) + ac_cv_path_SORT="$SORT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SORT=$ac_cv_path_SORT +if test -n "$SORT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5 +$as_echo "$SORT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable SORT is not empty. + if test "" = "$SORT"; then as_fn_error $? "Could not find sort !" "$LINENO" 5 ; fi + +# Extract the first word of "tar", so it can be a program name with args. +set dummy tar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TAR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TAR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAR="$TAR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAR=$ac_cv_path_TAR +if test -n "$TAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 +$as_echo "$TAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TAR is not empty. + if test "" = "$TAR"; then as_fn_error $? "Could not find tar !" "$LINENO" 5 ; fi + +# Extract the first word of "tail", so it can be a program name with args. +set dummy tail; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TAIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TAIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAIL=$ac_cv_path_TAIL +if test -n "$TAIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5 +$as_echo "$TAIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TAIL is not empty. + if test "" = "$TAIL"; then as_fn_error $? "Could not find tail !" "$LINENO" 5 ; fi + +# Extract the first word of "tee", so it can be a program name with args. +set dummy tee; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TEE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TEE in + [\\/]* | ?:[\\/]*) + ac_cv_path_TEE="$TEE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TEE=$ac_cv_path_TEE +if test -n "$TEE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5 +$as_echo "$TEE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TEE is not empty. + if test "" = "$TEE"; then as_fn_error $? "Could not find tee !" "$LINENO" 5 ; fi + +# Extract the first word of "tr", so it can be a program name with args. +set dummy tr; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TR="$TR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TR=$ac_cv_path_TR +if test -n "$TR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5 +$as_echo "$TR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TR is not empty. + if test "" = "$TR"; then as_fn_error $? "Could not find tr !" "$LINENO" 5 ; fi + +# Extract the first word of "touch", so it can be a program name with args. +set dummy touch; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TOUCH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TOUCH in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TOUCH=$ac_cv_path_TOUCH +if test -n "$TOUCH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 +$as_echo "$TOUCH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TOUCH is not empty. + if test "" = "$TOUCH"; then as_fn_error $? "Could not find touch !" "$LINENO" 5 ; fi + +# Extract the first word of "wc", so it can be a program name with args. +set dummy wc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_WC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $WC in + [\\/]* | ?:[\\/]*) + ac_cv_path_WC="$WC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WC=$ac_cv_path_WC +if test -n "$WC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5 +$as_echo "$WC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable WC is not empty. + if test "" = "$WC"; then as_fn_error $? "Could not find wc !" "$LINENO" 5 ; fi + +# Extract the first word of "xargs", so it can be a program name with args. +set dummy xargs; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_XARGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $XARGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XARGS=$ac_cv_path_XARGS +if test -n "$XARGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5 +$as_echo "$XARGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable XARGS is not empty. + if test "" = "$XARGS"; then as_fn_error $? "Could not find xargs !" "$LINENO" 5 ; fi + +# Extract the first word of "zip", so it can be a program name with args. +set dummy zip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ZIP=$ac_cv_path_ZIP +if test -n "$ZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 +$as_echo "$ZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable ZIP is not empty. + if test "" = "$ZIP"; then as_fn_error $? "Could not find zip !" "$LINENO" 5 ; fi + +# Extract the first word of "unzip", so it can be a program name with args. +set dummy unzip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UNZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UNZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNZIP=$ac_cv_path_UNZIP +if test -n "$UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 +$as_echo "$UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable UNZIP is not empty. + if test "" = "$UNZIP"; then as_fn_error $? "Could not find unzip !" "$LINENO" 5 ; fi + +# Extract the first word of "ldd", so it can be a program name with args. +set dummy ldd; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LDD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LDD in + [\\/]* | ?:[\\/]*) + ac_cv_path_LDD="$LDD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LDD=$ac_cv_path_LDD +if test -n "$LDD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 +$as_echo "$LDD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$LDD" = "x"; then + # List shared lib dependencies is used for + # debug output and checking for forbidden dependencies. + # We can build without it. + LDD="true" +fi +# Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OTOOL=$ac_cv_path_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$OTOOL" = "x"; then + OTOOL="true" +fi +# Extract the first word of "readelf", so it can be a program name with args. +set dummy readelf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READELF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READELF in + [\\/]* | ?:[\\/]*) + ac_cv_path_READELF="$READELF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READELF=$ac_cv_path_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "expr", so it can be a program name with args. +set dummy expr; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_EXPR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $EXPR in + [\\/]* | ?:[\\/]*) + ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +EXPR=$ac_cv_path_EXPR +if test -n "$EXPR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5 +$as_echo "$EXPR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable EXPR is not empty. + if test "" = "$EXPR"; then as_fn_error $? "Could not find expr !" "$LINENO" 5 ; fi + +# Extract the first word of "file", so it can be a program name with args. +set dummy file; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_FILE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $FILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_FILE="$FILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FILE=$ac_cv_path_FILE +if test -n "$FILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5 +$as_echo "$FILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable FILE is not empty. + if test "" = "$FILE"; then as_fn_error $? "Could not find file !" "$LINENO" 5 ; fi + +# Extract the first word of "hg", so it can be a program name with args. +set dummy hg; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HG in + [\\/]* | ?:[\\/]*) + ac_cv_path_HG="$HG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HG=$ac_cv_path_HG +if test -n "$HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 +$as_echo "$HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + +# Setup builddeps, for automatic downloading of tools we need. +# This is needed before we can call BDEPS_CHECK_MODULE, which is done in +# boot-jdk setup, but we need to have basic tools setup first. + + +# Check whether --with-builddeps-conf was given. +if test "${with_builddeps_conf+set}" = set; then : + withval=$with_builddeps_conf; +fi + + + +# Check whether --with-builddeps-server was given. +if test "${with_builddeps_server+set}" = set; then : + withval=$with_builddeps_server; +fi + + + +# Check whether --with-builddeps-dir was given. +if test "${with_builddeps_dir+set}" = set; then : + withval=$with_builddeps_dir; +else + with_builddeps_dir=/localhome/builddeps +fi + + + +# Check whether --with-builddeps-group was given. +if test "${with_builddeps_group+set}" = set; then : + withval=$with_builddeps_group; +fi + + +# Check whether --enable-list-builddeps was given. +if test "${enable_list_builddeps+set}" = set; then : + enableval=$enable_list_builddeps; LIST_BUILDDEPS="${enableval}" +else + LIST_BUILDDEPS='no' +fi + + +if test "x$LIST_BUILDDEPS" = xyes; then + echo + echo List of build dependencies known to the configure script, + echo that can be used in builddeps.conf files: + cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODULE\( | cut -f 2 -d ',' | tr -d ' ' | sort + echo + exit 1 +fi + + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + if test "x$with_builddeps_conf" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5 +$as_echo_n "checking for supplied builddeps configuration file... " >&6; } + builddepsfile=$with_builddeps_conf + if test -s $builddepsfile; then + . $builddepsfile + { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5 +$as_echo "loaded!" >&6; } + else + as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5 + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5 +$as_echo_n "checking for builddeps.conf files in sources...... " >&6; } + builddepsfile=`mktemp` + touch $builddepsfile + # Put all found confs into a single file. + find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile + # Source the file to acquire the variables + if test -s $builddepsfile; then + . $builddepsfile + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5 +$as_echo "found at least one!" >&6; } + else + as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5 + fi + fi + # Create build and target names that use _ instead of "-" and ".". + # This is necessary to use them in variable names. + build_var=`echo ${OPENJDK_BUILD_SYSTEM} | tr '-' '_' | tr '.' '_'` + target_var=`echo ${OPENJDK_TARGET_SYSTEM} | tr '-' '_' | tr '.' '_'` + # Extract rewrite information for build and target + eval rewritten_build=\${REWRITE_${build_var}} + if test "x$rewritten_build" = x; then + rewritten_build=${OPENJDK_BUILD_SYSTEM} + echo Build stays the same $rewritten_build + else + echo Rewriting build for builddeps into $rewritten_build + fi + eval rewritten_target=\${REWRITE_${target_var}} + if test "x$rewritten_target" = x; then + rewritten_target=${OPENJDK_TARGET_SYSTEM} + echo Target stays the same $rewritten_target + else + echo Rewriting target for builddeps into $rewritten_target + fi + rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` + rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'` + fi + for ac_prog in 7z unzip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BDEPS_UNZIP"; then + ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_BDEPS_UNZIP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP +if test -n "$BDEPS_UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5 +$as_echo "$BDEPS_UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BDEPS_UNZIP" && break +done + + if test "x$BDEPS_UNZIP" = x7z; then + BDEPS_UNZIP="7z x" + fi + + for ac_prog in wget lftp ftp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BDEPS_FTP"; then + ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_BDEPS_FTP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BDEPS_FTP=$ac_cv_prog_BDEPS_FTP +if test -n "$BDEPS_FTP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5 +$as_echo "$BDEPS_FTP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BDEPS_FTP" && break +done + + + +# Check if pkg-config is available. + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +############################################################################### +# +# Determine OpenJDK build and target platforms. +# +############################################################################### + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" +# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the +# product you're building. The target of this build is called "host". Since this is confusing to most people, we +# have not adopted that system, but use "target" as the platform we are building for. In some places though we need +# to use the configure naming style. + + + + + +# Check whether --with-target-bits was given. +if test "${with_target_bits+set}" = set; then : + withval=$with_target_bits; +fi + + +if test "x$with_target_bits" != x && \ + test "x$with_target_bits" != x32 && \ + test "x$with_target_bits" != x64 ; then + as_fn_error $? "--with-target-bits can only be 32 or 64, you specified $with_target_bits!" "$LINENO" 5 +fi +# Translate the standard cpu-vendor-kernel-os quadruplets into +# the new TARGET_.... and BUILD_... and the legacy names used by +# the openjdk build. +# It uses $host_os $host_cpu $build_os $build_cpu and $with_target_bits + + # Expects $host_os $host_cpu $build_os and $build_cpu + # and $with_target_bits to have been setup! + # + # Translate the standard triplet(quadruplet) definition + # of the target/build system into + # OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows + # OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince + # OPENJDK_TARGET_OS_API=posix,winapi + # + # OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 + # OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm + # OPENJDK_TARGET_CPU_BITS=32,64 + # OPENJDK_TARGET_CPU_ENDIAN=big,little + # + # The same values are setup for BUILD_... + # + # And the legacy variables, for controlling the old makefiles. + # LEGACY_OPENJDK_TARGET_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU3=sparcv9,amd64 (but only on solaris) + # LEGACY_OPENJDK_TARGET_OS_API=solaris,windows + # + # We also copy the autoconf trip/quadruplet + # verbatim to OPENJDK_TARGET_SYSTEM (from the autoconf "host") and OPENJDK_BUILD_SYSTEM + OPENJDK_TARGET_SYSTEM="$host" + OPENJDK_BUILD_SYSTEM="$build" + + + + + + case "$host_os" in + *linux*) + VAR_OS=linux + VAR_OS_API=posix + VAR_OS_FAMILY=gnu + ;; + *solaris*) + VAR_OS=solaris + VAR_OS_API=posix + VAR_OS_FAMILY=sysv + ;; + *darwin*) + VAR_OS=macosx + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *bsd*) + VAR_OS=bsd + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *cygwin*|*windows*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_FAMILY=windows + ;; + *) + as_fn_error $? "unsupported operating system $host_os" "$LINENO" 5 + ;; + esac + + OPENJDK_TARGET_OS="$VAR_OS" + OPENJDK_TARGET_OS_FAMILY="$VAR_OS_FAMILY" + OPENJDK_TARGET_OS_API="$VAR_OS_API" + + + + + + if test "x$OPENJDK_TARGET_OS_API" = xposix; then + LEGACY_OPENJDK_TARGET_OS_API="solaris" + fi + if test "x$OPENJDK_TARGET_OS_API" = xwinapi; then + LEGACY_OPENJDK_TARGET_OS_API="windows" + fi + + + + + # First argument is the cpu name from the trip/quad + case "$host_cpu" in + x86_64) + VAR_CPU=x64 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=amd64 + ;; + i?86) + VAR_CPU=ia32 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=i586 + ;; + alpha*) + VAR_CPU=alpha + VAR_CPU_ARCH=alpha + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=alpha + ;; + arm*) + VAR_CPU=arm + VAR_CPU_ARCH=arm + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=arm + ;; + mips) + VAR_CPU=mips + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mips + ;; + mipsel) + VAR_CPU=mipsel + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mipsel + ;; + powerpc) + VAR_CPU=ppc + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc + ;; + powerpc64) + VAR_CPU=ppc64 + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc64 + ;; + sparc) + VAR_CPU=sparc + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparc + ;; + sparc64) + VAR_CPU=sparcv9 + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparcv9 + ;; + s390) + VAR_CPU=s390 + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390 + VAR_LEGACY_CPU=s390 + ;; + s390x) + VAR_CPU=s390x + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390x + ;; + *) + as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5 + ;; + esac + + # Workaround cygwin not knowing about 64 bit. + if test "x$VAR_OS" = "xwindows"; then + if test "x$PROCESSOR_IDENTIFIER" != "x"; then + PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` + case "$PROC_ARCH" in + intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + ;; + esac + fi + fi + + # on solaris x86...default seems to be 32-bit + if test "x$VAR_OS" = "xsolaris" && \ + test "x$with_target_bits" = "x" && \ + test "x$VAR_CPU_ARCH" = "xx86" + then + with_target_bits=32 + fi + + if test "x$VAR_CPU_ARCH" = "xx86"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + fi + if test "x$with_target_bits" = "x32"; then + VAR_CPU=ia32 + VAR_CPU_BITS=32 + VAR_LEGACY_CPU=i586 + fi + fi + + if test "x$VAR_CPU_ARCH" = "xsparc"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=sparcv9 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=sparcv9 + fi + fi + + OPENJDK_TARGET_CPU="$VAR_CPU" + OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_TARGET_CPU_ENDIAN="$VAR_CPU_ENDIAN" + + + + + + + # Also store the legacy naming of the cpu. + # Ie i586 and amd64 instead of ia32 and x64 + LEGACY_OPENJDK_TARGET_CPU1="$VAR_LEGACY_CPU" + + + # And the second legacy naming of the cpu. + # Ie i386 and amd64 instead of ia32 and x64. + LEGACY_OPENJDK_TARGET_CPU2="$LEGACY_OPENJDK_TARGET_CPU1" + if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then + LEGACY_OPENJDK_TARGET_CPU2=i386 + fi + + + # And the third legacy naming of the cpu. + # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. + LEGACY_OPENJDK_TARGET_CPU3="" + if test "x$OPENJDK_TARGET_CPU" = xx64; then + LEGACY_OPENJDK_TARGET_CPU3=amd64 + fi + if test "x$OPENJDK_TARGET_CPU" = xsparcv9; then + LEGACY_OPENJDK_TARGET_CPU3=sparcv9 + fi + + + + + + case "$build_os" in + *linux*) + VAR_OS=linux + VAR_OS_API=posix + VAR_OS_FAMILY=gnu + ;; + *solaris*) + VAR_OS=solaris + VAR_OS_API=posix + VAR_OS_FAMILY=sysv + ;; + *darwin*) + VAR_OS=macosx + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *bsd*) + VAR_OS=bsd + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *cygwin*|*windows*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_FAMILY=windows + ;; + *) + as_fn_error $? "unsupported operating system $build_os" "$LINENO" 5 + ;; + esac + + OPENJDK_BUILD_OS="$VAR_OS" + OPENJDK_BUILD_OS_FAMILY="$VAR_OS_FAMILY" + OPENJDK_BUILD_OS_API="$VAR_OS_API" + + + + + + if test "x$OPENJDK_BUILD_OS_API" = xposix; then + LEGACY_OPENJDK_BUILD_OS_API="solaris" + fi + if test "x$OPENJDK_BUILD_OS_API" = xwinapi; then + LEGACY_OPENJDK_BUILD_OS_API="windows" + fi + + + + + # First argument is the cpu name from the trip/quad + case "$build_cpu" in + x86_64) + VAR_CPU=x64 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=amd64 + ;; + i?86) + VAR_CPU=ia32 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=i586 + ;; + alpha*) + VAR_CPU=alpha + VAR_CPU_ARCH=alpha + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=alpha + ;; + arm*) + VAR_CPU=arm + VAR_CPU_ARCH=arm + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=arm + ;; + mips) + VAR_CPU=mips + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mips + ;; + mipsel) + VAR_CPU=mipsel + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mipsel + ;; + powerpc) + VAR_CPU=ppc + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc + ;; + powerpc64) + VAR_CPU=ppc64 + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc64 + ;; + sparc) + VAR_CPU=sparc + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparc + ;; + sparc64) + VAR_CPU=sparcv9 + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparcv9 + ;; + s390) + VAR_CPU=s390 + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390 + VAR_LEGACY_CPU=s390 + ;; + s390x) + VAR_CPU=s390x + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390x + ;; + *) + as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5 + ;; + esac + + # Workaround cygwin not knowing about 64 bit. + if test "x$VAR_OS" = "xwindows"; then + if test "x$PROCESSOR_IDENTIFIER" != "x"; then + PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` + case "$PROC_ARCH" in + intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + ;; + esac + fi + fi + + # on solaris x86...default seems to be 32-bit + if test "x$VAR_OS" = "xsolaris" && \ + test "x$with_target_bits" = "x" && \ + test "x$VAR_CPU_ARCH" = "xx86" + then + with_target_bits=32 + fi + + if test "x$VAR_CPU_ARCH" = "xx86"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + fi + if test "x$with_target_bits" = "x32"; then + VAR_CPU=ia32 + VAR_CPU_BITS=32 + VAR_LEGACY_CPU=i586 + fi + fi + + if test "x$VAR_CPU_ARCH" = "xsparc"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=sparcv9 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=sparcv9 + fi + fi + + OPENJDK_BUILD_CPU="$VAR_CPU" + OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" + + + + + + + # Also store the legacy naming of the cpu. + # Ie i586 and amd64 instead of ia32 and x64 + LEGACY_OPENJDK_BUILD_CPU1="$VAR_LEGACY_CPU" + + + # And the second legacy naming of the cpu. + # Ie i386 and amd64 instead of ia32 and x64. + LEGACY_OPENJDK_BUILD_CPU2="$LEGACY_OPENJDK_BUILD_CPU1" + if test "x$LEGACY_OPENJDK_BUILD_CPU1" = xi586; then + LEGACY_OPENJDK_BUILD_CPU2=i386 + fi + + + # And the third legacy naming of the cpu. + # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. + LEGACY_OPENJDK_BUILD_CPU3="" + if test "x$OPENJDK_BUILD_CPU" = xx64; then + LEGACY_OPENJDK_BUILD_CPU3=amd64 + fi + if test "x$OPENJDK_BUILD_CPU" = xsparcv9; then + LEGACY_OPENJDK_BUILD_CPU3=sparcv9 + fi + + + + if test "x$OPENJDK_TARGET_OS" != xsolaris; then + LEGACY_OPENJDK_TARGET_CPU3="" + LEGACY_OPENJDK_BUILD_CPU3="" + fi + + # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_OPENJDK_TARGET_CPU1) ... + if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$OPENJDK_TARGET_CPU" = xx64; then + LEGACY_OPENJDK_TARGET_CPU1="x86_64" + fi + + + if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then + REQUIRED_OS_NAME=SunOS + REQUIRED_OS_VERSION=5.10 + fi + if test "x$OPENJDK_TARGET_OS" = "xlinux"; then + REQUIRED_OS_NAME=Linux + REQUIRED_OS_VERSION=2.6 + fi + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + REQUIRED_OS_NAME=Windows + REQUIRED_OS_VERSION=5.1 + fi + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + REQUIRED_OS_NAME=Darwin + REQUIRED_OS_VERSION=11.2 + fi + + + + + + +# The LEGACY_OPENJDK_TARGET_CPU3 is the setting for ISA_DIR. +if test "x$LEGACY_OPENJDK_TARGET_CPU3" != x; then + LEGACY_OPENJDK_TARGET_CPU3="/${LEGACY_OPENJDK_TARGET_CPU3}" +fi + +# Now the following vars are defined. +# OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows +# OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince +# OPENJDK_TARGET_OS_API=posix,winapi +# +# OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 +# OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm +# OPENJDK_TARGET_CPU_BITS=32,64 +# OPENJDK_TARGET_CPU_ENDIAN=big,little +# +# There is also a: +# LEGACY_OPENJDK_TARGET_CPU1=i586,amd64,.... # used to set the old var ARCH +# LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,.... # used to set the old var LIBARCH +# LEGACY_OPENJDK_TARGET_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris +# There was also a BUILDARCH that had i486,amd64,... but we do not use that +# in the new build. +# LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # used to select source roots + + +############################################################################### + +# Note that this is the build platform OS version! + +OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" +OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" +OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" +OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" + + + + + +# With knowledge of the build platform, setup more basic things. + +# For cygwin we need cygpath first, since it is used everywhere. +# Extract the first word of "cygpath", so it can be a program name with args. +set dummy cygpath; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CYGPATH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +PATH_SEP=":" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$CYGPATH" = x; then + as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5 + fi + PATH_SEP=";" +fi + + + +if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then + # Add extra search paths on solaris for utilities like ar and as etc... + PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" +fi + + +############################################################################### +# +# Determine OpenJDK variants, options and version numbers. +# +############################################################################### + +# We need build & target for this. + +############################################################################### +# +# Check which variant of the JDK that we want to build. +# Currently we have: +# normal: standard edition +# embedded: cut down to a smaller footprint +# +# Effectively the JDK variant gives a name to a specific set of +# modules to compile into the JDK. In the future, these modules +# might even be Jigsaw modules. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of the JDK to build" >&5 +$as_echo_n "checking which variant of the JDK to build... " >&6; } + +# Check whether --with-jdk-variant was given. +if test "${with_jdk_variant+set}" = set; then : + withval=$with_jdk_variant; +fi + + +if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then + JAVASE_EMBEDDED="" + MINIMIZE_RAM_USAGE="" + JDK_VARIANT="normal" +elif test "x$with_jdk_variant" = xembedded; then + JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" + MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" + JDK_VARIANT="embedded" +else + as_fn_error $? "The available JDK variants are: normal, embedded" "$LINENO" 5 +fi + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JDK_VARIANT" >&5 +$as_echo "$JDK_VARIANT" >&6; } + + + +############################################################################### +# +# Check which variants of the JVM that we want to build. +# Currently we have: +# server: normal interpreter and a tiered C1/C2 compiler +# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) +# kernel: kernel footprint JVM that passes the TCK without major performance problems, +# ie normal interpreter and C1, only the serial GC, kernel jvmti etc +# zero: no machine code interpreter, no compiler +# zeroshark: zero interpreter and shark/llvm compiler backend +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM that should be built" >&5 +$as_echo_n "checking which variants of the JVM that should be built... " >&6; } + +# Check whether --with-jvm-variants was given. +if test "${with_jvm_variants+set}" = set; then : + withval=$with_jvm_variants; +fi + + +if test "x$with_jvm_variants" = x; then + if test "x$JDK_VARIANT" = xembedded; then + with_jvm_variants="client" + else + with_jvm_variants="server" + fi +fi + +JVM_VARIANTS=",$with_jvm_variants," +TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` + +if test "x$TEST_VARIANTS" != "x,"; then + as_fn_error $? "The available JVM variants are: server, client, kernel, zero, zeroshark" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_variants" >&5 +$as_echo "$with_jvm_variants" >&6; } + +JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` +JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` +JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` +JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` +JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + as_fn_error $? "You cannot build a client JVM for a 64-bit machine." "$LINENO" 5 + fi +fi +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + as_fn_error $? "You cannot build a kernel JVM for a 64-bit machine." "$LINENO" 5 + fi +fi + +# Replace the commas with AND for use in the build directory name. +ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` +COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` +if test "x$COUNT_VARIANTS" != "x,1"; then + BUILDING_MULTIPLE_JVM_VARIANTS=yes +else + BUILDING_MULTIPLE_JVM_VARIANTS=no +fi + + + + + + + + + + + +############################################################################### +# +# Set the debug level +# release: no debug information, all optimizations, no asserts. +# fastdebug: debug information (-g), all optimizations, all asserts +# slowdebug: debug information (-g), no optimizations, all asserts +# +DEBUG_LEVEL="release" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which debug level to use" >&5 +$as_echo_n "checking which debug level to use... " >&6; } +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; + ENABLE_DEBUG="${enableval}" + DEBUG_LEVEL="fastdebug" + +else + ENABLE_DEBUG="no" +fi + + + +# Check whether --with-debug-level was given. +if test "${with_debug_level+set}" = set; then : + withval=$with_debug_level; + DEBUG_LEVEL="${withval}" + if test "x$ENABLE_DEBUG" = xyes; then + as_fn_error $? "You cannot use both --enable-debug and --with-debug-level at the same time." "$LINENO" 5 + fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBUG_LEVEL" >&5 +$as_echo "$DEBUG_LEVEL" >&6; } + +if test "x$DEBUG_LEVEL" != xrelease && \ + test "x$DEBUG_LEVEL" != xfastdebug && \ + test "x$DEBUG_LEVEL" != xslowdebug; then + as_fn_error $? "Allowed debug levels are: release, fastdebug and slowdebug" "$LINENO" 5 +fi + + +############################################################################### +# +# Setup legacy vars/targets and new vars to deal with different debug levels. +# + +case $DEBUG_LEVEL in + release ) + VARIANT="OPT" + FASTDEBUG="false" + DEBUG_CLASSFILES="false" + BUILD_VARIANT_RELEASE="" + HOTSPOT_DEBUG_LEVEL="product" + HOTSPOT_EXPORT="product" + ;; + fastdebug ) + VARIANT="DBG" + FASTDEBUG="true" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-fastdebug" + HOTSPOT_DEBUG_LEVEL="fastdebug" + HOTSPOT_EXPORT="fastdebug" + ;; + slowdebug ) + VARIANT="DBG" + FASTDEBUG="false" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-debug" + HOTSPOT_DEBUG_LEVEL="jvmg" + HOTSPOT_EXPORT="debug" + ;; +esac + +##### +# Generate the legacy makefile targets for hotspot. +# The hotspot api for selecting the build artifacts, really, needs to be improved. +# +HOTSPOT_TARGET="" + +if test "x$JVM_VARIANT_SERVER" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " +fi + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " +fi + +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " +fi + +if test "x$JVM_VARIANT_ZERO" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " +fi + +if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " +fi + +HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" + +##### + + + + + + + + + +############################################################################### +# +# Should we build only OpenJDK even if closed sources are present? +# +# Check whether --enable-openjdk-only was given. +if test "${enable_openjdk_only+set}" = set; then : + enableval=$enable_openjdk_only; +fi + + +if test "x$enable_openjdk_only" = "xyes"; then + OPENJDK=true +elif test "x$enable_openjdk_only" = "xno"; then + OPENJDK=false +elif test -d "$SRC_ROOT/jdk/src/closed"; then + OPENJDK=false +else + OPENJDK=true +fi + +if test "x$OPENJDK" = "xtrue"; then + SET_OPENJDK=OPENJDK=true +fi + + + +############################################################################### +# +# JIGSAW or not. The JIGSAW variable is used during the intermediate +# stage when we are building both the old style JDK and the new style modularized JDK. +# When the modularized JDK is finalized, this option will go away. +# +# Check whether --enable-jigsaw was given. +if test "${enable_jigsaw+set}" = set; then : + enableval=$enable_jigsaw; +fi + + +if test "x$enable_jigsaw" = "xyes"; then + JIGSAW=true +else + JIGSAW=false +fi + + +############################################################################### +# +# Should we build a JDK/JVM with headful support (ie a graphical ui)? +# We always build headless support. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking headful support" >&5 +$as_echo_n "checking headful support... " >&6; } +# Check whether --enable-headful was given. +if test "${enable_headful+set}" = set; then : + enableval=$enable_headful; SUPPORT_HEADFUL=${enable_headful} +else + SUPPORT_HEADFUL=yes +fi + + +SUPPORT_HEADLESS=yes +BUILD_HEADLESS="BUILD_HEADLESS:=true" + +if test "x$SUPPORT_HEADFUL" = xyes; then + # We are building both headful and headless. + BUILD_HEADLESS_ONLY="" + headful_msg="inlude support for both headful and headless" +fi + +if test "x$SUPPORT_HEADFUL" = xno; then + # Thus we are building headless only. + BUILD_HEADLESS="BUILD_HEADLESS:=true" + BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" + headful_msg="headless only" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $headful_msg" >&5 +$as_echo "$headful_msg" >&6; } + + + + + + +############################################################################### +# +# Should we run the painfully slow javadoc tool? +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build documentation" >&5 +$as_echo_n "checking whether to build documentation... " >&6; } +# Check whether --enable-docs was given. +if test "${enable_docs+set}" = set; then : + enableval=$enable_docs; ENABLE_DOCS="${enableval}" +else + ENABLE_DOCS='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_DOCS" >&5 +$as_echo "$ENABLE_DOCS" >&6; } + +GENERATE_DOCS=false +if test "x$ENABLE_DOCS" = xyes; then + GENERATE_DOCS=true +fi + + +############################################################################### +# +# Should we compile nimbus swing L&F? We can probably remove this option +# since nimbus is officially part of javax now. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build nimbus L&F" >&5 +$as_echo_n "checking whether to build nimbus L&F... " >&6; } +# Check whether --enable-nimbus was given. +if test "${enable_nimbus+set}" = set; then : + enableval=$enable_nimbus; ENABLE_NIMBUS="${enableval}" +else + ENABLE_NIMBUS='yes' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_NIMBUS" >&5 +$as_echo "$ENABLE_NIMBUS" >&6; } +DISABLE_NIMBUS= +if test "x$ENABLE_NIMBUS" = xno; then + DISABLE_NIMBUS=true +fi + + +# Control wether Hotspot runs Queens test after build. +# Check whether --enable-hotspot-test-in-build was given. +if test "${enable_hotspot_test_in_build+set}" = set; then : + enableval=$enable_hotspot_test_in_build; +else + enable_hotspot_test_in_build=no +fi + +if test "x$enable_hotspot_test_in_build" = "xyes"; then + TEST_IN_BUILD=true +else + TEST_IN_BUILD=false +fi + + +############################################################################### +# +# Choose cacerts source file +# + +# Check whether --with-cacerts-file was given. +if test "${with_cacerts_file+set}" = set; then : + withval=$with_cacerts_file; +fi + +if test "x$with_cacerts_file" != x; then + CACERTS_FILE=$with_cacerts_file +else + if test "x$OPENJDK" = "xtrue"; then + CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts + else + CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal + fi +fi + + +############################################################################### +# +# Compress jars +# +COMPRESS_JARS=false + +# default for embedded is yes... +if test "x$JDK_VARIANT" = "xembedded"; then + COMPRESS_JARS=true +fi + + +############################################################################### +# +# Should we compile JFR +# default no, except for on closed-jdk and !embedded +# +ENABLE_JFR=no + +# Is the JFR source present + +# +# For closed && !embedded default is yes if the source is present +# +if test "x${OPENJDK}" != "xtrue" && test "x$JDK_VARIANT" != "xembedded" && test -d "$SRC_ROOT/jdk/src/closed/share/native/oracle/jfr"; then + ENABLE_JFR=yes +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build jfr" >&5 +$as_echo_n "checking whether to build jfr... " >&6; } +# Check whether --enable-jfr was given. +if test "${enable_jfr+set}" = set; then : + enableval=$enable_jfr; +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ENABLE_JFR}" >&5 +$as_echo "${ENABLE_JFR}" >&6; } + +if test "x$ENABLE_JFR" = "xyes"; then + ENABLE_JFR=true +elif test "x$ENABLE_JFR" = "xno"; then + ENABLE_JFR=false +else + as_fn_error $? "Invalid argument to --enable-jfr" "$LINENO" 5 +fi + + + + +# Source the version numbers +. $AUTOCONF_DIR/version.numbers +if test "x$OPENJDK" = "xfalse"; then + . $AUTOCONF_DIR/closed.version.numbers +fi +# Now set the JDK version, milestone, build number etc. + + + + + + + + + + + + +COPYRIGHT_YEAR=`date +'%Y'` + + +RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" + + +if test "x$JDK_UPDATE_VERSION" != x; then + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" +else + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" +fi + + +if test "x$MILESTONE" != x; then + RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" +else + RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" +fi + + +if test "x$JDK_BUILD_NUMBER" != x; then + FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" +else + JDK_BUILD_NUMBER=b00 + BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` + # Avoid [:alnum:] since it depends on the locale. + CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` + USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` + FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" +fi + +COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` + + + +# To properly create a configuration name, we need to have the OpenJDK target +# and options (variants and debug level) parsed. + + + +# Check whether --with-conf-name was given. +if test "${with_conf_name+set}" = set; then : + withval=$with_conf_name; CONF_NAME=${with_conf_name} +fi + + +# Test from where we are running configure, in or outside of src root. +if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then + # We are running configure from the src root. + # Create a default ./build/target-variant-debuglevel output root. + if test "x${CONF_NAME}" = x; then + CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + fi + OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" + mkdir -p "$OUTPUT_ROOT" + if test ! -d "$OUTPUT_ROOT"; then + as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 + fi +else + # We are running configure from outside of the src dir. + # Then use the current directory as output dir! + # If configuration is situated in normal build directory, just use the build + # directory name as configuration name, otherwise use the complete path. + if test "x${CONF_NAME}" = x; then + CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` + fi + OUTPUT_ROOT="$CURDIR" +fi + + + # Fail with message the path to the output root if var OUTPUT_ROOT contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$OUTPUT_ROOT" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + OUTPUT_ROOT=`$CYGPATH -s -m -a "$OUTPUT_ROOT"` + OUTPUT_ROOT=`$CYGPATH -u "$OUTPUT_ROOT"` + else + as_fn_error $? "You cannot have spaces in the path to the output root! \"$OUTPUT_ROOT\"" "$LINENO" 5 + fi + fi + + +SPEC=$OUTPUT_ROOT/spec.gmk + +CONF_NAME=$CONF_NAME + +OUTPUT_ROOT=$OUTPUT_ROOT + + +# Most of the probed defines are put into config.h +ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" + +# The spec.gmk file contains all variables for the make system. +ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" + +# The spec.sh file contains variables for compare{images|-objects}.sh scrips. +ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" + +# The generated Makefile knows where the spec.gmk is and where the source is. +# You can run make from the OUTPUT_ROOT, or from the top-level Makefile +# which will look for generated configurations +ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" + + +# Save the arguments given to us +echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments + + +############################################################################### +# +# Setup BootJDK, used to bootstrap the build. +# +############################################################################### + + +BOOT_JDK_FOUND=no + +# Check whether --with-boot-jdk was given. +if test "${with_boot_jdk+set}" = set; then : + withval=$with_boot_jdk; +fi + + +if test "x$with_boot_jdk" != x; then + BOOT_JDK=$with_boot_jdk + BOOT_JDK_FOUND=yes +fi +if test "x$BOOT_JDK_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_boot-jdk_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The boot-jdk comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_boot-jdk} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for boot-jdk" >&5 +$as_echo "$as_me: Using builddeps $resource for boot-jdk" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# boot-jdk is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/boot-jdk.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_boot-jdk_ROOT} + thecflags=${builddep_boot-jdk_CFLAGS} + thelibs=${builddep_boot-jdk_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency boot-jdk" "$LINENO" 5 + fi + BOOT_JDK=$depdir + if test "x$theroot" != x; then + BOOT_JDK="$theroot" + fi + if test "x$thecflags" != x; then + BOOT_JDK_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + BOOT_JDK_LIBS="$thelibs" + fi + BOOT_JDK_FOUND=yes + else BOOT_JDK_FOUND=no + + fi + else BOOT_JDK_FOUND=no + + fi + +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + if test "x$JAVA_HOME" != x; then + if test ! -d "$JAVA_HOME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Your JAVA_HOME points to a non-existing directory!" >&5 +$as_echo "$as_me: Your JAVA_HOME points to a non-existing directory!" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + # Aha, the user has set a JAVA_HOME + # let us use that as the Boot JDK. + BOOT_JDK="$JAVA_HOME" + BOOT_JDK_FOUND=yes + # To be on the safe side, lets check that it is a JDK. + if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then + JAVAC="$BOOT_JDK/bin/javac" + JAVA="$BOOT_JDK/bin/java" + BOOT_JDK_FOUND=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=$JAVA_HOME" >&5 +$as_echo "$as_me: Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=$JAVA_HOME" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Extract the first word of "javac", so it can be a program name with args. +set dummy javac; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_JAVAC_CHECK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $JAVAC_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVAC_CHECK="$JAVAC_CHECK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_JAVAC_CHECK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVAC_CHECK=$ac_cv_path_JAVAC_CHECK +if test -n "$JAVAC_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC_CHECK" >&5 +$as_echo "$JAVAC_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "java", so it can be a program name with args. +set dummy java; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $JAVA_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVA_CHECK=$ac_cv_path_JAVA_CHECK +if test -n "$JAVA_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 +$as_echo "$JAVA_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + BINARY="$JAVAC_CHECK" + if test "x$JAVAC_CHECK" = x; then + BINARY="$JAVA_CHECK" + fi + if test "x$BINARY" != x; then + # So there is a java(c) binary, it might be part of a JDK. + # Lets find the JDK/JRE directory by following symbolic links. + # Linux/GNU systems often have links from /usr/bin/java to + # /etc/alternatives/java to the real JDK binary. + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$BINARY" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$BINARY"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + BINARY="$tmp" + + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + # Extract the first word of "readlink", so it can be a program name with args. +set dummy readlink; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READLINK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | grep GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + BINARY=`$READLINK -f $BINARY` + else + STARTDIR=$PWD + COUNTER=0 + DIR=`dirname $BINARY` + FIL=`basename $BINARY` + while test $COUNTER -lt 20; do + ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $DIR + cd `dirname $ISLINK` + DIR=`pwd` + FIL=`basename $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + BINARY=$DIR/$FIL + fi + fi + + BOOT_JDK=`dirname $BINARY` + BOOT_JDK=`cd $BOOT_JDK/..; pwd` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Try the MacOSX way. + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Extract the first word of "java", so it can be a program name with args. +set dummy java; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $JAVA_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVA_CHECK=$ac_cv_path_JAVA_CHECK +if test -n "$JAVA_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 +$as_echo "$JAVA_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAVA_CHECK" != x; then + # There is a java in the path. But apparently we have not found a javac + # in the path, since that would have been tested earlier. + if test "x$OPENJDK_TARGET_OS" = xwindows; then + # Now if this is a windows platform. The default installation of a JDK + # actually puts the JRE in the path and keeps the JDK out of the path! + # Go look in the default installation location. + BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=yes + fi + fi + if test "x$BOOT_JDK_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # openjdk is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=openjdk + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG" >&5 +$as_echo "$as_me: Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + else + + # Print a helpful message on how to acquire the necessary build dependency. + # openjdk is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=openjdk + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a JDK. $HELP_MSG" >&5 +$as_echo "$as_me: Could not find a JDK. $HELP_MSG" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi +fi + + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + # Extract the first word of "cygpath", so it can be a program name with args. +set dummy cygpath; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CYGPATH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + tmp="$BOOT_JDK" + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + BOOT_JDK="$tmp" + fi + + +# Now see if we can find the rt.jar, or its nearest equivalent. +BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" + + # Fail with message the path to the Boot JDK rt.jar (or nearest equivalent) if var BOOT_RTJAR contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$BOOT_RTJAR" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + BOOT_RTJAR=`$CYGPATH -s -m -a "$BOOT_RTJAR"` + BOOT_RTJAR=`$CYGPATH -u "$BOOT_RTJAR"` + else + as_fn_error $? "You cannot have spaces in the path to the Boot JDK rt.jar (or nearest equivalent)! \"$BOOT_RTJAR\"" "$LINENO" 5 + fi + fi + + +BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" + + # Fail with message the path to the Boot JDK tools.jar (or nearest equivalent) if var BOOT_TOOLSJAR contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$BOOT_TOOLSJAR" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + BOOT_TOOLSJAR=`$CYGPATH -s -m -a "$BOOT_TOOLSJAR"` + BOOT_TOOLSJAR=`$CYGPATH -u "$BOOT_TOOLSJAR"` + else + as_fn_error $? "You cannot have spaces in the path to the Boot JDK tools.jar (or nearest equivalent)! \"$BOOT_TOOLSJAR\"" "$LINENO" 5 + fi + fi + + +if test ! -f $BOOT_RTJAR; then + # On MacOSX it is called classes.jar + BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar + if test ! -f $BOOT_RTJAR; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Cannot find the rt.jar or its equivalent!" >&5 +$as_echo "$as_me: Cannot find the rt.jar or its equivalent!" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: This typically means that configure failed to automatically find a suitable Boot JDK" >&5 +$as_echo "$as_me: This typically means that configure failed to automatically find a suitable Boot JDK" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + # Remove the .. + BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" + # The tools.jar is part of classes.jar + BOOT_TOOLSJAR="$BOOT_RTJAR" +fi + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot rt.jar" >&5 +$as_echo_n "checking for Boot rt.jar... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_RTJAR" >&5 +$as_echo "$BOOT_RTJAR" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot tools.jar" >&5 +$as_echo_n "checking for Boot tools.jar... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_TOOLSJAR" >&5 +$as_echo "$BOOT_TOOLSJAR" >&6; } + +# Use the java tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 +$as_echo_n "checking for java in Boot JDK... " >&6; } +JAVA=$BOOT_JDK/bin/java +if test ! -x $JAVA; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working java" >&5 +$as_echo "$as_me: Could not find a working java" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi +BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes $BOOT_JDK_VERSION" >&5 +$as_echo "yes $BOOT_JDK_VERSION" >&6; } + + +# Extra M4 quote needed to protect [] in grep expression. +FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` +if test "x$FOUND_VERSION_78" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # openjdk is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=openjdk + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: Your boot-jdk must be version 7 or 8. $HELP_MSG" >&5 +$as_echo "$as_me: Your boot-jdk must be version 7 or 8. $HELP_MSG" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi + +# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. +BOOT_JDK_SOURCETARGET="-source 7 -target 7" + + +# Use the javac tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 +$as_echo_n "checking for javac in Boot JDK... " >&6; } +JAVAC=$BOOT_JDK/bin/javac +if test ! -x $JAVAC; then + as_fn_error $? "Could not find a working javac" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + + +# Use the javah tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 +$as_echo_n "checking for javah in Boot JDK... " >&6; } +JAVAH=$BOOT_JDK/bin/javah +if test ! -x $JAVAH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working javah" >&5 +$as_echo "$as_me: Could not find a working javah" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +# Use the jar tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 +$as_echo_n "checking for jar in Boot JDK... " >&6; } +JAR=$BOOT_JDK/bin/jar +if test ! -x $JAR; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working jar" >&5 +$as_echo "$as_me: Could not find a working jar" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +# Use the rmic tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rmic in Boot JDK" >&5 +$as_echo_n "checking for rmic in Boot JDK... " >&6; } +RMIC=$BOOT_JDK/bin/rmic +if test ! -x $RMIC; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working rmic" >&5 +$as_echo "$as_me: Could not find a working rmic" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +# Use the native2ascii tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 +$as_echo_n "checking for native2ascii in Boot JDK... " >&6; } +NATIVE2ASCII=$BOOT_JDK/bin/native2ascii +if test ! -x $NATIVE2ASCII; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working native2ascii" >&5 +$as_echo "$as_me: Could not find a working native2ascii" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + + +############################################################################## +# +# Specify options for anything that is run with the Boot JDK. +# + +# Check whether --with-boot-jdk-jvmargs was given. +if test "${with_boot_jdk_jvmargs+set}" = set; then : + withval=$with_boot_jdk_jvmargs; +fi + + +if test "x$with_boot_jdk_jvmargs" = x; then + # Not all JVM:s accept the same arguments on the command line. + # OpenJDK specific increase in thread stack for JDK build, + # well more specifically, when running javac. + if test "x$BUILD_NUM_BITS" = x32; then + STACK_SIZE=768 + else + # Running Javac on a JVM on a 64-bit machine, the stack takes more space + # since 64-bit pointers are pushed on the stach. Apparently, we need + # to increase the stack space when javacing the JDK.... + STACK_SIZE=1536 + fi + + # Minimum amount of heap memory. + + # Test if -Xms64M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xms64M to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -Xms64M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xms64M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -Xms64M" + fi + + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + # Why does macosx need more heap? Its the huge JDK batch. + + # Test if -Xmx1600M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xmx1600M to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -Xmx1600M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xmx1600M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1600M" + fi + + else + + # Test if -Xmx1100M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xmx1100M to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -Xmx1100M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xmx1100M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1100M" + fi + + fi + # When is adding -client something that speeds up the JVM? + # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) + + # Test if -XX:PermSize=32m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:PermSize=32m to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:PermSize=32m -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:PermSize=32m -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:PermSize=32m" + fi + + + # Test if -XX:MaxPermSize=160m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:MaxPermSize=160m to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:MaxPermSize=160m" + fi + + + # Test if -XX:ThreadStackSize=$STACK_SIZE is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:ThreadStackSize=$STACK_SIZE to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:ThreadStackSize=$STACK_SIZE" + fi + + # Disable special log output when a debug build is used as Boot JDK... + + # Test if -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput" + fi + +fi + +BOOT_JDK_JVMARGS=$boot_jdk_jvmargs + + + +############################################################################### +# +# Configure the sources to use. We can add or override individual directories. +# +############################################################################### + + + +# Where are the sources. Any of these can be overridden +# using --with-override-corba and the likes. +LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" +CORBA_TOPDIR="$SRC_ROOT/corba" +JAXP_TOPDIR="$SRC_ROOT/jaxp" +JAXWS_TOPDIR="$SRC_ROOT/jaxws" +HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" +JDK_TOPDIR="$SRC_ROOT/jdk" + + + + + + + + + +############################################################################### +# +# Pickup additional source for a component from outside of the source root +# or override source for a component. +# + +# Check whether --with-add-source-root was given. +if test "${with_add_source_root+set}" = set; then : + withval=$with_add_source_root; +fi + + + +# Check whether --with-override-source-root was given. +if test "${with_override_source_root+set}" = set; then : + withval=$with_override_source_root; +fi + + + +# Check whether --with-adds-and-overrides was given. +if test "${with_adds_and_overrides+set}" = set; then : + withval=$with_adds_and_overrides; +fi + + +if test "x$with_adds_and_overrides" != x; then + with_add_source_root="$with_adds_and_overrides/adds" + with_override_source_root="$with_adds_and_overrides/overrides" +fi + +if test "x$with_add_source_root" != x; then + if ! test -d $with_add_source_root; then + as_fn_error $? "Trying to use a non-existant add-source-root $with_add_source_root" "$LINENO" 5 + fi + CURDIR="$PWD" + cd "$with_add_source_root" + ADD_SRC_ROOT="`pwd`" + cd "$CURDIR" + # Verify that the addon source root does not have any root makefiles. + # If it does, then it is usually an error, prevent this. + if test -f $with_add_source_root/langtools/makefiles/Makefile || \ + test -f $with_add_source_root/langtools/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/corba/makefiles/Makefile || \ + test -f $with_add_source_root/corba/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full corba repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ + test -f $with_add_source_root/jaxp/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ + test -f $with_add_source_root/jaxws/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ + test -f $with_add_source_root/hotspot/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/jdk/makefiles/Makefile || \ + test -f $with_add_source_root/jdk/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources." "$LINENO" 5 + fi +fi + + +if test "x$with_override_source_root" != x; then + if ! test -d $with_override_source_root; then + as_fn_error $? "Trying to use a non-existant override-source-root $with_override_source_root" "$LINENO" 5 + fi + CURDIR="$PWD" + cd "$with_override_source_root" + OVERRIDE_SRC_ROOT="`pwd`" + cd "$CURDIR" + if test -f $with_override_source_root/langtools/makefiles/Makefile || \ + test -f $with_override_source_root/langtools/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/corba/makefiles/Makefile || \ + test -f $with_override_source_root/corba/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full corba repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ + test -f $with_override_source_root/jaxp/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ + test -f $with_override_source_root/jaxws/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ + test -f $with_override_source_root/hotspot/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/jdk/makefiles/Makefile || \ + test -f $with_override_source_root/jdk/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override." "$LINENO" 5 + fi +fi + + +############################################################################### +# +# Override a repo completely, this is used for example when you have 3 small +# development sandboxes of the langtools sources and want to avoid having 3 full +# OpenJDK sources checked out on disk. +# +# Assuming that the 3 langtools sandboxes are located here: +# /home/fredrik/sandbox1/langtools +# /home/fredrik/sandbox2/langtools +# /home/fredrik/sandbox3/langtools +# +# From the source root you create build subdirs manually: +# mkdir -p build1 build2 build3 +# in each build directory run: +# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) +# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) +# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) +# + + +# Check whether --with-override-langtools was given. +if test "${with_override_langtools+set}" = set; then : + withval=$with_override_langtools; +fi + + + +# Check whether --with-override-corba was given. +if test "${with_override_corba+set}" = set; then : + withval=$with_override_corba; +fi + + + +# Check whether --with-override-jaxp was given. +if test "${with_override_jaxp+set}" = set; then : + withval=$with_override_jaxp; +fi + + + +# Check whether --with-override-jaxws was given. +if test "${with_override_jaxws+set}" = set; then : + withval=$with_override_jaxws; +fi + + + +# Check whether --with-override-hotspot was given. +if test "${with_override_hotspot+set}" = set; then : + withval=$with_override_hotspot; +fi + + + +# Check whether --with-override-jdk was given. +if test "${with_override_jdk+set}" = set; then : + withval=$with_override_jdk; +fi + + +if test "x$with_override_langtools" != x; then + CURDIR="$PWD" + cd "$with_override_langtools" + LANGTOOLS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override langtools with a full langtools repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if langtools should be overridden" >&5 +$as_echo_n "checking if langtools should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $LANGTOOLS_TOPDIR" >&5 +$as_echo "yes with $LANGTOOLS_TOPDIR" >&6; } +fi +if test "x$with_override_corba" != x; then + CURDIR="$PWD" + cd "$with_override_corba" + CORBA_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override corba with a full corba repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if corba should be overridden" >&5 +$as_echo_n "checking if corba should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $CORBA_TOPDIR" >&5 +$as_echo "yes with $CORBA_TOPDIR" >&6; } +fi +if test "x$with_override_jaxp" != x; then + CURDIR="$PWD" + cd "$with_override_jaxp" + JAXP_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override jaxp with a full jaxp repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxp should be overridden" >&5 +$as_echo_n "checking if jaxp should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXP_TOPDIR" >&5 +$as_echo "yes with $JAXP_TOPDIR" >&6; } +fi +if test "x$with_override_jaxws" != x; then + CURDIR="$PWD" + cd "$with_override_jaxws" + JAXWS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override jaxws with a full jaxws repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxws should be overridden" >&5 +$as_echo_n "checking if jaxws should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXWS_TOPDIR" >&5 +$as_echo "yes with $JAXWS_TOPDIR" >&6; } +fi +if test "x$with_override_hotspot" != x; then + CURDIR="$PWD" + cd "$with_override_hotspot" + HOTSPOT_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ + ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override hotspot with a full hotspot repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if hotspot should be overridden" >&5 +$as_echo_n "checking if hotspot should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $HOTSPOT_TOPDIR" >&5 +$as_echo "yes with $HOTSPOT_TOPDIR" >&6; } +fi +if test "x$with_override_jdk" != x; then + CURDIR="$PWD" + cd "$with_override_jdk" + JDK_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JDK_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override JDK with a full JDK repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if JDK should be overridden" >&5 +$as_echo_n "checking if JDK should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JDK_TOPDIR" >&5 +$as_echo "yes with $JDK_TOPDIR" >&6; } +fi + + + +LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" +CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" +JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" +JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" +HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" +JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" +IMAGES_OUTPUTDIR="$OUTPUT_ROOT/images" + + + + + + + + + +LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" +CORBA_DIST="$OUTPUT_ROOT/corba/dist" +JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" +JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" +HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" + + + + + + + + +############################################################################### +# +# Setup the toolchain (compilers etc), i.e. the tools that need to be +# cross-compilation aware. +# +############################################################################### + + +############################################################################### +# +# Configure the development tool paths and potential sysroot. +# +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +DEVKIT= +SYS_ROOT=/ + + +# The option used to specify the target .o,.a or .so file. +# When compiling, how to specify the to be created object file. +CC_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created executable. +EXE_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created dynamically linkable library. +LD_OUT_OPTION='-o$(SPACE)' +# When archiving, how to specify the to be create static archive for object files. +AR_OUT_OPTION='rcs$(SPACE)' + + + + + + + +# Check if the VS env variables were setup prior to running configure. +# If not, then find vcvarsall.bat and run it automatically, and integrate +# the set env variables into the spec file. +SETUPDEVENV="# No special vars" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + # If vcvarsall.bat has been run, then VCINSTALLDIR is set. + if test "x$VCINSTALLDIR" != x; then + # No further setup is needed. The build will happen from this kind + # of shell. + SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." + # Make sure to remind you, if you forget to run make from a cygwin bash shell + # that is spawned "bash -l" from a VS command prompt. + CHECK_FOR_VCINSTALLDIR=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you are running from within a VS command prompt" >&5 +$as_echo_n "checking if you are running from within a VS command prompt... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. + if test "x$VS100COMNTOOLS" != x; then + VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` + SEARCH_ROOT="$VS100COMNTOOLS" + else + VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` + SEARCH_ROOT="$PROGRAMFILES" + fi + VCPATH=`dirname "$VARSBAT"` + VCPATH=`cygpath -w "$VCPATH"` + if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 +$as_echo_n "checking if we can find the VS installation... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 + fi + case "$LEGACY_OPENJDK_TARGET_CPU1" in + i?86) + VARSBAT_ARCH=x86 + ;; + *) + VARSBAT_ARCH=$LEGACY_OPENJDK_TARGET_CPU1 + ;; + esac + # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat + cd $OUTPUT_ROOT + bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" + cd $CURDIR + if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can extract the needed env variables" >&5 +$as_echo_n "checking if we can extract the needed env variables... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Could not succesfully extract the env variables needed for the VS setup. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 + fi + # Now set all paths and other env variables. This will allow the rest of + # the configure script to find and run the compiler in the proper way. + . $OUTPUT_ROOT/localdevenv.sh + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 +$as_echo_n "checking if we can find the VS installation... " >&6; } + if test "x$VCINSTALLDIR" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VCINSTALLDIR" >&5 +$as_echo "$VCINSTALLDIR" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Could not find VS installation. Please install. If you are sure you have installed VS, then please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 + fi + CHECK_FOR_VCINSTALLDIR=no + SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5 +$as_echo_n "checking for msvcr100.dll... " >&6; } + +# Check whether --with-msvcr100dll was given. +if test "${with_msvcr100dll+set}" = set; then : + withval=$with_msvcr100dll; +fi + + if test "x$with_msvcr100dll" != x; then + MSVCR100DLL="$with_msvcr100dll" + else + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` + else + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` + if test "x$MSVCR100DLL" = x; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` + fi + fi + fi + if test "x$MSVCR100DLL" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR100DLL" >&5 +$as_echo "$MSVCR100DLL" >&6; } + + # Fail with message the path to msvcr100.dll if var MSVCR100DLL contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$MSVCR100DLL" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + MSVCR100DLL=`$CYGPATH -s -m -a "$MSVCR100DLL"` + MSVCR100DLL=`$CYGPATH -u "$MSVCR100DLL"` + else + as_fn_error $? "You cannot have spaces in the path to msvcr100.dll! \"$MSVCR100DLL\"" "$LINENO" 5 + fi + fi + + fi +fi + + + + +# Locate the actual tools + +# If --build AND --host is set, then the configure script will find any +# cross compilation tools in the PATH. Cross compilation tools +# follows the cross compilation standard where they are prefixed with ${host}. +# For example the binary i686-sun-solaris2.10-gcc +# will cross compile for i686-sun-solaris2.10 +# If neither of build and host is not set, then build=host and the +# default compiler found in the path will be used. +# Setting only --host, does not seem to be really supported. +# Please set both --build and --host if you want to cross compile. + +DEFINE_CROSS_COMPILE_ARCH="" +HOSTCC="" +HOSTCXX="" +HOSTLD="" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if this is a cross compile" >&5 +$as_echo_n "checking if this is a cross compile... " >&6; } +if test "x$OPENJDK_BUILD_SYSTEM" != "x$OPENJDK_TARGET_SYSTEM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM" >&5 +$as_echo "yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM" >&6; } + # We have detected a cross compile! + DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_OPENJDK_TARGET_CPU1" + # Now we to find a C/C++ compiler that can build executables for the build + # platform. We can't use the AC_PROG_CC macro, since it can only be used + # once. + for ac_prog in cl cc gcc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HOSTCC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HOSTCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_HOSTCC="$HOSTCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HOSTCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HOSTCC=$ac_cv_path_HOSTCC +if test -n "$HOSTCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCC" >&5 +$as_echo "$HOSTCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$HOSTCC" && break +done + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$HOSTCC" + car="${tmp%% *}" + tmp="$HOSTCC EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + HOSTCC="$car ${cdr% *}" + else + HOSTCC="$car" + fi + + for ac_prog in cl CC g++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HOSTCXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HOSTCXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_HOSTCXX="$HOSTCXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HOSTCXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HOSTCXX=$ac_cv_path_HOSTCXX +if test -n "$HOSTCXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCXX" >&5 +$as_echo "$HOSTCXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$HOSTCXX" && break +done + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$HOSTCXX" + car="${tmp%% *}" + tmp="$HOSTCXX EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + HOSTCXX="$car ${cdr% *}" + else + HOSTCXX="$car" + fi + + # Extract the first word of "ld", so it can be a program name with args. +set dummy ld; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HOSTLD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HOSTLD in + [\\/]* | ?:[\\/]*) + ac_cv_path_HOSTLD="$HOSTLD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HOSTLD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HOSTLD=$ac_cv_path_HOSTLD +if test -n "$HOSTLD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTLD" >&5 +$as_echo "$HOSTLD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$HOSTLD" + car="${tmp%% *}" + tmp="$HOSTLD EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + HOSTLD="$car ${cdr% *}" + else + HOSTLD="$car" + fi + + # Building for the build platform should be easy. Therefore + # we do not need any linkers or assemblers etc. +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +# You can force the sys-root if the sys-root encoded into the cross compiler tools +# is not correct. + +# Check whether --with-sys-root was given. +if test "${with_sys_root+set}" = set; then : + withval=$with_sys_root; +fi + + +if test "x$with_sys_root" != x; then + SYS_ROOT=$with_sys_root +fi + +# If a devkit is found on the builddeps server, then prepend its path to the +# PATH variable. If there are cross compilers available in the devkit, these +# will be found by AC_PROG_CC et al. + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_devkit_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The devkit comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_devkit} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for devkit" >&5 +$as_echo "$as_me: Using builddeps $resource for devkit" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# devkit is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/devkit.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_devkit_ROOT} + thecflags=${builddep_devkit_CFLAGS} + thelibs=${builddep_devkit_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency devkit" "$LINENO" 5 + fi + DEVKIT=$depdir + if test "x$theroot" != x; then + DEVKIT="$theroot" + fi + if test "x$thecflags" != x; then + DEVKIT_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + DEVKIT_LIBS="$thelibs" + fi + # Found devkit + PATH="$DEVKIT/bin:$PATH" + SYS_ROOT="$DEVKIT/${rewritten_target}/sys-root" + if test "x$x_includes" = "xNONE"; then + x_includes="$SYS_ROOT/usr/include/X11" + fi + if test "x$x_libraries" = "xNONE"; then + x_libraries="$SYS_ROOT/usr/lib" + fi + + + fi + + fi + + +if test "x$SYS_ROOT" != "x/" ; then + CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" + CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" + OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" + LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" +fi + +# Store the CFLAGS etal passed to the configure script. +ORG_CFLAGS="$CFLAGS" +ORG_CXXFLAGS="$CXXFLAGS" +ORG_OBJCFLAGS="$OBJCFLAGS" + + +# Check whether --with-tools-dir was given. +if test "${with_tools_dir+set}" = set; then : + withval=$with_tools_dir; TOOLS_DIR=$with_tools_dir +fi + + + +# Check whether --with-devkit was given. +if test "${with_devkit+set}" = set; then : + withval=$with_devkit; + if test "x$with_sys_root" != x; then + as_fn_error $? "Cannot specify both --with-devkit and --with-sys-root at the same time" "$LINENO" 5 + fi + if test "x$with_tools_dir" != x; then + as_fn_error $? "Cannot specify both --with-devkit and --with-tools-dir at the same time" "$LINENO" 5 + fi + TOOLS_DIR=$with_devkit/bin + SYS_ROOT=$with_devkit/$host_alias/libc + +fi + + +# autoconf magic only relies on PATH, so update it if tools dir is specified +OLD_PATH="$PATH" +if test "x$TOOLS_DIR" != x; then + PATH=$TOOLS_DIR:$PATH +fi + +# gcc is almost always present, but on Windows we +# prefer cl.exe and on Solaris we prefer CC. +# Thus test for them in this order. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in cl cc gcc + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl cc gcc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5 ; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5 ; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5 ; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +if test "x$CC" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # devkit is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=devkit + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find a compiler. $HELP_MSG" "$LINENO" 5 +fi +if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Do not use cc on MacOSX use gcc instead. + CC="gcc" +fi + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CC" + car="${tmp%% *}" + tmp="$CC EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CC="$car ${cdr% *}" + else + CC="$car" + fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in cl CC g++ + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in cl CC g++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # The found CC, even though it seems to be a g++ derivate, cannot compile + # c++ code. Override. + CXX="g++" +fi + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CXX" + car="${tmp%% *}" + tmp="$CXX EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CXX="$car ${cdr% *}" + else + CXX="$car" + fi + + +if test "x$CXX" = x || test "x$CC" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # devkit is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=devkit + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find the needed compilers! $HELP_MSG " "$LINENO" 5 +fi + +if test "x$OPENJDK_BUILD_OS" != xwindows; then + ac_ext=m +ac_cpp='$OBJCPP $CPPFLAGS' +ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_objc_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in gcc objcc objc cc CC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJC"; then + ac_cv_prog_OBJC="$OBJC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJC=$ac_cv_prog_OBJC +if test -n "$OBJC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJC" >&5 +$as_echo "$OBJC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OBJC" && break + done +fi +if test -z "$OBJC"; then + ac_ct_OBJC=$OBJC + for ac_prog in gcc objcc objc cc CC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJC"; then + ac_cv_prog_ac_ct_OBJC="$ac_ct_OBJC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJC=$ac_cv_prog_ac_ct_OBJC +if test -n "$ac_ct_OBJC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJC" >&5 +$as_echo "$ac_ct_OBJC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJC" && break +done + + if test "x$ac_ct_OBJC" = x; then + OBJC="gcc" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJC=$ac_ct_OBJC + fi +fi + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5 +$as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; } +if test "${ac_cv_objc_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_objc_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objc_compiler_gnu" >&5 +$as_echo "$ac_cv_objc_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GOBJC=yes +else + GOBJC= +fi +ac_test_OBJCFLAGS=${OBJCFLAGS+set} +ac_save_OBJCFLAGS=$OBJCFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5 +$as_echo_n "checking whether $OBJC accepts -g... " >&6; } +if test "${ac_cv_prog_objc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_objc_werror_flag=$ac_objc_werror_flag + ac_objc_werror_flag=yes + ac_cv_prog_objc_g=no + OBJCFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_cv_prog_objc_g=yes +else + OBJCFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + +else + ac_objc_werror_flag=$ac_save_objc_werror_flag + OBJCFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_cv_prog_objc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_objc_werror_flag=$ac_save_objc_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_objc_g" >&5 +$as_echo "$ac_cv_prog_objc_g" >&6; } +if test "$ac_test_OBJCFLAGS" = set; then + OBJCFLAGS=$ac_save_OBJCFLAGS +elif test $ac_cv_prog_objc_g = yes; then + if test "$GOBJC" = yes; then + OBJCFLAGS="-g -O2" + else + OBJCFLAGS="-g" + fi +else + if test "$GOBJC" = yes; then + OBJCFLAGS="-O2" + else + OBJCFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$OBJC" + car="${tmp%% *}" + tmp="$OBJC EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + OBJC="$car ${cdr% *}" + else + OBJC="$car" + fi + +else + OBJC= +fi + +# Restore the flags to the user specified values. +# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" +CFLAGS="$ORG_CFLAGS" +CXXFLAGS="$ORG_CXXFLAGS" +OBJCFLAGS="$ORG_OBJCFLAGS" + +# If we are not cross compiling, use the same compilers for +# building the build platform executables. +if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then + HOSTCC="$CC" + HOSTCXX="$CXX" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. +set dummy ${ac_tool_prefix}ld; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LD"; then + ac_cv_prog_LD="$LD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LD="${ac_tool_prefix}ld" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LD=$ac_cv_prog_LD +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LD"; then + ac_ct_LD=$LD + # Extract the first word of "ld", so it can be a program name with args. +set dummy ld; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LD"; then + ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LD="ld" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LD=$ac_cv_prog_ac_ct_LD +if test -n "$ac_ct_LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 +$as_echo "$ac_ct_LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LD" = x; then + LD="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LD=$ac_ct_LD + fi +else + LD="$ac_cv_prog_LD" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$LD" + car="${tmp%% *}" + tmp="$LD EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + LD="$car ${cdr% *}" + else + LD="$car" + fi + +LD="$CC" +LDEXE="$CC" +LDCXX="$CXX" +LDEXECXX="$CXX" +# LDEXE is the linker to use, when creating executables. + +# Linking C++ libraries. + +# Linking C++ executables. + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$AR" + car="${tmp%% *}" + tmp="$AR EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + AR="$car ${cdr% *}" + else + AR="$car" + fi + +if test "x$OPENJDK_BUILD_OS" = xmacosx; then + ARFLAGS="-r" +else + ARFLAGS="" +fi + + +COMPILER_NAME=gcc +COMPILER_TYPE=CC +if test "x$OPENJDK_BUILD_OS" = xwindows; then : + + # For now, assume that we are always compiling using cl.exe. + CC_OUT_OPTION=-Fo + EXE_OUT_OPTION=-out: + LD_OUT_OPTION=-out: + AR_OUT_OPTION=-out: + # On Windows, reject /usr/bin/link, which is a cygwin + # program for something completely different. + # Extract the first word of "link", so it can be a program name with args. +set dummy link; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINLD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WINLD"; then + ac_cv_prog_WINLD="$WINLD" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/link"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_WINLD="link" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_WINLD + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set WINLD to just the basename; use the full file name. + shift + ac_cv_prog_WINLD="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +WINLD=$ac_cv_prog_WINLD +if test -n "$WINLD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINLD" >&5 +$as_echo "$WINLD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Since we must ignore the first found link, WINLD will contain + # the full path to the link.exe program. + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$WINLD" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$WINLD"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + WINLD="$tmp" + + LD="$WINLD" + LDEXE="$WINLD" + LDCXX="$WINLD" + LDEXECXX="$WINLD" + # Set HOSTLD to same as LD until we fully support cross compilation + # on windows. + HOSTLD="$WINLD" + + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_MT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MT"; then + ac_cv_prog_MT="$MT" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/mt"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_MT="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_MT + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set MT to just the basename; use the full file name. + shift + ac_cv_prog_MT="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +MT=$ac_cv_prog_MT +if test -n "$MT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MT" >&5 +$as_echo "$MT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$MT" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$MT"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + MT="$tmp" + + # The resource compiler + # Extract the first word of "rc", so it can be a program name with args. +set dummy rc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RC"; then + ac_cv_prog_RC="$RC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/rc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_RC="rc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_RC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set RC to just the basename; use the full file name. + shift + ac_cv_prog_RC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +RC=$ac_cv_prog_RC +if test -n "$RC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 +$as_echo "$RC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$RC" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$RC"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + RC="$tmp" + + + RC_FLAGS="-nologo /l 0x409 /r" + if test "x$VARIANT" = xOPT; then : + + RC_FLAGS="$RC_FLAGS -d NDEBUG" + +fi + JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION + if test "x$JDK_UPDATE_VERSION" = x; then : + + JDK_UPDATE_VERSION_NOTNULL=0 + +fi + RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" + + # lib.exe is used to create static libraries. + # Extract the first word of "lib", so it can be a program name with args. +set dummy lib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINAR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WINAR"; then + ac_cv_prog_WINAR="$WINAR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_WINAR="lib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +WINAR=$ac_cv_prog_WINAR +if test -n "$WINAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINAR" >&5 +$as_echo "$WINAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$WINAR" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$WINAR"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + WINAR="$tmp" + + AR="$WINAR" + ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" + + # Extract the first word of "dumpbin", so it can be a program name with args. +set dummy dumpbin; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="dumpbin" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$DUMPBIN" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$DUMPBIN"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + DUMPBIN="$tmp" + + + COMPILER_TYPE=CL + CCXXFLAGS="$CCXXFLAGS -nologo" + +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CPP" + car="${tmp%% *}" + tmp="$CPP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CPP="$car ${cdr% *}" + else + CPP="$car" + fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CXXCPP" + car="${tmp%% *}" + tmp="$CXXCPP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CXXCPP="$car ${cdr% *}" + else + CXXCPP="$car" + fi + + +# for solaris we really need solaris tools, and not gnu equivalent +# these seems to normally reside in /usr/ccs/bin so add that to path before +# starting to probe +# +# NOTE: I add this /usr/ccs/bin after TOOLS but before OLD_PATH +# so that it can be overriden --with-tools-dir +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + PATH="${TOOLS_DIR}:/usr/ccs/bin:${OLD_PATH}" +fi + +# Find the right assembler. +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $AS in + [\\/]* | ?:[\\/]*) + ac_cv_path_AS="$AS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AS=$ac_cv_path_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$AS" + car="${tmp%% *}" + tmp="$AS EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + AS="$car ${cdr% *}" + else + AS="$car" + fi + + ASFLAGS=" " +else + AS="$CC -c" + ASFLAGS=" " +fi + + + +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # Extract the first word of "nm", so it can be a program name with args. +set dummy nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NM=$ac_cv_path_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$NM" + car="${tmp%% *}" + tmp="$NM EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + NM="$car ${cdr% *}" + else + NM="$car" + fi + + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $STRIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STRIP=$ac_cv_path_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$STRIP" + car="${tmp%% *}" + tmp="$STRIP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + STRIP="$car ${cdr% *}" + else + STRIP="$car" + fi + + # Extract the first word of "mcs", so it can be a program name with args. +set dummy mcs; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MCS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MCS in + [\\/]* | ?:[\\/]*) + ac_cv_path_MCS="$MCS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MCS=$ac_cv_path_MCS +if test -n "$MCS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 +$as_echo "$MCS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$MCS" + car="${tmp%% *}" + tmp="$MCS EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + MCS="$car ${cdr% *}" + else + MCS="$car" + fi + +else + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. +set dummy ${ac_tool_prefix}nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + ac_cv_prog_NM="$NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NM="${ac_tool_prefix}nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NM=$ac_cv_prog_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NM"; then + ac_ct_NM=$NM + # Extract the first word of "nm", so it can be a program name with args. +set dummy nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NM"; then + ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NM="nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NM=$ac_cv_prog_ac_ct_NM +if test -n "$ac_ct_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 +$as_echo "$ac_ct_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NM" = x; then + NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NM=$ac_ct_NM + fi +else + NM="$ac_cv_prog_NM" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$NM" + car="${tmp%% *}" + tmp="$NM EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + NM="$car ${cdr% *}" + else + NM="$car" + fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$STRIP" + car="${tmp%% *}" + tmp="$STRIP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + STRIP="$car ${cdr% *}" + else + STRIP="$car" + fi + +fi + +### +# +# Check for objcopy +# +# but search for gobjcopy first... +# since I on solaris found a broken objcopy...buhh +# +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gobjcopy", so it can be a program name with args. +set dummy ${ac_tool_prefix}gobjcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OBJCOPY=$ac_cv_path_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OBJCOPY"; then + ac_pt_OBJCOPY=$OBJCOPY + # Extract the first word of "gobjcopy", so it can be a program name with args. +set dummy gobjcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OBJCOPY="$ac_pt_OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OBJCOPY=$ac_cv_path_ac_pt_OBJCOPY +if test -n "$ac_pt_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OBJCOPY" >&5 +$as_echo "$ac_pt_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OBJCOPY" = x; then + OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJCOPY=$ac_pt_OBJCOPY + fi +else + OBJCOPY="$ac_cv_path_OBJCOPY" +fi + +if test "x$OBJCOPY" = x; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. +set dummy ${ac_tool_prefix}objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OBJCOPY=$ac_cv_path_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OBJCOPY"; then + ac_pt_OBJCOPY=$OBJCOPY + # Extract the first word of "objcopy", so it can be a program name with args. +set dummy objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OBJCOPY="$ac_pt_OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OBJCOPY=$ac_cv_path_ac_pt_OBJCOPY +if test -n "$ac_pt_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OBJCOPY" >&5 +$as_echo "$ac_pt_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OBJCOPY" = x; then + OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJCOPY=$ac_pt_OBJCOPY + fi +else + OBJCOPY="$ac_cv_path_OBJCOPY" +fi + +fi + +# Restore old path without tools dir +PATH="$OLD_PATH" + + +# FIXME: Currently we must test this after paths but before flags. Fix! + +# And we can test some aspects on the target using configure macros. + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +############################################################################### +# +# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. +# (The JVM can use 32 or 64 bit Java pointers but that decision +# is made at runtime.) +# +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +OLD_CXXFLAGS="$CXXFLAGS" +if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + CXXFLAGS="-m${with_target_bits} $CXXFLAGS" +fi +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5 +$as_echo_n "checking size of int *... " >&6; } +if test "${ac_cv_sizeof_int_p+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int *) +See \`config.log' for more details" "$LINENO" 5 ; } + else + ac_cv_sizeof_int_p=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int_p" >&5 +$as_echo "$ac_cv_sizeof_int_p" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT_P $ac_cv_sizeof_int_p +_ACEOF + + +CXXFLAGS="$OLD_CXXFLAGS" +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +# keep track of c/cxx flags that we added outselves... +# to prevent emitting warning... +ADDED_CFLAGS= +ADDED_CXXFLAGS= +ADDED_LDFLAGS= + +if test "x$ac_cv_sizeof_int_p" = x0; then + # The test failed, lets pick the assumed value. + ARCH_DATA_MODEL=$OPENJDK_TARGET_CPU_BITS +else + ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + ADDED_CFLAGS=" -m${with_target_bits}" + ADDED_CXXFLAGS=" -m${with_target_bits}" + ADDED_LDFLAGS=" -m${with_target_bits}" + + CFLAGS="${CFLAGS}${ADDED_CFLAGS}" + CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" + LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}" + + CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}" + CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}" + LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}" + fi +fi + +if test "x$ARCH_DATA_MODEL" = x64; then + A_LP64="LP64:=" + ADD_LP64="-D_LP64=1" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for target address size" >&5 +$as_echo_n "checking for target address size... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ARCH_DATA_MODEL bits" >&5 +$as_echo "$ARCH_DATA_MODEL bits" >&6; } +LP64=$A_LP64 + + + +if test "x$ARCH_DATA_MODEL" != "x$OPENJDK_TARGET_CPU_BITS"; then + as_fn_error $? "The tested number of bits in the target ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)" "$LINENO" 5 +fi + +# +# NOTE: check for -mstackrealign needs to be below potential addition of -m32 +# +if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. + # While waiting for a better solution, the current workaround is to use -mstackrealign. + CFLAGS="$CFLAGS -mstackrealign" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 32-bit compiler supports -mstackrealign" >&5 +$as_echo_n "checking if 32-bit compiler supports -mstackrealign... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main() { return 0; } +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path." "$LINENO" 5 + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + + +############################################################################### +# +# Is the target little of big endian? +# + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + ENDIAN="big";; #( + no) + ENDIAN="little" ;; #( + universal) + ENDIAN="universal_endianness" + ;; #( + *) + ENDIAN="unknown" ;; + esac + + +if test "x$ENDIAN" = xuniversal_endianness; then + as_fn_error $? "Building with both big and little endianness is not supported" "$LINENO" 5 +fi +if test "x$ENDIAN" = xunknown; then + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi +if test "x$ENDIAN" != "x$OPENJDK_TARGET_CPU_ENDIAN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)" >&5 +$as_echo "$as_me: WARNING: The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)" >&2;} + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi + + + +# Configure flags for the tools + + +############################################################################### +# +# How to compile shared libraries. +# + +if test "x$GCC" = xyes; then + COMPILER_NAME=gcc + PICFLAG="-fPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib$1.so' + STATIC_LIBRARY='lib$1.a' + SHARED_LIBRARY_FLAGS="-shared" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' + SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' + LD="$CC" + LDEXE="$CC" + LDCXX="$CXX" + LDEXECXX="$CXX" + POST_STRIP_CMD="$STRIP -g" + if test "x$JDK_VARIANT" = xembedded; then + POST_STRIP_CMD="$STRIP --strip-unneeded" + fi + + # Linking is different on MacOSX + if test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Might change in the future to clang. + COMPILER_NAME=gcc + SHARED_LIBRARY='lib$1.dylib' + SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + SHARED_LIBRARY_SUFFIX='.dylib' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' + POST_STRIP_CMD="$STRIP -S" + fi +else + if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler + COMPILER_NAME=ossc + PICFLAG="-KPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib$1.so' + STATIC_LIBRARY='lib$1.a' + SHARED_LIBRARY_FLAGS="-z defs -xildoff -ztext -G" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='-M$1' + C_FLAG_REORDER='-xF' + CXX_FLAG_REORDER='-xF' + SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' + CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" + CFLAGS_JDKLIB_EXTRA='-xstrconst' + POST_STRIP_CMD="$STRIP -x" + POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" + fi + if test "x$OPENJDK_BUILD_OS" = xwindows; then + # If it is not gcc, then assume it is the MS Visual Studio compiler + COMPILER_NAME=cl + PICFLAG="" + LIBRARY_PREFIX= + SHARED_LIBRARY='$1.dll' + STATIC_LIBRARY='$1.lib' + SHARED_LIBRARY_FLAGS="-LD" + SHARED_LIBRARY_SUFFIX='.dll' + STATIC_LIBRARY_SUFFIX='.lib' + OBJ_SUFFIX='.obj' + EXE_SUFFIX='.exe' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='' + fi +fi + + + + + + + + + + + + + + + + + +# The (cross) compiler is now configured, we can now test capabilities +# of the target platform. + + + +############################################################################### +# +# Setup the opt flags for different compilers +# and different operating systems. +# +C_FLAG_DEPS="-MMD -MF" +CXX_FLAG_DEPS="-MMD -MF" + +case $COMPILER_TYPE in + CC ) + D_FLAG="-g" + case $COMPILER_NAME in + gcc ) + case $OPENJDK_TARGET_OS in + macosx ) + # On MacOSX we optimize for size, something + # we should do for all platforms? + C_O_FLAG_HI="-Os" + C_O_FLAG_NORM="-Os" + C_O_FLAG_NONE="" + ;; + *) + C_O_FLAG_HI="-O3" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="-O0" + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then + CFLAGS_DEBUG_SYMBOLS="-g1" + CXXFLAGS_DEBUG_SYMBOLSG="-g1" + fi + ;; + esac + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; + ossc ) + # + # Forte has different names for this with their C++ compiler... + # + C_FLAG_DEPS="-xMMD -xMF" + CXX_FLAG_DEPS="-xMMD -xMF" + +# Extra options used with HIGHEST +# +# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be +# done with care, there are some assumptions below that need to +# be understood about the use of pointers, and IEEE behavior. +# +# Use non-standard floating point mode (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fns" +# Do some simplification of floating point arithmetic (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fsimple" +# Use single precision floating point with 'float' +CC_HIGHEST="$CC_HIGHEST -fsingle" +# Assume memory references via basic pointer types do not alias +# (Source with excessing pointer casting and data access with mixed +# pointer types are not recommended) +CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" +# Use intrinsic or inline versions for math/std functions +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" +# Loop data dependency optimizations (need -xO3 or higher) +CC_HIGHEST="$CC_HIGHEST -xdepend" +# Pointer parameters to functions do not overlap +# (Similar to -xalias_level=basic usage, but less obvious sometimes. +# If you pass in multiple pointers to the same data, do not use this) +CC_HIGHEST="$CC_HIGHEST -xrestrict" +# Inline some library routines +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xlibmil" +# Use optimized math routines +# (If you expect perfect errno behavior, do not use this) +# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now +#CC_HIGHEST="$CC_HIGHEST -xlibmopt" + + case $LEGACY_OPENJDK_TARGET_CPU1 in + i586) + C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" + C_O_FLAG_HI="-xO4 -Wu,-O4~yz" + C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" + CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" + CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" + CXX_O_FLAG_NONE="" + ;; + sparc) + CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" + CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NONE="" + ;; + esac + + CFLAGS_DEBUG_SYMBOLS="-g -xs" + CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" + esac + ;; + CL ) + D_FLAG= + C_O_FLAG_HI="-O2" + C_O_FLAG_NORM="-O1" + C_O_FLAG_NONE="-Od" + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; +esac + +if test -z "$C_O_FLAG_HIGHEST"; then + C_O_FLAG_HIGHEST="$C_O_FLAG_HI" +fi + +if test -z "$CXX_O_FLAG_HIGHEST"; then + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" +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" + +############################################################################### +# +# Now setup the CFLAGS and LDFLAGS for the JDK build. +# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. +# +case $COMPILER_NAME in + gcc ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ + -pipe \ + -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" + case $OPENJDK_TARGET_CPU_ARCH in + arm ) + # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + ppc ) + # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing + ;; + * ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + esac + ;; + ossc ) + CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" + CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" + ;; + cl ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ + -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ + -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ + -DWIN32 -DIAL" + case $LEGACY_OPENJDK_TARGET_CPU1 in + i?86 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" + ;; + amd64 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" + ;; + esac + ;; +esac + +############################################################################### +# +# Cross-compile arch specific flags + +# +if test "x$JDK_VARIANT" = "xembedded"; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DJAVASE_EMBEDDED" +fi + +case $OPENJDK_TARGET_CPU_ARCH in +arm ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +ppc ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +esac + +############################################################################### + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" + +# The package path is used only on macosx? +PACKAGE_PATH=/opt/local + + +# Sometimes we use a cpu dir (.../lib/amd64/server) +# Sometimes not (.../lib/server) +LIBARCHDIR="$LEGACY_OPENJDK_TARGET_CPU2/" +if test "x$ENDIAN" = xlittle; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" +fi +if test "x$OPENJDK_TARGET_OS" = xlinux; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" +fi +if test "x$OPENJDK_TARGET_OS" = xwindows; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" +fi +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" +fi +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" + LIBARCHDIR="" +fi +if test "x$OPENJDK_TARGET_OS" = xbsd; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" +fi +if test "x$DEBUG_LEVEL" = xrelease; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" +fi + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_OPENJDK_TARGET_CPU1\"' -D$LEGACY_OPENJDK_TARGET_CPU1" +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ + -I${JDK_OUTPUTDIR}/include \ + -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ + -I${JDK_TOPDIR}/src/share/javavm/export \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/javavm/export \ + -I${JDK_TOPDIR}/src/share/native/common \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/native/common" + +# The shared libraries are compiled using the picflag. +CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" +CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " + +# Executable flags +CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" +CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" + +# Now this is odd. The JDK native libraries have to link against libjvm.so +# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. +# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library +# is identical for client and server? Yes. Which is picked at runtime (client or server)? +# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following +# libraries will link to whatever is in memory. Yuck. +# +# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. +if test "x$COMPILER_TYPE" = xCL; then + LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" + if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then + LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" + fi + # TODO: make -debug optional "--disable-full-debug-symbols" + LDFLAGS_JDK="$LDFLAGS_JDK -debug" + LDFLAGS_JDKLIB="${LDFLAGS_JDK} -dll -libpath:${JDK_OUTPUTDIR}/lib" + LDFLAGS_JDKLIB_SUFFIX="" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then + LDFLAGS_STACK_SIZE=1048576 + else + LDFLAGS_STACK_SIZE=327680 + fi + LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" +else + # If this is a --hash-style=gnu system, use --hash-style=both, why? + HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` + if test -n "$HAS_GNU_HASH"; then + # And since we now know that the linker is gnu, then add -z defs, to forbid + # undefined symbols in object files. + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" + if test "x$DEBUG_LEVEL" == "xrelease"; then + # When building release libraries, tell the linker optimize them. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + fi + fi + + LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" + LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" + if test "x$COMPILER_NAME" = xossc; then + LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" + fi + + # Only the jli library is explicitly linked when the launchers are built. + # The libjvm is then dynamically loaded/linked by the launcher. + LDFLAGS_JDKEXE="${LDFLAGS_JDK}" + if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then + LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" + LDFLAGS_JDKEXE_SUFFIX="-ljli" + fi +fi + +# Adjust flags according to debug level. +case $DEBUG_LEVEL in + fastdebug ) + CFLAGS="$CFLAGS $D_FLAG" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; + slowdebug ) + CFLAGS="$CFLAGS $D_FLAG" + C_O_FLAG_HI="$C_O_FLAG_NONE" + C_O_FLAG_NORM="$C_O_FLAG_NONE" + CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" + CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; +esac + + + + + + + + + + + + + + +# After we have toolchain, we can compile the uncygdrive helper + +# When using cygwin, we need a wrapper binary that renames +# /cygdrive/c/ arguments into c:/ arguments and peeks into +# @files and rewrites these too! This wrapper binary is +# called uncygdrive.exe. +UNCYGDRIVE= +if test "x$OPENJDK_BUILD_OS" = xwindows; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive can be created" >&5 +$as_echo_n "checking if uncygdrive can be created... " >&6; } + UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` + rm -f $OUTPUT_ROOT/uncygdrive* + UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` + cd $OUTPUT_ROOT + $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 + cd $CURDIR + + if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + cat $OUTPUT_ROOT/uncygdrive1.log + as_fn_error $? "Could not create $OUTPUT_ROOT/uncygdrive.exe" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNCYGDRIVE" >&5 +$as_echo "$UNCYGDRIVE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive.exe works" >&5 +$as_echo_n "checking if uncygdrive.exe works... " >&6; } + cd $OUTPUT_ROOT + $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 + cd $CURDIR + if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + cat $OUTPUT_ROOT/uncygdrive2.log + as_fn_error $? "Uncygdrive did not work!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj +fi + + + + + +# Setup debug symbols (need objcopy from the toolchain for that) + +# +# ENABLE_DEBUG_SYMBOLS +# This must be done after the toolchain is setup, since we're looking at objcopy. +# +ENABLE_DEBUG_SYMBOLS=default + +# default on macosx is no... +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + ENABLE_DEBUG_SYMBOLS=no +fi + +# default for embedded is no... +if test "x$JDK_VARIANT" = "xembedded"; then + ENABLE_DEBUG_SYMBOLS=no +fi + +# Check whether --enable-debug-symbols was given. +if test "${enable_debug_symbols+set}" = set; then : + enableval=$enable_debug_symbols; ENABLE_DEBUG_SYMBOLS=${enable_debug_symbols} +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should generate debug symbols" >&5 +$as_echo_n "checking if we should generate debug symbols... " >&6; } + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xyes" && test "x$OBJCOPY" = x; then + # explicit enabling of enable-debug-symbols and can't find objcopy + # this is an error + as_fn_error $? "Unable to find objcopy, cannot enable debug-symbols" "$LINENO" 5 +fi + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then + # Default is on if objcopy is found, otherwise off + if test "x$OBJCOPY" != x; then + ENABLE_DEBUG_SYMBOLS=yes + else + ENABLE_DEBUG_SYMBOLS=no + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_DEBUG_SYMBOLS" >&5 +$as_echo "$ENABLE_DEBUG_SYMBOLS" >&6; } + +# +# ZIP_DEBUGINFO_FILES +# +ZIP_DEBUGINFO_FILES=yes + +# Check whether --enable-zip-debug-info was given. +if test "${enable_zip_debug_info+set}" = set; then : + enableval=$enable_zip_debug_info; ZIP_DEBUGINFO_FILES=${enable_zip_debug_info} +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should zip debug-info files" >&5 +$as_echo_n "checking if we should zip debug-info files... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP_DEBUGINFO_FILES" >&5 +$as_echo "$ZIP_DEBUGINFO_FILES" >&6; } + +# Hotspot wants ZIP_DEBUGINFO_FILES to be 1 for yes +# use that... +if test "x$ZIP_DEBUGINFO_FILES" = "xyes"; then + ZIP_DEBUGINFO_FILES=1 +else + ZIP_DEBUGINFO_FILES=0 +fi + + + + + + + +############################################################################### +# +# Check dependencies for external and internal libraries. +# +############################################################################### + + + +############################################################################### +# +# OS specific settings that we never will need to probe. +# +if test "x$OPENJDK_TARGET_OS" = xlinux; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Linux?" >&5 +$as_echo_n "checking what is not needed on Linux?... " >&6; } + PULSE_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pulse" >&5 +$as_echo "pulse" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Solaris?" >&5 +$as_echo_n "checking what is not needed on Solaris?... " >&6; } + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 +$as_echo "alsa pulse" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xwindows; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Windows?" >&5 +$as_echo_n "checking what is not needed on Windows?... " >&6; } + CUPS_NOT_NEEDED=yes + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + X11_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa cups pulse x11" >&5 +$as_echo "alsa cups pulse x11" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on MacOSX?" >&5 +$as_echo_n "checking what is not needed on MacOSX?... " >&6; } + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + X11_NOT_NEEDED=yes + FREETYPE2_NOT_NEEDED=yes + # If the java runtime framework is disabled, then we need X11. + # This will be adjusted below. + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse x11" >&5 +$as_echo "alsa pulse x11" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xbsd; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on bsd?" >&5 +$as_echo_n "checking what is not needed on bsd?... " >&6; } + ALSA_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa" >&5 +$as_echo "alsa" >&6; } +fi + +if test "x$OPENJDK" = "xfalse"; then + FREETYPE2_NOT_NEEDED=yes +fi + +############################################################################### +# +# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM +# that uses this API. +# +# Check whether --enable-macosx-runtime-support was given. +if test "${enable_macosx_runtime_support+set}" = set; then : + enableval=$enable_macosx_runtime_support; MACOSX_RUNTIME_SUPPORT="${enableval}" +else + MACOSX_RUNTIME_SUPPORT="no" +fi + + +USE_MACOSX_RUNTIME_SUPPORT=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for explicit Java runtime support in the OS" >&5 +$as_echo_n "checking for explicit Java runtime support in the OS... " >&6; } +if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then + if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then + MACOSX_RUNTIME_SUPPORT=yes + USE_MACOSX_RUNTIME_SUPPORT=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, does not need alsa freetype2 pulse and X11" >&5 +$as_echo "yes, does not need alsa freetype2 pulse and X11" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, but explicitly disabled." >&5 +$as_echo "yes, but explicitly disabled." >&6; } + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on an X11 build on MacOSX?" >&5 +$as_echo_n "checking what is not needed on an X11 build on MacOSX?... " >&6; } + X11_NOT_NEEDED= + FREETYPE2_NOT_NEEDED= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 +$as_echo "alsa pulse" >&6; } +fi + + + + + +############################################################################### +# +# Check for X Windows +# + +# Check if the user has specified sysroot, but not --x-includes or --x-libraries. +# Make a simple check for the libraries at the sysroot, and setup --x-includes and +# --x-libraries for the sysroot, if that seems to be correct. +if test "x$SYS_ROOT" != "x/"; then + if test "x$x_includes" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/include/X11/Xlib.h"; then + x_includes="$SYS_ROOT/usr/X11R6/include" + fi + fi + if test "x$x_libraries" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/lib/libX11.so"; then + x_libraries="$SYS_ROOT/usr/X11R6/lib" + fi + fi +fi + +# Now let autoconf do it's magic +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +# Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #( + *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.i conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +fi + +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = x""yes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = x""yes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = x""yes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = x""yes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = x""yes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + + +if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then + + # Print a helpful message on how to acquire the necessary build dependency. + # x11 is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=x11 + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find X11 libraries. $HELP_MSG" "$LINENO" 5 +fi + +# Some of the old makefiles require a setting of OPENWIN_HOME +# Since the X11R6 directory has disappeared on later Linuxes, +# we need to probe for it. +if test "x$OPENJDK_TARGET_OS" = xlinux; then + if test -d "$SYS_ROOT/usr/X11R6"; then + OPENWIN_HOME="$SYS_ROOT/usr/X11R6" + fi + if test -d "$SYS_ROOT/usr/include/X11"; then + OPENWIN_HOME="$SYS_ROOT/usr" + fi +fi +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + OPENWIN_HOME="/usr/openwin" +fi + + + +# +# Weird Sol10 something check...TODO change to try compile +# +if test "x${OPENJDK_TARGET_OS}" = xsolaris; then + if test "`uname -r`" = "5.10"; then + if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then + X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" + fi + fi +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $X_CFLAGS" +for ac_header in X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + X11_A_OK=yes +else + X11_A_OK=no +fi + +done + +CFLAGS="$OLD_CFLAGS" +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then + + # Print a helpful message on how to acquire the necessary build dependency. + # x11 is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=x11 + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG" "$LINENO" 5 +fi + + + + + + +############################################################################### +# +# The common unix printing system cups is used to print from java. +# + +# Check whether --with-cups was given. +if test "${with_cups+set}" = set; then : + withval=$with_cups; +fi + + +# Check whether --with-cups-include was given. +if test "${with_cups_include+set}" = set; then : + withval=$with_cups_include; +fi + + +# Check whether --with-cups-lib was given. +if test "${with_cups_lib+set}" = set; then : + withval=$with_cups_lib; +fi + + +if test "x$CUPS_NOT_NEEDED" = xyes; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cups not used, so --with-cups is ignored" >&5 +$as_echo "$as_me: WARNING: cups not used, so --with-cups is ignored" >&2;} + fi + CUPS_CFLAGS= + CUPS_LIBS= +else + CUPS_FOUND=no + + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + as_fn_error $? "It is not possible to disable the use of cups. Remove the --without-cups option." "$LINENO" 5 + fi + + if test "x${with_cups}" != x; then + CUPS_LIBS="-L${with_cups}/lib -lcups" + CUPS_CFLAGS="-I${with_cups}/include" + CUPS_FOUND=yes + fi + if test "x${with_cups_include}" != x; then + CUPS_CFLAGS="-I${with_cups_include}" + CUPS_FOUND=yes + fi + if test "x${with_cups_lib}" != x; then + CUPS_LIBS="-L${with_cups_lib} -lcups" + CUPS_FOUND=yes + fi + if test "x$CUPS_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_cups_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_cups_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_cups_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The cups comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_cups} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for cups" >&5 +$as_echo "$as_me: Using builddeps $resource for cups" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# cups is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/cups.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_cups_ROOT} + thecflags=${builddep_cups_CFLAGS} + thelibs=${builddep_cups_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency cups" "$LINENO" 5 + fi + CUPS=$depdir + if test "x$theroot" != x; then + CUPS="$theroot" + fi + if test "x$thecflags" != x; then + CUPS_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + CUPS_LIBS="$thelibs" + fi + CUPS_FOUND=yes + + fi + + fi + + fi + if test "x$CUPS_FOUND" = xno; then + # Are the cups headers installed in the default /usr/include location? + for ac_header in cups/cups.h cups/ppd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + CUPS_FOUND=yes + CUPS_CFLAGS= + CUPS_LIBS="-lcups" + DEFAULT_CUPS=yes +fi + +done + + fi + if test "x$CUPS_FOUND" = xno; then + # Getting nervous now? Lets poke around for standard Solaris third-party + # package installation locations. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers and libs" >&5 +$as_echo_n "checking for cups headers and libs... " >&6; } + if test -s /opt/sfw/cups/include/cups/cups.h; then + # An SFW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/sfw/cups/include" + CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" + elif test -s /opt/csw/include/cups/cups.h; then + # A CSW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/csw/include" + CUPS_LIBS="-L/opt/csw/lib -lcups" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5 +$as_echo "$CUPS_FOUND" >&6; } + fi + if test "x$CUPS_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # cups is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=cups + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find cups! $HELP_MSG " "$LINENO" 5 + fi +fi + + + + + + + +############################################################################### +# +# The ubiquitous freetype2 library is used to render fonts. +# + +# Check whether --with-freetype was given. +if test "${with_freetype+set}" = set; then : + withval=$with_freetype; +fi + + +# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree +USING_SYSTEM_FT_LIB=false + +if test "x$FREETYPE2_NOT_NEEDED" = xyes; then + if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: freetype not used, so --with-freetype is ignored" >&5 +$as_echo "$as_me: WARNING: freetype not used, so --with-freetype is ignored" >&2;} + fi + FREETYPE2_CFLAGS= + FREETYPE2_LIBS= + FREETYPE2_LIB_PATH= +else + FREETYPE2_FOUND=no + + if test "x$with_freetype" != x; then + + # Fail with message the path to freetype if var with_freetype contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$with_freetype" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + with_freetype=`$CYGPATH -s -m -a "$with_freetype"` + with_freetype=`$CYGPATH -u "$with_freetype"` + else + as_fn_error $? "You cannot have spaces in the path to freetype! \"$with_freetype\"" "$LINENO" 5 + fi + fi + + FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" + if test "x$OPENJDK_TARGET_OS" = xwindows; then + FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" + fi + FREETYPE2_LIB_PATH="$with_freetype/lib" + FREETYPE2_CFLAGS="-I$with_freetype/include" + if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then + FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" + fi + FREETYPE2_FOUND=yes + if test "x$FREETYPE2_FOUND" = xyes; then + # Verify that the directories exist + if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then + as_fn_error $? "Could not find the expected directories $with_freetype/lib and $with_freetype/include" "$LINENO" 5 + fi + # List the contents of the lib. + FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` + if test "x$FREETYPELIB" = x; then + as_fn_error $? "Could not find libfreetype.se nor freetype.dll in $with_freetype/lib" "$LINENO" 5 + fi + # Check one h-file + if ! test -s "$with_freetype/include/ft2build.h"; then + as_fn_error $? "Could not find $with_freetype/include/ft2build.h" "$LINENO" 5 + fi + fi + fi + if test "x$FREETYPE2_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_freetype2_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The freetype2 comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_freetype2} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for freetype2" >&5 +$as_echo "$as_me: Using builddeps $resource for freetype2" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# freetype2 is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/freetype2.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_freetype2_ROOT} + thecflags=${builddep_freetype2_CFLAGS} + thelibs=${builddep_freetype2_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency freetype2" "$LINENO" 5 + fi + FREETYPE2=$depdir + if test "x$theroot" != x; then + FREETYPE2="$theroot" + fi + if test "x$thecflags" != x; then + FREETYPE2_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + FREETYPE2_LIBS="$thelibs" + fi + FREETYPE2_FOUND=yes + else FREETYPE2_FOUND=no + + fi + else FREETYPE2_FOUND=no + + fi + + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE2" >&5 +$as_echo_n "checking for FREETYPE2... " >&6; } + +if test -n "$FREETYPE2_CFLAGS"; then + pkg_cv_FREETYPE2_CFLAGS="$FREETYPE2_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$FREETYPE2_LIBS"; then + pkg_cv_FREETYPE2_LIBS="$FREETYPE2_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FREETYPE2_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "freetype2" 2>&1` + else + FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --print-errors "freetype2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$FREETYPE2_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + FREETYPE2_FOUND=no +elif test $pkg_failed = untried; then + FREETYPE2_FOUND=no +else + FREETYPE2_CFLAGS=$pkg_cv_FREETYPE2_CFLAGS + FREETYPE2_LIBS=$pkg_cv_FREETYPE2_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + FREETYPE2_FOUND=yes +fi + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard locations" >&5 +$as_echo_n "checking for freetype in some standard locations... " >&6; } + + if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" + DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" + fi + if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2" + DEFAULT_FREETYPE_LIBS="-lfreetype" + fi + + PREV_CXXCFLAGS="$CXXFLAGS" + PREV_LDFLAGS="$LDFLAGS" + CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS" + LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include FT_FREETYPE_H + int main() { return 0; } + +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + # Yes, the default cflags and libs did the trick. + FREETYPE2_FOUND=yes + FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS" + FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS" + +else + + FREETYPE2_FOUND=no + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CXXCFLAGS="$PREV_CXXFLAGS" + LDFLAGS="$PREV_LDFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE2_FOUND" >&5 +$as_echo "$FREETYPE2_FOUND" >&6; } + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # freetype2 is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=freetype2 + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5 + fi +fi + + + + + + + + + +############################################################################### +# +# Check for alsa headers and libraries. Used on Linux/GNU systems. +# + +# Check whether --with-alsa was given. +if test "${with_alsa+set}" = set; then : + withval=$with_alsa; +fi + + +# Check whether --with-alsa-include was given. +if test "${with_alsa_include+set}" = set; then : + withval=$with_alsa_include; +fi + + +# Check whether --with-alsa-lib was given. +if test "${with_alsa_lib+set}" = set; then : + withval=$with_alsa_lib; +fi + + +if test "x$ALSA_NOT_NEEDED" = xyes; then + if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: alsa not used, so --with-alsa is ignored" >&5 +$as_echo "$as_me: WARNING: alsa not used, so --with-alsa is ignored" >&2;} + fi + ALSA_CFLAGS= + ALSA_LIBS= +else + ALSA_FOUND=no + + if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then + as_fn_error $? "It is not possible to disable the use of alsa. Remove the --without-alsa option." "$LINENO" 5 + fi + + if test "x${with_alsa}" != x; then + ALSA_LIBS="-L${with_alsa}/lib -lalsa" + ALSA_CFLAGS="-I${with_alsa}/include" + ALSA_FOUND=yes + fi + if test "x${with_alsa_include}" != x; then + ALSA_CFLAGS="-I${with_alsa_include}" + ALSA_FOUND=yes + fi + if test "x${with_alsa_lib}" != x; then + ALSA_LIBS="-L${with_alsa_lib} -lalsa" + ALSA_FOUND=yes + fi + if test "x$ALSA_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_alsa_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The alsa comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_alsa} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for alsa" >&5 +$as_echo "$as_me: Using builddeps $resource for alsa" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# alsa is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/alsa.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_alsa_ROOT} + thecflags=${builddep_alsa_CFLAGS} + thelibs=${builddep_alsa_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency alsa" "$LINENO" 5 + fi + ALSA=$depdir + if test "x$theroot" != x; then + ALSA="$theroot" + fi + if test "x$thecflags" != x; then + ALSA_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + ALSA_LIBS="$thelibs" + fi + ALSA_FOUND=yes + else ALSA_FOUND=no + + fi + else ALSA_FOUND=no + + fi + + fi + if test "x$ALSA_FOUND" = xno; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA" >&5 +$as_echo_n "checking for ALSA... " >&6; } + +if test -n "$ALSA_CFLAGS"; then + pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 + ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$ALSA_LIBS"; then + pkg_cv_ALSA_LIBS="$ALSA_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 + ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "alsa" 2>&1` + else + ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors "alsa" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$ALSA_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ALSA_FOUND=no +elif test $pkg_failed = untried; then + ALSA_FOUND=no +else + ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS + ALSA_LIBS=$pkg_cv_ALSA_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + ALSA_FOUND=yes +fi + fi + if test "x$ALSA_FOUND" = xno; then + for ac_header in alsa/asoundlib.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default" +if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ALSA_ASOUNDLIB_H 1 +_ACEOF + ALSA_FOUND=yes + ALSA_CFLAGS=-Iignoreme + ALSA_LIBS=-lasound + DEFAULT_ALSA=yes +else + ALSA_FOUND=no +fi + +done + + fi + if test "x$ALSA_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # alsa is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=alsa + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find alsa! $HELP_MSG " "$LINENO" 5 + fi +fi + + + + + + + +############################################################################### +# +# Check for the jpeg library +# + +USE_EXTERNAL_LIBJPEG=true +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5 +$as_echo_n "checking for main in -ljpeg... " >&6; } +if test "${ac_cv_lib_jpeg_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljpeg $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_jpeg_main=yes +else + ac_cv_lib_jpeg_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5 +$as_echo "$ac_cv_lib_jpeg_main" >&6; } +if test "x$ac_cv_lib_jpeg_main" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBJPEG 1 +_ACEOF + + LIBS="-ljpeg $LIBS" + +else + USE_EXTERNAL_LIBJPEG=false + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use jpeg decoder bundled with the OpenJDK source" >&5 +$as_echo "$as_me: Will use jpeg decoder bundled with the OpenJDK source" >&6;} + +fi + + + +############################################################################### +# +# Check for the gif library +# + +USE_EXTERNAL_LIBJPEG=true +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5 +$as_echo_n "checking for main in -lgif... " >&6; } +if test "${ac_cv_lib_gif_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgif $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_gif_main=yes +else + ac_cv_lib_gif_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5 +$as_echo "$ac_cv_lib_gif_main" >&6; } +if test "x$ac_cv_lib_gif_main" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBGIF 1 +_ACEOF + + LIBS="-lgif $LIBS" + +else + USE_EXTERNAL_LIBGIF=false + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use gif decoder bundled with the OpenJDK source" >&5 +$as_echo "$as_me: Will use gif decoder bundled with the OpenJDK source" >&6;} + +fi + + + +############################################################################### +# +# Check for the zlib library +# + + +# Check whether --with-zlib was given. +if test "${with_zlib+set}" = set; then : + withval=$with_zlib; +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5 +$as_echo_n "checking for compress in -lz... " >&6; } +if test "${ac_cv_lib_z_compress+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char compress (); +int +main () +{ +return compress (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_z_compress=yes +else + ac_cv_lib_z_compress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5 +$as_echo "$ac_cv_lib_z_compress" >&6; } +if test "x$ac_cv_lib_z_compress" = x""yes; then : + ZLIB_FOUND=yes +else + ZLIB_FOUND=no +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for which zlib to use" >&5 +$as_echo_n "checking for which zlib to use... " >&6; } + +DEFAULT_ZLIB=bundled +if test "x$OPENJDK_TARGET_OS" = xmacosx; then +# +# On macosx default is system...on others default is +# + DEFAULT_ZLIB=system +fi + +if test "x${ZLIB_FOUND}" != "xyes"; then +# +# If we don't find any system...set default to bundled +# + DEFAULT_ZLIB=bundled +fi + +# +# If user didn't specify, use DEFAULT_ZLIB +# +if test "x${with_zlib}" = "x"; then + with_zlib=${DEFAULT_ZLIB} +fi + +if test "x${with_zlib}" = "xbundled"; then + USE_EXTERNAL_LIBZ=false + { $as_echo "$as_me:${as_lineno-$LINENO}: result: bundled" >&5 +$as_echo "bundled" >&6; } +elif test "x${with_zlib}" = "xsystem"; then + if test "x${ZLIB_FOUND}" = "xyes"; then + USE_EXTERNAL_LIBZ=true + { $as_echo "$as_me:${as_lineno-$LINENO}: result: system" >&5 +$as_echo "system" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: system not found" >&5 +$as_echo "system not found" >&6; } + as_fn_error $? "--with-zlib=system specified, but no zlib found!" "$LINENO" 5 + fi +else + as_fn_error $? "Invalid value for --with-zlib: ${with_zlib}, use 'system' or 'bundled'" "$LINENO" 5 +fi + + + +############################################################################### +LIBZIP_CAN_USE_MMAP=true +if test "x$JDK_VARIANT" = "xembedded"; then + LIBZIP_CAN_USE_MMAP=false +fi + + +############################################################################### +# +# Check if altzone exists in time.h +# + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +return (int)altzone; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + has_altzone=yes +else + has_altzone=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test "x$has_altzone" = xyes; then + +$as_echo "#define HAVE_ALTZONE 1" >>confdefs.h + +fi + +############################################################################### +# +# Check the maths library +# + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 +$as_echo_n "checking for cos in -lm... " >&6; } +if test "${ac_cv_lib_m_cos+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cos (); +int +main () +{ +return cos (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_m_cos=yes +else + ac_cv_lib_m_cos=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 +$as_echo "$ac_cv_lib_m_cos" >&6; } +if test "x$ac_cv_lib_m_cos" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF + + LIBS="-lm $LIBS" + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: Maths library was not found" >&5 +$as_echo "$as_me: Maths library was not found" >&6;} + +fi + + + +############################################################################### +# +# Check for libdl.so + +save_LIBS="$LIBS" +LIBS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + +LIBDL="$LIBS" + +LIBS="$save_LIBS" + + + +############################################################################### +# +# statically link libstdc++ before C++ ABI is stablized on Linux unless +# dynamic build is configured on command line. +# +# Check whether --enable-static-link-stdc++ was given. +if test "${enable_static_link_stdc__+set}" = set; then : + enableval=$enable_static_link_stdc__; +else + + enable_static_link_stdc__=yes + +fi + + +if test "x$OPENJDK_TARGET_OS" = xlinux; then + # Test if -lstdc++ works. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if dynamic link of stdc++ is possible" >&5 +$as_echo_n "checking if dynamic link of stdc++ is possible... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + OLD_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -lstdc++" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + has_dynamic_libstdcxx=yes +else + has_dynamic_libstdcxx=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$OLD_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_dynamic_libstdcxx" >&5 +$as_echo "$has_dynamic_libstdcxx" >&6; } + + # Test if stdc++ can be linked statically. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if static link of stdc++ is possible" >&5 +$as_echo_n "checking if static link of stdc++ is possible... " >&6; } + STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + OLD_LIBS="$LIBS" + OLD_CXX="$CXX" + LIBS="$STATIC_STDCXX_FLAGS" + CXX="$CC" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + has_static_libstdcxx=yes +else + has_static_libstdcxx=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$OLD_LIBS" + CXX="$OLD_CXX" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_static_libstdcxx" >&5 +$as_echo "$has_static_libstdcxx" >&6; } + + if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then + as_fn_error $? "I cannot link to stdc++! Neither dynamically nor statically." "$LINENO" 5 + fi + + if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Static linking of libstdc++ was not possible reverting to dynamic linking." >&5 +$as_echo "$as_me: Static linking of libstdc++ was not possible reverting to dynamic linking." >&6;} + enable_static_link_stdc__=no + fi + + if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic linking of libstdc++ was not possible reverting to static linking." >&5 +$as_echo "$as_me: Dynamic linking of libstdc++ was not possible reverting to static linking." >&6;} + enable_static_link_stdc__=yes + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libstdc++" >&5 +$as_echo_n "checking how to link with libstdc++... " >&6; } + if test "x$enable_static_link_stdc__" = xyes; then + LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" + LDCXX="$CC" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 +$as_echo "static" >&6; } + else + LIBCXX="$LIBCXX -lstdc++" + LDCXX="$CXX" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic" >&5 +$as_echo "dynamic" >&6; } + fi +fi + +# libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so) +if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then + LIBCXX="/usr/lib${LEGACY_OPENJDK_TARGET_CPU3}/libCrun.so.1" +fi + +# TODO better (platform agnostic) test +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then + LIBCXX="-lstdc++" +fi + + + + + +############################################################################### +# +# We need to do some final tweaking, when everything else is done. +# +############################################################################### + + +HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" + + +# The name of the Service Agent jar. +SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" +fi + + + + +############################################################################### +# +# Configure parts of the build that only affect the build performance, +# not the result. +# +############################################################################### + + +# How many cores do we have on this build system? + +# Check whether --with-num-cores was given. +if test "${with_num_cores+set}" = set; then : + withval=$with_num_cores; +fi + +if test "x$with_num_cores" = x; then + # The number of cores were not specified, try to probe them. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for number of cores" >&5 +$as_echo_n "checking for number of cores... " >&6; } + NUM_CORES=1 + FOUND_CORES=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + NUM_CORES=`cat /proc/cpuinfo | grep -c processor` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/psrinfo; then + # Looks like a Solaris system + NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` + FOUND_CORES=yes + fi + + if test "x$build_os" = xwindows; then + NUM_CORES=4 + fi + + # For c/c++ code we run twice as many concurrent build + # jobs than we have cores, otherwise we will stall on io. + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` + + if test "x$FOUND_CORES" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NUM_CORES" >&5 +$as_echo "$NUM_CORES" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1!" >&5 +$as_echo "could not detect number of cores, defaulting to 1!" >&6; } + fi + + +else + NUM_CORES=$with_num_cores + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` +fi + + + + +# How much memory do we have on this build system? + +# Check whether --with-memory-size was given. +if test "${with_memory_size+set}" = set; then : + withval=$with_memory_size; +fi + +if test "x$with_memory_size" = x; then + # The memory size was not specified, try to probe it. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memory size" >&5 +$as_echo_n "checking for memory size... " >&6; } + # Default to 1024MB + MEMORY_SIZE=1024 + FOUND_MEM=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/prtconf; then + # Looks like a Solaris system + MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print $3 }'` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print $2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` + FOUND_MEM=yes + fi + + if test "x$build_os" = xwindows; then + MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print $4 }' | sed 's/,//'` + FOUND_MEM=yes + fi + + if test "x$FOUND_MEM" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MEMORY_SIZE MB" >&5 +$as_echo "$MEMORY_SIZE MB" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size defaulting to 1024MB!" >&5 +$as_echo "could not detect memory size defaulting to 1024MB!" >&6; } + fi + +else + MEMORY_SIZE=$with_memory_size +fi + + + +# Setup smart javac (after cores and memory have been setup) + + +# Check whether --with-server-java was given. +if test "${with_server_java+set}" = set; then : + withval=$with_server_java; +fi + + +if test "x$with_server_java" != x; then + SERVER_JAVA="$with_server_java" + FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" = x; then + as_fn_error $? "Could not execute server java: $SERVER_JAVA" "$LINENO" 5 + fi +else + SERVER_JAVA="" + # Hotspot specific options. + + # Test if -XX:+UseParallelOldGC is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:+UseParallelOldGC to SERVER_JAVA + FOUND_WARN=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -XX:+UseParallelOldGC" + fi + + + # Test if -verbosegc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -verbosegc to SERVER_JAVA + FOUND_WARN=`$JAVA -verbosegc -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -verbosegc -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -verbosegc" + fi + + # JRockit specific options. + + # Test if -Xverbose:gc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xverbose:gc to SERVER_JAVA + FOUND_WARN=`$JAVA -Xverbose:gc -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xverbose:gc -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xverbose:gc" + fi + + SERVER_JAVA="$JAVA $SERVER_JAVA" +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use shared server for javac" >&5 +$as_echo_n "checking whether to use shared server for javac... " >&6; } +# Check whether --enable-javac-server was given. +if test "${enable_javac_server+set}" = set; then : + enableval=$enable_javac_server; ENABLE_JAVAC_SERVER="${enableval}" +else + ENABLE_JAVAC_SERVER='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_SERVER" >&5 +$as_echo "$ENABLE_JAVAC_SERVER" >&6; } +if test "x$ENABLE_JAVAC_SERVER" = xyes; then + JAVAC_USE_REMOTE=true + JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" +else + JAVAC_USE_REMOTE=false + JAVAC_SERVERS= +fi + + + + +# Check whether --with-javac-server-cores was given. +if test "${with_javac_server_cores+set}" = set; then : + withval=$with_javac_server_cores; +fi + +if test "x$with_javac_server_cores" != x; then + JAVAC_SERVER_CORES="$with_javac_server_cores" +else + if test "$NUM_CORES" -gt 16; then + # We set this arbitrary limit because we want to limit the heap + # size of the javac server. + # In the future we will make the javac compilers in the server + # share more and more state, thus enabling us to use more and + # more concurrent threads in the server. + JAVAC_SERVER_CORES="16" + else + JAVAC_SERVER_CORES="$NUM_CORES" + fi + + if test "$MEMORY_SIZE" -gt "17000"; then + MAX_HEAP_MEM=10000 + + # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -d64 to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -d64" + fi + + + # Test if -Xms10G -Xmx10G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms10G -Xmx10G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms10G -Xmx10G" + fi + + + # Test if -Xmn2G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn2G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn2G" + fi + + elif test "$MEMORY_SIZE" -gt "10000"; then + MAX_HEAP_MEM=6000 + + # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -d64 to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -d64" + fi + + + # Test if -Xms6G -Xmx6G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms6G -Xmx6G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms6G -Xmx6G" + fi + + + # Test if -Xmn1G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn1G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn1G" + fi + + elif test "$MEMORY_SIZE" -gt "5000"; then + MAX_HEAP_MEM=3000 + + # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -d64 to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -d64" + fi + + + # Test if -Xms1G -Xmx3G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms1G -Xmx3G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx3G" + fi + + + # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn256M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn256M" + fi + + elif test "$MEMORY_SIZE" -gt "3800"; then + MAX_HEAP_MEM=2500 + + # Test if -Xms1G -Xmx2500M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms1G -Xmx2500M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx2500M" + fi + + + # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn256M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn256M" + fi + + elif test "$MEMORY_SIZE" -gt "1900"; then + MAX_HEAP_MEM=1200 + + # Test if -Xms700M -Xmx1200M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms700M -Xmx1200M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms700M -Xmx1200M" + fi + + + # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn256M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn256M" + fi + + elif test "$MEMORY_SIZE" -gt "1000"; then + MAX_HEAP_MEM=900 + + # Test if -Xms400M -Xmx900M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms400M -Xmx900M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms400M -Xmx900M" + fi + + + # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn128M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn128M" + fi + + else + MAX_HEAP_MEM=512 + + # Test if -Xms256M -Xmx512M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms256M -Xmx512M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms256M -Xmx512M" + fi + + + # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn128M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn128M" + fi + + fi + + MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` + if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if number of server cores must be reduced" >&5 +$as_echo_n "checking if number of server cores must be reduced... " >&6; } + JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&5 +$as_echo "yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&6; } + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to track dependencies between Java packages" >&5 +$as_echo_n "checking whether to track dependencies between Java packages... " >&6; } +# Check whether --enable-javac-deps was given. +if test "${enable_javac_deps+set}" = set; then : + enableval=$enable_javac_deps; ENABLE_JAVAC_DEPS="${enableval}" +else + ENABLE_JAVAC_DEPS='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_DEPS" >&5 +$as_echo "$ENABLE_JAVAC_DEPS" >&6; } +if test "x$ENABLE_JAVAC_DEPS" = xyes; then + JAVAC_USE_DEPS=true +else + JAVAC_USE_DEPS=false +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use multiple cores for javac compilation" >&5 +$as_echo_n "checking whether to use multiple cores for javac compilation... " >&6; } +# Check whether --enable-javac-multi-core was given. +if test "${enable_javac_multi_core+set}" = set; then : + enableval=$enable_javac_multi_core; ENABLE_JAVAC_MULTICORE="${enableval}" +else + ENABLE_JAVAC_MULTICORE='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_MULTICORE" >&5 +$as_echo "$ENABLE_JAVAC_MULTICORE" >&6; } +if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then + JAVAC_USE_MODE=MULTI_CORE_CONCURRENT +else + JAVAC_USE_MODE=SINGLE_THREADED_BATCH + if test "x$ENABLE_JAVAC_DEPS" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&5 +$as_echo "$as_me: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling dependency tracking for you now." >&5 +$as_echo "$as_me: WARNING: Disabling dependency tracking for you now." >&2;} + JAVAC_USE_DEPS=false + fi + if test "x$ENABLE_JAVAC_SERVER" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&5 +$as_echo "$as_me: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling javac server for you now." >&5 +$as_echo "$as_me: WARNING: Disabling javac server for you now." >&2;} + JAVAC_USE_REMOTE=false + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use sjavac" >&5 +$as_echo_n "checking whether to use sjavac... " >&6; } +# Check whether --enable-sjavac was given. +if test "${enable_sjavac+set}" = set; then : + enableval=$enable_sjavac; ENABLE_SJAVAC="${enableval}" +else + ENABLE_SJAVAC='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_SJAVAC" >&5 +$as_echo "$ENABLE_SJAVAC" >&6; } + + + + +# Can the C/C++ compiler use precompiled headers? + + +############################################################################### +# +# Can the C/C++ compiler use precompiled headers? +# +# Check whether --enable-precompiled-headers was given. +if test "${enable_precompiled_headers+set}" = set; then : + enableval=$enable_precompiled_headers; ENABLE_PRECOMPH=${enable_precompiled-headers} +else + ENABLE_PRECOMPH=yes +fi + + +USE_PRECOMPILED_HEADER=1 +if test "x$ENABLE_PRECOMPH" = xno; then + USE_PRECOMPILED_HEADER=0 +fi + +if test "x$ENABLE_PRECOMPH" = xyes; then + # Check that the compiler actually supports precomp headers. + if test "x$GCC" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking that precompiled headers work" >&5 +$as_echo_n "checking that precompiled headers work... " >&6; } + echo "int alfa();" > conftest.h + $CXX -x c++-header conftest.h -o conftest.hpp.gch + if test ! -f conftest.hpp.gch; then + echo Precompiled header is not working! + USE_PRECOMPILED_HEADER=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + rm -f conftest.h + fi +fi + + + + +# Setup use of ccache, if available + + # Check whether --enable-ccache was given. +if test "${enable_ccache+set}" = set; then : + enableval=$enable_ccache; ENABLE_CCACHE=${enable_ccache} +else + ENABLE_CCACHE=yes +fi + + if test "x$ENABLE_CCACHE" = xyes; then + # Extract the first word of "ccache", so it can be a program name with args. +set dummy ccache; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CCACHE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CCACHE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CCACHE=$ac_cv_path_CCACHE +if test -n "$CCACHE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5 +$as_echo "$CCACHE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccache" >&5 +$as_echo_n "checking for ccache... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: explicitly disabled" >&5 +$as_echo "explicitly disabled" >&6; } + CCACHE= + fi + + + +# Check whether --with-ccache-dir was given. +if test "${with_ccache_dir+set}" = set; then : + withval=$with_ccache_dir; +fi + + + if test "x$with_ccache_dir" != x; then + # When using a non home ccache directory, assume the use is to share ccache files + # with other users. Thus change the umask. + SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" + fi + CCACHE_FOUND="" + if test "x$CCACHE" != x; then + + if test "x$CCACHE" != x; then + CCACHE_FOUND="true" + # Only use ccache if it is 3.1.4 or later, which supports + # precompiled headers. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ccache supports precompiled headers" >&5 +$as_echo_n "checking if ccache supports precompiled headers... " >&6; } + HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.[456789]) 2> /dev/null` + if test "x$HAS_GOOD_CCACHE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccache" >&5 +$as_echo "no, disabling ccache" >&6; } + CCACHE= + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C-compiler supports ccache precompiled headers" >&5 +$as_echo_n "checking if C-compiler supports ccache precompiled headers... " >&6; } + PUSHED_FLAGS="$CXXFLAGS" + CXXFLAGS="-fpch-preprocess $CXXFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + CC_KNOWS_CCACHE_TRICK=yes +else + CC_KNOWS_CCACHE_TRICK=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXXFLAGS="$PUSHED_FLAGS" + if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccaching of precompiled headers" >&5 +$as_echo "no, disabling ccaching of precompiled headers" >&6; } + CCACHE= + fi + fi + fi + + if test "x$CCACHE" != x; then + CCACHE_SLOPPINESS=time_macros + CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" + CCACHE_FLAGS=-fpch-preprocess + + if test "x$SET_CCACHE_DIR" != x; then + mkdir -p $CCACHE_DIR > /dev/null 2>&1 + chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 + fi + fi + + fi + + +############################################################################### +# +# And now the finish... +# +############################################################################### + +# Check for some common pitfalls + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if build directory is on local disk" >&5 +$as_echo_n "checking if build directory is on local disk... " >&6; } + + # df -l lists only local disks; if the given directory is not found then + # a non-zero exit code is given + if $DF -l $OUTPUT_ROOT > /dev/null 2>&1; then + OUTPUT_DIR_IS_LOCAL="yes" + else + OUTPUT_DIR_IS_LOCAL="no" + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OUTPUT_DIR_IS_LOCAL" >&5 +$as_echo "$OUTPUT_DIR_IS_LOCAL" >&6; } + +# Check if the user has any old-style ALT_ variables set. +FOUND_ALT_VARIABLES=`env | grep ^ALT_` + +# Before generating output files, test if they exist. If they do, this is a reconfigure. +# Since we can't properly handle the dependencies for this, warn the user about the situation +if test -e $OUTPUT_ROOT/spec.gmk; then + IS_RECONFIGURE=yes +else + IS_RECONFIGURE=no +fi + +if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then + HIDE_PERFORMANCE_HINTS=yes +else + HIDE_PERFORMANCE_HINTS=no + # Hide it the next time around... + $TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1 +fi + + + +# At the end, call the closed hook. (Dummy macro if no closed sources available) + + +# We're messing a bit with internal autoconf variables to put the config.status +# in the output directory instead of the current directory. +CONFIG_STATUS="$OUTPUT_ROOT/config.status" +# Create the actual output files. Now the main work of configure is done. +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by openjdk $as_me jdk8, which was +generated by GNU Autoconf 2.67. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +openjdk config.status jdk8 +configured by $0, generated by GNU Autoconf 2.67, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "$OUTPUT_ROOT/config.h") CONFIG_HEADERS="$CONFIG_HEADERS $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" ;; + "$OUTPUT_ROOT/spec.gmk") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" ;; + "$OUTPUT_ROOT/spec.sh") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" ;; + "$OUTPUT_ROOT/Makefile") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +# Finally output some useful information to the user + +# Finally output some useful information to the user + +if test "x$CCACHE_FOUND" != x; then + if test "x$HAS_GOOD_CCACHE" = x; then + CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" + CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." + else + CCACHE_STATUS="installed and in use" + fi +else + if test "x$GCC" = xyes; then + CCACHE_STATUS="not installed (consider installing)" + CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." + else + CCACHE_STATUS="not available for your system" + fi +fi + +printf "\n" +printf "====================================================\n" +printf "A new configuration has been successfully created in\n" +printf "$OUTPUT_ROOT\n" +if test "x$CONFIGURE_COMMAND_LINE" != x; then + printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" +else + printf "using default settings.\n" +fi + +printf "\n" +printf "Configuration summary:\n" +printf "* Debug level: $DEBUG_LEVEL\n" +printf "* JDK variant: $JDK_VARIANT\n" +printf "* JVM variants: $with_jvm_variants\n" +printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n" +printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Build performance summary:\n" +printf "* Cores to use: $NUM_CORES\n" +printf "* Memory limit: $MEMORY_SIZE MB\n" +printf "* ccache status: $CCACHE_STATUS\n" +printf "\n" + +if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then + printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" + printf "$CCACHE_HELP_MSG\n" + + # Print a helpful message on how to acquire the necessary build dependency. + # ccache is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=ccache + 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 ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + printf "$HELP_MSG\n" + printf "\n" +fi + +if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then + printf "NOTE: You have requested to build more than one version of the JVM, which\n" + printf "will result in longer build times.\n" + printf "\n" +fi + +if test "x$FOUND_ALT_VARIABLES" != "x"; then + printf "WARNING: You have old-style ALT_ environment variables set.\n" + printf "These are not respected, and will be ignored. It is recommended\n" + printf "that you clean your environment. The following variables are set:\n" + printf "$FOUND_ALT_VARIABLES\n" + printf "\n" +fi + +if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then + printf "WARNING: Your build output directory is not on a local disk.\n" + printf "This will severely degrade build performance!\n" + printf "It is recommended that you create an output directory on a local disk,\n" + printf "and run the configure script again from that directory.\n" + printf "\n" +fi + +if test "x$IS_RECONFIGURE" = "xyes"; then + printf "WARNING: The result of this configuration has overridden an older\n" + printf "configuration. You *should* run 'make clean' to make sure you get a\n" + printf "proper build. Failure to do so might result in strange build problems.\n" + printf "\n" +fi + diff --git a/common/autoconf/jdk-options.m4 b/common/autoconf/jdk-options.m4 new file mode 100644 index 00000000000..28266251f99 --- /dev/null +++ b/common/autoconf/jdk-options.m4 @@ -0,0 +1,551 @@ +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT], +[ +############################################################################### +# +# Check which variant of the JDK that we want to build. +# Currently we have: +# normal: standard edition +# embedded: cut down to a smaller footprint +# +# Effectively the JDK variant gives a name to a specific set of +# modules to compile into the JDK. In the future, these modules +# might even be Jigsaw modules. +# +AC_MSG_CHECKING([which variant of the JDK to build]) +AC_ARG_WITH([jdk-variant], [AS_HELP_STRING([--with-jdk-variant], + [JDK variant to build (normal, embedded) @<:@normal@:>@])]) + +if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then + JAVASE_EMBEDDED="" + MINIMIZE_RAM_USAGE="" + JDK_VARIANT="normal" +elif test "x$with_jdk_variant" = xembedded; then + JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" + MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" + JDK_VARIANT="embedded" +else + AC_MSG_ERROR([The available JDK variants are: normal, embedded]) +fi + +AC_SUBST(JAVASE_EMBEDDED) +AC_SUBST(MINIMIZE_RAM_USAGE) +AC_SUBST(JDK_VARIANT) + +AC_MSG_RESULT([$JDK_VARIANT]) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], +[ + +############################################################################### +# +# Check which variants of the JVM that we want to build. +# Currently we have: +# server: normal interpreter and a tiered C1/C2 compiler +# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) +# kernel: kernel footprint JVM that passes the TCK without major performance problems, +# ie normal interpreter and C1, only the serial GC, kernel jvmti etc +# zero: no machine code interpreter, no compiler +# zeroshark: zero interpreter and shark/llvm compiler backend +AC_MSG_CHECKING([which variants of the JVM that should be built]) +AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants], + [JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])]) + +if test "x$with_jvm_variants" = x; then + if test "x$JDK_VARIANT" = xembedded; then + with_jvm_variants="client" + else + with_jvm_variants="server" + fi +fi + +JVM_VARIANTS=",$with_jvm_variants," +TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` + +if test "x$TEST_VARIANTS" != "x,"; then + AC_MSG_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark]) +fi +AC_MSG_RESULT([$with_jvm_variants]) + +JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` +JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` +JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` +JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` +JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + AC_MSG_ERROR([You cannot build a client JVM for a 64-bit machine.]) + fi +fi +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + AC_MSG_ERROR([You cannot build a kernel JVM for a 64-bit machine.]) + fi +fi + +# Replace the commas with AND for use in the build directory name. +ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` +COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` +if test "x$COUNT_VARIANTS" != "x,1"; then + BUILDING_MULTIPLE_JVM_VARIANTS=yes +else + BUILDING_MULTIPLE_JVM_VARIANTS=no +fi + +AC_SUBST(JVM_VARIANTS) +AC_SUBST(JVM_VARIANT_SERVER) +AC_SUBST(JVM_VARIANT_CLIENT) +AC_SUBST(JVM_VARIANT_KERNEL) +AC_SUBST(JVM_VARIANT_ZERO) +AC_SUBST(JVM_VARIANT_ZEROSHARK) + + +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_LEVEL], +[ +############################################################################### +# +# Set the debug level +# release: no debug information, all optimizations, no asserts. +# fastdebug: debug information (-g), all optimizations, all asserts +# slowdebug: debug information (-g), no optimizations, all asserts +# +DEBUG_LEVEL="release" +AC_MSG_CHECKING([which debug level to use]) +AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], + [set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])], + [ + ENABLE_DEBUG="${enableval}" + DEBUG_LEVEL="fastdebug" + ], [ENABLE_DEBUG="no"]) + +AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level], + [set the debug level (release, fastdebug, slowdebug) @<:@release@:>@])], + [ + DEBUG_LEVEL="${withval}" + if test "x$ENABLE_DEBUG" = xyes; then + AC_MSG_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.]) + fi + ]) +AC_MSG_RESULT([$DEBUG_LEVEL]) + +if test "x$DEBUG_LEVEL" != xrelease && \ + test "x$DEBUG_LEVEL" != xfastdebug && \ + test "x$DEBUG_LEVEL" != xslowdebug; then + AC_MSG_ERROR([Allowed debug levels are: release, fastdebug and slowdebug]) +fi + + +############################################################################### +# +# Setup legacy vars/targets and new vars to deal with different debug levels. +# + +case $DEBUG_LEVEL in + release ) + VARIANT="OPT" + FASTDEBUG="false" + DEBUG_CLASSFILES="false" + BUILD_VARIANT_RELEASE="" + HOTSPOT_DEBUG_LEVEL="product" + HOTSPOT_EXPORT="product" + ;; + fastdebug ) + VARIANT="DBG" + FASTDEBUG="true" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-fastdebug" + HOTSPOT_DEBUG_LEVEL="fastdebug" + HOTSPOT_EXPORT="fastdebug" + ;; + slowdebug ) + VARIANT="DBG" + FASTDEBUG="false" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-debug" + HOTSPOT_DEBUG_LEVEL="jvmg" + HOTSPOT_EXPORT="debug" + ;; +esac + +##### +# Generate the legacy makefile targets for hotspot. +# The hotspot api for selecting the build artifacts, really, needs to be improved. +# +HOTSPOT_TARGET="" + +if test "x$JVM_VARIANT_SERVER" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " +fi + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " +fi + +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " +fi + +if test "x$JVM_VARIANT_ZERO" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " +fi + +if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " +fi + +HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" + +##### + +AC_SUBST(DEBUG_LEVEL) +AC_SUBST(VARIANT) +AC_SUBST(FASTDEBUG) +AC_SUBST(DEBUG_CLASSFILES) +AC_SUBST(BUILD_VARIANT_RELEASE) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS], +[ + +############################################################################### +# +# Should we build only OpenJDK even if closed sources are present? +# +AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only], + [build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,) + +if test "x$enable_openjdk_only" = "xyes"; then + OPENJDK=true +elif test "x$enable_openjdk_only" = "xno"; then + OPENJDK=false +elif test -d "$SRC_ROOT/jdk/src/closed"; then + OPENJDK=false +else + OPENJDK=true +fi + +if test "x$OPENJDK" = "xtrue"; then + SET_OPENJDK=OPENJDK=true +fi + +AC_SUBST(SET_OPENJDK) + +############################################################################### +# +# JIGSAW or not. The JIGSAW variable is used during the intermediate +# stage when we are building both the old style JDK and the new style modularized JDK. +# When the modularized JDK is finalized, this option will go away. +# +AC_ARG_ENABLE([jigsaw], [AS_HELP_STRING([--enable-jigsaw], + [build Jigsaw images (not yet available) @<:@disabled@:>@])],,) + +if test "x$enable_jigsaw" = "xyes"; then + JIGSAW=true +else + JIGSAW=false +fi +AC_SUBST(JIGSAW) + +############################################################################### +# +# Should we build a JDK/JVM with headful support (ie a graphical ui)? +# We always build headless support. +# +AC_MSG_CHECKING([headful support]) +AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful], + [build headful support (graphical UI support) @<:@enabled@:>@])], + [SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes]) + +SUPPORT_HEADLESS=yes +BUILD_HEADLESS="BUILD_HEADLESS:=true" + +if test "x$SUPPORT_HEADFUL" = xyes; then + # We are building both headful and headless. + BUILD_HEADLESS_ONLY="" + headful_msg="inlude support for both headful and headless" +fi + +if test "x$SUPPORT_HEADFUL" = xno; then + # Thus we are building headless only. + BUILD_HEADLESS="BUILD_HEADLESS:=true" + BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" + headful_msg="headless only" +fi + +AC_MSG_RESULT([$headful_msg]) + +AC_SUBST(SUPPORT_HEADLESS) +AC_SUBST(SUPPORT_HEADFUL) +AC_SUBST(BUILD_HEADLESS) +AC_SUBST(BUILD_HEADLESS_ONLY) + +############################################################################### +# +# Should we run the painfully slow javadoc tool? +# +AC_MSG_CHECKING([whether to build documentation]) +AC_ARG_ENABLE([docs], [AS_HELP_STRING([--enable-docs], + [enable generation of Javadoc documentation @<:@disabled@:>@])], + [ENABLE_DOCS="${enableval}"], [ENABLE_DOCS='no']) +AC_MSG_RESULT([$ENABLE_DOCS]) +AC_SUBST(ENABLE_DOCS) +GENERATE_DOCS=false +if test "x$ENABLE_DOCS" = xyes; then + GENERATE_DOCS=true +fi +AC_SUBST(GENERATE_DOCS) + +############################################################################### +# +# Should we compile nimbus swing L&F? We can probably remove this option +# since nimbus is officially part of javax now. +# +AC_MSG_CHECKING([whether to build nimbus L&F]) +AC_ARG_ENABLE([nimbus], [AS_HELP_STRING([--disable-nimbus], + [disable Nimbus L&F @<:@enabled@:>@])], + [ENABLE_NIMBUS="${enableval}"], [ENABLE_NIMBUS='yes']) +AC_MSG_RESULT([$ENABLE_NIMBUS]) +DISABLE_NIMBUS= +if test "x$ENABLE_NIMBUS" = xno; then + DISABLE_NIMBUS=true +fi +AC_SUBST(DISABLE_NIMBUS) + +# Control wether Hotspot runs Queens test after build. +AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build], + [enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],, + [enable_hotspot_test_in_build=no]) +if test "x$enable_hotspot_test_in_build" = "xyes"; then + TEST_IN_BUILD=true +else + TEST_IN_BUILD=false +fi +AC_SUBST(TEST_IN_BUILD) + +############################################################################### +# +# Choose cacerts source file +# +AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file], + [specify alternative cacerts file])]) +if test "x$with_cacerts_file" != x; then + CACERTS_FILE=$with_cacerts_file +else + if test "x$OPENJDK" = "xtrue"; then + CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts + else + CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal + fi +fi +AC_SUBST(CACERTS_FILE) + +############################################################################### +# +# Compress jars +# +COMPRESS_JARS=false + +# default for embedded is yes... +if test "x$JDK_VARIANT" = "xembedded"; then + COMPRESS_JARS=true +fi +AC_SUBST(COMPRESS_JARS) + +############################################################################### +# +# Should we compile JFR +# default no, except for on closed-jdk and !embedded +# +ENABLE_JFR=no + +# Is the JFR source present + +# +# For closed && !embedded default is yes if the source is present +# +if test "x${OPENJDK}" != "xtrue" && test "x$JDK_VARIANT" != "xembedded" && test -d "$SRC_ROOT/jdk/src/closed/share/native/oracle/jfr"; then + ENABLE_JFR=yes +fi + +AC_MSG_CHECKING([whether to build jfr]) +AC_ARG_ENABLE([jfr], [AS_HELP_STRING([--enable-jfr], + [enable jfr (default is no)])] + [ENABLE_JFR="${enableval}"]) +AC_MSG_RESULT([${ENABLE_JFR}]) + +if test "x$ENABLE_JFR" = "xyes"; then + ENABLE_JFR=true +elif test "x$ENABLE_JFR" = "xno"; then + ENABLE_JFR=false +else + AC_MSG_ERROR([Invalid argument to --enable-jfr]) +fi + +AC_SUBST(ENABLE_JFR) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VERSION_NUMBERS], +[ +# Source the version numbers +. $AUTOCONF_DIR/version.numbers +if test "x$OPENJDK" = "xfalse"; then + . $AUTOCONF_DIR/closed.version.numbers +fi +# Now set the JDK version, milestone, build number etc. +AC_SUBST(JDK_MAJOR_VERSION) +AC_SUBST(JDK_MINOR_VERSION) +AC_SUBST(JDK_MICRO_VERSION) +AC_SUBST(JDK_UPDATE_VERSION) +AC_SUBST(JDK_BUILD_NUMBER) +AC_SUBST(MILESTONE) +AC_SUBST(LAUNCHER_NAME) +AC_SUBST(PRODUCT_NAME) +AC_SUBST(PRODUCT_SUFFIX) +AC_SUBST(JDK_RC_PLATFORM_NAME) +AC_SUBST(COMPANY_NAME) + +COPYRIGHT_YEAR=`date +'%Y'` +AC_SUBST(COPYRIGHT_YEAR) + +RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" +AC_SUBST(RUNTIME_NAME) + +if test "x$JDK_UPDATE_VERSION" != x; then + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" +else + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" +fi +AC_SUBST(JDK_VERSION) + +if test "x$MILESTONE" != x; then + RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" +else + RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" +fi +AC_SUBST(RELEASE) + +if test "x$JDK_BUILD_NUMBER" != x; then + FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" +else + JDK_BUILD_NUMBER=b00 + BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` + # Avoid [:alnum:] since it depends on the locale. + CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` + USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` + FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" +fi +AC_SUBST(FULL_VERSION) +COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` +AC_SUBST(COOKED_BUILD_NUMBER) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_BUILD_TWEAKS], +[ +HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" +AC_SUBST(HOTSPOT_MAKE_ARGS) + +# The name of the Service Agent jar. +SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" +fi +AC_SUBST(SALIB_NAME) + +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS], +[ +# +# ENABLE_DEBUG_SYMBOLS +# This must be done after the toolchain is setup, since we're looking at objcopy. +# +ENABLE_DEBUG_SYMBOLS=default + +# default on macosx is no... +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + ENABLE_DEBUG_SYMBOLS=no +fi + +# default for embedded is no... +if test "x$JDK_VARIANT" = "xembedded"; then + ENABLE_DEBUG_SYMBOLS=no +fi + +AC_ARG_ENABLE([debug-symbols], + [AS_HELP_STRING([--disable-debug-symbols],[disable generation of debug symbols (@<:@enabled@:>@)])], + [ENABLE_DEBUG_SYMBOLS=${enable_debug_symbols}], +) + +AC_MSG_CHECKING([if we should generate debug symbols]) + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xyes" && test "x$OBJCOPY" = x; then + # explicit enabling of enable-debug-symbols and can't find objcopy + # this is an error + AC_MSG_ERROR([Unable to find objcopy, cannot enable debug-symbols]) +fi + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then + # Default is on if objcopy is found, otherwise off + if test "x$OBJCOPY" != x; then + ENABLE_DEBUG_SYMBOLS=yes + else + ENABLE_DEBUG_SYMBOLS=no + fi +fi + +AC_MSG_RESULT([$ENABLE_DEBUG_SYMBOLS]) + +# +# ZIP_DEBUGINFO_FILES +# +ZIP_DEBUGINFO_FILES=yes + +AC_ARG_ENABLE([zip-debug-info], + [AS_HELP_STRING([--disable-zip-debug-info],[don't zip debug-info files (@<:@enabled@:@)])], + [ZIP_DEBUGINFO_FILES=${enable_zip_debug_info}], +) + +AC_MSG_CHECKING([if we should zip debug-info files]) +AC_MSG_RESULT([$ZIP_DEBUGINFO_FILES]) + +# Hotspot wants ZIP_DEBUGINFO_FILES to be 1 for yes +# use that... +if test "x$ZIP_DEBUGINFO_FILES" = "xyes"; then + ZIP_DEBUGINFO_FILES=1 +else + ZIP_DEBUGINFO_FILES=0 +fi + +AC_SUBST(ENABLE_DEBUG_SYMBOLS) +AC_SUBST(ZIP_DEBUGINFO_FILES) +AC_SUBST(CFLAGS_DEBUG_SYMBOLS) +AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS) +]) diff --git a/common/autoconf/libraries.m4 b/common/autoconf/libraries.m4 new file mode 100644 index 00000000000..e6364a6dc9d --- /dev/null +++ b/common/autoconf/libraries.m4 @@ -0,0 +1,642 @@ +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +AC_DEFUN_ONCE([LIB_SETUP_INIT], +[ + +############################################################################### +# +# OS specific settings that we never will need to probe. +# +if test "x$OPENJDK_TARGET_OS" = xlinux; then + AC_MSG_CHECKING([what is not needed on Linux?]) + PULSE_NOT_NEEDED=yes + AC_MSG_RESULT([pulse]) +fi + +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + AC_MSG_CHECKING([what is not needed on Solaris?]) + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + AC_MSG_RESULT([alsa pulse]) +fi + +if test "x$OPENJDK_TARGET_OS" = xwindows; then + AC_MSG_CHECKING([what is not needed on Windows?]) + CUPS_NOT_NEEDED=yes + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + X11_NOT_NEEDED=yes + AC_MSG_RESULT([alsa cups pulse x11]) +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + AC_MSG_CHECKING([what is not needed on MacOSX?]) + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + X11_NOT_NEEDED=yes + FREETYPE2_NOT_NEEDED=yes + # If the java runtime framework is disabled, then we need X11. + # This will be adjusted below. + AC_MSG_RESULT([alsa pulse x11]) +fi + +if test "x$OPENJDK_TARGET_OS" = xbsd; then + AC_MSG_CHECKING([what is not needed on bsd?]) + ALSA_NOT_NEEDED=yes + AC_MSG_RESULT([alsa]) +fi + +if test "x$OPENJDK" = "xfalse"; then + FREETYPE2_NOT_NEEDED=yes +fi + +############################################################################### +# +# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM +# that uses this API. +# +AC_ARG_ENABLE([macosx-runtime-support], [AS_HELP_STRING([--disable-macosx-runtime-support], + [disable the use of MacOSX Java runtime support framework @<:@enabled@:>@])], + [MACOSX_RUNTIME_SUPPORT="${enableval}"],[MACOSX_RUNTIME_SUPPORT="no"]) + +USE_MACOSX_RUNTIME_SUPPORT=no +AC_MSG_CHECKING([for explicit Java runtime support in the OS]) +if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then + if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then + MACOSX_RUNTIME_SUPPORT=yes + USE_MACOSX_RUNTIME_SUPPORT=yes + AC_MSG_RESULT([yes, does not need alsa freetype2 pulse and X11]) + else + AC_MSG_RESULT([yes, but explicitly disabled.]) + fi +else + AC_MSG_RESULT([no]) +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then + AC_MSG_CHECKING([what is not needed on an X11 build on MacOSX?]) + X11_NOT_NEEDED= + FREETYPE2_NOT_NEEDED= + AC_MSG_RESULT([alsa pulse]) +fi +]) + +AC_DEFUN_ONCE([LIB_SETUP_X11], +[ + +############################################################################### +# +# Check for X Windows +# + +# Check if the user has specified sysroot, but not --x-includes or --x-libraries. +# Make a simple check for the libraries at the sysroot, and setup --x-includes and +# --x-libraries for the sysroot, if that seems to be correct. +if test "x$SYS_ROOT" != "x/"; then + if test "x$x_includes" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/include/X11/Xlib.h"; then + x_includes="$SYS_ROOT/usr/X11R6/include" + fi + fi + if test "x$x_libraries" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/lib/libX11.so"; then + x_libraries="$SYS_ROOT/usr/X11R6/lib" + fi + fi +fi + +# Now let autoconf do it's magic +AC_PATH_X +AC_PATH_XTRA + +if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then + HELP_MSG_MISSING_DEPENDENCY([x11]) + AC_MSG_ERROR([Could not find X11 libraries. $HELP_MSG]) +fi + +# Some of the old makefiles require a setting of OPENWIN_HOME +# Since the X11R6 directory has disappeared on later Linuxes, +# we need to probe for it. +if test "x$OPENJDK_TARGET_OS" = xlinux; then + if test -d "$SYS_ROOT/usr/X11R6"; then + OPENWIN_HOME="$SYS_ROOT/usr/X11R6" + fi + if test -d "$SYS_ROOT/usr/include/X11"; then + OPENWIN_HOME="$SYS_ROOT/usr" + fi +fi +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + OPENWIN_HOME="/usr/openwin" +fi +AC_SUBST(OPENWIN_HOME) + + +# +# Weird Sol10 something check...TODO change to try compile +# +if test "x${OPENJDK_TARGET_OS}" = xsolaris; then + if test "`uname -r`" = "5.10"; then + if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then + X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" + fi + fi +fi + +AC_LANG_PUSH(C) +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $X_CFLAGS" +AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h], + [X11_A_OK=yes], + [X11_A_OK=no]) +CFLAGS="$OLD_CFLAGS" +AC_LANG_POP(C) + +if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then + HELP_MSG_MISSING_DEPENDENCY([x11]) + AC_MSG_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG]) +fi + +AC_SUBST(X_CFLAGS) +AC_SUBST(X_LIBS) +]) + +AC_DEFUN_ONCE([LIB_SETUP_CUPS], +[ + +############################################################################### +# +# The common unix printing system cups is used to print from java. +# +AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups], + [specify prefix directory for the cups package + (expecting the libraries under PATH/lib and the headers under PATH/include)])]) +AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include], + [specify directory for the cups include files])]) +AC_ARG_WITH(cups-lib, [AS_HELP_STRING([--with-cups-lib], + [specify directory for the cups library])]) + +if test "x$CUPS_NOT_NEEDED" = xyes; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then + AC_MSG_WARN([cups not used, so --with-cups is ignored]) + fi + CUPS_CFLAGS= + CUPS_LIBS= +else + CUPS_FOUND=no + + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + AC_MSG_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.]) + fi + + if test "x${with_cups}" != x; then + CUPS_LIBS="-L${with_cups}/lib -lcups" + CUPS_CFLAGS="-I${with_cups}/include" + CUPS_FOUND=yes + fi + if test "x${with_cups_include}" != x; then + CUPS_CFLAGS="-I${with_cups_include}" + CUPS_FOUND=yes + fi + if test "x${with_cups_lib}" != x; then + CUPS_LIBS="-L${with_cups_lib} -lcups" + CUPS_FOUND=yes + fi + if test "x$CUPS_FOUND" = xno; then + BDEPS_CHECK_MODULE(CUPS, cups, xxx, [CUPS_FOUND=yes]) + fi + if test "x$CUPS_FOUND" = xno; then + # Are the cups headers installed in the default /usr/include location? + AC_CHECK_HEADERS([cups/cups.h cups/ppd.h], + [CUPS_FOUND=yes + CUPS_CFLAGS= + CUPS_LIBS="-lcups" + DEFAULT_CUPS=yes]) + fi + if test "x$CUPS_FOUND" = xno; then + # Getting nervous now? Lets poke around for standard Solaris third-party + # package installation locations. + AC_MSG_CHECKING([for cups headers and libs]) + if test -s /opt/sfw/cups/include/cups/cups.h; then + # An SFW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/sfw/cups/include" + CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" + elif test -s /opt/csw/include/cups/cups.h; then + # A CSW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/csw/include" + CUPS_LIBS="-L/opt/csw/lib -lcups" + fi + AC_MSG_RESULT([$CUPS_FOUND]) + fi + if test "x$CUPS_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([cups]) + AC_MSG_ERROR([Could not find cups! $HELP_MSG ]) + fi +fi + +AC_SUBST(CUPS_CFLAGS) +AC_SUBST(CUPS_LIBS) + +]) + +AC_DEFUN_ONCE([LIB_SETUP_FREETYPE], +[ + +############################################################################### +# +# The ubiquitous freetype2 library is used to render fonts. +# +AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype], + [specify prefix directory for the freetype2 package + (expecting the libraries under PATH/lib and the headers under PATH/include)])]) + +# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree +USING_SYSTEM_FT_LIB=false + +if test "x$FREETYPE2_NOT_NEEDED" = xyes; then + if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then + AC_MSG_WARN([freetype not used, so --with-freetype is ignored]) + fi + FREETYPE2_CFLAGS= + FREETYPE2_LIBS= + FREETYPE2_LIB_PATH= +else + FREETYPE2_FOUND=no + + if test "x$with_freetype" != x; then + SPACESAFE(with_freetype,[the path to freetype]) + FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" + if test "x$OPENJDK_TARGET_OS" = xwindows; then + FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" + fi + FREETYPE2_LIB_PATH="$with_freetype/lib" + FREETYPE2_CFLAGS="-I$with_freetype/include" + if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then + FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" + fi + FREETYPE2_FOUND=yes + if test "x$FREETYPE2_FOUND" = xyes; then + # Verify that the directories exist + if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then + AC_MSG_ERROR([Could not find the expected directories $with_freetype/lib and $with_freetype/include]) + fi + # List the contents of the lib. + FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` + if test "x$FREETYPELIB" = x; then + AC_MSG_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib]) + fi + # Check one h-file + if ! test -s "$with_freetype/include/ft2build.h"; then + AC_MSG_ERROR([Could not find $with_freetype/include/ft2build.h]) + fi + fi + fi + if test "x$FREETYPE2_FOUND" = xno; then + BDEPS_CHECK_MODULE(FREETYPE2, freetype2, xxx, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + AC_MSG_CHECKING([for freetype in some standard locations]) + + if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" + DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" + fi + if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2" + DEFAULT_FREETYPE_LIBS="-lfreetype" + fi + + PREV_CXXCFLAGS="$CXXFLAGS" + PREV_LDFLAGS="$LDFLAGS" + CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS" + LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS" + AC_LINK_IFELSE([AC_LANG_SOURCE([[#include + #include FT_FREETYPE_H + int main() { return 0; } + ]])], + [ + # Yes, the default cflags and libs did the trick. + FREETYPE2_FOUND=yes + FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS" + FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS" + ], + [ + FREETYPE2_FOUND=no + ]) + CXXCFLAGS="$PREV_CXXFLAGS" + LDFLAGS="$PREV_LDFLAGS" + AC_MSG_RESULT([$FREETYPE2_FOUND]) + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([freetype2]) + AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ]) + fi +fi + +AC_SUBST(USING_SYSTEM_FT_LIB) +AC_SUBST(FREETYPE2_LIB_PATH) +AC_SUBST(FREETYPE2_CFLAGS) +AC_SUBST(FREETYPE2_LIBS) + +]) + +AC_DEFUN_ONCE([LIB_SETUP_ALSA], +[ + +############################################################################### +# +# Check for alsa headers and libraries. Used on Linux/GNU systems. +# +AC_ARG_WITH(alsa, [AS_HELP_STRING([--with-alsa], + [specify prefix directory for the alsa package + (expecting the libraries under PATH/lib and the headers under PATH/include)])]) +AC_ARG_WITH(alsa-include, [AS_HELP_STRING([--with-alsa-include], + [specify directory for the alsa include files])]) +AC_ARG_WITH(alsa-lib, [AS_HELP_STRING([--with-alsa-lib], + [specify directory for the alsa library])]) + +if test "x$ALSA_NOT_NEEDED" = xyes; then + if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then + AC_MSG_WARN([alsa not used, so --with-alsa is ignored]) + fi + ALSA_CFLAGS= + ALSA_LIBS= +else + ALSA_FOUND=no + + if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then + AC_MSG_ERROR([It is not possible to disable the use of alsa. Remove the --without-alsa option.]) + fi + + if test "x${with_alsa}" != x; then + ALSA_LIBS="-L${with_alsa}/lib -lalsa" + ALSA_CFLAGS="-I${with_alsa}/include" + ALSA_FOUND=yes + fi + if test "x${with_alsa_include}" != x; then + ALSA_CFLAGS="-I${with_alsa_include}" + ALSA_FOUND=yes + fi + if test "x${with_alsa_lib}" != x; then + ALSA_LIBS="-L${with_alsa_lib} -lalsa" + ALSA_FOUND=yes + fi + if test "x$ALSA_FOUND" = xno; then + BDEPS_CHECK_MODULE(ALSA, alsa, xxx, [ALSA_FOUND=yes], [ALSA_FOUND=no]) + fi + if test "x$ALSA_FOUND" = xno; then + PKG_CHECK_MODULES(ALSA, alsa, [ALSA_FOUND=yes], [ALSA_FOUND=no]) + fi + if test "x$ALSA_FOUND" = xno; then + AC_CHECK_HEADERS([alsa/asoundlib.h], + [ALSA_FOUND=yes + ALSA_CFLAGS=-Iignoreme + ALSA_LIBS=-lasound + DEFAULT_ALSA=yes], + [ALSA_FOUND=no]) + fi + if test "x$ALSA_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([alsa]) + AC_MSG_ERROR([Could not find alsa! $HELP_MSG ]) + fi +fi + +AC_SUBST(ALSA_CFLAGS) +AC_SUBST(ALSA_LIBS) + +]) + +AC_DEFUN_ONCE([LIB_SETUP_MISC_LIBS], +[ + +############################################################################### +# +# Check for the jpeg library +# + +USE_EXTERNAL_LIBJPEG=true +AC_CHECK_LIB(jpeg, main, [], + [ USE_EXTERNAL_LIBJPEG=false + AC_MSG_NOTICE([Will use jpeg decoder bundled with the OpenJDK source]) + ]) +AC_SUBST(USE_EXTERNAL_LIBJPEG) + +############################################################################### +# +# Check for the gif library +# + +USE_EXTERNAL_LIBJPEG=true +AC_CHECK_LIB(gif, main, [], + [ USE_EXTERNAL_LIBGIF=false + AC_MSG_NOTICE([Will use gif decoder bundled with the OpenJDK source]) + ]) +AC_SUBST(USE_EXTERNAL_LIBGIF) + +############################################################################### +# +# Check for the zlib library +# + +AC_ARG_WITH(zlib, [AS_HELP_STRING([--with-zlib], + [use zlib from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])]) + +AC_CHECK_LIB(z, compress, + [ ZLIB_FOUND=yes ], + [ ZLIB_FOUND=no ]) + +AC_MSG_CHECKING([for which zlib to use]) + +DEFAULT_ZLIB=bundled +if test "x$OPENJDK_TARGET_OS" = xmacosx; then +# +# On macosx default is system...on others default is +# + DEFAULT_ZLIB=system +fi + +if test "x${ZLIB_FOUND}" != "xyes"; then +# +# If we don't find any system...set default to bundled +# + DEFAULT_ZLIB=bundled +fi + +# +# If user didn't specify, use DEFAULT_ZLIB +# +if test "x${with_zlib}" = "x"; then + with_zlib=${DEFAULT_ZLIB} +fi + +if test "x${with_zlib}" = "xbundled"; then + USE_EXTERNAL_LIBZ=false + AC_MSG_RESULT([bundled]) +elif test "x${with_zlib}" = "xsystem"; then + if test "x${ZLIB_FOUND}" = "xyes"; then + USE_EXTERNAL_LIBZ=true + AC_MSG_RESULT([system]) + else + AC_MSG_RESULT([system not found]) + AC_MSG_ERROR([--with-zlib=system specified, but no zlib found!]) + fi +else + AC_MSG_ERROR([Invalid value for --with-zlib: ${with_zlib}, use 'system' or 'bundled']) +fi + +AC_SUBST(USE_EXTERNAL_LIBZ) + +############################################################################### +LIBZIP_CAN_USE_MMAP=true +if test "x$JDK_VARIANT" = "xembedded"; then + LIBZIP_CAN_USE_MMAP=false +fi +AC_SUBST(LIBZIP_CAN_USE_MMAP) + +############################################################################### +# +# Check if altzone exists in time.h +# + +AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [return (int)altzone;])], + [has_altzone=yes], + [has_altzone=no]) +if test "x$has_altzone" = xyes; then + AC_DEFINE([HAVE_ALTZONE], 1, [Define if you have the external 'altzone' variable in time.h]) +fi + +############################################################################### +# +# Check the maths library +# + +AC_CHECK_LIB(m, cos, [], + [ + AC_MSG_NOTICE([Maths library was not found]) + ]) +AC_SUBST(LIBM) + +############################################################################### +# +# Check for libdl.so + +save_LIBS="$LIBS" +LIBS="" +AC_CHECK_LIB(dl,dlopen) +LIBDL="$LIBS" +AC_SUBST(LIBDL) +LIBS="$save_LIBS" + +]) + +AC_DEFUN_ONCE([LIB_SETUP_STATIC_LINK_LIBSTDCPP], +[ +############################################################################### +# +# statically link libstdc++ before C++ ABI is stablized on Linux unless +# dynamic build is configured on command line. +# +AC_ARG_ENABLE([static-link-stdc++], [AS_HELP_STRING([--disable-static-link-stdc++], + [disable static linking of the C++ runtime on Linux @<:@enabled@:>@])],, + [ + enable_static_link_stdc__=yes + ]) + +if test "x$OPENJDK_TARGET_OS" = xlinux; then + # Test if -lstdc++ works. + AC_MSG_CHECKING([if dynamic link of stdc++ is possible]) + AC_LANG_PUSH(C++) + OLD_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -lstdc++" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], + [has_dynamic_libstdcxx=yes], + [has_dynamic_libstdcxx=no]) + CXXFLAGS="$OLD_CXXFLAGS" + AC_LANG_POP(C++) + AC_MSG_RESULT([$has_dynamic_libstdcxx]) + + # Test if stdc++ can be linked statically. + AC_MSG_CHECKING([if static link of stdc++ is possible]) + STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" + AC_LANG_PUSH(C++) + OLD_LIBS="$LIBS" + OLD_CXX="$CXX" + LIBS="$STATIC_STDCXX_FLAGS" + CXX="$CC" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], + [has_static_libstdcxx=yes], + [has_static_libstdcxx=no]) + LIBS="$OLD_LIBS" + CXX="$OLD_CXX" + AC_LANG_POP(C++) + AC_MSG_RESULT([$has_static_libstdcxx]) + + if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then + AC_MSG_ERROR([I cannot link to stdc++! Neither dynamically nor statically.]) + fi + + if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then + AC_MSG_NOTICE([Static linking of libstdc++ was not possible reverting to dynamic linking.]) + enable_static_link_stdc__=no + fi + + if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then + AC_MSG_NOTICE([Dynamic linking of libstdc++ was not possible reverting to static linking.]) + enable_static_link_stdc__=yes + fi + + AC_MSG_CHECKING([how to link with libstdc++]) + if test "x$enable_static_link_stdc__" = xyes; then + LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" + LDCXX="$CC" + AC_MSG_RESULT([static]) + else + LIBCXX="$LIBCXX -lstdc++" + LDCXX="$CXX" + AC_MSG_RESULT([dynamic]) + fi +fi + +# libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so) +if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then + LIBCXX="/usr/lib${LEGACY_OPENJDK_TARGET_CPU3}/libCrun.so.1" +fi + +# TODO better (platform agnostic) test +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then + LIBCXX="-lstdc++" +fi + +AC_SUBST(LIBCXX) + +]) diff --git a/common/autoconf/source-dirs.m4 b/common/autoconf/source-dirs.m4 new file mode 100644 index 00000000000..2eeb3831176 --- /dev/null +++ b/common/autoconf/source-dirs.m4 @@ -0,0 +1,280 @@ +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +AC_DEFUN_ONCE([SRCDIRS_SETUP_TOPDIRS], +[ + +# Where are the sources. Any of these can be overridden +# using --with-override-corba and the likes. +LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" +CORBA_TOPDIR="$SRC_ROOT/corba" +JAXP_TOPDIR="$SRC_ROOT/jaxp" +JAXWS_TOPDIR="$SRC_ROOT/jaxws" +HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" +JDK_TOPDIR="$SRC_ROOT/jdk" +AC_SUBST(LANGTOOLS_TOPDIR) +AC_SUBST(CORBA_TOPDIR) +AC_SUBST(JAXP_TOPDIR) +AC_SUBST(JAXWS_TOPDIR) +AC_SUBST(HOTSPOT_TOPDIR) +AC_SUBST(JDK_TOPDIR) +]) + + +AC_DEFUN_ONCE([SRCDIRS_SETUP_ALTERNATIVE_TOPDIRS], +[ + +############################################################################### +# +# Pickup additional source for a component from outside of the source root +# or override source for a component. +# +AC_ARG_WITH(add-source-root, [AS_HELP_STRING([--with-add-source-root], + [for each and every source directory, look in this additional source root for + the same directory; if it exists and have files in it, include it in the build])]) + +AC_ARG_WITH(override-source-root, [AS_HELP_STRING([--with-override-source-root], + [for each and every source directory, look in this override source root for + the same directory; if it exists, use that directory instead and + ignore the directory in the original source root])]) + +AC_ARG_WITH(adds-and-overrides, [AS_HELP_STRING([--with-adds-and-overrides], + [use the subdirs 'adds' and 'overrides' in the specified directory as + add-source-root and override-source-root])]) + +if test "x$with_adds_and_overrides" != x; then + with_add_source_root="$with_adds_and_overrides/adds" + with_override_source_root="$with_adds_and_overrides/overrides" +fi + +if test "x$with_add_source_root" != x; then + if ! test -d $with_add_source_root; then + AC_MSG_ERROR([Trying to use a non-existant add-source-root $with_add_source_root]) + fi + CURDIR="$PWD" + cd "$with_add_source_root" + ADD_SRC_ROOT="`pwd`" + cd "$CURDIR" + # Verify that the addon source root does not have any root makefiles. + # If it does, then it is usually an error, prevent this. + if test -f $with_add_source_root/langtools/makefiles/Makefile || \ + test -f $with_add_source_root/langtools/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/corba/makefiles/Makefile || \ + test -f $with_add_source_root/corba/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full corba repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ + test -f $with_add_source_root/jaxp/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ + test -f $with_add_source_root/jaxws/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ + test -f $with_add_source_root/hotspot/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/jdk/makefiles/Makefile || \ + test -f $with_add_source_root/jdk/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources.]) + fi +fi +AC_SUBST(ADD_SRC_ROOT) + +if test "x$with_override_source_root" != x; then + if ! test -d $with_override_source_root; then + AC_MSG_ERROR([Trying to use a non-existant override-source-root $with_override_source_root]) + fi + CURDIR="$PWD" + cd "$with_override_source_root" + OVERRIDE_SRC_ROOT="`pwd`" + cd "$CURDIR" + if test -f $with_override_source_root/langtools/makefiles/Makefile || \ + test -f $with_override_source_root/langtools/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/corba/makefiles/Makefile || \ + test -f $with_override_source_root/corba/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full corba repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ + test -f $with_override_source_root/jaxp/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ + test -f $with_override_source_root/jaxws/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ + test -f $with_override_source_root/hotspot/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/jdk/makefiles/Makefile || \ + test -f $with_override_source_root/jdk/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override.]) + fi +fi +AC_SUBST(OVERRIDE_SRC_ROOT) + +############################################################################### +# +# Override a repo completely, this is used for example when you have 3 small +# development sandboxes of the langtools sources and want to avoid having 3 full +# OpenJDK sources checked out on disk. +# +# Assuming that the 3 langtools sandboxes are located here: +# /home/fredrik/sandbox1/langtools +# /home/fredrik/sandbox2/langtools +# /home/fredrik/sandbox3/langtools +# +# From the source root you create build subdirs manually: +# mkdir -p build1 build2 build3 +# in each build directory run: +# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) +# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) +# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) +# + +AC_ARG_WITH(override-langtools, [AS_HELP_STRING([--with-override-langtools], + [use this langtools dir for the build])]) + +AC_ARG_WITH(override-corba, [AS_HELP_STRING([--with-override-corba], + [use this corba dir for the build])]) + +AC_ARG_WITH(override-jaxp, [AS_HELP_STRING([--with-override-jaxp], + [use this jaxp dir for the build])]) + +AC_ARG_WITH(override-jaxws, [AS_HELP_STRING([--with-override-jaxws], + [use this jaxws dir for the build])]) + +AC_ARG_WITH(override-hotspot, [AS_HELP_STRING([--with-override-hotspot], + [use this hotspot dir for the build])]) + +AC_ARG_WITH(override-jdk, [AS_HELP_STRING([--with-override-jdk], + [use this jdk dir for the build])]) + +if test "x$with_override_langtools" != x; then + CURDIR="$PWD" + cd "$with_override_langtools" + LANGTOOLS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override langtools with a full langtools repo!]) + fi + AC_MSG_CHECKING([if langtools should be overridden]) + AC_MSG_RESULT([yes with $LANGTOOLS_TOPDIR]) +fi +if test "x$with_override_corba" != x; then + CURDIR="$PWD" + cd "$with_override_corba" + CORBA_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override corba with a full corba repo!]) + fi + AC_MSG_CHECKING([if corba should be overridden]) + AC_MSG_RESULT([yes with $CORBA_TOPDIR]) +fi +if test "x$with_override_jaxp" != x; then + CURDIR="$PWD" + cd "$with_override_jaxp" + JAXP_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override jaxp with a full jaxp repo!]) + fi + AC_MSG_CHECKING([if jaxp should be overridden]) + AC_MSG_RESULT([yes with $JAXP_TOPDIR]) +fi +if test "x$with_override_jaxws" != x; then + CURDIR="$PWD" + cd "$with_override_jaxws" + JAXWS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override jaxws with a full jaxws repo!]) + fi + AC_MSG_CHECKING([if jaxws should be overridden]) + AC_MSG_RESULT([yes with $JAXWS_TOPDIR]) +fi +if test "x$with_override_hotspot" != x; then + CURDIR="$PWD" + cd "$with_override_hotspot" + HOTSPOT_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ + ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override hotspot with a full hotspot repo!]) + fi + AC_MSG_CHECKING([if hotspot should be overridden]) + AC_MSG_RESULT([yes with $HOTSPOT_TOPDIR]) +fi +if test "x$with_override_jdk" != x; then + CURDIR="$PWD" + cd "$with_override_jdk" + JDK_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JDK_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override JDK with a full JDK repo!]) + fi + AC_MSG_CHECKING([if JDK should be overridden]) + AC_MSG_RESULT([yes with $JDK_TOPDIR]) +fi + +]) + +AC_DEFUN_ONCE([SRCDIRS_SETUP_OUTPUT_DIRS], +[ +LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" +CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" +JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" +JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" +HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" +JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" +IMAGES_OUTPUTDIR="$OUTPUT_ROOT/images" + +AC_SUBST(LANGTOOLS_OUTPUTDIR) +AC_SUBST(CORBA_OUTPUTDIR) +AC_SUBST(JAXP_OUTPUTDIR) +AC_SUBST(JAXWS_OUTPUTDIR) +AC_SUBST(HOTSPOT_OUTPUTDIR) +AC_SUBST(JDK_OUTPUTDIR) +AC_SUBST(IMAGES_OUTPUTDIR) + +LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" +CORBA_DIST="$OUTPUT_ROOT/corba/dist" +JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" +JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" +HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" + +AC_SUBST(LANGTOOLS_DIST) +AC_SUBST(CORBA_DIST) +AC_SUBST(JAXP_DIST) +AC_SUBST(JAXWS_DIST) +AC_SUBST(HOTSPOT_DIST) +]) diff --git a/common/autoconf/spec.sh.in b/common/autoconf/spec.sh.in new file mode 100644 index 00000000000..a1d1c07ef1b --- /dev/null +++ b/common/autoconf/spec.sh.in @@ -0,0 +1,527 @@ +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +# Configured"@DATE_WHEN_CONFIGURED@ to build for a @OPENJDK_TARGET_SYSTEM@ system, +# using 'configure @CONFIGURE_COMMAND_LINE@' + +# The "human readable" name of this configuration +CONF_NAME="@CONF_NAME@" + +# The built jdk will run in this target system. +OPENJDK_TARGET_SYSTEM="@OPENJDK_TARGET_SYSTEM@" + +OPENJDK_TARGET_OS="@OPENJDK_TARGET_OS@" +OPENJDK_TARGET_OS_FAMILY="@OPENJDK_TARGET_OS_FAMILY@" +OPENJDK_TARGET_OS_API="@OPENJDK_TARGET_OS_API@" + +OPENJDK_TARGET_CPU="@OPENJDK_TARGET_CPU@" +OPENJDK_TARGET_CPU_ARCH="@OPENJDK_TARGET_CPU_ARCH@" +OPENJDK_TARGET_CPU_BITS="@OPENJDK_TARGET_CPU_BITS@" +OPENJDK_TARGET_CPU_ENDIAN="@OPENJDK_TARGET_CPU_ENDIAN@" + +# We are building on this build system. +# When not cross-compiling, it is the same as the target. +OPENJDK_BUILD_SYSTEM="@OPENJDK_BUILD_SYSTEM@" + +OPENJDK_BUILD_OS="@OPENJDK_BUILD_OS@" +OPENJDK_BUILD_OS_FAMILY="@OPENJDK_BUILD_OS_FAMILY@" +OPENJDK_BUILD_OS_API="@OPENJDK_BUILD_OS_API@" + +OPENJDK_BUILD_CPU="@OPENJDK_BUILD_CPU@" +OPENJDK_BUILD_CPU_ARCH="@OPENJDK_BUILD_CPU_ARCH@" +OPENJDK_BUILD_CPU_BITS="@OPENJDK_BUILD_CPU_BITS@" +OPENJDK_BUILD_CPU_ENDIAN="@OPENJDK_BUILD_CPU_ENDIAN@" + +# Legacy OS values for use in release file. +REQUIRED_OS_NAME="@REQUIRED_OS_NAME@" +REQUIRED_OS_VERSION="@REQUIRED_OS_VERSION@" + +# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) +PLATFORM="@OPENJDK_TARGET_OS@" +# Old name for OPENJDK_TARGET_CPU, uses i586 and amd64, instead of ia32 and x64. +ARCH="@LEGACY_OPENJDK_TARGET_CPU1@" +# Yet another name for arch used for an extra subdir below the jvm lib. +# Uses i386 and amd64, instead of ia32 and x64. +LIBARCH="@LEGACY_OPENJDK_TARGET_CPU2@" +# Use to switch between solaris and windows subdirs in the jdk. +LEGACY_OPENJDK_TARGET_OS_API="@LEGACY_OPENJDK_TARGET_OS_API@" +# 32 or 64 bit +ARCH_DATA_MODEL="@OPENJDK_TARGET_CPU_BITS@" +# Legacy setting for building for a 64 bit machine. +# If yes then this expands to _LP64=1 +ENDIAN="@OPENJDK_TARGET_CPU_ENDIAN@" +JIGSAW="@JIGSAW@" +LIBM=-lm +LIBDL="@LIBDL@" + +# colon or semicolon +PATH_SEP="@PATH_SEP@" + +# The sys root where standard headers and libraries are found. +# Usually not needed since the configure script should have +# taken it into account already when setting CFLAGS et al. +SYS_ROOT="@SYS_ROOT@" + +# Paths to the source code +SRC_ROOT="@SRC_ROOT@" +ADD_SRC_ROOT="@ADD_SRC_ROOT@" +OVERRIDE_SRC_ROOT="@OVERRIDE_SRC_ROOT@" +TOPDIR="@SRC_ROOT@" +OUTPUT_ROOT="@OUTPUT_ROOT@" +JDK_MAKE_SHARED_DIR="@JDK_TOPDIR@"/makefiles/common/shared +JDK_TOPDIR="@JDK_TOPDIR@" +LANGTOOLS_TOPDIR="@LANGTOOLS_TOPDIR@" +CORBA_TOPDIR="@CORBA_TOPDIR@" +JAXP_TOPDIR="@JAXP_TOPDIR@" +JAXWS_TOPDIR="@JAXWS_TOPDIR@" +HOTSPOT_TOPDIR="@HOTSPOT_TOPDIR@" +COPYRIGHT_YEAR="@COPYRIGHT_YEAR@" + +# Information gathered from the version.numbers file. +JDK_MAJOR_VERSION="@JDK_MAJOR_VERSION@" +JDK_MINOR_VERSION="@JDK_MINOR_VERSION@" +JDK_MICRO_VERSION="@JDK_MICRO_VERSION@" +JDK_UPDATE_VERSION="@JDK_UPDATE_VERSION@" +JDK_BUILD_NUMBER="@JDK_BUILD_NUMBER@" +MILESTONE="@MILESTONE@" +LAUNCHER_NAME="@LAUNCHER_NAME@" +PRODUCT_NAME="@PRODUCT_NAME@" +PRODUCT_SUFFIX="@PRODUCT_SUFFIX@" +JDK_RC_PLATFORM_NAME="@JDK_RC_PLATFORM_NAME@" +COMPANY_NAME="@COMPANY_NAME@" + +# Different version strings generated from the above information. +JDK_VERSION="@JDK_VERSION@" +RUNTIME_NAME="@RUNTIME_NAME@" +FULL_VERSION="@FULL_VERSION@" +JRE_RELEASE_VERSION="@FULL_VERSION@" +RELEASE="@RELEASE@" +COOKED_BUILD_NUMBER="@COOKED_BUILD_NUMBER@" + +# How to compile the code: release, fastdebug or slowdebug +DEBUG_LEVEL="@DEBUG_LEVEL@" + +# This is the JDK variant to build. +# The JDK variant is a name for a specific set of modules to be compiled for the JDK. +JDK_VARIANT="@JDK_VARIANT@" + +# Should we compile support for running with a graphical UI? (ie headful) +# Should we compile support for running without? (ie headless) +SUPPORT_HEADFUL="@SUPPORT_HEADFUL@" +SUPPORT_HEADLESS="@SUPPORT_HEADLESS@" + +# These are the libjvms that we want to build. +# The java launcher uses the default. +# The other can be selected by specifying -client -server -kernel -zero or -zeroshark +# on the java launcher command line. +JVM_VARIANTS="@JVM_VARIANTS@" +JVM_VARIANT_SERVER="@JVM_VARIANT_SERVER@" +JVM_VARIANT_CLIENT="@JVM_VARIANT_CLIENT@" +JVM_VARIANT_KERNEL="@JVM_VARIANT_KERNEL@" +JVM_VARIANT_ZERO="@JVM_VARIANT_ZERO@" +JVM_VARIANT_ZEROSHARK="@JVM_VARIANT_ZEROSHARK@" + +# Legacy setting: OPT or DBG +VARIANT="@VARIANT@" +# Legacy setting: true or false +FASTDEBUG="@FASTDEBUG@" +# Legacy setting: debugging the class files? +DEBUG_CLASSFILES="@DEBUG_CLASSFILES@" +# Legacy setting: -debug or -fastdebug +BUILD_VARIANT_RELEASE="@BUILD_VARIANT_RELEASE@" + +LANGTOOLS_OUTPUTDIR="@LANGTOOLS_OUTPUTDIR@" +CORBA_OUTPUTDIR="@CORBA_OUTPUTDIR@" +JAXP_OUTPUTDIR="@JAXP_OUTPUTDIR@" +JAXWS_OUTPUTDIR="@JAXWS_OUTPUTDIR@" +HOTSPOT_OUTPUTDIR="@HOTSPOT_OUTPUTDIR@" + +# This where a working jvm is built. +# You can run ${JDK_OUTPUTDIR}/bin/java +# Though the layout of the contents of ${JDK_OUTPUTDIR} is not +# yet the same as a default installation. +JDK_OUTPUTDIR="@OUTPUT_ROOT@"/jdk + +# When you run "make install" it will create the standardized +# layout for the jdk and the jre inside the images subdir. +# Then it will copy the contents of the jdk into the installation +# directory. +IMAGES_OUTPUTDIR="@OUTPUT_ROOT@"/images + +LANGTOOLS_DIST="@LANGTOOLS_DIST@" +CORBA_DIST="@CORBA_DIST@" +JAXP_DIST="@JAXP_DIST@" +JAXWS_DIST="@JAXWS_DIST@" +HOTSPOT_DIST="@HOTSPOT_DIST@" + +# Legacy variables used by Release.gmk +JDK_IMAGE_DIR=${IMAGES_OUTPUTDIR}/j2sdk-image +JRE_IMAGE_DIR=${IMAGES_OUTPUTDIR}/j2re-image + +# Can be /sparcv9 or /amd64 on Solaris +ISA_DIR="@LEGACY_OPENJDK_TARGET_CPU3@" +BINDIR="${JDK_OUTPUTDIR}/bin${ISA_DIR}" + +# The boot jdk to use +ALT_BOOTDIR="@BOOT_JDK@" +BOOT_JDK="@BOOT_JDK@" +BOOT_JDK_JVMARGS="@BOOT_JDK_JVMARGS@" +BOOT_RTJAR="@BOOT_RTJAR@" +BOOT_TOOLSJAR="@BOOT_TOOLSJAR@" + +# When compiling Java source to be run by the boot jdk +# use these extra flags, eg -source 6 -target 6 +BOOT_JDK_SOURCETARGET="@BOOT_JDK_SOURCETARGET@" + +# Information about the build system +NUM_CORES="@NUM_CORES@" +# This is used from the jdk build for C/C++ code. +PARALLEL_COMPILE_JOBS="@CONCURRENT_BUILD_JOBS@" +# Store javac server synchronization files here, and +# the javac server log files. +JAVAC_SERVERS="@JAVAC_SERVERS@" +# Should we use a javac server or not? The javac server gives +# an enormous performance improvement since it reduces the +# startup costs of javac and reuses as much as possible of intermediate +# compilation work. But if we want to compile with a non-Java +# javac compiler, like gcj. Then we cannot use javac server and +# this variable is set to false. +JAVAC_USE_REMOTE="@JAVAC_USE_REMOTE@" +# We can block the Javac server to never use more cores than this. +# This is not for performance reasons, but for memory usage, since each +# core requires its own JavaCompiler. We might have 64 cores and 4GB +# of memory, 64 JavaCompilers will currently not fit in a 3GB heap. +# Since there is no sharing of data between the JavaCompilers. +JAVAC_SERVER_CORES="@JAVAC_SERVER_CORES@" +# Should we use dependency tracking between Java packages? true or false. +JAVAC_USE_DEPS="@JAVAC_USE_DEPS@" +# We can invoke javac: SINGLE_THREADED_BATCH or MULTI_CORE_CONCURRENT +JAVAC_USE_MODE="@JAVAC_USE_MODE@" +# Enable not yet complete sjavac support. +ENABLE_SJAVAC="@ENABLE_SJAVAC@" + +# The OpenJDK makefiles should be changed to using the standard +# configure output ..._CFLAGS and ..._LIBS. In the meantime we +# extract the information here. +FREETYPE2_LIB_PATH="@FREETYPE2_LIB_PATH@" +FREETYPE2_LIBS="@FREETYPE2_LIBS@" +FREETYPE2_CFLAGS="@FREETYPE2_CFLAGS@" +USING_SYSTEM_FT_LIB="@USING_SYSTEM_FT_LIB@" +CUPS_CFLAGS="@CUPS_CFLAGS@" + +PACKAGE_PATH="@PACKAGE_PATH@" + +# Source file for cacerts +CACERTS_FILE="@CACERTS_FILE@" + +#MOZILLA_HEADERS_PATH= + +# Necessary additional compiler flags to compile X11 +X_CFLAGS="@X_CFLAGS@" +X_LIBS="@X_LIBS@" +OPENWIN_HOME="@OPENWIN_HOME@" + +# There are two types: CC or CL +# CC is gcc and others behaving reasonably similar. +# CL is cl.exe only. +COMPILER_TYPE="@COMPILER_TYPE@" + +# Flags used for overriding the default opt setting for a C/C++ source file. +C_O_FLAG_HIGHEST="@C_O_FLAG_HIGHEST@" +C_O_FLAG_HI="@C_O_FLAG_HI@" +C_O_FLAG_NORM="@C_O_FLAG_NORM@" +C_O_FLAG_NONE="@C_O_FLAG_NONE@" +CXX_O_FLAG_HIGHEST="@CXX_O_FLAG_HIGHEST@" +CXX_O_FLAG_HI="@CXX_O_FLAG_HI@" +CXX_O_FLAG_NORM="@CXX_O_FLAG_NORM@" +CXX_O_FLAG_NONE="@CXX_O_FLAG_NONE@" + +C_FLAG_DEPS="@C_FLAG_DEPS@" +CXX_FLAG_DEPS="@CXX_FLAG_DEPS@" + +# Tools that potentially need to be cross compilation aware. +CC="@UNCYGDRIVE@ @CCACHE@ @CC@" + +# CFLAGS used to compile the jdk native libraries (C-code) +CFLAGS_JDKLIB="@CFLAGS_JDKLIB@" +CXXFLAGS_JDKLIB="@CXXFLAGS_JDKLIB@" + +# CFLAGS used to compile the jdk native launchers (C-code) +CFLAGS_JDKEXE="@CFLAGS_JDKEXE@" +CXXFLAGS_JDKEXE="@CXXFLAGS_JDKEXE@" + +CXX="@UNCYGDRIVE@ @CCACHE@ @CXX@" +#CXXFLAGS="@CXXFLAGS@" + +OBJC="@CCACHE@ @OBJC@" +#OBJCFLAGS="@OBJCFLAGS@" + +CPP="@UNCYGDRIVE@ @CPP@" +#CPPFLAGS="@CPPFLAGS@" + +# The linker can be gcc or ld on posix systems, or link.exe on winapi systems. +LD="@UNCYGDRIVE@ @LD@" + +# LDFLAGS used to link the jdk native libraries (C-code) +LDFLAGS_JDKLIB="@LDFLAGS_JDKLIB@" +LDFLAGS_JDKLIB_SUFFIX="@LDFLAGS_JDKLIB_SUFFIX@" + +# On some platforms the linker cannot be used to create executables, thus +# the need for a separate LDEXE command. +LDEXE="@UNCYGDRIVE@ @LDEXE@" + +# LDFLAGS used to link the jdk native launchers (C-code) +LDFLAGS_JDKEXE="@LDFLAGS_JDKEXE@" +LDFLAGS_JDKEXE_SUFFIX="@LDFLAGS_JDKEXE_SUFFIX@" + +# Sometimes a different linker is needed for c++ libs +LDCXX="@UNCYGDRIVE@ @LDCXX@" +# The flags for linking libstdc++ linker. +LIBCXX="@LIBCXX@" + +# Sometimes a different linker is needed for c++ executables +LDEXECXX="@UNCYGDRIVE@ @LDEXECXX@" + +# If cross compiling, then define CROSS_COMPILE_ARCH=cpu_name here. +# The HOSTCC should really be named BUILDCC, ie build executable for +# the build platform. Same as CC when not cross compiling. +HOSTCC="@HOSTCC@" +HOSTCXX="@HOSTCXX@" +# And of course, the jdk spells HOSTCC as NIO_CC/HOST_CC +HOST_CC="@HOSTCC@" +NIO_CC="@HOSTCC@" + +AS="@AS@" +ASFLAGS="@ASFLAGS@" + +# AR is used to create a static library (is ar in posix, lib.exe in winapi) +AR="@UNCYGDRIVE@ @AR@" +ARFLAGS="@ARFLAGS@" + +NM="@NM@" +STRIP="@STRIP@" +MCS="@MCS@" + +# Command to create a shared library +SHARED_LIBRARY_FLAGS="@SHARED_LIBRARY_FLAGS@" + +# Options to linker to specify a mapfile. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SET_SHARED_LIBRARY_MAPFILE="@SET_SHARED_LIBRARY_MAPFILE@" + +# Options for C/CXX compiler to be used if linking is performed +# using reorder file +C_FLAG_REORDER="@C_FLAG_REORDER@" +CXX_FLAG_REORDER="@CXX_FLAG_REORDER@" + +# +# Options for generating debug symbols +ENABLE_DEBUG_SYMBOLS="@ENABLE_DEBUG_SYMBOLS@" +CFLAGS_DEBUG_SYMBOLS="@CFLAGS_DEBUG_SYMBOLS@" +CXXFLAGS_DEBUG_SYMBOLS="@CXXFLAGS_DEBUG_SYMBOLS@" +ZIP_DEBUGINFO_FILES="@ZIP_DEBUGINFO_FILES@" + +# Options to linker to specify the library name. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SET_SHARED_LIBRARY_NAME="@SET_SHARED_LIBRARY_NAME@" + +# Set origin using the linker, ie use the relative path to the dependent library to find the dependees. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SET_SHARED_LIBRARY_ORIGIN="@SET_SHARED_LIBRARY_ORIGIN@" + +# Different OS:es have different ways of naming shared libraries. +# The SHARED_LIBRARY macro takes "verify" as and argument and returns: +# "libverify.so" or "libverify.dylib" or "verify.dll" depending on platform. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SHARED_LIBRARY="@SHARED_LIBRARY@" +STATIC_LIBRARY="@STATIC_LIBRARY@" +LIBRARY_PREFIX="@LIBRARY_PREFIX@" +SHARED_LIBRARY_SUFFIX="@SHARED_LIBRARY_SUFFIX@" +STATIC_LIBRARY_SUFFIX="@STATIC_LIBRARY_SUFFIX@" +EXE_SUFFIX="@EXE_SUFFIX@" +OBJ_SUFFIX="@OBJ_SUFFIX@" + +POST_STRIP_CMD="@POST_STRIP_CMD@" +POST_MCS_CMD='@POST_MCS_CMD@' + +JAVA_FLAGS="@BOOT_JDK_JVMARGS@" + +JAVA="@UNCYGDRIVE@ @JAVA@ ${JAVA_FLAGS}" + +JAVAC="@UNCYGDRIVE@ @JAVAC@" +JAVAC_FLAGS="@JAVAC_FLAGS@" + +JAVAH="@UNCYGDRIVE@ @JAVAH@" + +JAR="@UNCYGDRIVE@ @JAR@" + +RMIC="@UNCYGDRIVE@ @RMIC@" + +NATIVE2ASCII="@UNCYGDRIVE@ @NATIVE2ASCII@" + +BOOT_JAR_CMD="@UNCYGDRIVE@ @JAR@" +BOOT_JAR_JFLAGS= + +# Tools adhering to a minimal and common standard of posix compliance. +AWK="@AWK@" +CAT="@CAT@" +CCACHE="@CCACHE@" +# CD is going away, but remains to cater for legacy makefiles. +CD=cd +CHMOD="@CHMOD@" +CP="@CP@" +CPIO="@CPIO@" +CUT="@CUT@" +DATE="@DATE@" +DF="@DF@" +DIFF="@DIFF@" +FIND="@FIND@" +FIND_DELETE="@FIND_DELETE@" +ECHO="@ECHO@" +EGREP="@EGREP@" +FGREP="@FGREP@" +GREP="@GREP@" +HEAD="@HEAD@" +LS="@LS@" +LN="@LN@" +MKDIR="@MKDIR@" +MV="@MV@" +NAWK="@NAWK@" +PRINTF="@PRINTF@" +PWD="@THEPWDCMD@" +RM="@RM@" +SED="@SED@" +SH="@SH@" +SORT="@SORT@" +TAR="@TAR@" +TAIL="@TAIL@" +TEE="@TEE@" +TR="@TR@" +TOUCH="@TOUCH@" +WC="@WC@" +XARGS="@XARGS@" +ZIPEXE="@ZIP@" +ZIP="@ZIP@" +UNZIP="@UNZIP@" +MT="@UNCYGDRIVE@ @MT@" +RC="@UNCYGDRIVE@ @RC@" +DUMPBIN="@UNCYGDRIVE@ @DUMPBIN@" +CYGPATH="@CYGPATH@" +LDD="@LDD@" +OTOOL="@OTOOL@" +READELF="@READELF@" +EXPR="@EXPR@" +FILE="@FILE@" +HG="@HG@" +OBJCOPY="@OBJCOPY@" + +UNCYGDRIVE="@UNCYGDRIVE@" + +# Build setup +ENABLE_DOCS="@ENABLE_DOCS@" +GENERATE_DOCS="@ENABLE_DOCS@" +DISABLE_NIMBUS="@DISABLE_NIMBUS@" +USE_EXTERNAL_LIBJPEG="@USE_EXTERNAL_LIBJPEG@" +USE_EXTERNAL_LIBGIF="@USE_EXTERNAL_LIBGIF@" +USE_EXTERNAL_LIBZ="@USE_EXTERNAL_LIBZ@" +LIBZIP_CAN_USE_MMAP="@LIBZIP_CAN_USE_MMAP@" +CHECK_FOR_VCINSTALLDIR="@CHECK_FOR_VCINSTALLDIR@" +MSVCRNN_DLL="@MSVCR100DLL@" + + +#################################################### +# +# Legacy Hotspot support + +HOTSPOT_DIST="@HOTSPOT_DIST@" +HOTSPOT_MAKE_ARGS="@HOTSPOT_MAKE_ARGS@" +# This is used from the libjvm build for C/C++ code. +HOTSPOT_BUILD_JOBS="@CONCURRENT_BUILD_JOBS@" +# Control wether Hotspot runs Queens test after building +TEST_IN_BUILD="@TEST_IN_BUILD@" + +#################################################### +# +# INSTALLATION +# + +# Common prefix for all installed files. Defaults to /usr/local, +# but /opt/myjdk is another common version. +INSTALL_PREFIX="@prefix@" + +# Directories containing architecture-dependent files should be relative to exec_prefix +INSTALL_EXECPREFIX="@exec_prefix@" + +# java,javac,javah,javap etc are installed here. +INSTALL_BINDIR="@bindir@" + +# Read only architecture-independent data +INSTALL_DATADIR="@datadir@" + +# Root of above. +INSTALL_DATAROOTDIR="@datarootdir@" + +# Doc files, other than info and man. +INSTALL_DOCDIR="@docdir@" + +# Html documentation +INSTALL_HTMLDIR="@htmldir@" + +# Installing C header files, JNI headers for example. +INSTALL_INCLUDEDIR="@includedir@" + +# Installing library files.... +INSTALL_INCLUDEDIR="@libdir@" + +# Executables that other programs run. +INSTALL_LIBEXECDIR="@libexecdir@" + +# Locale-dependent but architecture-independent data, such as message catalogs. +INSTALL_LOCALEDIR="@localedir@" + +# Modifiable single-machine data +INSTALL_LOCALSTATEDIR="@localstatedir@" + +# Man pages +INSTALL_MANDIR="@mandir@" + +# Modifiable architecture-independent data. +INSTALL_SHAREDSTATEDIR="@sharedstatedir@" + +# Read-only single-machine data +INSTALL_SYSCONFDIR="@sysconfdir@" + + +#################################################### +# +# Misc +# + +# Name of Service Agent library +SALIB_NAME="@SALIB_NAME@" + +OS_VERSION_MAJOR="@OS_VERSION_MAJOR@" +OS_VERSION_MINOR="@OS_VERSION_MINOR@" +OS_VERSION_MICRO="@OS_VERSION_MICRO@" diff --git a/common/autoconf/toolchain.m4 b/common/autoconf/toolchain.m4 new file mode 100644 index 00000000000..252e06af4d0 --- /dev/null +++ b/common/autoconf/toolchain.m4 @@ -0,0 +1,908 @@ +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV], +[ + +# Check if the VS env variables were setup prior to running configure. +# If not, then find vcvarsall.bat and run it automatically, and integrate +# the set env variables into the spec file. +SETUPDEVENV="# No special vars" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + # If vcvarsall.bat has been run, then VCINSTALLDIR is set. + if test "x$VCINSTALLDIR" != x; then + # No further setup is needed. The build will happen from this kind + # of shell. + SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." + # Make sure to remind you, if you forget to run make from a cygwin bash shell + # that is spawned "bash -l" from a VS command prompt. + CHECK_FOR_VCINSTALLDIR=yes + AC_MSG_CHECKING([if you are running from within a VS command prompt]) + AC_MSG_RESULT([yes]) + else + # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. + if test "x$VS100COMNTOOLS" != x; then + VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` + SEARCH_ROOT="$VS100COMNTOOLS" + else + VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` + SEARCH_ROOT="$PROGRAMFILES" + fi + VCPATH=`dirname "$VARSBAT"` + VCPATH=`cygpath -w "$VCPATH"` + if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then + AC_MSG_CHECKING([if we can find the VS installation]) + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + fi + case "$LEGACY_OPENJDK_TARGET_CPU1" in + i?86) + VARSBAT_ARCH=x86 + ;; + *) + VARSBAT_ARCH=$LEGACY_OPENJDK_TARGET_CPU1 + ;; + esac + # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat + cd $OUTPUT_ROOT + bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" + cd $CURDIR + if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then + AC_MSG_CHECKING([if we can extract the needed env variables]) + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + fi + # Now set all paths and other env variables. This will allow the rest of + # the configure script to find and run the compiler in the proper way. + . $OUTPUT_ROOT/localdevenv.sh + AC_MSG_CHECKING([if we can find the VS installation]) + if test "x$VCINSTALLDIR" != x; then + AC_MSG_RESULT([$VCINSTALLDIR]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + fi + CHECK_FOR_VCINSTALLDIR=no + SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" + + AC_MSG_CHECKING([for msvcr100.dll]) + AC_ARG_WITH(msvcr100dll, [AS_HELP_STRING([--with-msvcr100dll], + [copy this msvcr100.dll into the built JDK])]) + if test "x$with_msvcr100dll" != x; then + MSVCR100DLL="$with_msvcr100dll" + else + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` + else + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` + if test "x$MSVCR100DLL" = x; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` + fi + fi + fi + if test "x$MSVCR100DLL" = x; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find msvcr100.dll !]) + fi + AC_MSG_RESULT([$MSVCR100DLL]) + SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll]) + fi +fi +AC_SUBST(SETUPDEVENV) +AC_SUBST(CHECK_FOR_VCINSTALLDIR) +AC_SUBST(MSVCR100DLL) +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS], +[ +############################################################################### +# +# Configure the development tool paths and potential sysroot. +# +AC_LANG(C++) +DEVKIT= +SYS_ROOT=/ +AC_SUBST(SYS_ROOT) + +# The option used to specify the target .o,.a or .so file. +# When compiling, how to specify the to be created object file. +CC_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created executable. +EXE_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created dynamically linkable library. +LD_OUT_OPTION='-o$(SPACE)' +# When archiving, how to specify the to be create static archive for object files. +AR_OUT_OPTION='rcs$(SPACE)' +AC_SUBST(CC_OUT_OPTION) +AC_SUBST(EXE_OUT_OPTION) +AC_SUBST(LD_OUT_OPTION) +AC_SUBST(AR_OUT_OPTION) +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_PATHS], +[ +# If --build AND --host is set, then the configure script will find any +# cross compilation tools in the PATH. Cross compilation tools +# follows the cross compilation standard where they are prefixed with ${host}. +# For example the binary i686-sun-solaris2.10-gcc +# will cross compile for i686-sun-solaris2.10 +# If neither of build and host is not set, then build=host and the +# default compiler found in the path will be used. +# Setting only --host, does not seem to be really supported. +# Please set both --build and --host if you want to cross compile. + +DEFINE_CROSS_COMPILE_ARCH="" +HOSTCC="" +HOSTCXX="" +HOSTLD="" +AC_SUBST(DEFINE_CROSS_COMPILE_ARCH) +AC_MSG_CHECKING([if this is a cross compile]) +if test "x$OPENJDK_BUILD_SYSTEM" != "x$OPENJDK_TARGET_SYSTEM"; then + AC_MSG_RESULT([yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM]) + # We have detected a cross compile! + DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_OPENJDK_TARGET_CPU1" + # Now we to find a C/C++ compiler that can build executables for the build + # platform. We can't use the AC_PROG_CC macro, since it can only be used + # once. + AC_PATH_PROGS(HOSTCC, [cl cc gcc]) + WHICHCMD(HOSTCC) + AC_PATH_PROGS(HOSTCXX, [cl CC g++]) + WHICHCMD(HOSTCXX) + AC_PATH_PROG(HOSTLD, ld) + WHICHCMD(HOSTLD) + # Building for the build platform should be easy. Therefore + # we do not need any linkers or assemblers etc. +else + AC_MSG_RESULT([no]) +fi + +# You can force the sys-root if the sys-root encoded into the cross compiler tools +# is not correct. +AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root], + [pass this sys-root to the compilers and linker (useful if the sys-root encoded in + the cross compiler tools is incorrect)])]) + +if test "x$with_sys_root" != x; then + SYS_ROOT=$with_sys_root +fi + +# If a devkit is found on the builddeps server, then prepend its path to the +# PATH variable. If there are cross compilers available in the devkit, these +# will be found by AC_PROG_CC et al. +BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx, + [# Found devkit + PATH="$DEVKIT/bin:$PATH" + SYS_ROOT="$DEVKIT/${rewritten_target}/sys-root" + if test "x$x_includes" = "xNONE"; then + x_includes="$SYS_ROOT/usr/include/X11" + fi + if test "x$x_libraries" = "xNONE"; then + x_libraries="$SYS_ROOT/usr/lib" + fi + ], + []) + +if test "x$SYS_ROOT" != "x/" ; then + CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" + CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" + OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" + LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" +fi + +# Store the CFLAGS etal passed to the configure script. +ORG_CFLAGS="$CFLAGS" +ORG_CXXFLAGS="$CXXFLAGS" +ORG_OBJCFLAGS="$OBJCFLAGS" + +AC_ARG_WITH([tools-dir], [AS_HELP_STRING([--with-tools-dir], + [search this directory for compilers and tools])], [TOOLS_DIR=$with_tools_dir]) + +AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit], + [use this directory as base for tools-dir and sys-root])], [ + if test "x$with_sys_root" != x; then + AC_MSG_ERROR([Cannot specify both --with-devkit and --with-sys-root at the same time]) + fi + if test "x$with_tools_dir" != x; then + AC_MSG_ERROR([Cannot specify both --with-devkit and --with-tools-dir at the same time]) + fi + TOOLS_DIR=$with_devkit/bin + SYS_ROOT=$with_devkit/$host_alias/libc + ]) + +# autoconf magic only relies on PATH, so update it if tools dir is specified +OLD_PATH="$PATH" +if test "x$TOOLS_DIR" != x; then + PATH=$TOOLS_DIR:$PATH +fi + +# gcc is almost always present, but on Windows we +# prefer cl.exe and on Solaris we prefer CC. +# Thus test for them in this order. +AC_PROG_CC([cl cc gcc]) +if test "x$CC" = x; then + HELP_MSG_MISSING_DEPENDENCY([devkit]) + AC_MSG_ERROR([Could not find a compiler. $HELP_MSG]) +fi +if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Do not use cc on MacOSX use gcc instead. + CC="gcc" +fi +WHICHCMD(CC) + +AC_PROG_CXX([cl CC g++]) +if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # The found CC, even though it seems to be a g++ derivate, cannot compile + # c++ code. Override. + CXX="g++" +fi +WHICHCMD(CXX) + +if test "x$CXX" = x || test "x$CC" = x; then + HELP_MSG_MISSING_DEPENDENCY([devkit]) + AC_MSG_ERROR([Could not find the needed compilers! $HELP_MSG ]) +fi + +if test "x$OPENJDK_BUILD_OS" != xwindows; then + AC_PROG_OBJC + WHICHCMD(OBJC) +else + OBJC= +fi + +# Restore the flags to the user specified values. +# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" +CFLAGS="$ORG_CFLAGS" +CXXFLAGS="$ORG_CXXFLAGS" +OBJCFLAGS="$ORG_OBJCFLAGS" + +# If we are not cross compiling, use the same compilers for +# building the build platform executables. +if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then + HOSTCC="$CC" + HOSTCXX="$CXX" +fi + +AC_CHECK_TOOL(LD, ld) +WHICHCMD(LD) +LD="$CC" +LDEXE="$CC" +LDCXX="$CXX" +LDEXECXX="$CXX" +# LDEXE is the linker to use, when creating executables. +AC_SUBST(LDEXE) +# Linking C++ libraries. +AC_SUBST(LDCXX) +# Linking C++ executables. +AC_SUBST(LDEXECXX) + +AC_CHECK_TOOL(AR, ar) +WHICHCMD(AR) +if test "x$OPENJDK_BUILD_OS" = xmacosx; then + ARFLAGS="-r" +else + ARFLAGS="" +fi +AC_SUBST(ARFLAGS) + +COMPILER_NAME=gcc +COMPILER_TYPE=CC +AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [ + # For now, assume that we are always compiling using cl.exe. + CC_OUT_OPTION=-Fo + EXE_OUT_OPTION=-out: + LD_OUT_OPTION=-out: + AR_OUT_OPTION=-out: + # On Windows, reject /usr/bin/link, which is a cygwin + # program for something completely different. + AC_CHECK_PROG([WINLD], [link],[link],,, [/usr/bin/link]) + # Since we must ignore the first found link, WINLD will contain + # the full path to the link.exe program. + WHICHCMD_SPACESAFE([WINLD]) + LD="$WINLD" + LDEXE="$WINLD" + LDCXX="$WINLD" + LDEXECXX="$WINLD" + # Set HOSTLD to same as LD until we fully support cross compilation + # on windows. + HOSTLD="$WINLD" + + AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) + WHICHCMD_SPACESAFE([MT]) + # The resource compiler + AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) + WHICHCMD_SPACESAFE([RC]) + + RC_FLAGS="-nologo /l 0x409 /r" + AS_IF([test "x$VARIANT" = xOPT], [ + RC_FLAGS="$RC_FLAGS -d NDEBUG" + ]) + JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION + AS_IF([test "x$JDK_UPDATE_VERSION" = x], [ + JDK_UPDATE_VERSION_NOTNULL=0 + ]) + RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" + + # lib.exe is used to create static libraries. + AC_CHECK_PROG([WINAR], [lib],[lib],,,) + WHICHCMD_SPACESAFE([WINAR]) + AR="$WINAR" + ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" + + AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) + WHICHCMD_SPACESAFE([DUMPBIN]) + + COMPILER_TYPE=CL + CCXXFLAGS="$CCXXFLAGS -nologo" +]) +AC_SUBST(RC_FLAGS) +AC_SUBST(COMPILER_TYPE) + +AC_PROG_CPP +WHICHCMD(CPP) + +AC_PROG_CXXCPP +WHICHCMD(CXXCPP) + +# for solaris we really need solaris tools, and not gnu equivalent +# these seems to normally reside in /usr/ccs/bin so add that to path before +# starting to probe +# +# NOTE: I add this /usr/ccs/bin after TOOLS but before OLD_PATH +# so that it can be overriden --with-tools-dir +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + PATH="${TOOLS_DIR}:/usr/ccs/bin:${OLD_PATH}" +fi + +# Find the right assembler. +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + AC_PATH_PROG(AS, as) + WHICHCMD(AS) + ASFLAGS=" " +else + AS="$CC -c" + ASFLAGS=" " +fi +AC_SUBST(AS) +AC_SUBST(ASFLAGS) + +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + AC_PATH_PROG(NM, nm) + WHICHCMD(NM) + AC_PATH_PROG(STRIP, strip) + WHICHCMD(STRIP) + AC_PATH_PROG(MCS, mcs) + WHICHCMD(MCS) +else + AC_CHECK_TOOL(NM, nm) + WHICHCMD(NM) + AC_CHECK_TOOL(STRIP, strip) + WHICHCMD(STRIP) +fi + +### +# +# Check for objcopy +# +# but search for gobjcopy first... +# since I on solaris found a broken objcopy...buhh +# +AC_PATH_TOOL(OBJCOPY, gobjcopy) +if test "x$OBJCOPY" = x; then + AC_PATH_TOOL(OBJCOPY, objcopy) +fi + +# Restore old path without tools dir +PATH="$OLD_PATH" +]) + + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS], +[ + +############################################################################### +# +# How to compile shared libraries. +# + +if test "x$GCC" = xyes; then + COMPILER_NAME=gcc + PICFLAG="-fPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib[$]1.so' + STATIC_LIBRARY='lib[$]1.a' + SHARED_LIBRARY_FLAGS="-shared" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1' + SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/[$]1' + LD="$CC" + LDEXE="$CC" + LDCXX="$CXX" + LDEXECXX="$CXX" + POST_STRIP_CMD="$STRIP -g" + if test "x$JDK_VARIANT" = xembedded; then + POST_STRIP_CMD="$STRIP --strip-unneeded" + fi + + # Linking is different on MacOSX + if test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Might change in the future to clang. + COMPILER_NAME=gcc + SHARED_LIBRARY='lib[$]1.dylib' + SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + SHARED_LIBRARY_SUFFIX='.dylib' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' + POST_STRIP_CMD="$STRIP -S" + fi +else + if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler + COMPILER_NAME=ossc + PICFLAG="-KPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib[$]1.so' + STATIC_LIBRARY='lib[$]1.a' + SHARED_LIBRARY_FLAGS="-z defs -xildoff -ztext -G" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='-M[$]1' + C_FLAG_REORDER='-xF' + CXX_FLAG_REORDER='-xF' + SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/[$]1' + CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" + CFLAGS_JDKLIB_EXTRA='-xstrconst' + POST_STRIP_CMD="$STRIP -x" + POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" + fi + if test "x$OPENJDK_BUILD_OS" = xwindows; then + # If it is not gcc, then assume it is the MS Visual Studio compiler + COMPILER_NAME=cl + PICFLAG="" + LIBRARY_PREFIX= + SHARED_LIBRARY='[$]1.dll' + STATIC_LIBRARY='[$]1.lib' + SHARED_LIBRARY_FLAGS="-LD" + SHARED_LIBRARY_SUFFIX='.dll' + STATIC_LIBRARY_SUFFIX='.lib' + OBJ_SUFFIX='.obj' + EXE_SUFFIX='.exe' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='' + fi +fi + +AC_SUBST(OBJ_SUFFIX) +AC_SUBST(SHARED_LIBRARY) +AC_SUBST(STATIC_LIBRARY) +AC_SUBST(LIBRARY_PREFIX) +AC_SUBST(SHARED_LIBRARY_SUFFIX) +AC_SUBST(STATIC_LIBRARY_SUFFIX) +AC_SUBST(EXE_SUFFIX) +AC_SUBST(SHARED_LIBRARY_FLAGS) +AC_SUBST(SET_SHARED_LIBRARY_NAME) +AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) +AC_SUBST(C_FLAG_REORDER) +AC_SUBST(CXX_FLAG_REORDER) +AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) +AC_SUBST(POST_STRIP_CMD) +AC_SUBST(POST_MCS_CMD) + +# The (cross) compiler is now configured, we can now test capabilities +# of the target platform. +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], +[ + +############################################################################### +# +# Setup the opt flags for different compilers +# and different operating systems. +# +C_FLAG_DEPS="-MMD -MF" +CXX_FLAG_DEPS="-MMD -MF" + +case $COMPILER_TYPE in + CC ) + D_FLAG="-g" + case $COMPILER_NAME in + gcc ) + case $OPENJDK_TARGET_OS in + macosx ) + # On MacOSX we optimize for size, something + # we should do for all platforms? + C_O_FLAG_HI="-Os" + C_O_FLAG_NORM="-Os" + C_O_FLAG_NONE="" + ;; + *) + C_O_FLAG_HI="-O3" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="-O0" + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then + CFLAGS_DEBUG_SYMBOLS="-g1" + CXXFLAGS_DEBUG_SYMBOLSG="-g1" + fi + ;; + esac + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; + ossc ) + # + # Forte has different names for this with their C++ compiler... + # + C_FLAG_DEPS="-xMMD -xMF" + CXX_FLAG_DEPS="-xMMD -xMF" + +# Extra options used with HIGHEST +# +# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be +# done with care, there are some assumptions below that need to +# be understood about the use of pointers, and IEEE behavior. +# +# Use non-standard floating point mode (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fns" +# Do some simplification of floating point arithmetic (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fsimple" +# Use single precision floating point with 'float' +CC_HIGHEST="$CC_HIGHEST -fsingle" +# Assume memory references via basic pointer types do not alias +# (Source with excessing pointer casting and data access with mixed +# pointer types are not recommended) +CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" +# Use intrinsic or inline versions for math/std functions +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" +# Loop data dependency optimizations (need -xO3 or higher) +CC_HIGHEST="$CC_HIGHEST -xdepend" +# Pointer parameters to functions do not overlap +# (Similar to -xalias_level=basic usage, but less obvious sometimes. +# If you pass in multiple pointers to the same data, do not use this) +CC_HIGHEST="$CC_HIGHEST -xrestrict" +# Inline some library routines +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xlibmil" +# Use optimized math routines +# (If you expect perfect errno behavior, do not use this) +# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now +#CC_HIGHEST="$CC_HIGHEST -xlibmopt" + + case $LEGACY_OPENJDK_TARGET_CPU1 in + i586) + C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" + C_O_FLAG_HI="-xO4 -Wu,-O4~yz" + C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" + CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" + CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" + CXX_O_FLAG_NONE="" + ;; + sparc) + CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" + CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NONE="" + ;; + esac + + CFLAGS_DEBUG_SYMBOLS="-g -xs" + CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" + esac + ;; + CL ) + D_FLAG= + C_O_FLAG_HI="-O2" + C_O_FLAG_NORM="-O1" + C_O_FLAG_NONE="-Od" + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; +esac + +if test -z "$C_O_FLAG_HIGHEST"; then + C_O_FLAG_HIGHEST="$C_O_FLAG_HI" +fi + +if test -z "$CXX_O_FLAG_HIGHEST"; then + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" +fi + +AC_SUBST(C_O_FLAG_HIGHEST) +AC_SUBST(C_O_FLAG_HI) +AC_SUBST(C_O_FLAG_NORM) +AC_SUBST(C_O_FLAG_NONE) +AC_SUBST(CXX_O_FLAG_HIGHEST) +AC_SUBST(CXX_O_FLAG_HI) +AC_SUBST(CXX_O_FLAG_NORM) +AC_SUBST(CXX_O_FLAG_NONE) +AC_SUBST(C_FLAG_DEPS) +AC_SUBST(CXX_FLAG_DEPS) +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK], +[ + +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" + +############################################################################### +# +# Now setup the CFLAGS and LDFLAGS for the JDK build. +# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. +# +case $COMPILER_NAME in + gcc ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ + -pipe \ + -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" + case $OPENJDK_TARGET_CPU_ARCH in + arm ) + # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + ppc ) + # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing + ;; + * ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + esac + ;; + ossc ) + CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" + CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" + ;; + cl ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ + -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ + -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ + -DWIN32 -DIAL" + case $LEGACY_OPENJDK_TARGET_CPU1 in + i?86 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" + ;; + amd64 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" + ;; + esac + ;; +esac + +############################################################################### +# +# Cross-compile arch specific flags + +# +if test "x$JDK_VARIANT" = "xembedded"; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DJAVASE_EMBEDDED" +fi + +case $OPENJDK_TARGET_CPU_ARCH in +arm ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +ppc ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +esac + +############################################################################### + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" + +# The package path is used only on macosx? +PACKAGE_PATH=/opt/local +AC_SUBST(PACKAGE_PATH) + +# Sometimes we use a cpu dir (.../lib/amd64/server) +# Sometimes not (.../lib/server) +LIBARCHDIR="$LEGACY_OPENJDK_TARGET_CPU2/" +if test "x$ENDIAN" = xlittle; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" +fi +if test "x$OPENJDK_TARGET_OS" = xlinux; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" +fi +if test "x$OPENJDK_TARGET_OS" = xwindows; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" +fi +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" +fi +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" + LIBARCHDIR="" +fi +if test "x$OPENJDK_TARGET_OS" = xbsd; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" +fi +if test "x$DEBUG_LEVEL" = xrelease; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" +fi + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_OPENJDK_TARGET_CPU1\"' -D$LEGACY_OPENJDK_TARGET_CPU1" +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ + -I${JDK_OUTPUTDIR}/include \ + -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ + -I${JDK_TOPDIR}/src/share/javavm/export \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/javavm/export \ + -I${JDK_TOPDIR}/src/share/native/common \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/native/common" + +# The shared libraries are compiled using the picflag. +CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" +CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " + +# Executable flags +CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" +CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" + +# Now this is odd. The JDK native libraries have to link against libjvm.so +# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. +# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library +# is identical for client and server? Yes. Which is picked at runtime (client or server)? +# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following +# libraries will link to whatever is in memory. Yuck. +# +# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. +if test "x$COMPILER_TYPE" = xCL; then + LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" + if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then + LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" + fi + # TODO: make -debug optional "--disable-full-debug-symbols" + LDFLAGS_JDK="$LDFLAGS_JDK -debug" + LDFLAGS_JDKLIB="${LDFLAGS_JDK} -dll -libpath:${JDK_OUTPUTDIR}/lib" + LDFLAGS_JDKLIB_SUFFIX="" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then + LDFLAGS_STACK_SIZE=1048576 + else + LDFLAGS_STACK_SIZE=327680 + fi + LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" +else + # If this is a --hash-style=gnu system, use --hash-style=both, why? + HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` + if test -n "$HAS_GNU_HASH"; then + # And since we now know that the linker is gnu, then add -z defs, to forbid + # undefined symbols in object files. + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" + if test "x$DEBUG_LEVEL" == "xrelease"; then + # When building release libraries, tell the linker optimize them. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + fi + fi + + LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" + LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" + if test "x$COMPILER_NAME" = xossc; then + LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" + fi + + # Only the jli library is explicitly linked when the launchers are built. + # The libjvm is then dynamically loaded/linked by the launcher. + LDFLAGS_JDKEXE="${LDFLAGS_JDK}" + if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then + LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" + LDFLAGS_JDKEXE_SUFFIX="-ljli" + fi +fi + +# Adjust flags according to debug level. +case $DEBUG_LEVEL in + fastdebug ) + CFLAGS="$CFLAGS $D_FLAG" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; + slowdebug ) + CFLAGS="$CFLAGS $D_FLAG" + C_O_FLAG_HI="$C_O_FLAG_NONE" + C_O_FLAG_NORM="$C_O_FLAG_NONE" + CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" + CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; +esac + + +AC_SUBST(CFLAGS_JDKLIB) +AC_SUBST(CFLAGS_JDKEXE) + +AC_SUBST(CXXFLAGS_JDKLIB) +AC_SUBST(CXXFLAGS_JDKEXE) + +AC_SUBST(LDFLAGS_JDKLIB) +AC_SUBST(LDFLAGS_JDKEXE) +AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) +AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) +]) diff --git a/common/bin/compare-objects.sh b/common/bin/compare-objects.sh new file mode 100644 index 00000000000..ba01d5e4e93 --- /dev/null +++ b/common/bin/compare-objects.sh @@ -0,0 +1,235 @@ +#!/bin/bash +# +# Copyright (c) 2012, 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. +# + +# MANUAL +# +# ./common/bin/compare-objects.sh old_jdk_build_dir new_jdk_build_dir +# +# Compares object files +# + +if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then + echo "bash ./common/bin/compare-build.sh old_jdk_build_dir new_jdk_build_dir" + echo "" + echo "Compare object files" + echo "" + exit 10 +fi + +####### +# +# List of files (grep patterns) that are ignored +# +# 1) hotspot object files +IGNORE="-e hotspot" + +# 2) various build artifacts: sizer.32.o sizer.64.o dummyodbc.o +# these are produced during build and then e.g run to produce other data +# i.e not directly put into build => safe to ignore +IGNORE="${IGNORE} -e sizer.32.o -e sizer.64.o" +IGNORE="${IGNORE} -e dummyodbc.o" +IGNORE="${IGNORE} -e genSolarisConstants.o" +IGNORE="${IGNORE} -e genUnixConstants.o" + +OLD="$1" +NEW="$2" +shift; shift +PATTERN="$*" + +if [ -f $NEW/spec.sh ]; then + . $NEW/spec.sh +elif [ -f $NEW/../../spec.sh ]; then + . $NEW/../../spec.sh +elif [ -f $OLD/spec.sh ]; then + . $OLD/spec.sh +elif [ -f $OLD/../../spec.sh ]; then + . $OLD/../../spec.sh +else + echo "Unable to find spec.sh" + echo "Giving up" + exit 1 +fi + +export COMPARE_ROOT=/tmp/cimages.$USER/objects +mkdir -p $COMPARE_ROOT + +(${CD} $OLD && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.old +(${CD} $NEW && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.new + +# On macosx JobjC is build in both i386 and x86_64 variant (universial binary) +# but new build only builds the x86_64 +# Remove the 386 variants from comparison...to avoid "false" positives +${GREP} -v 'JObjC.dst/Objects-normal/i386' $COMPARE_ROOT/list.old > $COMPARE_ROOT/list.old.new +${CP} $COMPARE_ROOT/list.old $COMPARE_ROOT/list.old.full +${CP} $COMPARE_ROOT/list.old.new $COMPARE_ROOT/list.old + +findnew() { + arg_1=$1 + arg_2=$2 + + # special case 1 unpack-cmd => unpackexe + arg_1=`${ECHO} $arg_1 | ${SED} 's!unpack-cmd!unpackexe!g'` + arg_2=`${ECHO} $arg_2 | ${SED} 's!unpack-cmd!unpackexe!g'` + + # special case 2 /JObjC.dst/ => /libjobjc/ + arg_1=`${ECHO} $arg_1 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'` + arg_2=`${ECHO} $arg_2 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'` + + full=`${ECHO} $arg_1 | ${SED} 's!\.!\\\.!g'` + medium=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*/[^/]*\)!\1!'` + short=`${ECHO} $arg_2 | ${SED} 's!\.!\\\.!g'` + if [ "`${GREP} -c "/$full" $COMPARE_ROOT/list.new`" -eq 1 ] + then + ${ECHO} $NEW/$arg_1 + return + fi + + if [ "`${GREP} -c "$medium" $COMPARE_ROOT/list.new`" -eq 1 ] + then + ${GREP} "$medium" $COMPARE_ROOT/list.new + return + fi + + if [ "`${GREP} -c "/$short" $COMPARE_ROOT/list.new`" -eq 1 ] + then + ${GREP} "/$short" $COMPARE_ROOT/list.new + return + fi + + # old style has "dir" before obj{64} + dir=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*\)/obj[64]*.*!\1!g'` + if [ -n "$dir" -a "$dir" != "$arg_1" ] + then + if [ "`${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + + # Try with lib$dir/ + if [ "`${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + + # Try with $dir_objs + if [ "`${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + fi + + # check for some specifics... + for i in demo hotspot jobjc + do + if [ "`${ECHO} $full | ${GREP} -c $i`" -gt 0 ] + then + if [ "`${GREP} $i $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} $i $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + fi + done + + # check for specific demo + demo=`${ECHO} $arg_1 | ${SED} 's!.*/demo/jvmti/\([^/]*\)/.*!\1!g'` + if [ -n "$demo" -a "$dir" != "$demo" ] + then + if [ "`${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + fi + + return +} + +compare() { + old=$1 + new=$2 + ${DIFF} $old $new > /dev/null + res=$? + if [ $res -eq 0 ] + then + ${ECHO} 0 + return + fi + + # check if stripped objects gives equality + ${CP} $old $COMPARE_ROOT/`basename $old`.old + ${CP} $new $COMPARE_ROOT/`basename $old`.new + ${POST_STRIP_CMD} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null 2>&1 + ${DIFF} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null + res=$? + ${RM} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new + if [ $res -eq 0 ] + then + ${ECHO} S + return + fi + + name=`basename $1 | ${SED} 's!\.o!!'` + cntold=`strings $old | ${GREP} -c $name` + cntnew=`strings $new | ${GREP} -c $name` + + if [ $cntold -gt 0 -a $cntnew -gt 0 ] + then + ${ECHO} F + return + fi + + ${ECHO} 1 +} + +for F in `${CAT} $COMPARE_ROOT/list.old` +do + if [ "${IGNORE}" ] && [ "`${ECHO} $F | ${GREP} ${IGNORE}`" ] + then + # + # skip ignored files + # + continue; + fi + + if [ "$PATTERN" ] && [ `${ECHO} $F | ${GREP} -c $PATTERN` -eq 0 ] + then + continue; + fi + + f=`basename $F` + o=$OLD/$F + n=`findnew $F $f` + + if [ "$n" ] + then + n="$NEW/$n" + ${ECHO} `compare $o $n` : $f : $o : $n + else + ${ECHO} "- : $f : $o " + fi +done diff --git a/common/makefiles/IdlCompilation.gmk b/common/makefiles/IdlCompilation.gmk index 41758011ac9..799c7d6fbf9 100644 --- a/common/makefiles/IdlCompilation.gmk +++ b/common/makefiles/IdlCompilation.gmk @@ -56,10 +56,10 @@ define add_idl_package $4_OLDIMPLBASE_MSG:=with -oldImplBase endif $5 : $4 - mkdir -p $3/$$($4_TMPDIR) - rm -rf $3/$$($4_TMPDIR) - mkdir -p $(dir $5) - echo Compiling IDL $(patsubst $2/%,%,$4) + $(MKDIR) -p $3/$$($4_TMPDIR) + $(RM) -rf $3/$$($4_TMPDIR) + $(MKDIR) -p $(dir $5) + $(ECHO) Compiling IDL $(patsubst $2/%,%,$4) $8 -td $3/$$($4_TMPDIR) \ -i $2/org/omg/CORBA \ -i $2/org/omg/PortableInterceptor \ @@ -69,10 +69,10 @@ define add_idl_package $$($4_OLDIMPLBASE) \ $(PREFIXES) \ $4 - rm -f $$(addprefix $3/$$($4_TMPDIR)/,$6) - cp -rp $3/$$($4_TMPDIR)/* $3 - (cd $3/$$($4_TMPDIR); find . -type f | sed 's!\./!$3/!g' | awk '{ print $$$$1 ": $4" }' > $5) - rm -rf $3/$$($4_TMPDIR) + $(RM) -f $$(addprefix $3/$$($4_TMPDIR)/,$6) + $(CP) -rp $3/$$($4_TMPDIR)/* $3 + ($(CD) $3/$$($4_TMPDIR); find . -type f | sed 's!\./!$3/!g' | awk '{ print $$$$1 ": $4" }' > $5) + $(RM) -rf $3/$$($4_TMPDIR) endef define SetupIdlCompilation @@ -93,7 +93,7 @@ $(if $(10),$(error Internal makefile error: Too many arguments to SetupIdlCompil $1_SRC := $$(abspath $$($1_SRC)) $1_BIN := $$(abspath $$($1_BIN)) # Find all existing java files and existing class files. -$$(shell mkdir -p $$($1_SRC) $$($1_BIN)) +$$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN)) $1_SRCS := $$(shell find $$($1_SRC) -name "*.idl") $1_BINS := $$(shell find $$($1_BIN) -name "*.java") # Prepend the source/bin path to the filter expressions. diff --git a/common/makefiles/MakeHelpers.gmk b/common/makefiles/MakeHelpers.gmk new file mode 100644 index 00000000000..9747eb87ae6 --- /dev/null +++ b/common/makefiles/MakeHelpers.gmk @@ -0,0 +1,185 @@ +# +# Copyright (c) 2011, 2012, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +################################################################ +# +# This file contains helper functions for the top-level Makefile that does +# not depend on the spec.gmk file having been read. (The purpose of this +# file is ju to avoid cluttering the top-level Makefile.) +# +################################################################ + +ifndef _MAKEHELPERS_GMK +_MAKEHELPERS_GMK := 1 + +############################## +# Stuff to run at include time +############################## + +# Find out which variables were passed explicitely on the make command line. These +# will be passed on to sub-makes, overriding spec.gmk settings. +MAKE_ARGS=$(foreach var,$(subst =command,,$(filter %=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))),$(var)=$($(var))) + +list_alt_overrides_with_origins=$(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var))))) +list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins))) + +############################## +# Functions +############################## + +define fatal-error + # If the user specificed a "global" target (e.g. 'help'), do not exit but continue running + $$(if $$(findstring help,$$(MAKECMDGOALS)),,$$(error Cannot continue)) +endef + +define ParseLogLevel + ifeq ($$(origin VERBOSE),undefined) + # Setup logging according to LOG (but only if VERBOSE is not given) + ifeq ($$(LOG),) + # Set LOG to "warn" as default if not set (and no VERBOSE given) + LOG=warn + endif + ifeq ($$(LOG),warn) + VERBOSE=-s + else ifeq ($$(LOG),info) + VERBOSE= + else ifeq ($$(LOG),debug) + VERBOSE= + else ifeq ($$(LOG),trace) + VERBOSE=-d -p + else + $$(info Error: LOG must be one of: warn, info, debug or trace.) + $$(eval $$(call fatal-error)) + endif + else + ifneq ($$(LOG),) + # We have both a VERBOSE and a LOG argument. This is OK only if this is a repeated call by ourselves, + # but complain if this is the top-level make call. + ifeq ($$(MAKELEVEL),0) + $$(info Cannot use LOG=$$(LOG) and VERBOSE=$$(VERBOSE) at the same time. Choose one.) + $$(eval $$(call fatal-error)) + endif + endif + endif +endef + +# TODO: Fix duplication in MakeBase.gmk +define SetupLogging + ifneq ($(findstring $(LOG),debug trace),) + # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make + OLD_SHELL:=$$(SHELL) + SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x + endif +endef + +define ParseConfAndSpec + ifneq ($$(origin SPEC),undefined) + # We have been given a SPEC, check that it works out properly + ifeq ($$(wildcard $$(SPEC)),) + $$(info Cannot locate spec.gmk, given by SPEC=$$(SPEC)) + $$(eval $$(call fatal-error)) + endif + ifneq ($$(origin CONF),undefined) + # We also have a CONF argument. This is OK only if this is a repeated call by ourselves, + # but complain if this is the top-level make call. + ifeq ($$(MAKELEVEL),0) + $$(info Cannot use CONF=$$(CONF) and SPEC=$$(SPEC) at the same time. Choose one.) + $$(eval $$(call fatal-error)) + endif + endif + # ... OK, we're satisfied, we'll use this SPEC later on + else + # Find all spec.gmk files in the build output directory + output_dir=$$(root_dir)/build + all_spec_files=$$(wildcard $$(output_dir)/*/spec.gmk) + ifeq ($$(all_spec_files),) + $$(info No configurations found for $$(root_dir)! Please run configure to create a configuration.) + $$(eval $$(call fatal-error)) + endif + # Extract the configuration names from the path + all_confs=$$(patsubst %/spec.gmk,%,$$(patsubst $$(output_dir)/%,%,$$(all_spec_files))) + + ifneq ($$(origin CONF),undefined) + # User have given a CONF= argument. + ifeq ($$(CONF),) + # If given CONF=, match all configurations + matching_confs=$$(strip $$(all_confs)) + else + # Otherwise select those that contain the given CONF string + matching_confs=$$(strip $$(foreach var,$$(all_confs),$$(if $$(findstring $$(CONF),$$(var)),$$(var)))) + endif + ifeq ($$(matching_confs),) + $$(info No configurations found matching CONF=$$(CONF)) + $$(info Available configurations:) + $$(foreach var,$$(all_confs),$$(info * $$(var))) + $$(eval $$(call fatal-error)) + else + ifeq ($$(words $$(matching_confs)),1) + $$(info Building '$$(matching_confs)' (matching CONF=$$(CONF))) + else + $$(info Building the following configurations (matching CONF=$$(CONF)):) + $$(foreach var,$$(matching_confs),$$(info * $$(var))) + endif + endif + + # Create a SPEC definition. This will contain the path to one or more spec.gmk files. + SPEC=$$(addsuffix /spec.gmk,$$(addprefix $$(output_dir)/,$$(matching_confs))) + else + # No CONF or SPEC given, check the available configurations + ifneq ($$(words $$(all_spec_files)),1) + $$(info No CONF or SPEC given, but more than one spec.gmk found in $$(output_dir).) + $$(info Available configurations:) + $$(foreach var,$$(all_confs),$$(info * $$(var))) + $$(info Please retry building with CONF= or SPEC=) + $$(eval $$(call fatal-error)) + endif + + # We found exactly one configuration, use it + SPEC=$$(strip $$(all_spec_files)) + endif + endif +endef + +define CheckEnvironment + # Find all environment or command line variables that begin with ALT. + $(if $(list_alt_overrides), + @$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n" + @$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n" + @$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n\n" + ) +endef + +define PrintStartMessage + $(if $(VERBOSE),,@$(ECHO) Running make as $(MAKE) $(MFLAGS) $(MAKE_ARGS)) + $(call CheckEnvironment) + @$(ECHO) "Building OpenJDK for target $(if $(MAKECMDGOALS),'$(MAKECMDGOALS)','all') in configuration '$(CONF_NAME)'" +endef + +define PrintEndMessage + @$(ECHO) "Finished building OpenJDK for target '$@'" + $(call CheckEnvironment) +endef + +endif # _MAKEHELPERS_GMK diff --git a/common/makefiles/NativeCompilation.gmk b/common/makefiles/NativeCompilation.gmk index d259459cf8f..6818a501226 100644 --- a/common/makefiles/NativeCompilation.gmk +++ b/common/makefiles/NativeCompilation.gmk @@ -451,13 +451,14 @@ define SetupNativeCompilation $(RM) $$@ $(FIX_EMPTY_SEC_HDR_FLAGS) $$< $(OBJCOPY) --only-keep-debug $$< $$@ - $(ADD_GNU_DEBUGLINK) $$@ $$< + $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@F) $$< else # not solaris $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) $(RM) $$@ $(OBJCOPY) --only-keep-debug $$< $$@ - $(OBJCOPY) --add-gnu-debuglink=$$@ $$< - endif + $(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$< + endif # Touch to not retrigger rule on rebuild + $(TOUCH) $$@ ifeq ($(ZIP_DEBUGINFO_FILES), 1) $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz @@ -526,13 +527,14 @@ define SetupNativeCompilation $(RM) $$@ $(FIX_EMPTY_SEC_HDR_FLAGS) $$< $(OBJCOPY) --only-keep-debug $$< $$@ - $(ADD_GNU_DEBUGLINK) $$@ $$< + $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@F) $$< else # not solaris $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) $(RM) $$@ $(OBJCOPY) --only-keep-debug $$< $$@ - $(OBJCOPY) --add-gnu-debuglink=$$@ $$< + $(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$< endif + $(TOUCH) $$@ ifeq ($(ZIP_DEBUGINFO_FILES), 1) $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).diz diff --git a/common/makefiles/RMICompilation.gmk b/common/makefiles/RMICompilation.gmk new file mode 100644 index 00000000000..65ba9e621f9 --- /dev/null +++ b/common/makefiles/RMICompilation.gmk @@ -0,0 +1,104 @@ +# +# Copyright (c) 2011, 2012 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +define SetupRMICompilation + # param 1 is a name for a variable to depend on. + # param 2 and up are named args. + # CLASSES:=List of classes to generate stubs for + # CLASSES_DIR:=Directory where to look for classes + # 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 + $(if $2,$1_$(strip $2)) + $(if $3,$1_$(strip $3)) + $(if $4,$1_$(strip $4)) + $(if $5,$1_$(strip $5)) + $(if $6,$1_$(strip $6)) + $(if $7,$1_$(strip $7)) + $(if $8,$1_$(strip $8)) + $(if $9,$1_$(strip $9)) + $(if $(10),$(error Internal makefile error: Too many arguments to SetupRMICompilation, please update RMICompilation.gmk)) + + + $1_DEP_FILE := $$($1_STUB_CLASSES_DIR)/$1_rmic + + $1_CLASSES_SLASH := $$(subst .,/,$$($1_CLASSES)) + $1_CLASS_FILES := $$(addprefix $$($1_CLASSES_DIR)/,$$(addsuffix .class,$$($1_CLASSES_SLASH))) + $1_STUB_FILES := $$(addprefix $$($1_STUB_CLASSES_DIR)/,$$(addsuffix _Stub.class,$$($1_CLASSES_SLASH))) + $1_TARGETS := $$($1_STUB_FILES) + $1_ARGS := + ifneq (,$$($1_RUN_V11)) + $1_SKEL_FILES := $$(addprefix $$($1_STUB_CLASSES_DIR)/,$$(addsuffix _Skel.class,$$($1_CLASSES_SLASH))) + $1_TARGETS += $$($1_SKEL_FILES) + $1_ARGS += -v1.1 + endif + ifneq (,$$($1_RUN_V12)) + $1_ARGS += -v1.2 + endif + + $1_TIE_BASE_FILES := $$(foreach f,$$($1_CLASSES_SLASH),$$(dir $$f)_$$(notdir $$f)) + $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 + endif + ifneq (,$$($1_RUN_IIOP_STDPKG)) + $1_TARGETS += $$($1_TIE_STDPKG_FILES) + $1_ARGS2 := -iiop -standardPackage + endif + + ifneq (,$$($1_KEEP_GENERATED)) + $1_ARGS += -keepgenerated + $1_TARGETS += $$(subst .class,.java,$$($1_TARGETS)) + endif + + $1_DOLLAR_SAFE_CLASSES := $$(subst $$$$,\$$$$,$$($1_CLASSES)) + + $$($1_TARGETS): $$($1_DEP_FILE) $$($1_CLASS_FILES) + + $$($1_DEP_FILE): $$($1_CLASS_FILES) + $(MKDIR) -p $$($1_STUB_CLASSES_DIR) + if [ "x$$($1_ARGS)" != "x" ]; then \ + $(ECHO) Running rmic $$($1_ARGS) for $$($1_DOLLAR_SAFE_CLASSES) &&\ + $(RMIC) $$($1_ARGS) -classpath "$$($1_CLASSES_DIR)" \ + -d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES);\ + fi; + if [ "x$$($1_ARGS2)" != "x" ]; then \ + $(ECHO) Running rmic $$($1_ARGS2) for $$($1_DOLLAR_SAFE_CLASSES) &&\ + $(RMIC) $$($1_ARGS2) -classpath "$$($1_CLASSES_DIR)" \ + -d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES);\ + fi; + + + $1 := $$($1_TARGETS) + + # By marking as secondary, this "touch" file doesn't need to be touched and will never exist. + .SECONDARY: $$($1_DEP_FILE) +endef From 0bf6babbb7ef31915687068b089b0749f76889a2 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 5 Jul 2012 18:43:57 -0700 Subject: [PATCH 63/83] Added tag jdk8-b46 for changeset 8e117f8b08eb --- .hgtags-top-repo | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags-top-repo b/.hgtags-top-repo index dc560c35729..8725f6d1dc1 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -167,3 +167,4 @@ a2b2d435f1d275fa8010774c653197c64e326d3a jdk8-b40 661c9aae602bbd9766d12590800c90f1edd1d8dd jdk8-b43 e4f81a817447c3a4f6868f083c81c2fb1b15d44c jdk8-b44 633f2378c904c92bb922a6e19e9f62fe8eac14af jdk8-b45 +27fa766a2298ba8347dc198f0cf85ba6618e17db jdk8-b46 From a18ea33408837f4187df54b3ec7b5798aa85d521 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 5 Jul 2012 18:44:04 -0700 Subject: [PATCH 64/83] Added tag jdk8-b46 for changeset 3b78e26c0c38 --- corba/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/corba/.hgtags b/corba/.hgtags index d145e022f27..796079e90ac 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -167,3 +167,4 @@ b8cbfb31139f820e5e094ba71449e58159fbe22e jdk8-b38 cd879aff5d3cc1f58829aab3116880aa19525b78 jdk8-b43 439d9bf8e4ff204cc89c9974c1515a508b2cc6ff jdk8-b44 747dad9e9d37d244a5c765a1afe9194f7ddae118 jdk8-b45 +30141e598d72a6146126cb86b034ed6d0bd191b3 jdk8-b46 From 21a3abc4d4240983593ace71dab613b672697ff6 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 5 Jul 2012 18:44:09 -0700 Subject: [PATCH 65/83] Added tag jdk8-b46 for changeset 7604568cf818 --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 8ab00c4f0be..d850f6b9e1c 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -258,3 +258,4 @@ e77b8e0ed1f84e3e268239e276c7ab64fa573baa jdk8-b43 831e5c76a20af18f3c08c5a95ed31be0e128a010 jdk8-b44 9d5f20961bc5846fa8d098d534effafbbdae0a58 jdk8-b45 40e5a3f2907ed02b335c7caa8ecf068cc801380d hs24-b15 +cf37a594c38db2ea926954154636f9f81da2e032 jdk8-b46 From cb0f1fed69020603613d4d6e843d2e174ae49098 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 5 Jul 2012 18:44:22 -0700 Subject: [PATCH 66/83] Added tag jdk8-b46 for changeset b5166f281c42 --- jaxp/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxp/.hgtags b/jaxp/.hgtags index 93f3d6587f1..a131128f979 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -167,3 +167,4 @@ f95fdbe525c88ef0d57dc1390be6582a8af5e07c jdk8-b39 eff4ece9c8bc43b3ce2b3758574c4c20147f0689 jdk8-b43 0b3f3a4ce13930430b32b616a717dfc7fe385b28 jdk8-b44 57476f66e13c55eea2f2fe2b858369a4c64b9936 jdk8-b45 +300f45e990643af230d6cca39477ff62c44a9a54 jdk8-b46 From b769ce017f063a25b0031e0300e64dce0fe506a2 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 5 Jul 2012 18:44:26 -0700 Subject: [PATCH 67/83] Added tag jdk8-b46 for changeset a454fca4fd87 --- jaxws/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxws/.hgtags b/jaxws/.hgtags index 0e5917c7e71..b4afc8cdd27 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -167,3 +167,4 @@ f2072b164b0519227833a2994f78e3988ee67827 jdk8-b41 f00c12994562c2f68d348a7c3e829374a89294e2 jdk8-b43 f6a417540ef124c9b4123d07da5e26f2ab909949 jdk8-b44 e80ac58b5ba904f24e125c742c30d0d740f05f86 jdk8-b45 +ae368a83c2404b65c9e38c65e2aa081f2201ca74 jdk8-b46 From c7a1cb0da06969ead26218f7ba02dd446af37b8d Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 5 Jul 2012 18:44:32 -0700 Subject: [PATCH 68/83] Added tag jdk8-b46 for changeset c35f7a2acbec --- jdk/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jdk/.hgtags b/jdk/.hgtags index ebc63ad4733..ed858014f63 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -167,3 +167,4 @@ cf5c1f6fbc5ba14163fe0ef8eb8601b33f951372 jdk8-b42 b3246687c3695dff6f461bb407f9db88f7d072e7 jdk8-b43 db471a7af03168e4441c245b1d9976f720a7cb77 jdk8-b44 b92353a01aa049bc508fc56f0347d5934b7c4390 jdk8-b45 +8d2ed9d58453c8049715a72a6d26b6b66b37a94c jdk8-b46 From e6c547e0262f8487bd246bfd940d51cc9ab6f982 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 5 Jul 2012 18:44:44 -0700 Subject: [PATCH 69/83] Added tag jdk8-b46 for changeset b7b7fb648bf6 --- langtools/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/langtools/.hgtags b/langtools/.hgtags index 383d61393a4..13843bea9da 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -167,3 +167,4 @@ a9f547c218d957306dfc0cdd710be041bb62a555 jdk8-b39 f8c64d835b2806293b8e924b44f0e32b20657ed3 jdk8-b43 59cbead12ff46dbb397120bd26635bcd7d41ff21 jdk8-b44 e111e4587ccada8eb93f72e834e378c76256f4b7 jdk8-b45 +4ca5994971724731233735f055f33d4936fd11d3 jdk8-b46 From 13c689d9c3f87741d5adf57c319d0a43953dd556 Mon Sep 17 00:00:00 2001 From: Frederic Parain Date: Mon, 9 Jul 2012 01:28:37 -0700 Subject: [PATCH 70/83] 6294277: java -Xdebug crashes on SourceDebugExtension attribute larger than 64K Reviewed-by: sspitsyn, dholmes, coleenp, kamg --- .../jvm/hotspot/jdi/ReferenceTypeImpl.java | 5 +- .../sun/jvm/hotspot/oops/InstanceKlass.java | 2 +- .../share/vm/classfile/classFileParser.cpp | 7 +- hotspot/src/share/vm/oops/instanceKlass.cpp | 23 ++- hotspot/src/share/vm/oops/instanceKlass.hpp | 8 +- .../src/share/vm/oops/instanceKlassKlass.cpp | 5 +- .../vm/prims/jvmtiClassFileReconstituter.cpp | 10 +- hotspot/src/share/vm/prims/jvmtiEnv.cpp | 13 +- .../share/vm/prims/jvmtiRedefineClasses.cpp | 6 +- hotspot/src/share/vm/runtime/vmStructs.cpp | 2 +- .../runtime/6294277/SourceDebugExtension.java | 135 ++++++++++++++++++ hotspot/test/runtime/6294277/Test6294277.sh | 92 ++++++++++++ 12 files changed, 273 insertions(+), 35 deletions(-) create mode 100644 hotspot/test/runtime/6294277/SourceDebugExtension.java create mode 100644 hotspot/test/runtime/6294277/Test6294277.sh diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java index d28bca18d2e..662f18e089e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, 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 @@ -688,8 +688,7 @@ implements ReferenceType { if (sde == null) { String extension = null; if (saKlass instanceof InstanceKlass) { - Symbol sdeSym = ((InstanceKlass)saKlass).getSourceDebugExtension(); - extension = (sdeSym != null)? sdeSym.asString() : null; + extension = ((InstanceKlass)saKlass).getSourceDebugExtension(); } if (extension == null) { sde = NO_SDE_INFO_MARK; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java index 9536da39838..acd975206f5 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java @@ -342,7 +342,7 @@ public class InstanceKlass extends Klass { public Oop getProtectionDomain() { return protectionDomain.getValue(this); } public ObjArray getSigners() { return (ObjArray) signers.getValue(this); } public Symbol getSourceFileName() { return getSymbol(sourceFileName); } - public Symbol getSourceDebugExtension(){ return getSymbol(sourceDebugExtension); } + public String getSourceDebugExtension(){ return CStringUtilities.getString(sourceDebugExtension.getValue(getHandle())); } public TypeArray getInnerClasses() { return (TypeArray) innerClasses.getValue(this); } public long getNonstaticFieldSize() { return nonstaticFieldSize.getValue(this); } public long getStaticOopFieldCount() { return staticOopFieldCount.getValue(this); } diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp index 1be1c7bf19c..b2cec5375fa 100644 --- a/hotspot/src/share/vm/classfile/classFileParser.cpp +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp @@ -2337,12 +2337,7 @@ void ClassFileParser::parse_classfile_source_debug_extension_attribute(constantP // Don't bother storing it if there is no way to retrieve it if (JvmtiExport::can_get_source_debug_extension()) { - // Optimistically assume that only 1 byte UTF format is used - // (common case) - TempNewSymbol sde_symbol = SymbolTable::new_symbol((const char*)sde_buffer, length, CHECK); - k->set_source_debug_extension(sde_symbol); - // Note that set_source_debug_extension() increments the reference count - // for its copy of the Symbol*, so use a TempNewSymbol here. + k->set_source_debug_extension((char*)sde_buffer, length); } // Got utf8 string, set stream position forward cfs->skip_u1(length, CHECK); diff --git a/hotspot/src/share/vm/oops/instanceKlass.cpp b/hotspot/src/share/vm/oops/instanceKlass.cpp index b742889b66b..0c0fd34b6b2 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceKlass.cpp @@ -847,7 +847,6 @@ void instanceKlass::shared_symbols_iterate(SymbolClosure* closure) { Klass::shared_symbols_iterate(closure); closure->do_symbol(&_generic_signature); closure->do_symbol(&_source_file_name); - closure->do_symbol(&_source_debug_extension); for (JavaFieldStream fs(this); !fs.done(); fs.next()) { int name_index = fs.name_index(); @@ -1944,9 +1943,10 @@ void instanceKlass::release_C_heap_structures() { // class can't be referenced anymore). if (_array_name != NULL) _array_name->decrement_refcount(); if (_source_file_name != NULL) _source_file_name->decrement_refcount(); - if (_source_debug_extension != NULL) _source_debug_extension->decrement_refcount(); // walk constant pool and decrement symbol reference counts _constants->unreference_symbols(); + + if (_source_debug_extension != NULL) FREE_C_HEAP_ARRAY(char, _source_debug_extension, mtClass); } void instanceKlass::set_source_file_name(Symbol* n) { @@ -1954,9 +1954,22 @@ void instanceKlass::set_source_file_name(Symbol* n) { if (_source_file_name != NULL) _source_file_name->increment_refcount(); } -void instanceKlass::set_source_debug_extension(Symbol* n) { - _source_debug_extension = n; - if (_source_debug_extension != NULL) _source_debug_extension->increment_refcount(); +void instanceKlass::set_source_debug_extension(char* array, int length) { + if (array == NULL) { + _source_debug_extension = NULL; + } else { + // Adding one to the attribute length in order to store a null terminator + // character could cause an overflow because the attribute length is + // already coded with an u4 in the classfile, but in practice, it's + // unlikely to happen. + assert((length+1) > length, "Overflow checking"); + char* sde = NEW_C_HEAP_ARRAY(char, (length + 1), mtClass); + for (int i = 0; i < length; i++) { + sde[i] = array[i]; + } + sde[length] = '\0'; + _source_debug_extension = sde; + } } address instanceKlass::static_field_addr(int offset) { diff --git a/hotspot/src/share/vm/oops/instanceKlass.hpp b/hotspot/src/share/vm/oops/instanceKlass.hpp index 93e804c281e..3c24b3f69a1 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.hpp +++ b/hotspot/src/share/vm/oops/instanceKlass.hpp @@ -226,7 +226,9 @@ class instanceKlass: public Klass { // Name of source file containing this klass, NULL if not specified. Symbol* _source_file_name; // the source debug extension for this klass, NULL if not specified. - Symbol* _source_debug_extension; + // Specified as UTF-8 string without terminating zero byte in the classfile, + // it is stored in the instanceklass as a NULL-terminated UTF-8 string + char* _source_debug_extension; // Generic signature, or null if none. Symbol* _generic_signature; // Array name derived from this class which needs unreferencing @@ -542,8 +544,8 @@ class instanceKlass: public Klass { void set_major_version(u2 major_version) { _major_version = major_version; } // source debug extension - Symbol* source_debug_extension() const { return _source_debug_extension; } - void set_source_debug_extension(Symbol* n); + char* source_debug_extension() const { return _source_debug_extension; } + void set_source_debug_extension(char* array, int length); // symbol unloading support (refcount already added) Symbol* array_name() { return _array_name; } diff --git a/hotspot/src/share/vm/oops/instanceKlassKlass.cpp b/hotspot/src/share/vm/oops/instanceKlassKlass.cpp index 12ea2234451..d6ccd423f78 100644 --- a/hotspot/src/share/vm/oops/instanceKlassKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceKlassKlass.cpp @@ -421,8 +421,7 @@ instanceKlassKlass::allocate_instance_klass(Symbol* name, int vtable_len, int it ik->set_protection_domain(NULL); ik->set_signers(NULL); ik->set_source_file_name(NULL); - ik->set_source_debug_extension(NULL); - ik->set_source_debug_extension(NULL); + ik->set_source_debug_extension(NULL, 0); ik->set_array_name(NULL); ik->set_inner_classes(NULL); ik->set_static_oop_field_count(0); @@ -531,7 +530,7 @@ void instanceKlassKlass::oop_print_on(oop obj, outputStream* st) { } if (ik->source_debug_extension() != NULL) { st->print(BULLET"source debug extension: "); - ik->source_debug_extension()->print_value_on(st); + st->print_cr("%s", ik->source_debug_extension()); st->cr(); } diff --git a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp index d7dfea5a99e..60a801213be 100644 --- a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp +++ b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp @@ -268,14 +268,18 @@ void JvmtiClassFileReconstituter::write_source_file_attribute() { // JSR45| SourceDebugExtension_attribute { // JSR45| u2 attribute_name_index; // JSR45| u4 attribute_length; -// JSR45| u2 sourcefile_index; +// JSR45| u1 debug_extension[attribute_length]; // JSR45| } void JvmtiClassFileReconstituter::write_source_debug_extension_attribute() { assert(ikh()->source_debug_extension() != NULL, "caller must check"); write_attribute_name_index("SourceDebugExtension"); - write_u4(2); // always length 2 - write_u2(symbol_to_cpool_index(ikh()->source_debug_extension())); + int len = (int)strlen(ikh()->source_debug_extension()); + write_u4(len); + u1* ext = (u1*)ikh()->source_debug_extension(); + for (int i=0; ioop_is_instance()) { return JVMTI_ERROR_ABSENT_INFORMATION; } - Symbol* sdeOop = instanceKlass::cast(k)->source_debug_extension(); - NULL_CHECK(sdeOop, JVMTI_ERROR_ABSENT_INFORMATION); + char* sde = instanceKlass::cast(k)->source_debug_extension(); + NULL_CHECK(sde, JVMTI_ERROR_ABSENT_INFORMATION); { - JavaThread* current_thread = JavaThread::current(); - ResourceMark rm(current_thread); - const char* sdecp = (const char*) sdeOop->as_C_string(); - *source_debug_extension_ptr = (char *) jvmtiMalloc(strlen(sdecp)+1); - strcpy(*source_debug_extension_ptr, sdecp); + *source_debug_extension_ptr = (char *) jvmtiMalloc(strlen(sde)+1); + strcpy(*source_debug_extension_ptr, sde); } } diff --git a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp index 0eb188a6371..dbab30e4329 100644 --- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, 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 @@ -3236,7 +3236,9 @@ void VM_RedefineClasses::redefine_single_class(jclass the_jclass, // Copy the "source debug extension" attribute from new class version the_class->set_source_debug_extension( - scratch_class->source_debug_extension()); + scratch_class->source_debug_extension(), + scratch_class->source_debug_extension() == NULL ? 0 : + (int)strlen(scratch_class->source_debug_extension())); // Use of javac -g could be different in the old and the new if (scratch_class->access_flags().has_localvariable_table() != diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index e1021cd19ad..fbda7f8ed0f 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -308,7 +308,7 @@ typedef TwoOopHashtable SymbolTwoOopHashtable; nonstatic_field(instanceKlass, _protection_domain, oop) \ nonstatic_field(instanceKlass, _signers, objArrayOop) \ nonstatic_field(instanceKlass, _source_file_name, Symbol*) \ - nonstatic_field(instanceKlass, _source_debug_extension, Symbol*) \ + nonstatic_field(instanceKlass, _source_debug_extension, char*) \ nonstatic_field(instanceKlass, _inner_classes, typeArrayOop) \ nonstatic_field(instanceKlass, _nonstatic_field_size, int) \ nonstatic_field(instanceKlass, _static_field_size, int) \ diff --git a/hotspot/test/runtime/6294277/SourceDebugExtension.java b/hotspot/test/runtime/6294277/SourceDebugExtension.java new file mode 100644 index 00000000000..70b12969ce1 --- /dev/null +++ b/hotspot/test/runtime/6294277/SourceDebugExtension.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2012, 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 + * @bug 6294277 + * @summary java -Xdebug crashes on SourceDebugExtension attribute larger than 64K + */ +import java.io.*; + +public class SourceDebugExtension extends ClassLoader +{ + static final int attrSize = 68000; + static byte[] header = { +(byte)0xca, (byte)0xfe, (byte)0xba, (byte)0xbe, (byte)0x00, (byte)0x00, (byte)0x00, +(byte)0x32, (byte)0x00, (byte)0x1e, (byte)0x0a, (byte)0x00, (byte)0x06, (byte)0x00, +(byte)0x0f, (byte)0x09, (byte)0x00, (byte)0x10, (byte)0x00, (byte)0x11, (byte)0x08, +(byte)0x00, (byte)0x12, (byte)0x0a, (byte)0x00, (byte)0x13, (byte)0x00, (byte)0x14, +(byte)0x07, (byte)0x00, (byte)0x15, (byte)0x07, (byte)0x00, (byte)0x16, (byte)0x01, +(byte)0x00, (byte)0x06, (byte)0x3c, (byte)0x69, (byte)0x6e, (byte)0x69, (byte)0x74, +(byte)0x3e, (byte)0x01, (byte)0x00, (byte)0x03, (byte)0x28, (byte)0x29, (byte)0x56, +(byte)0x01, (byte)0x00, (byte)0x04, (byte)0x43, (byte)0x6f, (byte)0x64, (byte)0x65, +(byte)0x01, (byte)0x00, (byte)0x0f, (byte)0x4c, (byte)0x69, (byte)0x6e, (byte)0x65, +(byte)0x4e, (byte)0x75, (byte)0x6d, (byte)0x62, (byte)0x65, (byte)0x72, (byte)0x54, +(byte)0x61, (byte)0x62, (byte)0x6c, (byte)0x65, (byte)0x01, (byte)0x00, (byte)0x04, +(byte)0x6d, (byte)0x61, (byte)0x69, (byte)0x6e, (byte)0x01, (byte)0x00, (byte)0x16, +(byte)0x28, (byte)0x5b, (byte)0x4c, (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61, +(byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67, (byte)0x2f, (byte)0x53, +(byte)0x74, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x67, (byte)0x3b, (byte)0x29, +(byte)0x56, (byte)0x01, (byte)0x00, (byte)0x0a, (byte)0x53, (byte)0x6f, (byte)0x75, +(byte)0x72, (byte)0x63, (byte)0x65, (byte)0x46, (byte)0x69, (byte)0x6c, (byte)0x65, +(byte)0x01, (byte)0x00, (byte)0x0d, (byte)0x54, (byte)0x65, (byte)0x73, (byte)0x74, +(byte)0x50, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x2e, (byte)0x6a, (byte)0x61, +(byte)0x76, (byte)0x61, (byte)0x0c, (byte)0x00, (byte)0x07, (byte)0x00, (byte)0x08, +(byte)0x07, (byte)0x00, (byte)0x17, (byte)0x0c, (byte)0x00, (byte)0x18, (byte)0x00, +(byte)0x19, (byte)0x01, (byte)0x00, (byte)0x34, (byte)0x54, (byte)0x65, (byte)0x73, +(byte)0x74, (byte)0x20, (byte)0x70, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x72, +(byte)0x61, (byte)0x6d, (byte)0x20, (byte)0x66, (byte)0x6f, (byte)0x72, (byte)0x20, +(byte)0x62, (byte)0x69, (byte)0x67, (byte)0x20, (byte)0x53, (byte)0x6f, (byte)0x75, +(byte)0x72, (byte)0x63, (byte)0x65, (byte)0x44, (byte)0x65, (byte)0x62, (byte)0x75, +(byte)0x67, (byte)0x45, (byte)0x78, (byte)0x74, (byte)0x65, (byte)0x6e, (byte)0x73, +(byte)0x69, (byte)0x6f, (byte)0x6e, (byte)0x20, (byte)0x61, (byte)0x74, (byte)0x74, +(byte)0x72, (byte)0x69, (byte)0x62, (byte)0x75, (byte)0x74, (byte)0x65, (byte)0x73, +(byte)0x07, (byte)0x00, (byte)0x1a, (byte)0x0c, (byte)0x00, (byte)0x1b, (byte)0x00, +(byte)0x1c, (byte)0x01, (byte)0x00, (byte)0x08, (byte)0x54, (byte)0x65, (byte)0x73, +(byte)0x74, (byte)0x50, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x01, (byte)0x00, +(byte)0x10, (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, +(byte)0x61, (byte)0x6e, (byte)0x67, (byte)0x2f, (byte)0x4f, (byte)0x62, (byte)0x6a, +(byte)0x65, (byte)0x63, (byte)0x74, (byte)0x01, (byte)0x00, (byte)0x10, (byte)0x6a, +(byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, +(byte)0x67, (byte)0x2f, (byte)0x53, (byte)0x79, (byte)0x73, (byte)0x74, (byte)0x65, +(byte)0x6d, (byte)0x01, (byte)0x00, (byte)0x03, (byte)0x6f, (byte)0x75, (byte)0x74, +(byte)0x01, (byte)0x00, (byte)0x15, (byte)0x4c, (byte)0x6a, (byte)0x61, (byte)0x76, +(byte)0x61, (byte)0x2f, (byte)0x69, (byte)0x6f, (byte)0x2f, (byte)0x50, (byte)0x72, +(byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x53, (byte)0x74, (byte)0x72, (byte)0x65, +(byte)0x61, (byte)0x6d, (byte)0x3b, (byte)0x01, (byte)0x00, (byte)0x13, (byte)0x6a, +(byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x69, (byte)0x6f, (byte)0x2f, +(byte)0x50, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x53, (byte)0x74, +(byte)0x72, (byte)0x65, (byte)0x61, (byte)0x6d, (byte)0x01, (byte)0x00, (byte)0x07, +(byte)0x70, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x6c, (byte)0x6e, +(byte)0x01, (byte)0x00, (byte)0x15, (byte)0x28, (byte)0x4c, (byte)0x6a, (byte)0x61, +(byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67, +(byte)0x2f, (byte)0x53, (byte)0x74, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x67, +(byte)0x3b, (byte)0x29, (byte)0x56, (byte)0x01, (byte)0x00, (byte)0x14, (byte)0x53, +(byte)0x6f, (byte)0x75, (byte)0x72, (byte)0x63, (byte)0x65, (byte)0x44, (byte)0x65, +(byte)0x62, (byte)0x75, (byte)0x67, (byte)0x45, (byte)0x78, (byte)0x74, (byte)0x65, +(byte)0x6e, (byte)0x73, (byte)0x69, (byte)0x6f, (byte)0x6e, (byte)0x00, (byte)0x21, +(byte)0x00, (byte)0x05, (byte)0x00, (byte)0x06, (byte)0x00, (byte)0x00, (byte)0x00, +(byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x07, +(byte)0x00, (byte)0x08, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, (byte)0x00, +(byte)0x00, (byte)0x00, (byte)0x1d, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x01, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x05, (byte)0x2a, (byte)0xb7, (byte)0x00, +(byte)0x01, (byte)0xb1, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, +(byte)0x0a, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x06, (byte)0x00, (byte)0x01, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, (byte)0x00, +(byte)0x0b, (byte)0x00, (byte)0x0c, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x25, (byte)0x00, (byte)0x02, (byte)0x00, +(byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x09, (byte)0xb2, (byte)0x00, +(byte)0x02, (byte)0x12, (byte)0x03, (byte)0xb6, (byte)0x00, (byte)0x04, (byte)0xb1, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x0a, (byte)0x00, +(byte)0x00, (byte)0x00, (byte)0x0a, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, +(byte)0x00, (byte)0x03, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x04, (byte)0x00, +(byte)0x02, (byte)0x00, (byte)0x0d, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, +(byte)0x00, (byte)0x0e, (byte)0x00, (byte)0x1d, (byte)0x00, (byte)0x01, (byte)0x09, +(byte)0xa0 + }; + + public static void main(String[] args) throws Exception + { + try { + SourceDebugExtension loader = new SourceDebugExtension(); + /* The test program creates a class file from the header + * stored above and adding the content of a SourceDebugExtension + * attribute made of the character 0x02 repeated 68000 times. + * This attribute doesn't follow the syntax specified in JSR 45 + * but it's fine because this test just checks that the JVM is + * able to load a class file with a SourceDebugExtension + * attribute bigger than 64KB. The JVM doesn't try to + * parse the content of the attribute, this work is performed + * by the SA or external tools. + */ + byte[] buf = new byte[header.length + attrSize]; + for(int i=0; i test.out 2>&1 & + +P_PID=$! + +sleep 60 +STATUS=1 + +grep "Test PASSES" test.out > ${NULL} +if [ $? = 0 ]; then + cat test.out + STATUS=0 +fi + +exit $STATUS From e2fc7f742cf07dffb0a9c65c6cccfb07068677a0 Mon Sep 17 00:00:00 2001 From: Vlaidmir Ivanov Date: Wed, 11 Jul 2012 14:50:30 -0700 Subject: [PATCH 71/83] 7181658: CTW: assert(t->meet(t0) == t) failed: Not monotonic Use uncast node equivalence checks in CmpUNode::sub. Reviewed-by: kvn, twisti --- hotspot/src/share/vm/opto/subnode.cpp | 14 ++++++++------ hotspot/src/share/vm/opto/subnode.hpp | 1 + 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/hotspot/src/share/vm/opto/subnode.cpp b/hotspot/src/share/vm/opto/subnode.cpp index 4fbf5435394..02a6a64953c 100644 --- a/hotspot/src/share/vm/opto/subnode.cpp +++ b/hotspot/src/share/vm/opto/subnode.cpp @@ -554,9 +554,7 @@ const Type *CmpUNode::sub( const Type *t1, const Type *t2 ) const { return TypeInt::CC_GE; } else if (hi0 <= lo1) { // Check for special case in Hashtable::get. (See below.) - if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && - in(1)->Opcode() == Op_ModI && - in(1)->in(2) == in(2) ) + if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && is_index_range_check()) return TypeInt::CC_LT; return TypeInt::CC_LE; } @@ -567,13 +565,17 @@ const Type *CmpUNode::sub( const Type *t1, const Type *t2 ) const { // to be positive. // (This is a gross hack, since the sub method never // looks at the structure of the node in any other case.) - if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && - in(1)->Opcode() == Op_ModI && - in(1)->in(2)->uncast() == in(2)->uncast()) + if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && is_index_range_check()) return TypeInt::CC_LT; return TypeInt::CC; // else use worst case results } +bool CmpUNode::is_index_range_check() const { + // Check for the "(X ModI Y) CmpU Y" shape + return (in(1)->Opcode() == Op_ModI && + in(1)->in(2)->eqv_uncast(in(2))); +} + //------------------------------Idealize--------------------------------------- Node *CmpINode::Ideal( PhaseGVN *phase, bool can_reshape ) { if (phase->type(in(2))->higher_equal(TypeInt::ZERO)) { diff --git a/hotspot/src/share/vm/opto/subnode.hpp b/hotspot/src/share/vm/opto/subnode.hpp index bacd1065a0c..2b33e90f9e5 100644 --- a/hotspot/src/share/vm/opto/subnode.hpp +++ b/hotspot/src/share/vm/opto/subnode.hpp @@ -158,6 +158,7 @@ public: CmpUNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} virtual int Opcode() const; virtual const Type *sub( const Type *, const Type * ) const; + bool is_index_range_check() const; }; //------------------------------CmpPNode--------------------------------------- From 9564f9eeb195b74baa453f4248bfba2d340f4388 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 12 Jul 2012 16:47:51 -0700 Subject: [PATCH 72/83] Added tag jdk8-b47 for changeset 89d0de913efd --- .hgtags-top-repo | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 8725f6d1dc1..3cced1f6f86 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -168,3 +168,4 @@ a2b2d435f1d275fa8010774c653197c64e326d3a jdk8-b40 e4f81a817447c3a4f6868f083c81c2fb1b15d44c jdk8-b44 633f2378c904c92bb922a6e19e9f62fe8eac14af jdk8-b45 27fa766a2298ba8347dc198f0cf85ba6618e17db jdk8-b46 +1dcb4b7b9373e64e135c12fe1f8699f1f80e51e8 jdk8-b47 From 079b7a5e8ab78bbbd6a77409e6b0f478bc46bb5b Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 12 Jul 2012 16:47:53 -0700 Subject: [PATCH 73/83] Added tag jdk8-b47 for changeset 89587a8ac2f4 --- corba/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/corba/.hgtags b/corba/.hgtags index 796079e90ac..d1482b49a69 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -168,3 +168,4 @@ cd879aff5d3cc1f58829aab3116880aa19525b78 jdk8-b43 439d9bf8e4ff204cc89c9974c1515a508b2cc6ff jdk8-b44 747dad9e9d37d244a5c765a1afe9194f7ddae118 jdk8-b45 30141e598d72a6146126cb86b034ed6d0bd191b3 jdk8-b46 +21e46ea21c6a26246fb7a1926ac7fe8d580d0518 jdk8-b47 From 32a0fe5fa49d557ec14152e668082df7e50f7c9c Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 12 Jul 2012 16:48:00 -0700 Subject: [PATCH 74/83] Added tag jdk8-b47 for changeset a655fb35e798 --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index d850f6b9e1c..8f25ddeb1b7 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -259,3 +259,4 @@ e77b8e0ed1f84e3e268239e276c7ab64fa573baa jdk8-b43 9d5f20961bc5846fa8d098d534effafbbdae0a58 jdk8-b45 40e5a3f2907ed02b335c7caa8ecf068cc801380d hs24-b15 cf37a594c38db2ea926954154636f9f81da2e032 jdk8-b46 +0c7bb1f4f9c8062b5c5bfa56b3bdca44839b4109 jdk8-b47 From ebbf572261fb87ce982cf3cd9b18452acaa18bbe Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 12 Jul 2012 16:48:13 -0700 Subject: [PATCH 75/83] Added tag jdk8-b47 for changeset 6ab81ecbfa0d --- jaxp/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxp/.hgtags b/jaxp/.hgtags index a131128f979..1c32f37a89c 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -168,3 +168,4 @@ eff4ece9c8bc43b3ce2b3758574c4c20147f0689 jdk8-b43 0b3f3a4ce13930430b32b616a717dfc7fe385b28 jdk8-b44 57476f66e13c55eea2f2fe2b858369a4c64b9936 jdk8-b45 300f45e990643af230d6cca39477ff62c44a9a54 jdk8-b46 +404521944ac9383afda7d55d60713b212c730646 jdk8-b47 From f4018d1d357fe224c864a569fe0cdeb3a9cf49b3 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 12 Jul 2012 16:48:15 -0700 Subject: [PATCH 76/83] Added tag jdk8-b47 for changeset eb447c603031 --- jaxws/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jaxws/.hgtags b/jaxws/.hgtags index b4afc8cdd27..d0eb26e7c0d 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -168,3 +168,4 @@ f00c12994562c2f68d348a7c3e829374a89294e2 jdk8-b43 f6a417540ef124c9b4123d07da5e26f2ab909949 jdk8-b44 e80ac58b5ba904f24e125c742c30d0d740f05f86 jdk8-b45 ae368a83c2404b65c9e38c65e2aa081f2201ca74 jdk8-b46 +fe6a060afc404dcf0921708a740de770666b781f jdk8-b47 From 9805e67718e645a50bdb42d5fb144925ddaf1747 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 12 Jul 2012 16:48:24 -0700 Subject: [PATCH 77/83] Added tag jdk8-b47 for changeset 2bfc7517a106 --- jdk/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/jdk/.hgtags b/jdk/.hgtags index ed858014f63..4d90ecebac3 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -168,3 +168,4 @@ b3246687c3695dff6f461bb407f9db88f7d072e7 jdk8-b43 db471a7af03168e4441c245b1d9976f720a7cb77 jdk8-b44 b92353a01aa049bc508fc56f0347d5934b7c4390 jdk8-b45 8d2ed9d58453c8049715a72a6d26b6b66b37a94c jdk8-b46 +00b22b23269a57d0bb46c57753be2fe9a9d2c1a3 jdk8-b47 From e351ad6287820910dc843f7c2e83f8594d7e5d10 Mon Sep 17 00:00:00 2001 From: David Katleman Date: Thu, 12 Jul 2012 16:48:37 -0700 Subject: [PATCH 78/83] Added tag jdk8-b47 for changeset f0b04f0fc310 --- langtools/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/langtools/.hgtags b/langtools/.hgtags index 13843bea9da..a7894632690 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -168,3 +168,4 @@ f8c64d835b2806293b8e924b44f0e32b20657ed3 jdk8-b43 59cbead12ff46dbb397120bd26635bcd7d41ff21 jdk8-b44 e111e4587ccada8eb93f72e834e378c76256f4b7 jdk8-b45 4ca5994971724731233735f055f33d4936fd11d3 jdk8-b46 +7e6be2f239c9a4ac6dec280bd18ec296dd78e464 jdk8-b47 From 8aaf8673f1ad519e179d6b3cf46909d90bdfc89c Mon Sep 17 00:00:00 2001 From: Alejandro Murillo Date: Fri, 13 Jul 2012 14:06:34 -0700 Subject: [PATCH 79/83] Added tag hs24-b16 for changeset 3db9eaf7c6ab --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 8f25ddeb1b7..1dff0320d87 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -260,3 +260,4 @@ e77b8e0ed1f84e3e268239e276c7ab64fa573baa jdk8-b43 40e5a3f2907ed02b335c7caa8ecf068cc801380d hs24-b15 cf37a594c38db2ea926954154636f9f81da2e032 jdk8-b46 0c7bb1f4f9c8062b5c5bfa56b3bdca44839b4109 jdk8-b47 +66b0450071c1534e014b131892cc86b63f1d009c hs24-b16 From 889ba6136979f29fc1670f888cbcca6d1409e54e Mon Sep 17 00:00:00 2001 From: Kelly O'Hair Date: Mon, 16 Jul 2012 11:43:23 -0700 Subject: [PATCH 80/83] 7184406: Adjust get_source/hgforest script to allow for trailing // characters Reviewed-by: tbell --- make/scripts/hgforest.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/make/scripts/hgforest.sh b/make/scripts/hgforest.sh index aa67490c351..5906f721c87 100644 --- a/make/scripts/hgforest.sh +++ b/make/scripts/hgforest.sh @@ -98,7 +98,8 @@ for i in ${repos} ; do ( ( if [ "${command}" = "clone" -o "${command}" = "fclone" ] ; then - cline="hg clone ${pull_default}/${i} ${i}" + pull_newrepo="`echo ${pull_default}/${i} | sed -e 's@\([^:]/\)//*@\1@g'`" + cline="hg clone ${pull_newrepo} ${i}" echo "# ${cline}" ( eval "${cline}" ) else @@ -121,7 +122,8 @@ if [ "${repos_extra}" != "" ] ; then n=`expr ${n} '+' 1` ( ( - cline="hg clone ${pull_extra}/${i} ${i}" + pull_newextrarepo="`echo ${pull_extra}/${i} | sed -e 's@\([^:]/\)//*@\1@g'`" + cline="hg clone ${pull_newextrarepo} ${i}" echo "# ${cline}" ( eval "${cline}" ) echo "# exit code $?" From 416f5cdc55a6d1c48f864e3d9cf3073c78f037af Mon Sep 17 00:00:00 2001 From: "J. Duke" Date: Wed, 5 Jul 2017 18:14:56 +0200 Subject: [PATCH 81/83] Added tag jdk8-b45 for changeset 9b19b2302c28 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 45683c43953..d7f66e27f71 100644 --- a/.hgtags +++ b/.hgtags @@ -166,3 +166,4 @@ c029c972396cea042a0dc67c0f7ccf2fe68007d4 jdk8-b41 5c5a64ec0839df5affe9394b99ff338c363acbca jdk8-b42 69d8a827cdf9236be9694a46d75c710d71dac7d7 jdk8-b43 7e981cb0ad6a194f1fa859f9ad47586db461f269 jdk8-b44 +9b19b2302c28f4da6d4078f66234abecfed5688a jdk8-b45 From 930a037c8a758d9b7f161b4ba7f93789a7d1cd7b Mon Sep 17 00:00:00 2001 From: "J. Duke" Date: Wed, 5 Jul 2017 18:15:28 +0200 Subject: [PATCH 82/83] Added tag jdk8-b46 for changeset 600c9a1feb01 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index d7f66e27f71..ce58615f0aa 100644 --- a/.hgtags +++ b/.hgtags @@ -167,3 +167,4 @@ c029c972396cea042a0dc67c0f7ccf2fe68007d4 jdk8-b41 69d8a827cdf9236be9694a46d75c710d71dac7d7 jdk8-b43 7e981cb0ad6a194f1fa859f9ad47586db461f269 jdk8-b44 9b19b2302c28f4da6d4078f66234abecfed5688a jdk8-b45 +600c9a1feb01633cbcf2341a43d1d21e6497ecd0 jdk8-b46 From caf3a225512085f2f972bcb3771573d01d17ca26 Mon Sep 17 00:00:00 2001 From: "J. Duke" Date: Wed, 5 Jul 2017 18:16:12 +0200 Subject: [PATCH 83/83] Added tag jdk8-b47 for changeset b820143a6f1c --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index ce58615f0aa..f3460d7baf3 100644 --- a/.hgtags +++ b/.hgtags @@ -168,3 +168,4 @@ c029c972396cea042a0dc67c0f7ccf2fe68007d4 jdk8-b41 7e981cb0ad6a194f1fa859f9ad47586db461f269 jdk8-b44 9b19b2302c28f4da6d4078f66234abecfed5688a jdk8-b45 600c9a1feb01633cbcf2341a43d1d21e6497ecd0 jdk8-b46 +b820143a6f1ce993c6e6f31db4d64de990f42654 jdk8-b47