提交 6329dbea 编写于 作者: D dholmes

Merge

...@@ -570,10 +570,12 @@ public: ...@@ -570,10 +570,12 @@ public:
static uint cores_per_cpu() { static uint cores_per_cpu() {
uint result = 1; uint result = 1;
if (is_intel()) { if (is_intel()) {
if (supports_processor_topology()) { bool supports_topology = supports_processor_topology();
if (supports_topology) {
result = _cpuid_info.tpl_cpuidB1_ebx.bits.logical_cpus / result = _cpuid_info.tpl_cpuidB1_ebx.bits.logical_cpus /
_cpuid_info.tpl_cpuidB0_ebx.bits.logical_cpus; _cpuid_info.tpl_cpuidB0_ebx.bits.logical_cpus;
} else { }
if (!supports_topology || result == 0) {
result = (_cpuid_info.dcp_cpuid4_eax.bits.cores_per_cpu + 1); result = (_cpuid_info.dcp_cpuid4_eax.bits.cores_per_cpu + 1);
} }
} else if (is_amd()) { } else if (is_amd()) {
......
...@@ -33,20 +33,25 @@ ...@@ -33,20 +33,25 @@
import com.oracle.java.testlibrary.JDKToolLauncher; import com.oracle.java.testlibrary.JDKToolLauncher;
import com.oracle.java.testlibrary.OutputBuffer; import com.oracle.java.testlibrary.OutputBuffer;
import com.oracle.java.testlibrary.Platform;
import com.oracle.java.testlibrary.ProcessTools; import com.oracle.java.testlibrary.ProcessTools;
import java.io.File; import java.io.File;
public class Test8028623 { public class Test8028623 {
public static int à = 1; public static int \u00CB = 1;
public static String dumpFile = "heap.out"; public static String dumpFile = "heap.out";
public static void main (String[] args) { public static void main (String[] args) {
System.out.println(Ã); System.out.println(\u00CB);
try { try {
if (!Platform.shouldSAAttach()) {
System.out.println("SA attach not expected to work - test skipped.");
return;
}
int pid = ProcessTools.getProcessId(); int pid = ProcessTools.getProcessId();
JDKToolLauncher jmap = JDKToolLauncher.create("jmap") JDKToolLauncher jmap = JDKToolLauncher.create("jmap")
.addToolArg("-F") .addToolArg("-F")
......
...@@ -23,12 +23,15 @@ ...@@ -23,12 +23,15 @@
package com.oracle.java.testlibrary; package com.oracle.java.testlibrary;
import com.oracle.java.testlibrary.Utils;
public class Platform { public class Platform {
private static final String osName = System.getProperty("os.name"); private static final String osName = System.getProperty("os.name");
private static final String dataModel = System.getProperty("sun.arch.data.model"); private static final String dataModel = System.getProperty("sun.arch.data.model");
private static final String vmVersion = System.getProperty("java.vm.version"); private static final String vmVersion = System.getProperty("java.vm.version");
private static final String osArch = System.getProperty("os.arch"); private static final String osArch = System.getProperty("os.arch");
private static final String vmName = System.getProperty("java.vm.name"); private static final String vmName = System.getProperty("java.vm.name");
private static final String userName = System.getProperty("user.name");
public static boolean isClient() { public static boolean isClient() {
return vmName.endsWith(" Client VM"); return vmName.endsWith(" Client VM");
...@@ -121,4 +124,56 @@ public class Platform { ...@@ -121,4 +124,56 @@ public class Platform {
return osArch; return osArch;
} }
/**
* Return a boolean for whether we expect to be able to attach
* the SA to our own processes on this system.
*/
public static boolean shouldSAAttach() throws Exception {
if (isLinux()) {
return canPtraceAttachLinux();
} else if (isOSX()) {
return canAttachOSX();
} else {
// Other platforms expected to work:
return true;
}
}
/**
* On Linux, first check the SELinux boolean "deny_ptrace" and return false
* as we expect to be denied if that is "1". Then expect permission to attach
* if we are root, so return true. Then return false for an expected denial
* if "ptrace_scope" is 1, and true otherwise.
*/
public static boolean canPtraceAttachLinux() throws Exception {
// SELinux deny_ptrace:
String deny_ptrace = Utils.fileAsString("/sys/fs/selinux/booleans/deny_ptrace");
if (deny_ptrace != null && deny_ptrace.contains("1")) {
// ptrace will be denied:
return false;
}
if (userName.equals("root")) {
return true;
}
// ptrace_scope:
String ptrace_scope = Utils.fileAsString("/proc/sys/kernel/yama/ptrace_scope");
if (ptrace_scope != null && ptrace_scope.contains("1")) {
// ptrace will be denied:
return false;
}
// Otherwise expect to be permitted:
return true;
}
/**
* On OSX, expect permission to attach only if we are root.
*/
public static boolean canAttachOSX() throws Exception {
return userName.equals("root");
}
} }
...@@ -298,6 +298,35 @@ public final class Utils { ...@@ -298,6 +298,35 @@ public final class Utils {
return output; return output;
} }
/**
* Return the contents of the named file as a single String,
* or null if not found.
* @param filename name of the file to read
* @return String contents of file, or null if file not found.
*/
public static String fileAsString(String filename) {
StringBuilder result = new StringBuilder();
try {
File file = new File(filename);
if (file.exists()) {
BufferedReader reader = new BufferedReader(new FileReader(file));
while (true) {
String line = reader.readLine();
if (line == null) {
break;
}
result.append(line).append("\n");
}
} else {
// Does not exist:
return null;
}
} catch (Exception e) {
e.printStackTrace();
}
return result.toString();
}
/** /**
* @return Unsafe instance. * @return Unsafe instance.
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册