This commit is contained in:
Lana Steuck 2016-09-22 18:31:42 +00:00
commit b33341aafb
57 changed files with 765 additions and 132 deletions

@ -0,0 +1,85 @@
/*
* Copyright (c) 2016 SAP SE. 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 <stdio.h>
#include <sys/ldr.h>
#include "java_md_aix.h"
static unsigned char dladdr_buffer[0x4000];
static int fill_dll_info(void) {
return loadquery(L_GETINFO, dladdr_buffer, sizeof(dladdr_buffer));
}
static int dladdr_dont_reload(void *addr, Dl_info *info) {
const struct ld_info *p = (struct ld_info *)dladdr_buffer;
memset((void *)info, 0, sizeof(Dl_info));
for (;;) {
if (addr >= p->ldinfo_textorg &&
addr < (((char*)p->ldinfo_textorg) + p->ldinfo_textsize))
{
info->dli_fname = p->ldinfo_filename;
return 1;
}
if (!p->ldinfo_next) {
break;
}
p = (struct ld_info *)(((char *)p) + p->ldinfo_next);
}
return 0;
}
int dladdr(void *addr, Dl_info *info) {
static int loaded = 0;
int rc = 0;
void *addr0;
if (!addr) {
return rc;
}
if (!loaded) {
if (fill_dll_info() == -1)
return rc;
loaded = 1;
}
// first try with addr on cached data
rc = dladdr_dont_reload(addr, info);
// addr could be an AIX function descriptor, so try dereferenced version
if (rc == 0) {
addr0 = *((void **)addr);
rc = dladdr_dont_reload(addr0, info);
}
// if we had no success until now, maybe loadquery info is outdated.
// refresh and retry
if (rc == 0) {
if (fill_dll_info() == -1)
return rc;
rc = dladdr_dont_reload(addr, info);
if (rc == 0) {
rc = dladdr_dont_reload(addr0, info);
}
}
return rc;
}

@ -0,0 +1,47 @@
/*
* Copyright (c) 2016 SAP SE. 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 JAVA_MD_AIX_H
#define JAVA_MD_AIX_H
/*
* Very limited AIX port of dladdr() for libjli.so.
*
* We try to mimick dladdr(3) on Linux (see http://linux.die.net/man/3/dladdr)
* dladdr(3) is not POSIX but a GNU extension, and is not available on AIX.
*
* We only support Dl_info.dli_fname here as this is the only thing that is
* used of it by libjli.so. A more comprehensive port of dladdr can be found
* in the hotspot implementation which is not available at this place, though.
*/
typedef struct {
const char *dli_fname; /* file path of loaded library */
void *dli_fbase; /* unsupported */
const char *dli_sname; /* unsupported */
void *dli_saddr; /* unsupported */
} Dl_info;
int dladdr(void *addr, Dl_info *info);
#endif /* JAVA_MD_AIX_H */

@ -71,6 +71,7 @@ final class StackStreamFactory {
// These flags must match the values maintained in the VM
@Native private static final int DEFAULT_MODE = 0x0;
@Native private static final int FILL_CLASS_REFS_ONLY = 0x2;
@Native private static final int GET_CALLER_CLASS = 0x4;
@Native private static final int SHOW_HIDDEN_FRAMES = 0x20; // LambdaForms are hidden by the VM
@Native private static final int FILL_LIVE_STACK_FRAMES = 0x100;
/*
@ -614,9 +615,7 @@ final class StackStreamFactory {
private Class<?> caller;
CallerClassFinder(StackWalker walker) {
super(walker, FILL_CLASS_REFS_ONLY);
assert (mode & FILL_CLASS_REFS_ONLY) == FILL_CLASS_REFS_ONLY
: "mode should contain FILL_CLASS_REFS_ONLY";
super(walker, FILL_CLASS_REFS_ONLY|GET_CALLER_CLASS);
}
final class ClassBuffer extends FrameBuffer<Class<?>> {

@ -664,7 +664,7 @@ final class ModuleInfo {
try {
bb.get(b, off, len);
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}
@ -681,7 +681,7 @@ final class ModuleInfo {
int ch = bb.get();
return (ch != 0);
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}
@ -690,7 +690,7 @@ final class ModuleInfo {
try {
return bb.get();
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}
@ -699,7 +699,7 @@ final class ModuleInfo {
try {
return ((int) bb.get()) & 0xff;
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}
@ -708,7 +708,7 @@ final class ModuleInfo {
try {
return bb.getShort();
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}
@ -717,7 +717,7 @@ final class ModuleInfo {
try {
return ((int) bb.getShort()) & 0xffff;
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}
@ -726,7 +726,7 @@ final class ModuleInfo {
try {
return bb.getChar();
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}
@ -735,7 +735,7 @@ final class ModuleInfo {
try {
return bb.getInt();
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}
@ -744,7 +744,7 @@ final class ModuleInfo {
try {
return bb.getLong();
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}
@ -753,7 +753,7 @@ final class ModuleInfo {
try {
return bb.getFloat();
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}
@ -762,7 +762,7 @@ final class ModuleInfo {
try {
return bb.getDouble();
} catch (BufferUnderflowException e) {
throw new EOFException();
throw new EOFException(e.getMessage());
}
}

@ -597,10 +597,10 @@ public class Proxy implements java.io.Serializable {
private final Module module;
ProxyBuilder(ClassLoader loader, List<Class<?>> interfaces) {
if (!VM.isModuleSystemInited()) {
throw new InternalError("Proxy is not supported until module system is fully initialzed");
throw new InternalError("Proxy is not supported until module system is fully initialized");
}
if (interfaces.size() > 65535) {
throw new IllegalArgumentException("interface limit exceeded");
throw new IllegalArgumentException("interface limit exceeded: " + interfaces.size());
}
Set<Class<?>> refTypes = referencedTypes(loader, interfaces);

@ -186,7 +186,9 @@ public class BasicImageReader implements AutoCloseable {
if (result.getMajorVersion() != ImageHeader.MAJOR_VERSION ||
result.getMinorVersion() != ImageHeader.MINOR_VERSION) {
throw new IOException("The image file \"" + name + "\" is not the correct version");
throw new IOException("The image file \"" + name + "\" is not " +
"the correct version. Major: " + result.getMajorVersion() +
". Minor: " + result.getMinorVersion());
}
return result;
@ -318,11 +320,11 @@ public class BasicImageReader implements AutoCloseable {
private ByteBuffer readBuffer(long offset, long size) {
if (offset < 0 || Integer.MAX_VALUE <= offset) {
throw new IndexOutOfBoundsException("offset");
throw new IndexOutOfBoundsException("Bad offset: " + offset);
}
if (size < 0 || Integer.MAX_VALUE <= size) {
throw new IndexOutOfBoundsException("size");
throw new IndexOutOfBoundsException("Bad size: " + size);
}
if (MAP_ALL) {
@ -382,11 +384,13 @@ public class BasicImageReader implements AutoCloseable {
long uncompressedSize = loc.getUncompressedSize();
if (compressedSize < 0 || Integer.MAX_VALUE < compressedSize) {
throw new IndexOutOfBoundsException("Compressed size");
throw new IndexOutOfBoundsException(
"Bad compressed size: " + compressedSize);
}
if (uncompressedSize < 0 || Integer.MAX_VALUE < uncompressedSize) {
throw new IndexOutOfBoundsException("Uncompressed size");
throw new IndexOutOfBoundsException(
"Bad uncompressed size: " + uncompressedSize);
}
if (compressedSize == 0) {

@ -79,7 +79,8 @@ public final class ImageHeader {
Objects.requireNonNull(buffer);
if (buffer.capacity() != HEADER_SLOTS) {
throw new InternalError("jimage header not the correct size");
throw new InternalError(
"jimage header not the correct size: " + buffer.capacity());
}
int magic = buffer.get(0);

@ -81,7 +81,8 @@ public class ImageLocation {
}
if (kind < ATTRIBUTE_END || ATTRIBUTE_COUNT <= kind) {
throw new InternalError("Invalid jimage attribute kind");
throw new InternalError(
"Invalid jimage attribute kind: " + kind);
}
int length = attributeLength(data);
@ -91,7 +92,7 @@ public class ImageLocation {
value <<= 8;
if (!bytes.hasRemaining()) {
throw new InternalError("\"Missing jimage attribute datad");
throw new InternalError("Missing jimage attribute data");
}
value |= bytes.get() & 0xFF;
@ -134,7 +135,8 @@ public class ImageLocation {
long getAttribute(int kind) {
if (kind < ATTRIBUTE_END || ATTRIBUTE_COUNT <= kind) {
throw new InternalError("Invalid jimage attribute kind");
throw new InternalError(
"Invalid jimage attribute kind: " + kind);
}
return attributes[kind];
@ -142,7 +144,8 @@ public class ImageLocation {
String getAttributeString(int kind) {
if (kind < ATTRIBUTE_END || ATTRIBUTE_COUNT <= kind) {
throw new InternalError("Invalid jimage attribute kind");
throw new InternalError(
"Invalid jimage attribute kind: " + kind);
}
return getStrings().get((int)attributes[kind]);

@ -82,7 +82,7 @@ public class ImageStream {
public void ensure(int needs) {
if (needs < 0) {
throw new IndexOutOfBoundsException("needs");
throw new IndexOutOfBoundsException("Bad value: " + needs);
}
if (needs > buffer.remaining()) {
@ -106,7 +106,7 @@ public class ImageStream {
public void skip(int n) {
if (n < 0) {
throw new IndexOutOfBoundsException("n");
throw new IndexOutOfBoundsException("skip value = " + n);
}
buffer.position(buffer.position() + n);

@ -151,7 +151,7 @@ public class ImageStringsReader implements ImageStrings {
try {
charsFromMUTF8(chars, bytes, offset, count);
} catch (UTFDataFormatException ex) {
throw new InternalError("Attempt to convert non modified UTF-8 byte sequence");
throw new InternalError("Attempt to convert non modified UTF-8 byte sequence", ex);
}
return new String(chars);
@ -199,7 +199,8 @@ public class ImageStringsReader implements ImageStrings {
ch = buffer.get();
if ((ch & 0xC0) != 0x80) {
throw new InternalError("Bad continuation in modified UTF-8 byte sequence");
throw new InternalError("Bad continuation in " +
"modified UTF-8 byte sequence: " + ch);
}
uch = ((uch & ~mask) << 6) | (ch & 0x3F);
@ -208,7 +209,8 @@ public class ImageStringsReader implements ImageStrings {
}
if ((uch & 0xFFFF) != uch) {
throw new InternalError("UTF-32 char in modified UTF-8 byte sequence");
throw new InternalError("UTF-32 char in modified UTF-8 " +
"byte sequence: " + uch);
}
chars[j++] = (char)uch;

@ -183,7 +183,7 @@ class JrtFileSystem extends FileSystem {
public PathMatcher getPathMatcher(String syntaxAndInput) {
int pos = syntaxAndInput.indexOf(':');
if (pos <= 0 || pos == syntaxAndInput.length()) {
throw new IllegalArgumentException();
throw new IllegalArgumentException("pos is " + pos);
}
String syntax = syntaxAndInput.substring(0, pos);
String input = syntaxAndInput.substring(pos + 1);
@ -285,7 +285,8 @@ class JrtFileSystem extends FileSystem {
for (OpenOption option : options) {
Objects.requireNonNull(option);
if (!(option instanceof StandardOpenOption)) {
throw new IllegalArgumentException();
throw new IllegalArgumentException(
"option class: " + option.getClass());
}
}
if (options.contains(StandardOpenOption.WRITE) ||

@ -122,7 +122,8 @@ final class JrtPath implements Path {
public final JrtPath getName(int index) {
initOffsets();
if (index < 0 || index >= offsets.length) {
throw new IllegalArgumentException();
throw new IllegalArgumentException("index: " +
index + ", offsets length: " + offsets.length);
}
int begin = offsets[index];
int end;
@ -139,7 +140,9 @@ final class JrtPath implements Path {
initOffsets();
if (beginIndex < 0 || endIndex > offsets.length ||
beginIndex >= endIndex) {
throw new IllegalArgumentException();
throw new IllegalArgumentException(
"beginIndex: " + beginIndex + ", endIndex: " + endIndex +
", offsets length: " + offsets.length);
}
// starting/ending offsets
int begin = offsets[beginIndex];
@ -211,7 +214,8 @@ final class JrtPath implements Path {
return o;
}
if (jrtfs != o.jrtfs || isAbsolute() != o.isAbsolute()) {
throw new IllegalArgumentException();
throw new IllegalArgumentException(
"Incorrect filesystem or path: " + other);
}
final String tp = this.path;
final String op = o.path;
@ -366,7 +370,8 @@ final class JrtPath implements Path {
private JrtPath checkPath(Path path) {
Objects.requireNonNull(path);
if (!(path instanceof JrtPath))
throw new ProviderMismatchException();
throw new ProviderMismatchException("path class: " +
path.getClass());
return (JrtPath) path;
}
@ -459,7 +464,7 @@ final class JrtPath implements Path {
}
if (c == '\u0000') {
throw new InvalidPathException(path,
"Path: nul character not allowed");
"Path: NUL character not allowed");
}
to.append(c);
prevC = c;

@ -1603,11 +1603,50 @@ public final class Unsafe {
return weakCompareAndSwapShort(o, offset, c2s(expected), c2s(x));
}
/**
* The JVM converts integral values to boolean values using two
* different conventions, byte testing against zero and truncation
* to least-significant bit.
*
* <p>The JNI documents specify that, at least for returning
* values from native methods, a Java boolean value is converted
* to the value-set 0..1 by first truncating to a byte (0..255 or
* maybe -128..127) and then testing against zero. Thus, Java
* booleans in non-Java data structures are by convention
* represented as 8-bit containers containing either zero (for
* false) or any non-zero value (for true).
*
* <p>Java booleans in the heap are also stored in bytes, but are
* strongly normalized to the value-set 0..1 (i.e., they are
* truncated to the least-significant bit).
*
* <p>The main reason for having different conventions for
* conversion is performance: Truncation to the least-significant
* bit can be usually implemented with fewer (machine)
* instructions than byte testing against zero.
*
* <p>A number of Unsafe methods load boolean values from the heap
* as bytes. Unsafe converts those values according to the JNI
* rules (i.e, using the "testing against zero" convention). The
* method {@code byte2bool} implements that conversion.
*
* @param b the byte to be converted to boolean
* @return the result of the conversion
*/
@ForceInline
private boolean byte2bool(byte b) {
return b > 0;
return b != 0;
}
/**
* Convert a boolean value to a byte. The return value is strongly
* normalized to the value-set 0..1 (i.e., the value is truncated
* to the least-significant bit). See {@link #byte2bool(byte)} for
* more details on conversion conventions.
*
* @param b the boolean to be converted to byte (and then normalized)
* @return the result of the conversion
*/
@ForceInline
private byte bool2byte(boolean b) {
return b ? (byte)1 : (byte)0;

@ -50,7 +50,7 @@ public class VM {
public static void initLevel(int value) {
synchronized (lock) {
if (value <= initLevel || value > SYSTEM_BOOTED)
throw new InternalError();
throw new InternalError("Bad level: " + value);
initLevel = value;
lock.notifyAll();
}

@ -153,27 +153,24 @@ public final class ModuleBootstrap {
boolean addAllDefaultModules = false;
boolean addAllSystemModules = false;
boolean addAllApplicationModules = false;
String propValue = getAndRemoveProperty("jdk.module.addmods");
if (propValue != null) {
for (String mod: propValue.split(",")) {
switch (mod) {
case ALL_DEFAULT:
addAllDefaultModules = true;
break;
case ALL_SYSTEM:
addAllSystemModules = true;
break;
case ALL_MODULE_PATH:
addAllApplicationModules = true;
break;
default :
roots.add(mod);
}
for (String mod: getExtraAddModules()) {
switch (mod) {
case ALL_DEFAULT:
addAllDefaultModules = true;
break;
case ALL_SYSTEM:
addAllSystemModules = true;
break;
case ALL_MODULE_PATH:
addAllApplicationModules = true;
break;
default :
roots.add(mod);
}
}
// --limit-modules
propValue = getAndRemoveProperty("jdk.module.limitmods");
String propValue = getAndRemoveProperty("jdk.module.limitmods");
if (propValue != null) {
Set<String> mods = new HashSet<>();
for (String mod: propValue.split(",")) {
@ -392,6 +389,32 @@ public final class ModuleBootstrap {
}
}
/**
* Returns the set of module names specified via --add-modules options
* on the command line
*/
private static Set<String> getExtraAddModules() {
String prefix = "jdk.module.addmods.";
int index = 0;
// the system property is removed after decoding
String value = getAndRemoveProperty(prefix + index);
if (value == null) {
return Collections.emptySet();
}
Set<String> modules = new HashSet<>();
while (value != null) {
for (String s : value.split(",")) {
if (s.length() > 0) modules.add(s);
}
index++;
value = getAndRemoveProperty(prefix + index);
}
return modules;
}
/**
* Process the --add-reads options to add any additional read edges that
@ -514,7 +537,7 @@ public final class ModuleBootstrap {
// value is <module>(,<module>)*
if (map.containsKey(key))
fail(key + " specified more than once");
fail(key + " specified more than once");
Set<String> values = new HashSet<>();
map.put(key, values);

@ -1,5 +1,5 @@
/*
* Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 2016, 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
@ -344,7 +344,8 @@ abstract class SeedGenerator {
try {
BogusThread bt = new BogusThread();
Thread t = new Thread
(seedGroup, bt, "SeedGenerator Thread", 0, false);
(seedGroup, bt, "SeedGenerator Thread", 0,
false);
t.start();
} catch (Exception e) {
throw new InternalError("internal error: " +
@ -357,7 +358,8 @@ abstract class SeedGenerator {
long startTime = System.nanoTime();
while (System.nanoTime() - startTime < 250000000) {
synchronized(this){};
latch++;
// Mask the sign bit and keep latch non-negative
latch = (latch + 1) & 0x1FFFFFFF;
}
// Translate the value using the permutation, and xor
@ -431,7 +433,7 @@ abstract class SeedGenerator {
// data and using it to mix the trivial permutation.
// It should be evenly distributed. The specific values
// are not crucial to the security of this class.
private static byte[] rndTab = {
private static final byte[] rndTab = {
56, 30, -107, -6, -86, 25, -83, 75, -12, -64,
5, -128, 78, 21, 16, 32, 70, -81, 37, -51,
-43, -46, -108, 87, 29, 17, -55, 22, -11, -111,

@ -179,6 +179,7 @@ JVM_GetStackTraceElements(JNIEnv *env, jobject throwable, jobjectArray elements)
*/
enum {
JVM_STACKWALK_FILL_CLASS_REFS_ONLY = 0x2,
JVM_STACKWALK_GET_CALLER_CLASS = 0x04,
JVM_STACKWALK_SHOW_HIDDEN_FRAMES = 0x20,
JVM_STACKWALK_FILL_LIVE_STACK_FRAMES = 0x100
};

@ -152,8 +152,8 @@ defaultPath(void)
#ifdef __solaris__
/* These really are the Solaris defaults! */
return (geteuid() == 0 || getuid() == 0) ?
"/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin:/usr/sbin" :
"/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin:";
"/usr/xpg4/bin:/usr/bin:/opt/SUNWspro/bin:/usr/sbin" :
"/usr/xpg4/bin:/usr/bin:/opt/SUNWspro/bin:";
#else
return ":/bin:/usr/bin"; /* glibc */
#endif

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2016, 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,12 +35,12 @@
#include "manifest_info.h"
#include "jli_util.h"
#define PATH_SEPARATOR ':'
#define FILESEP "/"
#define FILE_SEPARATOR '/'
#define PATH_SEPARATOR ':'
#define FILESEP "/"
#define FILE_SEPARATOR '/'
#define IS_FILE_SEPARATOR(c) ((c) == '/')
#ifndef MAXNAMELEN
#define MAXNAMELEN PATH_MAX
#define MAXNAMELEN PATH_MAX
#endif
#ifdef _LP64
@ -59,10 +59,13 @@ static jboolean GetJVMPath(const char *jrepath, const char *jvmtype,
static jboolean GetJREPath(char *path, jint pathsize, const char * arch,
jboolean speculative);
#if defined(_AIX)
#include "java_md_aix.h"
#endif
#ifdef MACOSX
#include "java_md_macosx.h"
#else /* !MACOSX */
#include "java_md_solinux.h"
#endif /* MACOSX */
#endif /* JAVA_MD_H */

@ -67,19 +67,22 @@ public final class ConstructorFinder extends AbstractFinder<Constructor<?>> {
*/
public static Constructor<?> findConstructor(Class<?> type, Class<?>...args) throws NoSuchMethodException {
if (type.isPrimitive()) {
throw new NoSuchMethodException("Primitive wrapper does not contain constructors");
throw new NoSuchMethodException("Primitive wrapper does not contain constructors: "
+ type.getName());
}
if (type.isInterface()) {
throw new NoSuchMethodException("Interface does not contain constructors");
throw new NoSuchMethodException("Interface does not contain constructors: "
+ type.getName());
}
if (!FinderUtils.isExported(type)) {
throw new NoSuchMethodException("Class is not accessible");
throw new NoSuchMethodException("Class is not accessible: " + type.getName());
}
if (Modifier.isAbstract(type.getModifiers())) {
throw new NoSuchMethodException("Abstract class cannot be instantiated");
throw new NoSuchMethodException("Abstract class cannot be instantiated: "
+ type.getName());
}
if (!Modifier.isPublic(type.getModifiers()) || !isPackageAccessible(type)) {
throw new NoSuchMethodException("Class is not accessible");
throw new NoSuchMethodException("Class is not accessible: " + type.getName());
}
PrimitiveWrapperMap.replacePrimitivesWithWrappers(args);
Signature signature = new Signature(type, args);

@ -2461,16 +2461,16 @@ public abstract class ImageReader {
try {
bundle = ResourceBundle.getBundle(baseName, locale, this.getClass().getModule());
} catch (MissingResourceException mre) {
throw new IllegalArgumentException("Bundle not found!");
throw new IllegalArgumentException("Bundle not found!", mre);
}
String warning = null;
try {
warning = bundle.getString(keyword);
} catch (ClassCastException cce) {
throw new IllegalArgumentException("Resource is not a String!");
throw new IllegalArgumentException("Resource is not a String!", cce);
} catch (MissingResourceException mre) {
throw new IllegalArgumentException("Resource is missing!");
throw new IllegalArgumentException("Resource is missing!", mre);
}
listener.warningOccurred(this, warning);

@ -1963,16 +1963,16 @@ public abstract class ImageWriter implements ImageTranscoder {
try {
bundle = ResourceBundle.getBundle(baseName, locale, this.getClass().getModule());
} catch (MissingResourceException mre) {
throw new IllegalArgumentException("Bundle not found!");
throw new IllegalArgumentException("Bundle not found!", mre);
}
String warning = null;
try {
warning = bundle.getString(keyword);
} catch (ClassCastException cce) {
throw new IllegalArgumentException("Resource is not a String!");
throw new IllegalArgumentException("Resource is not a String!", cce);
} catch (MissingResourceException mre) {
throw new IllegalArgumentException("Resource is missing!");
throw new IllegalArgumentException("Resource is missing!", mre);
}
listener.warningOccurred(this, imageIndex, warning);

@ -442,7 +442,7 @@ getAllConfigs (JNIEnv *env, int screen, AwtScreenDataPtr screenDataPtr) {
#ifndef __linux__ /* SOLARIS */
if (xrenderLibHandle == NULL) {
xrenderLibHandle = dlopen("/usr/sfw/lib/libXrender.so.1",
xrenderLibHandle = dlopen("/usr/lib/libXrender.so.1",
RTLD_LAZY | RTLD_GLOBAL);
}
#endif

@ -45,7 +45,7 @@ import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
* <pre>
* Secmod secmod = Secmod.getInstance();
* if (secmod.isInitialized() == false) {
* secmod.initialize("/home/myself/.mozilla", "/usr/sfw/lib/mozilla");
* secmod.initialize("/home/myself/.mozilla");
* }
*
* Provider p = secmod.getModule(ModuleType.KEYSTORE).getProvider();

@ -0,0 +1,35 @@
/*
* Copyright (c) 2016, 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 8157464
* @summary Basic test for StackWalker.getCallerClass()
* @library src
* @build java.base/java.util.CSM csm/*
* @run main/othervm csm/jdk.test.CallerSensitiveTest
* @run main/othervm csm/jdk.test.CallerSensitiveTest sm
*/
public class Main {
}

@ -0,0 +1,159 @@
/*
* Copyright (c) 2016, 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.
*/
package jdk.test;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MethodType;
import java.lang.reflect.Method;
import java.security.Permission;
import java.security.PermissionCollection;
import java.security.Permissions;
import java.security.Policy;
import java.security.ProtectionDomain;
import java.util.CSM.Result;
import java.util.function.Supplier;
/**
* This test invokes StackWalker::getCallerClass via static reference,
* reflection, MethodHandle, lambda. Also verify that
* StackWalker::getCallerClass can't be called from @CallerSensitive method.
*/
public class CallerSensitiveTest {
private static final String NON_CSM_CALLER_METHOD = "getCallerClass";
private static final String CSM_CALLER_METHOD = "caller";
public static void main(String... args) throws Throwable {
boolean sm = false;
if (args.length > 0 && args[0].equals("sm")) {
sm = true;
PermissionCollection perms = new Permissions();
perms.add(new StackFramePermission("retainClassReference"));
Policy.setPolicy(new Policy() {
@Override
public boolean implies(ProtectionDomain domain, Permission p) {
return perms.implies(p);
}
});
System.setSecurityManager(new SecurityManager());
}
System.err.format("Test %s security manager.%n",
sm ? "with" : "without");
CallerSensitiveTest cstest = new CallerSensitiveTest();
// test static call to java.util.CSM::caller and CSM::getCallerClass
cstest.staticMethodCall();
// test java.lang.reflect.Method call
cstest.reflectMethodCall();
// test java.lang.invoke.MethodHandle
cstest.invokeMethodHandle(Lookup1.lookup);
cstest.invokeMethodHandle(Lookup2.lookup);
// test method ref
cstest.lambda();
LambdaTest.lambda();
if (failed > 0) {
throw new RuntimeException(failed + " test cases failed.");
}
}
void staticMethodCall() {
java.util.CSM.caller();
Result result = java.util.CSM.getCallerClass();
checkNonCSMCaller(CallerSensitiveTest.class, result);
}
void reflectMethodCall() throws Throwable {
Method method1 = java.util.CSM.class.getMethod(CSM_CALLER_METHOD);
method1.invoke(null);
Method method2 = java.util.CSM.class.getMethod(NON_CSM_CALLER_METHOD);
Result result = (Result) method2.invoke(null);
checkNonCSMCaller(CallerSensitiveTest.class, result);
}
void invokeMethodHandle(Lookup lookup) throws Throwable {
MethodHandle mh1 = lookup.findStatic(java.util.CSM.class, CSM_CALLER_METHOD,
MethodType.methodType(Class.class));
Class<?> c = (Class<?>)mh1.invokeExact();
MethodHandle mh2 = lookup.findStatic(java.util.CSM.class, NON_CSM_CALLER_METHOD,
MethodType.methodType(Result.class));
Result result = (Result)mh2.invokeExact();
checkNonCSMCaller(CallerSensitiveTest.class, result);
}
void lambda() {
Result result = LambdaTest.getCallerClass.get();
checkNonCSMCaller(CallerSensitiveTest.class, result);
LambdaTest.caller.get();
}
static int failed = 0;
static void checkNonCSMCaller(Class<?> expected, Result result) {
if (result.callers.size() != 1) {
throw new RuntimeException("Expected result.callers contain one element");
}
if (expected != result.callers.get(0)) {
System.err.format("ERROR: Expected %s but got %s%n", expected,
result.callers);
result.frames.stream()
.forEach(f -> System.err.println(" " + f));
failed++;
}
}
static class Lookup1 {
static Lookup lookup = MethodHandles.lookup();
}
static class Lookup2 {
static Lookup lookup = MethodHandles.lookup();
}
static class LambdaTest {
static Supplier<Class<?>> caller = java.util.CSM::caller;
static Supplier<Result> getCallerClass = java.util.CSM::getCallerClass;
static void caller() {
caller.get();
}
static Result getCallerClass() {
return getCallerClass.get();
}
static void lambda() {
Result result = LambdaTest.getCallerClass();
checkNonCSMCaller(LambdaTest.class, result);
LambdaTest.caller();
}
}
}

@ -0,0 +1,26 @@
/*
* Copyright (c) 2016, 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.
*/
module csm {
exports jdk.test;
}

@ -0,0 +1,77 @@
/*
* Copyright (c) 2016, 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.
*/
package java.util;
import static java.lang.StackWalker.Option.*;
import java.lang.StackWalker.StackFrame;
import java.util.stream.Collectors;
import jdk.internal.reflect.CallerSensitive;
import jdk.internal.reflect.Reflection;
public class CSM {
private static StackWalker walker =
StackWalker.getInstance(EnumSet.of(RETAIN_CLASS_REFERENCE,
SHOW_HIDDEN_FRAMES,
SHOW_REFLECT_FRAMES));
public static class Result {
public final List<Class<?>> callers;
public final List<StackWalker.StackFrame> frames;
Result(List<Class<?>> callers,
List<StackFrame> frames) {
this.callers = callers;
this.frames = frames;
}
}
/**
* Returns the caller of this caller-sensitive method returned by
* by Reflection::getCallerClass.
*
* StackWalker::getCallerClass is expected to throw UOE
*/
@CallerSensitive
public static Class<?> caller() {
Class<?> c1 = Reflection.getCallerClass();
try {
Class<?> c2 = walker.getCallerClass();
throw new RuntimeException("Exception not thrown by StackWalker::getCallerClass");
} catch (UnsupportedOperationException e) {}
return c1;
}
/**
* Returns the caller of this non-caller-sensitive method.
*/
public static Result getCallerClass() {
Class<?> caller = walker.getCallerClass();
return new Result(List.of(caller), dump());
}
static List<StackFrame> dump() {
return walker.walk(s -> s.collect(Collectors.toList()));
}
}

@ -0,0 +1,32 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import java.lang.instrument.Instrumentation;
class SimpleAgent {
public static void premain(String args, Instrumentation inst) {
System.out.println("in premain");
}
}

@ -0,0 +1,40 @@
/*
* Copyright (c) 2016, 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
* @summary Tests that the -javaagent option adds the java.instrument into
* the module graph
* @modules java.instrument
* @run shell MakeJAR3.sh SimpleAgent
* @run main/othervm -javaagent:SimpleAgent.jar -limitmods java.base TestAgentWithLimitMods
*
*/
public class TestAgentWithLimitMods {
public static void main(String[] args) {
System.out.println("Test passed");
}
}

@ -27,6 +27,7 @@
* @summary Test two URLClassLoader define Package object of the same name
* @library /lib/testlibrary
* @build CompilerUtils
* @modules jdk.compiler
* @run testng SplitPackage
*/

@ -37,6 +37,7 @@ public class LookupTest {
String url, boolean throwsSecException, boolean throwsIOException)
{
try {
ProxySelector.setDefault(null);
URL u = new URL(url);
System.err.println ("Connecting to " + u);
URLConnection urlc = u.openConnection();
@ -71,7 +72,7 @@ public class LookupTest {
System.out.print(port);
} else if (cmd.equals("-runtest")) {
port = Integer.parseInt(args[1]);
String hostsFileName = System.getProperty("test.src", ".") + "/LookupTestHosts";
String hostsFileName = System.getProperty("user.dir", ".") + "/LookupTestHosts";
System.setProperty("jdk.net.hosts.file", hostsFileName);
addMappingToHostsFile("allowedAndFound.com", "127.0.0.1", hostsFileName, false);
addMappingToHostsFile("notAllowedButFound.com", "99.99.99.99", hostsFileName, true);

@ -1,2 +0,0 @@
127.0.0.1 allowedAndFound.com
99.99.99.99 notAllowedButFound.com

@ -48,6 +48,7 @@ cat << POLICY > policy
grant {
permission java.net.URLPermission "http://allowedAndFound.com:${port}/-", "*:*";
permission java.net.URLPermission "http://allowedButNotfound.com:${port}/-", "*:*";
permission java.net.NetPermission "setProxySelector";
permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
permission java.util.PropertyPermission "java.io.tmpdir", "read";

@ -23,9 +23,11 @@
* questions.
*/
/**
/*
* @test
* @bug 8153142
* @modules java.httpclient
* jdk.httpserver
* @run main/othervm HeadersTest1
* @summary HeadersTest1
*/
@ -39,9 +41,11 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpClient;
import java.net.http.HttpHeaders;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.List;

@ -26,6 +26,7 @@
* @test
* @bug 8163561
* @modules java.base/sun.net.www
* java.httpclient
* @summary Verify that Proxy-Authenticate header is correctly handled
*
* @run main/othervm ProxyAuthTest

@ -24,5 +24,6 @@
/*
* @test
* @bug 8151299
* @modules java.httpclient
* @run testng java.httpclient/java.net.http.SelectorTest
*/

@ -25,7 +25,6 @@
* @test
* @bug 8058575
* @summary Test that bad host classes cause exceptions to get thrown.
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.base/jdk.internal.org.objectweb.asm
* @run main TestBadHostClass
@ -35,7 +34,6 @@
import java.lang.*;
import java.lang.reflect.Field;
import jdk.internal.misc.Unsafe;
import jdk.test.lib.unsafe.UnsafeHelper;
import jdk.internal.org.objectweb.asm.ClassWriter;
import static jdk.internal.org.objectweb.asm.Opcodes.*;

@ -82,15 +82,12 @@ if [ "${osname}" = SunOS ] ; then
fi
# Add basic solaris system paths
path4sdk=/usr/ccs/bin:/usr/ccs/lib:/usr/bin:/bin:/usr/sfw/bin
path4sdk=/usr/bin:/usr/gnu/bin
# Find GNU make
make=/usr/sfw/bin/gmake
make=/usr/bin/gmake
if [ ! -f ${make} ] ; then
make=/opt/sfw/bin/gmake
if [ ! -f ${make} ] ; then
make=${slashjava}/devtools/${solaris_arch}/bin/gnumake
fi
make=${slashjava}/devtools/${solaris_arch}/bin/gnumake
fi
fileMustExist "${make}" make

@ -59,9 +59,6 @@ else
/usr/bin/nohup /usr/bin/X11/Xvfb -fbdir ${currentDir} -pixdepths 8 16 24 32 ${DISPLAY} > ${currentDir}/nohup.$$ 2>&1 &
fi
WM="/usr/bin/X11/fvwm2"
if [ ! -x ${WM} ] ; then
WM="/opt/sfw/bin/fvwm2"
fi
#
# Wait for Xvfb to initialize:
sleep 5

@ -1,17 +1,17 @@
Rough hints for setting up MUSCLE on Solaris:
Make sure you have libusb, usually in /usr/sfw:
Make sure you have libusb, usually in /usr/lib:
ls -l /usr/sfw/lib/libusb.so
lrwxrwxrwx 1 root other 11 Jan 12 16:02 /usr/sfw/lib/libusb.so -> libusb.so.1
ls -l /usr/lib/libusb.so
lrwxrwxrwx 1 root other 11 Jan 12 16:02 /usr/lib/libusb.so -> libusb.so.1
Get PCSC and CCID.
-rwx------ 1 user staff 529540 Jun 16 18:24 ccid-1.0.1.tar.gz
-rwx------ 1 user staff 842654 Jun 16 18:24 pcsc-lite-1.3.1.tar.gz
Unpack pcsc
Run ./configure --enable-libusb=/usr/sfw (??)
Run ./configure --enable-libusb (??)
gnumake
Make /usr/local writeable for user
gnumake install

@ -21,11 +21,12 @@
* questions.
*/
/**
/*
* @test
* @bug 6239117
* @summary test logical channels work
* @author Andreas Sterbenz
* @modules java.smartcardio/javax.smartcardio
* @run main/manual TestChannel
*/

@ -21,11 +21,12 @@
* questions.
*/
/**
/*
* @test
* @bug 6293769 6294527 6309280
* @summary test connect() works
* @author Andreas Sterbenz
* @modules java.smartcardio/javax.smartcardio
* @run main/manual TestConnect
*/

@ -21,11 +21,12 @@
* questions.
*/
/**
/*
* @test
* @bug 6239117
* @summary test connect works correctly if called multiple times/card removed
* @author Andreas Sterbenz
* @modules java.smartcardio/javax.smartcardio
* @run main/manual TestConnectAgain
*/

@ -21,11 +21,12 @@
* questions.
*/
/**
/*
* @test
* @bug 6239117 6470320
* @summary test if transmitControlCommand() works
* @author Andreas Sterbenz
* @modules java.smartcardio/javax.smartcardio
* @run main/manual TestControl
*/

@ -21,11 +21,12 @@
* questions.
*/
/**
/*
* @test
* @bug 6327047
* @summary verify that TerminalFactory.getDefault() works
* @author Andreas Sterbenz
* @modules java.smartcardio/javax.smartcardio
* @run main/manual TestDefault
*/

@ -21,10 +21,11 @@
* questions.
*/
/**
/*
* @test
* @bug 8046343
* @summary Make sure that direct protocol is available
* @modules java.smartcardio/javax.smartcardio
* @run main/manual TestDirect
*/

@ -21,11 +21,12 @@
* questions.
*/
/**
/*
* @test
* @bug 6239117
* @summary verify that beginExclusive()/endExclusive() works
* @author Andreas Sterbenz
* @modules java.smartcardio/javax.smartcardio
* @run main/manual TestExclusive
*/

@ -21,11 +21,12 @@
* questions.
*/
/**
/*
* @test
* @bug 6239117 6445367
* @summary test that CardTerminals.waitForCard() works
* @author Andreas Sterbenz
* @modules java.smartcardio/javax.smartcardio
* @run main/manual TestMultiplePresent
*/

@ -21,11 +21,12 @@
* questions.
*/
/**
/*
* @test
* @bug 6293769 6294527
* @summary test that the isCardPresent()/waitForX() APIs work correctly
* @author Andreas Sterbenz
* @modules java.smartcardio/javax.smartcardio
* @run main/manual TestPresent
*/

@ -21,11 +21,12 @@
* questions.
*/
/**
/*
* @test
* @bug 6293769 6294527
* @summary test transmit() works
* @author Andreas Sterbenz
* @modules java.smartcardio/javax.smartcardio
* @run main/manual TestTransmit
*/

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2016, 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,7 +139,7 @@ public class SocketCreation {
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
System.out.println("Server: Will call createServerSocket(int)");
ServerSocket sslServerSocket = sslssf.createServerSocket(serverPort);
ServerSocket sslServerSocket = sslssf.createServerSocket(0);
serverPort = sslServerSocket.getLocalPort();
System.out.println("Server: Will accept on SSL server socket...");
@ -157,7 +157,7 @@ public class SocketCreation {
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
System.out.println("Server: Will call createServerSocket(int, int)");
ServerSocket sslServerSocket = sslssf.createServerSocket(serverPort,
ServerSocket sslServerSocket = sslssf.createServerSocket(0,
1);
serverPort = sslServerSocket.getLocalPort();
@ -177,7 +177,7 @@ public class SocketCreation {
System.out.println("Server: Will call createServerSocket(int, " +
" int, InetAddress)");
ServerSocket sslServerSocket = sslssf.createServerSocket(serverPort,
ServerSocket sslServerSocket = sslssf.createServerSocket(0,
1,
InetAddress.getByName("localhost"));
serverPort = sslServerSocket.getLocalPort();
@ -203,14 +203,15 @@ public class SocketCreation {
if (sslServerSocket.isBound())
throw new Exception("Server socket is already bound!");
System.out.println("Server: Will bind SSL server socket to port " +
serverPort + "...");
sslServerSocket.bind(new java.net.InetSocketAddress(serverPort));
sslServerSocket.bind(new java.net.InetSocketAddress(0));
if (!sslServerSocket.isBound())
throw new Exception("Server socket is not bound!");
serverPort = sslServerSocket.getLocalPort();
System.out.println("Server: Bound SSL server socket to port " +
serverPort + "...");
serverReady = true;
System.out.println("Server: Will accept on SSL server socket...");
@ -224,11 +225,10 @@ public class SocketCreation {
SSLSocketFactory sslsf =
(SSLSocketFactory) SSLSocketFactory.getDefault();
System.out.println("Server: Will create normal server socket bound"
+ " to port " + serverPort + "...");
ServerSocket ss = new ServerSocket(serverPort);
ServerSocket ss = new ServerSocket(0);
serverPort = ss.getLocalPort();
System.out.println("Server: Created normal server socket bound"
+ " to port " + serverPort + "...");
System.out.println("Server: Will accept on server socket...");
serverReady = true;
Socket s = ss.accept();

@ -1761,7 +1761,7 @@ public class KeyToolTest {
//PKCS#11 tests
// 1. sccs edit cert8.db key3.db
//Runtime.getRuntime().exec("/usr/ccs/bin/sccs edit cert8.db key3.db");
//Runtime.getRuntime().exec("/usr/bin/sccs edit cert8.db key3.db");
testOK("", p11Arg + ("-storepass test12 -genkey -alias genkey" +
" -dname cn=genkey -keysize 512 -keyalg rsa"));
testOK("", p11Arg + "-storepass test12 -list");
@ -1781,7 +1781,7 @@ public class KeyToolTest {
testOK("", p11Arg + "-storepass test12 -list");
assertTrue(out.indexOf("Your keystore contains 0 entries") != -1);
//(check for empty database listing)
//Runtime.getRuntime().exec("/usr/ccs/bin/sccs unedit cert8.db key3.db");
//Runtime.getRuntime().exec("/usr/bin/sccs unedit cert8.db key3.db");
remove("genkey.cert");
remove("genkey.certreq");
// 12. sccs unedit cert8.db key3.db

@ -40,7 +40,7 @@ public class RunpathTest extends TestHelper {
}
final String findElfReader() {
String[] paths = {"/bin", "/sbin", "/usr/bin", "/usr/sbin", "/usr/ccs/bin"};
String[] paths = {"/usr/sbin", "/usr/bin"};
final String cmd = isSolaris ? "elfdump" : "readelf";
for (String x : paths) {
File p = new File(x);

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2016, 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,11 @@
* stack size for the platform (as provided by the JVM error message when a very
* small stack is used), and then verify that the JVM can be launched with that stack
* size without a crash or any error messages.
*
* Note: The '-Xss<size>' and '-XX:ThreadStackSize=<k-bytes>' options
* both control Java thread stack size. This repo's version of the test
* exercises the '-Xss' option. The hotspot repo's version of the test
* exercises the '-XX:ThreadStackSize' VM option.
*/
public class TooSmallStackSize extends TestHelper {
@ -59,7 +64,7 @@ public class TooSmallStackSize extends TestHelper {
static String getMinStackAllowed(TestResult tr) {
/*
* The JVM output will contain in one of the lines:
* "The stack size specified is too small, Specify at least 100k"
* "The Java thread stack size specified is too small. Specify at least 100k"
* Although the actual size will vary. We need to extract this size
* string from the output and return it.
*/
@ -73,6 +78,9 @@ public class TooSmallStackSize extends TestHelper {
}
}
System.out.println("Expect='" + matchStr + "'");
System.out.println("Actual:");
printTestOutput(tr);
System.out.println("FAILED: Could not get the stack size from the output");
throw new RuntimeException("test fails");
}
@ -96,11 +104,15 @@ public class TooSmallStackSize extends TestHelper {
System.out.println("PASSED: got no error message with stack size of " + stackSize);
min_stack_allowed = stackSize;
} else {
if (tr.contains("The stack size specified is too small")) {
String matchStr = "The Java thread stack size specified is too small";
if (tr.contains(matchStr)) {
System.out.println("PASSED: got expected error message with stack size of " + stackSize);
min_stack_allowed = getMinStackAllowed(tr);
} else {
// Likely a crash
System.out.println("Expect='" + matchStr + "'");
System.out.println("Actual:");
printTestOutput(tr);
System.out.println("FAILED: Did not get expected error message with stack size of " + stackSize);
throw new RuntimeException("test fails");
}
@ -123,6 +135,8 @@ public class TooSmallStackSize extends TestHelper {
System.out.println("PASSED: VM launched with minimum allowed stack size of " + stackSize);
} else {
// Likely a crash
System.out.println("Test output:");
printTestOutput(tr);
System.out.println("FAILED: VM failed to launch with minimum allowed stack size of " + stackSize);
throw new RuntimeException("test fails");
}

@ -31,6 +31,7 @@
* @summary Basic test for java --add-modules
*/
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
@ -223,6 +224,27 @@ public class AddModsTest {
}
/**
* Tests {@code --add-modules} be specified more than once.
*/
public void testWithMultipleAddModules() throws Exception {
String modulepath = MODS1_DIR.toString() + File.pathSeparator +
MODS2_DIR.toString();
int exitValue
= executeTestJava("--module-path", modulepath,
"--add-modules", LOGGER_MODULE,
"--add-modules", TEST_MODULE,
"-m", TEST_MID,
"logger.Logger")
.outputTo(System.out)
.errorTo(System.out)
.getExitValue();
assertTrue(exitValue == 0);
}
/**
* Attempt to run with a bad module name specified to --add-modules
*/

@ -24,6 +24,7 @@
/*
* @test
* @bug 6521334 6712743 8007902 8151901
* @requires (sun.arch.data.model == "64" & os.maxMemory >= 4g)
* @summary test general packer/unpacker functionality
* using native and java unpackers
* @compile -XDignore.symbol.file Utils.java Pack200Test.java