ports/java/openjdk7/files/patch-set
Greg Lewis 92b914da21 . Update to Build 117.
. Temporarily disable a previous openjdk7 install as a bootstrap since the
  previous version won't compile this one.
2010-11-08 08:14:04 +00:00

31831 lines
1 MiB
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--- ./.hgtags 2010-11-04 16:11:55.000000000 -0700
+++ ./.hgtags 2010-11-06 22:59:28.000000000 -0700
@@ -91,3 +91,4 @@
27985a5c6e5268014d25d55886e0ecb96af4763d jdk7-b114
e8ebdf41b9c01a26642848f4134f5504e8fb3233 jdk7-b115
94e9a1bfba8b8d1fe0bfd43b88629b1f27b02a76 jdk7-b116
+7220e60b097fa027e922f1aeecdd330f3e37409f jdk7-b117
--- ./.jcheck/conf 2010-11-04 16:11:55.000000000 -0700
+++ ./.jcheck/conf 1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-project=jdk7
--- ./corba/.hgtags 2010-11-04 16:11:58.000000000 -0700
+++ ./corba/.hgtags 2010-11-06 22:59:32.000000000 -0700
@@ -91,3 +91,4 @@
88fddb73c5c4a4b50c319cbae9380caf5172ab45 jdk7-b114
da7561d479e0ddaa4650d8023ac0fc7294e014e3 jdk7-b115
98c028de4301106f2285ac0e128a1bb9b4c24f5c jdk7-b116
+fa502e4834dac2176499cc1f44794d5dc32a11b9 jdk7-b117
--- ./corba/.jcheck/conf 2010-11-04 16:11:58.000000000 -0700
+++ ./corba/.jcheck/conf 1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-project=jdk7
--- ./corba/make/common/Defs-bsd.gmk 2010-11-07 17:21:38.000000000 -0800
+++ ./corba/make/common/Defs-bsd.gmk 2010-10-31 14:11:33.000000000 -0700
@@ -25,9 +25,18 @@
#
# Makefile to specify compiler flags for programs and libraries
-# targeted to Bsd. Should not contain any rules.
+# targeted to BSD. Should not contain any rules.
#
+# 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 $(BUILDDIR)/common/shared/Defs.gmk
--- ./corba/make/common/Defs.gmk 2010-11-04 16:11:58.000000000 -0700
+++ ./corba/make/common/Defs.gmk 2010-10-31 14:08:26.000000000 -0700
@@ -53,6 +53,28 @@
_OUTPUTDIR=$(TOPDIR)/build/$(PLATFORM)-$(ARCH)
+ifneq ($(PLATFORM), windows)
+ 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
+ ifeq ($(PLATFORM), linux)
+ PACKAGE_PATH = /usr
+ else
+ ifeq ($(OS_VENDOR), Apple)
+ PACKAGE_PATH = /opt/local
+ else
+ PACKAGE_PATH = /usr/local
+ endif
+ endif
+ endif
+endif
+
#
# Get platform definitions
#
--- ./corba/make/common/shared/Defs-bsd.gmk 2010-11-07 17:21:38.000000000 -0800
+++ ./corba/make/common/shared/Defs-bsd.gmk 2010-10-31 14:10:12.000000000 -0700
@@ -54,7 +54,7 @@
endef
# Location on system where jdk installs might be
-USRJDKINSTANCES_PATH =/opt/java
+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.
@@ -99,7 +99,7 @@
ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined"
DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH))
else
- DEVTOOLS_PATH =/usr/bin/
+ DEVTOOLS_PATH =$(PACKAGE_PATH)/bin/
endif
# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK.
--- ./corba/make/common/shared/Defs-utils.gmk 2010-11-04 16:11:58.000000000 -0700
+++ ./corba/make/common/shared/Defs-utils.gmk 2010-10-31 13:48:36.000000000 -0700
@@ -53,6 +53,13 @@
UTILS_DEVTOOL_PATH=$(USRBIN_PATH)
endif
+ifeq ($(PLATFORM),bsd)
+ UTILS_COMMAND_PATH=$(UNIXCOMMAND_PATH)
+ UTILS_USR_BIN_PATH=$(USRBIN_PATH)
+ UTILS_CCS_BIN_PATH=$(USRBIN_PATH)
+ UTILS_DEVTOOL_PATH=$(DEVTOOLS_PATH)
+endif
+
ifeq ($(PLATFORM),solaris)
UTILS_COMMAND_PATH=$(UNIXCOMMAND_PATH)
UTILS_USR_BIN_PATH=$(UNIXCOMMAND_PATH)
@@ -198,3 +205,34 @@
ECHO = /usr/bin/echo
endif
+# BSD specific
+ifeq ($(PLATFORM),bsd)
+ BASENAME = $(UTILS_USR_BIN_PATH)basename
+ EGREP = $(UTILS_USR_BIN_PATH)egrep
+ EXPR = $(UTILS_COMMAND_PATH)expr
+ FMT = $(UTILS_USR_BIN_PATH)fmt
+ GREP = $(UTILS_USR_BIN_PATH)grep
+ GUNZIP = $(UTILS_USR_BIN_PATH)gunzip
+ ID = $(UTILS_USR_BIN_PATH)id
+ MSGFMT = $(UTILS_DEVTOOL_PATH)msgfmt
+ SED = $(UTILS_USR_BIN_PATH)sed
+ SORT = $(UTILS_USR_BIN_PATH)sort
+ TEST = $(UTILS_COMMAND_PATH)test
+ TOUCH = $(UTILS_USR_BIN_PATH)touch
+ TRUE = $(UTILS_USR_BIN_PATH)true
+ UNAME = $(UTILS_USR_BIN_PATH)uname
+ # BSD OS_VENDOR specific
+ ifeq ($(OS_VENDOR), Apple)
+ NAWK = $(UTILS_USR_BIN_PATH)awk
+ UNZIPSFX = $(UTILS_USR_BIN_PATH)unzipsfx
+ ZIPEXE = $(UTILS_USR_BIN_PATH)zip
+ else
+ UNZIP = $(UTILS_DEVTOOL_PATH)unzip
+ endif
+ ifeq ($(OS_VENDOR), OpenBSD)
+ NAWK = $(UTILS_USR_BIN_PATH)awk
+ else
+ CPIO = $(UTILS_USR_BIN_PATH)cpio
+ TAR = $(UTILS_USR_BIN_PATH)tar
+ endif
+endif
--- ./corba/make/common/shared/Platform.gmk 2010-11-04 16:11:58.000000000 -0700
+++ ./corba/make/common/shared/Platform.gmk 2010-10-31 14:05:41.000000000 -0700
@@ -231,6 +231,101 @@
MB_OF_MEMORY := $(shell free -m | fgrep Mem: | sed -e 's@\ \ *@ @g' | cut -d' ' -f2)
endif
+ifeq ($(SYSTEM_UNAME), FreeBSD)
+ PLATFORM = bsd
+ OS_NAME = freebsd
+ OS_VENDOR = FreeBSD
+ REQUIRED_OS_VERSION = 6.0
+endif
+
+ifeq ($(SYSTEM_UNAME), Darwin)
+ PLATFORM = bsd
+ OS_NAME = darwin
+ OS_VENDOR = Apple
+ REQUIRED_OS_VERSION = 8.0
+endif
+
+ifeq ($(SYSTEM_UNAME), NetBSD)
+ PLATFORM = bsd
+ OS_NAME = netbsd
+ OS_VENDOR = NetBSD
+ REQUIRED_OS_VERSION = 3.0
+endif
+
+ifeq ($(SYSTEM_UNAME), OpenBSD)
+ PLATFORM = bsd
+ OS_NAME = openbsd
+ OS_VENDOR = OpenBSD
+ REQUIRED_OS_VERSION = 4.2
+endif
+
+# Platform settings specific to BSD
+ifeq ($(PLATFORM), bsd)
+ OS_VERSION := $(shell uname -r)
+ # Arch and OS name/version
+ mach := $(shell uname -m)
+ archExpr = case "$(mach)" in \
+ i[3-9]86) \
+ echo i586 \
+ ;; \
+ sparc64) \
+ echo sparcv9 \
+ ;; \
+ sparc*) \
+ echo sparc \
+ ;; \
+ x86_64) \
+ echo amd64 \
+ ;; \
+ "Power Macintosh") \
+ echo ppc \
+ ;; \
+ *) \
+ echo $(mach) \
+ ;; \
+ esac
+ ARCH := $(shell $(archExpr) )
+ ARCH_FAMILY := $(ARCH)
+
+ # Darwin builds may be 32-bit or 64-bit data model.
+ ifeq ($(SYSTEM_UNAME), Darwin)
+ ifeq ($(ARCH), i586)
+ ifeq ($(ARCH_DATA_MODEL), 64)
+ ARCH=amd64
+ endif
+ endif
+ endif
+
+ # i586, sparc, and ppc are 32 bit, amd64 and sparc64 are 64
+ ifneq (,$(findstring $(ARCH), i586 sparc ppc))
+ 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
+ # Minimum disk space needed as determined by running 'du -sk' on
+ # a fully built workspace.
+ REQUIRED_FREE_SPACE=1500000
+ # How much RAM does this machine have:
+ ifeq ($(OS_VENDOR), OpenBSD)
+ MB_OF_MEMORY=$(shell sysctl -n hw.physmem | awk '{print int($$NF / 1048576); }' )
+ else
+ MB_OF_MEMORY=$(shell (sysctl -n hw.physmem64 2> /dev/null || sysctl -n hw.physmem) | awk '{print int($$NF / 1048576); }' )
+ endif
+endif
+
# Windows with and without CYGWIN will be slightly different
ifeq ($(SYSTEM_UNAME), Windows_NT)
PLATFORM = windows
@@ -381,6 +476,18 @@
export MAX_VM_MEMORY
endif
+# for OpenBSD/i386 limit to 736 max
+ifeq ($(OS_VENDOR), OpenBSD)
+ ifeq ($(ARCH_DATA_MODEL), 32)
+ MAX_VM_MEMORY := $(shell \
+ if [ $(MAX_VM_MEMORY) -gt 736 ] ; then \
+ echo "736"; \
+ else \
+ echo "$(MAX_VM_MEMORY)" ; \
+ fi)
+ endif
+endif
+
REQUIRED_ZIP_VER = 2.2
REQUIRED_UNZIP_VER = 5.12
REQUIRED_MAKE_VER = 3.78
--- ./hotspot/.hgtags 2010-11-04 16:12:12.000000000 -0700
+++ ./hotspot/.hgtags 2010-11-06 22:59:36.000000000 -0700
@@ -127,3 +127,4 @@
5511edd5d719f3fc9fdd04879482026a3d2c8652 hs20-b01
bdbc48857210a509b3c50a3291ecb9dd6a72e016 jdk7-b115
96b3f2a7add0b445b8aa421f6823cff5a2e2fe03 jdk7-b116
+806d0c037e6bbb88dac0699673f4ba55ee8c02da jdk7-b117
--- ./hotspot/.jcheck/conf 2010-11-04 16:12:12.000000000 -0700
+++ ./hotspot/.jcheck/conf 1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-project=jdk7
--- ./hotspot/agent/make/Makefile 2010-11-04 16:12:12.000000000 -0700
+++ ./hotspot/agent/make/Makefile 2010-06-15 22:03:11.000000000 -0700
@@ -52,6 +52,9 @@
sun.jvm.hotspot.compiler \
sun.jvm.hotspot.debugger \
sun.jvm.hotspot.debugger.amd64 \
+sun.jvm.hotspot.debugger.bsd \
+sun.jvm.hotspot.debugger.bsd.amd64 \
+sun.jvm.hotspot.debugger.bsd.x86 \
sun.jvm.hotspot.debugger.cdbg \
sun.jvm.hotspot.debugger.cdbg.basic \
sun.jvm.hotspot.debugger.cdbg.basic.amd64 \
@@ -94,6 +97,9 @@
sun.jvm.hotspot.oops \
sun.jvm.hotspot.runtime \
sun.jvm.hotspot.runtime.amd64 \
+sun.jvm.hotspot.runtime.bsd \
+sun.jvm.hotspot.runtime.bsd_amd64 \
+sun.jvm.hotspot.runtime.bsd_x86 \
sun.jvm.hotspot.runtime.ia64 \
sun.jvm.hotspot.runtime.linux \
sun.jvm.hotspot.runtime.linux_amd64 \
@@ -143,6 +149,8 @@
sun/jvm/hotspot/compiler/*.java \
sun/jvm/hotspot/debugger/*.java \
sun/jvm/hotspot/debugger/amd64/*.java \
+sun/jvm/hotspot/debugger/bsd/*.java \
+sun/jvm/hotspot/debugger/bsd/x86/*.java \
sun/jvm/hotspot/debugger/cdbg/*.java \
sun/jvm/hotspot/debugger/cdbg/basic/*.java \
sun/jvm/hotspot/debugger/cdbg/basic/amd64/*.java \
--- ./hotspot/agent/src/os/bsd/BsdDebuggerLocal.c 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/BsdDebuggerLocal.c 2010-07-04 09:30:36.000000000 -0700
@@ -22,6 +22,7 @@
*
*/
+#include <stdlib.h>
#include <jni.h>
#include "libproc.h"
@@ -73,7 +74,7 @@
(JNIEnv *env, jclass cls) {
jclass listClass;
- if (init_libproc(getenv("LIBSAPROC_DEBUG")) != true) {
+ if (init_libproc(getenv("LIBSAPROC_DEBUG") != NULL) != true) {
THROW_NEW_DEBUGGER_EXCEPTION("can't initialize libproc");
}
@@ -275,7 +276,7 @@
bufPtr = (*env)->GetByteArrayElements(env, array, &isCopy);
CHECK_EXCEPTION_(0);
- err = ps_pdread(get_proc_handle(env, this_obj), (psaddr_t) (uintptr_t)addr, bufPtr, numBytes);
+ err = ps_pread(get_proc_handle(env, this_obj), (psaddr_t) (uintptr_t)addr, bufPtr, numBytes);
(*env)->ReleaseByteArrayElements(env, array, bufPtr, 0);
return (err == PS_OK)? array : 0;
}
@@ -283,11 +284,10 @@
JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_getThreadIntegerRegisterSet0
(JNIEnv *env, jobject this_obj, jint lwp_id) {
- struct user_regs_struct gregs;
+ struct reg gregs;
jboolean isCopy;
jlongArray array;
jlong *regs;
- int i;
struct ps_prochandle* ph = get_proc_handle(env, this_obj);
if (get_lwp_regs(ph, lwp_id, &gregs) != true) {
@@ -317,26 +317,27 @@
#ifdef i386
#define REG_INDEX(reg) sun_jvm_hotspot_debugger_x86_X86ThreadContext_##reg
- regs[REG_INDEX(GS)] = (uintptr_t) gregs.xgs;
- regs[REG_INDEX(FS)] = (uintptr_t) gregs.xfs;
- regs[REG_INDEX(ES)] = (uintptr_t) gregs.xes;
- regs[REG_INDEX(DS)] = (uintptr_t) gregs.xds;
- regs[REG_INDEX(EDI)] = (uintptr_t) gregs.edi;
- regs[REG_INDEX(ESI)] = (uintptr_t) gregs.esi;
- regs[REG_INDEX(FP)] = (uintptr_t) gregs.ebp;
- regs[REG_INDEX(SP)] = (uintptr_t) gregs.esp;
- regs[REG_INDEX(EBX)] = (uintptr_t) gregs.ebx;
- regs[REG_INDEX(EDX)] = (uintptr_t) gregs.edx;
- regs[REG_INDEX(ECX)] = (uintptr_t) gregs.ecx;
- regs[REG_INDEX(EAX)] = (uintptr_t) gregs.eax;
- regs[REG_INDEX(PC)] = (uintptr_t) gregs.eip;
- regs[REG_INDEX(CS)] = (uintptr_t) gregs.xcs;
- regs[REG_INDEX(SS)] = (uintptr_t) gregs.xss;
+ regs[REG_INDEX(GS)] = (uintptr_t) gregs.r_gs;
+ regs[REG_INDEX(FS)] = (uintptr_t) gregs.r_fs;
+ regs[REG_INDEX(ES)] = (uintptr_t) gregs.r_es;
+ regs[REG_INDEX(DS)] = (uintptr_t) gregs.r_ds;
+ regs[REG_INDEX(EDI)] = (uintptr_t) gregs.r_edi;
+ regs[REG_INDEX(ESI)] = (uintptr_t) gregs.r_esi;
+ regs[REG_INDEX(FP)] = (uintptr_t) gregs.r_ebp;
+ regs[REG_INDEX(SP)] = (uintptr_t) gregs.r_isp;
+ regs[REG_INDEX(EBX)] = (uintptr_t) gregs.r_ebx;
+ regs[REG_INDEX(EDX)] = (uintptr_t) gregs.r_edx;
+ regs[REG_INDEX(ECX)] = (uintptr_t) gregs.r_ecx;
+ regs[REG_INDEX(EAX)] = (uintptr_t) gregs.r_eax;
+ regs[REG_INDEX(PC)] = (uintptr_t) gregs.r_eip;
+ regs[REG_INDEX(CS)] = (uintptr_t) gregs.r_cs;
+ regs[REG_INDEX(SS)] = (uintptr_t) gregs.r_ss;
#endif /* i386 */
#if ia64
regs = (*env)->GetLongArrayElements(env, array, &isCopy);
+ int i;
for (i = 0; i < NPRGREG; i++ ) {
regs[i] = 0xDEADDEAD;
}
@@ -345,31 +346,31 @@
#ifdef amd64
#define REG_INDEX(reg) sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_##reg
- regs[REG_INDEX(R15)] = gregs.r15;
- regs[REG_INDEX(R14)] = gregs.r14;
- regs[REG_INDEX(R13)] = gregs.r13;
- regs[REG_INDEX(R12)] = gregs.r12;
- regs[REG_INDEX(RBP)] = gregs.rbp;
- regs[REG_INDEX(RBX)] = gregs.rbx;
- regs[REG_INDEX(R11)] = gregs.r11;
- regs[REG_INDEX(R10)] = gregs.r10;
- regs[REG_INDEX(R9)] = gregs.r9;
- regs[REG_INDEX(R8)] = gregs.r8;
- regs[REG_INDEX(RAX)] = gregs.rax;
- regs[REG_INDEX(RCX)] = gregs.rcx;
- regs[REG_INDEX(RDX)] = gregs.rdx;
- regs[REG_INDEX(RSI)] = gregs.rsi;
- regs[REG_INDEX(RDI)] = gregs.rdi;
- regs[REG_INDEX(RIP)] = gregs.rip;
- regs[REG_INDEX(CS)] = gregs.cs;
- regs[REG_INDEX(RSP)] = gregs.rsp;
- regs[REG_INDEX(SS)] = gregs.ss;
- regs[REG_INDEX(FSBASE)] = gregs.fs_base;
- regs[REG_INDEX(GSBASE)] = gregs.gs_base;
- regs[REG_INDEX(DS)] = gregs.ds;
- regs[REG_INDEX(ES)] = gregs.es;
- regs[REG_INDEX(FS)] = gregs.fs;
- regs[REG_INDEX(GS)] = gregs.gs;
+ regs[REG_INDEX(R15)] = gregs.r_r15;
+ regs[REG_INDEX(R14)] = gregs.r_r14;
+ regs[REG_INDEX(R13)] = gregs.r_r13;
+ regs[REG_INDEX(R12)] = gregs.r_r12;
+ regs[REG_INDEX(RBP)] = gregs.r_rbp;
+ regs[REG_INDEX(RBX)] = gregs.r_rbx;
+ regs[REG_INDEX(R11)] = gregs.r_r11;
+ regs[REG_INDEX(R10)] = gregs.r_r10;
+ regs[REG_INDEX(R9)] = gregs.r_r9;
+ regs[REG_INDEX(R8)] = gregs.r_r8;
+ regs[REG_INDEX(RAX)] = gregs.r_rax;
+ regs[REG_INDEX(RCX)] = gregs.r_rcx;
+ regs[REG_INDEX(RDX)] = gregs.r_rdx;
+ regs[REG_INDEX(RSI)] = gregs.r_rsi;
+ regs[REG_INDEX(RDI)] = gregs.r_rdi;
+ regs[REG_INDEX(RIP)] = gregs.r_rip;
+ regs[REG_INDEX(CS)] = gregs.r_cs;
+ regs[REG_INDEX(RSP)] = gregs.r_rsp;
+ regs[REG_INDEX(SS)] = gregs.r_ss;
+// regs[REG_INDEX(FSBASE)] = gregs.fs_base;
+// regs[REG_INDEX(GSBASE)] = gregs.gs_base;
+// regs[REG_INDEX(DS)] = gregs.ds;
+// regs[REG_INDEX(ES)] = gregs.es;
+// regs[REG_INDEX(FS)] = gregs.fs;
+// regs[REG_INDEX(GS)] = gregs.gs;
#endif /* amd64 */
--- ./hotspot/agent/src/os/bsd/Makefile 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/Makefile 2010-07-04 09:45:58.000000000 -0700
@@ -22,7 +22,7 @@
#
#
-ARCH := $(shell if ([ `uname -m` = "ia64" ]) ; then echo ia64 ; elif ([ `uname -m` = "x86_64" ]) ; then echo amd64; elif ([ `uname -m` = "sparc64" ]) ; then echo sparc; else echo i386 ; fi )
+ARCH := $(shell if ([ `uname -m` = "ia64" ]) ; then echo ia64 ; elif ([ `uname -m` = "amd64" ]) ; then echo amd64; elif ([ `uname -m` = "sparc64" ]) ; then echo sparc; else echo i386 ; fi )
GCC = gcc
JAVAH = ${JAVA_HOME}/bin/javah
@@ -32,25 +32,25 @@
libproc_impl.c \
ps_proc.c \
ps_core.c \
- BsdDebuggerLocal.c
+ hsearch_r.c \
+ BsdDebuggerLocal.c
-INCLUDES = -I${JAVA_HOME}/include -I${JAVA_HOME}/include/bsd
+INCLUDES = -I${JAVA_HOME}/include -I${JAVA_HOME}/include/$(shell uname -s | tr "[:upper:]" "[:lower:]")
OBJS = $(SOURCES:.c=.o)
-LIBS = -lthread_db
+LIBS = -lutil -lthread_db
-CFLAGS = -c -fPIC -g -D_GNU_SOURCE -D$(ARCH) $(INCLUDES)
+CFLAGS = -c -fPIC -g -Wall -D_ALLBSD_SOURCE -D_GNU_SOURCE -D$(ARCH) $(INCLUDES)
LIBSA = $(ARCH)/libsaproc.so
all: $(LIBSA)
BsdDebuggerLocal.o: BsdDebuggerLocal.c
- $(JAVAH) -jni -classpath ../../../build/classes \
+ $(JAVAH) -jni -classpath ../../../../../build/bsd-i586/hotspot/outputdir/bsd_i486_compiler2/generated/saclasses \
sun.jvm.hotspot.debugger.x86.X86ThreadContext \
- sun.jvm.hotspot.debugger.sparc.SPARCThreadContext \
- sun.jvm.hotspot.debugger.amd64.AMD64ThreadContext
+ sun.jvm.hotspot.debugger.amd64.AMD64ThreadContext
$(GCC) $(CFLAGS) $<
.c.obj:
@@ -60,26 +60,19 @@
LFLAGS_LIBSA = -Xlinker --version-script=mapfile
endif
-# If this is a --hash-style=gnu system, use --hash-style=both
-# The gnu .hash section won't work on some Bsd 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
-LFLAGS_LIBSA += $(LDFLAGS_HASH_STYLE)
-
$(LIBSA): $(OBJS) mapfile
if [ ! -d $(ARCH) ] ; then mkdir $(ARCH) ; fi
$(GCC) -shared $(LFLAGS_LIBSA) -o $(LIBSA) $(OBJS) $(LIBS)
-test.o: test.c
+test.o: $(LIBSA) test.c
$(GCC) -c -o test.o -g -D_GNU_SOURCE -D$(ARCH) $(INCLUDES) test.c
test: test.o
$(GCC) -o test test.o -L$(ARCH) -lsaproc $(LIBS)
clean:
- rm -rf $(LIBSA)
- rm -rf $(OBJS)
- rmdir $(ARCH)
+ rm -f $(LIBSA)
+ rm -f $(OBJS)
+ rm -f test.o
+ -rmdir $(ARCH)
--- ./hotspot/agent/src/os/bsd/StubDebuggerLocal.c 1969-12-31 16:00:00.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/StubDebuggerLocal.c 2009-06-06 16:53:52.000000000 -0700
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
+#include <stdlib.h>
+#include <jni.h>
+
+#define CHECK_EXCEPTION_(value) if ((*env)->ExceptionOccurred(env)) { return value; }
+#define CHECK_EXCEPTION if ((*env)->ExceptionOccurred(env)) { return;}
+#define THROW_NEW_DEBUGGER_EXCEPTION_(str, value) { throw_new_debugger_exception(env, str); return value; }
+#define THROW_NEW_DEBUGGER_EXCEPTION(str) { throw_new_debugger_exception(env, str); return;}
+
+static void throw_new_debugger_exception(JNIEnv* env, const char* errMsg) {
+ (*env)->ThrowNew(env, (*env)->FindClass(env, "sun/jvm/hotspot/debugger/DebuggerException"), errMsg);
+}
+
+/*
+ * Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
+ * Method: init0
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_init0
+ (JNIEnv *env, jclass cls) {
+}
+
+JNIEXPORT jint JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_getAddressSize
+ (JNIEnv *env, jclass cls)
+{
+#ifdef _LP64
+ return 8;
+#else
+ return 4;
+#endif
+
+}
+
+/*
+ * Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
+ * Method: attach0
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_attach0__I
+ (JNIEnv *env, jobject this_obj, jint jpid) {
+
+ THROW_NEW_DEBUGGER_EXCEPTION("Can't attach to the process");
+}
+
+/*
+ * Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
+ * Method: attach0
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_attach0__Ljava_lang_String_2Ljava_lang_String_2
+ (JNIEnv *env, jobject this_obj, jstring execName, jstring coreName) {
+ THROW_NEW_DEBUGGER_EXCEPTION("Can't attach to the core file");
+}
+
+/*
+ * Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
+ * Method: detach0
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_detach0
+ (JNIEnv *env, jobject this_obj) {
+}
+
+/*
+ * Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
+ * Method: lookupByName0
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByName0
+ (JNIEnv *env, jobject this_obj, jstring objectName, jstring symbolName) {
+ return 0;
+}
+
+/*
+ * Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
+ * Method: lookupByAddress0
+ * Signature: (J)Lsun/jvm/hotspot/debugger/cdbg/ClosestSymbol;
+ */
+JNIEXPORT jobject JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByAddress0
+ (JNIEnv *env, jobject this_obj, jlong addr) {
+ return 0;
+}
+
+/*
+ * Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
+ * Method: readBytesFromProcess0
+ * Signature: (JJ)Lsun/jvm/hotspot/debugger/ReadResult;
+ */
+JNIEXPORT jbyteArray JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_readBytesFromProcess0
+ (JNIEnv *env, jobject this_obj, jlong addr, jlong numBytes) {
+ return 0;
+}
+
+JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_getThreadIntegerRegisterSet0
+ (JNIEnv *env, jobject this_obj, jint lwp_id) {
+ return 0;
+}
--- ./hotspot/agent/src/os/bsd/elfmacros.h 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/elfmacros.h 2010-07-04 09:30:36.000000000 -0700
@@ -25,16 +25,19 @@
#ifndef _ELFMACROS_H_
#define _ELFMACROS_H_
+#define ELF_NHDR Elf_Note
+
#if defined(_LP64)
#define ELF_EHDR Elf64_Ehdr
#define ELF_SHDR Elf64_Shdr
#define ELF_PHDR Elf64_Phdr
#define ELF_SYM Elf64_Sym
-#define ELF_NHDR Elf64_Nhdr
#define ELF_DYN Elf64_Dyn
#define ELF_ADDR Elf64_Addr
+#ifndef ELF_ST_TYPE
#define ELF_ST_TYPE ELF64_ST_TYPE
+#endif
#else
@@ -42,11 +45,12 @@
#define ELF_SHDR Elf32_Shdr
#define ELF_PHDR Elf32_Phdr
#define ELF_SYM Elf32_Sym
-#define ELF_NHDR Elf32_Nhdr
#define ELF_DYN Elf32_Dyn
#define ELF_ADDR Elf32_Addr
+#ifndef ELF_ST_TYPE
#define ELF_ST_TYPE ELF32_ST_TYPE
+#endif
#endif
--- ./hotspot/agent/src/os/bsd/hsearch_r.c 1969-12-31 16:00:00.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/hsearch_r.c 2009-06-06 16:53:52.000000000 -0700
@@ -0,0 +1,217 @@
+/* Copyright (C) 1993,1995-1997,2002,2005,2007,2008
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1993.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <search.h>
+
+#include "hsearch_r.h"
+
+#define __set_errno(ERRNO) errno = ERRNO
+
+/* [Aho,Sethi,Ullman] Compilers: Principles, Techniques and Tools, 1986
+ [Knuth] The Art of Computer Programming, part 3 (6.4) */
+
+
+/* The reentrant version has no static variables to maintain the state.
+ Instead the interface of all functions is extended to take an argument
+ which describes the current status. */
+typedef struct _ENTRY
+{
+ unsigned int used;
+ ENTRY entry;
+}
+_ENTRY;
+
+
+/* For the used double hash method the table size has to be a prime. To
+ correct the user given table size we need a prime test. This trivial
+ algorithm is adequate because
+ a) the code is (most probably) called a few times per program run and
+ b) the number is small because the table must fit in the core */
+static int
+isprime (unsigned int number)
+{
+ /* no even number will be passed */
+ unsigned int div = 3;
+
+ while (div * div < number && number % div != 0)
+ div += 2;
+
+ return number % div != 0;
+}
+
+
+/* Before using the hash table we must allocate memory for it.
+ Test for an existing table are done. We allocate one element
+ more as the found prime number says. This is done for more effective
+ indexing as explained in the comment for the hsearch function.
+ The contents of the table is zeroed, especially the field used
+ becomes zero. */
+int
+hcreate_r (size_t nel, struct hsearch_data *htab)
+{
+ /* Test for correct arguments. */
+ if (htab == NULL)
+ {
+ __set_errno (EINVAL);
+ return 0;
+ }
+
+ /* There is still another table active. Return with error. */
+ if (htab->table != NULL)
+ return 0;
+
+ /* Change nel to the first prime number not smaller as nel. */
+ nel |= 1; /* make odd */
+ while (!isprime (nel))
+ nel += 2;
+
+ htab->size = nel;
+ htab->filled = 0;
+
+ /* allocate memory and zero out */
+ htab->table = (_ENTRY *) calloc (htab->size + 1, sizeof (_ENTRY));
+ if (htab->table == NULL)
+ return 0;
+
+ /* everything went alright */
+ return 1;
+}
+
+
+/* After using the hash table it has to be destroyed. The used memory can
+ be freed and the local static variable can be marked as not used. */
+void
+hdestroy_r (struct hsearch_data *htab)
+{
+ /* Test for correct arguments. */
+ if (htab == NULL)
+ {
+ __set_errno (EINVAL);
+ return;
+ }
+
+ /* Free used memory. */
+ free (htab->table);
+
+ /* the sign for an existing table is an value != NULL in htable */
+ htab->table = NULL;
+}
+
+
+/* This is the search function. It uses double hashing with open addressing.
+ The argument item.key has to be a pointer to an zero terminated, most
+ probably strings of chars. The function for generating a number of the
+ strings is simple but fast. It can be replaced by a more complex function
+ like ajw (see [Aho,Sethi,Ullman]) if the needs are shown.
+
+ We use an trick to speed up the lookup. The table is created by hcreate
+ with one more element available. This enables us to use the index zero
+ special. This index will never be used because we store the first hash
+ index in the field used where zero means not used. Every other value
+ means used. The used field can be used as a first fast comparison for
+ equality of the stored and the parameter value. This helps to prevent
+ unnecessary expensive calls of strcmp. */
+int
+hsearch_r (ENTRY item, ACTION action, ENTRY **retval, struct hsearch_data *htab)
+{
+ unsigned int hval;
+ unsigned int count;
+ unsigned int len = strlen (item.key);
+ unsigned int idx;
+
+ /* Compute an value for the given string. Perhaps use a better method. */
+ hval = len;
+ count = len;
+ while (count-- > 0)
+ {
+ hval <<= 4;
+ hval += item.key[count];
+ }
+
+ /* First hash function: simply take the modul but prevent zero. */
+ idx = hval % htab->size + 1;
+
+ if (htab->table[idx].used)
+ {
+ /* Further action might be required according to the action value. */
+ if (htab->table[idx].used == hval
+ && strcmp (item.key, htab->table[idx].entry.key) == 0)
+ {
+ *retval = &htab->table[idx].entry;
+ return 1;
+ }
+
+ /* Second hash function, as suggested in [Knuth] */
+ unsigned int hval2 = 1 + hval % (htab->size - 2);
+ unsigned int first_idx = idx;
+
+ do
+ {
+ /* Because SIZE is prime this guarantees to step through all
+ available indeces. */
+ if (idx <= hval2)
+ idx = htab->size + idx - hval2;
+ else
+ idx -= hval2;
+
+ /* If we visited all entries leave the loop unsuccessfully. */
+ if (idx == first_idx)
+ break;
+
+ /* If entry is found use it. */
+ if (htab->table[idx].used == hval
+ && strcmp (item.key, htab->table[idx].entry.key) == 0)
+ {
+ *retval = &htab->table[idx].entry;
+ return 1;
+ }
+ }
+ while (htab->table[idx].used);
+ }
+
+ /* An empty bucket has been found. */
+ if (action == ENTER)
+ {
+ /* If table is full and another entry should be entered return
+ with error. */
+ if (htab->filled == htab->size)
+ {
+ __set_errno (ENOMEM);
+ *retval = NULL;
+ return 0;
+ }
+
+ htab->table[idx].used = hval;
+ htab->table[idx].entry = item;
+
+ ++htab->filled;
+
+ *retval = &htab->table[idx].entry;
+ return 1;
+ }
+
+ __set_errno (ESRCH);
+ *retval = NULL;
+ return 0;
+}
--- ./hotspot/agent/src/os/bsd/hsearch_r.h 1969-12-31 16:00:00.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/hsearch_r.h 2009-06-06 16:53:52.000000000 -0700
@@ -0,0 +1,42 @@
+/* Declarations for System V style searching functions.
+ Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#ifndef _HSEARCH_R_H_
+#define _HSEARCH_R_H_
+
+#include <search.h>
+
+struct _ENTRY;
+
+/* Data type for reentrant functions. */
+struct hsearch_data
+ {
+ struct _ENTRY *table;
+ unsigned int size;
+ unsigned int filled;
+ };
+
+/* Reentrant versions which can handle multiple hashing tables at the
+ same time. */
+extern int hsearch_r (ENTRY __item, ACTION __action, ENTRY **__retval,
+ struct hsearch_data *__htab);
+extern int hcreate_r (size_t __nel, struct hsearch_data *__htab);
+extern void hdestroy_r (struct hsearch_data *__htab);
+
+#endif /* _HSEARCH_R_H_ */
--- ./hotspot/agent/src/os/bsd/libproc.h 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/libproc.h 2010-07-04 09:30:36.000000000 -0700
@@ -27,7 +27,8 @@
#include <unistd.h>
#include <stdint.h>
-#include "proc_service.h"
+#include <machine/reg.h>
+#include <proc_service.h>
#if defined(sparc) || defined(sparcv9)
/*
@@ -50,14 +51,11 @@
adds Pgrab__ and some missing stuff. We hide the difference b/w live process and core
file by this interface.
-1. pthread_id unique in both NPTL & BsdThreads. We store this in
-OSThread::_pthread_id in JVM code.
+1. pthread_id is unique. We store this in OSThread::_pthread_id in JVM code.
-2. All threads see the same pid when they call getpid() under NPTL.
-Threads receive different pid under BsdThreads. We used to save the result of
-::getpid() call in OSThread::_thread_id. This way uniqueness of OSThread::_thread_id
-was lost under NPTL. Now, we store the result of ::gettid() call in
-OSThread::_thread_id. Because gettid returns actual pid of thread (lwp id), this is
+2. All threads see the same pid when they call getpid().
+We used to save the result of ::getpid() call in OSThread::_thread_id.
+Because gettid returns actual pid of thread (lwp id), this is
unique again. We therefore use OSThread::_thread_id as unique identifier.
3. There is a unique LWP id under both thread libraries. libthread_db maps pthread_id
@@ -74,20 +72,7 @@
*************************************************************************************/
-#ifdef ia64
-struct user_regs_struct {
-/* copied from user.h which doesn't define this in a struct */
-
-#define IA64_REG_COUNT (EF_SIZE/8+32) /* integer and fp regs */
-unsigned long regs[IA64_REG_COUNT]; /* integer and fp regs */
-};
-#endif
-
-#if defined(sparc) || defined(sparcv9)
-#define user_regs_struct pt_regs
-#endif
-
-// This C bool type must be int for compatibility with Bsd calls and
+// This C bool type must be int for compatibility with BSD calls and
// it would be a mistake to equivalence it to C++ bool on many platforms
typedef int bool;
@@ -118,7 +103,7 @@
lwpid_t get_lwp_id(struct ps_prochandle* ph, int index);
// get regs for a given lwp
-bool get_lwp_regs(struct ps_prochandle* ph, lwpid_t lid, struct user_regs_struct* regs);
+bool get_lwp_regs(struct ps_prochandle* ph, lwpid_t lid, struct reg* regs);
// get number of shared objects
int get_num_libs(struct ps_prochandle* ph);
--- ./hotspot/agent/src/os/bsd/libproc_impl.c 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/libproc_impl.c 2010-07-04 09:30:37.000000000 -0700
@@ -174,10 +174,13 @@
return NULL;
}
- newlib->symtab = build_symtab(newlib->fd, libname);
+ newlib->symtab = build_symtab(newlib->fd);
if (newlib->symtab == NULL) {
print_debug("symbol table build failed for %s\n", newlib->name);
}
+ else {
+ print_debug("built symbol table for %s\n", newlib->name);
+ }
// even if symbol table building fails, we add the lib_info.
// This is because we may need to read from the ELF file for core file
@@ -272,7 +275,7 @@
print_debug("thread_db : pthread %d (lwp %d)\n", ti.ti_tid, ti.ti_lid);
- if (ptr->callback(ptr->ph, ti.ti_tid, ti.ti_lid) != true)
+ if (ptr->callback(ptr->ph, (pthread_t)ti.ti_tid, ti.ti_lid) != true)
return TD_ERR;
return TD_OK;
@@ -324,7 +327,7 @@
}
// get regs for a given lwp
-bool get_lwp_regs(struct ps_prochandle* ph, lwpid_t lwp_id, struct user_regs_struct* regs) {
+bool get_lwp_regs(struct ps_prochandle* ph, lwpid_t lwp_id, struct reg* regs) {
return ph->ops->get_lwp_regs(ph, lwp_id, regs);
}
@@ -375,11 +378,6 @@
//--------------------------------------------------------------------------
// proc service functions
-// get process id
-pid_t ps_getpid(struct ps_prochandle *ph) {
- return ph->pid;
-}
-
// ps_pglobal_lookup() looks up the symbol sym_name in the symbol table
// of the load object object_name in the target process identified by ph.
// It returns the symbol's value as an address in the target process in
@@ -392,17 +390,33 @@
}
// read "size" bytes info "buf" from address "addr"
-ps_err_e ps_pdread(struct ps_prochandle *ph, psaddr_t addr,
- void *buf, size_t size) {
+ps_err_e ps_pread(struct ps_prochandle *ph, psaddr_t addr,
+ void *buf, size_t size) {
return ph->ops->p_pread(ph, (uintptr_t) addr, buf, size)? PS_OK: PS_ERR;
}
// write "size" bytes of data to debuggee at address "addr"
-ps_err_e ps_pdwrite(struct ps_prochandle *ph, psaddr_t addr,
- const void *buf, size_t size) {
+ps_err_e ps_pwrite(struct ps_prochandle *ph, psaddr_t addr,
+ const void *buf, size_t size) {
return ph->ops->p_pwrite(ph, (uintptr_t)addr, buf, size)? PS_OK: PS_ERR;
}
+// fill in ptrace_lwpinfo for lid
+ps_err_e ps_linfo(struct ps_prochandle *ph, lwpid_t lwp_id, void *linfo) {
+ return ph->ops->get_lwp_info(ph, lwp_id, linfo)? PS_OK: PS_ERR;
+}
+
+// needed for when libthread_db is compiled with TD_DEBUG defined
+void
+ps_plog (const char *format, ...)
+{
+ va_list alist;
+
+ va_start(alist, format);
+ vfprintf(stderr, format, alist);
+ va_end(alist);
+}
+
// ------------------------------------------------------------------------
// Functions below this point are not yet implemented. They are here only
// to make the linker happy.
@@ -427,8 +441,12 @@
return PS_OK;
}
-// new libthread_db of NPTL seem to require this symbol
-ps_err_e ps_get_thread_area() {
- print_debug("ps_get_thread_area not implemented\n");
+ps_err_e ps_lstop(struct ps_prochandle *ph, lwpid_t lid) {
+ print_debug("ps_lstop not implemented\n");
+ return PS_OK;
+}
+
+ps_err_e ps_pcontinue(struct ps_prochandle *ph) {
+ print_debug("ps_pcontinue not implemented\n");
return PS_OK;
}
--- ./hotspot/agent/src/os/bsd/libproc_impl.h 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/libproc_impl.h 2010-07-04 09:30:37.000000000 -0700
@@ -47,7 +47,7 @@
typedef struct thread_info {
lwpid_t lwp_id;
pthread_t pthread_id; // not used cores, always -1
- struct user_regs_struct regs; // not for process, core uses for caching regset
+ struct reg regs; // not for process, core uses for caching regset
struct thread_info* next;
} thread_info;
@@ -71,7 +71,9 @@
bool (*p_pwrite)(struct ps_prochandle *ph,
uintptr_t addr, const char *buf , size_t size);
// get integer regset of a thread
- bool (*get_lwp_regs)(struct ps_prochandle* ph, lwpid_t lwp_id, struct user_regs_struct* regs);
+ bool (*get_lwp_regs)(struct ps_prochandle* ph, lwpid_t lwp_id, struct reg* regs);
+ // get info on thread
+ bool (*get_lwp_info)(struct ps_prochandle *ph, lwpid_t lwp_id, void *linfo);
} ps_prochandle_ops;
// the ps_prochandle
@@ -79,7 +81,7 @@
struct core_data {
int core_fd; // file descriptor of core file
int exec_fd; // file descriptor of exec file
- int interp_fd; // file descriptor of interpreter (ld-bsd.so.2)
+ int interp_fd; // file descriptor of interpreter (ld-elf.so.1)
// part of the class sharing workaround
int classes_jsa_fd; // file descriptor of class share archive
uintptr_t dynamic_addr; // address of dynamic section of a.out
--- ./hotspot/agent/src/os/bsd/mapfile 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/mapfile 2010-07-04 09:30:37.000000000 -0700
@@ -43,13 +43,17 @@
# proc_service.h functions - to be used by libthread_db
ps_getpid;
ps_pglobal_lookup;
- ps_pdread;
- ps_pdwrite;
+ ps_pread;
+ ps_pwrite;
ps_lsetfpregs;
ps_lsetregs;
ps_lgetfpregs;
ps_lgetregs;
- ps_get_thread_area;
+ ps_lcontinue;
+ ps_lgetxmmregs;
+ ps_lsetxmmregs;
+ ps_lstop;
+ ps_linfo;
# used by attach test program
init_libproc;
--- ./hotspot/agent/src/os/bsd/proc_service.h 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/proc_service.h 1969-12-31 16:00:00.000000000 -0800
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2003, 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 _PROC_SERVICE_H_
-#define _PROC_SERVICE_H_
-
-#include <stdio.h>
-#include <thread_db.h>
-
-// Bsd does not have the proc service library, though it does provide the
-// thread_db library which can be used to manipulate threads without having
-// to know the details of BsdThreads or NPTL
-
-// copied from Solaris "proc_service.h"
-typedef enum {
- PS_OK, /* generic "call succeeded" */
- PS_ERR, /* generic error */
- PS_BADPID, /* bad process handle */
- PS_BADLID, /* bad lwp identifier */
- PS_BADADDR, /* bad address */
- PS_NOSYM, /* p_lookup() could not find given symbol */
- PS_NOFREGS /* FPU register set not available for given lwp */
-} ps_err_e;
-
-// ps_getpid() is only defined on Bsd to return a thread's process ID
-pid_t ps_getpid(struct ps_prochandle *ph);
-
-// ps_pglobal_lookup() looks up the symbol sym_name in the symbol table
-// of the load object object_name in the target process identified by ph.
-// It returns the symbol's value as an address in the target process in
-// *sym_addr.
-
-ps_err_e ps_pglobal_lookup(struct ps_prochandle *ph, const char *object_name,
- const char *sym_name, psaddr_t *sym_addr);
-
-// read "size" bytes of data from debuggee at address "addr"
-ps_err_e ps_pdread(struct ps_prochandle *ph, psaddr_t addr,
- void *buf, size_t size);
-
-// write "size" bytes of data to debuggee at address "addr"
-ps_err_e ps_pdwrite(struct ps_prochandle *ph, psaddr_t addr,
- const void *buf, size_t size);
-
-ps_err_e ps_lsetfpregs(struct ps_prochandle *ph, lwpid_t lid, const prfpregset_t *fpregs);
-
-ps_err_e ps_lsetregs(struct ps_prochandle *ph, lwpid_t lid, const prgregset_t gregset);
-
-ps_err_e ps_lgetfpregs(struct ps_prochandle *ph, lwpid_t lid, prfpregset_t *fpregs);
-
-ps_err_e ps_lgetregs(struct ps_prochandle *ph, lwpid_t lid, prgregset_t gregset);
-
-// new libthread_db of NPTL seem to require this symbol
-ps_err_e ps_get_thread_area();
-
-#endif /* _PROC_SERVICE_H_ */
--- ./hotspot/agent/src/os/bsd/ps_core.c 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/ps_core.c 2010-07-04 09:30:46.000000000 -0700
@@ -142,6 +142,7 @@
map->next = ph->core->class_share_maps;
ph->core->class_share_maps = map;
+ return map;
}
// Return the map_info for the given virtual address. We keep a sorted
@@ -228,8 +229,8 @@
// 4991491 NOTICE These are C++ bool's in filemap.hpp and must match up with
// the C type matching the C++ bool type on any given platform. For
- // Hotspot on Bsd we assume the corresponding C type is char but
- // licensees on Bsd versions may need to adjust the type of these fields.
+ // Hotspot on BSD we assume the corresponding C type is char but
+ // licensees on BSD versions may need to adjust the type of these fields.
char _read_only; // read only space?
char _allow_exec; // executable code in space?
@@ -240,7 +241,7 @@
static bool read_jboolean(struct ps_prochandle* ph, uintptr_t addr, jboolean* pvalue) {
jboolean i;
- if (ps_pdread(ph, (psaddr_t) addr, &i, sizeof(i)) == PS_OK) {
+ if (ps_pread(ph, (psaddr_t) addr, &i, sizeof(i)) == PS_OK) {
*pvalue = i;
return true;
} else {
@@ -250,7 +251,7 @@
static bool read_pointer(struct ps_prochandle* ph, uintptr_t addr, uintptr_t* pvalue) {
uintptr_t uip;
- if (ps_pdread(ph, (psaddr_t) addr, &uip, sizeof(uip)) == PS_OK) {
+ if (ps_pread(ph, (psaddr_t) addr, &uip, sizeof(uip)) == PS_OK) {
*pvalue = uip;
return true;
} else {
@@ -264,7 +265,7 @@
char c = ' ';
while (c != '\0') {
- if (ps_pdread(ph, (psaddr_t) addr, &c, sizeof(char)) != PS_OK)
+ if (ps_pread(ph, (psaddr_t) addr, &c, sizeof(char)) != PS_OK)
return false;
if (i < size - 1)
buf[i] = c;
@@ -296,7 +297,6 @@
uintptr_t base = 0, useSharedSpacesAddr = 0;
uintptr_t sharedArchivePathAddrAddr = 0, sharedArchivePathAddr = 0;
jboolean useSharedSpaces = 0;
- map_info* mi = 0;
memset(classes_jsa, 0, sizeof(classes_jsa));
jvm_name = lib->name;
@@ -306,9 +306,9 @@
return false;
}
- // Hotspot vm types are not exported to build this library. So
- // using equivalent type jboolean to read the value of
- // UseSharedSpaces which is same as hotspot type "bool".
+ // Hotspot vm types are not exported to build this library. So
+ // using equivalent type jboolean to read the value of
+ // UseSharedSpaces which is same as hotspot type "bool".
if (read_jboolean(ph, useSharedSpacesAddr, &useSharedSpaces) != true) {
print_debug("can't read the value of 'UseSharedSpaces' flag\n");
return false;
@@ -507,12 +507,12 @@
}
static bool core_get_lwp_regs(struct ps_prochandle* ph, lwpid_t lwp_id,
- struct user_regs_struct* regs) {
+ struct reg* regs) {
// for core we have cached the lwp regs from NOTE section
thread_info* thr = ph->threads;
while (thr) {
if (thr->lwp_id == lwp_id) {
- memcpy(regs, &thr->regs, sizeof(struct user_regs_struct));
+ memcpy(regs, &thr->regs, sizeof(struct reg));
return true;
}
thr = thr->next;
@@ -520,11 +520,17 @@
return false;
}
+static bool core_get_lwp_info(struct ps_prochandle *ph, lwpid_t lwp_id, void *linfo) {
+ print_debug("core_get_lwp_info not implemented\n");
+ return false;
+}
+
static ps_prochandle_ops core_ops = {
.release= core_release,
.p_pread= core_read_data,
.p_pwrite= core_write_data,
- .get_lwp_regs= core_get_lwp_regs
+ .get_lwp_regs= core_get_lwp_regs,
+ .get_lwp_info= core_get_lwp_info
};
// read regs and create thread from NT_PRSTATUS entries from core file
@@ -539,52 +545,52 @@
return false;
// copy regs
- memcpy(&newthr->regs, prstat->pr_reg, sizeof(struct user_regs_struct));
+ memcpy(&newthr->regs, &prstat->pr_reg, sizeof(struct reg));
if (is_debug()) {
print_debug("integer regset\n");
#ifdef i386
// print the regset
- print_debug("\teax = 0x%x\n", newthr->regs.eax);
- print_debug("\tebx = 0x%x\n", newthr->regs.ebx);
- print_debug("\tecx = 0x%x\n", newthr->regs.ecx);
- print_debug("\tedx = 0x%x\n", newthr->regs.edx);
- print_debug("\tesp = 0x%x\n", newthr->regs.esp);
- print_debug("\tebp = 0x%x\n", newthr->regs.ebp);
- print_debug("\tesi = 0x%x\n", newthr->regs.esi);
- print_debug("\tedi = 0x%x\n", newthr->regs.edi);
- print_debug("\teip = 0x%x\n", newthr->regs.eip);
+ print_debug("\teax = 0x%x\n", newthr->regs.r_eax);
+ print_debug("\tebx = 0x%x\n", newthr->regs.r_ebx);
+ print_debug("\tecx = 0x%x\n", newthr->regs.r_ecx);
+ print_debug("\tedx = 0x%x\n", newthr->regs.r_edx);
+ print_debug("\tesp = 0x%x\n", newthr->regs.r_esp);
+ print_debug("\tebp = 0x%x\n", newthr->regs.r_ebp);
+ print_debug("\tesi = 0x%x\n", newthr->regs.r_esi);
+ print_debug("\tedi = 0x%x\n", newthr->regs.r_edi);
+ print_debug("\teip = 0x%x\n", newthr->regs.r_eip);
#endif
#if defined(amd64) || defined(x86_64)
// print the regset
- print_debug("\tr15 = 0x%lx\n", newthr->regs.r15);
- print_debug("\tr14 = 0x%lx\n", newthr->regs.r14);
- print_debug("\tr13 = 0x%lx\n", newthr->regs.r13);
- print_debug("\tr12 = 0x%lx\n", newthr->regs.r12);
- print_debug("\trbp = 0x%lx\n", newthr->regs.rbp);
- print_debug("\trbx = 0x%lx\n", newthr->regs.rbx);
- print_debug("\tr11 = 0x%lx\n", newthr->regs.r11);
- print_debug("\tr10 = 0x%lx\n", newthr->regs.r10);
- print_debug("\tr9 = 0x%lx\n", newthr->regs.r9);
- print_debug("\tr8 = 0x%lx\n", newthr->regs.r8);
- print_debug("\trax = 0x%lx\n", newthr->regs.rax);
- print_debug("\trcx = 0x%lx\n", newthr->regs.rcx);
- print_debug("\trdx = 0x%lx\n", newthr->regs.rdx);
- print_debug("\trsi = 0x%lx\n", newthr->regs.rsi);
- print_debug("\trdi = 0x%lx\n", newthr->regs.rdi);
- print_debug("\torig_rax = 0x%lx\n", newthr->regs.orig_rax);
- print_debug("\trip = 0x%lx\n", newthr->regs.rip);
- print_debug("\tcs = 0x%lx\n", newthr->regs.cs);
- print_debug("\teflags = 0x%lx\n", newthr->regs.eflags);
- print_debug("\trsp = 0x%lx\n", newthr->regs.rsp);
- print_debug("\tss = 0x%lx\n", newthr->regs.ss);
- print_debug("\tfs_base = 0x%lx\n", newthr->regs.fs_base);
- print_debug("\tgs_base = 0x%lx\n", newthr->regs.gs_base);
- print_debug("\tds = 0x%lx\n", newthr->regs.ds);
- print_debug("\tes = 0x%lx\n", newthr->regs.es);
- print_debug("\tfs = 0x%lx\n", newthr->regs.fs);
- print_debug("\tgs = 0x%lx\n", newthr->regs.gs);
+ print_debug("\tr15 = 0x%lx\n", newthr->regs.r_r15);
+ print_debug("\tr14 = 0x%lx\n", newthr->regs.r_r14);
+ print_debug("\tr13 = 0x%lx\n", newthr->regs.r_r13);
+ print_debug("\tr12 = 0x%lx\n", newthr->regs.r_r12);
+ print_debug("\trbp = 0x%lx\n", newthr->regs.r_rbp);
+ print_debug("\trbx = 0x%lx\n", newthr->regs.r_rbx);
+ print_debug("\tr11 = 0x%lx\n", newthr->regs.r_r11);
+ print_debug("\tr10 = 0x%lx\n", newthr->regs.r_r10);
+ print_debug("\tr9 = 0x%lx\n", newthr->regs.r_r9);
+ print_debug("\tr8 = 0x%lx\n", newthr->regs.r_r8);
+ print_debug("\trax = 0x%lx\n", newthr->regs.r_rax);
+ print_debug("\trcx = 0x%lx\n", newthr->regs.r_rcx);
+ print_debug("\trdx = 0x%lx\n", newthr->regs.r_rdx);
+ print_debug("\trsi = 0x%lx\n", newthr->regs.r_rsi);
+ print_debug("\trdi = 0x%lx\n", newthr->regs.r_rdi);
+ //print_debug("\torig_rax = 0x%lx\n", newthr->regs.orig_rax);
+ print_debug("\trip = 0x%lx\n", newthr->regs.r_rip);
+ print_debug("\tcs = 0x%lx\n", newthr->regs.r_cs);
+ //print_debug("\teflags = 0x%lx\n", newthr->regs.eflags);
+ print_debug("\trsp = 0x%lx\n", newthr->regs.r_rsp);
+ print_debug("\tss = 0x%lx\n", newthr->regs.r_ss);
+ //print_debug("\tfs_base = 0x%lx\n", newthr->regs.fs_base);
+ //print_debug("\tgs_base = 0x%lx\n", newthr->regs.gs_base);
+ //print_debug("\tds = 0x%lx\n", newthr->regs.ds);
+ //print_debug("\tes = 0x%lx\n", newthr->regs.es);
+ //print_debug("\tfs = 0x%lx\n", newthr->regs.fs);
+ //print_debug("\tgs = 0x%lx\n", newthr->regs.gs);
#endif
}
@@ -656,7 +662,7 @@
* contains a set of saved /proc structures), and PT_LOAD (which
* represents a memory mapping from the process's address space).
*
- * Difference b/w Solaris PT_NOTE and Bsd PT_NOTE:
+ * Difference b/w Solaris PT_NOTE and BSD PT_NOTE:
*
* In Solaris there are two PT_NOTE segments the first PT_NOTE (if present)
* contains /proc structs in the pre-2.6 unstructured /proc format. the last
@@ -666,10 +672,10 @@
* integer register set among other stuff. For each LWP, we have one lwpstatus
* entry that has integer regset for that LWP.
*
- * Bsd threads are actually 'clone'd processes. To support core analysis
- * of "multithreaded" process, Bsd creates more than one pstatus (called
+ * Linux threads are actually 'clone'd processes. To support core analysis
+ * of "multithreaded" process, Linux creates more than one pstatus (called
* "prstatus") entry in PT_NOTE. Each prstatus entry has integer regset for one
- * "thread". Please refer to Bsd kernel src file 'fs/binfmt_elf.c', in particular
+ * "thread". Please refer to Linux kernel src file 'fs/binfmt_elf.c', in particular
* function "elf_core_dump".
*/
@@ -725,7 +731,7 @@
return false;
}
-// process segments from interpreter (ld.so or ld-bsd.so)
+// process segments from interpreter (ld-elf.so.1)
static bool read_interp_segments(struct ps_prochandle* ph) {
ELF_EHDR interp_ehdr;
@@ -826,7 +832,7 @@
dyn.d_tag = DT_NULL;
while (dyn.d_tag != DT_DEBUG) {
- if (ps_pdread(ph, (psaddr_t) addr, &dyn, sizeof(ELF_DYN)) != PS_OK) {
+ if (ps_pread(ph, (psaddr_t) addr, &dyn, sizeof(ELF_DYN)) != PS_OK) {
print_debug("can't read debug info from _DYNAMIC\n");
return false;
}
@@ -836,23 +842,27 @@
// we have got Dyn entry with DT_DEBUG
debug_base = dyn.d_un.d_ptr;
// at debug_base we have struct r_debug. This has first link map in r_map field
- if (ps_pdread(ph, (psaddr_t) debug_base + FIRST_LINK_MAP_OFFSET,
+ if (ps_pread(ph, (psaddr_t) debug_base + FIRST_LINK_MAP_OFFSET,
&first_link_map_addr, sizeof(uintptr_t)) != PS_OK) {
print_debug("can't read first link map address\n");
return false;
}
// read ld_base address from struct r_debug
- if (ps_pdread(ph, (psaddr_t) debug_base + LD_BASE_OFFSET, &ld_base_addr,
+ // XXX: There is no r_ldbase member on BSD
+/*
+ if (ps_pread(ph, (psaddr_t) debug_base + LD_BASE_OFFSET, &ld_base_addr,
sizeof(uintptr_t)) != PS_OK) {
print_debug("can't read ld base address\n");
return false;
}
ph->core->ld_base_addr = ld_base_addr;
+*/
+ ph->core->ld_base_addr = 0;
print_debug("interpreter base address is 0x%lx\n", ld_base_addr);
- // now read segments from interp (i.e ld.so or ld-bsd.so)
+ // now read segments from interp (i.e ld-elf.so.1)
if (read_interp_segments(ph) != true)
return false;
@@ -870,26 +880,23 @@
// address mentioned in shared object and the actual virtual base where runtime
// linker loaded it. We use "base diff" in read_lib_segments call below.
- if (ps_pdread(ph, (psaddr_t) link_map_addr + LINK_MAP_ADDR_OFFSET,
+ if (ps_pread(ph, (psaddr_t) link_map_addr + LINK_MAP_ADDR_OFFSET,
&lib_base_diff, sizeof(uintptr_t)) != PS_OK) {
print_debug("can't read shared object base address diff\n");
return false;
}
// read address of the name
- if (ps_pdread(ph, (psaddr_t) link_map_addr + LINK_MAP_NAME_OFFSET,
+ if (ps_pread(ph, (psaddr_t) link_map_addr + LINK_MAP_NAME_OFFSET,
&lib_name_addr, sizeof(uintptr_t)) != PS_OK) {
print_debug("can't read address of shared object name\n");
return false;
}
// read name of the shared object
- lib_name[0] = '\0';
- if (lib_name_addr != 0 &&
- read_string(ph, (uintptr_t) lib_name_addr, lib_name, sizeof(lib_name)) != true) {
+ if (read_string(ph, (uintptr_t) lib_name_addr, lib_name, sizeof(lib_name)) != true) {
print_debug("can't read shared object name\n");
- // don't let failure to read the name stop opening the file. If something is really wrong
- // it will fail later.
+ return false;
}
if (lib_name[0] != '\0') {
@@ -924,7 +931,7 @@
}
// read next link_map address
- if (ps_pdread(ph, (psaddr_t) link_map_addr + LINK_MAP_NEXT_OFFSET,
+ if (ps_pread(ph, (psaddr_t) link_map_addr + LINK_MAP_NEXT_OFFSET,
&link_map_addr, sizeof(uintptr_t)) != PS_OK) {
print_debug("can't read next link in link_map\n");
return false;
@@ -938,7 +945,6 @@
struct ps_prochandle* Pgrab_core(const char* exec_file, const char* core_file) {
ELF_EHDR core_ehdr;
ELF_EHDR exec_ehdr;
- ELF_EHDR lib_ehdr;
struct ps_prochandle* ph = (struct ps_prochandle*) calloc(1, sizeof(struct ps_prochandle));
if (ph == NULL) {
--- ./hotspot/agent/src/os/bsd/ps_proc.c 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/ps_proc.c 2010-10-31 14:26:55.000000000 -0700
@@ -22,20 +22,22 @@
*
*/
+#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
#include <sys/ptrace.h>
+#include <sys/param.h>
+#include <sys/user.h>
+#include <elf.h>
+#include <sys/elf_common.h>
+#include <sys/link_elf.h>
+#include <libutil.h>
#include "libproc_impl.h"
-
-#if defined(x86_64) && !defined(amd64)
-#define amd64 1
-#endif
-
-#ifndef __WALL
-#define __WALL 0x40000000 // Copied from /usr/include/bsd/wait.h
-#endif
+#include "elfmacros.h"
// This file has the libproc implementation specific to live process
// For core files, refer to ps_core.c
@@ -50,255 +52,359 @@
// read "size" bytes of data from "addr" within the target process.
// unlike the standard ptrace() function, process_read_data() can handle
-// unaligned address - alignment check, if required, should be done
+// unaligned address - alignment check, if required, should be done
// before calling process_read_data.
static bool process_read_data(struct ps_prochandle* ph, uintptr_t addr, char *buf, size_t size) {
- long rslt;
+ int rslt;
size_t i, words;
uintptr_t end_addr = addr + size;
- uintptr_t aligned_addr = align(addr, sizeof(long));
+ uintptr_t aligned_addr = align(addr, sizeof(int));
if (aligned_addr != addr) {
char *ptr = (char *)&rslt;
errno = 0;
- rslt = ptrace(PTRACE_PEEKDATA, ph->pid, aligned_addr, 0);
+ rslt = ptrace(PT_READ_D, ph->pid, (caddr_t) aligned_addr, 0);
if (errno) {
- print_debug("ptrace(PTRACE_PEEKDATA, ..) failed for %d bytes @ %lx\n", size, addr);
+ print_debug("ptrace(PT_READ_D, ..) failed for %d bytes @ %lx\n", size, addr);
return false;
}
for (; aligned_addr != addr; aligned_addr++, ptr++);
- for (; ((intptr_t)aligned_addr % sizeof(long)) && aligned_addr < end_addr;
- aligned_addr++)
+ for (; ((intptr_t)aligned_addr % sizeof(int)) && aligned_addr < end_addr;
+ aligned_addr++)
*(buf++) = *(ptr++);
}
- words = (end_addr - aligned_addr) / sizeof(long);
+ words = (end_addr - aligned_addr) / sizeof(int);
- // assert((intptr_t)aligned_addr % sizeof(long) == 0);
+ // assert((intptr_t)aligned_addr % sizeof(int) == 0);
for (i = 0; i < words; i++) {
errno = 0;
- rslt = ptrace(PTRACE_PEEKDATA, ph->pid, aligned_addr, 0);
+ rslt = ptrace(PT_READ_D, ph->pid, (caddr_t) aligned_addr, 0);
if (errno) {
- print_debug("ptrace(PTRACE_PEEKDATA, ..) failed for %d bytes @ %lx\n", size, addr);
+ print_debug("ptrace(PT_READ_D, ..) failed for %d bytes @ %lx\n", size, addr);
return false;
}
- *(long *)buf = rslt;
- buf += sizeof(long);
- aligned_addr += sizeof(long);
+ *(int *)buf = rslt;
+ buf += sizeof(int);
+ aligned_addr += sizeof(int);
}
if (aligned_addr != end_addr) {
char *ptr = (char *)&rslt;
errno = 0;
- rslt = ptrace(PTRACE_PEEKDATA, ph->pid, aligned_addr, 0);
+ rslt = ptrace(PT_READ_D, ph->pid, (caddr_t) aligned_addr, 0);
if (errno) {
- print_debug("ptrace(PTRACE_PEEKDATA, ..) failed for %d bytes @ %lx\n", size, addr);
+ print_debug("ptrace(PT_READ_D, ..) failed for %d bytes @ %lx\n", size, addr);
return false;
}
- for (; aligned_addr != end_addr; aligned_addr++)
+ for (; aligned_addr != end_addr; aligned_addr++)
*(buf++) = *(ptr++);
}
return true;
}
// null implementation for write
-static bool process_write_data(struct ps_prochandle* ph,
+static bool process_write_data(struct ps_prochandle* ph,
uintptr_t addr, const char *buf , size_t size) {
return false;
}
-// "user" should be a pointer to a user_regs_struct
-static bool process_get_lwp_regs(struct ps_prochandle* ph, pid_t pid, struct user_regs_struct *user) {
+// "user" should be a pointer to a reg
+static bool process_get_lwp_regs(struct ps_prochandle* ph, pid_t pid, struct reg *user) {
// we have already attached to all thread 'pid's, just use ptrace call
// to get regset now. Note that we don't cache regset upfront for processes.
-// Bsd on x86 and sparc are different. On x86 ptrace(PTRACE_GETREGS, ...)
-// uses pointer from 4th argument and ignores 3rd argument. On sparc it uses
-// pointer from 3rd argument and ignores 4th argument
-#if defined(sparc) || defined(sparcv9)
-#define ptrace_getregs(request, pid, addr, data) ptrace(request, pid, addr, data)
-#else
-#define ptrace_getregs(request, pid, addr, data) ptrace(request, pid, data, addr)
-#endif
-
-#ifdef _LP64
-#ifdef PTRACE_GETREGS64
-#define PTRACE_GETREGS_REQ PTRACE_GETREGS64
-#endif
-#else
-#if defined(PTRACE_GETREGS) || defined(PT_GETREGS)
-#define PTRACE_GETREGS_REQ PTRACE_GETREGS
-#endif
-#endif /* _LP64 */
-
-#ifdef PTRACE_GETREGS_REQ
- if (ptrace_getregs(PTRACE_GETREGS_REQ, pid, user, NULL) < 0) {
+ if (ptrace(PT_GETREGS, pid, (caddr_t) user, 0) < 0) {
print_debug("ptrace(PTRACE_GETREGS, ...) failed for lwp %d\n", pid);
return false;
}
return true;
-#else
- print_debug("ptrace(PTRACE_GETREGS, ...) not supported\n");
- return false;
-#endif
+}
+
+// fill in ptrace_lwpinfo for lid
+static bool process_get_lwp_info(struct ps_prochandle *ph, lwpid_t lwp_id, void *linfo) {
+ errno = 0;
+ ptrace(PT_LWPINFO, lwp_id, linfo, sizeof(struct ptrace_lwpinfo));
+ return (errno == 0)? true: false;
}
// attach to a process/thread specified by "pid"
static bool ptrace_attach(pid_t pid) {
- if (ptrace(PTRACE_ATTACH, pid, NULL, NULL) < 0) {
+ if (ptrace(PT_ATTACH, pid, NULL, 0) < 0) {
print_debug("ptrace(PTRACE_ATTACH, ..) failed for %d\n", pid);
return false;
} else {
int ret;
int status;
do {
- // Wait for debuggee to stop.
+ // Wait for debuggee to stop.
ret = waitpid(pid, &status, 0);
- if (ret == -1 && errno == ECHILD) {
- // try cloned process.
- ret = waitpid(pid, &status, __WALL);
- }
if (ret >= 0) {
- if (WIFSTOPPED(status)) {
- // Debuggee stopped.
- return true;
+ if (WIFSTOPPED(status)) {
+ // Debuggee stopped.
+ return true;
} else {
- print_debug("waitpid(): Child process exited/terminated (status = 0x%x)\n", status);
- return false;
- }
+ print_debug("waitpid(): Child process exited/terminated (status = 0x%x)\n", status);
+ return false;
+ }
} else {
- switch (errno) {
- case EINTR:
+ switch (errno) {
+ case EINTR:
continue;
- break;
- case ECHILD:
- print_debug("waitpid() failed. Child process pid (%d) does not exist \n", pid);
- break;
- case EINVAL:
- print_debug("waitpid() failed. Invalid options argument.\n");
- break;
- default:
- print_debug("waitpid() failed. Unexpected error %d\n",errno);
+ break;
+ case ECHILD:
+ print_debug("waitpid() failed. Child process pid (%d) does not exist \n", pid);
+ break;
+ case EINVAL:
+ print_debug("waitpid() failed. Invalid options argument.\n");
+ break;
+ default:
+ print_debug("waitpid() failed. Unexpected error %d\n",errno);
}
return false;
- }
+ }
} while(true);
- }
-}
-
+ }
+}
+
// -------------------------------------------------------
// functions for obtaining library information
// -------------------------------------------------------
-/*
- * splits a string _str_ into substrings with delimiter _delim_ by replacing old * delimiters with _new_delim_ (ideally, '\0'). the address of each substring
- * is stored in array _ptrs_ as the return value. the maximum capacity of _ptrs_ * array is specified by parameter _n_.
- * RETURN VALUE: total number of substrings (always <= _n_)
- * NOTE: string _str_ is modified if _delim_!=_new_delim_
- */
-static int split_n_str(char * str, int n, char ** ptrs, char delim, char new_delim)
-{
- int i;
- for(i = 0; i < n; i++) ptrs[i] = NULL;
- if (str == NULL || n < 1 ) return 0;
-
- i = 0;
-
- // skipping leading blanks
- while(*str&&*str==delim) str++;
-
- while(*str&&i<n){
- ptrs[i++] = str;
- while(*str&&*str!=delim) str++;
- while(*str&&*str==delim) *(str++) = new_delim;
- }
-
- return i;
+// callback for read_thread_info
+static bool add_new_thread(struct ps_prochandle* ph, pthread_t pthread_id, lwpid_t lwp_id) {
+ return add_thread_info(ph, pthread_id, lwp_id) != NULL;
}
+#if defined(__FreeBSD__) && __FreeBSD_version < 701000
/*
- * fgets without storing '\n' at the end of the string
+ * TEXT_START_ADDR from binutils/ld/emulparams/<arch_spec>.sh
+ * Not the most robust but good enough.
*/
-static char * fgets_no_cr(char * buf, int n, FILE *fp)
-{
- char * rslt = fgets(buf, n, fp);
- if (rslt && buf && *buf){
- char *p = strchr(buf, '\0');
- if (*--p=='\n') *p='\0';
- }
- return rslt;
-}
-// callback for read_thread_info
-static bool add_new_thread(struct ps_prochandle* ph, pthread_t pthread_id, lwpid_t lwp_id) {
- return add_thread_info(ph, pthread_id, lwp_id) != NULL;
+#if defined(amd64) || defined(x86_64)
+#define TEXT_START_ADDR 0x400000
+#elif defined(i386)
+#define TEXT_START_ADDR 0x8048000
+#else
+#error TEXT_START_ADDR not defined
+#endif
+
+#define BUF_SIZE (PATH_MAX + NAME_MAX + 1)
+
+uintptr_t linkmap_addr(struct ps_prochandle *ph) {
+ uintptr_t ehdr_addr, phdr_addr, dyn_addr, dmap_addr, lmap_addr;
+ ELF_EHDR ehdr;
+ ELF_PHDR *phdrs, *phdr;
+ ELF_DYN *dyns, *dyn;
+ struct r_debug dmap;
+ unsigned long hdrs_size;
+ unsigned int i;
+
+ /* read ELF_EHDR at TEXT_START_ADDR and validate */
+
+ ehdr_addr = (uintptr_t)TEXT_START_ADDR;
+
+ if (process_read_data(ph, ehdr_addr, (char *)&ehdr, sizeof(ehdr)) != true) {
+ print_debug("process_read_data failed for ehdr_addr %p\n", ehdr_addr);
+ return (0);
+ }
+
+ if (!IS_ELF(ehdr) ||
+ ehdr.e_ident[EI_CLASS] != ELF_TARG_CLASS ||
+ ehdr.e_ident[EI_DATA] != ELF_TARG_DATA ||
+ ehdr.e_ident[EI_VERSION] != EV_CURRENT ||
+ ehdr.e_phentsize != sizeof(ELF_PHDR) ||
+ ehdr.e_version != ELF_TARG_VER ||
+ ehdr.e_machine != ELF_TARG_MACH) {
+ print_debug("not an ELF_EHDR at %p\n", ehdr_addr);
+ return (0);
+ }
+
+ /* allocate space for all ELF_PHDR's and read */
+
+ phdr_addr = ehdr_addr + ehdr.e_phoff;
+ hdrs_size = ehdr.e_phnum * sizeof(ELF_PHDR);
+
+ if ((phdrs = malloc(hdrs_size)) == NULL)
+ return (0);
+
+ if (process_read_data(ph, phdr_addr, (char *)phdrs, hdrs_size) != true) {
+ print_debug("process_read_data failed for phdr_addr %p\n", phdr_addr);
+ return (0);
+ }
+
+ /* find PT_DYNAMIC section */
+
+ for (i = 0, phdr = phdrs; i < ehdr.e_phnum; i++, phdr++) {
+ if (phdr->p_type == PT_DYNAMIC)
+ break;
+ }
+
+ if (i >= ehdr.e_phnum) {
+ print_debug("PT_DYNAMIC section not found!\n");
+ free(phdrs);
+ return (0);
+ }
+
+ /* allocate space and read in ELF_DYN headers */
+
+ dyn_addr = phdr->p_vaddr;
+ hdrs_size = phdr->p_memsz;
+ free(phdrs);
+
+ if ((dyns = malloc(hdrs_size)) == NULL)
+ return (0);
+
+ if (process_read_data(ph, dyn_addr, (char *)dyns, hdrs_size) != true) {
+ print_debug("process_read_data failed for dyn_addr %p\n", dyn_addr);
+ free(dyns);
+ return (0);
+ }
+
+ /* find DT_DEBUG */
+
+ dyn = dyns;
+ while (dyn->d_tag != DT_DEBUG && dyn->d_tag != DT_NULL) {
+ dyn++;
+ }
+
+ if (dyn->d_tag != DT_DEBUG) {
+ print_debug("failed to find DT_DEBUG\n");
+ free(dyns);
+ return (0);
+ }
+
+ /* read struct r_debug into dmap */
+
+ dmap_addr = (uintptr_t)dyn->d_un.d_ptr;
+ free(dyns);
+
+ if (process_read_data(ph, dmap_addr, (char *)&dmap, sizeof(dmap)) != true) {
+ print_debug("process_read_data failed for dmap_addr %p\n", dmap_addr);
+ return (0);
+ }
+
+ lmap_addr = (uintptr_t)dmap.r_map;
+
+ return (lmap_addr);
}
+#endif // __FreeBSD__ && __FreeBSD_version < 701000
static bool read_lib_info(struct ps_prochandle* ph) {
- char fname[32];
- char buf[256];
- FILE *fp = NULL;
-
- sprintf(fname, "/proc/%d/maps", ph->pid);
- fp = fopen(fname, "r");
- if (fp == NULL) {
- print_debug("can't open /proc/%d/maps file\n", ph->pid);
- return false;
+#if defined(__FreeBSD__) && __FreeBSD_version >= 701000
+ struct kinfo_vmentry *freep, *kve;
+ int i, cnt;
+
+ freep = kinfo_getvmmap(ph->pid, &cnt);
+ if (freep == NULL) {
+ print_debug("can't get vm map for pid\n", ph->pid);
+ return false;
}
- while(fgets_no_cr(buf, 256, fp)){
- char * word[6];
- int nwords = split_n_str(buf, 6, word, ' ', '\0');
- if (nwords > 5 && find_lib(ph, word[5]) == false) {
- intptr_t base;
- lib_info* lib;
-#ifdef _LP64
- sscanf(word[0], "%lx", &base);
-#else
- sscanf(word[0], "%x", &base);
-#endif
- if ((lib = add_lib_info(ph, word[5], (uintptr_t)base)) == NULL)
+ for (i = 0; i < cnt; i++) {
+ kve = &freep[i];
+ if ((kve->kve_flags & KVME_FLAG_COW) &&
+ kve->kve_path != NULL &&
+ strlen(kve->kve_path) > 0) {
+
+ if (find_lib(ph, kve->kve_path) == false) {
+ lib_info* lib;
+ if ((lib = add_lib_info(ph, kve->kve_path,
+ (uintptr_t) kve->kve_start)) == NULL)
continue; // ignore, add_lib_info prints error
- // we don't need to keep the library open, symtab is already
- // built. Only for core dump we need to keep the fd open.
- close(lib->fd);
- lib->fd = -1;
+ // we don't need to keep the library open, symtab is already
+ // built. Only for core dump we need to keep the fd open.
+ close(lib->fd);
+ lib->fd = -1;
+ }
}
}
- fclose(fp);
+
+ free(freep);
+
+ return true;
+#else
+ char *l_name;
+ struct link_map *lmap;
+ uintptr_t lmap_addr;
+
+ if ((l_name = malloc(BUF_SIZE)) == NULL)
+ return false;
+
+ if ((lmap = malloc(sizeof(*lmap))) == NULL) {
+ free(l_name);
+ return false;
+ }
+
+ lmap_addr = linkmap_addr(ph);
+
+ if (lmap_addr == 0) {
+ free(l_name);
+ free(lmap);
+ return false;
+ }
+
+ do {
+ if (process_read_data(ph, lmap_addr, (char *)lmap, sizeof(*lmap)) != true) {
+ print_debug("process_read_data failed for lmap_addr %p\n", lmap_addr);
+ free (l_name);
+ free (lmap);
+ return false;
+ }
+
+ if (process_read_data(ph, (uintptr_t)lmap->l_name, l_name,
+ BUF_SIZE) != true) {
+ print_debug("process_read_data failed for lmap->l_name %p\n",
+ lmap->l_name);
+ free (l_name);
+ free (lmap);
+ return false;
+ }
+
+ if (find_lib(ph, l_name) == false) {
+ lib_info* lib;
+ if ((lib = add_lib_info(ph, l_name,
+ (uintptr_t) lmap->l_addr)) == NULL)
+ continue; // ignore, add_lib_info prints error
+
+ // we don't need to keep the library open, symtab is already
+ // built. Only for core dump we need to keep the fd open.
+ close(lib->fd);
+ lib->fd = -1;
+ }
+ lmap_addr = (uintptr_t)lmap->l_next;
+ } while (lmap->l_next != NULL);
+
+ free (l_name);
+ free (lmap);
+
return true;
+#endif
}
// detach a given pid
static bool ptrace_detach(pid_t pid) {
- if (pid && ptrace(PTRACE_DETACH, pid, NULL, NULL) < 0) {
+ if (pid && ptrace(PT_DETACH, pid, (caddr_t)1, 0) < 0) {
print_debug("ptrace(PTRACE_DETACH, ..) failed for %d\n", pid);
return false;
} else {
return true;
- }
-}
-
-// detach all pids of a ps_prochandle
-static void detach_all_pids(struct ps_prochandle* ph) {
- thread_info* thr = ph->threads;
- while (thr) {
- ptrace_detach(thr->lwp_id);
- thr = thr->next;
- }
+ }
}
static void process_cleanup(struct ps_prochandle* ph) {
- detach_all_pids(ph);
+ ptrace_detach(ph->pid);
}
static ps_prochandle_ops process_ops = {
.release= process_cleanup,
.p_pread= process_read_data,
.p_pwrite= process_write_data,
- .get_lwp_regs= process_get_lwp_regs
+ .get_lwp_regs= process_get_lwp_regs,
+ .get_lwp_info= process_get_lwp_info
};
// attach to the process. One and only one exposed stuff
@@ -325,21 +431,14 @@
// read library info and symbol tables, must do this before attaching threads,
// as the symbols in the pthread library will be used to figure out
// the list of threads within the same process.
- read_lib_info(ph);
-
+ if (read_lib_info(ph) != true) {
+ ptrace_detach(pid);
+ free(ph);
+ return NULL;
+ }
+
// read thread info
read_thread_info(ph, add_new_thread);
- // attach to the threads
- thr = ph->threads;
- while (thr) {
- // don't attach to the main thread again
- if (ph->pid != thr->lwp_id && ptrace_attach(thr->lwp_id) != true) {
- // even if one attach fails, we get return NULL
- Prelease(ph);
- return NULL;
- }
- thr = thr->next;
- }
return ph;
}
--- ./hotspot/agent/src/os/bsd/salibelf.c 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/salibelf.c 2010-07-04 09:30:46.000000000 -0700
@@ -25,6 +25,7 @@
#include "salibelf.h"
#include <stdlib.h>
#include <unistd.h>
+#include <string.h>
extern void print_debug(const char*,...);
--- ./hotspot/agent/src/os/bsd/symtab.c 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/symtab.c 2010-07-04 09:30:46.000000000 -0700
@@ -23,10 +23,10 @@
*/
#include <unistd.h>
-#include <sys/procfs.h>
#include <search.h>
#include <stdlib.h>
#include <string.h>
+#include "hsearch_r.h"
#include "symtab.h"
#include "salibelf.h"
@@ -53,276 +53,9 @@
struct hsearch_data *hash_table;
} symtab_t;
-
-// Directory that contains global debuginfo files. In theory it
-// should be possible to change this, but in a Java environment there
-// is no obvious place to put a user interface to do it. Maybe this
-// could be set with an environment variable.
-static const char debug_file_directory[] = "/usr/lib/debug";
-
-/* The CRC used in gnu_debuglink, retrieved from
- http://sourceware.org/gdb/current/onlinedocs/gdb/Separate-Debug-Files.html#Separate-Debug-Files. */
-unsigned int gnu_debuglink_crc32 (unsigned int crc,
- unsigned char *buf, size_t len)
-{
- static const unsigned int crc32_table[256] =
- {
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
- 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
- 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
- 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
- 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
- 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
- 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
- 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
- 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
- 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
- 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
- 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
- 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
- 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
- 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
- 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
- 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
- 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
- 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
- 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
- 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
- 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
- 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
- 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
- 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
- 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
- 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
- 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
- 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
- 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
- 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
- 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
- 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
- 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
- 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
- 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
- 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
- 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
- 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
- 0x2d02ef8d
- };
- unsigned char *end;
-
- crc = ~crc & 0xffffffff;
- for (end = buf + len; buf < end; ++buf)
- crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
- return ~crc & 0xffffffff;
-}
-
-/* Open a debuginfo file and check its CRC. If it exists and the CRC
- matches return its fd. */
-static int
-open_debug_file (const char *pathname, unsigned int crc)
-{
- unsigned int file_crc = 0;
- unsigned char buffer[8 * 1024];
-
- int fd = pathmap_open(pathname);
-
- if (fd < 0)
- return -1;
-
- lseek(fd, 0, SEEK_SET);
-
- for (;;) {
- int len = read(fd, buffer, sizeof buffer);
- if (len <= 0)
- break;
- file_crc = gnu_debuglink_crc32(file_crc, buffer, len);
- }
-
- if (crc == file_crc)
- return fd;
- else {
- close(fd);
- return -1;
- }
-}
-
-/* Find an ELF section. */
-static struct elf_section *find_section_by_name(char *name,
- int fd,
- ELF_EHDR *ehdr,
- ELF_SHDR *shbuf,
- struct elf_section *scn_cache)
-{
- ELF_SHDR* cursct = NULL;
- char *strtab;
- int cnt;
-
- if (scn_cache[ehdr->e_shstrndx].c_data == NULL) {
- if ((scn_cache[ehdr->e_shstrndx].c_data
- = read_section_data(fd, ehdr, cursct)) == NULL) {
- return NULL;
- }
- }
-
- strtab = scn_cache[ehdr->e_shstrndx].c_data;
-
- for (cursct = shbuf, cnt = 0;
- cnt < ehdr->e_shnum;
- cnt++, cursct++) {
- if (strcmp(cursct->sh_name + strtab, name) == 0) {
- scn_cache[cnt].c_data = read_section_data(fd, ehdr, cursct);
- return &scn_cache[cnt];
- }
- }
-
- return NULL;
-}
-
-/* Look for a ".gnu_debuglink" section. If one exists, try to open a
- suitable debuginfo file. */
-static int open_file_from_debug_link(const char *name,
- int fd,
- ELF_EHDR *ehdr,
- ELF_SHDR *shbuf,
- struct elf_section *scn_cache)
-{
- int debug_fd;
- struct elf_section *debug_link = find_section_by_name(".gnu_debuglink", fd, ehdr,
- shbuf, scn_cache);
- if (debug_link == NULL)
- return -1;
- char *debug_filename = debug_link->c_data;
- int offset = (strlen(debug_filename) + 4) >> 2;
- static unsigned int crc;
- crc = ((unsigned int*)debug_link->c_data)[offset];
- char *debug_pathname = malloc(strlen(debug_filename)
- + strlen(name)
- + strlen(".debug/")
- + strlen(debug_file_directory)
- + 2);
- strcpy(debug_pathname, name);
- char *last_slash = strrchr(debug_pathname, '/');
- if (last_slash == NULL)
- return -1;
-
- /* Look in the same directory as the object. */
- strcpy(last_slash+1, debug_filename);
-
- debug_fd = open_debug_file(debug_pathname, crc);
- if (debug_fd >= 0) {
- free(debug_pathname);
- return debug_fd;
- }
-
- /* Look in a subdirectory named ".debug". */
- strcpy(last_slash+1, ".debug/");
- strcat(last_slash, debug_filename);
-
- debug_fd = open_debug_file(debug_pathname, crc);
- if (debug_fd >= 0) {
- free(debug_pathname);
- return debug_fd;
- }
-
- /* Look in /usr/lib/debug + the full pathname. */
- strcpy(debug_pathname, debug_file_directory);
- strcat(debug_pathname, name);
- last_slash = strrchr(debug_pathname, '/');
- strcpy(last_slash+1, debug_filename);
-
- debug_fd = open_debug_file(debug_pathname, crc);
- if (debug_fd >= 0) {
- free(debug_pathname);
- return debug_fd;
- }
-
- free(debug_pathname);
- return -1;
-}
-
-static struct symtab* build_symtab_internal(int fd, const char *filename, bool try_debuginfo);
-
-/* Look for a ".gnu_debuglink" section. If one exists, try to open a
- suitable debuginfo file and read a symbol table from it. */
-static struct symtab *build_symtab_from_debug_link(const char *name,
- int fd,
- ELF_EHDR *ehdr,
- ELF_SHDR *shbuf,
- struct elf_section *scn_cache)
-{
- fd = open_file_from_debug_link(name, fd, ehdr, shbuf, scn_cache);
-
- if (fd >= 0) {
- struct symtab *symtab = build_symtab_internal(fd, NULL, /* try_debuginfo */ false);
- close(fd);
- return symtab;
- }
-
- return NULL;
-}
-
-// Given a build_id, find the associated debuginfo file
-static char *
-build_id_to_debug_filename (size_t size, unsigned char *data)
-{
- char *filename, *s;
-
- filename = malloc(strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
- + 2 * size + (sizeof ".debug" - 1) + 1);
- s = filename + sprintf (filename, "%s/.build-id/", debug_file_directory);
- if (size > 0)
- {
- size--;
- s += sprintf (s, "%02x", *data++);
- }
- if (size > 0)
- *s++ = '/';
- while (size-- > 0)
- s += sprintf (s, "%02x", *data++);
- strcpy (s, ".debug");
-
- return filename;
-}
-
-// Read a build ID note. Try to open any associated debuginfo file
-// and return its symtab
-static struct symtab* build_symtab_from_build_id(Elf64_Nhdr *note)
-{
- int fd;
- struct symtab *symtab = NULL;
-
- unsigned char *bytes
- = (unsigned char*)(note+1) + note->n_namesz;
- unsigned char *filename
- = (build_id_to_debug_filename (note->n_descsz, bytes));
-
- fd = pathmap_open(filename);
- if (fd >= 0) {
- symtab = build_symtab_internal(fd, NULL, /* try_debuginfo */ false);
- close(fd);
- }
- free(filename);
-
- return symtab;
-}
-
-// read symbol table from given fd. If try_debuginfo) is true, also
-// try to open an associated debuginfo file
-static struct symtab* build_symtab_internal(int fd, const char *filename, bool try_debuginfo) {
+// read symbol table from given fd.
+struct symtab* build_symtab(int fd) {
ELF_EHDR ehdr;
- char *names = NULL;
struct symtab* symtab = NULL;
// Reading of elf header
@@ -331,8 +64,9 @@
ELF_SHDR* shbuf = NULL;
ELF_SHDR* cursct = NULL;
ELF_PHDR* phbuf = NULL;
- ELF_PHDR* phdr = NULL;
- int sym_section = SHT_DYNSYM;
+ int symtab_found = 0;
+ int dynsym_found = 0;
+ uint32_t symsection = SHT_SYMTAB;
uintptr_t baseaddr = (uintptr_t)-1;
@@ -357,23 +91,30 @@
for (cursct = shbuf, cnt = 0; cnt < ehdr.e_shnum; cnt++) {
scn_cache[cnt].c_shdr = cursct;
- if (cursct->sh_type == SHT_SYMTAB || cursct->sh_type == SHT_STRTAB
- || cursct->sh_type == SHT_NOTE || cursct->sh_type == SHT_DYNSYM) {
+ if (cursct->sh_type == SHT_SYMTAB ||
+ cursct->sh_type == SHT_STRTAB ||
+ cursct->sh_type == SHT_DYNSYM) {
if ( (scn_cache[cnt].c_data = read_section_data(fd, &ehdr, cursct)) == NULL) {
goto quit;
}
}
- if (cursct->sh_type == SHT_SYMTAB) {
- // Full symbol table available so use that
- sym_section = cursct->sh_type;
- }
+
+ if (cursct->sh_type == SHT_SYMTAB)
+ symtab_found++;
+
+ if (cursct->sh_type == SHT_DYNSYM)
+ dynsym_found++;
+
cursct++;
}
+ if (!symtab_found && dynsym_found)
+ symsection = SHT_DYNSYM;
+
for (cnt = 1; cnt < ehdr.e_shnum; cnt++) {
ELF_SHDR *shdr = scn_cache[cnt].c_shdr;
- if (shdr->sh_type == sym_section) {
+ if (shdr->sh_type == symsection) {
ELF_SYM *syms;
int j, n, rslt;
size_t size;
@@ -435,45 +176,6 @@
}
}
- // Look for a separate debuginfo file.
- if (try_debuginfo) {
-
- // We prefer a debug symtab to an object's own symtab, so look in
- // the debuginfo file. We stash a copy of the old symtab in case
- // there is no debuginfo.
- struct symtab* prev_symtab = symtab;
- symtab = NULL;
-
-#ifdef NT_GNU_BUILD_ID
- // First we look for a Build ID
- for (cursct = shbuf, cnt = 0;
- symtab == NULL && cnt < ehdr.e_shnum;
- cnt++) {
- if (cursct->sh_type == SHT_NOTE) {
- Elf64_Nhdr *note = (Elf64_Nhdr *)scn_cache[cnt].c_data;
- if (note->n_type == NT_GNU_BUILD_ID) {
- symtab = build_symtab_from_build_id(note);
- }
- }
- cursct++;
- }
-#endif
-
- // Then, if that doesn't work, the debug link
- if (symtab == NULL) {
- symtab = build_symtab_from_debug_link(filename, fd, &ehdr, shbuf,
- scn_cache);
- }
-
- // If we still haven't found a symtab, use the object's own symtab.
- if (symtab != NULL) {
- if (prev_symtab != NULL)
- destroy_symtab(prev_symtab);
- } else {
- symtab = prev_symtab;
- }
- }
-
quit:
if (shbuf) free(shbuf);
if (phbuf) free(phbuf);
@@ -488,11 +190,6 @@
return symtab;
}
-struct symtab* build_symtab(int fd, const char *filename) {
- return build_symtab_internal(fd, filename, /* try_debuginfo */ true);
-}
-
-
void destroy_symtab(struct symtab* symtab) {
if (!symtab) return;
if (symtab->strs) free(symtab->strs);
--- ./hotspot/agent/src/os/bsd/symtab.h 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/symtab.h 2010-07-04 09:30:46.000000000 -0700
@@ -32,7 +32,7 @@
struct symtab;
// build symbol table for a given ELF file descriptor
-struct symtab* build_symtab(int fd, const char *filename);
+struct symtab* build_symtab(int fd);
// destroy the symbol table
void destroy_symtab(struct symtab* symtab);
--- ./hotspot/agent/src/os/bsd/test.c 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/os/bsd/test.c 2010-07-04 09:30:46.000000000 -0700
@@ -44,7 +44,7 @@
}
default: {
- printf("usage %s <pid> or %s <exec file> <core file>\n");
+ fprintf(stderr, "usage %s <pid> or %s <exec file> <core file>\n", argv[0], argv[0]);
return 1;
}
}
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java 2010-11-04 16:12:12.000000000 -0700
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java 2010-06-15 22:03:12.000000000 -0700
@@ -28,6 +28,7 @@
import java.net.*;
import java.rmi.*;
import sun.jvm.hotspot.debugger.*;
+import sun.jvm.hotspot.debugger.bsd.*;
import sun.jvm.hotspot.debugger.dbx.*;
import sun.jvm.hotspot.debugger.proc.*;
import sun.jvm.hotspot.debugger.remote.*;
@@ -337,6 +338,8 @@
setupDebuggerWin32();
} else if (os.equals("linux")) {
setupDebuggerLinux();
+ } else if (os.equals("bsd")) {
+ setupDebuggerBsd();
} else {
// Add support for more operating systems here
throw new DebuggerException("Operating system " + os + " not yet supported");
@@ -392,6 +395,10 @@
db = new HotSpotTypeDataBase(machDesc,
new LinuxVtblAccess(debugger, jvmLibNames),
debugger, jvmLibNames);
+ } else if (os.equals("bsd")) {
+ db = new HotSpotTypeDataBase(machDesc,
+ new BsdVtblAccess(debugger, jvmLibNames),
+ debugger, jvmLibNames);
} else {
throw new DebuggerException("OS \"" + os + "\" not yet supported (no VtblAccess yet)");
}
@@ -557,6 +564,8 @@
setupJVMLibNamesWin32();
} else if (os.equals("linux")) {
setupJVMLibNamesLinux();
+ } else if (os.equals("bsd")) {
+ setupJVMLibNamesBsd();
} else {
throw new RuntimeException("Unknown OS type");
}
@@ -638,6 +647,31 @@
jvmLibNames = new String[] { "libjvm.so", "libjvm_g.so" };
}
+ //
+ // BSD
+ //
+
+ private void setupDebuggerBsd() {
+ setupJVMLibNamesBsd();
+
+ if (cpu.equals("x86")) {
+ machDesc = new MachineDescriptionIntelX86();
+ } else if (cpu.equals("amd64")) {
+ machDesc = new MachineDescriptionAMD64();
+ } else {
+ throw new DebuggerException("BSD only supported on x86/amd64");
+ }
+
+ BsdDebuggerLocal dbg = new BsdDebuggerLocal(machDesc, !isServer);
+ debugger = dbg;
+
+ attachDebugger();
+ }
+
+ private void setupJVMLibNamesBsd() {
+ jvmLibNames = new String[] { "libjvm.so", "libjvm_g.so" };
+ }
+
/** Convenience routine which should be called by per-platform
debugger setup. Should not be called when startupMode is
REMOTE_MODE. */
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java 2010-11-04 16:12:12.000000000 -0700
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java 2010-06-15 22:03:14.000000000 -0700
@@ -29,6 +29,7 @@
import java.rmi.*;
import sun.jvm.hotspot.*;
import sun.jvm.hotspot.debugger.*;
+import sun.jvm.hotspot.debugger.bsd.*;
import sun.jvm.hotspot.debugger.dbx.*;
import sun.jvm.hotspot.debugger.proc.*;
import sun.jvm.hotspot.debugger.cdbg.*;
@@ -516,6 +517,8 @@
setupDebuggerWin32();
} else if (os.equals("linux")) {
setupDebuggerLinux();
+ } else if (os.equals("bsd")) {
+ setupDebuggerBsd();
} else {
// Add support for more operating systems here
throw new DebuggerException("Operating system " + os + " not yet supported");
@@ -567,6 +570,9 @@
} else if (os.equals("linux")) {
db = new HotSpotTypeDataBase(machDesc, new LinuxVtblAccess(debugger, jvmLibNames),
debugger, jvmLibNames);
+ } else if (os.equals("bsd")) {
+ db = new HotSpotTypeDataBase(machDesc, new BsdVtblAccess(debugger, jvmLibNames),
+ debugger, jvmLibNames);
} else {
throw new DebuggerException("OS \"" + os + "\" not yet supported (no VtblAccess implemented yet)");
}
@@ -739,6 +745,8 @@
setupJVMLibNamesWin32();
} else if (os.equals("linux")) {
setupJVMLibNamesLinux();
+ } else if (os.equals("bsd")) {
+ setupJVMLibNamesBsd();
} else {
throw new RuntimeException("Unknown OS type");
}
@@ -822,6 +830,34 @@
setupJVMLibNamesSolaris();
}
+ //
+ // BSD
+ //
+
+ private void setupDebuggerBsd() {
+ setupJVMLibNamesBsd();
+
+ if (cpu.equals("x86")) {
+ machDesc = new MachineDescriptionIntelX86();
+ } else if (cpu.equals("amd64")) {
+ machDesc = new MachineDescriptionAMD64();
+ } else {
+ throw new DebuggerException("Bsd only supported on x86/amd64");
+ }
+
+ // Note we do not use a cache for the local debugger in server
+ // mode; it will be taken care of on the client side (once remote
+ // debugging is implemented).
+
+ debugger = new BsdDebuggerLocal(machDesc, !isServer);
+ attachDebugger();
+ }
+
+ private void setupJVMLibNamesBsd() {
+ // same as solaris
+ setupJVMLibNamesSolaris();
+ }
+
/** Convenience routine which should be called by per-platform
debugger setup. Should not be called when startupMode is
REMOTE_MODE. */
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java 2010-07-04 09:30:46.000000000 -0700
@@ -30,10 +30,8 @@
import sun.jvm.hotspot.debugger.cdbg.*;
import sun.jvm.hotspot.debugger.x86.*;
import sun.jvm.hotspot.debugger.amd64.*;
-import sun.jvm.hotspot.debugger.sparc.*;
import sun.jvm.hotspot.debugger.bsd.x86.*;
import sun.jvm.hotspot.debugger.bsd.amd64.*;
-import sun.jvm.hotspot.debugger.bsd.sparc.*;
import sun.jvm.hotspot.utilities.*;
class BsdCDebugger implements CDebugger {
@@ -99,13 +97,6 @@
Address pc = context.getRegisterAsAddress(AMD64ThreadContext.RIP);
if (pc == null) return null;
return new BsdAMD64CFrame(dbg, rbp, pc);
- } else if (cpu.equals("sparc")) {
- SPARCThreadContext context = (SPARCThreadContext) thread.getContext();
- Address sp = context.getRegisterAsAddress(SPARCThreadContext.R_SP);
- if (sp == null) return null;
- Address pc = context.getRegisterAsAddress(SPARCThreadContext.R_O7);
- if (pc == null) return null;
- return new BsdSPARCCFrame(dbg, sp, pc, BsdDebuggerLocal.getAddressSize());
} else {
throw new DebuggerException(cpu + " is not yet supported");
}
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdThreadContextFactory.java 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/BsdThreadContextFactory.java 2010-07-04 09:30:46.000000000 -0700
@@ -26,9 +26,7 @@
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.debugger.bsd.amd64.*;
-import sun.jvm.hotspot.debugger.bsd.ia64.*;
import sun.jvm.hotspot.debugger.bsd.x86.*;
-import sun.jvm.hotspot.debugger.bsd.sparc.*;
class BsdThreadContextFactory {
static ThreadContext createThreadContext(BsdDebugger dbg) {
@@ -37,10 +35,6 @@
return new BsdX86ThreadContext(dbg);
} else if (cpu.equals("amd64")) {
return new BsdAMD64ThreadContext(dbg);
- } else if (cpu.equals("ia64")) {
- return new BsdIA64ThreadContext(dbg);
- } else if (cpu.equals("sparc")) {
- return new BsdSPARCThreadContext(dbg);
} else {
throw new RuntimeException("cpu " + cpu + " is not yet supported");
}
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/ia64/BsdIA64ThreadContext.java 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/ia64/BsdIA64ThreadContext.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2003, 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 sun.jvm.hotspot.debugger.bsd.ia64;
-
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.ia64.*;
-import sun.jvm.hotspot.debugger.bsd.*;
-
-public class BsdIA64ThreadContext extends IA64ThreadContext {
- private BsdDebugger debugger;
-
- public BsdIA64ThreadContext(BsdDebugger debugger) {
- super();
- this.debugger = debugger;
- }
-
- public void setRegisterAsAddress(int index, Address value) {
- setRegister(index, debugger.getAddressValue(value));
- }
-
- public Address getRegisterAsAddress(int index) {
- return debugger.newAddress(getRegister(index));
- }
-}
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/sparc/BsdSPARCCFrame.java 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/sparc/BsdSPARCCFrame.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 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.
- *
- * 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 sun.jvm.hotspot.debugger.bsd.sparc;
-
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.sparc.*;
-import sun.jvm.hotspot.debugger.bsd.*;
-import sun.jvm.hotspot.debugger.cdbg.*;
-import sun.jvm.hotspot.debugger.cdbg.basic.*;
-
-final public class BsdSPARCCFrame extends BasicCFrame {
- // package/class internals only
-
- public BsdSPARCCFrame(BsdDebugger dbg, Address sp, Address pc, int address_size) {
- super(dbg.getCDebugger());
- this.sp = sp;
- this.pc = pc;
- this.dbg = dbg;
- this.address_size=address_size;
- if (address_size==8) SPARC_STACK_BIAS = 0x7ff;
- else SPARC_STACK_BIAS = 0x0;
- }
-
- // override base class impl to avoid ELF parsing
- public ClosestSymbol closestSymbolToPC() {
- // try native lookup in debugger.
- return dbg.lookup(dbg.getAddressValue(pc()));
- }
-
- public Address pc() {
- return pc;
- }
-
- public Address localVariableBase() {
- return sp;
- }
-
- public CFrame sender() {
- if (sp == null) {
- return null;
- }
-
- Address nextSP = sp.getAddressAt( SPARCThreadContext.R_SP * address_size + SPARC_STACK_BIAS);
- if (nextSP == null) {
- return null;
- }
- Address nextPC = sp.getAddressAt(SPARCThreadContext.R_O7 * address_size + SPARC_STACK_BIAS);
- if (nextPC == null) {
- return null;
- }
- return new BsdSPARCCFrame(dbg, nextSP, nextPC,address_size);
- }
-
- public static int SPARC_STACK_BIAS;
- private static int address_size;
- private Address pc;
- private Address sp;
- private BsdDebugger dbg;
-}
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/sparc/BsdSPARCThreadContext.java 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/sparc/BsdSPARCThreadContext.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- *
- * 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 sun.jvm.hotspot.debugger.bsd.sparc;
-
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.sparc.*;
-import sun.jvm.hotspot.debugger.bsd.*;
-
-public class BsdSPARCThreadContext extends SPARCThreadContext {
- private BsdDebugger debugger;
-
- public BsdSPARCThreadContext(BsdDebugger debugger) {
- super();
- this.debugger = debugger;
- }
-
- public void setRegisterAsAddress(int index, Address value) {
- setRegister(index, debugger.getAddressValue(value));
- }
-
- public Address getRegisterAsAddress(int index) {
- return debugger.newAddress(getRegister(index));
- }
-}
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Threads.java 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/Threads.java 2010-06-15 22:03:17.000000000 -0700
@@ -37,6 +37,8 @@
import sun.jvm.hotspot.runtime.linux_ia64.LinuxIA64JavaThreadPDAccess;
import sun.jvm.hotspot.runtime.linux_amd64.LinuxAMD64JavaThreadPDAccess;
import sun.jvm.hotspot.runtime.linux_sparc.LinuxSPARCJavaThreadPDAccess;
+import sun.jvm.hotspot.runtime.bsd_x86.BsdX86JavaThreadPDAccess;
+import sun.jvm.hotspot.runtime.bsd_amd64.BsdAMD64JavaThreadPDAccess;
import sun.jvm.hotspot.utilities.*;
public class Threads {
@@ -90,7 +92,12 @@
} else if (cpu.equals("sparc")) {
access = new LinuxSPARCJavaThreadPDAccess();
}
-
+ } else if (os.equals("bsd")) {
+ if (cpu.equals("x86")) {
+ access = new BsdX86JavaThreadPDAccess();
+ } else if (cpu.equals("amd64")) {
+ access = new BsdAMD64JavaThreadPDAccess();
+ }
}
if (access == null) {
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/bsd/BsdSignals.java 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/bsd/BsdSignals.java 2010-07-04 09:31:12.000000000 -0700
@@ -28,37 +28,36 @@
private static String[] signalNames = {
"", /* No signal 0 */
"SIGHUP", /* hangup */
- "SIGINT", /* interrupt (rubout) */
- "SIGQUIT", /* quit (ASCII FS) */
- "SIGILL", /* illegal instruction (not reset when caught) */
+ "SIGINT", /* interrupt */
+ "SIGQUIT", /* quit */
+ "SIGILL", /* illegal instr. (not reset when caught) */
"SIGTRAP", /* trace trap (not reset when caught) */
- "SIGABRT", /* used by abort, replace SIGIOT in the future */
- "SIGIOT",
- "SIGBUS",
+ "SIGABRT", /* abort() */
+ "SIGEMT", /* EMT instruction */
"SIGFPE", /* floating point exception */
"SIGKILL", /* kill (cannot be caught or ignored) */
- "SIGUSR1", /* user defined signal 1 */
+ "SIGBUS", /* bus error */
"SIGSEGV", /* segmentation violation */
- "SIGUSR2", /* user defined signal 2 */
+ "SIGSYS", /* non-existent system call invoked */
"SIGPIPE", /* write on a pipe with no one to read it */
"SIGALRM", /* alarm clock */
"SIGTERM", /* software termination signal from kill */
- "SIGSTKFLT",
- "SIGCHLD", /* child status change alias */
- "SIGCONT", /* stopped process has been continued */
- "SIGSTOP", /* stop (cannot be caught or ignored) */
- "SIGTSTP", /* user stop requested from tty */
- "SIGTTIN", /* background tty read attempted */
- "SIGTTOU", /* background tty write attempted */
- "SIGURG", /* urgent socket condition */
- "SIGXCPU", /* exceeded cpu limit */
+ "SIGURG", /* urgent condition on IO channel */
+ "SIGSTOP", /* sendable stop signal not from tty */
+ "SIGTSTP", /* stop signal from tty */
+ "SIGCONT", /* continue a stopped process */
+ "SIGCHLD", /* to parent on child stop or exit */
+ "SIGTTIN", /* to readers pgrp upon background tty read */
+ "SIGTTOU", /* like TTIN if (tp->t_local&LTOSTOP) */
+ "SIGIO", /* input/output possible signal */
+ "SIGXCPU", /* exceeded CPU time limit */
"SIGXFSZ", /* exceeded file size limit */
- "SIGVTALRM", /* virtual timer expired */
- "SIGPROF", /* profiling timer expired */
- "SIGWINCH", /* window size change */
- "SIGPOLL", /* pollable event occured */
- "SIGPWR", /* power-fail restart */
- "SIGSYS"
+ "SIGVTALRM", /* virtual time alarm */
+ "SIGPROF", /* profiling time alarm */
+ "SIGWINCH", /* window size changes */
+ "SIGINFO", /* information request */
+ "SIGUSR1", /* user defined signal 1 */
+ "SIGUSR2" /* user defined signal 2 */
};
public static String getSignalName(int sigNum) {
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/bsd_ia64/BsdIA64JavaThreadPDAccess.java 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/bsd_ia64/BsdIA64JavaThreadPDAccess.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2003, 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 sun.jvm.hotspot.runtime.bsd_ia64;
-
-import java.io.*;
-import java.util.*;
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.ia64.*;
-import sun.jvm.hotspot.runtime.*;
-import sun.jvm.hotspot.runtime.ia64.*;
-import sun.jvm.hotspot.types.*;
-import sun.jvm.hotspot.utilities.*;
-
-public class BsdIA64JavaThreadPDAccess implements JavaThreadPDAccess {
- // private static AddressField lastJavaPCField;
- // private static AddressField lastJavaFPField;
- private static AddressField lastJavaIFrameField;
- private static AddressField osThreadField;
-
- // Field from OSThread
- private static CIntegerField osThreadPThreadIDField;
-
- // This is currently unneeded but is being kept in case we change
- // the currentFrameGuess algorithm
- private static final long GUESS_SCAN_RANGE = 128 * 1024;
-
- static {
- VM.registerVMInitializedObserver(new Observer() {
- public void update(Observable o, Object data) {
- initialize(VM.getVM().getTypeDataBase());
- }
- });
- }
-
- private static synchronized void initialize(TypeDataBase db) {
- Type type = db.lookupType("JavaThread");
-
- lastJavaIFrameField = type.getAddressField("_last_Java_iframe");
- osThreadField = type.getAddressField("_osthread");
-
- type = db.lookupType("OSThread");
- osThreadPThreadIDField = type.getCIntegerField("_pthread_id");
- }
-
- public Address getLastJavaIFrame(Address addr) {
- return lastJavaIFrameField.getValue(addr);
- }
-
-
- public Address getBaseOfStackPointer(Address addr) {
- return null;
- }
-
- public Address getLastJavaFP(Address addr) {
- return null; // Not in 1.4.1
- }
-
- public Address getLastJavaPC(Address addr) {
- return null; // Not in 1.4.1
- }
-
- public boolean isInterpretedFrame() {
-
- // In 1.4.1 there are only interpreted frames
- // and there is no pc
- return true;
- }
-
- public Frame getLastFramePD(JavaThread thread, Address addr) {
- // The thread is the JavaThread that contains "this"
- // so we don't need any new accessor at the JavaThread level
- Address iframe = getLastJavaIFrame(addr);
- Address pc = thread.getLastJavaPC();
- if (iframe == null) {
- return null; // no information
- }
- return new IA64Frame(thread.getLastJavaSP(), iframe, pc);
- }
-
- public RegisterMap newRegisterMap(JavaThread thread, boolean updateMap) {
- return new IA64RegisterMap(thread, updateMap);
- }
-
- public Frame getCurrentFrameGuess(JavaThread thread, Address addr) {
- return getLastFramePD(thread, addr);
- }
-
- public void printThreadIDOn(Address addr, PrintStream tty) {
- tty.print(getThreadProxy(addr));
- }
-
- public void printInfoOn(Address threadAddr, PrintStream tty) {
- tty.print("Thread id: ");
- printThreadIDOn(threadAddr, tty);
- tty.println("\nLastJavaIFrame: " + getLastJavaIFrame(threadAddr));
- }
-
- public Address getLastSP(Address addr) {
- ThreadProxy t = getThreadProxy(addr);
- IA64ThreadContext context = (IA64ThreadContext) t.getContext();
- return context.getRegisterAsAddress(IA64ThreadContext.SP);
- }
-
- public ThreadProxy getThreadProxy(Address addr) {
- // Addr is the address of the JavaThread.
- // Fetch the OSThread (for now and for simplicity, not making a
- // separate "OSThread" class in this package)
- Address osThreadAddr = osThreadField.getValue(addr);
- // Get the address of the _pthread_id from the OSThread
- Address pthreadIdAddr = osThreadAddr.addOffsetTo(osThreadPThreadIDField.getOffset());
-
- JVMDebugger debugger = VM.getVM().getDebugger();
- return debugger.getThreadForIdentifierAddress(pthreadIdAddr);
- }
-}
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/bsd_sparc/BsdSPARCJavaThreadPDAccess.java 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/bsd_sparc/BsdSPARCJavaThreadPDAccess.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,165 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- *
- * 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 sun.jvm.hotspot.runtime.bsd_sparc;
-
-import java.io.*;
-import java.util.*;
-import sun.jvm.hotspot.debugger.*;
-import sun.jvm.hotspot.debugger.sparc.*;
-import sun.jvm.hotspot.runtime.*;
-import sun.jvm.hotspot.runtime.sparc.*;
-import sun.jvm.hotspot.types.*;
-import sun.jvm.hotspot.utilities.*;
-
-public class BsdSPARCJavaThreadPDAccess implements JavaThreadPDAccess {
- private static AddressField baseOfStackPointerField;
- private static AddressField postJavaStateField;
- private static AddressField osThreadField;
- private static int isPC;
- private static int hasFlushed;
-
- // Field from OSThread
- private static CIntegerField osThreadThreadIDField;
-
- static {
- VM.registerVMInitializedObserver(new Observer() {
- public void update(Observable o, Object data) {
- initialize(VM.getVM().getTypeDataBase());
- }
- });
- }
-
- private static synchronized void initialize(TypeDataBase db) {
- Type type = db.lookupType("JavaThread");
- Type anchorType = db.lookupType("JavaFrameAnchor");
-
- osThreadField = type.getAddressField("_osthread");
- hasFlushed = db.lookupIntConstant("JavaFrameAnchor::flushed").intValue();
-
- type = db.lookupType("OSThread");
- osThreadThreadIDField = type.getCIntegerField("_thread_id");
- }
-
- public Address getLastJavaFP(Address addr) {
- return null;
-
- }
-
- public Address getLastJavaPC(Address addr) {
- return null;
- }
-
- public Address getBaseOfStackPointer(Address addr) {
- return baseOfStackPointerField.getValue(addr);
- }
-
- public Frame getLastFramePD(JavaThread thread, Address addr) {
-
- // This assert doesn't work in the debugging case for threads
- // which are running Java code and which haven't re-entered the
- // runtime (e.g., through a Method.invoke() or otherwise). They
- // haven't yet "decached" their last Java stack pointer to the
- // thread.
-
- // if (Assert.ASSERTS_ENABLED) {
- // Assert.that(hasLastJavaFrame(), "must have last_Java_sp() when suspended");
- // // FIXME: add assertion about flushing register windows for runtime system
- // // (not appropriate for debugging system, though, unless at safepoin t)
- // }
-
- // FIXME: I don't think this is necessary, but might be useful
- // while debugging
- if (thread.getLastJavaSP() == null) {
- return null;
- }
-
- // sparc does a lazy window flush. The _flags field of the JavaFrameAnchor
- // encodes whether the windows have flushed. Whenever the windows have flushed
- // there will be a last_Java_pc.
- // In a relective system we'd have to do something to force the thread to flush
- // its windows and give us the pc (or the younger_sp so we can find it ourselves)
- // In a debugger situation (process or core) the flush should have happened and
- // so if we don't have the younger sp we can find it
- //
- if (thread.getLastJavaPC() != null) {
- return new SPARCFrame(SPARCFrame.biasSP(thread.getLastJavaSP()), thread.getLastJavaPC());
- } else {
- Frame top = getCurrentFrameGuess(thread, addr);
- return new SPARCFrame(SPARCFrame.biasSP(thread.getLastJavaSP()),
- SPARCFrame.biasSP(SPARCFrame.findYoungerSP(top.getSP(), thread.getLastJavaSP())),
- false);
- }
-
-
- }
-
- public RegisterMap newRegisterMap(JavaThread thread, boolean updateMap) {
- return new SPARCRegisterMap(thread, updateMap);
- }
-
- public Frame getCurrentFrameGuess(JavaThread thread, Address addr) {
- ThreadProxy t = getThreadProxy(addr);
- SPARCThreadContext context = (SPARCThreadContext) t.getContext();
- // For now, let's see what happens if we do a similar thing to
- // what the runtime code does. I suspect this may cause us to lose
- // the top frame from the stack.
- Address sp = context.getRegisterAsAddress(SPARCThreadContext.R_SP);
- Address pc = context.getRegisterAsAddress(SPARCThreadContext.R_PC);
-
- if ((sp == null) || (pc == null)) {
- // Problems (have not hit this case so far, but would be bad to continue if we did)
- return null;
- }
-
- return new SPARCFrame(sp, pc);
- }
-
-
- public void printThreadIDOn(Address addr, PrintStream tty) {
- tty.print(getThreadProxy(addr));
- }
-
- public Address getLastSP(Address addr) {
- ThreadProxy t = getThreadProxy(addr);
- SPARCThreadContext context = (SPARCThreadContext) t.getContext();
- return SPARCFrame.unBiasSP(context.getRegisterAsAddress(SPARCThreadContext.R_SP));
- }
-
- public void printInfoOn(Address threadAddr, PrintStream tty) {
- }
-
- public ThreadProxy getThreadProxy(Address addr) {
- // Fetch the OSThread (for now and for simplicity, not making a
- // separate "OSThread" class in this package)
- Address osThreadAddr = osThreadField.getValue(addr);
- // Get the address of the thread ID from the OSThread
- Address tidAddr = osThreadAddr.addOffsetTo(osThreadThreadIDField.getOffset());
-
- JVMDebugger debugger = VM.getVM().getDebugger();
- return debugger.getThreadForIdentifierAddress(tidAddr);
- }
-
-
-}
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/bsd_x86/BsdSignals.java 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/bsd_x86/BsdSignals.java 2010-07-04 09:31:25.000000000 -0700
@@ -28,37 +28,36 @@
private static String[] signalNames = {
"", /* No signal 0 */
"SIGHUP", /* hangup */
- "SIGINT", /* interrupt (rubout) */
- "SIGQUIT", /* quit (ASCII FS) */
- "SIGILL", /* illegal instruction (not reset when caught) */
+ "SIGINT", /* interrupt */
+ "SIGQUIT", /* quit */
+ "SIGILL", /* illegal instr. (not reset when caught) */
"SIGTRAP", /* trace trap (not reset when caught) */
- "SIGABRT", /* used by abort, replace SIGIOT in the future */
- "SIGIOT",
- "SIGBUS",
+ "SIGABRT", /* abort() */
+ "SIGEMT", /* EMT instruction */
"SIGFPE", /* floating point exception */
"SIGKILL", /* kill (cannot be caught or ignored) */
- "SIGUSR1", /* user defined signal 1 */
+ "SIGBUS", /* bus error */
"SIGSEGV", /* segmentation violation */
- "SIGUSR2", /* user defined signal 2 */
+ "SIGSYS", /* non-existent system call invoked */
"SIGPIPE", /* write on a pipe with no one to read it */
"SIGALRM", /* alarm clock */
"SIGTERM", /* software termination signal from kill */
- "SIGSTKFLT",
- "SIGCHLD", /* child status change alias */
- "SIGCONT", /* stopped process has been continued */
- "SIGSTOP", /* stop (cannot be caught or ignored) */
- "SIGTSTP", /* user stop requested from tty */
- "SIGTTIN", /* background tty read attempted */
- "SIGTTOU", /* background tty write attempted */
- "SIGURG", /* urgent socket condition */
- "SIGXCPU", /* exceeded cpu limit */
+ "SIGURG", /* urgent condition on IO channel */
+ "SIGSTOP", /* sendable stop signal not from tty */
+ "SIGTSTP", /* stop signal from tty */
+ "SIGCONT", /* continue a stopped process */
+ "SIGCHLD", /* to parent on child stop or exit */
+ "SIGTTIN", /* to readers pgrp upon background tty read */
+ "SIGTTOU", /* like TTIN if (tp->t_local&LTOSTOP) */
+ "SIGIO", /* input/output possible signal */
+ "SIGXCPU", /* exceeded CPU time limit */
"SIGXFSZ", /* exceeded file size limit */
- "SIGVTALRM", /* virtual timer expired */
- "SIGPROF", /* profiling timer expired */
- "SIGWINCH", /* window size change */
- "SIGPOLL", /* pollable event occured */
- "SIGPWR", /* power-fail restart */
- "SIGSYS"
+ "SIGVTALRM", /* virtual time alarm */
+ "SIGPROF", /* profiling time alarm */
+ "SIGWINCH", /* window size changes */
+ "SIGINFO", /* information request */
+ "SIGUSR1", /* user defined signal 1 */
+ "SIGUSR2" /* user defined signal 2 */
};
public static String getSignalName(int sigNum) {
--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java 2010-06-15 22:03:18.000000000 -0700
@@ -37,6 +37,14 @@
return "solaris";
} else if (os.equals("Linux")) {
return "linux";
+ } else if (os.equals("FreeBSD")) {
+ return "bsd";
+ } else if (os.equals("NetBSD")) {
+ return "bsd";
+ } else if (os.equals("OpenBSD")) {
+ return "bsd";
+ } else if (os.equals("Darwin")) {
+ return "bsd";
} else if (os.startsWith("Windows")) {
return "win32";
} else {
--- ./hotspot/make/Makefile 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/make/Makefile 2010-10-31 14:22:38.000000000 -0700
@@ -321,28 +321,28 @@
ifneq ($(OSNAME),windows)
ifeq ($(ZERO_BUILD), true)
ifeq ($(SHARK_BUILD), true)
-$(EXPORT_JRE_LIB_ARCH_DIR)/%.so: $(SHARK_DIR)/%.so
+$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
-$(EXPORT_SERVER_DIR)/%.so: $(SHARK_DIR)/%.so
+$(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
else
-$(EXPORT_JRE_LIB_ARCH_DIR)/%.so: $(ZERO_DIR)/%.so
+$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(ZERO_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
-$(EXPORT_SERVER_DIR)/%.so: $(ZERO_DIR)/%.so
+$(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(ZERO_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
endif
else
-$(EXPORT_JRE_LIB_ARCH_DIR)/%.so: $(C1_DIR)/%.so
+$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(C1_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
-$(EXPORT_JRE_LIB_ARCH_DIR)/%.so: $(C2_DIR)/%.so
+$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
-$(EXPORT_CLIENT_DIR)/%.so: $(C1_DIR)/%.so
+$(EXPORT_CLIENT_DIR)/%.$(LIBRARY_SUFFIX): $(C1_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
-$(EXPORT_CLIENT_DIR)/64/%.so: $(C1_DIR)/%.so
+$(EXPORT_CLIENT_DIR)/64/%.$(LIBRARY_SUFFIX): $(C1_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
-$(EXPORT_SERVER_DIR)/%.so: $(C2_DIR)/%.so
+$(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
-$(EXPORT_SERVER_DIR)/64/%.so: $(C2_DIR)/%.so
+$(EXPORT_SERVER_DIR)/64/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
endif
endif
--- ./hotspot/make/bsd/Makefile 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/Makefile 2010-10-31 14:26:55.000000000 -0700
@@ -39,11 +39,11 @@
# One can set ALT_BOOTDIR or BOOTDIR to point to a jdk that runs on
# an architecture that differs from the target architecture, as long
# as the bootstrap jdk runs under the same flavor of OS as the target
-# (i.e., if the target is bsd, point to a jdk that runs on a bsd
+# (i.e., if the target is linux, point to a jdk that runs on a linux
# box). In order to use such a bootstrap jdk, set the make variable
# REMOTE to the desired remote command mechanism, e.g.,
#
-# make REMOTE="rsh -l me myotherbsdbox"
+# make REMOTE="rsh -l me myotherlinuxbox"
# Along with VM, Serviceability Agent (SA) is built for SA/JDI binding.
# JDI binding on SA produces two binaries:
@@ -92,7 +92,7 @@
#
# We only do this on SunOS variants, for a couple of reasons:
# * It is extremely rare that source trees exist on other systems
-# * It has been claimed that the Bsd automounter is flakey, so
+# * It has been claimed that the Linux automounter is flakey, so
# changing GAMMADIR in a way that exercises the automounter could
# prove to be a source of unreliability in the build process.
# Obviously, this Makefile is only relevant on SunOS boxes to begin
@@ -224,11 +224,12 @@
checks: check_os_version check_j2se_version
-# We do not want people accidentally building on old systems (e.g. Bsd 2.2.x,
+# We do not want people accidentally building on old systems (e.g. Linux 2.2.x,
# Solaris 2.5.1, 2.6).
# Disable this check by setting DISABLE_HOTSPOT_OS_VERSION_CHECK=ok.
-SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 2.7%
+#SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 2.7%
+DISABLE_HOTSPOT_OS_VERSION_CHECK = ok
OS_VERSION := $(shell uname -r)
EMPTY_IF_NOT_SUPPORTED = $(filter $(SUPPORTED_OS_VERSION),$(OS_VERSION))
--- ./hotspot/make/bsd/makefiles/buildtree.make 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/makefiles/buildtree.make 2010-10-31 14:26:55.000000000 -0700
@@ -287,10 +287,11 @@
[ -n "$$JAVA_HOME" ] && { echo ": \$${JAVA_HOME:=$${JAVA_HOME}}"; }; \
{ \
echo "LD_LIBRARY_PATH=.:$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
+ echo "DYLD_LIBRARY_PATH=.:$${DYLD_LIBRARY_PATH:+$$DYLD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
echo "CLASSPATH=$${CLASSPATH:+$$CLASSPATH:}.:\$${JAVA_HOME}/jre/lib/rt.jar:\$${JAVA_HOME}/jre/lib/i18n.jar"; \
} | sed s:$${JAVA_HOME:--------}:\$${JAVA_HOME}:g; \
echo "HOTSPOT_BUILD_USER=\"$${LOGNAME:-$$USER} in `basename $(GAMMADIR)`\""; \
- echo "export JAVA_HOME LD_LIBRARY_PATH CLASSPATH HOTSPOT_BUILD_USER"; \
+ echo "export JAVA_HOME LD_LIBRARY_PATH DYLD_LIBRARY_PATH CLASSPATH HOTSPOT_BUILD_USER"; \
) > $@
env.csh: env.sh
--- ./hotspot/make/bsd/makefiles/cscope.make 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/makefiles/cscope.make 2010-07-04 09:31:25.000000000 -0700
@@ -71,7 +71,7 @@
# OS-specific files for other systems are excluded by default. Use CS_OS=yes
# to include platform-specific files for other platforms.
ifndef CS_OS
-CS_OS = bsd macos solaris win32
+CS_OS = linux macos solaris win32 bsd
CS_PRUNE_OS = $(patsubst %,-o -name '*%*',$(filter-out ${OS},${CS_OS}))
endif
--- ./hotspot/make/bsd/makefiles/defs.make 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/makefiles/defs.make 2010-10-31 14:48:17.000000000 -0700
@@ -72,8 +72,8 @@
HS_ARCH = sparc
endif
-# x86_64
-ifeq ($(ARCH), x86_64)
+# amd64
+ifeq ($(ARCH), amd64)
ifeq ($(ARCH_DATA_MODEL), 64)
ARCH_DATA_MODEL = 64
MAKE_ARGS += LP64=1
@@ -85,17 +85,27 @@
PLATFORM = bsd-i586
VM_PLATFORM = bsd_i486
HS_ARCH = x86
- # We have to reset ARCH to i686 since SRCARCH relies on it
- ARCH = i686
+ # We have to reset ARCH to i386 since SRCARCH relies on it
+ ARCH = i386
endif
endif
-# i686
-ifeq ($(ARCH), i686)
- ARCH_DATA_MODEL = 32
- PLATFORM = bsd-i586
- VM_PLATFORM = bsd_i486
- HS_ARCH = x86
+# i386
+ifeq ($(ARCH), i386)
+ ifeq ($(ARCH_DATA_MODEL), 64)
+ ARCH_DATA_MODEL = 64
+ MAKE_ARGS += LP64=1
+ PLATFORM = bsd-amd64
+ VM_PLATFORM = bsd_amd64
+ HS_ARCH = x86
+ # We have to reset ARCH to amd64 since SRCARCH relies on it
+ ARCH = amd64
+ else
+ ARCH_DATA_MODEL = 32
+ PLATFORM = bsd-i586
+ VM_PLATFORM = bsd_i486
+ HS_ARCH = x86
+ endif
endif
# ARM
@@ -116,39 +126,45 @@
JDK_INCLUDE_SUBDIR=bsd
+# Library suffix
+OS_VENDOR:=$(shell uname -s)
+ifeq ($(OS_VENDOR),Darwin)
+ LIBRARY_SUFFIX=dylib
+else
+ LIBRARY_SUFFIX=so
+endif
+
# FIXUP: The subdirectory for a debug build is NOT the same on all platforms
VM_DEBUG=jvmg
EXPORT_LIST += $(EXPORT_DOCS_DIR)/platform/jvmti/jvmti.html
# client and server subdirectories have symbolic links to ../libjsig.so
-EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.so
+EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.$(LIBRARY_SUFFIX)
EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
ifndef BUILD_CLIENT_ONLY
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
-EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.so
+EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
endif
ifneq ($(ZERO_BUILD), true)
ifeq ($(ARCH_DATA_MODEL), 32)
EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
- EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.so
+ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
endif
endif
# Serviceability Binaries
# No SA Support for PPC, IA64, ARM or zero
-ADD_SA_BINARIES/x86 = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so \
- $(EXPORT_LIB_DIR)/sa-jdi.jar
-ADD_SA_BINARIES/sparc = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so \
- $(EXPORT_LIB_DIR)/sa-jdi.jar
-ADD_SA_BINARIES/ppc =
-ADD_SA_BINARIES/ia64 =
-ADD_SA_BINARIES/arm =
-ADD_SA_BINARIES/zero =
+ADD_SA_BINARIES/x86 = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \
+ $(EXPORT_LIB_DIR)/sa-jdi.jar
+ADD_SA_BINARIES/sparc = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \
+ $(EXPORT_LIB_DIR)/sa-jdi.jar
+ADD_SA_BINARIES/ppc =
+ADD_SA_BINARIES/ia64 =
+ADD_SA_BINARIES/arm =
+ADD_SA_BINARIES/zero =
EXPORT_LIST += $(ADD_SA_BINARIES/$(HS_ARCH))
-
-
--- ./hotspot/make/bsd/makefiles/gcc.make 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/makefiles/gcc.make 2010-10-31 15:24:40.000000000 -0700
@@ -22,18 +22,22 @@
#
#
+OS_VENDOR = $(shell uname -s)
+
#------------------------------------------------------------------------
# CC, CPP & AS
ifdef ALT_COMPILER_PATH
+CXX = $(ALT_COMPILER_PATH)/g++
CPP = $(ALT_COMPILER_PATH)/g++
CC = $(ALT_COMPILER_PATH)/gcc
else
-CPP = g++
-CC = gcc
+CXX ?= g++
+CPP = $(CXX)
+CC ?= gcc
endif
-AS = $(CC) -c
+AS = $(CC) -c -x assembler-with-cpp
# -dumpversion in gcc-2.91 shows "egcs-2.91.66". In later version, it only
# prints the numbers (e.g. "2.95", "3.2.1")
@@ -67,7 +71,7 @@
CFLAGS += $(VM_PICFLAG)
CFLAGS += -fno-rtti
CFLAGS += -fno-exceptions
-CFLAGS += -D_REENTRANT
+CFLAGS += -pthread
CFLAGS += -fcheck-new
ARCHFLAG = $(ARCHFLAG/$(BUILDARCH))
@@ -76,10 +80,12 @@
ARCHFLAG/ia64 =
ARCHFLAG/sparc = -m32 -mcpu=v9
ARCHFLAG/sparcv9 = -m64 -mcpu=v9
-ARCHFLAG/arm = -fsigned-char
ARCHFLAG/zero = $(ZERO_ARCHFLAG)
-ifndef E500V2
-ARCHFLAG/ppc = -mcpu=powerpc
+
+# Darwin-specific build flags
+ifeq ($(OS_VENDOR), Darwin)
+ # Ineffecient 16-byte stack re-alignment on Darwin/IA32
+ ARCHFLAG/i486 += -mstackrealign
endif
CFLAGS += $(ARCHFLAG)
@@ -124,6 +130,11 @@
CFLAGS_WARN/DEFAULT = $(WARNINGS_ARE_ERRORS) $(ACCEPTABLE_WARNINGS)
# Special cases
CFLAGS_WARN/BYFILE = $(CFLAGS_WARN/$@)$(CFLAGS_WARN/DEFAULT$(CFLAGS_WARN/$@))
+# XXXDARWIN: for _dyld_bind_fully_image_containing_address
+ifeq ($(OS_VENDOR), Darwin)
+ CFLAGS_WARN/os_bsd.o = $(CFLAGS_WARN/DEFAULT) -Wno-deprecated-declarations
+endif
+
# The flags to use for an Optimized g++ build
OPT_CFLAGS += -O3
@@ -159,28 +170,40 @@
LFLAGS += -Wl,-relax
endif
-# Enable linker optimization
-LFLAGS += -Xlinker -O1
-
-# If this is a --hash-style=gnu system, use --hash-style=both
-# The gnu .hash section won't work on some Bsd 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
-LFLAGS += $(LDFLAGS_HASH_STYLE)
-
# Use $(MAPFLAG:FILENAME=real_file_name) to specify a map file.
MAPFLAG = -Xlinker --version-script=FILENAME
-# Use $(SONAMEFLAG:SONAME=soname) to specify the intrinsic name of a shared obj
-SONAMEFLAG = -Xlinker -soname=SONAME
+#
+# Shared Library
+#
+ifeq ($(OS_VENDOR), Darwin)
+ # Standard linker flags
+ LFLAGS +=
+
+ # Darwin doesn't use ELF and doesn't support version scripts
+ LDNOMAP = true
+
+ # Use $(SONAMEFLAG:SONAME=soname) to specify the intrinsic name of a shared obj
+ SONAMEFLAG =
+
+ # Build shared library
+ SHARED_FLAG = -dynamiclib $(VM_PICFLAG)
-# Build shared library
-SHARED_FLAG = -shared
+ # Keep symbols even they are not used
+ #AOUT_FLAGS += -export-dynamic
+else
+ # Enable linker optimization
+ LFLAGS += -Xlinker -O1
+
+ # Use $(SONAMEFLAG:SONAME=soname) to specify the intrinsic name of a shared obj
+ SONAMEFLAG = -Xlinker -soname=SONAME
-# Keep symbols even they are not used
-AOUT_FLAGS += -export-dynamic
+ # Build shared library
+ SHARED_FLAG = -shared $(VM_PICFLAG)
+
+ # Keep symbols even they are not used
+ AOUT_FLAGS += -export-dynamic
+endif
#------------------------------------------------------------------------
# Debug flags
--- ./hotspot/make/bsd/makefiles/jsig.make 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/makefiles/jsig.make 2010-07-04 09:31:25.000000000 -0700
@@ -25,11 +25,16 @@
# Rules to build signal interposition library, used by vm.make
# libjsig[_g].so: signal interposition library
-JSIG = jsig
-LIBJSIG = lib$(JSIG).so
+JSIG = jsig
+JSIG_G = $(JSIG)$(G_SUFFIX)
-JSIG_G = $(JSIG)$(G_SUFFIX)
-LIBJSIG_G = lib$(JSIG_G).so
+ifeq ($(OS_VENDOR), Darwin)
+ LIBJSIG = lib$(JSIG).dylib
+ LIBJSIG_G = lib$(JSIG_G).dylib
+else
+ LIBJSIG = lib$(JSIG).so
+ LIBJSIG_G = lib$(JSIG_G).so
+endif
JSIGSRCDIR = $(GAMMADIR)/src/os/$(Platform_os_family)/vm
@@ -42,7 +47,7 @@
# cause problems with interposing. See CR: 6466665
# LFLAGS_JSIG += $(MAPFLAG:FILENAME=$(LIBJSIG_MAPFILE))
-LFLAGS_JSIG += -D_GNU_SOURCE -D_REENTRANT $(LDFLAGS_HASH_STYLE)
+LFLAGS_JSIG += -D_GNU_SOURCE -pthread $(LDFLAGS_HASH_STYLE)
# DEBUG_BINARIES overrides everything, use full -g debug information
ifeq ($(DEBUG_BINARIES), true)
@@ -52,7 +57,7 @@
$(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE)
@echo Making signal interposition lib...
$(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \
- $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) -o $@ $< -ldl
+ $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) -o $@ $<
$(QUIETLY) [ -f $(LIBJSIG_G) ] || { ln -s $@ $(LIBJSIG_G); }
install_jsig: $(LIBJSIG)
--- ./hotspot/make/bsd/makefiles/launcher.make 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/makefiles/launcher.make 2010-07-04 09:31:25.000000000 -0700
@@ -46,7 +46,7 @@
LIBS_LAUNCHER += $(STATIC_STDCXX) $(LIBS)
else
LAUNCHER.o = launcher.o
- LFLAGS_LAUNCHER += -L `pwd`
+ LFLAGS_LAUNCHER += -L`pwd`
LIBS_LAUNCHER += -l$(JVM) $(LIBS)
endif
--- ./hotspot/make/bsd/makefiles/sa.make 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/makefiles/sa.make 2010-10-31 14:26:55.000000000 -0700
@@ -45,8 +45,8 @@
# gnumake 3.78.1 does not accept the *s that
# are in AGENT_FILES1 and AGENT_FILES2, so use the shell to expand them
-AGENT_FILES1 := $(shell /usr/bin/test -d $(AGENT_DIR) && /bin/ls $(AGENT_FILES1))
-AGENT_FILES2 := $(shell /usr/bin/test -d $(AGENT_DIR) && /bin/ls $(AGENT_FILES2))
+AGENT_FILES1 := $(shell /bin/test -d $(AGENT_DIR) && /bin/ls $(AGENT_FILES1))
+AGENT_FILES2 := $(shell /bin/test -d $(AGENT_DIR) && /bin/ls $(AGENT_FILES2))
AGENT_FILES1_LIST := $(GENERATED)/agent1.classes.list
AGENT_FILES2_LIST := $(GENERATED)/agent2.classes.list
--- ./hotspot/make/bsd/makefiles/saproc.make 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/makefiles/saproc.make 2010-10-31 14:26:55.000000000 -0700
@@ -25,23 +25,34 @@
# Rules to build serviceability agent library, used by vm.make
# libsaproc[_g].so: serviceability agent
-
-SAPROC = saproc
-LIBSAPROC = lib$(SAPROC).so
-
+SAPROC = saproc
SAPROC_G = $(SAPROC)$(G_SUFFIX)
-LIBSAPROC_G = lib$(SAPROC_G).so
+
+ifeq ($(OS_VENDOR), Darwin)
+ LIBSAPROC = lib$(SAPROC).dylib
+ LIBSAPROC_G = lib$(SAPROC_G).dylib
+else
+ LIBSAPROC = lib$(SAPROC).so
+ LIBSAPROC_G = lib$(SAPROC_G).so
+endif
AGENT_DIR = $(GAMMADIR)/agent
SASRCDIR = $(AGENT_DIR)/src/os/$(Platform_os_family)
+ifeq ($(OS_VENDOR), FreeBSD)
SASRCFILES = $(SASRCDIR)/salibelf.c \
$(SASRCDIR)/symtab.c \
$(SASRCDIR)/libproc_impl.c \
$(SASRCDIR)/ps_proc.c \
$(SASRCDIR)/ps_core.c \
+ $(SASRCDIR)/hsearch_r.c \
$(SASRCDIR)/BsdDebuggerLocal.c
+SALIBS = -lutil -lthread_db
+else
+SASRCFILES = $(SASRCDIR)/StubDebuggerLocal.c
+SALIBS =
+endif
SAMAPFILE = $(SASRCDIR)/mapfile
@@ -60,7 +71,10 @@
$(MAKE) -f vm.make $(LIBSAPROC); \
fi
-SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) $(LDFLAGS_HASH_STYLE)
+ifneq ($(OS_VENDOR), Darwin)
+SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE))
+endif
+SA_LFLAGS += $(LDFLAGS_HASH_STYLE)
$(LIBSAPROC): $(SASRCFILES) $(SAMAPFILE)
$(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \
@@ -73,12 +87,12 @@
-I$(SASRCDIR) \
-I$(GENERATED) \
-I$(BOOT_JAVA_HOME)/include \
- -I$(BOOT_JAVA_HOME)/include/$(Platform_os_family) \
+ -I$(BOOT_JAVA_HOME)/include/$(shell uname -s | tr "[:upper:]" "[:lower:]") \
$(SASRCFILES) \
$(SA_LFLAGS) \
$(SA_DEBUG_CFLAGS) \
-o $@ \
- -lthread_db
+ $(SALIBS)
$(QUIETLY) [ -f $(LIBSAPROC_G) ] || { ln -s $@ $(LIBSAPROC_G); }
install_saproc: checkAndBuildSA
--- ./hotspot/make/bsd/makefiles/vm.make 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/makefiles/vm.make 2010-10-31 14:26:55.000000000 -0700
@@ -90,6 +90,10 @@
${JRE_VERSION} \
${VM_DISTRO}
+ifdef DEFAULT_LIBPATH
+CPPFLAGS += -DDEFAULT_LIBPATH="\"$(DEFAULT_LIBPATH)\""
+endif
+
# CFLAGS_WARN holds compiler options to suppress/enable warnings.
CFLAGS += $(CFLAGS_WARN/BYFILE)
@@ -100,7 +104,7 @@
CFLAGS += $(EXTRA_CFLAGS)
LFLAGS += $(EXTRA_CFLAGS)
-LIBS += -lm -ldl -lpthread
+LIBS += -lm -pthread
# By default, link the *.o into the library, not the executable.
LINK_INTO$(LINK_INTO) = LIBJVM
@@ -114,9 +118,15 @@
#----------------------------------------------------------------------
# JVM
-JVM = jvm
-LIBJVM = lib$(JVM).so
-LIBJVM_G = lib$(JVM)$(G_SUFFIX).so
+JVM = jvm
+ifeq ($(OS_VENDOR), Darwin)
+ LIBJVM = lib$(JVM).dylib
+ LIBJVM_G = lib$(JVM)$(G_SUFFIX).dylib
+ CFLAGS += -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE
+else
+ LIBJVM = lib$(JVM).so
+ LIBJVM_G = lib$(JVM)$(G_SUFFIX).so
+endif
JVM_OBJ_FILES = $(Obj_Files)
@@ -137,15 +147,7 @@
vm.def: $(Res_Files) $(Obj_Files)
sh $(GAMMADIR)/make/bsd/makefiles/build_vm_def.sh *.o > $@
-ifeq ($(SHARK_BUILD), true)
- STATIC_CXX = false
-else
- ifeq ($(ZERO_LIBARCH), ppc64)
- STATIC_CXX = false
- else
- STATIC_CXX = true
- endif
-endif
+STATIC_CXX = false
ifeq ($(LINK_INTO),AOUT)
LIBJVM.o =
@@ -157,14 +159,21 @@
LFLAGS_VM$(LDNOMAP) += $(MAPFLAG:FILENAME=$(LIBJVM_MAPFILE))
LFLAGS_VM += $(SONAMEFLAG:SONAME=$(LIBJVM))
+ ifeq ($(OS_VENDOR), Darwin)
+ LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/.
+ LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/..
+ LFLAGS_VM += -Xlinker -install_name -Xlinker @rpath/$(@F)
+ endif
+
# JVM is statically linked with libgcc[_s] and libstdc++; this is needed to
# get around library dependency and compatibility issues. Must use gcc not
# g++ to link.
ifeq ($(STATIC_CXX), true)
LFLAGS_VM += $(STATIC_LIBGCC)
LIBS_VM += $(STATIC_STDCXX)
+ LINK_VM = $(LINK_LIB.c)
else
- LIBS_VM += -lstdc++
+ LINK_VM = $(LINK_LIB.CC)
endif
LIBS_VM += $(LIBS)
@@ -177,7 +186,6 @@
LIBS_VM += $(LLVM_LIBS)
endif
-LINK_VM = $(LINK_LIB.c)
# rule for building precompiled header
$(PRECOMPILED_HEADER): $(Precompiled_Files)
@@ -205,11 +213,6 @@
LD_SCRIPT_FLAG = -Wl,-T,$(LD_SCRIPT)
endif
-# With more recent Redhat releases (or the cutting edge version Fedora), if
-# SEBsd is configured to be enabled, the runtime linker will fail to apply
-# the text relocation to libjvm.so considering that it is built as a non-PIC
-# DSO. To workaround that, we run chcon to libjvm.so after it is built. See
-# details in bug 6538311.
$(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) $(LD_SCRIPT)
$(QUIETLY) { \
echo Linking vm...; \
@@ -219,17 +222,6 @@
$(LINK_LIB.CC/POST_HOOK) \
rm -f $@.1; ln -s $@ $@.1; \
[ -f $(LIBJVM_G) ] || { ln -s $@ $(LIBJVM_G); ln -s $@.1 $(LIBJVM_G).1; }; \
- if [ \"$(CROSS_COMPILE_ARCH)\" = \"\" ] ; then \
- if [ -x /usr/sbin/sebsdenabled ] ; then \
- /usr/sbin/sebsdenabled; \
- if [ $$? = 0 ] ; then \
- /usr/bin/chcon -t textrel_shlib_t $@; \
- if [ $$? != 0 ]; then \
- echo "ERROR: Cannot chcon $@"; \
- fi \
- fi \
- fi \
- fi \
}
DEST_JVM = $(JDK_LIBDIR)/$(VM_SUBDIR)/$(LIBJVM)
--- ./hotspot/make/bsd/makefiles/zeroshark.make 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/makefiles/zeroshark.make 2010-07-04 09:31:26.000000000 -0700
@@ -40,4 +40,23 @@
CFLAGS += -D_LP64=1
endif
+# Specify the path to the FFI headers
+ifdef ALT_PACKAGE_PATH
+ PACKAGE_PATH = $(ALT_PACKAGE_PATH)
+else
+ ifeq ($(OS_VENDOR),Apple)
+ PACKAGE_PATH = /opt/local
+ else
+ ifeq ($(OS_VENDOR),NetBSD)
+ PACKAGE_PATH = /usr/pkg
+ LIBS += -Wl,-R${PACKAGE_PATH}/lib
+ else
+ PACKAGE_PATH = /usr/local
+ endif
+ endif
+endif
+
+CFLAGS += -I$(PACKAGE_PATH)/include
+LIBS += -L$(PACKAGE_PATH)/lib -lffi
+
OPT_CFLAGS/compactingPermGenGen.o = -O1
--- ./hotspot/make/bsd/platform_amd64 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/platform_amd64 2009-06-06 16:53:58.000000000 -0700
@@ -12,4 +12,4 @@
compiler = gcc
-sysdefs = -DBSD -D_GNU_SOURCE -DAMD64
+sysdefs = -D_ALLBSD_SOURCE -D_GNU_SOURCE -DAMD64
--- ./hotspot/make/bsd/platform_amd64.suncc 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/platform_amd64.suncc 2010-01-17 15:46:11.000000000 -0800
@@ -14,4 +14,4 @@
gnu_dis_arch = amd64
-sysdefs = -DBSD -DSPARC_WORKS -D_GNU_SOURCE -DAMD64
+sysdefs = -D_ALLBSD_SOURCE -DSPARC_WORKS -D_GNU_SOURCE -DAMD64
--- ./hotspot/make/bsd/platform_i486 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/platform_i486 2009-06-06 16:53:58.000000000 -0700
@@ -12,4 +12,4 @@
compiler = gcc
-sysdefs = -DBSD -D_GNU_SOURCE -DIA32
+sysdefs = -D_ALLBSD_SOURCE -D_GNU_SOURCE -DIA32
--- ./hotspot/make/bsd/platform_i486.suncc 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/platform_i486.suncc 2010-01-17 15:46:11.000000000 -0800
@@ -14,4 +14,4 @@
gnu_dis_arch = i386
-sysdefs = -DBSD -DSPARC_WORKS -D_GNU_SOURCE -DIA32
+sysdefs = -D_ALLBSD_SOURCE -DSPARC_WORKS -D_GNU_SOURCE -DIA32
--- ./hotspot/make/bsd/platform_ia64 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/platform_ia64 2010-01-17 15:46:11.000000000 -0800
@@ -10,6 +10,6 @@
gnu_dis_arch = ia64
-sysdefs = -DBSD -D_GNU_SOURCE -DIA64 -DCC_INTERP
+sysdefs = -D_ALLBSD_SOURCE -D_GNU_SOURCE -DIA64 -DCC_INTERP
mark_style = alignment
--- ./hotspot/make/bsd/platform_sparc 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/platform_sparc 2009-06-06 16:53:58.000000000 -0700
@@ -12,4 +12,4 @@
compiler = gcc
-sysdefs = -DBSD -D_GNU_SOURCE -DSPARC
+sysdefs = -D_ALLBSD_SOURCE -D_GNU_SOURCE -DSPARC
--- ./hotspot/make/bsd/platform_sparcv9 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/platform_sparcv9 2010-01-17 15:46:11.000000000 -0800
@@ -12,4 +12,4 @@
compiler = gcc
-sysdefs = -DBSD -D_GNU_SOURCE -DSPARC
+sysdefs = -D_ALLBSD_SOURCE -D_GNU_SOURCE -DSPARC
--- ./hotspot/make/bsd/platform_zero.in 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/make/bsd/platform_zero.in 2009-11-04 19:52:29.000000000 -0800
@@ -14,4 +14,4 @@
gnu_dis_arch = zero
-sysdefs = -DBSD -D_GNU_SOURCE -DCC_INTERP -DZERO -D@ZERO_ARCHDEF@ -DZERO_LIBARCH=\"@ZERO_LIBARCH@\"
+sysdefs = -D_ALLBSD_SOURCE -D_GNU_SOURCE -DCC_INTERP -DZERO -D@ZERO_ARCHDEF@ -DZERO_LIBARCH=\"@ZERO_LIBARCH@\"
--- ./hotspot/make/defs.make 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/make/defs.make 2010-10-31 14:03:01.000000000 -0700
@@ -119,13 +119,23 @@
# Windows should have OS predefined
ifeq ($(OS),)
OS := $(shell uname -s)
+ ifneq ($(findstring BSD,$(OS)),)
+ OS=bsd
+ endif
+ ifeq ($(OS), Darwin)
+ OS=bsd
+ endif
HOST := $(shell uname -n)
endif
-# If not SunOS and not Linux, assume Windows
+# If not SunOS, not Linux and not BSD, assume Windows
ifneq ($(OS), Linux)
ifneq ($(OS), SunOS)
- OSNAME=windows
+ ifneq ($(OS), bsd)
+ OSNAME=windows
+ else
+ OSNAME=bsd
+ endif
else
OSNAME=solaris
endif
--- ./hotspot/make/linux/makefiles/defs.make 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/make/linux/makefiles/defs.make 2010-10-31 14:24:05.000000000 -0700
@@ -116,33 +116,36 @@
JDK_INCLUDE_SUBDIR=linux
+# Library suffix
+LIBRARY_SUFFIX=so
+
# FIXUP: The subdirectory for a debug build is NOT the same on all platforms
VM_DEBUG=jvmg
EXPORT_LIST += $(EXPORT_DOCS_DIR)/platform/jvmti/jvmti.html
# client and server subdirectories have symbolic links to ../libjsig.so
-EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.so
+EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.$(LIBRARY_SUFFIX)
EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
ifndef BUILD_CLIENT_ONLY
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
-EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.so
+EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
endif
ifneq ($(ZERO_BUILD), true)
ifeq ($(ARCH_DATA_MODEL), 32)
EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
- EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.so
+ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
endif
endif
# Serviceability Binaries
# No SA Support for PPC, IA64, ARM or zero
-ADD_SA_BINARIES/x86 = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so \
+ADD_SA_BINARIES/x86 = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \
$(EXPORT_LIB_DIR)/sa-jdi.jar
-ADD_SA_BINARIES/sparc = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so \
+ADD_SA_BINARIES/sparc = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \
$(EXPORT_LIB_DIR)/sa-jdi.jar
ADD_SA_BINARIES/ppc =
ADD_SA_BINARIES/ia64 =
--- ./hotspot/make/sa.files 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/make/sa.files 2010-06-15 22:03:19.000000000 -0700
@@ -50,6 +50,9 @@
$(AGENT_SRC_DIR)/sun/jvm/hotspot/compiler/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/amd64/*.java \
+$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/bsd/*.java \
+$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/bsd/amd64/*.java \
+$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/bsd/x86/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/basic/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/basic/x86/*.java \
@@ -95,6 +98,9 @@
AGENT_FILES2 = \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/amd64/*.java \
+$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/bsd/*.java \
+$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/bsd_amd64/*.java \
+$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/bsd_x86/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/ia64/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/linux/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/runtime/linux_amd64/*.java \
--- ./hotspot/make/solaris/makefiles/defs.make 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/make/solaris/makefiles/defs.make 2010-10-31 14:25:25.000000000 -0700
@@ -61,34 +61,37 @@
JDK_INCLUDE_SUBDIR=solaris
+# Library suffix
+LIBRARY_SUFFIX=so
+
# FIXUP: The subdirectory for a debug build is NOT the same on all platforms
VM_DEBUG=jvmg
EXPORT_LIST += $(EXPORT_DOCS_DIR)/platform/jvmti/jvmti.html
-# client and server subdirectories have symbolic links to ../libjsig.so
-EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.so
+# client and server subdirectories have symbolic links to ../libjsig.$(LIBRARY_SUFFIX)
+EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.$(LIBRARY_SUFFIX)
EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
ifneq ($(BUILD_CLIENT_ONLY),true)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
-EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.so
-EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.so
-EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.so
+EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
+EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.$(LIBRARY_SUFFIX)
+EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.$(LIBRARY_SUFFIX)
endif
ifeq ($(ARCH_DATA_MODEL), 32)
EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
- EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.so
- EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.so
- EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.so
- EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.so
- EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.so
+ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
+ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.$(LIBRARY_SUFFIX)
+ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.$(LIBRARY_SUFFIX)
+ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.$(LIBRARY_SUFFIX)
+ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.$(LIBRARY_SUFFIX)
ifneq ($(BUILD_CLIENT_ONLY), true)
- EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.so
- EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.so
+ EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.$(LIBRARY_SUFFIX)
+ EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.$(LIBRARY_SUFFIX)
endif
endif
-EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.so
+EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar
--- ./hotspot/make/windows/makefiles/defs.make 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/make/windows/makefiles/defs.make 2010-07-10 12:30:12.000000000 -0700
@@ -109,6 +109,9 @@
JDK_INCLUDE_SUBDIR=win32
+# Library suffix
+LIBRARY_SUFFIX=dll
+
# HOTSPOT_RELEASE_VERSION and HOTSPOT_BUILD_VERSION are defined
# and added to MAKE_ARGS list in $(GAMMADIR)/make/defs.make.
@@ -172,26 +175,26 @@
EXPORT_SERVER_DIR = $(EXPORT_JRE_BIN_DIR)/server
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
-EXPORT_LIST += $(EXPORT_SERVER_DIR)/jvm.dll
+EXPORT_LIST += $(EXPORT_SERVER_DIR)/jvm.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/jvm.pdb
EXPORT_LIST += $(EXPORT_SERVER_DIR)/jvm.map
EXPORT_LIST += $(EXPORT_LIB_DIR)/jvm.lib
ifeq ($(ARCH_DATA_MODEL), 32)
EXPORT_CLIENT_DIR = $(EXPORT_JRE_BIN_DIR)/client
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
- EXPORT_LIST += $(EXPORT_CLIENT_DIR)/jvm.dll
+ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/jvm.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/jvm.pdb
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/jvm.map
# kernel vm
EXPORT_KERNEL_DIR = $(EXPORT_JRE_BIN_DIR)/kernel
EXPORT_LIST += $(EXPORT_KERNEL_DIR)/Xusage.txt
- EXPORT_LIST += $(EXPORT_KERNEL_DIR)/jvm.dll
+ EXPORT_LIST += $(EXPORT_KERNEL_DIR)/jvm.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_KERNEL_DIR)/jvm.pdb
EXPORT_LIST += $(EXPORT_KERNEL_DIR)/jvm.map
endif
ifeq ($(BUILD_WIN_SA), 1)
- EXPORT_LIST += $(EXPORT_JRE_BIN_DIR)/sawindbg.dll
+ EXPORT_LIST += $(EXPORT_JRE_BIN_DIR)/sawindbg.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_JRE_BIN_DIR)/sawindbg.pdb
EXPORT_LIST += $(EXPORT_JRE_BIN_DIR)/sawindbg.map
EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar
--- ./hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp 2010-10-31 14:03:01.000000000 -0700
@@ -469,8 +469,8 @@
// Fetch the exception from TLS and clear out exception related thread state
__ get_thread(rsi);
__ movptr(rax, Address(rsi, JavaThread::exception_oop_offset()));
- __ movptr(Address(rsi, JavaThread::exception_oop_offset()), (int32_t)NULL_WORD);
- __ movptr(Address(rsi, JavaThread::exception_pc_offset()), (int32_t)NULL_WORD);
+ __ movptr(Address(rsi, JavaThread::exception_oop_offset()), (intptr_t)NULL_WORD);
+ __ movptr(Address(rsi, JavaThread::exception_pc_offset()), (intptr_t)NULL_WORD);
__ bind(_unwind_handler_entry);
__ verify_not_null_oop(rax);
--- ./hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp 2010-10-31 14:03:01.000000000 -0700
@@ -1153,7 +1153,7 @@
int recvr_offset = in_bytes(VirtualCallData::receiver_offset(start_row));
set_mdp_data_at(mdp, recvr_offset, receiver);
int count_offset = in_bytes(VirtualCallData::receiver_count_offset(start_row));
- movptr(reg2, (int32_t)DataLayout::counter_increment);
+ movptr(reg2, (intptr_t)DataLayout::counter_increment);
set_mdp_data_at(mdp, count_offset, reg2);
if (start_row > 0) {
jmp(done);
@@ -1296,7 +1296,7 @@
test_method_data_pointer(mdp, profile_continue);
// Build the base (index * per_case_size_in_bytes()) + case_array_offset_in_bytes()
- movptr(reg2, (int32_t)in_bytes(MultiBranchData::per_case_size()));
+ movptr(reg2, (intptr_t)in_bytes(MultiBranchData::per_case_size()));
// index is positive and so should have correct value if this code were
// used on 64bits
imulptr(index, reg2);
--- ./hotspot/src/cpu/x86/vm/jni_x86.h 2010-11-04 16:12:13.000000000 -0700
+++ ./hotspot/src/cpu/x86/vm/jni_x86.h 2010-06-15 22:03:21.000000000 -0700
@@ -26,7 +26,7 @@
#ifndef _JAVASOFT_JNI_MD_H_
#define _JAVASOFT_JNI_MD_H_
-#if defined(SOLARIS) || defined(LINUX)
+#if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE)
#define JNIEXPORT
#define JNIIMPORT
#define JNICALL
--- ./hotspot/src/os/bsd/launcher/java_md.c 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/launcher/java_md.c 2010-10-31 14:26:55.000000000 -0700
@@ -45,8 +45,15 @@
#include "version_comp.h"
#endif
+#ifdef __APPLE__
+#define JVM_DLL "libjvm.dylib"
+#define JAVA_DLL "libjava.dylib"
+#define LD_LIBRARY_PATH "DYLD_LIBRARY_PATH"
+#else
#define JVM_DLL "libjvm.so"
#define JAVA_DLL "libjava.so"
+#define LD_LIBRARY_PATH "LD_LIBRARY_PATH"
+#endif
#ifndef GAMMA /* launcher.make defines ARCH */
@@ -116,7 +123,7 @@
* A collection of useful strings. One should think of these as #define
* entries, but actual strings can be more efficient (with many compilers).
*/
-#ifdef __bsd__
+#ifdef _ALLBSD_SOURCE
static const char *system_dir = "/usr/java";
static const char *user_dir = "/java";
#else /* Solaris */
@@ -460,10 +467,10 @@
* If not on Solaris, assume only a single LD_LIBRARY_PATH
* variable.
*/
- runpath = getenv("LD_LIBRARY_PATH");
+ runpath = getenv(LD_LIBRARY_PATH);
#endif /* __sun */
-#ifdef __bsd
+#ifdef _ALLBSD_SOURCE
/*
* On bsd, if a binary is running as sgid or suid, glibc sets
* LD_LIBRARY_PATH to the empty string for security purposes. (In
@@ -476,7 +483,7 @@
* return from the function now. Getting the right libraries to
* be found must be handled through other mechanisms.
*/
- if((getgid() != getegid()) || (getuid() != geteuid()) ) {
+ if(issetugid()) {
return;
}
#endif
@@ -487,7 +494,7 @@
new_runpath = MemAlloc( ((runpath!=NULL)?strlen(runpath):0) +
2*strlen(jrepath) + 2*strlen(arch) +
strlen(jvmpath) + 52);
- newpath = new_runpath + strlen("LD_LIBRARY_PATH=");
+ newpath = new_runpath + strlen(LD_LIBRARY_PATH "=");
/*
@@ -502,7 +509,7 @@
/* jvmpath, ((running != wanted)?((wanted==64)?"/"BIG_ARCH:"/.."):""), */
- sprintf(new_runpath, "LD_LIBRARY_PATH="
+ sprintf(new_runpath, LD_LIBRARY_PATH "="
"%s:"
"%s/lib/%s:"
"%s/../lib/%s",
@@ -840,7 +847,7 @@
jboolean
GetApplicationHome(char *buf, jint bufsize)
{
-#ifdef __bsd__
+#ifdef _ALLBSD_SOURCE
char *execname = GetExecname();
if (execname) {
strncpy(buf, execname, bufsize-1);
@@ -1009,7 +1016,7 @@
}
}
}
-#elif defined(__bsd__)
+#elif defined(__linux__)
{
const char* self = "/proc/self/exe";
char buf[PATH_MAX+1];
@@ -1019,7 +1026,7 @@
exec_path = strdup(buf);
}
}
-#else /* !__sun && !__bsd */
+#else /* !__sun && !__linux */
{
/* Not implemented */
}
@@ -1224,7 +1231,7 @@
#endif /* __sun && i586 */
-#if defined(__bsd__) && defined(i586)
+#if defined(_ALLBSD_SOURCE) && defined(i586)
/*
* A utility method for asking the CPU about itself.
@@ -1290,7 +1297,7 @@
#endif
}
-#endif /* __bsd__ && i586 */
+#endif /* _ALLBSD_SOURCE && i586 */
#ifdef i586
/*
@@ -1469,7 +1476,7 @@
#endif /* __sun && i586 */
-#if defined(__bsd__) && defined(i586)
+#if defined(_ALLBSD_SOURCE) && defined(i586)
/* The definition of a server-class machine for bsd-i586 */
jboolean
@@ -1500,7 +1507,7 @@
return result;
}
-#endif /* __bsd__ && i586 */
+#endif /* _ALLBSD_SOURCE && i586 */
/* Dispatch to the platform-specific definition of "server-class" */
jboolean
@@ -1510,7 +1517,7 @@
result = solaris_sparc_ServerClassMachine();
#elif defined(__sun) && defined(i586)
result = solaris_i586_ServerClassMachine();
-#elif defined(__bsd__) && defined(i586)
+#elif defined(_ALLBSD_SOURCE) && defined(i586)
result = bsd_i586_ServerClassMachine();
#else
if (_launcher_debug) {
--- ./hotspot/src/os/bsd/vm/attachListener_bsd.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/attachListener_bsd.cpp 2010-10-31 14:58:17.000000000 -0700
@@ -334,6 +334,15 @@
// get the credentials of the peer and check the effective uid/guid
// - check with jeff on this.
+#ifdef _ALLBSD_SOURCE
+ uid_t puid;
+ gid_t pgid;
+ if (::getpeereid(s, &puid, &pgid) != 0) {
+ int res;
+ RESTARTABLE(::close(s), res);
+ continue;
+ }
+#else
struct ucred cred_info;
socklen_t optlen = sizeof(cred_info);
if (::getsockopt(s, SOL_SOCKET, SO_PEERCRED, (void*)&cred_info, &optlen) == -1) {
@@ -341,10 +350,13 @@
RESTARTABLE(::close(s), res);
continue;
}
+ uid_t puid = cred_info.uid;
+ gid_t pgid = cred_info.gid;
+#endif
uid_t euid = geteuid();
gid_t egid = getegid();
- if (cred_info.uid != euid || cred_info.gid != egid) {
+ if (puid != euid || pgid != egid) {
int res;
RESTARTABLE(::close(s), res);
continue;
@@ -464,16 +476,13 @@
if (init_at_startup() || is_initialized()) {
return false; // initialized at startup or already initialized
}
- char fn[PATH_MAX+1];
- sprintf(fn, ".attach_pid%d", os::current_process_id());
+ char path[PATH_MAX + 1];
int ret;
- struct stat64 st;
- RESTARTABLE(::stat64(fn, &st), ret);
- if (ret == -1) {
- snprintf(fn, sizeof(fn), "%s/.attach_pid%d",
- os::get_temp_directory(), os::current_process_id());
- RESTARTABLE(::stat64(fn, &st), ret);
- }
+ struct stat st;
+
+ snprintf(path, PATH_MAX + 1, "%s/.attach_pid%d",
+ os::get_temp_directory(), os::current_process_id());
+ RESTARTABLE(::stat(path, &st), ret);
if (ret == 0) {
// simple check to avoid starting the attach mechanism when
// a bogus user creates the file
--- ./hotspot/src/os/bsd/vm/hpi_bsd.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/hpi_bsd.cpp 2010-07-04 09:31:26.000000000 -0700
@@ -28,6 +28,14 @@
# include <sys/param.h>
# include <dlfcn.h>
+#ifdef __APPLE__
+#define HPI_LIB "libhpi.dylib"
+#define HPI_G_LIB "libhpi.dylib"
+#else
+#define HPI_LIB "libhpi.so"
+#define HPI_G_LIB "libhpi.so"
+#endif
+
typedef jint (JNICALL *init_t)(GetInterfaceFunc *, void *);
void hpi::initialize_get_interface(vm_calls_t *callbacks) {
@@ -45,11 +53,11 @@
os::jvm_path(buf, JVM_MAXPATHLEN);
#ifdef PRODUCT
- const char * hpi_lib = "/libhpi.so";
+ const char * hpi_lib = "/" HPI_LIB;
#else
char * ptr = strrchr(buf, '/');
assert(strstr(ptr, "/libjvm") == ptr, "invalid library name");
- const char * hpi_lib = strstr(ptr, "_g") ? "/libhpi_g.so" : "/libhpi.so";
+ const char * hpi_lib = strstr(ptr, "_g") ? "/" HPI_G_LIB : "/" HPI_LIB;
#endif
*(strrchr(buf, '/')) = '\0'; /* get rid of /libjvm.so */
--- ./hotspot/src/os/bsd/vm/hpi_bsd.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/hpi_bsd.hpp 2010-07-04 09:31:26.000000000 -0700
@@ -36,7 +36,7 @@
// HPI_FileInterface
inline int hpi::close(int fd) {
- return ::close(fd);
+ RESTARTABLE_RETURN_INT(::close(fd));
}
inline size_t hpi::read(int fd, void *buf, unsigned int nBytes) {
@@ -55,7 +55,7 @@
// HPI_SocketInterface
inline int hpi::socket_close(int fd) {
- return ::close(fd);
+ RESTARTABLE_RETURN_INT(::close(fd));
}
inline int hpi::socket(int domain, int type, int protocol) {
@@ -120,9 +120,9 @@
// fetch it's value, this cast is safe for now. The java.net group
// may need and want to change this interface someday if socklen_t goes
// to 64 bits on some platform that we support.
- // Bsd doc says this can't return EINTR, unlike accept() on Solaris
+ // At least OpenBSD and FreeBSD can return EINTR from accept.
- return ::accept(fd, him, (socklen_t *)len);
+ RESTARTABLE_RETURN_INT(::accept(fd, him, (socklen_t *)len));
}
inline int hpi::recvfrom(int fd, char *buf, int nBytes, int flags,
@@ -136,12 +136,16 @@
}
inline int hpi::socket_available(int fd, jint *pbytes) {
- // Bsd doc says EINTR not returned, unlike Solaris
- int ret = ::ioctl(fd, FIONREAD, pbytes);
+ int ret;
+
+ if (fd < 0)
+ return OS_OK;
+
+ RESTARTABLE(::ioctl(fd, FIONREAD, pbytes), ret);
//%% note ioctl can return 0 when successful, JVM_SocketAvailable
// is expected to return 0 on failure and 1 on success to the jdk.
- return (ret < 0) ? 0 : 1;
+ return (ret == OS_ERR) ? 0 : 1;
}
--- ./hotspot/src/os/bsd/vm/jsig.c 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/jsig.c 2010-07-04 09:31:26.000000000 -0700
@@ -143,7 +143,8 @@
}
sa_handler_t sigset(int sig, sa_handler_t disp) {
- return set_signal(sig, disp, true);
+ printf("sigset() is not supported by BSD");
+ exit(0);
}
static int call_os_sigaction(int sig, const struct sigaction *act,
--- ./hotspot/src/os/bsd/vm/jvm_bsd.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/jvm_bsd.cpp 2010-07-04 09:31:26.000000000 -0700
@@ -144,38 +144,31 @@
"ILL", SIGILL, /* Illegal instruction (ANSI). */
"TRAP", SIGTRAP, /* Trace trap (POSIX). */
"ABRT", SIGABRT, /* Abort (ANSI). */
- "IOT", SIGIOT, /* IOT trap (4.2 BSD). */
- "BUS", SIGBUS, /* BUS error (4.2 BSD). */
+ "EMT", SIGEMT, /* EMT trap */
"FPE", SIGFPE, /* Floating-point exception (ANSI). */
"KILL", SIGKILL, /* Kill, unblockable (POSIX). */
- "USR1", SIGUSR1, /* User-defined signal 1 (POSIX). */
+ "BUS", SIGBUS, /* BUS error (4.2 BSD). */
"SEGV", SIGSEGV, /* Segmentation violation (ANSI). */
- "USR2", SIGUSR2, /* User-defined signal 2 (POSIX). */
+ "SYS", SIGSYS, /* Bad system call. Only on some Bsden! */
"PIPE", SIGPIPE, /* Broken pipe (POSIX). */
"ALRM", SIGALRM, /* Alarm clock (POSIX). */
"TERM", SIGTERM, /* Termination (ANSI). */
-#ifdef SIGSTKFLT
- "STKFLT", SIGSTKFLT, /* Stack fault. */
-#endif
- "CLD", SIGCLD, /* Same as SIGCHLD (System V). */
- "CHLD", SIGCHLD, /* Child status has changed (POSIX). */
- "CONT", SIGCONT, /* Continue (POSIX). */
+ "URG", SIGURG, /* Urgent condition on socket (4.2 BSD). */
"STOP", SIGSTOP, /* Stop, unblockable (POSIX). */
"TSTP", SIGTSTP, /* Keyboard stop (POSIX). */
+ "CONT", SIGCONT, /* Continue (POSIX). */
+ "CHLD", SIGCHLD, /* Child status has changed (POSIX). */
"TTIN", SIGTTIN, /* Background read from tty (POSIX). */
"TTOU", SIGTTOU, /* Background write to tty (POSIX). */
- "URG", SIGURG, /* Urgent condition on socket (4.2 BSD). */
+ "IO", SIGIO, /* I/O now possible (4.2 BSD). */
"XCPU", SIGXCPU, /* CPU limit exceeded (4.2 BSD). */
"XFSZ", SIGXFSZ, /* File size limit exceeded (4.2 BSD). */
"VTALRM", SIGVTALRM, /* Virtual alarm clock (4.2 BSD). */
"PROF", SIGPROF, /* Profiling alarm clock (4.2 BSD). */
"WINCH", SIGWINCH, /* Window size change (4.3 BSD, Sun). */
- "POLL", SIGPOLL, /* Pollable event occurred (System V). */
- "IO", SIGIO, /* I/O now possible (4.2 BSD). */
- "PWR", SIGPWR, /* Power failure restart (System V). */
-#ifdef SIGSYS
- "SYS", SIGSYS /* Bad system call. Only on some Bsden! */
-#endif
+ "INFO", SIGINFO, /* Information request. */
+ "USR1", SIGUSR1, /* User-defined signal 1 (POSIX). */
+ "USR2", SIGUSR2 /* User-defined signal 2 (POSIX). */
};
JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))
--- ./hotspot/src/os/bsd/vm/jvm_bsd.h 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/jvm_bsd.h 2010-07-04 09:31:26.000000000 -0700
@@ -51,7 +51,11 @@
#define AGENT_ONATTACH_SYMBOLS {"Agent_OnAttach"}
#define JNI_LIB_PREFIX "lib"
+#ifdef __APPLE__
+#define JNI_LIB_SUFFIX ".dylib"
+#else
#define JNI_LIB_SUFFIX ".so"
+#endif
// Hack: MAXPATHLEN is 4095 on some Bsd and 4096 on others. This may
// cause problems if JVM and the rest of JDK are built on different
@@ -90,6 +94,20 @@
#define SHUTDOWN2_SIGNAL SIGINT
#define SHUTDOWN3_SIGNAL SIGTERM
+#ifndef SIGRTMIN
+#ifdef __OpenBSD__
+#define SIGRTMIN 1
+#else
+#define SIGRTMIN 33
+#endif
+#endif
+#ifndef SIGRTMAX
+#ifdef __OpenBSD__
+#define SIGRTMAX 31
+#else
+#define SIGRTMAX 63
+#endif
+#endif
#endif /* JVM_MD_H */
// Reconciliation History
--- ./hotspot/src/os/bsd/vm/osThread_bsd.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/osThread_bsd.cpp 2010-07-04 09:31:26.000000000 -0700
@@ -28,8 +28,8 @@
void OSThread::pd_initialize() {
assert(this != NULL, "check");
- _thread_id = 0;
- _pthread_id = 0;
+ _thread_id = NULL;
+ _pthread_id = NULL;
_siginfo = NULL;
_ucontext = NULL;
_expanding_stack = 0;
--- ./hotspot/src/os/bsd/vm/osThread_bsd.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/osThread_bsd.hpp 2010-07-04 09:31:26.000000000 -0700
@@ -36,6 +36,12 @@
private:
+#ifdef _ALLBSD_SOURCE
+ // _thread_id and _pthread_id are the same on BSD
+ // keep both to minimize code divergence in os_bsd.cpp
+ pthread_t _thread_id;
+ pthread_t _pthread_id;
+#else
// _thread_id is kernel thread id (similar to LWP id on Solaris). Each
// thread has a unique thread_id (BsdThreads or NPTL). It can be used
// to access /proc.
@@ -44,6 +50,7 @@
// _pthread_id is the pthread id, which is used by library calls
// (e.g. pthread_kill).
pthread_t _pthread_id;
+#endif
sigset_t _caller_sigmask; // Caller's signal mask
@@ -53,12 +60,18 @@
sigset_t caller_sigmask() const { return _caller_sigmask; }
void set_caller_sigmask(sigset_t sigmask) { _caller_sigmask = sigmask; }
+#ifdef _ALLBSD_SOURCE
+ pthread_t thread_id() const {
+ return _thread_id;
+ }
+#else
pid_t thread_id() const {
return _thread_id;
}
+#endif
#ifndef PRODUCT
// Used for debugging, return a unique integer for each thread.
- int thread_identifier() const { return _thread_id; }
+ intptr_t thread_identifier() const { return (intptr_t)_pthread_id; }
#endif
#ifdef ASSERT
// We expect no reposition failures so kill vm if we get one.
@@ -67,9 +80,15 @@
return false;
}
#endif // ASSERT
+#ifdef _ALLBSD_SOURCE
+ void set_thread_id(pthread_t id) {
+ _thread_id = id;
+ }
+#else
void set_thread_id(pid_t id) {
_thread_id = id;
}
+#endif
pthread_t pthread_id() const {
return _pthread_id;
}
--- ./hotspot/src/os/bsd/vm/os_bsd.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/os_bsd.cpp 2010-10-31 15:03:20.000000000 -0700
@@ -46,20 +46,42 @@
# include <sys/utsname.h>
# include <sys/socket.h>
# include <sys/wait.h>
+# include <time.h>
# include <pwd.h>
# include <poll.h>
# include <semaphore.h>
# include <fcntl.h>
# include <string.h>
+#ifdef _ALLBSD_SOURCE
+# include <sys/param.h>
+# include <sys/sysctl.h>
+#else
# include <syscall.h>
# include <sys/sysinfo.h>
# include <gnu/libc-version.h>
+#endif
# include <sys/ipc.h>
# include <sys/shm.h>
-# include <link.h>
# include <stdint.h>
# include <inttypes.h>
+#ifndef __APPLE__
+# include <link.h>
+#endif
+
+#if defined(__FreeBSD__) || defined(__NetBSD__)
+# include <elf.h>
+#endif
+
+#ifdef __APPLE__
+#include <mach/mach.h> // semaphore_* API
+#include <mach-o/dyld.h>
+#endif
+
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
#define MAX_PATH (2 * K)
// for timer info max values which include all bits
@@ -70,19 +92,25 @@
// global variables
julong os::Bsd::_physical_memory = 0;
+#ifndef _ALLBSD_SOURCE
address os::Bsd::_initial_thread_stack_bottom = NULL;
uintptr_t os::Bsd::_initial_thread_stack_size = 0;
+#endif
int (*os::Bsd::_clock_gettime)(clockid_t, struct timespec *) = NULL;
+#ifndef _ALLBSD_SOURCE
int (*os::Bsd::_pthread_getcpuclockid)(pthread_t, clockid_t *) = NULL;
Mutex* os::Bsd::_createThread_lock = NULL;
+#endif
pthread_t os::Bsd::_main_thread;
int os::Bsd::_page_size = -1;
+#ifndef _ALLBSD_SOURCE
bool os::Bsd::_is_floating_stack = false;
bool os::Bsd::_is_NPTL = false;
bool os::Bsd::_supports_fast_thread_cpu_time = false;
const char * os::Bsd::_glibc_version = NULL;
const char * os::Bsd::_libpthread_version = NULL;
+#endif
static jlong initial_time_count=0;
@@ -100,8 +128,6 @@
static int SR_signum = SIGUSR2;
sigset_t SR_sigset;
-/* Used to protect dlsym() calls */
-static pthread_mutex_t dl_mutex;
////////////////////////////////////////////////////////////////////////////////
// utility functions
@@ -114,11 +140,16 @@
}
julong os::Bsd::available_memory() {
+#ifdef _ALLBSD_SOURCE
+ // XXXBSD: this is just a stopgap implementation
+ return physical_memory() >> 2;
+#else
// values in struct sysinfo are "unsigned long"
struct sysinfo si;
sysinfo(&si);
return (julong)si.freeram * si.mem_unit;
+#endif
}
julong os::physical_memory() {
@@ -166,6 +197,7 @@
}
+#ifndef _ALLBSD_SOURCE
#ifndef SYS_gettid
// i386: 224, ia64: 1105, amd64: 186, sparc 143
#ifdef __ia64__
@@ -180,6 +212,7 @@
#error define gettid for the arch
#endif
#endif
+#endif
// Cpu architecture string
#if defined(ZERO)
@@ -205,6 +238,7 @@
#endif
+#ifndef _ALLBSD_SOURCE
// pid_t gettid()
//
// Returns the kernel thread id of the currently running thread. Kernel
@@ -231,7 +265,48 @@
static const char *unstable_chroot_error = "/proc file system not found.\n"
"Java may be unstable running multithreaded in a chroot "
"environment on Bsd when /proc filesystem is not mounted.";
+#endif
+#ifdef _ALLBSD_SOURCE
+void os::Bsd::initialize_system_info() {
+ int mib[2];
+ size_t len;
+ int cpu_val;
+ u_long mem_val;
+
+ /* get processors count via hw.ncpus sysctl */
+ mib[0] = CTL_HW;
+ mib[1] = HW_NCPU;
+ len = sizeof(cpu_val);
+ if (sysctl(mib, 2, &cpu_val, &len, NULL, 0) != -1 && cpu_val >= 1) {
+ set_processor_count(cpu_val);
+ }
+ else {
+ set_processor_count(1); // fallback
+ }
+
+ /* get physical memory via hw.usermem sysctl (hw.usermem is used
+ * instead of hw.physmem because we need size of allocatable memory
+ */
+ mib[0] = CTL_HW;
+ mib[1] = HW_USERMEM;
+ len = sizeof(mem_val);
+ if (sysctl(mib, 2, &mem_val, &len, NULL, 0) != -1)
+ _physical_memory = mem_val;
+ else
+ _physical_memory = 256*1024*1024; // fallback (XXXBSD?)
+
+#ifdef __OpenBSD__
+ {
+ // limit _physical_memory memory view on OpenBSD since
+ // datasize rlimit restricts us anyway.
+ struct rlimit limits;
+ getrlimit(RLIMIT_DATA, &limits);
+ _physical_memory = MIN2(_physical_memory, (julong)limits.rlim_cur);
+ }
+#endif
+}
+#else
void os::Bsd::initialize_system_info() {
set_processor_count(sysconf(_SC_NPROCESSORS_CONF));
if (processor_count() == 1) {
@@ -248,6 +323,7 @@
_physical_memory = (julong)sysconf(_SC_PHYS_PAGES) * (julong)sysconf(_SC_PAGESIZE);
assert(processor_count() > 0, "bsd error");
}
+#endif
void os::init_system_properties_values() {
// char arch[12];
@@ -291,9 +367,7 @@
* ...
* 7: The default directories, normally /lib and /usr/lib.
*/
-#if defined(AMD64) || defined(_LP64) && (defined(SPARC) || defined(PPC) || defined(S390))
-#define DEFAULT_LIBPATH "/usr/lib64:/lib64:/lib:/usr/lib"
-#else
+#ifndef DEFAULT_LIBPATH
#define DEFAULT_LIBPATH "/lib:/usr/lib"
#endif
@@ -372,7 +446,11 @@
* should always exist (until the legacy problem cited above is
* addressed).
*/
+#ifdef __APPLE__
+ char *v = getenv("DYLD_LIBRARY_PATH");
+#else
char *v = getenv("LD_LIBRARY_PATH");
+#endif
if (v != NULL) {
char *t = ld_library_path;
/* That's +1 for the colon and +1 for the trailing '\0' */
@@ -531,6 +609,7 @@
}
}
+#ifndef _ALLBSD_SOURCE
//////////////////////////////////////////////////////////////////////////////
// detecting pthread library
@@ -694,6 +773,7 @@
}
return false;
}
+#endif
//////////////////////////////////////////////////////////////////////////////
// create new thread
@@ -702,6 +782,9 @@
// check if it's safe to start a new thread
static bool _thread_safety_check(Thread* thread) {
+#ifdef _ALLBSD_SOURCE
+ return true;
+#else
if (os::Bsd::is_BsdThreads() && !os::Bsd::is_floating_stack()) {
// Fixed stack BsdThreads (SuSE Bsd/x86, and some versions of Redhat)
// Heap is mmap'ed at lower end of memory space. Thread stacks are
@@ -735,6 +818,7 @@
// here, that means enough space has been reserved for stack.
return true;
}
+#endif
}
// Thread start routine for all newly created threads
@@ -762,6 +846,10 @@
return NULL;
}
+#ifdef _ALLBSD_SOURCE
+ // thread_id is pthread_id on BSD
+ osthread->set_thread_id(::pthread_self());
+#else
// thread_id is kernel thread id (similar to Solaris LWP id)
osthread->set_thread_id(os::Bsd::gettid());
@@ -771,6 +859,7 @@
thread->set_lgrp_id(lgrp_id);
}
}
+#endif
// initialize signal mask for this thread
os::Bsd::hotspot_sigmask(thread);
@@ -851,17 +940,22 @@
// let pthread_create() pick the default value.
}
+#ifndef _ALLBSD_SOURCE
// glibc guard page
pthread_attr_setguardsize(&attr, os::Bsd::default_guard_size(thr_type));
+#endif
ThreadState state;
{
+
+#ifndef _ALLBSD_SOURCE
// Serialize thread creation if we are running with fixed stack BsdThreads
bool lock = os::Bsd::is_BsdThreads() && !os::Bsd::is_floating_stack();
if (lock) {
os::Bsd::createThread_lock()->lock_without_safepoint_check();
}
+#endif
pthread_t tid;
int ret = pthread_create(&tid, &attr, (void* (*)(void*)) java_start, thread);
@@ -875,7 +969,9 @@
// Need to clean up stuff we've allocated so far
thread->set_osthread(NULL);
delete osthread;
+#ifndef _ALLBSD_SOURCE
if (lock) os::Bsd::createThread_lock()->unlock();
+#endif
return false;
}
@@ -891,9 +987,11 @@
}
}
+#ifndef _ALLBSD_SOURCE
if (lock) {
os::Bsd::createThread_lock()->unlock();
}
+#endif
}
// Aborted due to thread limit being reached
@@ -931,7 +1029,11 @@
}
// Store pthread info into the OSThread
+#ifdef _ALLBSD_SOURCE
+ osthread->set_thread_id(::pthread_self());
+#else
osthread->set_thread_id(os::Bsd::gettid());
+#endif
osthread->set_pthread_id(::pthread_self());
// initialize floating point control register
@@ -942,6 +1044,7 @@
thread->set_osthread(osthread);
+#ifndef _ALLBSD_SOURCE
if (UseNUMA) {
int lgrp_id = os::numa_get_group_id();
if (lgrp_id != -1) {
@@ -968,6 +1071,7 @@
os::Bsd::manually_expand_stack(jt, addr);
osthread->clear_expanding_stack();
}
+#endif
// initialize signal mask for this thread
// and save the caller's signal mask
@@ -1026,6 +1130,7 @@
//////////////////////////////////////////////////////////////////////////////
// initial thread
+#ifndef _ALLBSD_SOURCE
// Check if current thread is the initial thread, similar to Solaris thr_main.
bool os::Bsd::is_initial_thread(void) {
char dummy;
@@ -1262,6 +1367,7 @@
_initial_thread_stack_size = align_size_down(_initial_thread_stack_size, page_size());
_initial_thread_stack_bottom = (address)stack_top - _initial_thread_stack_size;
}
+#endif
////////////////////////////////////////////////////////////////////////////////
// time support
@@ -1283,9 +1389,7 @@
return (1000 * 1000);
}
-// For now, we say that bsd does not support vtime. I have no idea
-// whether it can actually be made to (DLD, 9/13/05).
-
+// XXX: For now, code this as if BSD does not support vtime.
bool os::supports_vtime() { return false; }
bool os::enable_vtime() { return false; }
bool os::vtime_enabled() { return false; }
@@ -1305,6 +1409,21 @@
#define CLOCK_MONOTONIC (1)
#endif
+#ifdef __APPLE__
+void os::Bsd::clock_init() {
+ // XXXDARWIN: Investigate replacement monotonic clock
+}
+#elif defined(_ALLBSD_SOURCE)
+void os::Bsd::clock_init() {
+ struct timespec res;
+ struct timespec tp;
+ if (::clock_getres(CLOCK_MONOTONIC, &res) == 0 &&
+ ::clock_gettime(CLOCK_MONOTONIC, &tp) == 0) {
+ // yes, monotonic clock is supported
+ _clock_gettime = ::clock_gettime;
+ }
+}
+#else
void os::Bsd::clock_init() {
// we do dlopen's in this particular order due to bug in bsd
// dynamical loader (see 6348968) leading to crash on exit
@@ -1340,7 +1459,9 @@
}
}
}
+#endif
+#ifndef _ALLBSD_SOURCE
#ifndef SYS_clock_getres
#if defined(IA32) || defined(AMD64)
@@ -1381,6 +1502,7 @@
_pthread_getcpuclockid = pthread_getcpuclockid_func;
}
}
+#endif
jlong os::javaTimeNanos() {
if (Bsd::supports_monotonic_clock()) {
@@ -1531,7 +1653,14 @@
// DLL functions
-const char* os::dll_file_extension() { return ".so"; }
+#define JNI_LIB_PREFIX "lib"
+#ifdef __APPLE__
+#define JNI_LIB_SUFFIX ".dylib"
+#else
+#define JNI_LIB_SUFFIX ".so"
+#endif
+
+const char* os::dll_file_extension() { return JNI_LIB_SUFFIX; }
const char* os::get_temp_directory() {
const char *prop = Arguments::get_property("java.io.tmpdir");
@@ -1552,13 +1681,13 @@
const size_t pnamelen = pname ? strlen(pname) : 0;
// Quietly truncate on buffer overflow. Should be an error.
- if (pnamelen + strlen(fname) + 10 > (size_t) buflen) {
+ if (pnamelen + strlen(fname) + strlen(JNI_LIB_PREFIX) + strlen(JNI_LIB_SUFFIX) + 2 > buflen) {
*buffer = '\0';
return;
}
if (pnamelen == 0) {
- snprintf(buffer, buflen, "lib%s.so", fname);
+ snprintf(buffer, buflen, JNI_LIB_PREFIX "%s" JNI_LIB_SUFFIX, fname);
} else if (strchr(pname, *os::path_separator()) != NULL) {
int n;
char** pelements = split_path(pname, &n);
@@ -1567,7 +1696,8 @@
if (pelements[i] == NULL || strlen(pelements[i]) == 0) {
continue; // skip the empty path values
}
- snprintf(buffer, buflen, "%s/lib%s.so", pelements[i], fname);
+ snprintf(buffer, buflen, "%s/" JNI_LIB_PREFIX "%s" JNI_LIB_SUFFIX,
+ pelements[i], fname);
if (file_exists(buffer)) {
break;
}
@@ -1582,7 +1712,7 @@
FREE_C_HEAP_ARRAY(char*, pelements);
}
} else {
- snprintf(buffer, buflen, "%s/lib%s.so", pname, fname);
+ snprintf(buffer, buflen, "%s/" JNI_LIB_PREFIX "%s" JNI_LIB_SUFFIX, pname, fname);
}
}
@@ -1623,6 +1753,23 @@
}
}
+#ifdef _ALLBSD_SOURCE
+// ported from solaris version
+bool os::dll_address_to_library_name(address addr, char* buf,
+ int buflen, int* offset) {
+ Dl_info dlinfo;
+
+ if (dladdr((void*)addr, &dlinfo)){
+ if (buf) jio_snprintf(buf, buflen, "%s", dlinfo.dli_fname);
+ if (offset) *offset = addr - (address)dlinfo.dli_fbase;
+ return true;
+ } else {
+ if (buf) buf[0] = '\0';
+ if (offset) *offset = -1;
+ return false;
+ }
+}
+#else
struct _address_to_library_name {
address addr; // input : memory address
size_t buflen; // size of fname
@@ -1697,11 +1844,27 @@
return false;
}
}
+#endif
// Loads .dll/.so and
// in case of error it checks if .dll/.so was built for the
// same architecture as Hotspot is running on
+
+#ifdef __APPLE__
+void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {
+ void * result= ::dlopen(filename, RTLD_LAZY);
+ if (result != NULL) {
+ // Successful loading
+ return result;
+ }
+ // Read system error message into ebuf
+ ::strncpy(ebuf, ::dlerror(), ebuflen-1);
+ ebuf[ebuflen-1]='\0';
+
+ return NULL;
+}
+#else
void * os::dll_load(const char *filename, char *ebuf, int ebuflen)
{
void * result= ::dlopen(filename, RTLD_LAZY);
@@ -1754,6 +1917,26 @@
#define EM_486 6 /* Intel 80486 */
#endif
+ #ifndef EM_MIPS_RS3_LE
+ #define EM_MIPS_RS3_LE 10 /* MIPS */
+ #endif
+
+ #ifndef EM_PPC64
+ #define EM_PPC64 21 /* PowerPC64 */
+ #endif
+
+ #ifndef EM_S390
+ #define EM_S390 22 /* IBM System/390 */
+ #endif
+
+ #ifndef EM_IA_64
+ #define EM_IA_64 50 /* HP/Intel IA-64 */
+ #endif
+
+ #ifndef EM_X86_64
+ #define EM_X86_64 62 /* AMD x86-64 */
+ #endif
+
static const arch_t arch_array[]={
{EM_386, EM_386, ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
{EM_486, EM_386, ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
@@ -1857,17 +2040,11 @@
return NULL;
}
+#endif /* !__APPLE__ */
-/*
- * glibc-2.0 libdl is not MT safe. If you are building with any glibc,
- * chances are you might want to run the generated bits against glibc-2.0
- * libdl.so, so always use locking for any version of glibc.
- */
+// XXX: Do we need a lock around this as per Linux?
void* os::dll_lookup(void* handle, const char* name) {
- pthread_mutex_lock(&dl_mutex);
- void* res = dlsym(handle, name);
- pthread_mutex_unlock(&dl_mutex);
- return res;
+ return dlsym(handle, name);
}
@@ -1890,7 +2067,51 @@
void os::print_dll_info(outputStream *st) {
st->print_cr("Dynamic libraries:");
-
+#ifdef _ALLBSD_SOURCE
+#ifdef RTLD_DI_LINKMAP
+ Dl_info dli;
+ void *handle;
+ Link_map *map;
+ Link_map *p;
+
+ if (!dladdr(CAST_FROM_FN_PTR(void *, os::print_dll_info), &dli)) {
+ st->print_cr("Error: Cannot print dynamic libraries.");
+ return;
+ }
+ handle = dlopen(dli.dli_fname, RTLD_LAZY);
+ if (handle == NULL) {
+ st->print_cr("Error: Cannot print dynamic libraries.");
+ return;
+ }
+ dlinfo(handle, RTLD_DI_LINKMAP, &map);
+ if (map == NULL) {
+ st->print_cr("Error: Cannot print dynamic libraries.");
+ return;
+ }
+
+ while (map->l_prev != NULL)
+ map = map->l_prev;
+
+ while (map != NULL) {
+ st->print_cr(PTR_FORMAT " \t%s", map->l_addr, map->l_name);
+ map = map->l_next;
+ }
+
+ dlclose(handle);
+#elif defined(__APPLE__)
+ uint32_t count;
+ uint32_t i;
+
+ count = _dyld_image_count();
+ for (i = 1; i < count; i++) {
+ const char *name = _dyld_get_image_name(i);
+ intptr_t slide = _dyld_get_image_vmaddr_slide(i);
+ st->print_cr(PTR_FORMAT " \t%s", slide, name);
+ }
+#else
+ st->print_cr("Error: Cannot print dynamic libraries.");
+#endif
+#else
char fname[32];
pid_t pid = os::Bsd::gettid();
@@ -1899,6 +2120,7 @@
if (!_print_ascii_file(fname, st)) {
st->print("Can not get library information for pid = %d\n", pid);
}
+#endif
}
@@ -1933,6 +2155,7 @@
st->print(name.machine);
st->cr();
+#ifndef _ALLBSD_SOURCE
// Print warning if unsafe chroot environment detected
if (unsafe_chroot_detected) {
st->print("WARNING!! ");
@@ -1947,6 +2170,7 @@
st->print("(%s stack)", os::Bsd::is_floating_stack() ? "floating" : "fixed");
}
st->cr();
+#endif
// rlimit
st->print("rlimit:");
@@ -1972,6 +2196,7 @@
if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity");
else st->print("%d", rlim.rlim_cur);
+#ifndef _ALLBSD_SOURCE
st->print(", AS ");
getrlimit(RLIMIT_AS, &rlim);
if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity");
@@ -1984,11 +2209,7 @@
os::loadavg(loadavg, 3);
st->print("%0.02f %0.02f %0.02f", loadavg[0], loadavg[1], loadavg[2]);
st->cr();
-
- // meminfo
- st->print("\n/proc/meminfo:\n");
- _print_ascii_file("/proc/meminfo", st);
- st->cr();
+#endif
}
void os::print_memory_info(outputStream* st) {
@@ -1996,18 +2217,27 @@
st->print("Memory:");
st->print(" %dk page", os::vm_page_size()>>10);
+#ifndef _ALLBSD_SOURCE
// values in struct sysinfo are "unsigned long"
struct sysinfo si;
sysinfo(&si);
+#endif
st->print(", physical " UINT64_FORMAT "k",
os::physical_memory() >> 10);
st->print("(" UINT64_FORMAT "k free)",
os::available_memory() >> 10);
+#ifndef _ALLBSD_SOURCE
st->print(", swap " UINT64_FORMAT "k",
((jlong)si.totalswap * si.mem_unit) >> 10);
st->print("(" UINT64_FORMAT "k free)",
((jlong)si.freeswap * si.mem_unit) >> 10);
+#endif
+ st->cr();
+
+ // meminfo
+ st->print("\n/proc/meminfo:\n");
+ _print_ascii_file("/proc/meminfo", st);
st->cr();
}
@@ -2250,19 +2480,29 @@
static volatile jint pending_signals[NSIG+1] = { 0 };
// Bsd(POSIX) specific hand shaking semaphore.
+#ifdef __APPLE__
+static semaphore_t sig_sem;
+#define SEM_INIT(sem, value) semaphore_create(mach_task_self(), &sem, SYNC_POLICY_FIFO, value)
+#define SEM_WAIT(sem) semaphore_wait(sem);
+#define SEM_POST(sem) semaphore_signal(sem);
+#else
static sem_t sig_sem;
+#define SEM_INIT(sem, value) sem_init(&sem, 0, value)
+#define SEM_WAIT(sem) sem_wait(&sem);
+#define SEM_POST(sem) sem_post(&sem);
+#endif
void os::signal_init_pd() {
// Initialize signal structures
::memset((void*)pending_signals, 0, sizeof(pending_signals));
// Initialize signal semaphore
- ::sem_init(&sig_sem, 0, 0);
+ ::SEM_INIT(sig_sem, 0);
}
void os::signal_notify(int sig) {
Atomic::inc(&pending_signals[sig]);
- ::sem_post(&sig_sem);
+ ::SEM_POST(sig_sem);
}
static int check_pending_signals(bool wait) {
@@ -2284,7 +2524,7 @@
do {
thread->set_suspend_equivalent();
// cleared by handle_special_suspend_equivalent_condition() or java_suspend_self()
- ::sem_wait(&sig_sem);
+ ::SEM_WAIT(sig_sem);
// were we externally suspended while we were waiting?
threadIsSuspended = thread->handle_special_suspend_equivalent_condition();
@@ -2295,7 +2535,7 @@
// while suspended because that would surprise the thread that
// suspended us.
//
- ::sem_post(&sig_sem);
+ ::SEM_POST(sig_sem);
thread->java_suspend_self();
}
@@ -2339,10 +2579,10 @@
return;
}
- char buf[PATH_MAX+1];
+ char buf[PATH_MAX + 1];
int num = Atomic::add(1, &cnt);
- snprintf(buf, sizeof(buf), "%s/hs-vm-%d-%d",
+ snprintf(buf, PATH_MAX + 1, "%s/hs-vm-%d-%d",
os::get_temp_directory(), os::current_process_id(), num);
unlink(buf);
@@ -2368,9 +2608,14 @@
// problem.
bool os::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
+ return ::mprotect(addr, size, prot) == 0;
+#else
uintptr_t res = (uintptr_t) ::mmap(addr, size, prot,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0);
return res != (uintptr_t) MAP_FAILED;
+#endif
}
bool os::commit_memory(char* addr, size_t size, size_t alignment_hint,
@@ -2386,36 +2631,27 @@
}
void os::numa_make_global(char *addr, size_t bytes) {
- Bsd::numa_interleave_memory(addr, bytes);
}
void os::numa_make_local(char *addr, size_t bytes, int lgrp_hint) {
- Bsd::numa_tonode_memory(addr, bytes, lgrp_hint);
}
bool os::numa_topology_changed() { return false; }
size_t os::numa_get_groups_num() {
- int max_node = Bsd::numa_max_node();
- return max_node > 0 ? max_node + 1 : 1;
+ return 1;
}
int os::numa_get_group_id() {
- int cpu_id = Bsd::sched_getcpu();
- if (cpu_id != -1) {
- int lgrp_id = Bsd::get_node_by_cpu(cpu_id);
- if (lgrp_id != -1) {
- return lgrp_id;
- }
- }
return 0;
}
size_t os::numa_get_leaf_groups(int *ids, size_t size) {
- for (size_t i = 0; i < size; i++) {
- ids[i] = i;
+ if (size > 0) {
+ ids[0] = 0;
+ return 1;
}
- return size;
+ return 0;
}
bool os::get_page_info(char *start, page_info* info) {
@@ -2426,6 +2662,7 @@
return end;
}
+#ifndef _ALLBSD_SOURCE
extern "C" void numa_warn(int number, char *where, ...) { }
extern "C" void numa_error(char *where) { }
@@ -2527,104 +2764,26 @@
os::Bsd::numa_tonode_memory_func_t os::Bsd::_numa_tonode_memory;
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) {
+#ifdef __OpenBSD__
+ // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD
+ return ::mprotect(addr, size, PROT_NONE) == 0;
+#else
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;
+#endif
}
-// Bsd uses a growable mapping for the stack, and if the mapping for
-// the stack guard pages is not removed when we detach a thread the
-// stack cannot grow beyond the pages where the stack guard was
-// mapped. If at some point later in the process the stack expands to
-// that point, the Bsd kernel cannot expand the stack any further
-// because the guard pages are in the way, and a segfault occurs.
-//
-// However, it's essential not to split the stack region by unmapping
-// a region (leaving a hole) that's already part of the stack mapping,
-// so if the stack mapping has already grown beyond the guard pages at
-// the time we create them, we have to truncate the stack mapping.
-// So, we need to know the extent of the stack mapping when
-// create_stack_guard_pages() is called.
-
-// Find the bounds of the stack mapping. Return true for success.
-//
-// We only need this for stacks that are growable: at the time of
-// writing thread stacks don't use growable mappings (i.e. those
-// creeated with MAP_GROWSDOWN), and aren't marked "[stack]", so this
-// only applies to the main thread.
-static bool
-get_stack_bounds(uintptr_t *bottom, uintptr_t *top)
-{
- FILE *f = fopen("/proc/self/maps", "r");
- if (f == NULL)
- return false;
-
- while (!feof(f)) {
- size_t dummy;
- char *str = NULL;
- ssize_t len = getline(&str, &dummy, f);
- if (len == -1) {
- fclose(f);
- return false;
- }
-
- if (len > 0 && str[len-1] == '\n') {
- str[len-1] = 0;
- len--;
- }
-
- static const char *stack_str = "[stack]";
- if (len > (ssize_t)strlen(stack_str)
- && (strcmp(str + len - strlen(stack_str), stack_str) == 0)) {
- if (sscanf(str, "%" SCNxPTR "-%" SCNxPTR, bottom, top) == 2) {
- uintptr_t sp = (uintptr_t)__builtin_frame_address(0);
- if (sp >= *bottom && sp <= *top) {
- free(str);
- fclose(f);
- return true;
- }
- }
- }
- free(str);
- }
- fclose(f);
- return false;
-}
-
-// If the (growable) stack mapping already extends beyond the point
-// where we're going to put our guard pages, truncate the mapping at
-// that point by munmap()ping it. This ensures that when we later
-// 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) {
- uintptr_t stack_extent, stack_base;
- bool chk_bounds = NOT_DEBUG(os::Bsd::is_initial_thread()) DEBUG_ONLY(true);
- if (chk_bounds && get_stack_bounds(&stack_extent, &stack_base)) {
- assert(os::Bsd::is_initial_thread(),
- "growable stack in non-initial thread");
- if (stack_extent < (uintptr_t)addr)
- ::munmap((void*)stack_extent, (uintptr_t)addr - stack_extent);
- }
-
return os::commit_memory(addr, size);
}
// If this is a growable mapping, remove the guard pages entirely by
-// munmap()ping them. If not, just call uncommit_memory(). This only
-// affects the main/initial thread, but guard against future OS changes
+// munmap()ping them. If not, just call uncommit_memory().
bool os::remove_stack_guard_pages(char* addr, size_t size) {
- uintptr_t stack_extent, stack_base;
- bool chk_bounds = NOT_DEBUG(os::Bsd::is_initial_thread()) DEBUG_ONLY(true);
- if (chk_bounds && get_stack_bounds(&stack_extent, &stack_base)) {
- assert(os::Bsd::is_initial_thread(),
- "growable stack in non-initial thread");
-
- return ::munmap(addr, size) == 0;
- }
-
return os::uncommit_memory(addr, size);
}
@@ -2729,6 +2888,9 @@
static size_t _large_page_size = 0;
bool os::large_page_init() {
+#ifdef _ALLBSD_SOURCE
+ return false;
+#else
if (!UseLargePages) return false;
if (LargePageSizeInBytes) {
@@ -2786,6 +2948,7 @@
// We optimistically assume the support is available. If later it turns out
// not true, VM will automatically switch to use regular page size.
return true;
+#endif
}
#ifndef SHM_HUGETLB
@@ -2962,7 +3125,7 @@
}
size_t os::read(int fd, void *buf, unsigned int nBytes) {
- return ::read(fd, buf, nBytes);
+ RESTARTABLE_RETURN_INT(::read(fd, buf, nBytes));
}
// TODO-FIXME: reconcile Solaris' os::sleep with the bsd variation.
@@ -3098,6 +3261,44 @@
// this reason, the code should not be used as default (ThreadPriorityPolicy=0).
// It is only used when ThreadPriorityPolicy=1 and requires root privilege.
+#if defined(_ALLBSD_SOURCE) && !defined(__APPLE__)
+int os::java_to_os_priority[MaxPriority + 1] = {
+ 19, // 0 Entry should never be used
+
+ 0, // 1 MinPriority
+ 3, // 2
+ 6, // 3
+
+ 10, // 4
+ 15, // 5 NormPriority
+ 18, // 6
+
+ 21, // 7
+ 25, // 8
+ 28, // 9 NearMaxPriority
+
+ 31 // 10 MaxPriority
+};
+#elif defined(__APPLE__)
+/* Using Mach high-level priority assignments */
+int os::java_to_os_priority[MaxPriority + 1] = {
+ 0, // 0 Entry should never be used (MINPRI_USER)
+
+ 27, // 1 MinPriority
+ 28, // 2
+ 29, // 3
+
+ 30, // 4
+ 31, // 5 NormPriority (BASEPRI_DEFAULT)
+ 32, // 6
+
+ 33, // 7
+ 34, // 8
+ 35, // 9 NearMaxPriority
+
+ 36 // 10 MaxPriority
+};
+#else
int os::java_to_os_priority[MaxPriority + 1] = {
19, // 0 Entry should never be used
@@ -3115,6 +3316,7 @@
-5 // 10 MaxPriority
};
+#endif
static int prio_init() {
if (ThreadPriorityPolicy == 1) {
@@ -3134,8 +3336,28 @@
OSReturn os::set_native_priority(Thread* thread, int newpri) {
if ( !UseThreadPriorities || ThreadPriorityPolicy == 0 ) return OS_OK;
+#ifdef __OpenBSD__
+ // OpenBSD pthread_setprio starves low priority threads
+ return OS_OK;
+#elif defined(__FreeBSD__)
+ int ret = pthread_setprio(thread->osthread()->pthread_id(), newpri);
+#elif defined(__APPLE__) || defined(__NetBSD__)
+ struct sched_param sp;
+ int policy;
+ pthread_t self = pthread_self();
+
+ if (pthread_getschedparam(self, &policy, &sp) != 0)
+ return OS_ERR;
+
+ sp.sched_priority = newpri;
+ if (pthread_setschedparam(self, policy, &sp) != 0)
+ return OS_ERR;
+
+ return OS_OK;
+#else
int ret = setpriority(PRIO_PROCESS, thread->osthread()->thread_id(), newpri);
return (ret == 0) ? OS_OK : OS_ERR;
+#endif
}
OSReturn os::get_native_priority(const Thread* const thread, int *priority_ptr) {
@@ -3145,7 +3367,17 @@
}
errno = 0;
+#if defined(__OpenBSD__) || defined(__FreeBSD__)
+ *priority_ptr = pthread_getprio(thread->osthread()->pthread_id());
+#elif defined(__APPLE__) || defined(__NetBSD__)
+ int policy;
+ struct sched_param sp;
+
+ pthread_getschedparam(pthread_self(), &policy, &sp);
+ *priority_ptr = sp.sched_priority;
+#else
*priority_ptr = getpriority(PRIO_PROCESS, thread->osthread()->thread_id());
+#endif
return (*priority_ptr != -1 || errno == 0 ? OS_OK : OS_ERR);
}
@@ -3255,7 +3487,7 @@
/* Get signal number to use for suspend/resume */
if ((s = ::getenv("_JAVA_SR_SIGNUM")) != 0) {
int sig = ::strtol(s, 0, 10);
- if (sig > 0 || sig < _NSIG) {
+ if (sig > 0 || sig < NSIG) {
SR_signum = sig;
}
}
@@ -3599,6 +3831,28 @@
set_signal_handler(SIGFPE, true);
set_signal_handler(SIGXFSZ, true);
+#if defined(__APPLE__)
+ // In Mac OS X 10.4, CrashReporter will write a crash log for all 'fatal' signals, including
+ // signals caught and handled by the JVM. To work around this, we reset the mach task
+ // signal handler that's placed on our process by CrashReporter. This disables
+ // CrashReporter-based reporting.
+ //
+ // This work-around is not necessary for 10.5+, as CrashReporter no longer intercedes
+ // on caught fatal signals.
+ //
+ // Additionally, gdb installs both standard BSD signal handlers, and mach exception
+ // handlers. By replacing the existing task exception handler, we disable gdb's mach
+ // exception handling, while leaving the standard BSD signal handlers functional.
+ kern_return_t kr;
+ kr = task_set_exception_ports(mach_task_self(),
+ EXC_MASK_BAD_ACCESS | EXC_MASK_ARITHMETIC,
+ MACH_PORT_NULL,
+ EXCEPTION_STATE_IDENTITY,
+ MACHINE_THREAD_STATE);
+
+ assert(kr == KERN_SUCCESS, "could not set mach task signal handler");
+#endif
+
if (libjsig_is_loaded) {
// Tell libjsig jvm finishes setting signal handlers
(*end_signal_setting)();
@@ -3619,6 +3873,7 @@
}
}
+#ifndef _ALLBSD_SOURCE
// This is the fastest way to get thread cpu time on Bsd.
// Returns cpu time (user+sys) for any thread, not only for current.
// POSIX compliant clocks are implemented in the kernels 2.6.16+.
@@ -3633,6 +3888,7 @@
return (tp.tv_sec * SEC_IN_NANOSECS) + tp.tv_nsec;
}
+#endif
/////
// glibc on Bsd platform uses non-documented flag
@@ -3854,13 +4110,13 @@
_initial_pid = (java_launcher_pid > 0) ? java_launcher_pid : getpid();
- clock_tics_per_sec = sysconf(_SC_CLK_TCK);
+ clock_tics_per_sec = CLK_TCK;
init_random(1234567);
ThreadCritical::initialize();
- Bsd::set_page_size(sysconf(_SC_PAGESIZE));
+ Bsd::set_page_size(getpagesize());
if (Bsd::page_size() == -1) {
fatal(err_msg("os_bsd.cpp: os::init: sysconf failed (%s)",
strerror(errno)));
@@ -3874,7 +4130,16 @@
Bsd::clock_init();
initial_time_count = os::elapsed_counter();
- pthread_mutex_init(&dl_mutex, NULL);
+
+#ifdef __APPLE__
+ // XXXDARWIN
+ // Work around the unaligned VM callbacks in hotspot's
+ // sharedRuntime. The callbacks don't use SSE2 instructions, and work on
+ // Linux, Solaris, and FreeBSD. On Mac OS X, dyld (rightly so) enforces
+ // alignment when doing symbol lookup. To work around this, we force early
+ // binding of all symbols now, thus binding when alignment is known-good.
+ _dyld_bind_fully_image_containing_address((const void *) &os::init);
+#endif
}
// To install functions for atexit system call
@@ -3887,7 +4152,9 @@
// this is called _after_ the global arguments have been parsed
jint os::init_2(void)
{
+#ifndef _ALLBSD_SOURCE
Bsd::fast_thread_clock_init();
+#endif
// Allocate a single page and mark it as readable for safepoint polling
address polling_page = (address) ::mmap(NULL, Bsd::page_size(), PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
@@ -3936,6 +4203,7 @@
JavaThread::set_stack_size_at_create(round_to(threadStackSizeInBytes,
vm_page_size()));
+#ifndef _ALLBSD_SOURCE
Bsd::capture_initial_stack(JavaThread::stack_size_at_create());
Bsd::libpthread_init();
@@ -3958,6 +4226,7 @@
UseNUMA = true;
}
}
+#endif
if (MaxFDLimit) {
// set the number of file descriptors to max. print out error
@@ -3969,6 +4238,14 @@
perror("os::init_2 getrlimit failed");
} else {
nbr_files.rlim_cur = nbr_files.rlim_max;
+
+#ifdef __APPLE__
+ // Darwin returns RLIM_INFINITY for rlim_max, but fails with EINVAL if
+ // you attempt to use RLIM_INFINITY. As per setrlimit(2), OPEN_MAX must
+ // be used instead
+ nbr_files.rlim_cur = MIN(OPEN_MAX, nbr_files.rlim_cur);
+#endif
+
status = setrlimit(RLIMIT_NOFILE, &nbr_files);
if (status != 0) {
if (PrintMiscellaneous && (Verbose || WizardMode))
@@ -3977,8 +4254,10 @@
}
}
+#ifndef _ALLBSD_SOURCE
// Initialize lock used to serialize thread creation (see os::create_thread)
Bsd::set_createThread_lock(new Mutex(Mutex::leaf, "createThread_lock", false));
+#endif
// Initialize HPI.
jint hpi_result = hpi::initialize();
@@ -4029,11 +4308,15 @@
};
int os::active_processor_count() {
+#ifdef _ALLBSD_SOURCE
+ return _processor_count;
+#else
// Bsd doesn't yet have a (official) notion of processor sets,
// so just return the number of online processors.
int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
assert(online_cpus > 0 && online_cpus <= processor_count(), "sanity check");
return online_cpus;
+#endif
}
bool os::distribute_processes(uint length, uint* distribution) {
@@ -4075,6 +4358,9 @@
int os::Bsd::safe_cond_timedwait(pthread_cond_t *_cond, pthread_mutex_t *_mutex, const struct timespec *_abstime)
{
+#ifdef _ALLBSD_SOURCE
+ return pthread_cond_timedwait(_cond, _mutex, _abstime);
+#else
if (is_NPTL()) {
return pthread_cond_timedwait(_cond, _mutex, _abstime);
} else {
@@ -4090,6 +4376,7 @@
#endif // IA64
return status;
}
+#endif
}
////////////////////////////////////////////////////////////////////////////////
@@ -4222,17 +4509,17 @@
if (!rewrite_existing) {
oflags |= O_EXCL;
}
- return ::open64(path, oflags, S_IREAD | S_IWRITE);
+ return ::open(path, oflags, S_IREAD | S_IWRITE);
}
// return current position of file pointer
jlong os::current_file_offset(int fd) {
- return (jlong)::lseek64(fd, (off64_t)0, SEEK_CUR);
+ return (jlong)::lseek(fd, (off_t)0, SEEK_CUR);
}
// move file pointer to the specified offset
jlong os::seek_to_file_offset(int fd, jlong offset) {
- return (jlong)::lseek64(fd, (off64_t)offset, SEEK_SET);
+ return (jlong)::lseek(fd, (off_t)offset, SEEK_SET);
}
// Map a block of memory.
@@ -4282,6 +4569,7 @@
return munmap(addr, bytes) == 0;
}
+#ifndef _ALLBSD_SOURCE
static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time);
static clockid_t thread_cpu_clockid(Thread* thread) {
@@ -4293,6 +4581,7 @@
assert(rc == 0, "pthread_getcpuclockid is expected to return 0 code");
return clockid;
}
+#endif
// current_thread_cpu_time(bool) and thread_cpu_time(Thread*, bool)
// are used by JVM M&M and JVMTI to get user+sys or user CPU time
@@ -4302,39 +4591,71 @@
// the fast estimate available on the platform.
jlong os::current_thread_cpu_time() {
+#ifdef __APPLE__
+ return os::thread_cpu_time(Thread::current(), true /* user + sys */);
+#elif !defined(_ALLBSD_SOURCE)
if (os::Bsd::supports_fast_thread_cpu_time()) {
return os::Bsd::fast_thread_cpu_time(CLOCK_THREAD_CPUTIME_ID);
} else {
// return user + sys since the cost is the same
return slow_thread_cpu_time(Thread::current(), true /* user + sys */);
}
+#endif
}
jlong os::thread_cpu_time(Thread* thread) {
+#ifndef _ALLBSD_SOURCE
// consistent with what current_thread_cpu_time() returns
if (os::Bsd::supports_fast_thread_cpu_time()) {
return os::Bsd::fast_thread_cpu_time(thread_cpu_clockid(thread));
} else {
return slow_thread_cpu_time(thread, true /* user + sys */);
}
+#endif
}
jlong os::current_thread_cpu_time(bool user_sys_cpu_time) {
+#ifdef __APPLE__
+ return os::thread_cpu_time(Thread::current(), user_sys_cpu_time);
+#elif !defined(_ALLBSD_SOURCE)
if (user_sys_cpu_time && os::Bsd::supports_fast_thread_cpu_time()) {
return os::Bsd::fast_thread_cpu_time(CLOCK_THREAD_CPUTIME_ID);
} else {
return slow_thread_cpu_time(Thread::current(), user_sys_cpu_time);
}
+#endif
}
jlong os::thread_cpu_time(Thread *thread, bool user_sys_cpu_time) {
+#ifdef __APPLE__
+ struct thread_basic_info tinfo;
+ mach_msg_type_number_t tcount = THREAD_INFO_MAX;
+ kern_return_t kr;
+ mach_port_t mach_thread;
+
+ mach_thread = pthread_mach_thread_np(thread->osthread()->thread_id());
+ kr = thread_info(mach_thread, THREAD_BASIC_INFO, (thread_info_t)&tinfo, &tcount);
+ if (kr != KERN_SUCCESS)
+ return -1;
+
+ if (user_sys_cpu_time) {
+ jlong nanos;
+ nanos = ((jlong) tinfo.system_time.seconds + tinfo.user_time.seconds) * (jlong)1000000000;
+ nanos += ((jlong) tinfo.system_time.microseconds + (jlong) tinfo.user_time.microseconds) * (jlong)1000;
+ return nanos;
+ } else {
+ return ((jlong)tinfo.user_time.seconds * 1000000000) + ((jlong)tinfo.user_time.microseconds * (jlong)1000);
+ }
+#elif !defined(_ALLBSD_SOURCE)
if (user_sys_cpu_time && os::Bsd::supports_fast_thread_cpu_time()) {
return os::Bsd::fast_thread_cpu_time(thread_cpu_clockid(thread));
} else {
return slow_thread_cpu_time(thread, user_sys_cpu_time);
}
+#endif
}
+#ifndef _ALLBSD_SOURCE
//
// -1 on error.
//
@@ -4424,6 +4745,7 @@
return (jlong)user_time * (1000000000 / clock_tics_per_sec);
}
}
+#endif
void os::current_thread_cpu_time_info(jvmtiTimerInfo *info_ptr) {
info_ptr->max_value = ALL_64_BITS; // will not wrap in less than 64 bits
@@ -4440,7 +4762,13 @@
}
bool os::is_thread_cpu_time_supported() {
+#ifdef __APPLE__
return true;
+#elif defined(_ALLBSD_SOURCE)
+ return false;
+#else
+ return true;
+#endif
}
// System loadavg support. Returns -1 if load average cannot be obtained.
@@ -4573,7 +4901,7 @@
// abstime will be the absolute timeout time
// TODO: replace compute_abstime() with unpackTime()
-static struct timespec* compute_abstime(timespec* abstime, jlong millis) {
+static struct timespec* compute_abstime(struct timespec* abstime, jlong millis) {
if (millis < 0) millis = 0;
struct timeval now;
int status = gettimeofday(&now, NULL);
@@ -4625,7 +4953,7 @@
status = pthread_cond_wait(_cond, _mutex);
// for some reason, under 2.7 lwp_cond_wait() may return ETIME ...
// Treat this the same as if the wait was interrupted
- if (status == ETIME) { status = EINTR; }
+ if (status == ETIMEDOUT) { status = EINTR; }
assert_status(status == 0 || status == EINTR, status, "cond_wait");
}
-- _nParked ;
@@ -4683,10 +5011,10 @@
pthread_cond_init (_cond, NULL) ;
}
assert_status(status == 0 || status == EINTR ||
- status == ETIME || status == ETIMEDOUT,
+ status == ETIMEDOUT,
status, "cond_timedwait");
if (!FilterSpuriousWakeups) break ; // previous semantics
- if (status == ETIME || status == ETIMEDOUT) break ;
+ if (status == ETIMEDOUT) break ;
// We consume and ignore EINTR and spurious wakeups.
}
--_nParked ;
@@ -4778,7 +5106,7 @@
* years from "now".
*/
-static void unpackTime(timespec* absTime, bool isAbsolute, jlong time) {
+static void unpackTime(struct timespec* absTime, bool isAbsolute, jlong time) {
assert (time > 0, "convertTime");
struct timeval now;
@@ -4838,7 +5166,7 @@
}
// Next, demultiplex/decode time arguments
- timespec absTime;
+ struct timespec absTime;
if (time < 0) { // don't wait at all
return;
}
@@ -4892,7 +5220,7 @@
}
}
assert_status(status == 0 || status == EINTR ||
- status == ETIME || status == ETIMEDOUT,
+ status == ETIMEDOUT,
status, "cond_timedwait");
#ifdef ASSERT
@@ -4935,14 +5263,12 @@
}
+/* Darwin has no "environ" in a dynamic library. */
+#ifdef __APPLE__
+#include <crt_externs.h>
+#define environ (*_NSGetEnviron())
+#else
extern char** environ;
-
-#ifndef __NR_fork
-#define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57)
-#endif
-
-#ifndef __NR_execve
-#define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59)
#endif
// Run the specified command in a separate process. Return its exit value,
@@ -4957,8 +5283,7 @@
// separate process to execve. Make a direct syscall to fork process.
// On IA64 there's no fork syscall, we have to use fork() and hope for
// the best...
- pid_t pid = NOT_IA64(syscall(__NR_fork);)
- IA64_ONLY(fork();)
+ pid_t pid = fork();
if (pid < 0) {
// fork failed
@@ -4974,8 +5299,7 @@
// in the new process, so make a system call directly.
// IA64 should use normal execve() from glibc to match the glibc fork()
// above.
- NOT_IA64(syscall(__NR_execve, "/bin/sh", argv, environ);)
- IA64_ONLY(execve("/bin/sh", (char* const*)argv, environ);)
+ execve("/bin/sh", (char* const*)argv, environ);
// execve failed
_exit(-1);
--- ./hotspot/src/os/bsd/vm/os_bsd.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/os_bsd.hpp 2010-07-04 09:31:26.000000000 -0700
@@ -27,6 +27,12 @@
/* pthread_getattr_np comes with BsdThreads-0.9-7 on RedHat 7.1 */
typedef int (*pthread_getattr_func_type) (pthread_t, pthread_attr_t *);
+#ifdef __APPLE__
+// Mac OS X doesn't support clock_gettime. Stub out the type, it is
+// unused
+typedef int clockid_t;
+#endif
+
class Bsd {
friend class os;
@@ -47,6 +53,7 @@
static int sigflags[MAXSIGNUM];
static int (*_clock_gettime)(clockid_t, struct timespec *);
+#ifndef _ALLBSD_SOURCE
static int (*_pthread_getcpuclockid)(pthread_t, clockid_t *);
static address _initial_thread_stack_bottom;
@@ -58,6 +65,7 @@
static bool _is_floating_stack;
static bool _is_NPTL;
static bool _supports_fast_thread_cpu_time;
+#endif
static GrowableArray<int>* _cpu_to_node;
@@ -65,38 +73,52 @@
static julong _physical_memory;
static pthread_t _main_thread;
+#ifndef _ALLBSD_SOURCE
static Mutex* _createThread_lock;
+#endif
static int _page_size;
static julong available_memory();
static julong physical_memory() { return _physical_memory; }
static void initialize_system_info();
+#ifndef _ALLBSD_SOURCE
static void set_glibc_version(const char *s) { _glibc_version = s; }
static void set_libpthread_version(const char *s) { _libpthread_version = s; }
+#endif
static bool supports_variable_stack_size();
+#ifndef _ALLBSD_SOURCE
static void set_is_NPTL() { _is_NPTL = true; }
static void set_is_BsdThreads() { _is_NPTL = false; }
static void set_is_floating_stack() { _is_floating_stack = true; }
+#endif
static void rebuild_cpu_to_node_map();
static GrowableArray<int>* cpu_to_node() { return _cpu_to_node; }
public:
+
static void init_thread_fpu_state();
+#ifndef _ALLBSD_SOURCE
static int get_fpu_control_word();
static void set_fpu_control_word(int fpu_control);
+#endif
static pthread_t main_thread(void) { return _main_thread; }
+
+#ifndef _ALLBSD_SOURCE
// returns kernel thread id (similar to LWP id on Solaris), which can be
// used to access /proc
static pid_t gettid();
static void set_createThread_lock(Mutex* lk) { _createThread_lock = lk; }
static Mutex* createThread_lock(void) { return _createThread_lock; }
+#endif
static void hotspot_sigmask(Thread* thread);
+#ifndef _ALLBSD_SOURCE
static address initial_thread_stack_bottom(void) { return _initial_thread_stack_bottom; }
static uintptr_t initial_thread_stack_size(void) { return _initial_thread_stack_size; }
+#endif
static bool is_initial_thread(void);
static int page_size(void) { return _page_size; }
@@ -133,6 +155,7 @@
static struct sigaction *get_chained_signal_action(int sig);
static bool chained_handler(int sig, siginfo_t* siginfo, void* context);
+#ifndef _ALLBSD_SOURCE
// GNU libc and libpthread version strings
static const char *glibc_version() { return _glibc_version; }
static const char *libpthread_version() { return _libpthread_version; }
@@ -148,6 +171,7 @@
static void libpthread_init();
static bool libnuma_init();
static void* libnuma_dlsym(void* handle, const char* name);
+#endif
// Minimum stack size a thread can be created with (allowing
// the VM to completely create the thread and enter user code)
static size_t min_stack_allowed;
@@ -156,17 +180,21 @@
static size_t default_stack_size(os::ThreadType thr_type);
static size_t default_guard_size(os::ThreadType thr_type);
+#ifndef _ALLBSD_SOURCE
static void capture_initial_stack(size_t max_size);
// Stack overflow handling
static bool manually_expand_stack(JavaThread * t, address addr);
static int max_register_window_saves_before_flushing();
+#endif
// Real-time clock functions
static void clock_init(void);
+#ifndef _ALLBSD_SOURCE
// fast POSIX clocks support
static void fast_thread_clock_init(void);
+#endif
static bool supports_monotonic_clock() {
return _clock_gettime != NULL;
@@ -176,6 +204,7 @@
return _clock_gettime ? _clock_gettime(clock_id, tp) : -1;
}
+#ifndef _ALLBSD_SOURCE
static int pthread_getcpuclockid(pthread_t tid, clockid_t *clock_id) {
return _pthread_getcpuclockid ? _pthread_getcpuclockid(tid, clock_id) : -1;
}
@@ -185,6 +214,7 @@
}
static jlong fast_thread_cpu_time(clockid_t clockid);
+#endif
// Stack repair handling
--- ./hotspot/src/os/bsd/vm/os_bsd.inline.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/os_bsd.inline.hpp 2010-07-04 09:31:26.000000000 -0700
@@ -61,7 +61,15 @@
inline bool os::allocate_stack_guard_pages() {
assert(uses_stack_guard_pages(), "sanity check");
+#if !defined(__FreeBSD__) || __FreeBSD__ < 5
+ // Since FreeBSD 4 uses malloc() for allocating the thread stack
+ // there is no need to do anything extra to allocate the guard pages
+ return false;
+#else
+ // FreeBSD 5+ uses mmap MAP_STACK for allocating the thread stacks.
+ // Must 'allocate' them or guard pages are ignored.
return true;
+#endif
}
--- ./hotspot/src/os/bsd/vm/perfMemory_bsd.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/perfMemory_bsd.cpp 2010-07-04 09:31:26.000000000 -0700
@@ -241,7 +241,7 @@
char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize);
- // POSIX interface to getpwuid_r is used on BSD
+ // POSIX interface to getpwuid_r is used on LINUX
struct passwd* p;
int result = getpwuid_r(uid, &pwent, pwbuf, (size_t)bufsize, &p);
--- ./hotspot/src/os/bsd/vm/vtune_bsd.cpp 1969-12-31 16:00:00.000000000 -0800
+++ ./hotspot/src/os/bsd/vm/vtune_bsd.cpp 2010-07-04 09:31:26.000000000 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 1999, 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.
+ *
+ * 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 "incls/_precompiled.incl"
+#include "incls/_vtune_bsd.cpp.incl"
+
+// empty implementation
+
+void VTune::start_GC() {}
+void VTune::end_GC() {}
+void VTune::start_class_load() {}
+void VTune::end_class_load() {}
+void VTune::exit() {}
+void VTune::register_stub(const char* name, address start, address end) {}
+
+void VTune::create_nmethod(nmethod* nm) {}
+void VTune::delete_nmethod(nmethod* nm) {}
+
+void vtune_init() {}
+
+
+// Reconciliation History
+// vtune_solaris.cpp 1.8 99/07/12 23:54:21
+// End
--- ./hotspot/src/os_cpu/bsd_sparc/vm/assembler_bsd_sparc.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/assembler_bsd_sparc.cpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- *
- * 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 "incls/_precompiled.incl"
-#include "incls/_assembler_bsd_sparc.cpp.incl"
-
-#include <asm-sparc/traps.h>
-
-void MacroAssembler::read_ccr_trap(Register ccr_save) {
- // No implementation
- breakpoint_trap();
-}
-
-void MacroAssembler::write_ccr_trap(Register ccr_save, Register scratch1, Register scratch2) {
- // No implementation
- breakpoint_trap();
-}
-
-void MacroAssembler::flush_windows_trap() { trap(SP_TRAP_FWIN); }
-void MacroAssembler::clean_windows_trap() { trap(SP_TRAP_CWIN); }
-
-// Use software breakpoint trap until we figure out how to do this on Bsd
-void MacroAssembler::get_psr_trap() { trap(SP_TRAP_SBPT); }
-void MacroAssembler::set_psr_trap() { trap(SP_TRAP_SBPT); }
--- ./hotspot/src/os_cpu/bsd_sparc/vm/atomic_bsd_sparc.inline.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/atomic_bsd_sparc.inline.hpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,206 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- *
- * 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.
- *
- */
-
-// Implementation of class atomic
-
-inline void Atomic::store (jbyte store_value, jbyte* dest) { *dest = store_value; }
-inline void Atomic::store (jshort store_value, jshort* dest) { *dest = store_value; }
-inline void Atomic::store (jint store_value, jint* dest) { *dest = store_value; }
-inline void Atomic::store (jlong store_value, jlong* dest) { *dest = store_value; }
-inline void Atomic::store_ptr(intptr_t store_value, intptr_t* dest) { *dest = store_value; }
-inline void Atomic::store_ptr(void* store_value, void* dest) { *(void**)dest = store_value; }
-
-inline void Atomic::store (jbyte store_value, volatile jbyte* dest) { *dest = store_value; }
-inline void Atomic::store (jshort store_value, volatile jshort* dest) { *dest = store_value; }
-inline void Atomic::store (jint store_value, volatile jint* dest) { *dest = store_value; }
-inline void Atomic::store (jlong store_value, volatile jlong* dest) { *dest = store_value; }
-inline void Atomic::store_ptr(intptr_t store_value, volatile intptr_t* dest) { *dest = store_value; }
-inline void Atomic::store_ptr(void* store_value, volatile void* dest) { *(void* volatile *)dest = store_value; }
-
-inline void Atomic::inc (volatile jint* dest) { (void)add (1, dest); }
-inline void Atomic::inc_ptr(volatile intptr_t* dest) { (void)add_ptr(1, dest); }
-inline void Atomic::inc_ptr(volatile void* dest) { (void)add_ptr(1, dest); }
-
-inline void Atomic::dec (volatile jint* dest) { (void)add (-1, dest); }
-inline void Atomic::dec_ptr(volatile intptr_t* dest) { (void)add_ptr(-1, dest); }
-inline void Atomic::dec_ptr(volatile void* dest) { (void)add_ptr(-1, dest); }
-
-inline jint Atomic::add (jint add_value, volatile jint* dest) {
- intptr_t rv;
- __asm__ volatile(
- "1: \n\t"
- " ld [%2], %%o2\n\t"
- " add %1, %%o2, %%o3\n\t"
- " cas [%2], %%o2, %%o3\n\t"
- " cmp %%o2, %%o3\n\t"
- " bne 1b\n\t"
- " nop\n\t"
- " add %1, %%o2, %0\n\t"
- : "=r" (rv)
- : "r" (add_value), "r" (dest)
- : "memory", "o2", "o3");
- return rv;
-}
-
-inline intptr_t Atomic::add_ptr(intptr_t add_value, volatile intptr_t* dest) {
- intptr_t rv;
-#ifdef _LP64
- __asm__ volatile(
- "1: \n\t"
- " ldx [%2], %%o2\n\t"
- " add %0, %%o2, %%o3\n\t"
- " casx [%2], %%o2, %%o3\n\t"
- " cmp %%o2, %%o3\n\t"
- " bne %%xcc, 1b\n\t"
- " nop\n\t"
- " add %0, %%o2, %0\n\t"
- : "=r" (rv)
- : "r" (add_value), "r" (dest)
- : "memory", "o2", "o3");
-#else
- __asm__ volatile(
- "1: \n\t"
- " ld [%2], %%o2\n\t"
- " add %1, %%o2, %%o3\n\t"
- " cas [%2], %%o2, %%o3\n\t"
- " cmp %%o2, %%o3\n\t"
- " bne 1b\n\t"
- " nop\n\t"
- " add %1, %%o2, %0\n\t"
- : "=r" (rv)
- : "r" (add_value), "r" (dest)
- : "memory", "o2", "o3");
-#endif // _LP64
- return rv;
-}
-
-inline void* Atomic::add_ptr(intptr_t add_value, volatile void* dest) {
- return (void*)add_ptr((intptr_t)add_value, (volatile intptr_t*)dest);
-}
-
-
-inline jint Atomic::xchg (jint exchange_value, volatile jint* dest) {
- intptr_t rv = exchange_value;
- __asm__ volatile(
- " swap [%2],%1\n\t"
- : "=r" (rv)
- : "0" (exchange_value) /* we use same register as for return value */, "r" (dest)
- : "memory");
- return rv;
-}
-
-inline intptr_t Atomic::xchg_ptr(intptr_t exchange_value, volatile intptr_t* dest) {
- intptr_t rv = exchange_value;
-#ifdef _LP64
- __asm__ volatile(
- "1:\n\t"
- " mov %1, %%o3\n\t"
- " ldx [%2], %%o2\n\t"
- " casx [%2], %%o2, %%o3\n\t"
- " cmp %%o2, %%o3\n\t"
- " bne %%xcc, 1b\n\t"
- " nop\n\t"
- " mov %%o2, %0\n\t"
- : "=r" (rv)
- : "r" (exchange_value), "r" (dest)
- : "memory", "o2", "o3");
-#else
- __asm__ volatile(
- "swap [%2],%1\n\t"
- : "=r" (rv)
- : "0" (exchange_value) /* we use same register as for return value */, "r" (dest)
- : "memory");
-#endif // _LP64
- return rv;
-}
-
-inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) {
- return (void*)xchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest);
-}
-
-
-inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) {
- jint rv;
- __asm__ volatile(
- " cas [%2], %3, %0"
- : "=r" (rv)
- : "0" (exchange_value), "r" (dest), "r" (compare_value)
- : "memory");
- return rv;
-}
-
-inline jlong Atomic::cmpxchg (jlong exchange_value, volatile jlong* dest, jlong compare_value) {
-#ifdef _LP64
- jlong rv;
- __asm__ volatile(
- " casx [%2], %3, %0"
- : "=r" (rv)
- : "0" (exchange_value), "r" (dest), "r" (compare_value)
- : "memory");
- return rv;
-#else
- assert(VM_Version::v9_instructions_work(), "cas only supported on v9");
- volatile jlong_accessor evl, cvl, rv;
- evl.long_value = exchange_value;
- cvl.long_value = compare_value;
-
- __asm__ volatile(
- " sllx %2, 32, %2\n\t"
- " srl %3, 0, %3\n\t"
- " or %2, %3, %2\n\t"
- " sllx %5, 32, %5\n\t"
- " srl %6, 0, %6\n\t"
- " or %5, %6, %5\n\t"
- " casx [%4], %5, %2\n\t"
- " srl %2, 0, %1\n\t"
- " srlx %2, 32, %0\n\t"
- : "=r" (rv.words[0]), "=r" (rv.words[1])
- : "r" (evl.words[0]), "r" (evl.words[1]), "r" (dest), "r" (cvl.words[0]), "r" (cvl.words[1])
- : "memory");
-
- return rv.long_value;
-#endif
-}
-
-inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value) {
- intptr_t rv;
-#ifdef _LP64
- __asm__ volatile(
- " casx [%2], %3, %0"
- : "=r" (rv)
- : "0" (exchange_value), "r" (dest), "r" (compare_value)
- : "memory");
-#else
- __asm__ volatile(
- " cas [%2], %3, %0"
- : "=r" (rv)
- : "0" (exchange_value), "r" (dest), "r" (compare_value)
- : "memory");
-#endif // _LP64
- return rv;
-}
-
-inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value) {
- return (void*)cmpxchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest, (intptr_t)compare_value);
-}
--- ./hotspot/src/os_cpu/bsd_sparc/vm/bsd_sparc.ad 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/bsd_sparc.ad 1969-12-31 16:00:00.000000000 -0800
@@ -1,27 +0,0 @@
-//
-// Copyright (c) 1999, 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.
-//
-// 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.
-//
-
-//
-//
-
-// SPARC Bsd Architecture Description File
--- ./hotspot/src/os_cpu/bsd_sparc/vm/bsd_sparc.s 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/bsd_sparc.s 1969-12-31 16:00:00.000000000 -0800
@@ -1,105 +0,0 @@
-#
-# Copyright (c) 2005, 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.
-#
-# 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.
-#
-
- # Prototype: int SafeFetch32 (int * adr, int ErrValue)
- # The "ld" at Fetch32 is potentially faulting instruction.
- # If the instruction traps the trap handler will arrange
- # for control to resume at Fetch32Resume.
- # By convention with the trap handler we ensure there is a non-CTI
- # instruction in the trap shadow.
-
-
- .globl SafeFetch32, Fetch32PFI, Fetch32Resume
- .globl SafeFetchN
- .align 32
- .type SafeFetch32,@function
-SafeFetch32:
- mov %o0, %g1
- mov %o1, %o0
-Fetch32PFI:
- # <-- Potentially faulting instruction
- ld [%g1], %o0
-Fetch32Resume:
- nop
- retl
- nop
-
- .globl SafeFetchN, FetchNPFI, FetchNResume
- .type SafeFetchN,@function
- .align 32
-SafeFetchN:
- mov %o0, %g1
- mov %o1, %o0
-FetchNPFI:
- ldn [%g1], %o0
-FetchNResume:
- nop
- retl
- nop
-
- # Possibilities:
- # -- membar
- # -- CAS (SP + BIAS, G0, G0)
- # -- wr %g0, %asi
-
- .globl SpinPause
- .type SpinPause,@function
- .align 32
-SpinPause:
- retl
- mov %g0, %o0
-
- .globl _Copy_conjoint_jlongs_atomic
- .type _Copy_conjoint_jlongs_atomic,@function
-_Copy_conjoint_jlongs_atomic:
- cmp %o0, %o1
- bleu 4f
- sll %o2, 3, %o4
- ba 2f
- 1:
- subcc %o4, 8, %o4
- std %o2, [%o1]
- add %o0, 8, %o0
- add %o1, 8, %o1
- 2:
- bge,a 1b
- ldd [%o0], %o2
- ba 5f
- nop
- 3:
- std %o2, [%o1+%o4]
- 4:
- subcc %o4, 8, %o4
- bge,a 3b
- ldd [%o0+%o4], %o2
- 5:
- retl
- nop
-
-
- .globl _flush_reg_windows
- .align 32
- _flush_reg_windows:
- ta 0x03
- retl
- mov %fp, %o0
--- ./hotspot/src/os_cpu/bsd_sparc/vm/globals_bsd_sparc.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/globals_bsd_sparc.hpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2000, 2009, 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.
- *
- */
-
-//
-// Sets the default values for platform dependent flags used by the
-// runtime system. (see globals.hpp)
-//
-
-define_pd_global(uintx, JVMInvokeMethodSlack, 12288);
-define_pd_global(intx, CompilerThreadStackSize, 0);
-
-// Only used on 64 bit platforms
-define_pd_global(uintx, HeapBaseMinAddress, 4*G);
-// Only used on 64 bit Windows platforms
-define_pd_global(bool, UseVectoredExceptions, false);
--- ./hotspot/src/os_cpu/bsd_sparc/vm/orderAccess_bsd_sparc.inline.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/orderAccess_bsd_sparc.inline.hpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- *
- * 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.
- *
- */
-
-// Implementation of class OrderAccess.
-
-// Assume TSO.
-
-inline void OrderAccess::loadload() { acquire(); }
-inline void OrderAccess::storestore() { release(); }
-inline void OrderAccess::loadstore() { acquire(); }
-inline void OrderAccess::storeload() { fence(); }
-
-inline void OrderAccess::acquire() {
- __asm__ volatile ("nop" : : :);
-}
-
-inline void OrderAccess::release() {
- jint* local_dummy = (jint*)&local_dummy;
- __asm__ volatile("stw %%g0, [%0]" : : "r" (local_dummy) : "memory");
-}
-
-inline void OrderAccess::fence() {
- __asm__ volatile ("membar #StoreLoad" : : :);
-}
-
-inline jbyte OrderAccess::load_acquire(volatile jbyte* p) { return *p; }
-inline jshort OrderAccess::load_acquire(volatile jshort* p) { return *p; }
-inline jint OrderAccess::load_acquire(volatile jint* p) { return *p; }
-inline jlong OrderAccess::load_acquire(volatile jlong* p) { return *p; }
-inline jubyte OrderAccess::load_acquire(volatile jubyte* p) { return *p; }
-inline jushort OrderAccess::load_acquire(volatile jushort* p) { return *p; }
-inline juint OrderAccess::load_acquire(volatile juint* p) { return *p; }
-inline julong OrderAccess::load_acquire(volatile julong* p) { return *p; }
-inline jfloat OrderAccess::load_acquire(volatile jfloat* p) { return *p; }
-inline jdouble OrderAccess::load_acquire(volatile jdouble* p) { return *p; }
-
-inline intptr_t OrderAccess::load_ptr_acquire(volatile intptr_t* p) { return *p; }
-inline void* OrderAccess::load_ptr_acquire(volatile void* p) { return *(void* volatile *)p; }
-inline void* OrderAccess::load_ptr_acquire(const volatile void* p) { return *(void* const volatile *)p; }
-
-inline void OrderAccess::release_store(volatile jbyte* p, jbyte v) { *p = v; }
-inline void OrderAccess::release_store(volatile jshort* p, jshort v) { *p = v; }
-inline void OrderAccess::release_store(volatile jint* p, jint v) { *p = v; }
-inline void OrderAccess::release_store(volatile jlong* p, jlong v) { *p = v; }
-inline void OrderAccess::release_store(volatile jubyte* p, jubyte v) { *p = v; }
-inline void OrderAccess::release_store(volatile jushort* p, jushort v) { *p = v; }
-inline void OrderAccess::release_store(volatile juint* p, juint v) { *p = v; }
-inline void OrderAccess::release_store(volatile julong* p, julong v) { *p = v; }
-inline void OrderAccess::release_store(volatile jfloat* p, jfloat v) { *p = v; }
-inline void OrderAccess::release_store(volatile jdouble* p, jdouble v) { *p = v; }
-
-inline void OrderAccess::release_store_ptr(volatile intptr_t* p, intptr_t v) { *p = v; }
-inline void OrderAccess::release_store_ptr(volatile void* p, void* v) { *(void* volatile *)p = v; }
-
-inline void OrderAccess::store_fence(jbyte* p, jbyte v) { *p = v; fence(); }
-inline void OrderAccess::store_fence(jshort* p, jshort v) { *p = v; fence(); }
-inline void OrderAccess::store_fence(jint* p, jint v) { *p = v; fence(); }
-inline void OrderAccess::store_fence(jlong* p, jlong v) { *p = v; fence(); }
-inline void OrderAccess::store_fence(jubyte* p, jubyte v) { *p = v; fence(); }
-inline void OrderAccess::store_fence(jushort* p, jushort v) { *p = v; fence(); }
-inline void OrderAccess::store_fence(juint* p, juint v) { *p = v; fence(); }
-inline void OrderAccess::store_fence(julong* p, julong v) { *p = v; fence(); }
-inline void OrderAccess::store_fence(jfloat* p, jfloat v) { *p = v; fence(); }
-inline void OrderAccess::store_fence(jdouble* p, jdouble v) { *p = v; fence(); }
-
-inline void OrderAccess::store_ptr_fence(intptr_t* p, intptr_t v) { *p = v; fence(); }
-inline void OrderAccess::store_ptr_fence(void** p, void* v) { *p = v; fence(); }
-
-inline void OrderAccess::release_store_fence(volatile jbyte* p, jbyte v) { *p = v; fence(); }
-inline void OrderAccess::release_store_fence(volatile jshort* p, jshort v) { *p = v; fence(); }
-inline void OrderAccess::release_store_fence(volatile jint* p, jint v) { *p = v; fence(); }
-inline void OrderAccess::release_store_fence(volatile jlong* p, jlong v) { *p = v; fence(); }
-inline void OrderAccess::release_store_fence(volatile jubyte* p, jubyte v) { *p = v; fence(); }
-inline void OrderAccess::release_store_fence(volatile jushort* p, jushort v) { *p = v; fence(); }
-inline void OrderAccess::release_store_fence(volatile juint* p, juint v) { *p = v; fence(); }
-inline void OrderAccess::release_store_fence(volatile julong* p, julong v) { *p = v; fence(); }
-inline void OrderAccess::release_store_fence(volatile jfloat* p, jfloat v) { *p = v; fence(); }
-inline void OrderAccess::release_store_fence(volatile jdouble* p, jdouble v) { *p = v; fence(); }
-
-inline void OrderAccess::release_store_ptr_fence(volatile intptr_t* p, intptr_t v) { *p = v; fence(); }
-inline void OrderAccess::release_store_ptr_fence(volatile void* p, void* v) { *(void* volatile *)p = v; fence(); }
--- ./hotspot/src/os_cpu/bsd_sparc/vm/os_bsd_sparc.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/os_bsd_sparc.cpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,648 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- *
- * 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.
- *
- */
-
-// do not include precompiled header file
-
-#include "incls/_os_bsd_sparc.cpp.incl"
-
-// Bsd/Sparc has rather obscure naming of registers in sigcontext
-// different between 32 and 64 bits
-#ifdef _LP64
-#define SIG_PC(x) ((x)->sigc_regs.tpc)
-#define SIG_NPC(x) ((x)->sigc_regs.tnpc)
-#define SIG_REGS(x) ((x)->sigc_regs)
-#else
-#define SIG_PC(x) ((x)->si_regs.pc)
-#define SIG_NPC(x) ((x)->si_regs.npc)
-#define SIG_REGS(x) ((x)->si_regs)
-#endif
-
-// those are to reference registers in sigcontext
-enum {
- CON_G0 = 0,
- CON_G1,
- CON_G2,
- CON_G3,
- CON_G4,
- CON_G5,
- CON_G6,
- CON_G7,
- CON_O0,
- CON_O1,
- CON_O2,
- CON_O3,
- CON_O4,
- CON_O5,
- CON_O6,
- CON_O7,
-};
-
-static inline void set_cont_address(sigcontext* ctx, address addr) {
- SIG_PC(ctx) = (intptr_t)addr;
- SIG_NPC(ctx) = (intptr_t)(addr+4);
-}
-
-// For Forte Analyzer AsyncGetCallTrace profiling support - thread is
-// currently interrupted by SIGPROF.
-// os::Solaris::fetch_frame_from_ucontext() tries to skip nested
-// signal frames. Currently we don't do that on Bsd, so it's the
-// same as os::fetch_frame_from_context().
-ExtendedPC os::Bsd::fetch_frame_from_ucontext(Thread* thread,
- ucontext_t* uc,
- intptr_t** ret_sp,
- intptr_t** ret_fp) {
- assert(thread != NULL, "just checking");
- assert(ret_sp != NULL, "just checking");
- assert(ret_fp != NULL, "just checking");
-
- return os::fetch_frame_from_context(uc, ret_sp, ret_fp);
-}
-
-ExtendedPC os::fetch_frame_from_context(void* ucVoid,
- intptr_t** ret_sp,
- intptr_t** ret_fp) {
- ucontext_t* uc = (ucontext_t*) ucVoid;
- ExtendedPC epc;
-
- if (uc != NULL) {
- epc = ExtendedPC(os::Bsd::ucontext_get_pc(uc));
- if (ret_sp) {
- *ret_sp = os::Bsd::ucontext_get_sp(uc);
- }
- if (ret_fp) {
- *ret_fp = os::Bsd::ucontext_get_fp(uc);
- }
- } else {
- // construct empty ExtendedPC for return value checking
- epc = ExtendedPC(NULL);
- if (ret_sp) {
- *ret_sp = (intptr_t*) NULL;
- }
- if (ret_fp) {
- *ret_fp = (intptr_t*) NULL;
- }
- }
-
- return epc;
-}
-
-frame os::fetch_frame_from_context(void* ucVoid) {
- intptr_t* sp;
- intptr_t* fp;
- ExtendedPC epc = fetch_frame_from_context(ucVoid, &sp, &fp);
- return frame(sp, fp, epc.pc());
-}
-
-frame os::get_sender_for_C_frame(frame* fr) {
- return frame(fr->sender_sp(), fr->link(), fr->sender_pc());
-}
-
-frame os::current_frame() {
- fprintf(stderr, "current_frame()");
-
- intptr_t* sp = StubRoutines::Sparc::flush_callers_register_windows_func()();
- frame myframe(sp, frame::unpatchable,
- CAST_FROM_FN_PTR(address, os::current_frame));
- if (os::is_first_C_frame(&myframe)) {
- // stack is not walkable
- return frame(NULL, frame::unpatchable, NULL);
- } else {
- return os::get_sender_for_C_frame(&myframe);
- }
-}
-
-address os::current_stack_pointer() {
- register void *sp __asm__ ("sp");
- return (address)sp;
-}
-
-static void current_stack_region(address* bottom, size_t* size) {
- if (os::Bsd::is_initial_thread()) {
- // initial thread needs special handling because pthread_getattr_np()
- // may return bogus value.
- *bottom = os::Bsd::initial_thread_stack_bottom();
- *size = os::Bsd::initial_thread_stack_size();
- } else {
- pthread_attr_t attr;
-
- int rslt = pthread_getattr_np(pthread_self(), &attr);
-
- // JVM needs to know exact stack location, abort if it fails
- if (rslt != 0) {
- if (rslt == ENOMEM) {
- vm_exit_out_of_memory(0, "pthread_getattr_np");
- } else {
- fatal(err_msg("pthread_getattr_np failed with errno = %d", rslt));
- }
- }
-
- if (pthread_attr_getstack(&attr, (void**)bottom, size) != 0) {
- fatal("Can not locate current stack attributes!");
- }
-
- pthread_attr_destroy(&attr);
- }
- assert(os::current_stack_pointer() >= *bottom &&
- os::current_stack_pointer() < *bottom + *size, "just checking");
-}
-
-address os::current_stack_base() {
- address bottom;
- size_t size;
- current_stack_region(&bottom, &size);
- return bottom + size;
-}
-
-size_t os::current_stack_size() {
- // stack size includes normal stack and HotSpot guard pages
- address bottom;
- size_t size;
- current_stack_region(&bottom, &size);
- return size;
-}
-
-char* os::non_memory_address_word() {
- // Must never look like an address returned by reserve_memory,
- // even in its subfields (as defined by the CPU immediate fields,
- // if the CPU splits constants across multiple instructions).
- // On SPARC, 0 != %hi(any real address), because there is no
- // allocation in the first 1Kb of the virtual address space.
- return (char*) 0;
-}
-
-void os::initialize_thread() {}
-
-void os::print_context(outputStream *st, void *context) {
- if (context == NULL) return;
-
- ucontext_t* uc = (ucontext_t*)context;
- sigcontext* sc = (sigcontext*)context;
- st->print_cr("Registers:");
-
- st->print_cr(" O0=" INTPTR_FORMAT " O1=" INTPTR_FORMAT
- " O2=" INTPTR_FORMAT " O3=" INTPTR_FORMAT,
- SIG_REGS(sc).u_regs[CON_O0],
- SIG_REGS(sc).u_regs[CON_O1],
- SIG_REGS(sc).u_regs[CON_O2],
- SIG_REGS(sc).u_regs[CON_O3]);
- st->print_cr(" O4=" INTPTR_FORMAT " O5=" INTPTR_FORMAT
- " O6=" INTPTR_FORMAT " O7=" INTPTR_FORMAT,
- SIG_REGS(sc).u_regs[CON_O4],
- SIG_REGS(sc).u_regs[CON_O5],
- SIG_REGS(sc).u_regs[CON_O6],
- SIG_REGS(sc).u_regs[CON_O7]);
-
- st->print_cr(" G1=" INTPTR_FORMAT " G2=" INTPTR_FORMAT
- " G3=" INTPTR_FORMAT " G4=" INTPTR_FORMAT,
- SIG_REGS(sc).u_regs[CON_G1],
- SIG_REGS(sc).u_regs[CON_G2],
- SIG_REGS(sc).u_regs[CON_G3],
- SIG_REGS(sc).u_regs[CON_G4]);
- st->print_cr(" G5=" INTPTR_FORMAT " G6=" INTPTR_FORMAT
- " G7=" INTPTR_FORMAT " Y=" INTPTR_FORMAT,
- SIG_REGS(sc).u_regs[CON_G5],
- SIG_REGS(sc).u_regs[CON_G6],
- SIG_REGS(sc).u_regs[CON_G7],
- SIG_REGS(sc).y);
-
- st->print_cr(" PC=" INTPTR_FORMAT " nPC=" INTPTR_FORMAT,
- SIG_PC(sc),
- SIG_NPC(sc));
- st->cr();
- st->cr();
-
- intptr_t *sp = (intptr_t *)os::Bsd::ucontext_get_sp(uc);
- st->print_cr("Top of Stack: (sp=" PTR_FORMAT ")", sp);
- print_hex_dump(st, (address)sp, (address)(sp + 32), sizeof(intptr_t));
- st->cr();
-
- // Note: it may be unsafe to inspect memory near pc. For example, pc may
- // point to garbage if entry point in an nmethod is corrupted. Leave
- // this at the end, and hope for the best.
- address pc = os::Bsd::ucontext_get_pc(uc);
- st->print_cr("Instructions: (pc=" PTR_FORMAT ")", pc);
- print_hex_dump(st, pc - 16, pc + 16, sizeof(char));
-}
-
-
-address os::Bsd::ucontext_get_pc(ucontext_t* uc) {
- return (address) SIG_PC((sigcontext*)uc);
-}
-
-intptr_t* os::Bsd::ucontext_get_sp(ucontext_t *uc) {
- return (intptr_t*)
- ((intptr_t)SIG_REGS((sigcontext*)uc).u_regs[CON_O6] + STACK_BIAS);
-}
-
-// not used on Sparc
-intptr_t* os::Bsd::ucontext_get_fp(ucontext_t *uc) {
- ShouldNotReachHere();
- return NULL;
-}
-
-// Utility functions
-
-extern "C" void Fetch32PFI();
-extern "C" void Fetch32Resume();
-extern "C" void FetchNPFI();
-extern "C" void FetchNResume();
-
-inline static bool checkPrefetch(sigcontext* uc, address pc) {
- if (pc == (address) Fetch32PFI) {
- set_cont_address(uc, address(Fetch32Resume));
- return true;
- }
- if (pc == (address) FetchNPFI) {
- set_cont_address(uc, address(FetchNResume));
- return true;
- }
- return false;
-}
-
-inline static bool checkOverflow(sigcontext* uc,
- address pc,
- address addr,
- JavaThread* thread,
- address* stub) {
- // check if fault address is within thread stack
- if (addr < thread->stack_base() &&
- addr >= thread->stack_base() - thread->stack_size()) {
- // stack overflow
- if (thread->in_stack_yellow_zone(addr)) {
- thread->disable_stack_yellow_zone();
- if (thread->thread_state() == _thread_in_Java) {
- // Throw a stack overflow exception. Guard pages will be reenabled
- // while unwinding the stack.
- *stub =
- SharedRuntime::continuation_for_implicit_exception(thread,
- pc,
- SharedRuntime::STACK_OVERFLOW);
- } else {
- // Thread was in the vm or native code. Return and try to finish.
- return true;
- }
- } else if (thread->in_stack_red_zone(addr)) {
- // Fatal red zone violation. Disable the guard pages and fall through
- // to handle_unexpected_exception way down below.
- thread->disable_stack_red_zone();
- tty->print_raw_cr("An irrecoverable stack overflow has occurred.");
- } else {
- // Accessing stack address below sp may cause SEGV if current
- // thread has MAP_GROWSDOWN stack. This should only happen when
- // current thread was created by user code with MAP_GROWSDOWN flag
- // and then attached to VM. See notes in os_bsd.cpp.
- if (thread->osthread()->expanding_stack() == 0) {
- thread->osthread()->set_expanding_stack();
- if (os::Bsd::manually_expand_stack(thread, addr)) {
- thread->osthread()->clear_expanding_stack();
- return true;
- }
- thread->osthread()->clear_expanding_stack();
- } else {
- fatal("recursive segv. expanding stack.");
- }
- }
- }
- return false;
-}
-
-inline static bool checkPollingPage(address pc, address fault, address* stub) {
- if (fault == os::get_polling_page()) {
- *stub = SharedRuntime::get_poll_stub(pc);
- return true;
- }
- return false;
-}
-
-inline static bool checkByteBuffer(address pc, address* stub) {
- // BugId 4454115: A read from a MappedByteBuffer can fault
- // here if the underlying file has been truncated.
- // Do not crash the VM in such a case.
- CodeBlob* cb = CodeCache::find_blob_unsafe(pc);
- nmethod* nm = cb->is_nmethod() ? (nmethod*)cb : NULL;
- if (nm != NULL && nm->has_unsafe_access()) {
- *stub = StubRoutines::handler_for_unsafe_access();
- return true;
- }
- return false;
-}
-
-inline static bool checkVerifyOops(address pc, address fault, address* stub) {
- if (pc >= MacroAssembler::_verify_oop_implicit_branch[0]
- && pc < MacroAssembler::_verify_oop_implicit_branch[1] ) {
- *stub = MacroAssembler::_verify_oop_implicit_branch[2];
- warning("fixed up memory fault in +VerifyOops at address "
- INTPTR_FORMAT, fault);
- return true;
- }
- return false;
-}
-
-inline static bool checkFPFault(address pc, int code,
- JavaThread* thread, address* stub) {
- if (code == FPE_INTDIV || code == FPE_FLTDIV) {
- *stub =
- SharedRuntime::
- continuation_for_implicit_exception(thread,
- pc,
- SharedRuntime::IMPLICIT_DIVIDE_BY_ZERO);
- return true;
- }
- return false;
-}
-
-inline static bool checkNullPointer(address pc, intptr_t fault,
- JavaThread* thread, address* stub) {
- if (!MacroAssembler::needs_explicit_null_check(fault)) {
- // Determination of interpreter/vtable stub/compiled code null
- // exception
- *stub =
- SharedRuntime::
- continuation_for_implicit_exception(thread, pc,
- SharedRuntime::IMPLICIT_NULL);
- return true;
- }
- return false;
-}
-
-inline static bool checkFastJNIAccess(address pc, address* stub) {
- address addr = JNI_FastGetField::find_slowcase_pc(pc);
- if (addr != (address)-1) {
- *stub = addr;
- return true;
- }
- return false;
-}
-
-inline static bool checkSerializePage(JavaThread* thread, address addr) {
- return os::is_memory_serialize_page(thread, addr);
-}
-
-inline static bool checkZombie(sigcontext* uc, address* pc, address* stub) {
- if (nativeInstruction_at(*pc)->is_zombie()) {
- // zombie method (ld [%g0],%o7 instruction)
- *stub = SharedRuntime::get_handle_wrong_method_stub();
-
- // At the stub it needs to look like a call from the caller of this
- // method (not a call from the segv site).
- *pc = (address)SIG_REGS(uc).u_regs[CON_O7];
- return true;
- }
- return false;
-}
-
-inline static bool checkICMiss(sigcontext* uc, address* pc, address* stub) {
-#ifdef COMPILER2
- if (nativeInstruction_at(*pc)->is_ic_miss_trap()) {
-#ifdef ASSERT
-#ifdef TIERED
- CodeBlob* cb = CodeCache::find_blob_unsafe(pc);
- assert(cb->is_compiled_by_c2(), "Wrong compiler");
-#endif // TIERED
-#endif // ASSERT
- // Inline cache missed and user trap "Tne G0+ST_RESERVED_FOR_USER_0+2" taken.
- *stub = SharedRuntime::get_ic_miss_stub();
- // At the stub it needs to look like a call from the caller of this
- // method (not a call from the segv site).
- *pc = (address)SIG_REGS(uc).u_regs[CON_O7];
- return true;
- }
-#endif // COMPILER2
- return false;
-}
-
-extern "C" int
-JVM_handle_bsd_signal(int sig,
- siginfo_t* info,
- void* ucVoid,
- int abort_if_unrecognized) {
- // in fact this isn't ucontext_t* at all, but struct sigcontext*
- // but Bsd porting layer uses ucontext_t, so to minimize code change
- // we cast as needed
- ucontext_t* ucFake = (ucontext_t*) ucVoid;
- sigcontext* uc = (sigcontext*)ucVoid;
-
- Thread* t = ThreadLocalStorage::get_thread_slow();
-
- SignalHandlerMark shm(t);
-
- // Note: it's not uncommon that JNI code uses signal/sigset to install
- // then restore certain signal handler (e.g. to temporarily block SIGPIPE,
- // or have a SIGILL handler when detecting CPU type). When that happens,
- // JVM_handle_bsd_signal() might be invoked with junk info/ucVoid. To
- // avoid unnecessary crash when libjsig is not preloaded, try handle signals
- // that do not require siginfo/ucontext first.
-
- if (sig == SIGPIPE || sig == SIGXFSZ) {
- // allow chained handler to go first
- if (os::Bsd::chained_handler(sig, info, ucVoid)) {
- return true;
- } else {
- if (PrintMiscellaneous && (WizardMode || Verbose)) {
- char buf[64];
- warning("Ignoring %s - see bugs 4229104 or 646499219",
- os::exception_name(sig, buf, sizeof(buf)));
- }
- return true;
- }
- }
-
- JavaThread* thread = NULL;
- VMThread* vmthread = NULL;
- if (os::Bsd::signal_handlers_are_installed) {
- if (t != NULL ){
- if(t->is_Java_thread()) {
- thread = (JavaThread*)t;
- }
- else if(t->is_VM_thread()){
- vmthread = (VMThread *)t;
- }
- }
- }
-
- // decide if this trap can be handled by a stub
- address stub = NULL;
- address pc = NULL;
- address npc = NULL;
-
- //%note os_trap_1
- if (info != NULL && uc != NULL && thread != NULL) {
- pc = address(SIG_PC(uc));
- npc = address(SIG_NPC(uc));
-
- // Check to see if we caught the safepoint code in the
- // process of write protecting the memory serialization page.
- // It write enables the page immediately after protecting it
- // so we can just return to retry the write.
- if ((sig == SIGSEGV) && checkSerializePage(thread, (address)info->si_addr)) {
- // Block current thread until the memory serialize page permission restored.
- os::block_on_serialize_page_trap();
- return 1;
- }
-
- if (checkPrefetch(uc, pc)) {
- return 1;
- }
-
- // Handle ALL stack overflow variations here
- if (sig == SIGSEGV) {
- if (checkOverflow(uc, pc, (address)info->si_addr, thread, &stub)) {
- return 1;
- }
- }
-
- if (sig == SIGBUS &&
- thread->thread_state() == _thread_in_vm &&
- thread->doing_unsafe_access()) {
- stub = StubRoutines::handler_for_unsafe_access();
- }
-
- if (thread->thread_state() == _thread_in_Java) {
- do {
- // Java thread running in Java code => find exception handler if any
- // a fault inside compiled code, the interpreter, or a stub
-
- if ((sig == SIGSEGV) && checkPollingPage(pc, (address)info->si_addr, &stub)) {
- break;
- }
-
- if ((sig == SIGBUS) && checkByteBuffer(pc, &stub)) {
- break;
- }
-
- if ((sig == SIGSEGV || sig == SIGBUS) &&
- checkVerifyOops(pc, (address)info->si_addr, &stub)) {
- break;
- }
-
- if ((sig == SIGSEGV) && checkZombie(uc, &pc, &stub)) {
- break;
- }
-
- if ((sig == SIGILL) && checkICMiss(uc, &pc, &stub)) {
- break;
- }
-
- if ((sig == SIGFPE) && checkFPFault(pc, info->si_code, thread, &stub)) {
- break;
- }
-
- if ((sig == SIGSEGV) &&
- checkNullPointer(pc, (intptr_t)info->si_addr, thread, &stub)) {
- break;
- }
- } while (0);
-
- // jni_fast_Get<Primitive>Field can trap at certain pc's if a GC kicks in
- // and the heap gets shrunk before the field access.
- if ((sig == SIGSEGV) || (sig == SIGBUS)) {
- checkFastJNIAccess(pc, &stub);
- }
- }
-
- if (stub != NULL) {
- // save all thread context in case we need to restore it
- thread->set_saved_exception_pc(pc);
- thread->set_saved_exception_npc(npc);
- set_cont_address(uc, stub);
- return true;
- }
- }
-
- // signal-chaining
- if (os::Bsd::chained_handler(sig, info, ucVoid)) {
- return true;
- }
-
- if (!abort_if_unrecognized) {
- // caller wants another chance, so give it to him
- return false;
- }
-
- if (pc == NULL && uc != NULL) {
- pc = os::Bsd::ucontext_get_pc((ucontext_t*)uc);
- }
-
- // unmask current signal
- sigset_t newset;
- sigemptyset(&newset);
- sigaddset(&newset, sig);
- sigprocmask(SIG_UNBLOCK, &newset, NULL);
-
- VMError err(t, sig, pc, info, ucVoid);
- err.report_and_die();
-
- ShouldNotReachHere();
-}
-
-void os::Bsd::init_thread_fpu_state(void) {
- // Nothing to do
-}
-
-int os::Bsd::get_fpu_control_word() {
- return 0;
-}
-
-void os::Bsd::set_fpu_control_word(int fpu) {
- // nothing
-}
-
-bool os::is_allocatable(size_t bytes) {
-#ifdef _LP64
- return true;
-#else
- if (bytes < 2 * G) {
- return true;
- }
-
- char* addr = reserve_memory(bytes, NULL);
-
- if (addr != NULL) {
- release_memory(addr, bytes);
- }
-
- return addr != NULL;
-#endif // _LP64
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// thread stack
-
-size_t os::Bsd::min_stack_allowed = 128 * K;
-
-// pthread on Ubuntu is always in floating stack mode
-bool os::Bsd::supports_variable_stack_size() { return true; }
-
-// return default stack size for thr_type
-size_t os::Bsd::default_stack_size(os::ThreadType thr_type) {
- // default stack size (compiler thread needs larger stack)
- size_t s = (thr_type == os::compiler_thread ? 4 * M : 1 * M);
- return s;
-}
-
-size_t os::Bsd::default_guard_size(os::ThreadType thr_type) {
- // Creating guard page is very expensive. Java thread has HotSpot
- // guard page, only enable glibc guard page for non-Java threads.
- return (thr_type == java_thread ? 0 : page_size());
-}
--- ./hotspot/src/os_cpu/bsd_sparc/vm/os_bsd_sparc.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/os_bsd_sparc.hpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1999, 2009, 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.
- *
- */
-
- //
- // NOTE: we are back in class os here, not Bsd
- //
- static jint (*atomic_xchg_func) (jint, volatile jint*);
- static jint (*atomic_cmpxchg_func) (jint, volatile jint*, jint);
- static jlong (*atomic_cmpxchg_long_func)(jlong, volatile jlong*, jlong);
- static jint (*atomic_add_func) (jint, volatile jint*);
-
- static jint atomic_xchg_bootstrap (jint, volatile jint*);
- static jint atomic_cmpxchg_bootstrap (jint, volatile jint*, jint);
- static jlong atomic_cmpxchg_long_bootstrap(jlong, volatile jlong*, jlong);
- static jint atomic_add_bootstrap (jint, volatile jint*);
-
- static void setup_fpu() {}
-
- static bool is_allocatable(size_t bytes);
-
- // Used to register dynamic code cache area with the OS
- // Note: Currently only used in 64 bit Windows implementations
- static bool register_code_area(char *low, char *high) { return true; }
--- ./hotspot/src/os_cpu/bsd_sparc/vm/prefetch_bsd_sparc.inline.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/prefetch_bsd_sparc.inline.hpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- *
- * 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.
- *
- */
-
-#if defined(COMPILER2) || defined(_LP64)
-
-inline void Prefetch::read(void *loc, intx interval) {
- __asm__ volatile("prefetch [%0+%1], 0" : : "r" (loc), "r" (interval) : "memory" );
-}
-
-inline void Prefetch::write(void *loc, intx interval) {
- __asm__ volatile("prefetch [%0+%1], 2" : : "r" (loc), "r" (interval) : "memory" );
-}
-
-#else
-
-inline void Prefetch::read (void *loc, intx interval) {}
-inline void Prefetch::write(void *loc, intx interval) {}
-
-#endif
--- ./hotspot/src/os_cpu/bsd_sparc/vm/threadLS_bsd_sparc.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/threadLS_bsd_sparc.cpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- *
- * 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 "incls/_precompiled.incl"
-#include "incls/_threadLS_bsd_sparc.cpp.incl"
-
-void ThreadLocalStorage::generate_code_for_get_thread() {
-}
-
-void ThreadLocalStorage::pd_init() {
- // Nothing to do
-}
-
-void ThreadLocalStorage::pd_set_thread(Thread* thread) {
- os::thread_local_storage_at_put(ThreadLocalStorage::thread_index(), thread);
-}
--- ./hotspot/src/os_cpu/bsd_sparc/vm/threadLS_bsd_sparc.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/threadLS_bsd_sparc.hpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- *
- * 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.
- *
- */
-
-public:
- static Thread* thread() {
- return (Thread*) os::thread_local_storage_at(thread_index());
- }
--- ./hotspot/src/os_cpu/bsd_sparc/vm/thread_bsd_sparc.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/thread_bsd_sparc.cpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- *
- * 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 "incls/_precompiled.incl"
-#include "incls/_thread_bsd_sparc.cpp.incl"
-
-// For Forte Analyzer AsyncGetCallTrace profiling support - thread is
-// currently interrupted by SIGPROF
-bool JavaThread::pd_get_top_frame_for_signal_handler(frame* fr_addr,
- void* ucontext,
- bool isInJava) {
- assert(Thread::current() == this, "caller must be current thread");
- assert(this->is_Java_thread(), "must be JavaThread");
-
- JavaThread* jt = (JavaThread *)this;
-
- if (!isInJava) {
- // make_walkable flushes register windows and grabs last_Java_pc
- // which can not be done if the ucontext sp matches last_Java_sp
- // stack walking utilities assume last_Java_pc set if marked flushed
- jt->frame_anchor()->make_walkable(jt);
- }
-
- // If we have a walkable last_Java_frame, then we should use it
- // even if isInJava == true. It should be more reliable than
- // ucontext info.
- if (jt->has_last_Java_frame() && jt->frame_anchor()->walkable()) {
- *fr_addr = jt->pd_last_frame();
- return true;
- }
-
- ucontext_t* uc = (ucontext_t*) ucontext;
-
- // At this point, we don't have a walkable last_Java_frame, so
- // we try to glean some information out of the ucontext.
- intptr_t* ret_sp;
- ExtendedPC addr =
- os::fetch_frame_from_context(uc, &ret_sp,
- NULL /* ret_fp only used on X86 */);
- if (addr.pc() == NULL || ret_sp == NULL) {
- // ucontext wasn't useful
- return false;
- }
-
- // we were running Java code when SIGPROF came in
- if (isInJava) {
- // If we have a last_Java_sp, then the SIGPROF signal caught us
- // right when we were transitioning from _thread_in_Java to a new
- // JavaThreadState. We use last_Java_sp instead of the sp from
- // the ucontext since it should be more reliable.
- if (jt->has_last_Java_frame()) {
- ret_sp = jt->last_Java_sp();
- }
- // Implied else: we don't have a last_Java_sp so we use what we
- // got from the ucontext.
-
- frame ret_frame(ret_sp, frame::unpatchable, addr.pc());
- if (!ret_frame.safe_for_sender(jt)) {
- // nothing else to try if the frame isn't good
- return false;
- }
- *fr_addr = ret_frame;
- return true;
- }
-
- // At this point, we know we weren't running Java code. We might
- // have a last_Java_sp, but we don't have a walkable frame.
- // However, we might still be able to construct something useful
- // if the thread was running native code.
- if (jt->has_last_Java_frame()) {
- assert(!jt->frame_anchor()->walkable(), "case covered above");
-
- if (jt->thread_state() == _thread_in_native) {
- frame ret_frame(jt->last_Java_sp(), frame::unpatchable, addr.pc());
- if (!ret_frame.safe_for_sender(jt)) {
- // nothing else to try if the frame isn't good
- return false;
- }
- *fr_addr = ret_frame;
- return true;
- }
- }
-
- // nothing else to try
- return false;
-}
-
-void JavaThread::cache_global_variables() { }
-
--- ./hotspot/src/os_cpu/bsd_sparc/vm/thread_bsd_sparc.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/thread_bsd_sparc.hpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- *
- * 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.
- *
- */
-
-private:
-
- void pd_initialize() {
- _anchor.clear();
- _base_of_stack_pointer = NULL;
- }
-
- frame pd_last_frame() {
- assert(has_last_Java_frame(), "must have last_Java_sp() when suspended");
- assert(_anchor.walkable(), "thread has not dumped its register windows yet");
-
- assert(_anchor.last_Java_pc() != NULL, "Ack no pc!");
- return frame(last_Java_sp(), frame::unpatchable, _anchor.last_Java_pc());
- }
-
- // Sometimes the trap handler needs to record both PC and NPC.
- // This is a SPARC-specific companion to Thread::set_saved_exception_pc.
- address _saved_exception_npc;
-
- // In polling_page_safepoint_handler_blob(s) we have to tail call other
- // blobs without blowing any registers. A tail call requires some
- // register to jump with and we can't blow any registers, so it must
- // be restored in the delay slot. 'restore' cannot be used as it
- // will chop the heads off of 64-bit %o registers in the 32-bit
- // build. Instead we reload the registers using G2_thread and this
- // location. Must be 64bits in the 32-bit LION build.
- jdouble _o_reg_temps[6];
-
- // a stack pointer older than any java frame stack pointer. It is
- // used to validate stack pointers in frame::next_younger_sp (it
- // provides the upper bound in the range check). This is necessary
- // on Solaris/SPARC since the ucontext passed to a signal handler is
- // sometimes corrupt and we need a way to check the extracted sp.
- intptr_t* _base_of_stack_pointer;
-
-public:
-
- static int o_reg_temps_offset_in_bytes() { return offset_of(JavaThread, _o_reg_temps); }
-
-#ifndef _LP64
- address o_reg_temps(int i) { return (address)&_o_reg_temps[i]; }
-#endif
-
- static int saved_exception_npc_offset_in_bytes() { return offset_of(JavaThread,_saved_exception_npc); }
-
- address saved_exception_npc() { return _saved_exception_npc; }
- void set_saved_exception_npc(address a) { _saved_exception_npc = a; }
-
-
-public:
-
- intptr_t* base_of_stack_pointer() { return _base_of_stack_pointer; }
-
- void set_base_of_stack_pointer(intptr_t* base_sp) {
- _base_of_stack_pointer = base_sp;
- }
-
- void record_base_of_stack_pointer() {
- intptr_t *sp = (intptr_t *)(((intptr_t)StubRoutines::Sparc::flush_callers_register_windows_func()()));
- intptr_t *ysp;
- while((ysp = (intptr_t*)sp[FP->sp_offset_in_saved_window()]) != NULL) {
- sp = (intptr_t *)((intptr_t)ysp + STACK_BIAS);
- }
- _base_of_stack_pointer = sp;
- }
-
- bool pd_get_top_frame_for_signal_handler(frame* fr_addr, void* ucontext,
- bool isInJava);
-
- // These routines are only used on cpu architectures that
- // have separate register stacks (Itanium).
- static bool register_stack_overflow() { return false; }
- static void enable_register_stack_guard() {}
- static void disable_register_stack_guard() {}
--- ./hotspot/src/os_cpu/bsd_sparc/vm/vmStructs_bsd_sparc.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/vmStructs_bsd_sparc.hpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- *
- * 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.
- *
- */
-
-// These are the OS and CPU-specific fields, types and integer
-// constants required by the Serviceability Agent. This file is
-// referenced by vmStructs.cpp.
-
-#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field, last_entry) \
- \
- /******************************/ \
- /* Threads (NOTE: incomplete) */ \
- /******************************/ \
- \
- nonstatic_field(JavaThread, _base_of_stack_pointer, intptr_t*) \
- nonstatic_field(OSThread, _thread_id, pid_t) \
- nonstatic_field(OSThread, _pthread_id, pthread_t) \
- /* This must be the last entry, and must be present */ \
- last_entry()
-
-
-#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type, last_entry) \
- \
- /**********************/ \
- /* POSIX Thread IDs */ \
- /**********************/ \
- \
- declare_integer_type(pid_t) \
- declare_unsigned_integer_type(pthread_t) \
- \
- /* This must be the last entry, and must be present */ \
- last_entry()
-
-
-#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant, last_entry) \
- \
- /************************/ \
- /* JavaThread constants */ \
- /************************/ \
- \
- declare_constant(JavaFrameAnchor::flushed) \
- \
- /* This must be the last entry, and must be present */ \
- last_entry()
-
-#define VM_LONG_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant, last_entry) \
- \
- /* This must be the last entry, and must be present */ \
- last_entry()
--- ./hotspot/src/os_cpu/bsd_sparc/vm/vm_version_bsd_sparc.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_sparc/vm/vm_version_bsd_sparc.cpp 1969-12-31 16:00:00.000000000 -0800
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- *
- * 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 "incls/_precompiled.incl"
-# include "incls/_vm_version_bsd_sparc.cpp.incl"
-
-static bool detect_niagara() {
- char cpu[128];
- bool rv = false;
-
- FILE* fp = fopen("/proc/cpuinfo", "r");
- if (fp == NULL) {
- return rv;
- }
-
- while (!feof(fp)) {
- if (fscanf(fp, "cpu\t\t: %100[^\n]", &cpu) == 1) {
- if (strstr(cpu, "Niagara") != NULL) {
- rv = true;
- }
- break;
- }
- }
-
- fclose(fp);
-
- return rv;
-}
-
-int VM_Version::platform_features(int features) {
- // Default to generic v9
- features = generic_v9_m;
-
- if (detect_niagara()) {
- NOT_PRODUCT(if (PrintMiscellaneous && Verbose) tty->print_cr("Detected Bsd on Niagara");)
- features = niagara1_m;
- }
-
- return features;
-}
--- ./hotspot/src/os_cpu/bsd_x86/vm/bsd_x86_32.s 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_x86/vm/bsd_x86_32.s 2010-07-24 14:30:52.000000000 -0700
@@ -21,6 +21,17 @@
# questions.
#
+
+#ifdef __APPLE__
+# Darwin uses _ prefixed global symbols
+#define SYMBOL(s) _ ## s
+#define ELF_TYPE(name, description)
+#else
+#define SYMBOL(s) s
+#define ELF_TYPE(name, description) .type name,description
+#endif
+
+ .globl SYMBOL(fixcw)
# NOTE WELL! The _Copy functions are called directly
# from server-compiler-generated code via CallLeafNoFP,
@@ -28,41 +39,61 @@
# point or use it in the same manner as does the server
# compiler.
- .globl _Copy_conjoint_bytes
- .globl _Copy_arrayof_conjoint_bytes
- .globl _Copy_conjoint_jshorts_atomic
- .globl _Copy_arrayof_conjoint_jshorts
- .globl _Copy_conjoint_jints_atomic
- .globl _Copy_arrayof_conjoint_jints
- .globl _Copy_conjoint_jlongs_atomic
- .globl _mmx_Copy_arrayof_conjoint_jshorts
+ .globl SYMBOL(_Copy_conjoint_bytes)
+ .globl SYMBOL(_Copy_arrayof_conjoint_bytes)
+ .globl SYMBOL(_Copy_conjoint_jshorts_atomic)
+ .globl SYMBOL(_Copy_arrayof_conjoint_jshorts)
+ .globl SYMBOL(_Copy_conjoint_jints_atomic)
+ .globl SYMBOL(_Copy_arrayof_conjoint_jints)
+ .globl SYMBOL(_Copy_conjoint_jlongs_atomic)
+ .globl SYMBOL(_mmx_Copy_arrayof_conjoint_jshorts)
- .globl _Atomic_cmpxchg_long
+ .globl SYMBOL(_Atomic_cmpxchg_long)
.text
- .globl SafeFetch32, Fetch32PFI, Fetch32Resume
- .globl SafeFetchN
+# Support for void os::Solaris::init_thread_fpu_state() in os_solaris_i486.cpp
+# Set fpu to 53 bit precision. This happens too early to use a stub.
+# ported from solaris_x86_32.s
+#ifdef __APPLE__
+ .align 4
+#else
+ .align 16
+#endif
+SYMBOL(fixcw):
+ pushl $0x27f
+ fldcw 0(%esp)
+ popl %eax
+ ret
+
+#ifdef __APPLE__
+ .align 4
+#else
+ .align 16
+#endif
+
+ .globl SYMBOL(SafeFetch32), SYMBOL(Fetch32PFI), SYMBOL(Fetch32Resume)
+ .globl SYMBOL(SafeFetchN)
## TODO: avoid exposing Fetch32PFI and Fetch32Resume.
## Instead, the signal handler would call a new SafeFetchTriage(FaultingEIP)
## routine to vet the address. If the address is the faulting LD then
## SafeFetchTriage() would return the resume-at EIP, otherwise null.
- .type SafeFetch32,@function
+ ELF_TYPE(SafeFetch32,@function)
.p2align 4,,15
-SafeFetch32:
-SafeFetchN:
+SYMBOL(SafeFetch32):
+SYMBOL(SafeFetchN):
movl 0x8(%esp), %eax
movl 0x4(%esp), %ecx
-Fetch32PFI:
+SYMBOL(Fetch32PFI):
movl (%ecx), %eax
-Fetch32Resume:
+SYMBOL(Fetch32Resume):
ret
- .globl SpinPause
- .type SpinPause,@function
+ .globl SYMBOL(SpinPause)
+ ELF_TYPE(SpinPause,@function)
.p2align 4,,15
-SpinPause:
+SYMBOL(SpinPause):
rep
nop
movl $1, %eax
@@ -72,8 +103,8 @@
# void* to,
# size_t count)
.p2align 4,,15
- .type _Copy_conjoint_bytes,@function
-_Copy_conjoint_bytes:
+ ELF_TYPE(_Copy_conjoint_bytes,@function)
+SYMBOL(_Copy_conjoint_bytes):
pushl %esi
movl 4+12(%esp),%ecx # count
pushl %edi
@@ -180,8 +211,8 @@
#
# Same as _Copy_conjoint_bytes, except no source alignment check.
.p2align 4,,15
- .type _Copy_arrayof_conjoint_bytes,@function
-_Copy_arrayof_conjoint_bytes:
+ ELF_TYPE(_Copy_arrayof_conjoint_bytes,@function)
+SYMBOL(_Copy_arrayof_conjoint_bytes):
pushl %esi
movl 4+12(%esp),%ecx # count
pushl %edi
@@ -268,8 +299,8 @@
# void* to,
# size_t count)
.p2align 4,,15
- .type _Copy_conjoint_jshorts_atomic,@function
-_Copy_conjoint_jshorts_atomic:
+ ELF_TYPE(_Copy_conjoint_jshorts_atomic,@function)
+SYMBOL(_Copy_conjoint_jshorts_atomic):
pushl %esi
movl 4+12(%esp),%ecx # count
pushl %edi
@@ -355,8 +386,8 @@
# void* to,
# size_t count)
.p2align 4,,15
- .type _Copy_arrayof_conjoint_jshorts,@function
-_Copy_arrayof_conjoint_jshorts:
+ ELF_TYPE(_Copy_arrayof_conjoint_jshorts,@function)
+SYMBOL(_Copy_arrayof_conjoint_jshorts):
pushl %esi
movl 4+12(%esp),%ecx # count
pushl %edi
@@ -432,10 +463,10 @@
# Equivalent to
# arrayof_conjoint_jints
.p2align 4,,15
- .type _Copy_conjoint_jints_atomic,@function
- .type _Copy_arrayof_conjoint_jints,@function
-_Copy_conjoint_jints_atomic:
-_Copy_arrayof_conjoint_jints:
+ ELF_TYPE(_Copy_conjoint_jints_atomic,@function)
+ ELF_TYPE(_Copy_arrayof_conjoint_jints,@function)
+SYMBOL(_Copy_conjoint_jints_atomic):
+SYMBOL(_Copy_arrayof_conjoint_jints):
pushl %esi
movl 4+12(%esp),%ecx # count
pushl %edi
@@ -497,7 +528,7 @@
#
# count treated as signed
#
- # if (from > to) {
+ # // if (from > to) {
# while (--count >= 0) {
# *to++ = *from++;
# }
@@ -507,8 +538,8 @@
# }
# }
.p2align 4,,15
- .type _Copy_conjoint_jlongs_atomic,@function
-_Copy_conjoint_jlongs_atomic:
+ ELF_TYPE(_Copy_conjoint_jlongs_atomic,@function)
+SYMBOL(_Copy_conjoint_jlongs_atomic):
movl 4+8(%esp),%ecx # count
movl 4+0(%esp),%eax # from
movl 4+4(%esp),%edx # to
@@ -536,8 +567,8 @@
# void* to,
# size_t count)
.p2align 4,,15
- .type _mmx_Copy_arrayof_conjoint_jshorts,@function
-_mmx_Copy_arrayof_conjoint_jshorts:
+ ELF_TYPE(_mmx_Copy_arrayof_conjoint_jshorts,@function)
+SYMBOL(_mmx_Copy_arrayof_conjoint_jshorts):
pushl %esi
movl 4+12(%esp),%ecx
pushl %edi
@@ -635,8 +666,8 @@
# bool is_MP)
#
.p2align 4,,15
- .type _Atomic_cmpxchg_long,@function
-_Atomic_cmpxchg_long:
+ ELF_TYPE(_Atomic_cmpxchg_long,@function)
+SYMBOL(_Atomic_cmpxchg_long):
# 8(%esp) : return PC
pushl %ebx # 4(%esp) : old %ebx
pushl %edi # 0(%esp) : old %edi
--- ./hotspot/src/os_cpu/bsd_x86/vm/bsd_x86_64.s 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_x86/vm/bsd_x86_64.s 2010-07-04 09:32:22.000000000 -0700
@@ -21,6 +21,14 @@
# questions.
#
+#ifdef __APPLE__
+# Darwin uses _ prefixed global symbols
+#define SYMBOL(s) _ ## s
+#define ELF_TYPE(name, description)
+#else
+#define SYMBOL(s) s
+#define ELF_TYPE(name, description) .type name,description
+#endif
# NOTE WELL! The _Copy functions are called directly
# from server-compiler-generated code via CallLeafNoFP,
@@ -28,42 +36,54 @@
# point or use it in the same manner as does the server
# compiler.
- .globl _Copy_arrayof_conjoint_bytes
- .globl _Copy_arrayof_conjoint_jshorts
- .globl _Copy_conjoint_jshorts_atomic
- .globl _Copy_arrayof_conjoint_jints
- .globl _Copy_conjoint_jints_atomic
- .globl _Copy_arrayof_conjoint_jlongs
- .globl _Copy_conjoint_jlongs_atomic
+ .globl SYMBOL(_Copy_arrayof_conjoint_bytes)
+ .globl SYMBOL(_Copy_arrayof_conjoint_jshorts)
+ .globl SYMBOL(_Copy_conjoint_jshorts_atomic)
+ .globl SYMBOL(_Copy_arrayof_conjoint_jints)
+ .globl SYMBOL(_Copy_conjoint_jints_atomic)
+ .globl SYMBOL(_Copy_arrayof_conjoint_jlongs)
+ .globl SYMBOL(_Copy_conjoint_jlongs_atomic)
.text
- .globl SafeFetch32, Fetch32PFI, Fetch32Resume
+ .globl SYMBOL(SafeFetch32), SYMBOL(Fetch32PFI), SYMBOL(Fetch32Resume)
+#ifdef __APPLE__
+ .align 4
+#else
.align 16
- .type SafeFetch32,@function
+#endif
+ ELF_TYPE(SafeFetch32,@function)
// Prototype: int SafeFetch32 (int * Adr, int ErrValue)
-SafeFetch32:
+SYMBOL(SafeFetch32):
movl %esi, %eax
-Fetch32PFI:
+SYMBOL(Fetch32PFI):
movl (%rdi), %eax
-Fetch32Resume:
+SYMBOL(Fetch32Resume):
ret
- .globl SafeFetchN, FetchNPFI, FetchNResume
+ .globl SYMBOL(SafeFetchN), SYMBOL(FetchNPFI), SYMBOL(FetchNResume)
+#ifdef __APPLE__
+ .align 4
+#else
.align 16
- .type SafeFetchN,@function
+#endif
+ ELF_TYPE(SafeFetchN,@function)
// Prototype: intptr_t SafeFetchN (intptr_t * Adr, intptr_t ErrValue)
-SafeFetchN:
+SYMBOL(SafeFetchN):
movq %rsi, %rax
-FetchNPFI:
+SYMBOL(FetchNPFI):
movq (%rdi), %rax
-FetchNResume:
+SYMBOL(FetchNResume):
ret
- .globl SpinPause
- .align 16
- .type SpinPause,@function
-SpinPause:
+ .globl SYMBOL(SpinPause)
+#ifdef __APPLE__
+ .align 4
+#else
+ .align 16
+#endif
+ ELF_TYPE(SpinPause,@function)
+SYMBOL(SpinPause):
rep
nop
movq $1, %rax
@@ -77,8 +97,8 @@
# rdx - count, treated as ssize_t
#
.p2align 4,,15
- .type _Copy_arrayof_conjoint_bytes,@function
-_Copy_arrayof_conjoint_bytes:
+ ELF_TYPE(_Copy_arrayof_conjoint_bytes,@function)
+SYMBOL(_Copy_arrayof_conjoint_bytes):
movq %rdx,%r8 # byte count
shrq $3,%rdx # qword count
cmpq %rdi,%rsi
@@ -179,10 +199,10 @@
# rdx - count, treated as ssize_t
#
.p2align 4,,15
- .type _Copy_arrayof_conjoint_jshorts,@function
- .type _Copy_conjoint_jshorts_atomic,@function
-_Copy_arrayof_conjoint_jshorts:
-_Copy_conjoint_jshorts_atomic:
+ ELF_TYPE(_Copy_arrayof_conjoint_jshorts,@function)
+ ELF_TYPE(_Copy_conjoint_jshorts_atomic,@function)
+SYMBOL(_Copy_arrayof_conjoint_jshorts):
+SYMBOL(_Copy_conjoint_jshorts_atomic):
movq %rdx,%r8 # word count
shrq $2,%rdx # qword count
cmpq %rdi,%rsi
@@ -269,10 +289,10 @@
# rdx - count, treated as ssize_t
#
.p2align 4,,15
- .type _Copy_arrayof_conjoint_jints,@function
- .type _Copy_conjoint_jints_atomic,@function
-_Copy_arrayof_conjoint_jints:
-_Copy_conjoint_jints_atomic:
+ ELF_TYPE(_Copy_arrayof_conjoint_jints,@function)
+ ELF_TYPE(_Copy_conjoint_jints_atomic,@function)
+SYMBOL(_Copy_arrayof_conjoint_jints):
+SYMBOL(_Copy_conjoint_jints_atomic):
movq %rdx,%r8 # dword count
shrq %rdx # qword count
cmpq %rdi,%rsi
@@ -348,10 +368,10 @@
# rdx - count, treated as ssize_t
#
.p2align 4,,15
- .type _Copy_arrayof_conjoint_jlongs,@function
- .type _Copy_conjoint_jlongs_atomic,@function
-_Copy_arrayof_conjoint_jlongs:
-_Copy_conjoint_jlongs_atomic:
+ ELF_TYPE(_Copy_arrayof_conjoint_jlongs,@function)
+ ELF_TYPE(_Copy_conjoint_jlongs_atomic,@function)
+SYMBOL(_Copy_arrayof_conjoint_jlongs):
+SYMBOL(_Copy_conjoint_jlongs_atomic):
cmpq %rdi,%rsi
leaq -8(%rdi,%rdx,8),%rax # from + count*8 - 8
jbe acl_CopyRight
--- ./hotspot/src/os_cpu/bsd_x86/vm/bytes_bsd_x86.inline.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_x86/vm/bytes_bsd_x86.inline.hpp 2010-07-04 09:32:22.000000000 -0700
@@ -22,7 +22,33 @@
*
*/
+#ifndef _ALLBSD_SOURCE
#include <byteswap.h>
+#endif
+
+#ifdef __APPLE__
+#include <libkern/OSByteOrder.h>
+#endif
+
+#if defined(AMD64)
+# if defined(__APPLE__)
+# define bswap_16(x) OSSwapInt16(x)
+# define bswap_32(x) OSSwapInt32(x)
+# define bswap_64(x) OSSwapInt64(x)
+# elif defined(__OpenBSD__)
+# define bswap_16(x) swap16(x)
+# define bswap_32(x) swap32(x)
+# define bswap_64(x) swap64(x)
+# elif defined(__NetBSD__)
+# define bswap_16(x) bswap16(x)
+# define bswap_32(x) bswap32(x)
+# define bswap_64(x) bswap64(x)
+# else
+# define bswap_16(x) __bswap16(x)
+# define bswap_32(x) __bswap32(x)
+# define bswap_64(x) __bswap64(x)
+# endif
+#endif
// Efficient swapping of data bytes from Java byte
// ordering to native byte ordering and vice versa.
--- ./hotspot/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp 2010-07-04 09:32:22.000000000 -0700
@@ -22,9 +22,10 @@
*
*/
+//
// Sets the default values for platform dependent flags used by the runtime system.
// (see globals.hpp)
-
+//
define_pd_global(bool, DontYieldALot, false);
#ifdef AMD64
define_pd_global(intx, ThreadStackSize, 1024); // 0 => use system default
@@ -38,10 +39,11 @@
#endif // AMD64
define_pd_global(intx, CompilerThreadStackSize, 0);
+define_pd_global(intx, SurvivorRatio, 8);
-define_pd_global(uintx,JVMInvokeMethodSlack, 8192);
+define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
// Only used on 64 bit platforms
-define_pd_global(uintx,HeapBaseMinAddress, 2*G);
+define_pd_global(uintx, HeapBaseMinAddress, 2*G);
// Only used on 64 bit Windows platforms
define_pd_global(bool, UseVectoredExceptions, false);
--- ./hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp 2010-10-31 15:11:36.000000000 -0700
@@ -44,23 +44,202 @@
# include <sys/wait.h>
# include <pwd.h>
# include <poll.h>
+#ifndef __OpenBSD__
# include <ucontext.h>
-# include <fpu_control.h>
+#endif
+
+#if defined(_ALLBSD_SOURCE) && !defined(__APPLE__) && !defined(__NetBSD__)
+# include <pthread_np.h>
+#endif
#ifdef AMD64
-#define REG_SP REG_RSP
-#define REG_PC REG_RIP
-#define REG_FP REG_RBP
#define SPELL_REG_SP "rsp"
#define SPELL_REG_FP "rbp"
#else
-#define REG_SP REG_UESP
-#define REG_PC REG_EIP
-#define REG_FP REG_EBP
#define SPELL_REG_SP "esp"
#define SPELL_REG_FP "ebp"
#endif // AMD64
+#ifdef __FreeBSD__
+# define context_trapno uc_mcontext.mc_trapno
+# ifdef AMD64
+# define context_pc uc_mcontext.mc_rip
+# define context_sp uc_mcontext.mc_rsp
+# define context_fp uc_mcontext.mc_rbp
+# define context_rip uc_mcontext.mc_rip
+# define context_rsp uc_mcontext.mc_rsp
+# define context_rbp uc_mcontext.mc_rbp
+# define context_rax uc_mcontext.mc_rax
+# define context_rbx uc_mcontext.mc_rbx
+# define context_rcx uc_mcontext.mc_rcx
+# define context_rdx uc_mcontext.mc_rdx
+# define context_rsi uc_mcontext.mc_rsi
+# define context_rdi uc_mcontext.mc_rdi
+# define context_r8 uc_mcontext.mc_r8
+# define context_r9 uc_mcontext.mc_r9
+# define context_r10 uc_mcontext.mc_r10
+# define context_r11 uc_mcontext.mc_r11
+# define context_r12 uc_mcontext.mc_r12
+# define context_r13 uc_mcontext.mc_r13
+# define context_r14 uc_mcontext.mc_r14
+# define context_r15 uc_mcontext.mc_r15
+# define context_flags uc_mcontext.mc_flags
+# define context_err uc_mcontext.mc_err
+# else
+# define context_pc uc_mcontext.mc_eip
+# define context_sp uc_mcontext.mc_esp
+# define context_fp uc_mcontext.mc_ebp
+# define context_eip uc_mcontext.mc_eip
+# define context_esp uc_mcontext.mc_esp
+# define context_eax uc_mcontext.mc_eax
+# define context_ebx uc_mcontext.mc_ebx
+# define context_ecx uc_mcontext.mc_ecx
+# define context_edx uc_mcontext.mc_edx
+# define context_ebp uc_mcontext.mc_ebp
+# define context_esi uc_mcontext.mc_esi
+# define context_edi uc_mcontext.mc_edi
+# define context_eflags uc_mcontext.mc_eflags
+# define context_trapno uc_mcontext.mc_trapno
+# endif
+#endif
+
+#ifdef __APPLE__
+# if __DARWIN_UNIX03 && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5)
+ // 10.5 UNIX03 member name prefixes
+ #define DU3_PREFIX(s, m) __ ## s.__ ## m
+# else
+ #define DU3_PREFIX(s, m) s ## . ## m
+# endif
+
+# ifdef AMD64
+# define context_pc context_rip
+# define context_sp context_rsp
+# define context_fp context_rbp
+# define context_rip uc_mcontext->DU3_PREFIX(ss,rip)
+# define context_rsp uc_mcontext->DU3_PREFIX(ss,rsp)
+# define context_rax uc_mcontext->DU3_PREFIX(ss,rax)
+# define context_rbx uc_mcontext->DU3_PREFIX(ss,rbx)
+# define context_rcx uc_mcontext->DU3_PREFIX(ss,rcx)
+# define context_rdx uc_mcontext->DU3_PREFIX(ss,rdx)
+# define context_rbp uc_mcontext->DU3_PREFIX(ss,rbp)
+# define context_rsi uc_mcontext->DU3_PREFIX(ss,rsi)
+# define context_rdi uc_mcontext->DU3_PREFIX(ss,rdi)
+# define context_r8 uc_mcontext->DU3_PREFIX(ss,r8)
+# define context_r9 uc_mcontext->DU3_PREFIX(ss,r9)
+# define context_r10 uc_mcontext->DU3_PREFIX(ss,r10)
+# define context_r11 uc_mcontext->DU3_PREFIX(ss,r11)
+# define context_r12 uc_mcontext->DU3_PREFIX(ss,r12)
+# define context_r13 uc_mcontext->DU3_PREFIX(ss,r13)
+# define context_r14 uc_mcontext->DU3_PREFIX(ss,r14)
+# define context_r15 uc_mcontext->DU3_PREFIX(ss,r15)
+# define context_flags uc_mcontext->DU3_PREFIX(ss,rflags)
+# define context_trapno uc_mcontext->DU3_PREFIX(es,trapno)
+# define context_err uc_mcontext->DU3_PREFIX(es,err)
+# else
+# define context_pc context_eip
+# define context_sp context_esp
+# define context_fp context_ebp
+# define context_eip uc_mcontext->DU3_PREFIX(ss,eip)
+# define context_esp uc_mcontext->DU3_PREFIX(ss,esp)
+# define context_eax uc_mcontext->DU3_PREFIX(ss,eax)
+# define context_ebx uc_mcontext->DU3_PREFIX(ss,ebx)
+# define context_ecx uc_mcontext->DU3_PREFIX(ss,ecx)
+# define context_edx uc_mcontext->DU3_PREFIX(ss,edx)
+# define context_ebp uc_mcontext->DU3_PREFIX(ss,ebp)
+# define context_esi uc_mcontext->DU3_PREFIX(ss,esi)
+# define context_edi uc_mcontext->DU3_PREFIX(ss,edi)
+# define context_eflags uc_mcontext->DU3_PREFIX(ss,eflags)
+# define context_trapno uc_mcontext->DU3_PREFIX(es,trapno)
+# endif
+#endif
+
+#ifdef __OpenBSD__
+# define context_trapno sc_trapno
+# ifdef AMD64
+# define context_pc sc_rip
+# define context_sp sc_rsp
+# define context_fp sc_rbp
+# define context_rip sc_rip
+# define context_rsp sc_rsp
+# define context_rbp sc_rbp
+# define context_rax sc_rax
+# define context_rbx sc_rbx
+# define context_rcx sc_rcx
+# define context_rdx sc_rdx
+# define context_rsi sc_rsi
+# define context_rdi sc_rdi
+# define context_r8 sc_r8
+# define context_r9 sc_r9
+# define context_r10 sc_r10
+# define context_r11 sc_r11
+# define context_r12 sc_r12
+# define context_r13 sc_r13
+# define context_r14 sc_r14
+# define context_r15 sc_r15
+# define context_flags sc_rflags
+# define context_err sc_err
+# else
+# define context_pc sc_eip
+# define context_sp sc_esp
+# define context_fp sc_ebp
+# define context_eip sc_eip
+# define context_esp sc_esp
+# define context_eax sc_eax
+# define context_ebx sc_ebx
+# define context_ecx sc_ecx
+# define context_edx sc_edx
+# define context_ebp sc_ebp
+# define context_esi sc_esi
+# define context_edi sc_edi
+# define context_eflags sc_eflags
+# define context_trapno sc_trapno
+# endif
+#endif
+
+#ifdef __NetBSD__
+# define context_trapno uc_mcontext.__gregs[_REG_TRAPNO]
+# ifdef AMD64
+# define __register_t __greg_t
+# define context_pc uc_mcontext.__gregs[_REG_RIP]
+# define context_sp uc_mcontext.__gregs[_REG_URSP]
+# define context_fp uc_mcontext.__gregs[_REG_RBP]
+# define context_rip uc_mcontext.__gregs[_REG_RIP]
+# define context_rsp uc_mcontext.__gregs[_REG_URSP]
+# define context_rax uc_mcontext.__gregs[_REG_RAX]
+# define context_rbx uc_mcontext.__gregs[_REG_RBX]
+# define context_rcx uc_mcontext.__gregs[_REG_RCX]
+# define context_rdx uc_mcontext.__gregs[_REG_RDX]
+# define context_rbp uc_mcontext.__gregs[_REG_RBP]
+# define context_rsi uc_mcontext.__gregs[_REG_RSI]
+# define context_rdi uc_mcontext.__gregs[_REG_RDI]
+# define context_r8 uc_mcontext.__gregs[_REG_R8]
+# define context_r9 uc_mcontext.__gregs[_REG_R9]
+# define context_r10 uc_mcontext.__gregs[_REG_R10]
+# define context_r11 uc_mcontext.__gregs[_REG_R11]
+# define context_r12 uc_mcontext.__gregs[_REG_R12]
+# define context_r13 uc_mcontext.__gregs[_REG_R13]
+# define context_r14 uc_mcontext.__gregs[_REG_R14]
+# define context_r15 uc_mcontext.__gregs[_REG_R15]
+# define context_flags uc_mcontext.__gregs[_REG_RFL]
+# define context_err uc_mcontext.__gregs[_REG_ERR]
+# else
+# define context_pc uc_mcontext.__gregs[_REG_EIP]
+# define context_sp uc_mcontext.__gregs[_REG_UESP]
+# define context_fp uc_mcontext.__gregs[_REG_EBP]
+# define context_eip uc_mcontext.__gregs[_REG_EIP]
+# define context_esp uc_mcontext.__gregs[_REG_UESP]
+# define context_eax uc_mcontext.__gregs[_REG_EAX]
+# define context_ebx uc_mcontext.__gregs[_REG_EBX]
+# define context_ecx uc_mcontext.__gregs[_REG_ECX]
+# define context_edx uc_mcontext.__gregs[_REG_EDX]
+# define context_ebp uc_mcontext.__gregs[_REG_EBP]
+# define context_esi uc_mcontext.__gregs[_REG_ESI]
+# define context_edi uc_mcontext.__gregs[_REG_EDI]
+# define context_eflags uc_mcontext.__gregs[_REG_EFL]
+# define context_trapno uc_mcontext.__gregs[_REG_TRAPNO]
+# endif
+#endif
+
address os::current_stack_pointer() {
#ifdef SPARC_WORKS
register void *esp;
@@ -85,15 +264,15 @@
}
address os::Bsd::ucontext_get_pc(ucontext_t * uc) {
- return (address)uc->uc_mcontext.gregs[REG_PC];
+ return (address)uc->context_pc;
}
intptr_t* os::Bsd::ucontext_get_sp(ucontext_t * uc) {
- return (intptr_t*)uc->uc_mcontext.gregs[REG_SP];
+ return (intptr_t*)uc->context_sp;
}
intptr_t* os::Bsd::ucontext_get_fp(ucontext_t * uc) {
- return (intptr_t*)uc->uc_mcontext.gregs[REG_FP];
+ return (intptr_t*)uc->context_fp;
}
// For Forte Analyzer AsyncGetCallTrace profiling support - thread
@@ -245,18 +424,18 @@
pc = (address) os::Bsd::ucontext_get_pc(uc);
if (pc == (address) Fetch32PFI) {
- uc->uc_mcontext.gregs[REG_PC] = intptr_t(Fetch32Resume) ;
+ uc->context_pc = intptr_t(Fetch32Resume) ;
return 1 ;
}
#ifdef AMD64
if (pc == (address) FetchNPFI) {
- uc->uc_mcontext.gregs[REG_PC] = intptr_t (FetchNResume) ;
+ uc->context_pc = intptr_t (FetchNResume) ;
return 1 ;
}
#endif // AMD64
// Handle ALL stack overflow variations here
- if (sig == SIGSEGV) {
+ if (sig == SIGSEGV || sig == SIGBUS) {
address addr = (address) info->si_addr;
// check if fault address is within thread stack
@@ -278,6 +457,7 @@
// to handle_unexpected_exception way down below.
thread->disable_stack_red_zone();
tty->print_raw_cr("An irrecoverable stack overflow has occurred.");
+#ifndef _ALLBSD_SOURCE
} else {
// Accessing stack address below sp may cause SEGV if current
// thread has MAP_GROWSDOWN stack. This should only happen when
@@ -293,6 +473,7 @@
} else {
fatal("recursive segv. expanding stack.");
}
+#endif
}
}
}
@@ -301,9 +482,16 @@
// Java thread running in Java code => find exception handler if any
// a fault inside compiled code, the interpreter, or a stub
- if (sig == SIGSEGV && os::is_poll_address((address)info->si_addr)) {
+ if ((sig == SIGSEGV || sig == SIGBUS) && os::is_poll_address((address)info->si_addr)) {
stub = SharedRuntime::get_poll_stub(pc);
+#if defined(__APPLE__) && !defined(AMD64)
+ // 32-bit Darwin reports a SIGBUS for nearly all memory access exceptions.
+ // Catching SIGBUS here prevents the implicit SIGBUS NULL check below from
+ // being called, so only do so if the implicit NULL check is not necessary.
+ } else if (sig == SIGBUS && MacroAssembler::needs_explicit_null_check((int)info->si_addr)) {
+#else
} else if (sig == SIGBUS /* && info->si_code == BUS_OBJERR */) {
+#endif
// BugId 4454115: A read from a MappedByteBuffer can fault
// here if the underlying file has been truncated.
// Do not crash the VM in such a case.
@@ -324,6 +512,28 @@
pc,
SharedRuntime::
IMPLICIT_DIVIDE_BY_ZERO);
+#ifdef __APPLE__
+ } else if (sig == SIGFPE && info->si_code == FPE_NOOP) {
+ int op = pc[0];
+
+ // Skip REX
+ if ((pc[0] & 0xf0) == 0x40) {
+ op = pc[1];
+ } else {
+ op = pc[0];
+ }
+
+ // Check for IDIV
+ if (op == 0xF7) {
+ stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime:: IMPLICIT_DIVIDE_BY_ZERO);
+ } else {
+ // TODO: handle more cases if we are using other x86 instructions
+ // that can generate SIGFPE signal.
+ tty->print_cr("unknown opcode 0x%X with SIGFPE.", op);
+ fatal("please update this code.");
+ }
+#endif /* __APPLE__ */
+
#else
if (sig == SIGFPE /* && info->si_code == FPE_INTDIV */) {
// HACK: si_code does not work on bsd 2.2.12-20!!!
@@ -351,7 +561,7 @@
fatal("please update this code.");
}
#endif // AMD64
- } else if (sig == SIGSEGV &&
+ } else if ((sig == SIGSEGV || sig == SIGBUS) &&
!MacroAssembler::needs_explicit_null_check((intptr_t)info->si_addr)) {
// Determination of interpreter/vtable stub/compiled code null exception
stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
@@ -375,7 +585,7 @@
// process of write protecting the memory serialization page.
// It write enables the page immediately after protecting it
// so we can just return to retry the write.
- if ((sig == SIGSEGV) &&
+ if ((sig == SIGSEGV || sig == SIGBUS) &&
os::is_memory_serialize_page(thread, (address) info->si_addr)) {
// Block current thread until the memory serialize page permission restored.
os::block_on_serialize_page_trap();
@@ -396,7 +606,7 @@
// Furthermore, a false-positive should be harmless.
if (UnguardOnExecutionViolation > 0 &&
(sig == SIGSEGV || sig == SIGBUS) &&
- uc->uc_mcontext.gregs[REG_TRAPNO] == trap_page_fault) {
+ uc->context_trapno == trap_page_fault) {
int page_size = os::vm_page_size();
address addr = (address) info->si_addr;
address pc = os::Bsd::ucontext_get_pc(uc);
@@ -466,7 +676,7 @@
// save all thread context in case we need to restore it
if (thread != NULL) thread->set_saved_exception_pc(pc);
- uc->uc_mcontext.gregs[REG_PC] = (greg_t)stub;
+ uc->context_pc = (intptr_t)stub;
return true;
}
@@ -496,13 +706,24 @@
ShouldNotReachHere();
}
+#ifdef _ALLBSD_SOURCE
+// From solaris_i486.s ported to bsd_i486.s
+extern "C" void fixcw();
+#endif
+
void os::Bsd::init_thread_fpu_state(void) {
#ifndef AMD64
+# ifdef _ALLBSD_SOURCE
+ // Set fpu to 53 bit precision. This happens too early to use a stub.
+ fixcw();
+# else
// set fpu to 53 bit precision
set_fpu_control_word(0x27f);
+# endif
#endif // !AMD64
}
+#ifndef _ALLBSD_SOURCE
int os::Bsd::get_fpu_control_word(void) {
#ifdef AMD64
return 0;
@@ -518,11 +739,12 @@
_FPU_SETCW(fpu_control);
#endif // !AMD64
}
+#endif
// Check that the bsd kernel version is 2.4 or higher since earlier
// versions do not support SSE without patches.
bool os::supports_sse() {
-#ifdef AMD64
+#if defined(AMD64) || defined(_ALLBSD_SOURCE)
return true;
#else
struct utsname uts;
@@ -576,6 +798,9 @@
#define GET_GS() ({int gs; __asm__ volatile("movw %%gs, %w0":"=q"(gs)); gs&0xffff;})
#endif
+#ifdef _ALLBSD_SOURCE
+bool os::Bsd::supports_variable_stack_size() { return true; }
+#else
// Test if pthread library can support variable thread stack size. BsdThreads
// in fixed stack mode allocates 2M fixed slot for each thread. BsdThreads
// in floating stack mode and NPTL support variable stack size.
@@ -612,6 +837,7 @@
#endif
}
}
+#endif
#endif // AMD64
// return default stack size for thr_type
@@ -665,6 +891,41 @@
// pthread_attr_getstack()
static void current_stack_region(address * bottom, size_t * size) {
+#ifdef __APPLE__
+ pthread_t self = pthread_self();
+ void *stacktop = pthread_get_stackaddr_np(self);
+ *size = pthread_get_stacksize_np(self);
+ *bottom = (address) stacktop - *size;
+#elif defined(__OpenBSD__)
+ stack_t ss;
+ int rslt = pthread_stackseg_np(pthread_self(), &ss);
+
+ if (rslt != 0)
+ fatal(err_msg("pthread_stackseg_np failed with err = %d", rslt));
+
+ *bottom = (address)((char *)ss.ss_sp - ss.ss_size);
+ *size = ss.ss_size;
+#elif defined(_ALLBSD_SOURCE)
+ pthread_attr_t attr;
+
+ int rslt = pthread_attr_init(&attr);
+
+ // JVM needs to know exact stack location, abort if it fails
+ if (rslt != 0)
+ fatal(err_msg("pthread_attr_init failed with err = %d", rslt));
+
+ rslt = pthread_attr_get_np(pthread_self(), &attr);
+
+ if (rslt != 0)
+ fatal(err_msg("pthread_attr_get_np failed with err = %d", rslt));
+
+ if (pthread_attr_getstackaddr(&attr, (void **)bottom) != 0 ||
+ pthread_attr_getstacksize(&attr, size) != 0) {
+ fatal("Can not locate current stack attributes!");
+ }
+
+ pthread_attr_destroy(&attr);
+#else
if (os::Bsd::is_initial_thread()) {
// initial thread needs special handling because pthread_getattr_np()
// may return bogus value.
@@ -691,6 +952,7 @@
pthread_attr_destroy(&attr);
}
+#endif
assert(os::current_stack_pointer() >= *bottom &&
os::current_stack_pointer() < *bottom + *size, "just checking");
}
@@ -724,34 +986,32 @@
// we can't just iterate through the gregs area
#ifdef AMD64
- st->print( "RAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RAX]);
- st->print(", RBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBX]);
- st->print(", RCX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RCX]);
- st->print(", RDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDX]);
- st->cr();
- st->print( "RSP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RSP]);
- st->print(", RBP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBP]);
- st->print(", RSI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RSI]);
- st->print(", RDI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDI]);
- st->cr();
- st->print( "R8 =" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R8]);
- st->print(", R9 =" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R9]);
- st->print(", R10=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R10]);
- st->print(", R11=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R11]);
- st->cr();
- st->print( "R12=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R12]);
- st->print(", R13=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R13]);
- st->print(", R14=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R14]);
- st->print(", R15=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R15]);
- st->cr();
- st->print( "RIP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RIP]);
- st->print(", EFL=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EFL]);
- st->print(", CSGSFS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_CSGSFS]);
- st->print(", ERR=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_ERR]);
- st->cr();
- st->print(" TRAPNO=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_TRAPNO]);
-
+ st->print( "RAX=" INTPTR_FORMAT, uc->context_rax);
+ st->print(", RBX=" INTPTR_FORMAT, uc->context_rbx);
+ st->print(", RCX=" INTPTR_FORMAT, uc->context_rcx);
+ st->print(", RDX=" INTPTR_FORMAT, uc->context_rdx);
+ st->cr();
+ st->print( "RSP=" INTPTR_FORMAT, uc->context_rsp);
+ st->print(", RBP=" INTPTR_FORMAT, uc->context_rbp);
+ st->print(", RSI=" INTPTR_FORMAT, uc->context_rsi);
+ st->print(", RDI=" INTPTR_FORMAT, uc->context_rdi);
+ st->cr();
+ st->print( "R8 =" INTPTR_FORMAT, uc->context_r8);
+ st->print(", R9 =" INTPTR_FORMAT, uc->context_r9);
+ st->print(", R10=" INTPTR_FORMAT, uc->context_r10);
+ st->print(", R11=" INTPTR_FORMAT, uc->context_r11);
+ st->cr();
+ st->print( "R12=" INTPTR_FORMAT, uc->context_r12);
+ st->print(", R13=" INTPTR_FORMAT, uc->context_r13);
+ st->print(", R14=" INTPTR_FORMAT, uc->context_r14);
+ st->print(", R15=" INTPTR_FORMAT, uc->context_r15);
+ st->cr();
+ st->print( "RIP=" INTPTR_FORMAT, uc->context_rip);
+ st->print(", EFL=" INTPTR_FORMAT, uc->context_flags);
+ st->print(", ERR=" INTPTR_FORMAT, uc->context_err);
st->cr();
+ st->print(" TRAPNO=" INTPTR_FORMAT, uc->context_trapno);
+ st->cr();
st->cr();
st->print_cr("Register to memory mapping:");
@@ -759,68 +1019,67 @@
// this is only for the "general purpose" registers
- st->print_cr("RAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RAX]);
- print_location(st, uc->uc_mcontext.gregs[REG_RAX]);
+ st->print_cr("RAX=" INTPTR_FORMAT, uc->context_rax);
+ print_location(st, uc->context_rax);
st->cr();
- st->print_cr("RBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBX]);
- print_location(st, uc->uc_mcontext.gregs[REG_RBX]);
+ st->print_cr("RBX=" INTPTR_FORMAT, uc->context_rbx);
+ print_location(st, uc->context_rbx);
st->cr();
- st->print_cr("RCX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RCX]);
- print_location(st, uc->uc_mcontext.gregs[REG_RCX]);
+ st->print_cr("RCX=" INTPTR_FORMAT, uc->context_rcx);
+ print_location(st, uc->context_rcx);
st->cr();
- st->print_cr("RDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDX]);
- print_location(st, uc->uc_mcontext.gregs[REG_RDX]);
+ st->print_cr("RDX=" INTPTR_FORMAT, uc->context_rdx);
+ print_location(st, uc->context_rdx);
st->cr();
- st->print_cr("RSP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RSP]);
- print_location(st, uc->uc_mcontext.gregs[REG_RSP]);
+ st->print_cr("RSP=" INTPTR_FORMAT, uc->context_rsp);
+ print_location(st, uc->context_rsp);
st->cr();
- st->print_cr("RBP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBP]);
- print_location(st, uc->uc_mcontext.gregs[REG_RBP]);
+ st->print_cr("RBP=" INTPTR_FORMAT, uc->context_rbp);
+ print_location(st, uc->context_rbp);
st->cr();
- st->print_cr("RSI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RSI]);
- print_location(st, uc->uc_mcontext.gregs[REG_RSI]);
+ st->print_cr("RSI=" INTPTR_FORMAT, uc->context_rsi);
+ print_location(st, uc->context_rsi);
st->cr();
- st->print_cr("RDI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RDI]);
- print_location(st, uc->uc_mcontext.gregs[REG_RDI]);
+ st->print_cr("RDI=" INTPTR_FORMAT, uc->context_rdi);
+ print_location(st, uc->context_rdi);
st->cr();
- st->print_cr("R8 =" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R8]);
- print_location(st, uc->uc_mcontext.gregs[REG_R8]);
+ st->print_cr("R8 =" INTPTR_FORMAT, uc->context_r8);
+ print_location(st, uc->context_r8);
st->cr();
- st->print_cr("R9 =" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R9]);
- print_location(st, uc->uc_mcontext.gregs[REG_R9]);
+ st->print_cr("R9 =" INTPTR_FORMAT, uc->context_r9);
+ print_location(st, uc->context_r9);
st->cr();
- st->print_cr("R10=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R10]);
- print_location(st, uc->uc_mcontext.gregs[REG_R10]);
+ st->print_cr("R10=" INTPTR_FORMAT, uc->context_r10);
+ print_location(st, uc->context_r10);
st->cr();
- st->print_cr("R11=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R11]);
- print_location(st, uc->uc_mcontext.gregs[REG_R11]);
+ st->print_cr("R11=" INTPTR_FORMAT, uc->context_r11);
+ print_location(st, uc->context_r11);
st->cr();
- st->print_cr("R12=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R12]);
- print_location(st, uc->uc_mcontext.gregs[REG_R12]);
+ st->print_cr("R12=" INTPTR_FORMAT, uc->context_r12);
+ print_location(st, uc->context_r12);
st->cr();
- st->print_cr("R13=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R13]);
- print_location(st, uc->uc_mcontext.gregs[REG_R13]);
+ st->print_cr("R13=" INTPTR_FORMAT, uc->context_r13);
+ print_location(st, uc->context_r13);
st->cr();
- st->print_cr("R14=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R14]);
- print_location(st, uc->uc_mcontext.gregs[REG_R14]);
+ st->print_cr("R14=" INTPTR_FORMAT, uc->context_r14);
+ print_location(st, uc->context_r14);
st->cr();
- st->print_cr("R15=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_R15]);
- print_location(st, uc->uc_mcontext.gregs[REG_R15]);
+ st->print_cr("R15=" INTPTR_FORMAT, uc->context_r15);
+ print_location(st, uc->context_r15);
#else
- st->print( "EAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EAX]);
- st->print(", EBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EBX]);
- st->print(", ECX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_ECX]);
- st->print(", EDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EDX]);
- st->cr();
- st->print( "ESP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_UESP]);
- st->print(", EBP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EBP]);
- st->print(", ESI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_ESI]);
- st->print(", EDI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EDI]);
+ st->print( "EAX=" INTPTR_FORMAT, uc->context_eax);
+ st->print(", EBX=" INTPTR_FORMAT, uc->context_ebx);
+ st->print(", ECX=" INTPTR_FORMAT, uc->context_ecx);
+ st->print(", EDX=" INTPTR_FORMAT, uc->context_edx);
+ st->cr();
+ st->print( "ESP=" INTPTR_FORMAT, uc->context_esp);
+ st->print(", EBP=" INTPTR_FORMAT, uc->context_ebp);
+ st->print(", ESI=" INTPTR_FORMAT, uc->context_esi);
+ st->print(", EDI=" INTPTR_FORMAT, uc->context_edi);
st->cr();
- st->print( "EIP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EIP]);
- st->print(", CR2=" INTPTR_FORMAT, uc->uc_mcontext.cr2);
- st->print(", EFLAGS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EFL]);
+ st->print( "EIP=" INTPTR_FORMAT, uc->context_eip);
+ st->print(", EFLAGS=" INTPTR_FORMAT, uc->context_eflags);
st->cr();
st->cr();
@@ -830,29 +1089,29 @@
// this is only for the "general purpose" registers
- st->print_cr("EAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EAX]);
- print_location(st, uc->uc_mcontext.gregs[REG_EAX]);
+ st->print_cr("EAX=" INTPTR_FORMAT, uc->context_eax);
+ print_location(st, uc->context_eax);
st->cr();
- st->print_cr("EBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EBX]);
- print_location(st, uc->uc_mcontext.gregs[REG_EBX]);
+ st->print_cr("EBX=" INTPTR_FORMAT, uc->context_ebx);
+ print_location(st, uc->context_ebx);
st->cr();
- st->print_cr("ECX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_ECX]);
- print_location(st, uc->uc_mcontext.gregs[REG_ECX]);
+ st->print_cr("ECX=" INTPTR_FORMAT, uc->context_ecx);
+ print_location(st, uc->context_ecx);
st->cr();
- st->print_cr("EDX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EDX]);
- print_location(st, uc->uc_mcontext.gregs[REG_EDX]);
+ st->print_cr("EDX=" INTPTR_FORMAT, uc->context_edx);
+ print_location(st, uc->context_edx);
st->cr();
- st->print_cr("ESP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_ESP]);
- print_location(st, uc->uc_mcontext.gregs[REG_ESP]);
+ st->print_cr("ESP=" INTPTR_FORMAT, uc->context_esp);
+ print_location(st, uc->context_esp);
st->cr();
- st->print_cr("EBP=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EBP]);
- print_location(st, uc->uc_mcontext.gregs[REG_EBP]);
+ st->print_cr("EBP=" INTPTR_FORMAT, uc->context_ebp);
+ print_location(st, uc->context_ebp);
st->cr();
- st->print_cr("ESI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_ESI]);
- print_location(st, uc->uc_mcontext.gregs[REG_ESI]);
+ st->print_cr("ESI=" INTPTR_FORMAT, uc->context_esi);
+ print_location(st, uc->context_esi);
st->cr();
- st->print_cr("EDI=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EDI]);
- print_location(st, uc->uc_mcontext.gregs[REG_EDI]);
+ st->print_cr("EDI=" INTPTR_FORMAT, uc->context_edi);
+ print_location(st, uc->context_edi);
#endif // AMD64
st->cr();
--- ./hotspot/src/os_cpu/bsd_x86/vm/threadLS_bsd_x86.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_x86/vm/threadLS_bsd_x86.hpp 2010-07-04 09:32:22.000000000 -0700
@@ -27,8 +27,10 @@
#ifndef AMD64
// map stack pointer to thread pointer - see notes in threadLS_bsd_x86.cpp
#define SP_BITLENGTH 32
+#ifndef PAGE_SHIFT
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)
+#endif
static Thread* _sp_map[1UL << (SP_BITLENGTH - PAGE_SHIFT)];
#endif // !AMD64
--- ./hotspot/src/os_cpu/bsd_x86/vm/vmStructs_bsd_x86.hpp 2010-11-07 17:21:37.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_x86/vm/vmStructs_bsd_x86.hpp 2010-07-04 09:32:22.000000000 -0700
@@ -31,7 +31,7 @@
/******************************/ \
/* Threads (NOTE: incomplete) */ \
/******************************/ \
- nonstatic_field(OSThread, _thread_id, pid_t) \
+ nonstatic_field(OSThread, _thread_id, pthread_t) \
nonstatic_field(OSThread, _pthread_id, pthread_t) \
/* This must be the last entry, and must be present */ \
last_entry()
--- ./hotspot/src/os_cpu/bsd_zero/vm/atomic_bsd_zero.inline.hpp 2010-11-07 17:21:38.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_zero/vm/atomic_bsd_zero.inline.hpp 2010-07-04 09:32:22.000000000 -0700
@@ -23,136 +23,441 @@
*
*/
-// Implementation of class atomic
-
-#ifdef M68K
+#include <sys/types.h>
+#ifdef __NetBSD__
+#include <sys/atomic.h>
+#elif __FreeBSD__
+
+#include <sys/types.h>
+#ifndef SPARC
+#include <machine/atomic.h>
+#else
/*
- * __m68k_cmpxchg
+ * On FreeBSD/sparc64, <machine/atomic.h> pulls in <machine/cpufunc.h>
+ * which includes definitions which cause conflicts with various
+ * definitions within HotSpot source. To avoid that, pull in those
+ * definitions verbatim instead of including the header. Yuck.
+ */
+
+/*-
+ * Copyright (c) 1998 Doug Rabson.
+ * Copyright (c) 2001 Jake Burkholder.
+ * All rights reserved.
*
- * Atomically store newval in *ptr if *ptr is equal to oldval for user space.
- * Returns newval on success and oldval if no exchange happened.
- * This implementation is processor specific and works on
- * 68020 68030 68040 and 68060.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * It will not work on ColdFire, 68000 and 68010 since they lack the CAS
- * instruction.
- * Using a kernelhelper would be better for arch complete implementation.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
*
*/
-static inline int __m68k_cmpxchg(int oldval, int newval, volatile int *ptr) {
- int ret;
- __asm __volatile ("cas%.l %0,%2,%1"
- : "=d" (ret), "+m" (*(ptr))
- : "d" (newval), "0" (oldval));
- return ret;
-}
-
-/* Perform an atomic compare and swap: if the current value of `*PTR'
- is OLDVAL, then write NEWVAL into `*PTR'. Return the contents of
- `*PTR' before the operation.*/
-static inline int m68k_compare_and_swap(volatile int *ptr,
- int oldval,
- int newval) {
- for (;;) {
- int prev = *ptr;
- if (prev != oldval)
- return prev;
-
- if (__m68k_cmpxchg (prev, newval, ptr) == newval)
- // Success.
- return prev;
-
- // We failed even though prev == oldval. Try again.
- }
-}
-
-/* Atomically add an int to memory. */
-static inline int m68k_add_and_fetch(volatile int *ptr, int add_value) {
- for (;;) {
- // Loop until success.
-
- int prev = *ptr;
-
- if (__m68k_cmpxchg (prev, prev + add_value, ptr) == prev + add_value)
- return prev + add_value;
- }
-}
-
-/* Atomically write VALUE into `*PTR' and returns the previous
- contents of `*PTR'. */
-static inline int m68k_lock_test_and_set(volatile int *ptr, int newval) {
- for (;;) {
- // Loop until success.
- int prev = *ptr;
-
- if (__m68k_cmpxchg (prev, newval, ptr) == prev)
- return prev;
- }
-}
-#endif // M68K
+#include <machine/asi.h>
-#ifdef ARM
+/*
+ * Membar operand macros for use in other macros when # is a special
+ * character. Keep these in sync with what the hardware expects.
+ */
+#define M_LoadLoad (0)
+#define M_StoreLoad (1)
+#define M_LoadStore (2)
+#define M_StoreStore (3)
+
+#define CMASK_SHIFT (4)
+#define MMASK_SHIFT (0)
+
+#define CMASK_GEN(bit) ((1 << (bit)) << CMASK_SHIFT)
+#define MMASK_GEN(bit) ((1 << (bit)) << MMASK_SHIFT)
+
+#define LoadLoad MMASK_GEN(M_LoadLoad)
+#define StoreLoad MMASK_GEN(M_StoreLoad)
+#define LoadStore MMASK_GEN(M_LoadStore)
+#define StoreStore MMASK_GEN(M_StoreStore)
+
+#define casa(rs1, rs2, rd, asi) ({ \
+ u_int __rd = (uint32_t)(rd); \
+ __asm __volatile("casa [%2] %3, %4, %0" \
+ : "+r" (__rd), "=m" (*rs1) \
+ : "r" (rs1), "n" (asi), "r" (rs2), "m" (*rs1)); \
+ __rd; \
+})
+
+#define casxa(rs1, rs2, rd, asi) ({ \
+ u_long __rd = (uint64_t)(rd); \
+ __asm __volatile("casxa [%2] %3, %4, %0" \
+ : "+r" (__rd), "=m" (*rs1) \
+ : "r" (rs1), "n" (asi), "r" (rs2), "m" (*rs1)); \
+ __rd; \
+})
+
+#define membar(mask) do { \
+ __asm __volatile("membar %0" : : "n" (mask) : "memory"); \
+} while (0)
+
+#ifdef _KERNEL
+#define __ASI_ATOMIC ASI_N
+#else
+#define __ASI_ATOMIC ASI_P
+#endif
+
+#define mb() __asm__ __volatile__ ("membar #MemIssue": : :"memory")
+#define wmb() mb()
+#define rmb() mb()
/*
- * __kernel_cmpxchg
+ * Various simple arithmetic on memory which is atomic in the presence
+ * of interrupts and multiple processors. See atomic(9) for details.
+ * Note that efficient hardware support exists only for the 32 and 64
+ * bit variants; the 8 and 16 bit versions are not provided and should
+ * not be used in MI code.
+ *
+ * This implementation takes advantage of the fact that the sparc64
+ * cas instruction is both a load and a store. The loop is often coded
+ * as follows:
*
- * Atomically store newval in *ptr if *ptr is equal to oldval for user space.
- * Return zero if *ptr was changed or non-zero if no exchange happened.
- * The C flag is also set if *ptr was changed to allow for assembly
- * optimization in the calling code.
+ * do {
+ * expect = *p;
+ * new = expect + 1;
+ * } while (cas(p, expect, new) != expect);
*
+ * which performs an unnnecessary load on each iteration that the cas
+ * operation fails. Modified as follows:
+ *
+ * expect = *p;
+ * for (;;) {
+ * new = expect + 1;
+ * result = cas(p, expect, new);
+ * if (result == expect)
+ * break;
+ * expect = result;
+ * }
+ *
+ * the return value of cas is used to avoid the extra reload.
+ *
+ * The memory barriers provided by the acq and rel variants are intended
+ * to be sufficient for use of relaxed memory ordering. Due to the
+ * suggested assembly syntax of the membar operands containing a #
+ * character, they cannot be used in macros. The cmask and mmask bits
+ * are hard coded in machine/cpufunc.h and used here through macros.
+ * Hopefully sun will choose not to change the bit numbers.
*/
-typedef int (__kernel_cmpxchg_t)(int oldval, int newval, volatile int *ptr);
-#define __kernel_cmpxchg (*(__kernel_cmpxchg_t *) 0xffff0fc0)
-
-
-
-/* Perform an atomic compare and swap: if the current value of `*PTR'
- is OLDVAL, then write NEWVAL into `*PTR'. Return the contents of
- `*PTR' before the operation.*/
-static inline int arm_compare_and_swap(volatile int *ptr,
- int oldval,
- int newval) {
- for (;;) {
- int prev = *ptr;
- if (prev != oldval)
- return prev;
-
- if (__kernel_cmpxchg (prev, newval, ptr) == 0)
- // Success.
- return prev;
-
- // We failed even though prev == oldval. Try again.
- }
-}
+#define itype(sz) uint ## sz ## _t
-/* Atomically add an int to memory. */
-static inline int arm_add_and_fetch(volatile int *ptr, int add_value) {
- for (;;) {
- // Loop until a __kernel_cmpxchg succeeds.
+#define atomic_cas_32(p, e, s) casa(p, e, s, __ASI_ATOMIC)
+#define atomic_cas_64(p, e, s) casxa(p, e, s, __ASI_ATOMIC)
- int prev = *ptr;
+#define atomic_cas(p, e, s, sz) \
+ atomic_cas_ ## sz(p, e, s)
- if (__kernel_cmpxchg (prev, prev + add_value, ptr) == 0)
- return prev + add_value;
- }
+#define atomic_cas_acq(p, e, s, sz) ({ \
+ itype(sz) v; \
+ v = atomic_cas(p, e, s, sz); \
+ membar(LoadLoad | LoadStore); \
+ v; \
+})
+
+#define atomic_cas_rel(p, e, s, sz) ({ \
+ itype(sz) v; \
+ membar(LoadStore | StoreStore); \
+ v = atomic_cas(p, e, s, sz); \
+ v; \
+})
+
+#define atomic_op(p, op, v, sz) ({ \
+ itype(sz) e, r, s; \
+ for (e = *(volatile itype(sz) *)p;; e = r) { \
+ s = e op v; \
+ r = atomic_cas_ ## sz(p, e, s); \
+ if (r == e) \
+ break; \
+ } \
+ e; \
+})
+
+#define atomic_op_acq(p, op, v, sz) ({ \
+ itype(sz) t; \
+ t = atomic_op(p, op, v, sz); \
+ membar(LoadLoad | LoadStore); \
+ t; \
+})
+
+#define atomic_op_rel(p, op, v, sz) ({ \
+ itype(sz) t; \
+ membar(LoadStore | StoreStore); \
+ t = atomic_op(p, op, v, sz); \
+ t; \
+})
+
+#define atomic_load(p, sz) \
+ atomic_cas(p, 0, 0, sz)
+
+#define atomic_load_acq(p, sz) ({ \
+ itype(sz) v; \
+ v = atomic_load(p, sz); \
+ membar(LoadLoad | LoadStore); \
+ v; \
+})
+
+#define atomic_load_clear(p, sz) ({ \
+ itype(sz) e, r; \
+ for (e = *(volatile itype(sz) *)p;; e = r) { \
+ r = atomic_cas(p, e, 0, sz); \
+ if (r == e) \
+ break; \
+ } \
+ e; \
+})
+
+#define atomic_store(p, v, sz) do { \
+ itype(sz) e, r; \
+ for (e = *(volatile itype(sz) *)p;; e = r) { \
+ r = atomic_cas(p, e, v, sz); \
+ if (r == e) \
+ break; \
+ } \
+} while (0)
+
+#define atomic_store_rel(p, v, sz) do { \
+ membar(LoadStore | StoreStore); \
+ atomic_store(p, v, sz); \
+} while (0)
+
+#define ATOMIC_GEN(name, ptype, vtype, atype, sz) \
+ \
+static __inline vtype \
+atomic_add_ ## name(volatile ptype p, atype v) \
+{ \
+ return ((vtype)atomic_op(p, +, v, sz)); \
+} \
+static __inline vtype \
+atomic_add_acq_ ## name(volatile ptype p, atype v) \
+{ \
+ return ((vtype)atomic_op_acq(p, +, v, sz)); \
+} \
+static __inline vtype \
+atomic_add_rel_ ## name(volatile ptype p, atype v) \
+{ \
+ return ((vtype)atomic_op_rel(p, +, v, sz)); \
+} \
+ \
+static __inline int \
+atomic_cmpset_ ## name(volatile ptype p, vtype e, vtype s) \
+{ \
+ return (((vtype)atomic_cas(p, e, s, sz)) == e); \
+} \
+static __inline int \
+atomic_cmpset_acq_ ## name(volatile ptype p, vtype e, vtype s) \
+{ \
+ return (((vtype)atomic_cas_acq(p, e, s, sz)) == e); \
+} \
+static __inline int \
+atomic_cmpset_rel_ ## name(volatile ptype p, vtype e, vtype s) \
+{ \
+ return (((vtype)atomic_cas_rel(p, e, s, sz)) == e); \
+} \
+ \
+static __inline vtype \
+atomic_load_ ## name(volatile ptype p) \
+{ \
+ return ((vtype)atomic_cas(p, 0, 0, sz)); \
+} \
+static __inline vtype \
+atomic_load_acq_ ## name(volatile ptype p) \
+{ \
+ return ((vtype)atomic_cas_acq(p, 0, 0, sz)); \
+} \
+ \
+static __inline void \
+atomic_store_ ## name(volatile ptype p, vtype v) \
+{ \
+ atomic_store(p, v, sz); \
+} \
+static __inline void \
+atomic_store_rel_ ## name(volatile ptype p, vtype v) \
+{ \
+ atomic_store_rel(p, v, sz); \
+}
+
+ATOMIC_GEN(int, u_int *, u_int, u_int, 32);
+ATOMIC_GEN(32, uint32_t *, uint32_t, uint32_t, 32);
+
+ATOMIC_GEN(long, u_long *, u_long, u_long, 64);
+ATOMIC_GEN(64, uint64_t *, uint64_t, uint64_t, 64);
+
+ATOMIC_GEN(ptr, uintptr_t *, uintptr_t, uintptr_t, 64);
+
+#define atomic_fetchadd_int atomic_add_int
+#define atomic_fetchadd_32 atomic_add_32
+#define atomic_fetchadd_long atomic_add_long
+
+#undef ATOMIC_GEN
+#undef atomic_cas
+#undef atomic_cas_acq
+#undef atomic_cas_rel
+#undef atomic_op
+#undef atomic_op_acq
+#undef atomic_op_rel
+#undef atomic_load_acq
+#undef atomic_store_rel
+#undef atomic_load_clear
+#endif
+
+static __inline __attribute__((__always_inline__))
+unsigned int atomic_add_int_nv(volatile unsigned int* dest, unsigned int add_value)
+{
+ atomic_add_acq_int(dest, add_value);
+ return *dest;
+}
+
+static __inline __attribute__((__always_inline__))
+uintptr_t atomic_add_ptr_nv(volatile intptr_t* dest, intptr_t add_value)
+{
+ atomic_add_acq_ptr((volatile uintptr_t*) dest, (uintptr_t) add_value);
+ return *((volatile uintptr_t*) dest);
+}
+
+static __inline __attribute__((__always_inline__))
+unsigned int
+atomic_swap_uint(volatile unsigned int *dest, unsigned int exchange_value)
+{
+ jint prev = *dest;
+ atomic_store_rel_int(dest, exchange_value);
+ return prev;
+}
+
+static __inline __attribute__((__always_inline__))
+void *
+atomic_swap_ptr(volatile void *dest, void *exchange_value)
+{
+ void *prev = *(void **)dest;
+ atomic_store_rel_ptr((volatile uintptr_t*) dest, (uintptr_t) exchange_value);
+ return prev;
+}
+
+static __inline __attribute__((__always_inline__))
+unsigned int
+atomic_cas_uint(volatile unsigned int *dest, unsigned int compare_value,
+ unsigned int exchange_value)
+{
+ unsigned int prev = *dest;
+ atomic_cmpset_acq_int(dest, compare_value, exchange_value);
+ return prev;
+}
+
+static __inline __attribute__((__always_inline__))
+unsigned long
+atomic_cas_ulong(volatile unsigned long *dest, unsigned long compare_value,
+ unsigned long exchange_value)
+{
+ unsigned long prev = *dest;
+ atomic_cmpset_acq_long(dest, compare_value, exchange_value);
+ return prev;
+}
+
+static __inline __attribute__((__always_inline__))
+void *
+atomic_cas_ptr(volatile void *dest, void *compare_value, void *exchange_value)
+{
+ void *prev = *(void **)dest;
+ atomic_cmpset_acq_ptr((volatile uintptr_t*) dest, (uintptr_t) compare_value, (uintptr_t) exchange_value);
+ return prev;
+}
+
+#elif defined(__APPLE__)
+
+#include <libkern/OSAtomic.h>
+
+static __inline __attribute__((__always_inline__))
+unsigned int
+atomic_add_int_nv(volatile unsigned int *target, int delta) {
+ return (unsigned int) OSAtomicAdd32Barrier(delta, (volatile int32_t *) target);
+}
+
+static __inline __attribute__((__always_inline__))
+void *
+atomic_add_ptr_nv(volatile void *target, ssize_t delta) {
+#ifdef __LP64__
+ return (void *) OSAtomicAdd64Barrier(delta, (volatile int64_t *) target);
+#else
+ return (void *) OSAtomicAdd32Barrier(delta, (volatile int32_t *) target);
+#endif
+}
+
+
+static __inline __attribute__((__always_inline__))
+unsigned int
+atomic_swap_uint(volatile unsigned int *dest, unsigned int exchange_value)
+{
+ /* No xchg support in OSAtomic */
+ unsigned int prev;
+ do {
+ prev = *dest;
+ } while (!OSAtomicCompareAndSwapIntBarrier((int) prev, (int) exchange_value, (volatile int *) dest));
+
+ return prev;
+}
+
+static __inline __attribute__((__always_inline__))
+void *
+atomic_swap_ptr(volatile void *dest, void *exchange_value)
+{
+ /* No xchg support in OSAtomic */
+ void *prev;
+ do {
+ prev = *((void * volatile *) dest);
+ } while (!OSAtomicCompareAndSwapPtrBarrier(prev, exchange_value, (void * volatile *) dest));
+
+ return prev;
+}
+
+static __inline __attribute__((__always_inline__))
+unsigned int
+atomic_cas_uint(volatile unsigned int *dest, unsigned int compare_value,
+ unsigned int exchange_value)
+{
+ unsigned int prev = *dest;
+ OSAtomicCompareAndSwapIntBarrier(compare_value, exchange_value, (volatile int *) dest);
+ return prev;
+}
+
+static __inline __attribute__((__always_inline__))
+unsigned long
+atomic_cas_ulong(volatile unsigned long *dest, unsigned long compare_value,
+ unsigned long exchange_value)
+{
+ unsigned long prev = *dest;
+ OSAtomicCompareAndSwapLongBarrier(compare_value, exchange_value, (volatile long *) dest);
+ return prev;
+}
+
+static __inline __attribute__((__always_inline__))
+void *
+atomic_cas_ptr(volatile void *dest, void *compare_value, void *exchange_value)
+{
+ void *prev = *(void **)dest;
+ OSAtomicCompareAndSwapPtrBarrier(compare_value, exchange_value, (void * volatile *) dest);
+ return prev;
}
-/* Atomically write VALUE into `*PTR' and returns the previous
- contents of `*PTR'. */
-static inline int arm_lock_test_and_set(volatile int *ptr, int newval) {
- for (;;) {
- // Loop until a __kernel_cmpxchg succeeds.
- int prev = *ptr;
- if (__kernel_cmpxchg (prev, newval, ptr) == 0)
- return prev;
- }
-}
-#endif // ARM
+#endif
inline void Atomic::store(jint store_value, volatile jint* dest) {
*dest = store_value;
@@ -163,27 +468,11 @@
}
inline jint Atomic::add(jint add_value, volatile jint* dest) {
-#ifdef ARM
- return arm_add_and_fetch(dest, add_value);
-#else
-#ifdef M68K
- return m68k_add_and_fetch(dest, add_value);
-#else
- return __sync_add_and_fetch(dest, add_value);
-#endif // M68K
-#endif // ARM
+ return (jint)atomic_add_int_nv((volatile unsigned int*) dest, add_value);
}
inline intptr_t Atomic::add_ptr(intptr_t add_value, volatile intptr_t* dest) {
-#ifdef ARM
- return arm_add_and_fetch(dest, add_value);
-#else
-#ifdef M68K
- return m68k_add_and_fetch(dest, add_value);
-#else
- return __sync_add_and_fetch(dest, add_value);
-#endif // M68K
-#endif // ARM
+ return (intptr_t)atomic_add_ptr_nv(dest, add_value);
}
inline void* Atomic::add_ptr(intptr_t add_value, volatile void* dest) {
@@ -215,79 +504,41 @@
}
inline jint Atomic::xchg(jint exchange_value, volatile jint* dest) {
-#ifdef ARM
- return arm_lock_test_and_set(dest, exchange_value);
-#else
-#ifdef M68K
- return m68k_lock_test_and_set(dest, exchange_value);
-#else
- // __sync_lock_test_and_set is a bizarrely named atomic exchange
- // operation. Note that some platforms only support this with the
- // limitation that the only valid value to store is the immediate
- // constant 1. There is a test for this in JNI_CreateJavaVM().
- return __sync_lock_test_and_set (dest, exchange_value);
-#endif // M68K
-#endif // ARM
+ return (jint)atomic_swap_uint((volatile u_int *)dest, (u_int)exchange_value);
}
inline intptr_t Atomic::xchg_ptr(intptr_t exchange_value,
volatile intptr_t* dest) {
-#ifdef ARM
- return arm_lock_test_and_set(dest, exchange_value);
-#else
-#ifdef M68K
- return m68k_lock_test_and_set(dest, exchange_value);
-#else
- return __sync_lock_test_and_set (dest, exchange_value);
-#endif // M68K
-#endif // ARM
+ return (intptr_t)atomic_swap_ptr((volatile void *)dest,
+ (void *)exchange_value);
}
inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) {
- return (void *) xchg_ptr((intptr_t) exchange_value,
- (volatile intptr_t*) dest);
+ return atomic_swap_ptr(dest, exchange_value);
}
inline jint Atomic::cmpxchg(jint exchange_value,
volatile jint* dest,
jint compare_value) {
-#ifdef ARM
- return arm_compare_and_swap(dest, compare_value, exchange_value);
-#else
-#ifdef M68K
- return m68k_compare_and_swap(dest, compare_value, exchange_value);
-#else
- return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
-#endif // M68K
-#endif // ARM
+ return atomic_cas_uint((volatile u_int *)dest, compare_value, exchange_value);
}
inline jlong Atomic::cmpxchg(jlong exchange_value,
volatile jlong* dest,
jlong compare_value) {
-
- return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
+ return atomic_cas_ulong((volatile u_long *)dest, compare_value,
+ exchange_value);
}
inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value,
volatile intptr_t* dest,
intptr_t compare_value) {
-#ifdef ARM
- return arm_compare_and_swap(dest, compare_value, exchange_value);
-#else
-#ifdef M68K
- return m68k_compare_and_swap(dest, compare_value, exchange_value);
-#else
- return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
-#endif // M68K
-#endif // ARM
+ return (intptr_t)atomic_cas_ptr((volatile void *)dest, (void *)compare_value,
+ (void *)exchange_value);
}
inline void* Atomic::cmpxchg_ptr(void* exchange_value,
volatile void* dest,
void* compare_value) {
-
- return (void *) cmpxchg_ptr((intptr_t) exchange_value,
- (volatile intptr_t*) dest,
- (intptr_t) compare_value);
+ return atomic_cas_ptr((volatile void *)dest, compare_value, exchange_value);
}
--- ./hotspot/src/os_cpu/bsd_zero/vm/bytes_bsd_zero.inline.hpp 2010-11-07 17:21:38.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_zero/vm/bytes_bsd_zero.inline.hpp 2010-07-04 09:32:22.000000000 -0700
@@ -25,16 +25,23 @@
// Efficient swapping of data bytes from Java byte
// ordering to native byte ordering and vice versa.
-#include <byteswap.h>
+#ifdef __APPLE__
+#include <libkern/OSByteOrder.h>
+#define bswap16(x) OSSwapInt16(x)
+#define bswap32(x) OSSwapInt32(x)
+#define bswap64(x) OSSwapInt64(x)
+#else
+# include <sys/endian.h>
+#endif
inline u2 Bytes::swap_u2(u2 x) {
- return bswap_16(x);
+ return bswap16(x);
}
inline u4 Bytes::swap_u4(u4 x) {
- return bswap_32(x);
+ return bswap32(x);
}
inline u8 Bytes::swap_u8(u8 x) {
- return bswap_64(x);
+ return bswap64(x);
}
--- ./hotspot/src/os_cpu/bsd_zero/vm/orderAccess_bsd_zero.inline.hpp 2010-11-07 17:21:38.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_zero/vm/orderAccess_bsd_zero.inline.hpp 2010-07-04 09:32:22.000000000 -0700
@@ -40,7 +40,12 @@
#else // ARM
+#ifdef __APPLE__
+#include <libkern/OSAtomic.h>
+#define FULL_MEM_BARRIER OSMemoryBarrier()
+#else
#define FULL_MEM_BARRIER __sync_synchronize()
+#endif // __APPLE__
#ifdef PPC
--- ./hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp 2010-11-07 17:21:38.000000000 -0800
+++ ./hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp 2010-10-31 14:26:55.000000000 -0700
@@ -23,6 +23,10 @@
*
*/
+#if defined(_ALLBSD_SOURCE) && !defined(__APPLE__) && !defined(__NetBSD__)
+# include <pthread_np.h> /* For pthread_attr_get_np */
+#endif
+
// do not include precompiled header file
#include "incls/_os_bsd_zero.cpp.incl"
@@ -145,6 +149,7 @@
thread->disable_stack_red_zone();
ShouldNotCallThis();
}
+#ifndef _ALLBSD_SOURCE
else {
// Accessing stack address below sp may cause SEGV if
// current thread has MAP_GROWSDOWN stack. This should
@@ -163,6 +168,7 @@
fatal("recursive segv. expanding stack.");
}
}
+#endif
}
}
@@ -230,6 +236,7 @@
// Nothing to do
}
+#ifndef _ALLBSD_SOURCE
int os::Bsd::get_fpu_control_word() {
ShouldNotCallThis();
}
@@ -237,6 +244,7 @@
void os::Bsd::set_fpu_control_word(int fpu) {
ShouldNotCallThis();
}
+#endif
bool os::is_allocatable(size_t bytes) {
#ifdef _LP64
@@ -281,6 +289,48 @@
}
static void current_stack_region(address *bottom, size_t *size) {
+ address stack_bottom;
+ address stack_top;
+ size_t stack_bytes;
+
+#ifdef __APPLE__
+ pthread_t self = pthread_self();
+ stack_top = (address) pthread_get_stackaddr_np(self);
+ stack_bytes = pthread_get_stacksize_np(self);
+ stack_bottom = stack_top - stack_bytes;
+#elif defined(__OpenBSD__)
+ stack_t ss;
+ int rslt = pthread_stackseg_np(pthread_self(), &ss);
+
+ if (rslt != 0)
+ fatal(err_msg("pthread_stackseg_np failed with err = %d", rslt));
+
+ stack_top = (address) ss.ss_sp;
+ stack_bytes = ss.ss_size;
+ stack_bottom = stacktop - stack_bytes;
+#elif defined(_ALLBSD_SOURCE)
+ pthread_attr_t attr;
+
+ int rslt = pthread_attr_init(&attr);
+
+ // JVM needs to know exact stack location, abort if it fails
+ if (rslt != 0)
+ fatal(err_msg("pthread_attr_init failed with err = %d", rslt));
+
+ rslt = pthread_attr_get_np(pthread_self(), &attr);
+
+ if (rslt != 0)
+ fatal(err_msg("pthread_attr_get_np failed with err = %d", rslt));
+
+ if (pthread_attr_getstackaddr(&attr, (void **) &stack_bottom) != 0 ||
+ pthread_attr_getstacksize(&attr, &stack_bytes) != 0) {
+ fatal("Can not locate current stack attributes!");
+ }
+
+ pthread_attr_destroy(&attr);
+
+ stack_top = stack_bottom + stack_bytes;
+#else /* Linux */
pthread_attr_t attr;
int res = pthread_getattr_np(pthread_self(), &attr);
if (res != 0) {
@@ -292,13 +342,11 @@
}
}
- address stack_bottom;
- size_t stack_bytes;
res = pthread_attr_getstack(&attr, (void **) &stack_bottom, &stack_bytes);
if (res != 0) {
fatal(err_msg("pthread_attr_getstack failed with errno = %d", res));
}
- address stack_top = stack_bottom + stack_bytes;
+ stack_top = stack_bottom + stack_bytes;
// The block of memory returned by pthread_attr_getstack() includes
// guard pages where present. We need to trim these off.
@@ -340,6 +388,7 @@
stack_bottom = stack_top - stack_bytes;
}
+#endif
assert(os::current_stack_pointer() >= stack_bottom, "should do");
assert(os::current_stack_pointer() < stack_top, "should do");
--- ./hotspot/src/share/vm/adlc/adlc.hpp 2010-11-04 16:12:14.000000000 -0700
+++ ./hotspot/src/share/vm/adlc/adlc.hpp 2010-06-15 22:03:24.000000000 -0700
@@ -69,9 +69,9 @@
#endif
#endif // _WIN32
-#ifdef LINUX
+#if defined(LINUX) || defined(_ALLBSD_SOURCE)
#include <inttypes.h>
-#endif // LINUX
+#endif // LINUX || _ALLBSD_SOURCE
// Macros
#define uint32 unsigned int
--- ./hotspot/src/share/vm/classfile/javaClasses.cpp 2010-11-04 16:12:14.000000000 -0700
+++ ./hotspot/src/share/vm/classfile/javaClasses.cpp 2010-10-31 14:03:01.000000000 -0700
@@ -952,7 +952,7 @@
}
nmethod* nm = method->code();
if (WizardMode && nm != NULL) {
- sprintf(buf + (int)strlen(buf), "(nmethod " PTR_FORMAT ")", (intptr_t)nm);
+ sprintf(buf + (int)strlen(buf), "(nmethod " INTPTR_FORMAT ")", (intptr_t)nm);
}
}
--- ./hotspot/src/share/vm/interpreter/bytecodeTracer.cpp 2010-11-04 16:12:14.000000000 -0700
+++ ./hotspot/src/share/vm/interpreter/bytecodeTracer.cpp 2010-08-06 22:02:53.000000000 -0700
@@ -83,7 +83,7 @@
// the incoming method. We could lose a line of trace output.
// This is acceptable in a debug-only feature.
st->cr();
- st->print("[%d] ", (int) Thread::current()->osthread()->thread_id());
+ st->print("[%ld] ", (long) Thread::current()->osthread()->thread_id());
method->print_name(st);
st->cr();
_current_method = method();
@@ -97,7 +97,7 @@
}
_code = code;
int bci = bcp - method->code_base();
- st->print("[%d] ", (int) Thread::current()->osthread()->thread_id());
+ st->print("[%ld] ", (long) Thread::current()->osthread()->thread_id());
if (Verbose) {
st->print("%8d %4d " INTPTR_FORMAT " " INTPTR_FORMAT " %s",
BytecodeCounter::counter_value(), bci, tos, tos2, Bytecodes::name(code));
--- ./hotspot/src/share/vm/prims/forte.cpp 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/src/share/vm/prims/forte.cpp 2010-06-15 22:03:31.000000000 -0700
@@ -629,6 +629,11 @@
// Method to let libcollector know about a dynamically loaded function.
// Because it is weakly bound, the calls become NOP's when the library
// isn't present.
+#ifdef __APPLE__
+// XXXDARWIN: Link errors occur even when __attribute__((weak_import))
+// is added
+#define collector_func_load(x0,x1,x2,x3,x4,x5,x6) (0)
+#else
void collector_func_load(char* name,
void* null_argument_1,
void* null_argument_2,
@@ -639,6 +644,7 @@
#pragma weak collector_func_load
#define collector_func_load(x0,x1,x2,x3,x4,x5,x6) \
( collector_func_load ? collector_func_load(x0,x1,x2,x3,x4,x5,x6),0 : 0 )
+#endif // __APPLE__
#endif // !_WINDOWS
} // end extern "C"
--- ./hotspot/src/share/vm/runtime/globals.hpp 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/src/share/vm/runtime/globals.hpp 2010-10-31 14:03:02.000000000 -0700
@@ -327,7 +327,7 @@
/* UseMembar is theoretically a temp flag used for memory barrier \
* removal testing. It was supposed to be removed before FCS but has \
* been re-added (see 6401008) */ \
- product(bool, UseMembar, false, \
+ product(bool, UseMembar, true, \
"(Unstable) Issues membars on thread state transitions") \
\
/* Temporary: See 6948537 */ \
--- ./hotspot/src/share/vm/runtime/os.cpp 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/src/share/vm/runtime/os.cpp 2010-10-31 14:03:02.000000000 -0700
@@ -79,7 +79,11 @@
assert(false, "Failed localtime_pd");
return NULL;
}
+#if defined(_ALLBSD_SOURCE)
+ const time_t zone = (time_t) time_struct.tm_gmtoff;
+#else
const time_t zone = timezone;
+#endif
// If daylight savings time is in effect,
// we are 1 hour East of our time zone
--- ./hotspot/src/share/vm/runtime/vm_version.cpp 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/src/share/vm/runtime/vm_version.cpp 2010-10-31 14:03:02.000000000 -0700
@@ -149,7 +149,8 @@
#define OS LINUX_ONLY("linux") \
WINDOWS_ONLY("windows") \
- SOLARIS_ONLY("solaris")
+ SOLARIS_ONLY("solaris") \
+ BSD_ONLY("bsd")
#ifdef ZERO
#define CPU ZERO_LIBARCH
--- ./hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp 2010-10-31 14:03:02.000000000 -0700
@@ -71,12 +71,25 @@
# include <sys/procfs.h>
# endif
-#ifdef LINUX
+#if defined(LINUX) || defined(_ALLBSD_SOURCE)
#include <inttypes.h>
#include <signal.h>
+#ifndef __OpenBSD__
#include <ucontext.h>
+#endif
+#ifdef __APPLE__
+ #include <AvailabilityMacros.h>
+ #if (MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4)
+ // Mac OS X 10.4 defines EFL_AC and EFL_ID,
+ // which conflict with hotspot variable names.
+ //
+ // This has been fixed in Mac OS X 10.5.
+ #undef EFL_AC
+ #undef EFL_ID
+ #endif
+#endif
#include <sys/time.h>
-#endif // LINUX
+#endif // LINUX || _ALLBSD_SOURCE
// 4810578: varargs unsafe on 32-bit integer/64-bit pointer architectures
// When __cplusplus is defined, NULL is defined as 0 (32-bit constant) in
@@ -112,7 +125,7 @@
// pointer is stored as integer value. On some platforms, sizeof(intptr_t) >
// sizeof(void*), so here we want something which is integer type, but has the
// same size as a pointer.
-#ifdef LINUX
+#ifdef __GNUC__
#ifdef _LP64
#define NULL_WORD 0L
#else
@@ -124,7 +137,7 @@
#define NULL_WORD NULL
#endif
-#ifndef LINUX
+#if !defined(LINUX) && !defined(_ALLBSD_SOURCE)
// Compiler-specific primitive types
typedef unsigned short uint16_t;
#ifndef _UINT32_T
@@ -144,7 +157,7 @@
// prior definition of intptr_t, and add "&& !defined(XXX)" above.
#endif // _SYS_INT_TYPES_H
-#endif // !LINUX
+#endif // !LINUX && !_ALLBSD_SOURCE
// Additional Java basic types
@@ -236,7 +249,9 @@
inline int g_isnan(float f) { return isnand(f); }
#endif
inline int g_isnan(double f) { return isnand(f); }
-#elif LINUX
+#elif defined(__APPLE__)
+inline int g_isnan(double f) { return isnan(f); }
+#elif defined(LINUX) || defined(_ALLBSD_SOURCE)
inline int g_isnan(float f) { return isnanf(f); }
inline int g_isnan(double f) { return isnan(f); }
#else
--- ./hotspot/src/share/vm/utilities/macros.hpp 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/src/share/vm/utilities/macros.hpp 2010-10-31 14:03:02.000000000 -0700
@@ -158,6 +158,14 @@
#define NOT_WINDOWS(code) code
#endif
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
+#define BSD_ONLY(code) code
+#define NOT_BSD(code)
+#else
+#define BSD_ONLY(code)
+#define NOT_BSD(code) code
+#endif
+
#if defined(IA32) || defined(AMD64)
#define X86
#define X86_ONLY(code) code
--- ./hotspot/src/share/vm/utilities/ostream.cpp 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/src/share/vm/utilities/ostream.cpp 2010-06-15 22:03:33.000000000 -0700
@@ -848,7 +848,7 @@
#ifndef PRODUCT
-#if defined(SOLARIS) || defined(LINUX)
+#if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE)
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
--- ./hotspot/src/share/vm/utilities/vmError.cpp 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/src/share/vm/utilities/vmError.cpp 2010-10-31 14:03:03.000000000 -0700
@@ -31,13 +31,18 @@
"JAVA_HOME", "JRE_HOME", "JAVA_TOOL_OPTIONS", "_JAVA_OPTIONS", "CLASSPATH",
"JAVA_COMPILER", "PATH", "USERNAME",
- // Env variables that are defined on Solaris/Linux
+ // Env variables that are defined on Solaris/Linux/BSD
"LD_LIBRARY_PATH", "LD_PRELOAD", "SHELL", "DISPLAY",
"HOSTTYPE", "OSTYPE", "ARCH", "MACHTYPE",
// defined on Linux
"LD_ASSUME_KERNEL", "_JAVA_SR_SIGNUM",
+ // defined on Darwin
+ "DYLD_LIBRARY_PATH", "DYLD_FALLBACK_LIBRARY_PATH",
+ "DYLD_FRAMEWORK_PATH", "DYLD_FALLBACK_FRAMEWORK_PATH",
+ "DYLD_INSERT_LIBRARIES",
+
// defined on Windows
"OS", "PROCESSOR_IDENTIFIER", "_ALT_JAVA_HOME_DIR",
@@ -859,7 +864,7 @@
const char* ptr = OnError;
while ((cmd = next_OnError_command(buffer, sizeof(buffer), &ptr)) != NULL){
out.print_raw ("# Executing ");
-#if defined(LINUX)
+#if defined(LINUX) || defined(_ALLBSD_SOURCE)
out.print_raw ("/bin/sh -c ");
#elif defined(SOLARIS)
out.print_raw ("/usr/bin/sh -c ");
--- ./hotspot/test/Makefile 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/test/Makefile 2010-06-15 22:03:33.000000000 -0700
@@ -44,6 +44,22 @@
ARCH = i586
endif
endif
+ifeq ($(OSNAME), Darwin)
+ PLATFORM = bsd
+ SLASH_JAVA = /java
+ ARCH = $(shell uname -m)
+ ifeq ($(ARCH), i386)
+ ARCH = i586
+ endif
+endif
+ifeq ($(findstring BSD,$(OSNAME)), BSD)
+ PLATFORM = bsd
+ SLASH_JAVA = /java
+ ARCH = $(shell uname -m)
+ ifeq ($(ARCH), i386)
+ ARCH = i586
+ endif
+endif
ifeq ($(OSNAME), Windows_NT)
PLATFORM = windows
SLASH_JAVA = J:
@@ -78,7 +94,7 @@
TEST_ROOT := $(shell pwd)
# Root of all test results
-ABS_BUILD_ROOT = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)
+ABS_BUILD_ROOT = $(TEST_ROOT)/../../build/$(PLATFORM)-$(ARCH)
ABS_TEST_OUTPUT_DIR = $(ABS_BUILD_ROOT)/testoutput
# Expect JPRT to set PRODUCT_HOME (the product or jdk in this case to test)
@@ -139,7 +155,7 @@
endif
# Expect JPRT to set TESTDIRS to the jtreg test dirs
-JTREG_TESTDIRS = demo/jvmti/gctest demo/jvmti/hprof
+JTREG_TESTDIRS = compiler
ifdef TESTDIRS
JTREG_TESTDIRS = $(TESTDIRS)
endif
--- ./hotspot/test/jprt.config 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/test/jprt.config 2010-06-15 22:03:33.000000000 -0700
@@ -75,8 +75,8 @@
# Uses 'uname -s', but only expect SunOS or Linux, assume Windows otherwise.
osname=`uname -s`
-if [ "${osname}" = SunOS ] ; then
-
+case "${osname}" in
+ SunOS )
# SOLARIS: Sparc or X86
osarch=`uname -p`
if [ "${osarch}" = sparc ] ; then
@@ -100,9 +100,9 @@
# File creation mask
umask 002
+ ;;
-elif [ "${osname}" = Linux ] ; then
-
+ Linux | Darwin )
# Add basic paths
path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
@@ -111,9 +111,31 @@
fileMustExist "${make}" make
umask 002
+ ;;
+
+ FreeBSD | OpenBSD )
+ # Add basic paths
+ path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
+
+ # Find GNU make
+ make=/usr/local/bin/gmake
+ fileMustExist "${make}" make
+
+ umask 002
+ ;;
-else
+ NetBSD )
+ # Add basic paths
+ path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
+ # Find GNU make
+ make=/usr/pkg/bin/gmake
+ fileMustExist "${make}" make
+
+ umask 002
+ ;;
+
+ * )
# Windows: Differs on CYGWIN vs. MKS.
# We need to determine if we are running a CYGWIN shell or an MKS shell
@@ -154,8 +176,8 @@
if [ "${unix_toolset}" = CYGWIN ] ; then
path4sdk="`/usr/bin/cygpath -p ${path4sdk}`"
fi
-
-fi
+ ;;
+esac
# Export PATH setting
PATH="${path4sdk}"
--- ./hotspot/test/runtime/6929067/Test6929067.sh 2010-11-04 16:12:15.000000000 -0700
+++ ./hotspot/test/runtime/6929067/Test6929067.sh 2010-04-20 20:10:00.000000000 -0700
@@ -29,7 +29,7 @@
PS=":"
FS="/"
;;
- SunOS | Windows_* )
+ SunOS | Windows_* | *BSD)
NULL=NUL
PS=";"
FS="\\"
--- ./jaxp/.hgtags 2010-11-04 16:12:20.000000000 -0700
+++ ./jaxp/.hgtags 2010-11-06 22:59:40.000000000 -0700
@@ -91,3 +91,4 @@
d57197d22c2bfc39d1a860040f655b466ab46f52 jdk7-b114
dc1612e1d3ac08eb8fcad764daff21c9247d33c9 jdk7-b115
f8d4e6c6cfce1cda23fcbd144628a9791a9e1a63 jdk7-b116
+9ee4d96e893436a48607924227dadd2d93b9b00d jdk7-b117
--- ./jaxp/.jcheck/conf 2010-11-04 16:12:20.000000000 -0700
+++ ./jaxp/.jcheck/conf 1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-project=jdk7
--- ./jaxws/.hgtags 2010-11-04 16:12:25.000000000 -0700
+++ ./jaxws/.hgtags 2010-11-06 22:59:44.000000000 -0700
@@ -91,3 +91,4 @@
400f494c81c5ec87714b705648afbb3cb680bf73 jdk7-b114
824cc44bd6eba9abae07cc420f7fe3926c1adbd9 jdk7-b115
376ac153078dd3b5f6d4a0981feee092c1492c96 jdk7-b116
+1320fb3bb588298c79716bd2d10b5b4afacb9370 jdk7-b117
--- ./jaxws/.jcheck/conf 2010-11-04 16:12:25.000000000 -0700
+++ ./jaxws/.jcheck/conf 1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-project=jdk7
--- ./jdk/.hgtags 2010-11-04 16:13:15.000000000 -0700
+++ ./jdk/.hgtags 2010-11-06 22:59:50.000000000 -0700
@@ -91,3 +91,4 @@
e250cef36ea05e627e7e6f7d75e5e19f529e2ba3 jdk7-b114
449bad8d67b5808ecf0f927683acc0a5940f8c85 jdk7-b115
1657ed4e1d86c8aa2028ab5a41f9da1ac4a369f8 jdk7-b116
+3e6726bbf80a4254ecd01051c8ed77ee19325e46 jdk7-b117
--- ./jdk/.jcheck/conf 2010-11-04 16:13:15.000000000 -0700
+++ ./jdk/.jcheck/conf 1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-project=jdk7
--- ./jdk/make/com/sun/java/pack/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/com/sun/java/pack/Makefile 2010-06-15 22:06:15.000000000 -0700
@@ -62,6 +62,7 @@
ifeq ($(STANDALONE),true)
+ ifneq ($(SYSTEM_ZLIB),true)
ZIPOBJDIR = $(OUTPUTDIR)/tmp/sun/java.util.zip/zip/$(OBJDIRNAME)
ZIPOBJS = $(ZIPOBJDIR)/zcrc32.$(OBJECT_SUFFIX) \
@@ -78,6 +79,10 @@
ZINCLUDE=-I$(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION)
OTHER_CXXFLAGS += $(ZINCLUDE)
LDDFLAGS += $(ZIPOBJS)
+ else
+ LDDFLAGS += -lz
+ OTHER_CXXFLAGS += -DSYSTEM_ZLIB
+ endif
else
OTHER_CXXFLAGS += -DNO_ZLIB -DUNPACK_JNI
OTHER_LDLIBS += $(JVMLIB)
@@ -99,7 +104,11 @@
RES = $(OBJDIR)/$(PGRM).res
else
LDOUTPUT = -o #Have a space
+ifeq ($(PLATFORM), bsd)
+ LDDFLAGS += -pthread
+else
LDDFLAGS += -lc
+endif
OTHER_LDLIBS += $(LIBCXX)
# setup the list of libraries to link in...
ifeq ($(PLATFORM), linux)
--- ./jdk/make/com/sun/nio/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/com/sun/nio/Makefile 2010-06-15 22:06:16.000000000 -0700
@@ -30,7 +30,16 @@
BUILDDIR = ../../..
include $(BUILDDIR)/common/Defs.gmk
+ifneq ($(PLATFORM), bsd)
SUBDIRS = sctp
+else
+ifeq ($(OS_VENDOR), FreeBSD)
+# FreeBSD 5.x and lower are unsupported, 6.x has no sctp support.
+ifneq ($(call MajorVersion,$(shell uname -r)), 6)
+SUBDIRS = sctp
+endif
+endif
+endif
include $(BUILDDIR)/common/Subdirs.gmk
all build clean clobber::
--- ./jdk/make/com/sun/nio/sctp/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/com/sun/nio/sctp/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -60,15 +60,11 @@
-I$(PLATFORM_SRC)/native/java/net \
-I$(CLASSHDRDIR)/../../../../java/java.nio/nio/CClassHeaders
+OTHER_LDLIBS += $(LIBSOCKET) -L$(LIBDIR)/$(LIBARCH) -lnet -lnio
ifeq ($(PLATFORM), linux)
COMPILER_WARNINGS_FATAL=true
-#OTHER_LDLIBS += -L$(LIBDIR)/$(LIBARCH) -ljava -lnet -lpthread -ldl
-OTHER_LDLIBS += -L$(LIBDIR)/$(LIBARCH) -lnio -lnet -lpthread -ldl
+OTHER_LDLIBS += -lpthread $(LIBDL)
endif
-ifeq ($(PLATFORM), solaris)
-#LIBSCTP = -lsctp
-OTHER_LDLIBS += $(LIBSOCKET) -L$(LIBDIR)/$(LIBARCH) -lnet -lnio
-endif # PLATFORM
else # windows
include $(BUILDDIR)/common/Classes.gmk
--- ./jdk/make/com/sun/security/auth/module/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/com/sun/security/auth/module/Makefile 2010-06-15 22:06:16.000000000 -0700
@@ -68,7 +68,7 @@
include FILES_c_solaris.gmk
endif # solaris
-ifeq ($(PLATFORM), linux)
+ifneq (,$(findstring $(PLATFORM), linux bsd))
LIBRARY = jaas_unix
include FILES_export_unix.gmk
include FILES_c_unix.gmk
--- ./jdk/make/com/sun/tools/attach/Exportedfiles.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/com/sun/tools/attach/Exportedfiles.gmk 2010-06-15 22:06:16.000000000 -0700
@@ -43,5 +43,7 @@
sun/tools/attach/LinuxVirtualMachine.java
endif
-
-
+ifeq ($(PLATFORM), bsd)
+FILES_export = \
+ sun/tools/attach/BsdVirtualMachine.java
+endif
--- ./jdk/make/com/sun/tools/attach/FILES_c.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/com/sun/tools/attach/FILES_c.gmk 2010-06-15 22:06:16.000000000 -0700
@@ -39,4 +39,7 @@
LinuxVirtualMachine.c
endif
-
+ifeq ($(PLATFORM),bsd)
+FILES_c = \
+ BsdVirtualMachine.c
+endif
--- ./jdk/make/com/sun/tools/attach/FILES_java.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/com/sun/tools/attach/FILES_java.gmk 2010-06-15 22:06:16.000000000 -0700
@@ -43,6 +43,11 @@
sun/tools/attach/LinuxAttachProvider.java
endif
+ifeq ($(PLATFORM), bsd)
+FILES_java += \
+ sun/tools/attach/BsdAttachProvider.java
+endif
+
#
# Files that need to be copied
#
--- ./jdk/make/com/sun/tools/attach/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/com/sun/tools/attach/Makefile 2010-06-15 22:06:16.000000000 -0700
@@ -37,6 +37,9 @@
ifeq ($(PLATFORM), linux)
FILES_m = mapfile-linux
endif
+ifeq ($(PLATFORM), bsd)
+FILES_m = mapfile-bsd
+endif
include $(BUILDDIR)/common/Mapfile-vers.gmk
#
--- ./jdk/make/com/sun/tools/attach/mapfile-bsd 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/make/com/sun/tools/attach/mapfile-bsd 2010-07-04 12:38:37.000000000 -0700
@@ -30,14 +30,12 @@
Java_sun_tools_attach_BsdVirtualMachine_checkPermissions;
Java_sun_tools_attach_BsdVirtualMachine_close;
Java_sun_tools_attach_BsdVirtualMachine_connect;
- Java_sun_tools_attach_BsdVirtualMachine_getBsdThreadsManager;
- Java_sun_tools_attach_BsdVirtualMachine_isBsdThreads;
Java_sun_tools_attach_BsdVirtualMachine_open;
Java_sun_tools_attach_BsdVirtualMachine_sendQuitTo;
- Java_sun_tools_attach_BsdVirtualMachine_sendQuitToChildrenOf;
Java_sun_tools_attach_BsdVirtualMachine_socket;
Java_sun_tools_attach_BsdVirtualMachine_read;
Java_sun_tools_attach_BsdVirtualMachine_write;
+ Java_sun_tools_attach_BsdVirtualMachine_createAttachFile;
local:
*;
};
--- ./jdk/make/common/Defs-bsd.gmk 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/make/common/Defs-bsd.gmk 2010-07-10 13:11:34.000000000 -0700
@@ -25,7 +25,7 @@
#
# Makefile to specify compiler flags for programs and libraries
-# targeted to Bsd. Should not contain any rules.
+# targeted to BSD. Should not contain any rules.
#
# WARNING: This file is shared with other workspaces.
# So when it includes other files, it must use JDK_TOPDIR.
@@ -61,7 +61,7 @@
endif
# platform specific include files
-PLATFORM_INCLUDE_NAME = $(PLATFORM)
+PLATFORM_INCLUDE_NAME = $(OS_NAME)
PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME)
# suffix used for make dependencies files.
@@ -109,9 +109,11 @@
# 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_amd64 += -m64 -fno-omit-frame-pointer -D_LITTLE_ENDIAN
+LDFLAGS_COMMON_amd64 += -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
@@ -126,9 +128,13 @@
CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH))
LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH))
endif
+ifeq ($(OS_VENDOR),Apple)
+ # 16-byte stack re-alignment on 32-bit Darwin
+ CFLAGS_REQUIRED_i586 += -mstackrealign
+endif
# If this is a --hash-style=gnu system, use --hash-style=both
-# The gnu .hash section won't work on some Bsd systems like SuSE 10.
+# 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
@@ -165,7 +171,7 @@
CFLAGS_COMMON += -pipe
endif
-# Bsd 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1
+# BSD 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1
DEBUG_FLAG = -g
ifeq ($(FASTDEBUG), true)
ifeq ($(ARCH_DATA_MODEL), 64)
@@ -202,8 +208,7 @@
else
CPP_ARCH_FLAGS += -D_$(ARCH)_
endif
-
-CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DBSD $(VERSION_DEFINES) \
+CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -D_ALLBSD_SOURCE $(VERSION_DEFINES) \
-D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT
ifeq ($(ARCH_DATA_MODEL), 64)
@@ -216,33 +221,37 @@
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 Bsd 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.
- #
+# 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.
+#
+ifeq ($(OS_VENDOR), Apple)
+ 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)
+else
LDFLAGS_COMMON += -Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN
LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-Xlinker -z -Xlinker 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)
+
+ifneq ($(OS_VENDOR), Apple)
+LDFLAGS_OPT = -Xlinker -O1
LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX)
+endif
#
# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always
@@ -264,9 +273,9 @@
ifeq ($(VARIANT), OPT)
ifneq ($(NO_STRIP), true)
ifneq ($(DEBUG_BINARIES), true)
- # Debug 'strip -g' leaves local function Elf symbols (better stack
+ # Debug 'strip -S' leaves local function Elf symbols (better stack
# traces)
- POST_STRIP_PROCESS = $(STRIP) -g
+ POST_STRIP_PROCESS = $(STRIP) -S
endif
endif
endif
@@ -285,6 +294,11 @@
LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS)
endif
+# Darwin does not support linker map files.
+ifeq ($(OS_VENDOR), Apple)
+LDNOMAP=true
+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
@@ -311,7 +325,9 @@
override HAVE_FILIOH = false
override HAVE_GETHRTIME = false
override HAVE_GETHRVTIME = false
+ifeq ($(OS_VENDOR),Apple)
override HAVE_SIGIGNORE = true
+endif
override LEX_LIBRARY = -lfl
ifeq ($(STATIC_CXX),true)
override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic
@@ -322,14 +338,11 @@
override LIBSOCKET =
override LIBNSL =
override LIBTHREAD =
+override LIBDL =
override MOOT_PRIORITIES = true
override NO_INTERRUPTIBLE_IO = true
-override OPENWIN_HOME = /usr/X11R6
-ifeq ($(ARCH), amd64)
-override OPENWIN_LIB = $(OPENWIN_HOME)/lib64
-else
+override OPENWIN_HOME = $(X11_PATH)
override OPENWIN_LIB = $(OPENWIN_HOME)/lib
-endif
override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER
override SUN_CMM_SUBDIR =
override THREADS_FLAG = native
@@ -350,6 +363,14 @@
# DPS (Displayable PostScript) is available on Solaris machines
HAVE_DPS = no
+ifeq ($(OS_VENDOR), FreeBSD)
+ SYSTEM_ZLIB = true
+endif
+
+ifeq ($(OS_VENDOR), OpenBSD)
+ SYSTEM_ZLIB = true
+endif
+
#
# Japanese manpages
#
@@ -361,7 +382,7 @@
SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX)
# The JDI - Serviceability Agent binding is not currently supported
-# on Bsd-ia64.
+# on ia64.
ifeq ($(ARCH), ia64)
INCLUDE_SA = false
else
--- ./jdk/make/common/Defs-linux.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/Defs-linux.gmk 2010-07-10 13:10:56.000000000 -0700
@@ -322,9 +322,10 @@
override LIBSOCKET =
override LIBNSL =
override LIBTHREAD =
+override LIBDL = -ldl
override MOOT_PRIORITIES = true
override NO_INTERRUPTIBLE_IO = true
-override OPENWIN_HOME = /usr/X11R6
+override OPENWIN_HOME = $(X11_PATH)
ifeq ($(ARCH), amd64)
override OPENWIN_LIB = $(OPENWIN_HOME)/lib64
else
--- ./jdk/make/common/Defs-solaris.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/Defs-solaris.gmk 2010-07-10 13:11:24.000000000 -0700
@@ -648,6 +648,9 @@
# Network Services library
LIBNSL = -lnsl
+# 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
--- ./jdk/make/common/Defs.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/Defs.gmk 2010-10-31 14:12:34.000000000 -0700
@@ -181,6 +181,36 @@
endif
endif # OPENJDK
+ifneq ($(PLATFORM), windows)
+ ifdef ALT_X11_PATH
+ X11_PATH = $(ALT_X11_PATH)
+ else
+ ifneq ($(OS_VENDOR), NetBSD)
+ X11_PATH = /usr/X11R6
+ else
+ X11_PATH = /usr/X11R7
+ endif
+ endif
+
+ ifdef ALT_PACKAGE_PATH
+ PACKAGE_PATH = $(ALT_PACKAGE_PATH)
+ else
+ ifeq ($(PLATFORM), linux)
+ PACKAGE_PATH = /usr
+ else
+ ifeq ($(OS_VENDOR), Apple)
+ PACKAGE_PATH = /opt/local
+ else
+ ifeq ($(OS_NAME), netbsd)
+ PACKAGE_PATH = /usr/pkg
+ else
+ PACKAGE_PATH = /usr/local
+ endif
+ endif
+ endif
+ endif
+endif
+
#
# Get platform definitions
#
@@ -216,6 +246,7 @@
ifdef ALT_FREETYPE_LIB_PATH
FREETYPE_LIB_PATH = $(ALT_FREETYPE_LIB_PATH)
+ USING_SYSTEM_FT_LIB=true
else
ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true)
FREETYPE_LIB_PATH = $(DEVTOOLS_FT_DIR)/lib
@@ -280,6 +311,10 @@
LDLIBS_COMMON = -ldl
endif
+ ifeq ($(PLATFORM), bsd)
+ LDLIBS_COMMON = -pthread
+ endif
+
endif # PROGRAM
LDLIBS_COMMON += $(EXTRA_LIBS)
--- ./jdk/make/common/Program.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/Program.gmk 2010-06-15 22:06:16.000000000 -0700
@@ -65,11 +65,27 @@
# 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.
+# do this reliably on Linux takes a different syntax than Solaris. BSD's
+# don't support $ORIGIN so build an archive instead.
#
# On Windows, this is done by using the same directory as the executable
# itself, as with all the Windows libraries.
#
+ifeq ($(PLATFORM), bsd)
+ ifeq ($(OS_VENDOR), Apple)
+ LDFLAGS += -Wl,-all_load
+ LDFLAGS += $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static/libjli.a
+ else
+ LDFLAGS += -Wl,--whole-archive
+ LDFLAGS += $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static/libjli.a
+ LDFLAGS += -Wl,--no-whole-archive
+# Work-around an dlsym(RTLD_DEFAULT) bug in at least FreeBSD & OpenBSD
+ LDFLAGS += -Wl,--export-dynamic
+ endif
+ ifeq ($(SYSTEM_ZLIB),true)
+ OTHER_LDLIBS += -lz
+ endif
+endif
ifneq (,$(findstring $(PLATFORM), linux solaris)) # UNIX systems
LDFLAGS += -L $(LIBDIR)/$(LIBARCH)/jli
OTHER_LDLIBS += -ljli
@@ -178,6 +194,10 @@
THREADLIBS = $(LIBTHREAD)
endif # USE_PTHREADS
+ifeq ($(PLATFORM), bsd)
+THREADLIBS = -pthread
+endif
+
#
# This rule only applies on unix. It supports quantify and its ilk.
#
@@ -247,15 +267,19 @@
ifneq ($(PLATFORM), windows)
+ifneq ($(PLATFORM), bsd)
HAVE_GETHRTIME=true
endif
+endif
ifeq ($(HAVE_GETHRTIME),true)
OTHER_CPPFLAGS += -DHAVE_GETHRTIME
endif
OTHER_INCLUDES += -I$(LAUNCHER_SHARE_SRC)/bin -I$(LAUNCHER_PLATFORM_SRC)/bin
+ifneq ($(SYSTEM_ZLIB),true)
OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/util/zip/zlib-1.1.3
+endif
OTHER_CPPFLAGS += -DPROGNAME='"$(PROGRAM)"'
VERSION_DEFINES += -DFULL_VERSION='"$(FULL_VERSION)"'
--- ./jdk/make/common/Release.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/Release.gmk 2010-10-31 14:12:34.000000000 -0700
@@ -154,14 +154,13 @@
tnameserv.1 \
unpack200.1
-ifeq ($(ARCH_DATA_MODEL),32)
+ifeq ($(BUILD_DEPLOY), true)
JRE_MAN_PAGES += javaws.1
endif
JDK_MAN_PAGES = \
$(JRE_MAN_PAGES) \
appletviewer.1 \
- apt.1 \
extcheck.1 \
idlj.1 \
jar.1 \
@@ -200,6 +199,11 @@
JA_DIRNAME=ja_JP.$(JA_SOURCE_ENCODING)
endif # linux
+ifeq ($(PLATFORM), bsd)
+ MANBASEDIRS=$(JDK_TOPDIR)/src/bsd/doc $(IMPORTDOCDIR)
+ MAN1SUBDIR = man
+endif
+
define copy-man-pages
$(MKDIR) -p $1/man/man1
for manbase in $(MANBASEDIRS:%=%/$(MAN1SUBDIR)) ; do \
@@ -332,6 +336,12 @@
SOURCE_DIRS += $(CLOSED_SRC)/share/classes
endif
+ifeq ($(OS_VENDOR), OpenBSD)
+ FILES_FROM_ARG=-I
+else
+ FILES_FROM_ARG=-T
+endif
+
#
# Specific files and directories that will be filtered out from above areas.
@@ -1027,7 +1037,7 @@
@# 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.
- ifeq ($(PLATFORM), linux)
+ ifneq (,$(findstring $(PLATFORM), linux bsd))
for d in $(SOURCE_DIRS); do \
$(RM) $(ABS_TEMPDIR)/src-files.list; \
($(CD) $$d && \
@@ -1040,7 +1050,7 @@
done ; \
) ; \
if [ -f $(ABS_TEMPDIR)/src-files.list ] ; then \
- ($(CD) $$d && $(TAR) cf - -T $(ABS_TEMPDIR)/src-files.list ) \
+ ($(CD) $$d && $(TAR) cf - $(FILES_FROM_ARG) $(ABS_TEMPDIR)/src-files.list ) \
| ($(CD) $(JDK_IMAGE_DIR)/src && $(TAR) xf -); \
fi; \
done
--- ./jdk/make/common/internal/BinaryPlugs.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/internal/BinaryPlugs.gmk 2010-06-15 22:06:16.000000000 -0700
@@ -49,8 +49,6 @@
com/sun/jmx/snmp/SnmpDataTypeEnums.class \
com/sun/jmx/snmp/SnmpDefinitions.class \
com/sun/jmx/snmp/SnmpOid.class \
-com/sun/jmx/snmp/SnmpOidDatabase.class \
-com/sun/jmx/snmp/SnmpOidDatabaseSupport.class \
com/sun/jmx/snmp/SnmpOidRecord.class \
com/sun/jmx/snmp/SnmpOidTable.class \
com/sun/jmx/snmp/SnmpOidTableSupport.class \
@@ -60,22 +58,16 @@
com/sun/jmx/snmp/SnmpTimeticks.class \
com/sun/jmx/snmp/SnmpVarBind.class \
com/sun/jmx/snmp/SnmpVarBindList.class \
-com/sun/jmx/snmp/Timestamp.class \
com/sun/jmx/snmp/daemon/SendQ.class \
com/sun/jmx/snmp/daemon/SnmpInformRequest.class \
-com/sun/jmx/snmp/daemon/SnmpQManager.class \
-com/sun/jmx/snmp/daemon/SnmpRequestCounter.class \
-com/sun/jmx/snmp/daemon/SnmpResponseHandler.class \
-com/sun/jmx/snmp/daemon/SnmpSendServer.class \
-com/sun/jmx/snmp/daemon/SnmpSession.class \
-com/sun/jmx/snmp/daemon/SnmpSocket.class \
-com/sun/jmx/snmp/daemon/SnmpTimerServer.class \
-com/sun/jmx/snmp/daemon/WaitQ.class
+com/sun/jmx/snmp/daemon/SnmpSession.class
+
+PLUG_GNU_CLASS_NAMES = gnu
# Class list temp files (used by both import and export of plugs)
PLUG_TEMPDIR=$(ABS_TEMPDIR)/plugs
-PLUG_CLASS_AREAS = jmf
+PLUG_CLASS_AREAS = jmf gnu
PLUG_CLISTS = $(PLUG_CLASS_AREAS:%=$(PLUG_TEMPDIR)/%.clist)
# Create jargs file command
@@ -93,11 +85,18 @@
@for i in $(PLUG_JMF_CLASS_NAMES) ; do \
$(ECHO) "$$i" >> $@; \
done
+$(PLUG_TEMPDIR)/gnu.clist:
+ @$(prep-target)
+ @for i in $(PLUG_GNU_CLASS_NAMES) ; do \
+ $(ECHO) "$$i" >> $@ ; \
+ done
$(PLUG_TEMPDIR)/all.clist: $(PLUG_CLISTS)
@$(prep-target)
$(CAT) $(PLUG_CLISTS) > $@
$(PLUG_TEMPDIR)/jmf.jargs: $(PLUG_TEMPDIR)/jmf.clist
$(plug-create-jargs)
+$(PLUG_TEMPDIR)/gnu.jargs: $(PLUG_TEMPDIR)/gnu.clist
+ $(plug-create-jargs)
$(PLUG_TEMPDIR)/all.jargs: $(PLUG_TEMPDIR)/all.clist
$(plug-create-jargs)
@@ -133,10 +132,14 @@
import-binary-plug-jmf-classes: $(PLUG_IMPORT_JARFILE) $(PLUG_TEMPDIR)/jmf.clist
$(call import-binary-plug-classes,$(PLUG_TEMPDIR)/jmf.clist)
+import-binary-plug-gnu-classes: $(PLUG_IMPORT_JARFILE) $(PLUG_TEMPDIR)/gnu.clist
+ $(call import-binary-plug-classes,$(PLUG_TEMPDIR)/gnu.clist)
+
# Import all classes from the jar file
import-binary-plug-jar: \
- import-binary-plug-jmf-classes
+ import-binary-plug-jmf-classes \
+ import-binary-plug-gnu-classes
# Binary plug start/complete messages
@@ -148,14 +151,12 @@
# Import lib files (only if they don't exist already)
-import-binary-plugs-libs: \
- $(PLUG_LIBRARY_NAMES:%=$(LIB_LOCATION)/%)
+import-binary-plugs-libs:
# Import everything
import-binary-plugs: \
import-binary-plugs-started \
- import-binary-plugs-libs \
import-binary-plug-jar \
import-binary-plugs-completed
--- ./jdk/make/common/shared/Compiler-gcc.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/shared/Compiler-gcc.gmk 2010-06-15 22:06:16.000000000 -0700
@@ -72,6 +72,24 @@
endif
+ifeq ($(PLATFORM), bsd)
+
+ # Settings specific to BSD
+ CC = $(COMPILER_PATH)gcc
+ CPP = $(COMPILER_PATH)gcc -E
+ CXX = $(COMPILER_PATH)g++
+ REQUIRED_CC_VER = 3.2
+
+ # Option used to create a shared library
+ # Option used to create a shared library
+ ifeq ($(OS_VENDOR), Apple)
+ SHARED_LIBRARY_FLAG = -dynamiclib
+ else
+ SHARED_LIBRARY_FLAG = -shared
+ endif
+ SUN_COMP_VER := $(shell $(CC) --verbose 2>&1 )
+endif
+
ifeq ($(PLATFORM), solaris)
# Settings specific to Solaris
--- ./jdk/make/common/shared/Defs-bsd.gmk 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/make/common/shared/Defs-bsd.gmk 2010-07-04 12:38:37.000000000 -0700
@@ -54,7 +54,7 @@
endef
# Location on system where jdk installs might be
-USRJDKINSTANCES_PATH =/opt/java
+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.
@@ -107,7 +107,7 @@
ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined"
DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH))
else
- DEVTOOLS_PATH =/usr/bin/
+ DEVTOOLS_PATH =$(PACKAGE_PATH)/bin/
endif
# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK.
@@ -121,16 +121,12 @@
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.
-ifneq "$(origin ALT_GCC29_COMPILER_PATH)" "undefined"
- GCC29_COMPILER_PATH :=$(call PrefixPath,$(ALT_GCC29_COMPILER_PATH))
+ifeq ($(OS_VENDOR), Apple)
+ _CUPS_HEADERS_PATH=/usr/include
else
- GCC29_COMPILER_PATH = $(JDK_DEVTOOLS_DIR)/$(PLATFORM)/gcc29/usr/
+ _CUPS_HEADERS_PATH=$(PACKAGE_PATH)/include
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.
--- ./jdk/make/common/shared/Defs-utils.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/shared/Defs-utils.gmk 2010-10-31 14:12:34.000000000 -0700
@@ -67,6 +67,13 @@
UTILS_DEVTOOL_PATH=$(DEVTOOLS_PATH)
endif
+ifeq ($(PLATFORM),bsd)
+ UTILS_COMMAND_PATH=$(UNIXCOMMAND_PATH)
+ UTILS_USR_BIN_PATH=$(USRBIN_PATH)
+ UTILS_CCS_BIN_PATH=$(USRBIN_PATH)
+ UTILS_DEVTOOL_PATH=$(DEVTOOLS_PATH)
+endif
+
# Utilities
ADB = $(UTILS_COMMAND_PATH)adb
AR = $(UTILS_CCS_BIN_PATH)ar
@@ -202,3 +209,39 @@
ECHO = /usr/bin/echo
endif
+# BSD specific
+ifeq ($(PLATFORM),bsd)
+ BASENAME = $(UTILS_USR_BIN_PATH)basename
+ EGREP = $(UTILS_USR_BIN_PATH)egrep
+ EXPR = $(UTILS_COMMAND_PATH)expr
+ FMT = $(UTILS_USR_BIN_PATH)fmt
+ GREP = $(UTILS_USR_BIN_PATH)grep
+ GUNZIP = $(UTILS_USR_BIN_PATH)gunzip
+ ID = $(UTILS_USR_BIN_PATH)id
+ MSGFMT = $(UTILS_DEVTOOL_PATH)msgfmt
+ SED = $(UTILS_USR_BIN_PATH)sed
+ SORT = $(UTILS_USR_BIN_PATH)sort
+ TEST = $(UTILS_COMMAND_PATH)test
+ TOUCH = $(UTILS_USR_BIN_PATH)touch
+ TRUE = $(UTILS_USR_BIN_PATH)true
+ UNAME = $(UTILS_USR_BIN_PATH)uname
+ # BSD OS_VENDOR specific
+ ifeq ($(OS_VENDOR), Apple)
+ NAWK = $(UTILS_USR_BIN_PATH)awk
+ UNZIPSFX = $(UTILS_USR_BIN_PATH)unzipsfx
+ ZIPEXE = $(UTILS_USR_BIN_PATH)zip
+ else
+ UNZIP = $(UTILS_DEVTOOL_PATH)unzip
+ endif
+ ifeq ($(OS_VENDOR), OpenBSD)
+ NAWK = $(UTILS_USR_BIN_PATH)awk
+ else
+ CPIO = $(UTILS_USR_BIN_PATH)cpio
+ TAR = $(UTILS_USR_BIN_PATH)tar
+ endif
+ ifeq ($(OS_VENDOR), NetBSD)
+ NAWK = $(UTILS_USR_BIN_PATH)awk
+ ZIPEXE = $(UTILS_DEVTOOL_PATH)zip
+ UNZIP = $(UTILS_DEVTOOL_PATH)unzip
+ endif
+endif
--- ./jdk/make/common/shared/Defs.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/shared/Defs.gmk 2010-10-31 14:12:34.000000000 -0700
@@ -613,8 +613,8 @@
override CC_VERSION = sun
endif
-# Linux uses GNU compilers by default
-ifeq ($(PLATFORM), linux)
+# Linux & BSD uses GNU compilers by default
+ifneq (,$(findstring $(PLATFORM), linux bsd))
override CC_VERSION = gcc
endif
--- ./jdk/make/common/shared/Platform.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/shared/Platform.gmk 2010-06-15 22:06:17.000000000 -0700
@@ -82,7 +82,7 @@
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
+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 -o -name \*.orig \) -prune
# Don't define this unless it's not defined
ifndef VARIANT
@@ -214,6 +214,101 @@
MB_OF_MEMORY := $(shell free -m | fgrep Mem: | awk '{print $$2;}' )
endif
+ifeq ($(SYSTEM_UNAME), FreeBSD)
+ PLATFORM = bsd
+ OS_NAME = freebsd
+ OS_VENDOR = FreeBSD
+ REQUIRED_OS_VERSION = 6.0
+endif
+
+ifeq ($(SYSTEM_UNAME), Darwin)
+ PLATFORM = bsd
+ OS_NAME = darwin
+ OS_VENDOR = Apple
+ REQUIRED_OS_VERSION = 8.0
+endif
+
+ifeq ($(SYSTEM_UNAME), NetBSD)
+ PLATFORM = bsd
+ OS_NAME = netbsd
+ OS_VENDOR = NetBSD
+ REQUIRED_OS_VERSION = 3.0
+endif
+
+ifeq ($(SYSTEM_UNAME), OpenBSD)
+ PLATFORM = bsd
+ OS_NAME = openbsd
+ OS_VENDOR = OpenBSD
+ REQUIRED_OS_VERSION = 4.2
+endif
+
+# Platform settings specific to BSD
+ifeq ($(PLATFORM), bsd)
+ OS_VERSION := $(shell uname -r)
+ # Arch and OS name/version
+ mach := $(shell uname -m)
+ archExpr = case "$(mach)" in \
+ i[3-9]86) \
+ echo i586 \
+ ;; \
+ sparc64) \
+ echo sparcv9 \
+ ;; \
+ sparc*) \
+ echo sparc \
+ ;; \
+ x86_64) \
+ echo amd64 \
+ ;; \
+ "Power Macintosh") \
+ echo ppc \
+ ;; \
+ *) \
+ echo $(mach) \
+ ;; \
+ esac
+ ARCH := $(shell $(archExpr) )
+ ARCH_FAMILY := $(ARCH)
+
+ # Darwin builds may be 32-bit or 64-bit data model.
+ ifeq ($(SYSTEM_UNAME), Darwin)
+ ifeq ($(ARCH), i586)
+ ifeq ($(ARCH_DATA_MODEL), 64)
+ ARCH=amd64
+ endif
+ endif
+ endif
+
+ # i586, sparc, and ppc are 32 bit, amd64 and sparc64 are 64
+ ifneq (,$(findstring $(ARCH), i586 sparc ppc))
+ 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
+ # Minimum disk space needed as determined by running 'du -sk' on
+ # a fully built workspace.
+ REQUIRED_FREE_SPACE=1500000
+ # How much RAM does this machine have:
+ ifeq ($(OS_VENDOR), OpenBSD)
+ MB_OF_MEMORY=$(shell sysctl -n hw.physmem | awk '{print int($$NF / 1048576); }' )
+ else
+ MB_OF_MEMORY=$(shell (sysctl -n hw.physmem64 2> /dev/null || sysctl -n hw.physmem) | awk '{print int($$NF / 1048576); }' )
+ endif
+endif
+
# Windows with and without CYGWIN will be slightly different
ifeq ($(SYSTEM_UNAME), Windows_NT)
PLATFORM = windows
@@ -404,6 +499,14 @@
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
+ LIB_SUFFIX = dylib
+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.
@@ -443,6 +546,18 @@
export MIN_VM_MEMORY
endif
+# for OpenBSD/i386 limit to 736 max
+ifeq ($(OS_VENDOR), OpenBSD)
+ ifeq ($(ARCH_DATA_MODEL), 32)
+ MAX_VM_MEMORY := $(shell \
+ if [ $(MAX_VM_MEMORY) -gt 736 ] ; then \
+ echo "736"; \
+ else \
+ echo "$(MAX_VM_MEMORY)" ; \
+ fi)
+ endif
+endif
+
# If blanks in the username, use the first 4 words and pack them together
_USER1:=$(subst ', ,$(_USER))
_USER2:=$(subst ", ,$(_USER1))
--- ./jdk/make/common/shared/Sanity-Settings.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/shared/Sanity-Settings.gmk 2010-06-15 22:06:17.000000000 -0700
@@ -244,6 +244,7 @@
ALL_SETTINGS+=$(call addHeading,OpenJDK-specific settings)
ALL_SETTINGS+=$(call addAltSetting,FREETYPE_HEADERS_PATH)
ALL_SETTINGS+=$(call addAltSetting,FREETYPE_LIB_PATH)
+ ALL_SETTINGS+=$(call addAltSetting,X11_PATH)
ALL_SETTINGS+=$(call addHeading,OPENJDK Import Binary Plug Settings)
ALL_SETTINGS+=$(call addOptionalSetting,IMPORT_BINARY_PLUGS)
ALL_SETTINGS+=$(call addAltSetting,BINARY_PLUGS_JARFILE)
--- ./jdk/make/common/shared/Sanity.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/common/shared/Sanity.gmk 2010-06-15 22:06:17.000000000 -0700
@@ -142,6 +142,11 @@
$(EGREP) "\#define" | $(NAWK) '{print $$3}')
endif
+ifeq ($(PLATFORM), bsd)
+ FREE_SPACE := $(shell BLOCKSIZE=512 $(DF) $(OUTPUTDIR) | $(TAIL) -1 | $(NAWK) '{print $$2;}')
+ TEMP_FREE_SPACE := $(shell BLOCKSIZE=512 $(DF) $(TEMP_DISK) | $(TAIL) -1 | $(NAWK) '{print $$2;}')
+endif
+
# Get the version numbers of what we are using
_MAKE_VER :=$(shell $(MAKE) --version 2>&1 | $(HEAD) -n 1)
_ZIP_VER :=$(shell $(ZIPEXE) -help 2>&1 | $(HEAD) -n 4 | $(EGREP) '^Zip')
@@ -878,8 +883,10 @@
######################################################
# Check for existence of DEVTOOLS_PATH
+# All needed tools come with base system on Apple
######################################################
sane-devtools_path:
+ifneq ($(OS_VENDOR), Apple)
@if [ "$(DEVTOOLS_PATH)" != "" -a ! -r "$(DEVTOOLS_PATH)" ]; then \
$(ECHO) "ERROR: You do not have a valid DEVTOOLS_PATH setting. \n" \
" Please check your access to \n" \
@@ -887,6 +894,7 @@
" and/or check your value of ALT_DEVTOOLS_PATH. \n" \
"" >> $(ERROR_FILE) ; \
fi
+endif
######################################################
# Check for existence of MS_RUNTIME_LIBRARIES
--- ./jdk/make/java/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/Makefile 2010-06-15 22:06:17.000000000 -0700
@@ -53,7 +53,7 @@
endif
endif # PLATFORM
-ifeq ($(PLATFORM), linux)
+ifneq (,$(findstring $(PLATFORM), linux bsd))
SUBDIRS += jexec
endif # PLATFORM
--- ./jdk/make/java/hpi/hpi_common.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/hpi/hpi_common.gmk 2010-07-10 12:44:13.000000000 -0700
@@ -86,5 +86,5 @@
# Things that must be linked in.
#
ifneq ($(PLATFORM), windows)
-OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) $(LIBM) -ldl
+OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) $(LIBM) $(LIBDL)
endif
--- ./jdk/make/java/hpi/native/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/hpi/native/Makefile 2010-06-15 22:06:17.000000000 -0700
@@ -73,16 +73,25 @@
ifeq ($(MOOT_PRIORITIES),true)
OTHER_CPPFLAGS += -DMOOT_PRIORITIES
endif
+ifeq ($(PLATFORM), bsd)
+LIBPOSIX4 =
+OTHER_LDLIBS += -pthread
+else
LIBPOSIX4 = -lposix4
OTHER_LDLIBS += -lpthread $(LIBPOSIX4)
endif
+endif
+ifneq ($(PLATFORM), bsd)
HAVE_GETHRVTIME=true
+endif
ifeq ($(HAVE_GETHRVTIME),true)
OTHER_CPPFLAGS += -DHAVE_GETHRVTIME
endif
+ifneq ($(OS_VENDOR), OpenBSD)
HAVE_FILIOH=true
+endif
ifeq ($(HAVE_FILIOH),true)
OTHER_CPPFLAGS += -DHAVE_FILIOH
endif
--- ./jdk/make/java/instrument/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/instrument/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -103,9 +103,29 @@
# equivalent of strcasecmp is stricmp on Windows
CPPFLAGS_COMMON += -Dstrcasecmp=stricmp
else
+ifeq ($(PLATFORM), bsd)
+ ifeq ($(OS_VENDOR), Apple)
+ LDFLAGS += -Wl,-all_load
+ LDFLAGS += $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static/libjli.a
+ OTHER_LDLIBS += -liconv
+ else
+ LDFLAGS += -Wl,--whole-archive
+ LDFLAGS += $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static/libjli.a
+ LDFLAGS += -Wl,--no-whole-archive
+ ifneq ($(OS_NAME), netbsd)
+# Use CPPFLAGS instead of OTHER_INCLUDES to force this last
+ CPPFLAGS += -I$(PACKAGE_PATH)/include
+ OTHER_LDLIBS += -L$(PACKAGE_PATH)/lib -liconv
+ endif
+ endif
+
+ ifeq ($(SYSTEM_ZLIB), true)
+ OTHER_LDLIBS += -lz
+ endif
+else
LDFLAGS += -L $(LIBDIR)/$(LIBARCH)/jli
OTHER_LDLIBS += -ljli
- OTHER_LDLIBS += -ldl
+ OTHER_LDLIBS += $(LIBDL)
ifeq ($(PLATFORM), solaris)
LDFLAGS += -R \$$ORIGIN/jli
endif
@@ -115,6 +135,7 @@
LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/jli
endif
endif
+endif
#
# Library to compile.
--- ./jdk/make/java/java/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/java/Makefile 2010-07-10 12:44:56.000000000 -0700
@@ -166,8 +166,10 @@
# Is the altzone extern documented in ctime(3C) available?
#
ifneq ($(PLATFORM), windows)
+ifneq ($(PLATFORM), bsd)
HAVE_ALTZONE=true
endif
+endif
ifeq ($(HAVE_ALTZONE),true)
OTHER_CPPFLAGS += -DHAVE_ALTZONE
@@ -204,7 +206,7 @@
OTHER_LDLIBS += $(JVMLIB) -libpath:$(OBJDIR)/../../../fdlibm/$(OBJDIRNAME) fdlibm.lib \
-libpath:$(OBJDIR)/../../../verify/$(OBJDIRNAME) verify.lib
else
-OTHER_LDLIBS += $(JVMLIB) -lverify $(LIBSOCKET) $(LIBNSL) -ldl \
+OTHER_LDLIBS += $(JVMLIB) -lverify $(LIBSOCKET) $(LIBNSL) $(LIBDL) \
-L$(OBJDIR)/../../../fdlibm/$(OBJDIRNAME) -lfdlibm.$(ARCH)
endif
--- ./jdk/make/java/java/genlocales.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/java/genlocales.gmk 2010-06-15 22:06:17.000000000 -0700
@@ -76,10 +76,14 @@
$(LocaleDataMetaInfo_Dest):$(LocaleDataMetaInfo_Src) $(LOCALEGEN_SH)
@$(RM) $@.tmp.euro $@.tmp.noneuro;
@$(prep-target)
- @$(ECHO) $(subst .properties,'\n',$(Euro_Resources_properties)) > $@.tmp.euro;
- @$(ECHO) $(subst .java,'\n',$(Euro_Resources_java)) >> $@.tmp.euro;
- @$(ECHO) $(subst .properties,'\n',$(NonEuro_Resources_properties)) > $@.tmp.noneuro;
- @$(ECHO) $(subst .java,'\n',$(NonEuro_Resources_java)) >> $@.tmp.noneuro;
+ @$(ECHO) $(Euro_Resources_properties) | $(SED) -e s@.properties@'\
+'@g > $@.tmp.euro;
+ @$(ECHO) $(Euro_Resources_java) | $(SED) -e s@.java@'\
+'@g >> $@.tmp.euro;
+ @$(ECHO) $(NonEuro_Resources_properties) | $(SED) -e s@.properties@'\
+'@g > $@.tmp.noneuro;
+ @$(ECHO) $(NonEuro_Resources_java) | $(SED) -e s@.java@'\
+'@g >> $@.tmp.noneuro;
NAWK="$(NAWK)" SED="$(SED)" SORT="$(SORT)" \
$(SH) $(LOCALEGEN_SH) $(RESOURCE_NAMES) $@.tmp.euro \
$@.tmp.noneuro $< $@
--- ./jdk/make/java/java/localegen.sh 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/java/localegen.sh 2010-06-15 22:06:17.000000000 -0700
@@ -55,9 +55,9 @@
for FILE in $RESOURCE_NAMES
do
getlocalelist $FILE $EURO_FILES_LIST
- sed_script=$sed_script"-e \"s/#"$FILE"_EuroLocales#/$localelist/g\" "
+ sed_script=$sed_script"-e \"s@#"$FILE"_EuroLocales#@$localelist@g\" "
getlocalelist $FILE $NONEURO_FILES_LIST
- sed_script=$sed_script"-e \"s/#"$FILE"_NonEuroLocales#/$localelist/g\" "
+ sed_script=$sed_script"-e \"s@#"$FILE"_NonEuroLocales#@$localelist@g\" "
done
sed_script=$sed_script"$INPUT_FILE > $OUTPUT_FILE"
--- ./jdk/make/java/java_hprof_demo/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/java_hprof_demo/Makefile 2010-07-10 12:45:09.000000000 -0700
@@ -84,7 +84,7 @@
ifeq ($(PLATFORM), windows)
OTHER_LDLIBS += wsock32.lib winmm.lib
else
- OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl
+ OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) $(LIBDL)
endif
#
--- ./jdk/make/java/jli/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/jli/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -45,7 +45,9 @@
include $(BUILDDIR)/common/Defs.gmk
+ifneq ($(SYSTEM_ZLIB),true)
ZIP_SRC = $(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION)
+endif
LAUNCHER_SHARE_SRC = $(SHARE_SRC)/bin
LAUNCHER_PLATFORM_SRC = $(PLATFORM_SRC)/bin
@@ -70,13 +72,17 @@
parse_manifest.c \
version_comp.c \
wildcard.c \
- jli_util.c \
+ jli_util.c
+
+ifneq ($(SYSTEM_ZLIB),true)
+FILES_c += \
inflate.c \
inftrees.c \
inffast.c \
zadler32.c \
zcrc32.c \
zutil.c
+endif
ifneq ($(PLATFORM), windows)
@@ -93,7 +99,7 @@
LIBARCH_DEFINES += -DLIBARCH64NAME='"$(LIBARCH64)"'
endif
-OTHER_CPPFLAGS += $(LIBARCH_DEFINES)
+OTHER_CPPFLAGS += $(LIBARCH_DEFINES) -DPACKAGE_PATH=\"$(PACKAGE_PATH)\"
ifneq ($(PLATFORM), windows) # UNIX systems
@@ -102,7 +108,7 @@
# Note: its important to keep this order meaning -lc is the
# last library otherwise it could cause compatibility issues
# by pulling in SUNW_private symbols from libc
- LDLIBS = -ldl -lc
+ LDLIBS = $(LIBDL) -lc
ifeq ($(USE_PTHREADS),true)
LDLIBS += -lpthread
endif # USE_PTHREADS
@@ -126,7 +132,11 @@
OTHER_INCLUDES += -I$(LAUNCHER_SHARE_SRC)
OTHER_INCLUDES += -I$(LAUNCHER_PLATFORM_SRC)
-OTHER_INCLUDES += -I$(ZIP_SRC)
+ifneq ($(SYSTEM_ZLIB),true)
+ OTHER_INCLUDES += -I$(ZIP_SRC)
+else
+ LDLIBS += -lz
+endif
#
# Library to compile.
@@ -163,7 +173,28 @@
endif # PLATFORM
+ifeq ($(PLATFORM), bsd)
+
+STATIC_LIBRARY_DIR = $(OBJDIR)/static
+STATIC_LIBRARY_NAME = lib$(LIBRARY).a
+STATIC_LIBRARY = $(STATIC_LIBRARY_DIR)/$(STATIC_LIBRARY_NAME)
+
+$(STATIC_LIBRARY_DIR): $(OBJDIR)
+ @$(MKDIR) $(STATIC_LIBRARY_DIR)
+
+$(STATIC_LIBRARY): $(STATIC_LIBRARY_DIR)
+ @$(prep-target)
+ $(AR) -r $@ $(FILES_o)
+
+library:: $(STATIC_LIBRARY)
+
+endif # PLATFORM
+
#
# Add to ambient vpath so we pick up the library files
#
-vpath %.c $(LAUNCHER_SHARE_SRC) $(ZIP_SRC) $(LAUNCHER_PLATFORM_SRC)
+vpath %.c $(LAUNCHER_SHARE_SRC) $(LAUNCHER_PLATFORM_SRC)
+ifneq ($(SYSTEM_ZLIB),true)
+ vpath %.c $(ZIP_SRC)
+endif
+
--- ./jdk/make/java/management/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/management/Makefile 2010-06-15 22:06:17.000000000 -0700
@@ -86,6 +86,11 @@
OTHER_INCLUDES += \
-I$(SHARE_SRC)/native/sun/management
+ifeq ($(PLATFORM),bsd)
+OTHER_INCLUDES += \
+ -I$(PLATFORM_SRC)/hpi/include
+endif
+
ifeq ($(PLATFORM),windows)
OTHER_LDLIBS += $(JVMLIB)
endif
--- ./jdk/make/java/net/FILES_c.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/net/FILES_c.gmk 2010-10-31 14:12:34.000000000 -0700
@@ -43,6 +43,10 @@
FILES_c += linux_close.c
endif
+ifeq ($(OS_VENDOR), FreeBSD)
+ FILES_c += $(CTARGDIR)bsd_close.c
+endif
+
ifeq ($(PLATFORM), windows)
FILES_c += TwoStacksPlainSocketImpl.c
FILES_c += DualStackPlainSocketImpl.c
--- ./jdk/make/java/net/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/net/Makefile 2010-10-31 14:12:34.000000000 -0700
@@ -96,14 +96,21 @@
include $(BUILDDIR)/common/Library.gmk
+ifeq ($(PLATFORM), bsd)
+ifdef DONT_ENABLE_IPV6
+ OTHER_CFLAGS += -DDONT_ENABLE_IPV6
+endif
+ OTHER_LDLIBS = $(JVMLIB) -pthread
+else
ifeq ($(PLATFORM), windows)
OTHER_LDLIBS = ws2_32.lib $(JVMLIB)
else
- OTHER_LDLIBS = $(LIBSOCKET) $(LIBNSL) -ldl $(JVMLIB)
+ OTHER_LDLIBS = $(LIBSOCKET) $(LIBNSL) $(LIBDL) $(JVMLIB)
endif
ifeq ($(PLATFORM), linux)
OTHER_LDLIBS += -lpthread
endif
+endif # PLATFORM == bsd
CLASSES.export += java.lang.Integer java.io.FileDescriptor java.net.InetAddressImplFactory java.net.Inet4AddressImpl java.net.Inet6AddressImpl
--- ./jdk/make/java/nio/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/nio/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -261,6 +261,69 @@
sun/nio/fs/UnixConstants.java
endif # PLATFORM = linux
+ifeq ($(PLATFORM), bsd)
+FILES_java += \
+ sun/nio/ch/AbstractPollSelectorImpl.java \
+ sun/nio/ch/InheritedChannel.java \
+ sun/nio/ch/PollSelectorProvider.java \
+ sun/nio/ch/PollSelectorImpl.java \
+ sun/nio/ch/Port.java \
+ sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \
+ sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \
+ sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \
+ \
+ sun/nio/fs/GnomeFileTypeDetector.java \
+ sun/nio/fs/BsdFileStore.java \
+ sun/nio/fs/BsdFileSystem.java \
+ sun/nio/fs/BsdFileSystemProvider.java \
+ sun/nio/fs/BsdNativeDispatcher.java \
+ sun/nio/fs/PollingWatchService.java \
+ sun/nio/fs/UnixChannelFactory.java \
+ sun/nio/fs/UnixCopyFile.java \
+ sun/nio/fs/UnixDirectoryStream.java \
+ sun/nio/fs/UnixException.java \
+ sun/nio/fs/UnixFileAttributeViews.java \
+ sun/nio/fs/UnixFileAttributes.java \
+ sun/nio/fs/UnixFileKey.java \
+ sun/nio/fs/UnixFileModeAttribute.java \
+ sun/nio/fs/UnixFileStore.java \
+ sun/nio/fs/UnixFileStoreAttributes.java \
+ sun/nio/fs/UnixFileSystem.java \
+ sun/nio/fs/UnixFileSystemProvider.java \
+ sun/nio/fs/UnixMountEntry.java \
+ sun/nio/fs/UnixNativeDispatcher.java \
+ sun/nio/fs/UnixPath.java \
+ sun/nio/fs/UnixSecureDirectoryStream.java \
+ sun/nio/fs/UnixUriUtils.java \
+ sun/nio/fs/UnixUserPrincipals.java
+
+FILES_c += \
+ InheritedChannel.c \
+ NativeThread.c \
+ PollArrayWrapper.c \
+ UnixAsynchronousServerSocketChannelImpl.c \
+ UnixAsynchronousSocketChannelImpl.c \
+ \
+ GnomeFileTypeDetector.c \
+ BsdNativeDispatcher.c \
+ UnixCopyFile.c \
+ UnixNativeDispatcher.c
+
+FILES_export += \
+ sun/nio/ch/InheritedChannel.java \
+ sun/nio/ch/NativeThread.java \
+ sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \
+ sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \
+ \
+ sun/nio/fs/GnomeFileTypeDetector.java \
+ sun/nio/fs/BsdNativeDispatcher.java \
+ sun/nio/fs/UnixCopyFile.java \
+ sun/nio/fs/UnixNativeDispatcher.java
+
+FILES_gen += \
+ sun/nio/fs/UnixConstants.java
+endif # PLATFORM = bsd
+
#
# Find platform-specific C source files
#
@@ -285,19 +348,28 @@
-I$(PLATFORM_SRC)/native/java/net \
-I$(CLASSHDRDIR)/../../../java.lang/java/CClassHeaders
+ifeq ($(PLATFORM), bsd)
+OTHER_INCLUDES += \
+ -I$(PLATFORM_SRC)/hpi/include
+endif
+
ifeq ($(PLATFORM),windows)
OTHER_LDLIBS += $(JVMLIB) ws2_32.lib \
-libpath:$(LIBDIR) java.lib \
$(OBJDIR)/../../../../sun/java.net/net/$(OBJDIRNAME)/net.lib \
$(OBJDIR)/../../../java.lang/java/$(OBJDIRNAME)/io_util.obj \
$(OBJDIR)/../../../java.lang/java/$(OBJDIRNAME)/FileDescriptor_md.obj
-endif
+else
+ifeq ($(PLATFORM), solaris)
+OTHER_LDLIBS += $(JVMLIB) $(LIBSOCKET) -lposix4 $(LIBDL)
+endif # solaris
+OTHER_LDLIBS += -L$(LIBDIR)/$(LIBARCH) -ljava -lnet
ifeq ($(PLATFORM), linux)
-OTHER_LDLIBS += -L$(LIBDIR)/$(LIBARCH) -ljava -lnet -lpthread -ldl
+OTHER_LDLIBS += -lpthread $(LIBDL)
+endif
+ifeq ($(PLATFORM), bsd)
+OTHER_LDLIBS += -pthread
endif
-ifeq ($(PLATFORM), solaris)
-OTHER_LDLIBS += $(JVMLIB) $(LIBSOCKET) -lposix4 -ldl \
- -L$(LIBDIR)/$(LIBARCH) -ljava -lnet
endif # PLATFORM
#
@@ -321,6 +393,9 @@
ifeq ($(PLATFORM), linux)
FILES_m = mapfile-linux
endif
+ifeq ($(PLATFORM), bsd)
+FILES_m = mapfile-bsd
+endif
include $(BUILDDIR)/common/Mapfile-vers.gmk
include $(BUILDDIR)/common/Library.gmk
--- ./jdk/make/java/nio/mapfile-bsd 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/make/java/nio/mapfile-bsd 2010-10-31 14:19:20.000000000 -0700
@@ -36,25 +36,6 @@
Java_sun_nio_ch_DatagramDispatcher_readv0;
Java_sun_nio_ch_DatagramDispatcher_write0;
Java_sun_nio_ch_DatagramDispatcher_writev0;
- 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;
- Java_sun_nio_ch_EPollArrayWrapper_sizeofEPollEvent;
- Java_sun_nio_ch_EPoll_init;
- Java_sun_nio_ch_EPoll_eventSize;
- Java_sun_nio_ch_EPoll_eventsOffset;
- Java_sun_nio_ch_EPoll_dataOffset;
- Java_sun_nio_ch_EPoll_epollCreate;
- Java_sun_nio_ch_EPoll_epollCtl;
- Java_sun_nio_ch_EPoll_epollWait;
- Java_sun_nio_ch_EPollPort_close0;
- Java_sun_nio_ch_EPollPort_drain1;
- Java_sun_nio_ch_EPollPort_interrupt;
- Java_sun_nio_ch_EPollPort_socketpair;
Java_sun_nio_ch_FileChannelImpl_close0;
Java_sun_nio_ch_FileChannelImpl_initIDs;
Java_sun_nio_ch_FileChannelImpl_map0;
@@ -123,26 +104,14 @@
Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_accept0;
Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_initIDs;
Java_sun_nio_ch_UnixAsynchronousSocketChannelImpl_checkConnect;
+ Java_sun_nio_fs_BsdNativeDispatcher_initIDs;
+ Java_sun_nio_fs_BsdNativeDispatcher_getfsstat;
+ Java_sun_nio_fs_BsdNativeDispatcher_fsstatEntry;
+ Java_sun_nio_fs_BsdNativeDispatcher_endfsstat;
Java_sun_nio_fs_GnomeFileTypeDetector_initializeGio;
Java_sun_nio_fs_GnomeFileTypeDetector_probeUsingGio;
Java_sun_nio_fs_GnomeFileTypeDetector_initializeGnomeVfs;
Java_sun_nio_fs_GnomeFileTypeDetector_probeUsingGnomeVfs;
- Java_sun_nio_fs_BsdWatchService_init;
- Java_sun_nio_fs_BsdWatchService_eventSize;
- Java_sun_nio_fs_BsdWatchService_eventOffsets;
- Java_sun_nio_fs_BsdWatchService_inotifyInit;
- Java_sun_nio_fs_BsdWatchService_inotifyAddWatch;
- Java_sun_nio_fs_BsdWatchService_inotifyRmWatch;
- Java_sun_nio_fs_BsdWatchService_configureBlocking;
- Java_sun_nio_fs_BsdWatchService_socketpair;
- Java_sun_nio_fs_BsdWatchService_poll;
- Java_sun_nio_fs_BsdNativeDispatcher_init;
- Java_sun_nio_fs_BsdNativeDispatcher_fgetxattr0;
- Java_sun_nio_fs_BsdNativeDispatcher_flistxattr;
- Java_sun_nio_fs_BsdNativeDispatcher_fsetxattr0;
- Java_sun_nio_fs_BsdNativeDispatcher_fremovexattr0;
- Java_sun_nio_fs_BsdNativeDispatcher_setmntent0;
- Java_sun_nio_fs_BsdNativeDispatcher_endmntent;
Java_sun_nio_fs_UnixNativeDispatcher_init;
Java_sun_nio_fs_UnixNativeDispatcher_getcwd;
Java_sun_nio_fs_UnixNativeDispatcher_strerror;
--- ./jdk/make/java/npt/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/npt/Makefile 2010-06-15 22:06:18.000000000 -0700
@@ -68,6 +68,18 @@
OTHER_LCF += -export:nptInitialize -export:nptTerminate
endif
+# Add location of iconv headers
+ifeq ($(PLATFORM), bsd)
+ ifeq ($(OS_VENDOR), Apple)
+ OTHER_LDLIBS += -liconv
+ else
+ ifneq ($(OS_NAME), netbsd)
+ CPPFLAGS += -I$(PACKAGE_PATH)/include
+ OTHER_LDLIBS += -L$(PACKAGE_PATH)/lib -liconv
+ endif
+ endif
+endif
+
#
# Add to ambient vpath so we pick up the library files
#
--- ./jdk/make/java/redist/fonts/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/redist/fonts/Makefile 2010-06-15 22:06:18.000000000 -0700
@@ -43,7 +43,7 @@
$(LIBDIR)/fonts/LucidaSansRegular.ttf \
$(LIBDIR)/fonts/LucidaSansDemiBold.ttf \
-ifeq ($(PLATFORM), linux)
+ifneq (,$(findstring $(PLATFORM), linux bsd))
# The oblique versions of the font are derived from the base versions
# and since 2D can do this derivation on the fly at run time there is no
@@ -83,7 +83,7 @@
$(FONTSDIRFILE): $(PLATFORM_SRC)/classes/sun/awt/motif/java.fonts.dir
$(install-file)
-ifeq ($(PLATFORM), linux)
+ifneq (,$(findstring $(PLATFORM), linux bsd))
# The oblique fonts are only needed/wanted on Linux.
@@ -97,7 +97,7 @@
$(OBLFONTSDIRFILE): $(PLATFORM_SRC)/classes/sun/awt/motif/java.oblique-fonts.dir
$(install-file)
-endif # linux
+endif # linux || bsd
all build : $(INTERNAL_IMPORT_LIST)
--- ./jdk/make/java/security/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/security/Makefile 2010-07-24 14:31:27.000000000 -0700
@@ -50,7 +50,15 @@
ifneq ($(ARCH_DATA_MODEL), 64)
PROPS_SRC = $(TOPDIR)/src/share/lib/security/java.security-windows
endif
+
+else # windows
+
+ifeq ($(PLATFORM), bsd)
+ ifeq ($(OS_VENDOR), OpenBSD)
+ PROPS_SRC = $(TOPDIR)/src/share/lib/security/java.security-openbsd
+ endif
endif
+endif # windows
endif # PLATFORM
--- ./jdk/make/java/zip/FILES_c.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/zip/FILES_c.gmk 2010-06-15 22:06:18.000000000 -0700
@@ -29,7 +29,10 @@
Deflater.c \
Inflater.c \
ZipFile.c \
- zip_util.c \
+ zip_util.c
+
+ifneq ($(SYSTEM_ZLIB),true)
+FILES_c += \
compress.c \
deflate.c \
gzio.c \
@@ -41,4 +44,5 @@
uncompr.c \
zadler32.c \
zcrc32.c \
- zutil.c
+ zutil.c
+endif
--- ./jdk/make/java/zip/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/java/zip/Makefile 2010-06-15 22:06:18.000000000 -0700
@@ -72,16 +72,28 @@
CPPFLAGS += -UDEBUG
endif
-CPPFLAGS += -I$(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION)
CPPFLAGS += -I$(SHARE_SRC)/native/java/io
CPPFLAGS += -I$(PLATFORM_SRC)/native/java/io
+ifeq ($(PLATFORM),bsd)
+CPPFLAGS += -I$(PLATFORM_SRC)/hpi/include
+endif
+
+ifneq ($(SYSTEM_ZLIB),true)
+CPPFLAGS += -I$(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION)
+
#
# Add to ambient vpath so we pick up the library files
#
vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/zlib-$(ZLIB_VERSION)
+endif
#
# Link to JVM library for JVM_Zip* functions
#
+ifeq ($(SYSTEM_ZLIB),true)
+OTHER_LDLIBS = -lz
+else
OTHER_LDLIBS = $(JVMLIB)
+endif
+
--- ./jdk/make/javax/sound/FILES_c.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/javax/sound/FILES_c.gmk 2010-06-15 22:06:18.000000000 -0700
@@ -34,6 +34,8 @@
FILES_linux =
+FILES_bsd =
+
FILES_windows = \
PLATFORM_API_WinOS_MidiIn.c \
PLATFORM_API_WinOS_MidiOut.c \
--- ./jdk/make/javax/sound/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/javax/sound/Makefile 2010-06-15 22:06:18.000000000 -0700
@@ -108,6 +108,16 @@
#MXSPP_ADD = $(PLATFORM)-$(ARCH)/
endif # PLATFORM linux
+# XXXBSD: ???
+ifeq ($(PLATFORM), bsd)
+ # build with empty MIDI i/o
+ INCLUDE_MIDI = TRUE
+ # build with empty ports
+ INCLUDE_PORTS = TRUE
+ # build with empty direct audio
+ INCLUDE_DAUDIO = TRUE
+endif # PLATFORM bsd
+
ifeq ($(PLATFORM), solaris)
# build with ports and direct audio
CPPFLAGS += -DUSE_PORTS=TRUE \
--- ./jdk/make/javax/sound/SoundDefs.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/javax/sound/SoundDefs.gmk 2010-06-15 22:06:18.000000000 -0700
@@ -40,6 +40,10 @@
CPPFLAGS += -DX_PLATFORM=X_LINUX
endif # PLATFORM linux
+ifeq ($(PLATFORM), bsd)
+ CPPFLAGS += -DX_PLATFORM=X_BSD
+endif # PLATFORM bsd
+
ifeq ($(PLATFORM), solaris)
CPPFLAGS += -DX_PLATFORM=X_SOLARIS
--- ./jdk/make/jpda/back/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/jpda/back/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -50,7 +50,7 @@
-I$(GENNATIVESRCDIR)/jdwp
ifneq ($(PLATFORM), windows)
- OTHER_LDLIBS += -ldl
+ OTHER_LDLIBS += $(LIBDL)
endif # PLATFORM
#
--- ./jdk/make/jpda/transport/socket/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/jpda/transport/socket/Makefile 2010-07-10 12:31:09.000000000 -0700
@@ -41,6 +41,11 @@
OTHER_LDLIBS += $(LIBNSL) $(LIBSOCKET) -lpthread
endif
+ifeq ($(PLATFORM), bsd)
+ LIBSOCKET =
+ OTHER_LDLIBS += -pthread
+endif
+
ifeq ($(PLATFORM), solaris)
OTHER_LDLIBS += $(LIBNSL) $(LIBSOCKET)
endif
--- ./jdk/make/mkdemo/jvmti/hprof/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/mkdemo/jvmti/hprof/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -37,12 +37,11 @@
ifeq ($(PLATFORM), windows)
EXTRA_LIBS += wsock32.lib winmm.lib
-endif
-ifeq ($(PLATFORM), solaris)
- OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl
-endif
+else
+ OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) $(LIBDL)
ifeq ($(PLATFORM), linux)
- OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl -lpthread
+ OTHER_LDLIBS += -lpthread
+endif
endif
#
--- ./jdk/make/sun/awt/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/awt/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -94,7 +94,7 @@
ifeq ($(PLATFORM), solaris)
FILES_c = $(FILES_2D_c)
FILES_c += awt_LoadLibrary.c
-OTHER_LDLIBS = $(JVMLIB) $(LIBM) -ldl
+OTHER_LDLIBS = $(JVMLIB) $(LIBM) $(LIBDL)
ifeq ($(CC_VER), 5.8)
ifndef REMOVE_ALL_WORKAROUNDS
ifeq ($(ARCH_FAMILY), i586)
@@ -121,7 +121,14 @@
FILES_c = $(FILES_2D_c)
FILES_c += awt_LoadLibrary.c
OTHER_CFLAGS += -DMLIB_NO_LIBSUNMATH
-OTHER_LDLIBS = $(JVMLIB) $(LIBM) -ldl
+OTHER_LDLIBS = $(JVMLIB) $(LIBM) $(LIBDL)
+endif
+
+ifeq ($(PLATFORM), bsd)
+FILES_c = $(FILES_2D_c)
+FILES_c += awt_LoadLibrary.c
+OTHER_CFLAGS += -DMLIB_NO_LIBSUNMATH
+OTHER_LDLIBS = $(JVMLIB) $(LIBM)
endif
FILES_c += initIDs.c
@@ -237,7 +244,7 @@
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ WINDOWS
endif # PLATFORM
-ifeq ($(PLATFORM), linux)
+ifneq (,$(findstring $(PLATFORM), linux bsd))
# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv LINUX
vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/opengl
vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)/../java2d/opengl
@@ -392,6 +399,19 @@
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SOLARIS
endif # PLATFORM
+ifeq ($(PLATFORM), bsd)
+# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv BSD
+
+FONTCONFIGS_SRC = $(PLATFORM_SRC)/classes/sun/awt/fontconfigs
+_FONTCONFIGS = \
+ fontconfig.properties
+
+FONTCONFIGS_SRC_PREFIX = $(PLATFORM).
+
+# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ BSD
+endif # PLATFORM
+
+
FONTCONFIGS = $(_FONTCONFIGS:%=$(LIBDIR)/%.src)
BINARYFONTCONFIGS = $(_FONTCONFIGS:%.properties=$(LIBDIR)/%.bfc)
@@ -485,6 +505,9 @@
-I$(OPENWIN_HOME)/include/X11/extensions \
-I$(PLATFORM_SRC)/native/$(PKGDIR)/font
endif
+ifeq ($(PLATFORM), bsd)
+CPPFLAGS += -I$(PLATFORM_SRC)/native/$(PKGDIR)/font
+endif
CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/debug \
-I$(SHARE_SRC)/native/$(PKGDIR)/../font \
-I$(PLATFORM_SRC)/native/$(PKGDIR)/../font \
@@ -506,7 +529,13 @@
-I$(PLATFORM_SRC)/native/$(PKGDIR) \
$(EVENT_MODEL)
-ifeq ($(PLATFORM), linux)
+# include these last so we don't pick up unintentional includes
+ifeq ($(PLATFORM), bsd)
+CPPFLAGS += -I$(OPENWIN_HOME)/include \
+ -I$(OPENWIN_HOME)/include/X11/extensions
+endif
+
+ifneq (,$(findstring $(PLATFORM), linux bsd))
LDFLAGS += -L$(OPENWIN_LIB)
endif
--- ./jdk/make/sun/awt/mapfile-vers-bsd 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/make/sun/awt/mapfile-vers-bsd 2010-07-04 12:38:37.000000000 -0700
@@ -533,11 +533,11 @@
X11SurfaceData_GetOps;
getDefaultConfig;
- Java_sun_font_FontConfigManager_getFontConfig;
- Java_sun_font_FontConfigManager_getFontConfigAASettings;
- Java_sun_awt_X11FontManager_getFontPath;
- Java_sun_awt_X11FontManager_setNativeFontPath;
- Java_sun_font_SunFontManager_populateFontFileNameMap;
+ Java_sun_font_FontManager_getFontConfig;
+ Java_sun_font_FontManager_getFontConfigAASettings;
+ Java_sun_font_FontManager_getFontPath;
+ Java_sun_font_FontManager_setNativeFontPath;
+ Java_sun_font_FontManager_populateFontFileNameMap;
# CDE private entry point
Java_sun_awt_motif_XsessionWMcommand;
--- ./jdk/make/sun/awt/mawt.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/awt/mawt.gmk 2010-08-06 21:58:27.000000000 -0700
@@ -169,7 +169,7 @@
OTHER_LDLIBS = -lXt -lXext $(LIBXTST) $(LIBXMU) -lX11 -lXi
endif
-ifeq ($(PLATFORM), linux)
+ifneq (,$(findstring $(PLATFORM), linux bsd))
OTHER_CFLAGS += -DMLIB_NO_LIBSUNMATH
# XXX what is this define below? Isn't it motif-related?
OTHER_CFLAGS += -DXMSTRINGDEFINES=1
@@ -180,7 +180,7 @@
# !HEADLESS
OTHER_LDLIBS += $(JVMLIB) $(LIBCXX) \
- -lawt $(LIBM) -ldl
+ -lawt $(LIBM) $(LIBDL)
#
# Sun CC with -Xa misdefines __STDC__ to 0 (zero).
@@ -198,6 +198,9 @@
ifndef HEADLESS
CPPFLAGS += -I$(OPENWIN_HOME)/include
LDFLAGS += -L$(OPENWIN_LIB)
+ifeq ($(OS_NAME), netbsd)
+LDFLAGS += -Wl,-R$(OPENWIN_LIB)
+endif
endif # !HEADLESS
@@ -223,16 +226,33 @@
-I$(PLATFORM_SRC)/native/$(PKGDIR) \
$(EVENT_MODEL)
+CPPFLAGS += -I$(CUPS_HEADERS_PATH)
+
+ifndef HEADLESS
+CPPFLAGS += -I$(MOTIF_DIR)/include \
+ -I$(OPENWIN_HOME)/include
+LDFLAGS += -L$(MOTIF_LIB) -L$(OPENWIN_LIB)
+
+endif # !HEADLESS
+
ifeq ($(PLATFORM), linux)
# Checking for the X11/extensions headers at the additional location
CPPFLAGS += -I/X11R6/include/X11/extensions \
-I/usr/include/X11/extensions
endif
+ifeq ($(PLATFORM), bsd)
+ CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions \
+ -I$(OPENWIN_HOME)/include
+endif
+
ifeq ($(PLATFORM), solaris)
CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions
endif
+ifneq ($(PLATFORM), windows)
+ CPPFLAGS += -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\"
+endif
LDFLAGS += -L$(LIBDIR)/$(LIBARCH)/$(TSOBJDIR) \
$(AWT_RUNPATH)
--- ./jdk/make/sun/font/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/font/Makefile 2010-06-15 22:06:20.000000000 -0700
@@ -174,6 +174,15 @@
# Libraries to link, and other C flags.
#
+ifeq ($(PLATFORM), bsd)
+OTHER_INCLUDES += -I$(X11_PATH)/include
+OTHER_LDLIBS += -lawt $(LIBM) $(LIBCXX)
+ ifeq ($(OS_VENDOR),Apple)
+ # XXXDARWIN Match BSD/Linux behavior -- the mawt.dylib symbols will
+ # be available at runtime.
+ OTHER_LDLIBS += -flat_namespace -undefined suppress
+ endif
+else
ifeq ($(PLATFORM), solaris)
# Note that on Solaris, fontmanager is built against the headless library.
LDFLAGS += -L$(LIBDIR)/$(LIBARCH)/headless
@@ -184,6 +193,7 @@
OTHER_LDLIBS += -Wl,-Bstatic -lgcc_eh -Wl,-Bdynamic
endif
endif
+endif
endif # PLATFORM
--- ./jdk/make/sun/image/generic/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/image/generic/Makefile 2010-10-31 14:16:39.000000000 -0700
@@ -71,6 +71,6 @@
OTHER_CFLAGS += -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES
ifneq ($(PLATFORM), windows)
- OTHER_LDLIBS = $(LIBM) -ldl
+ OTHER_LDLIBS = $(LIBM) $(LIBDL)
endif
--- ./jdk/make/sun/image/vis/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/image/vis/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -69,5 +69,5 @@
CFLAGS += $(CFLAGS_$(ARCH)) $(INLINE) -I$(PLATFORM_SRC)/native/sun/awt/medialib -I$(SHARE_SRC)/native/sun/awt/medialib
OTHER_CFLAGS += -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES
-OTHER_LDLIBS = $(LIBM) -ldl
+OTHER_LDLIBS = $(LIBM) $(LIBDL)
--- ./jdk/make/sun/jawt/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/jawt/Makefile 2010-06-15 22:06:20.000000000 -0700
@@ -93,8 +93,7 @@
#
# Other extra flags needed for compiling.
#
-CPPFLAGS += -I$(OPENWIN_HOME)/include \
- -I$(SHARE_SRC)/native/$(PKGDIR)/debug \
+CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/debug \
-I$(SHARE_SRC)/native/$(PKGDIR)/image \
-I$(SHARE_SRC)/native/$(PKGDIR)/image/cvutils \
-I$(SHARE_SRC)/native/$(PKGDIR)/alphacomposite \
@@ -108,6 +107,7 @@
-I$(SHARE_SRC)/native/$(PKGDIR)/../dc/doe \
-I$(SHARE_SRC)/native/$(PKGDIR)/../dc/path \
-I$(PLATFORM_SRC)/native/$(PKGDIR)/../jdga \
+ -I$(OPENWIN_HOME)/include \
$(EVENT_MODEL)
#
# Libraries to link in.
@@ -116,7 +116,7 @@
OTHER_LDLIBS = -L$(LIBDIR)/$(LIBARCH) -L$(OPENWIN_LIB) -L$(LIBDIR)/$(LIBARCH)/xawt -lmawt -L/usr/openwin/sfw/lib$(ISA_DIR) -lXrender
endif # PLATFORM
-ifeq ($(PLATFORM), linux)
+ifneq (,$(findstring $(PLATFORM), linux bsd))
OTHER_LDLIBS = -L$(LIBDIR)/$(LIBARCH) -lawt -L$(LIBDIR)/$(LIBARCH)/xawt -lmawt
endif # PLATFORM
--- ./jdk/make/sun/jdga/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/jdga/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -56,7 +56,7 @@
vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)
ifneq ($(PLATFORM), windows)
- LDLIBS = -ldga -lX11 -ldl -lc
+ LDLIBS = -ldga -lX11 $(LIBDL) -lc
CPPFLAGS += \
-I$(SHARE_SRC)/javavm/export \
--- ./jdk/make/sun/security/ec/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/security/ec/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -193,7 +193,7 @@
ifeq ($(PLATFORM), windows)
OTHER_LDLIBS += $(JVMLIB)
else
- OTHER_LDLIBS = -ldl $(JVMLIB) $(LIBCXX)
+ OTHER_LDLIBS = $(LIBDL) $(JVMLIB) $(LIBCXX)
endif
include $(BUILDDIR)/common/Mapfile-vers.gmk
--- ./jdk/make/sun/security/jgss/wrapper/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/security/jgss/wrapper/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -72,6 +72,6 @@
#
# Libraries to link
#
-ifneq ($(PLATFORM), windows)
- OTHER_LDLIBS = -ldl $(JVMLIB)
+ifeq ($(PLATFORM), windows)
+OTHER_LDLIBS = $(LIBDL) $(JVMLIB)
endif
--- ./jdk/make/sun/security/krb5/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/security/krb5/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -76,7 +76,7 @@
ifeq ($(PLATFORM), windows)
OTHER_LDLIBS = $(JVMLIB)
else
- OTHER_LDLIBS = -ldl $(JVMLIB)
+ OTHER_LDLIBS = $(LIBDL) $(JVMLIB)
endif
build:
--- ./jdk/make/sun/security/pkcs11/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/security/pkcs11/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -157,10 +157,10 @@
#
# Libraries to link
#
-ifeq ($(PLATFORM), windows)
+ifneq ($(PLATFORM), windows)
OTHER_LDLIBS = $(JVMLIB)
else
- OTHER_LDLIBS = -ldl $(JVMLIB)
+ OTHER_LDLIBS = $(LIBDL) $(JVMLIB)
endif
# Other config files
--- ./jdk/make/sun/security/smartcardio/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/security/smartcardio/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -76,6 +76,6 @@
ifeq ($(PLATFORM), windows)
OTHER_LDLIBS = $(JVMLIB) winscard.lib
else
- OTHER_LDLIBS = -ldl $(JVMLIB)
+ OTHER_LDLIBS = $(LIBDL) $(JVMLIB)
OTHER_CFLAGS = -D__sun_jdk
endif
--- ./jdk/make/sun/splashscreen/FILES_c.gmk 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/splashscreen/FILES_c.gmk 2010-06-15 22:06:21.000000000 -0700
@@ -49,18 +49,6 @@
dgif_lib.c \
gif_err.c \
gifalloc.c \
- compress.c \
- deflate.c \
- gzio.c \
- infback.c \
- inffast.c \
- inflate.c \
- inftrees.c \
- trees.c \
- uncompr.c \
- zadler32.c \
- zcrc32.c \
- zutil.c \
jcomapi.c \
jdapimin.c \
jdapistd.c \
@@ -106,3 +94,18 @@
jfdctfst.c \
jfdctint.c
+ifneq ($(SYSTEM_ZLIB),true)
+ FILES_c += \
+ compress.c \
+ deflate.c \
+ gzio.c \
+ infback.c \
+ inffast.c \
+ inflate.c \
+ inftrees.c \
+ trees.c \
+ uncompr.c \
+ zadler32.c \
+ zcrc32.c \
+ zutil.c
+endif
--- ./jdk/make/sun/splashscreen/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/splashscreen/Makefile 2010-06-15 22:06:21.000000000 -0700
@@ -64,8 +64,24 @@
ifneq ($(PLATFORM), windows)
CFLAGS += -DWITH_X11
- CPPFLAGS += -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions
- OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext $(LIBM) -lpthread
+ ifeq ($(PLATFORM), bsd)
+ ifeq ($(OS_VENDOR), Apple)
+ OTHER_LDLIBS += -liconv
+ else
+ ifneq ($(OS_NAME), netbsd)
+ CPPFLAGS += -I$(PACKAGE_PATH)/include
+ OTHER_LDLIBS += -L$(PACKAGE_PATH)/lib -liconv
+ else
+ OTHER_LDLIBS += -Wl,-R$(OPENWIN_LIB)
+ endif
+ endif
+ CPPFLAGS += -I$(OPENWIN_HOME)/include \
+ -I$(OPENWIN_HOME)/include/X11/extensions
+ OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext $(LIBM) -pthread
+ else
+ CPPFLAGS += -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions
+ OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext $(LIBM) -lpthread
+ endif
else # PLATFORM
CFLAGS += -DWITH_WIN32
OTHER_LDLIBS += kernel32.lib user32.lib gdi32.lib delayimp.lib /DELAYLOAD:user32.dll
@@ -78,13 +94,20 @@
vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/splashscreen
vpath %.c $(SHARE_SRC)/native/$(PKGDIR)
vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/giflib
-vpath %.c $(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION)
+ifneq ($(SYSTEM_ZLIB),true)
+ vpath %.c $(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION)
+endif
vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/libpng
vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/image/jpeg
vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR)/splashscreen
CPPFLAGS += -I$(PLATFORM_SRC)/native/$(PKGDIR)/splashscreen -I$(SHARE_SRC)/native/$(PKGDIR)/splashscreen
-CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/image/jpeg -I$(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION)
+CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/image/jpeg
+ifneq ($(SYSTEM_ZLIB),true)
+ CPPFLAGS += -I$(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION)
+else
+ OTHER_LDLIBS += -lz
+endif
# Shun the less than portable MMX assembly code in pnggccrd.c,
# and use alternative implementations in C.
--- ./jdk/make/sun/tracing/dtrace/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/tracing/dtrace/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -56,7 +56,7 @@
FILES_export = $(FILES_java)
ifeq ($(PLATFORM), linux)
-OTHER_LDLIBS += -ldl
+OTHER_LDLIBS += $(LIBDL)
endif
#
--- ./jdk/make/sun/xawt/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/sun/xawt/Makefile 2010-07-10 13:26:05.000000000 -0700
@@ -48,6 +48,9 @@
AUTO_JAVA_PRUNE = WrapperGenerator.java
LDFLAGS += -L$(OPENWIN_LIB)
+ifeq ($(OS_NAME), netbsd)
+LDFLAGS += -Wl,-R$(OPENWIN_LIB)
+endif
# For Xrender extension.
ifeq ($(PLATFORM), solaris)
@@ -59,6 +62,11 @@
dummy := $(shell $(MKDIR) -p $(LIB_LOCATION))
endif
+ifeq ($(PLATFORM), bsd)
+LDFLAGS += -pthread
+dummy := $(shell $(MKDIR) -p $(LIB_LOCATION))
+endif
+
# Since this library will be living in a subdirectory below the other libraries
# we need to add an extra runpath so that libraries in the upper directory
# are found at runtime.
@@ -93,7 +101,7 @@
vpath %.c $(PLATFORM_SRC)/native/sun/java2d/opengl
vpath %.c $(PLATFORM_SRC)/native/sun/java2d/x11
-OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 -lXrender -ldl \
+OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) \
$(LDFLAGS_COMMON) $(AWT_RUNPATH) $(OTHER_LDFLAGS) -lXtst -lXi
ifeq ($(PLATFORM), solaris)
@@ -101,8 +109,6 @@
dummy := $(shell $(MKDIR) -p $(LIB_LOCATION))
endif
-CPPFLAGS += -I$(CUPS_HEADERS_PATH)
-
CPPFLAGS += -DXAWT -DXAWT_HACK \
-I$(TEMPDIR)/../../sun.awt/awt/CClassHeaders \
-I$(PLATFORM_SRC)/native/sun/awt \
@@ -129,9 +135,11 @@
-I$(SHARE_SRC)/native/sun/awt \
-I$(PLATFORM_SRC)/native/sun/awt
+CPPFLAGS += -I$(CUPS_HEADERS_PATH)
+
ifeq ($(PLATFORM), linux)
# Allows for builds on Debian GNU Linux, X11 is in a different place
- CPPFLAGS += -I/usr/X11R6/include/X11/extensions \
+ CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions \
-I/usr/include/X11/extensions \
-I$(OPENWIN_HOME)/include
endif
@@ -140,6 +148,14 @@
CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions
endif
+ifeq ($(PLATFORM), bsd)
+ CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions -I$(OPENWIN_HOME)/include
+endif
+
+ifneq ($(PLATFORM), windows)
+ CPPFLAGS += -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\"
+endif
+
ifeq ($(MILESTONE), internal)
CPPFLAGS += -DINTERNAL_BUILD
endif
--- ./jdk/make/tools/freetypecheck/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/tools/freetypecheck/Makefile 2010-06-15 22:06:21.000000000 -0700
@@ -49,8 +49,15 @@
# Add runtime lib search path to ensure test will be runnable
ifeq ($(PLATFORM), solaris)
FT_LD_OPTIONS += -R $(FREETYPE_LIB_PATH) -lfreetype
- else #linux
+ else
+ ifeq ($(PLATFORM), bsd)
+ ifeq ($(OS_NAME), netbsd)
+ FT_LD_OPTIONS += -Wl,-R$(FREETYPE_LIB_PATH)
+ endif
+ FT_LD_OPTIONS += -lfreetype -lz
+ else # linux
FT_LD_OPTIONS += -Wl,-rpath -Wl,$(FREETYPE_LIB_PATH) -lfreetype
+ endif
endif
endif
FT_OPTIONS += -I$(FREETYPE_HEADERS_PATH)
--- ./jdk/make/tools/reorder/Makefile 2010-11-04 16:13:16.000000000 -0700
+++ ./jdk/make/tools/reorder/Makefile 2010-08-06 21:58:27.000000000 -0700
@@ -187,11 +187,11 @@
# This library 'libmcount.so' also used by hotspot reordering.
$(OBJDIR)/libmcount.so : $(MCOUNT_OBJ)
- $(CC) -G -mt -zdefs -o $@ $^ -ldl -lelf $(EXTRA_LIBS)
+ $(CC) -G -mt -zdefs -o $@ $^ $(LIBDL) -lelf $(EXTRA_LIBS)
# This library 'libmcount.so' also used by hotspot reordering.
$(OBJDIR)/remove_mcount : remove_mcount.c
- $(CC) -g -o $@ $^ -ldl -lelf $(EXTRA_LIBS)
+ $(CC) -g -o $@ $^ $(LIBDL) -lelf $(EXTRA_LIBS)
# Reorder libraries.
--- ./jdk/src/bsd/doc/man/ja/kinit.1 1969-12-31 16:00:00.000000000 -0800
+++ ./jdk/src/bsd/doc/man/ja/kinit.1 2010-07-04 12:38:38.000000000 -0700
@@ -0,0 +1,159 @@
+'\" t
+.\"
+.\" Copyright 2002-2004 Sun Microsystems, Inc. All Rights Reserved.
+.\" 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.
+.\"
+.\"
+.\"
+.TH kinit 1 "2004 ǯ 6 <20><> 22 <20><>"
+.SH "̾<><CCBE>"
+kinit \- kinit <20><> Kerberos <20><><A5><C1><A5>åȵ<C3A5><C8B5>ĥ<B2><C4A5><C1><A5>åȤ<C3A5><C8A4><F2><BC><E8><C6><C0><A4><AA><A4>ӥ<A4><D3A5><AD><A5>å<A5><C3A5><B7>
+<2B><><A4><B9><A4>Ȥ<A4><C8A4>˻<A4><CBBB>Ѥ<CD><D1A4>ޤ<A4><DEA4><B9><A1><A3><A4>Υġ<CEA5><C4A1><BC><A5>Ϥۤ<CFA4><DBA4>ΰ<A4><CEB0><EC>Ū<CC><C5AA> Kerberos <20><><BC><C2>
+(SEAM <20><> MIT <20>Υ<A4><CEA5>ե<A5><D5A5><A1><A5>󥹼<A5><F3A5B9BC><C2><C1>ʤ<A4>) <20><> kinit <20>ġ<A5><C4A1><BC><A5>ȵ<A4>ǽŪ<C7BD>˻<A4><CBBB>Ƥ<A4><C6A4>ޤ<A4><DEA4><B9>
+.LP
+kinit <20><><A4><F2><BB>Ѥ<CD><D1A4>뤿<A4><EBA4BF><A4>ˤϡ<CBA4>kinit <20><><A4>¹Ԥ<C2B9><D4A4><B9><A4><EB><C1><B0> Key Distribution Center
+(KDC) <20><><A4><F2><BB>Ѥ<CD><D1A4>ƥץ<C6A5><D7A5>󥷥ѥ<F3A5B7A5><D1A5>Ȥ<A4><C8A4><B7><A4><C6>Ͽ<D0><CFBF><A4><B9>ɬ<EB>פ<CD><D7A4><AC><A4><A2><A4>ޤ<A4><DEA4><B9>
+.SH "<22><><B7><C1>"
+.B kinit
+[
+.IR commands " ]"
+<principal name>
+.SH "<22><>ǽ<A1><C7BD><C0><E2>"
+<2B>ǥե<C7A5><D5A5><A9><A5>ȤǤϡ<C7A4>UNIX <20>ץ<A5><D7A5>åȥե<C8A5><D5A5><A9><A1><BC><A5>ξ<A4><CEBE>硢/tmp/krb5cc_<uid> <20>Ȥ<A4><C8A4><A4>
<><CCBE><C1>Υ<A4><CEA5><AD><A5>å<A5><C3A5><B7><A5>ե<A5><D5A5><A1><A5><A5><EBA4AC><C0><B8><C0><AE><A4><B5><A4>ޤ<A4><DEA4><B9><uid> <20>ϡ<A4><CFA1><A2><A5><B7><A5>ƥ<A5><C6A5>˥<A4><CBA5><ED><A5><B0><A5><A4>
+<2B><><A4><B7><A4><A5><E6A1BC><A5>Υ<CEA5><E6A1BC><A5><B6><BC><B1><CA>ֹ<C8><D6B9>Ǥ<A4><C7A4><B9><A1><A3><A4><BD>¾<CE>Υץ<CEA5><D7A5>åȥե<C8A5><D5A5><A9><A1><BC><A5>ξ<A4><CEBE>
+<USER_HOME>/krb5cc_<USER_NAME> <20>Ȥ<A4><C8A4><A4>̾<A6><CCBE><C1>Υ<A4><CEA5><AD><A5>å<A5><C3A5><B7><A5>ե<A5><D5A5><A1><A5><A4>
+<2B><><A4><AC><C0><B8><C0><AE><A4><B5><A4>ޤ<A4><DEA4><B9>
+.LP
+<USER_HOME> <20><>
+.BR java.lang.System
+<2B>ץ<A5><D7A5>ѥƥ<D1A5><C6A5><A3>
+.BR user.home
+<2B><><A4><AB><A4><E9><BC><E8><C6><C0><A4><B5><A4>ޤ<A4><DEA4><B9><USER_NAME> <20><>
+.BR java.lang.System
+<2B>ץ<A5><D7A5>ѥƥ<D1A5><C6A5><A3>
+.BR user.name
+<2B><><A4><AB><A4><E9><BC><E8><C6><C0><A4><B5><A4>ޤ<A4><DEA4><B9><USER_HOME> <20><> null <20>Ǥ<A4><C7A4><A2><A4><EB><BE>
+<2B><><A5><AD><A5>å<A5><C3A5><B7><A5>ե<A5><D5A5><A1><A5><A4><A5>ϥץ<CFA5><D7A5><ED><A5><B0><A5><E9><A5><E0><A4>¹Ԥ<C2B9><D4A4><B7><A4><BF><B8>ߤΥǥ<CEA5><C7A5><A5>ȥ<A5><C8A5>˳<A4>Ǽ<CA><C7BC><A4><B5>
+<2B>ޤ<A4><DEA4><B9><USER_NAME> <20>ϥ<A4><CFA5>ڥ졼<DAA5>ƥ<A5><C6A5>󥰥<A5><F3A5B0A5><B7><A5>ƥ<A5><C6A5>Υ<A4><CEA5><ED><A5><B0><A5><A4><A5><A5><E6A1BC>̾
+<2B>Ǥ<A4><C7A4><B9><A1><A3><A4>Υ<CEA5><E6A1BC>̾<B6>ϥ桼<CFA5><E6A1BC><A5>Υץ<CEA5><D7A5>󥷥ѥ<F3A5B7A5>̾<EB>Ȥϰۤʤ<DBA4><CAA4><EB><BE><B9><E7A4AC><A4><A2><A4>ޤ<A4><DEA4><B9>
+<2B><><A4>Ȥ<A4><C8A4><A8> Solaris <20>Ǥϡ<C7A4><USER_NAME> <20><> duke <20>Ǥ<A4><C7A4>ꡢ<USER_HOME>
+<2B><> /home/duke <20>Ǥ<A4><C7A4><A2><A4><EB><BE><B9><A5><E6A1BC><A5>Υץ<CEA5><D7A5>󥷥ѥ<F3A5B7A5>̾<EB><CCBE> /home/duke/krb5cc_duke
+<2B>ˤʤ<CBA4><CAA4>ޤ<A4><DEA4><B9>
+.LP
+<2B>ǥե<C7A5><D5A5><A9><A5>ȤǤϡ<C7A4><CFA1><A2><A5><AD><A1><BC><A5><BF>̾<D6><CCBE> Kerberos <20><><B9><BD><C0>ե<A5><D5A5><A1><A5><A5><EBA4AB><A4><E9><BC><E8><C6><C0><A4><B5><A4>ޤ<A4><DEA4><B9>
+<2B><><A5><AD><A1><BC><A5><BF>̾<D6><CCBE> Kerberos <20><><B9><BD><C0>ե<A5><D5A5><A1><A5><A4><A5>˻<A4><CBBB><C4><EAA4B5><A4>Ƥ<A4><C6A4>ʤ<A4><CAA4><A4><BE><B9><E7A1A2><A5><AD><A1><BC><A5><BF>̾<D6><CCBE> <USER_HOME>/krb5.keytab <20>ˤʤ<CBA4><CAA4>ޤ<A4><DEA4><B9>
+.LP
+<2B><><A5>ޥ<A5><DEA5>ɹԤ<C9B9> password <20><><A5>ץ<A5><D7A5><B7><A5><E7><A5>ǥѥ<C7A5><D1A5><A5>ɤ<A5><C9A4><F2><BB><C4>ʤ<A4><CAA4><A4><BE>
+kinit <20>ϥѥ<CFA5><D1A5><A5>ɤ<A5><C9A4><CE><C6>Ϥ<CE><CFA4><F2><B5><E1><A4>ޤ<A4><DEA4><B9>
+.LP
+.B <20><>:
+<2B><><A5>ޥ<A5><DEA5>ɹԤ<C9B9> password <20><><A5>ץ<A5><D7A5><B7><A5><E7><A5>ϥƥ<CFA5><C6A5>Ȥ<A5><C8A4><CE>Ū<DC><C5AA><A4><C0><A4><B1><A4>󶡤<C4><F3B6A1A4><B5><A4>ޤ<A4><DEA4><B9>
+<2B>ѥ<A5><D1A5><A5>ɤ򥹥<C9A4><F2A5B9A5><AF><A5>ץ<A5><D7A5><C8><C6>˻<A4><CBBB><C4><EAA4B7><A4><A4><EAA1A2><A5>ޥ<A5><DEA5>ɹԤ˻<D4A4><CBBB><C4><EAA4B7><A4><A4>ʤ<A4><CAA4><A4>
+<2B><><A4><AF><A4><C0><A4><B5><A4><A4><A1><A3><A4><BD><A4><A6><A4><A4>Ȥˤ<C8A4><CBA4>äơ<C3A4><C6A1>ѥ<A5><D1A5><A5>ɤ<A5>ϳ<AC><CFB3><A4><EC><A4><EB>ǽ<C4><C7BD><C0><AD><A4><AC><A4><A2><A4>ޤ<A4><DEA4><B9>
+.LP
+<2B>ܺ٤ˤĤ<CBA4><C4A4>Ƥϡ<C6A4>kinit <20><>Ϣ<D8>Υޥ˥奢<CBA5><E5A5A2><A5>ڡ<A5><DAA1><BC><A5>򻲾Ȥ<F2BBB2BE><C8A4>Ƥ<A4><C6A4><AF><A4><C0><A4><B5><A4><A4>
+.SH "<22><><A5>ޥ<A5><DEA5><F3>"
+.B kinit \-fp
+[
+\-c <cache_name> ]
+[
+\-k ]
+[
+\-t <keytab_filename> ]
+[
+<principal> ]
+[
+<password> ]
+[
+\-help ]
+.TP
+.BI \-f
<><C5BE><C1><F7>ǽ<C4>ʥ<A4><CAA5><C1><A5>åȤ<C3A5>ȯ<F2>Ԥ<B9><D4A4>ޤ<A4><DEA4><B9>
+.TP
+.BI \-p
+<2B>ץ<A5><D7A5><ED><A5><AD><A5><B7>ǽ<C4>ʥ<A4><CAA5><C1><A5>åȤ<C3A5>ȯ<F2>Ԥ<B9><D4A4>ޤ<A4><DEA4><B9>
+.TP
+.BI \-c
+<cache_name>
+<2B><><A5><AD><A5>å<A5><C3A5><B7>̾ (<28><><A4>Ȥ<A4><C8A4>С<A4>FILE:/temp/mykrb5cc)<29><>
+.TP
+.BI \-k
+<2B><><A5><AD><A1><BC><A5>֤<A5><D6A4><F2><BB>Ѥ<CD><D1A4>ޤ<A4><DEA4><B9>
+.TP
+.BI \-t
+<keytab_filename>
+<2B><><A5><AD><A1><BC><A5><BF>̾ (<28><><A4>Ȥ<A4><C8A4>С<A4>/home/duke/krb5.keytab)<29><>
+.TP
+.BI <principal>
+<2B>ץ<A5><D7A5>󥷥ѥ<F3A5B7A5>̾ (<28><><A4>Ȥ<A4><C8A4>С<A4>duke@java.sun.com)<29><>
+.TP
+.BI <password>
+<2B>ץ<A5><D7A5>󥷥ѥ<F3A5B7A5><D1A5><EB> Kerberos <20>ѥ<A5><D1A5><A5><EFA1BC> (<28><><A5>ޥ<A5><DEA5>ɹԤ䥹<D4A4><E4A5B9><A5><AF><A5>ץȤ˥ѥ<CBA5><D1A5><A5><EFA1BC>
+<2B><><A4><F2><BB><C4>ʤ<A4><CAA4>Ǥ<A4><C7A4><AF><A4><C0><A4><B5>)<29><>
+.TP
+.BI \-help
+<2B>إ<A5><D8A5>פ<A5>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.SH "<22><><BB><C8><CD><D1>"
<>ڤ<BE>ͭ<CB><CDAD><B8>ʻ<A4><CABB>ʤ򸽺ߤΥ<DFA4><CEA5><A5><E9A5A4><A5><A2><A5>ȥۥ<C8A5><DBA5>Ȥ<A5><C8A4><AB><A4>׵ᤷ<D7B5>ơ<A4>
+<2B>ǥե<C7A5><D5A5><A9><A5>ȥ<A5><C8A5><B5><A1>ӥ<A5><D3A5>Τ<A4><CEA4><BF><A4>˻<A4><CBBB>ʤΥ<CAA4><CEA5><AD><A5>å<A5><C3A5><B7><A5><E5><A4>ǥե<C7A5><D5A5><A9><A5>Ȥξ<C8A4><CEBE><EC>
+(/home/duke/krb5cc_duke) <20>˳<A4>Ǽ<CA><C7BC><A4>ޤ<A4><DEA4><B9>
+.LP
+.ft 3
+.nf
+kinit duke@JAVA.SUN.COM
+.fi
+.ft 1
+.LP
+<2B>ۤʤ<DBA4><CAA4>ץ<A5><D7A5>󥷥ѥ<F3A5B7A5><D1A5>Τ<A4><CEA4><BF><A4>˥ץ<CBA5><D7A5><ED><A5><AD><A5><B7>ǽ<C4>ʻ<A4><CABB>ʤ<B3><CAA4>׵ᤷ<D7B5>ơ<A4><C6A1><A2><A4><B3><A4><EC><A4>λ<A4><CEBB>ʤ<B3>
+<2B><><BB><C4><EAA4B7><A4>ե<A5><D5A5><A1><A5><A5><EBA5AD><A5>å<A5><C3A5><B7><A5>˳<A4>Ǽ<CA><C7BC><A4>ޤ<A4><DEA4><B9>
+.LP
+.ft 3
+.nf
+kinit \-p \-c FILE:/home/duke/credentials/krb5cc_cafebeef cafebeef@JAVA.SUN.COM
+.fi
+.ft 1
+.LP
+<2B>ۤʤ<DBA4><CAA4>ץ<A5><D7A5>󥷥ѥ<F3A5B7A5><D1A5>Τ<A4><CEA4><BF><A4>˥ץ<CBA5><D7A5><ED><A5><AD><A5><B7>ǽ<C4><C7BD>ž<C7><C5BE><C1><F7>ǽ<C4>ʻ<A4><CABB>ʤ<B3><CAA4>׵ᤷ<D7B5>ơ<A4>
+<2B><><A4><B3><A4><EC><A4>λ<A4><CEBB>ʤ<B3><CAA4><F2><BB><C4><EAA4B7><A4>ե<A5><D5A5><A1><A5><A5><EBA5AD><A5>å<A5><C3A5><B7><A5>˳<A4>Ǽ<CA><C7BC><A4>ޤ<A4><DEA4><B9>
+.LP
+.ft 3
+.nf
+kinit \-f \-p \-c
+FILE:/home/duke/credentials/krb5cc_cafebeef cafebeef@JAVA.SUN.COM
+.fi
+.ft 1
+.LP
+kinit <20>Υإ<CEA5><D8A5>ץ<A5><D7A5>˥塼<CBA5><E5A1BC>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.LP
+.ft 3
+.nf
+kinit \-help
+.fi
+.ft 1
+.LP
+.SH "<22><><A5><BB><A5><AD><A5><E5><A5>ƥ<A5><C6A5>˴ؤ<CBB4><D8A4><B9><A4>ٹ<B7>"
+<2B><><A5>ޥ<A5><DEA5>ɹԤ<C9B9>
+.BR password
+<2B><><A5>ץ<A5><D7A5><B7><A5><E7><A5>ϥƥ<CFA5><C6A5>Ȥ<A5><C8A4><CE>Ū<DC><C5AA><A4><C0><A4><B1><A4>󶡤<C4><F3B6A1A4><B5><A4>ޤ<A4><DEA4><B9><A1>ѥ<A5><D1A5><A5>ɤ򥳥ޥ<F2A5B3A5><DEA5>ɹԤ˻<D4A4><CBBB><C4>ʤ<A4><CAA4>Ǥ<A4><C7A4><AF><A4><C0><A4><B5><A4><A4>
+<2B><><A4><B3><A4>ϥ<A4><CFA5><BB><A5><AD><A5><E5><A5>ƥ<A5><C6A5>ۡ<A5><DBA1><BC><A5>ˤʤ<CBA4><CAA4>ޤ<A4><DEA4><B9><A1><A3><A4>Ȥ<A4><C8A4>С<A4>UNIX <20><>
+.BR ps
+<2B><><A5>ޥ<A5><DEA5>ɤμ¹<CEBC><C2B9><D4><C3>ˡ<A4><CBA1><A2><B9><B6><B7>Ԥϥѥ<CFA5><D1A5><A5>ɤ򸡽Ф<F2B8A1BD><D0A4><A4>Ȥ<A4><C8A4>Ǥ<A4><C7A4>Ƥ<A4><C6A4>ޤ<A4><DEA4>ޤ<A4><DEA4><B9>
--- ./jdk/src/bsd/doc/man/ja/klist.1 1969-12-31 16:00:00.000000000 -0800
+++ ./jdk/src/bsd/doc/man/ja/klist.1 2010-07-04 12:38:38.000000000 -0700
@@ -0,0 +1,110 @@
+'\" t
+.\"
+.\" Copyright 2002-2004 Sun Microsystems, Inc. All Rights Reserved.
+.\" 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.
+.\"
+.\"
+.TH klist 1 "2004 ǯ 6 <20><> 22 <20><>"
+.SH "̾<><CCBE>"
+klist \- Kerberos <20><><A5><AF><A5>ǥ󥷥<C7A5><F3A5B7A5><A5><EBA5AD><A5>å<A5><C3A5><B7><A5>ȥ<A4><C8A5><AD><A1><BC><A5><BF><A5><D6><C6>Υ<A4><CEA5><A8><A5>ȥ<A5><C8A5><EA>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.LP
+.BR klist
+<2B><><A4><F2><BB>Ѥ<CD><D1A4><B9><A4>ȡ<A4><C8A1><A5><E6A1BC><A5>ϥ<A4><CFA5><ED><A1><BC><A5><AB><A5>ˤ<A4><CBA4><A4><EBA5AF><A5>ǥ󥷥<C7A5><F3A5B7A5><A5><EBA5AD><A5>å<A5><C3A5><B7><A5><E5>
+<2B><><A5><AD><A1>ơ<A5><C6A1>֥<A5><D6A5><EB><C6>Υ<A4><CEA5><A8><A5>ȥ<A5><C8A5><EA>ɽ<F2><C9BD><BC>Ǥ<A4><C7A4>ޤ<A4><DEA4><B9>
+.SH "<22><><B7><C1>"
+.B klist
+[
+.IR commands " ]"
+.SH "<22><>ǽ<A1><C7BD><C0><E2>"
+.BR klist
+<2B>ϥ<A4><CFA5><ED><A1><BC><A5><AB><A5>ˤ<A4><CBA4><A4><EBA5AF><A5>ǥ󥷥<C7A5><F3A5B7A5><A5><EBA5AD><A5>å<A5><C3A5><B7><A5>ȥ<A4><C8A5><AD><A1>ơ<A5><C6A1>֥<A5><D6A5><EB><C6>Υ<A4><CEA5><A8><A5>ȥ<A5><C8A5><EA>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+<2B><A5><E6A1BC><A5><B6>
+.BR kinit
+<2B><><A4><F2><BB>Ѥ<CD><D1A4>ƥ<A4><C6A5><AF><A5>ǥ󥷥<C7A5><F3A5B7A5><A5><EBA5AD><A5>å<A5><C3A5><B7><A5><E5><A4>ѹ<CA><D1B9><B9><A4><B7><A4>
+.BR ktab
+<2B><><A4><F2><BB>Ѥ<CD><D1A4>ƥ<A4><C6A5><AD><A1><BC><A5>֤<A5><D6A4>ѹ<CA><D1B9><B9><A4><B7><A4><B8>ѹ<CA><D1B9><B9><A4><F2>ǧ<CE><C7A7><A4><B9>ͣ<EB><CDA3><B0><EC><A4><CE>ˡ<FD>ϡ<A4>
+.BR klist
+<2B><><A4><F2><BB>Ѥ<CD><D1A4>ƥ<A4><C6A5><AF><A5>ǥ󥷥<C7A5><F3A5B7A5><A5><EBA5AD><A5>å<A5><C3A5><B7><A5>ޤ<A4><DEA4>ϥ<A4><CFA5><AD><A1><BC><A5>֤<A5><D6A4><CE><C6>Ƥ<CD>ɽ<F2><C9BD><BC><A8><A4><A4>ȤǤ<C8A4><C7A4><B9>
+.BR klist
+<2B><> Kerberos <20>ǡ<A5><C7A1><BC><A5>١<A5><D9A1><BC><A5><B9><A4>ѹ<CA><D1B9><B9><A4>ޤ<A4><DEA4><BB><A4><F3>
+
+.SH "<22><><A5>ޥ<A5><DEA5><F3>"
+.B klist
+[
+\-c [\-fe]]
+[
+\-k [\-tK]]
+[
+<name>]
+[
+\-help ]
+.TP
+.BI \-c
<><C9BD><BC><A8><A4><B7><A4><BF><A4><A4><A5><AF><A5>ǥ󥷥<C7A5><F3A5B7A5><A5><EBA5AD><A5>å<A5><C3A5><B7><A5>Υ<A4><CEA5><A8><A5>ȥ<A5><C8A5><EA><A4><F2><BB><C4>ޤ<A4><DEA4><B9>
+.TP
+.BI \-k
<><C9BD><BC><A8><A4><B7><A4><BF><A4><A4><A5><AD><A1><BC><A5>֤Υ<D6A4><CEA5><A8><A5>ȥ<A5><C8A5><EA><A4><F2><BB><C4>ޤ<A4><DEA4><B9>
+.TP
+.BI <cache_name>
+<2B><><A5><AF><A5>ǥ󥷥<C7A5><F3A5B7A5><A5><EBA5AD><A5>å<A5><C3A5><B7>̾<E5>ޤ<A4><DEA4>ϥ<A4><CFA5><AD><A1><BC><A5><BF>̾<D6><CCBE><A4><F2><BB><C4>ޤ<A4><DEA4><B9>̾<A3><CCBE><C1><B0><A4><F2><BB><C4>ʤ<A4><CAA4><A4><BE>
+<2B><><A5><AF><A5>ǥ󥷥<C7A5><F3A5B7A5><A5><EBA5AD><A5>å<A5><C3A5><B7>̾<E5>ޤ<A4><DEA4>ϥ<A4><CFA5><AD><A1><BC><A5>֤Υǥե<C7A5><D5A5><A9><A5><EB><A5>ͤ<C3><CDA4><AC><BB>Ѥ<CD><D1A4><B5><A4>ޤ<A4><DEA4><B9>
+<2B><><A5><AD><A5>å<A5><C3A5><B7><A5>ȥ<A4><C8A5><AD><A1><BC><A5>֤Υǥե<C7A5><D5A5><A9><A5><EB><A5>ͤˤĤ<CBA4><C4A4>Ƥϡ<C6A4>
+.BR kinit
+<2B>Υޥ˥奢<CBA5><E5A5A2><A5>ڡ<A5><DAA1><BC><A5>򻲾Ȥ<F2BBB2BE><C8A4>Ƥ<A4><C6A4><AF><A4><C0><A4><B5><A4><A4>
+.LP
+\-c <20><><A5>ץ<A5><D7A5><B7><A5><E7><A5><F3><A4><F2><BB><C4><EAA4B7><A4><BF><BE><B9><E7A1A2><A5><AF><A5>ǥ󥷥<C7A5><F3A5B7A5><A5><EBA5AD><A5>å<A5><C3A5><B7><A5>ѤΥ<D1A4><CEA5>ץ<A5><D7A5><B7><A5><E7><A5>ϼ<A4><CFBC>ΤȤ<CEA4><C8A4><AA><A4>Ǥ<A4><C7A4><B9>
+.TP
+.BI \-f
+<2B><><A5><AF><A5>ǥ󥷥<C7A5><F3A5B7A5><E3><A5>ե饰<D5A5><E9A5B0>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.TP
+.BI \-e
+<2B>Ź沽<C5B9><E6B2BD><A5><BF><A5>פ<A5>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.LP
+\-k <20><><A5>ץ<A5><D7A5><B7><A5><E7><A5><F3><A4><F2><BB><C4><EAA4B7><A4><BF><BE><B9><E7A1A2><A5><AD><A1><BC><A5><BF><A5>ѤΥ<D1A4><CEA5>ץ<A5><D7A5><B7><A5><E7><A5>ϼ<A4><CFBC>ΤȤ<CEA4><C8A4><AA><A4>Ǥ<A4><C7A4><B9>
+.TP
+.BI \-t
+<2B><><A5><AD><A1><BC><A5>֥<A5><D6A5><A8><A5>ȥ<A5><C8A5>Υ<A4><CEA5><BF><A5><A5><E0A5B9><A5><BF><A5>פ<A5>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.TP
+.BI \-K
+<2B><><A5><AD><A1><BC><A5>֥<A5><D6A5><A8><A5>ȥ<A5><C8A5><EA> DES <20><><A5><AD><A1><BC>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.LP
+.TP
+.BI \-help
+<2B>إ<A5><D8A5>פ<A5>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.SH "<22><><BB><C8><CD><D1>"
+<2B><><BB><C4><EAA4B7><A4><BF><A5><AD><A1>ơ<A5><C6A1>֥<A5><D6A5>Υ<A4><CEA5><A8><A5>ȥ<A5><C8A5>ȡ<A4><C8A1><A2><A4>Υ<A4><CEA5><BF><A5><A5><E0A5B9><A5><BF><A5>פ<A5> DES <20><><A5><AD>
+<2B><>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.LP
+.ft 3
+.nf
+klist \-k \-t \-K FILE:/temp/mykrb5cc
+.fi
+.ft 1
+.LP
+<2B><><BB><C4><EAA4B7><A4><BF><A5><AF><A5>ǥ󥷥<C7A5><F3A5B7A5><A5><EBA5AD><A5>å<A5><C3A5><B7><A5>Υ<A4><CEA5><A8><A5>ȥ<A5><C8A5>ȡ<A4><C8A1><A2><A4>Υ<A4><CEA5><AF><A5>ǥ󥷥<C7A5><F3A5B7A5><E3><A5>ե饰<D5A5>ȥ<A4><C8A5>ɥ쥹<C9A5><A5>Ȥ<A5>
<><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.LP
+.ft 3
+.nf
+klist \-c \-f FILE:/temp/mykrb5cc
+.fi
+.ft 1
+.LP
--- ./jdk/src/bsd/doc/man/ja/ktab.1 1969-12-31 16:00:00.000000000 -0800
+++ ./jdk/src/bsd/doc/man/ja/ktab.1 2010-07-04 12:38:38.000000000 -0700
@@ -0,0 +1,125 @@
+'\" t
+.\"
+.\" Copyright 2002-2004 Sun Microsystems, Inc. All Rights Reserved.
+.\" 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.
+.\"
+.\"
+.TH ktab 1 "2004 ǯ 6 <20><> 22 <20><>"
+.SH "̾<><CCBE>"
+ktab \- Kerberos <20><><A5><AD><A1>ơ<A5><C6A1>֥<A5><D6A5>ޥ͡<DEA5><CDA1><BC><A5><B8>
+.LP
+.BR ktab
+<2B><><A4><F2><BB>Ѥ<CD><D1A4><B9><A4>ȡ<A4><C8A1><A5><E6A1BC><A5>ϥ<A4><CFA5><ED><A1><BC><A5><AB><A5>ˤ<A4><CBA4><A4><EBA5AD><A1>ơ<A5><C6A1>֥<A5><D6A5>˳<A4>Ǽ<CA><C7BC><A4>줿
+<2B>ץ<A5><D7A5>󥷥ѥ<F3A5B7A5>̾<EB>ȥ<A4><C8A5><B5><A1>ӥ<A5><D3A5><B9><A5><AD><A1><BC><A4><F2><B4><C9><CD>Ǥ<A4><C7A4>ޤ<A4><DEA4><B9><A1><A3><A5><AD><A1><BC><A5><BF><A5><D6><C6>Υץ<CEA5><D7A5>󥷥ѥ<F3A5B7A5>
+<2B>ȥ<A4><C8A5><AD><A1>ڥ<A5><DAA5>ϡ<A4><CFA1>ۥ<A5><DBA5>Ⱦ<A5><C8BE><E5>ư<C7><BA>Ƥ<A4><C6A4><A4><EBA5B5><A1>ӥ<A5><D3A5>ˡ<A4><CBA1><A2><A4><BD><A4><A4>Ȥ<BF>
+Key Distribution Center (KDC) <20><>ǧ<CB>ڤ<BE><DAA4><B5><A4>ޤ<A4><DEA4><B9><A1><A3><A5><B5><A1>Ф<A5> Kerberos <20><>
+<2B><><BB>ѤǤ<D1A4><C7A4><AD><A4><A4><E8A4A6><A4><CB><C0><C4><EAA4B9><A4>ˤϡ<CBA4><CFA1><A2><A4><BD><A4><CE><C1>˥桼<CBA5><E6A1BC><A5>ϥ<A4><CFA5><B5><A1>Ф<A5>ư<AC><BA>Ƥ<A4><C6A4><A4>
+<2B>ۥ<A5><DBA5>Ⱦ<A5><C8BE>ǥ<A4><C7A5><AD><A1><BC><A5>֤<A5><D6A4><F2><C0><C4><EAA4B9>ɬ<EB>פ<CD><D7A4><AC><A4><A2><A4>ޤ<A4><DEA4><B9>ktab <20><><A4><F2><BB>Ѥ<CD><D1A4>ƥ<A4><C6A5><AD><A1><BC><A5><BF>
+<2B><><A4>ѹ<CA><D1B9><B9><A4>Ƥ⡢Kerberos <20>ǡ<A5><C7A1><BC><A5>١<A5><D9A1><BC><A5>ˤϱƶ<CFB1><C6B6><C1><A4>ʤ<A4><CAA4><A4><A4>Ȥ<A4><C8A4><CB><C3>դ<B0><D5A4>Ƥ<A4><C6A4><AF><A4><C0>
+<2B><><A4><A4><A1><A3><A5><AD><A1><BC><A5><BF><A5><D6><C6>Υ<A4><CEA5><AD><A1><BC><A4>ѹ<CA><D1B9><B9><A4><B7><A4><BF><BE>硢Kerberos <20>ǡ<A5><C7A1><BC><A5>١<A5><D9A1><BC><A5><B9><C6><E2><A4>б<C2><D0B1><FE><A4><B9>
+<2B>ս<B2><D5BD><EA><A4>ѹ<CA><D1B9><B9><A4><B9>ɬ<EB>פ<CD><D7A4><AC><A4><A2><A4>ޤ<A4><DEA4><B9>
+.SH "<22><><B7><C1>"
+.B ktab
+[
+.IR commands " ]"
+.SH "<22><>ǽ<A1><C7BD><C0><E2>"
+.BR ktab
+<2B>ϡ<A4><CFA1><A2><A5><AD><A1>ơ<A5><C6A1>֥<A5><D6A5><EB><C6>Υץ<CEA5><D7A5>󥷥ѥ<F3A5B7A5>̾<EB>ȥ<A4><C8A5><AD><A1>ڥ<A5><DAA5><A2><A4><F2><B4><C9><CD><FD><A4>ޤ<A4><DEA4><B9>
+.BR ktab
+<2B><><A4><F2><BB>Ѥ<CD><D1A4><B9><A4>ȡ<A4><C8A1><A5><E6A1BC><A5>ϥ<A4><CFA5><AD><A1>ơ<A5><C6A1>֥<A5><D6A5><EB><C6>Υץ<CEA5><D7A5>󥷥ѥ<F3A5B7A5>̾<EB>ȥ<A4><C8A5><AD><A1>ڥ<A5><DAA5><A2>
+<2B><><B0><EC>ɽ<F7><C9BD><BC><A8><A1>ɲá<C9B2><C3A1><A2><B9><B9><BF><B7><A1>ޤ<A4><DEA4>Ϻ<A4><CFBA><EF><BD>Ǥ<A4><C7A4>ޤ<A4><DEA4><B9><A1><A3><A4><B3><A4><EC><A4><E9><A4><CE><C1><E0><BA>Ϥ<A4><CFA4>٤ơ<D9A4>
+Kerberos <20>ǡ<A5><C7A1><BC><A5>١<A5><D9A1><BC><A5>ˤϱƶ<CFB1><C6B6><C1><A4>ޤ<A4><DEA4><BB><A4><F3>
+.LP
+.ft 3
+.B <20><><A5><AD><A1><BC><A5><BF>
+.LP
+<2B><><A5><AD><A1><BC><A5>֤Ȥϡ<C8A4><CFA1>ۥ<A5><DBA5>Ȥ<A5><C8A4><AC><BB>ļ<A4>ʬ<AB><CAAC><BC>ȤΥ<C8A4><CEA5><AD><A1><A5>ȤΥ<C8A4><CEA5>ԡ<A5><D4A1>Ǥ<A4><C7A4><A4><A5><E6A1BC>
+<2B>Υѥ<CEA5><D1A5><A5>ɤȻ<C9A4><C8BB>Ƥ<A4><C6A4>ޤ<A4><DEA4><B9><A1><A3>ʬ<AB><CAAC><BC>Ȥ<BF> Key Distribution Center (KDC)
+<2B><>ǧ<CB>ڤ<BE><DAA4><B5><A4><BB>ɬ<EB>פ<CD><D7A4><AC><A4><A4>ץꥱ<D7A5><EAA5B1><A1><BC><A5><B7><A5>󥵡<A5><F3A5B5A1>Фϡ<D0A4><CFA1><A2><A4><A4>ȤΥץ<CEA5><D7A5>󥷥ѥ<F3A5B7A5>
+<2B>ȥ<A4><C8A5><AD><A1><BC><A4>ޤ७<DEA4><E0A5AD><A1><BC><A5>֤<A5><D6A4><F2><BB>äƤ<C3A4><C6A4><A4>ɬ<EB>פ<CD><D7A4><AC><A4><A2><A4>ޤ<A4><DEA4><B9><A1><A5><E6A1BC><A5><B6><A4><AC>ʬ<AB><CAAC>
+<2B>ѥ<A5><D1A5><A5>ɤ<A5><C9A4>ݸ<DDB8><A4>Ȥ<A4><C8A4><AC><C2>ڤǤ<DAA4><C7A4><A2><A4>Τ<A4>Ʊ<C8>ͤˡ<CDA4><CBA1>ۥ<A5><DBA5>Ȥϼ<C8A4>ʬ<AB>Υ<A4><CEA5><AD><A1><BC><A5><BF>
+<2B><><A4>ݸ<DDB8><A4>Ȥ<A4><C8A4><AC><C2>ڤǤ<DAA4><C7A4><B9><A1><A3><A5><AD><A1><BC><A5>֥ե<D6A5><D5A5><A1><A5><A4><A5>Ͼ<A4><CFBE>˥<A4><CBA5><ED><A1><BC><A5><AB><A5>ǥ<A5><C7A5><A3><A5><B9><A5><AF>
+<2B><>Ǽ<CA><C7BC><A4>ơ<A4>root <20>ʳ<B0><CAB3>Υ<CEA5><E6A1BC><A5><B6><A4>ɤ<C6><C9A4>ʤ<A4><CAA4><A4><E8A4A6><A4><CB><C0><C4>Ƥ<A4><C6A4><AA>ɬ<AF>פ<CD><D7A4><AC><A4><A2><A4>ޤ<A4><DEA4><B9>
+<2B><><A5><AD><A1><BC><A5>֥ե<D6A5><D5A5><A1><A5><A4><A5>ϰŹ沽<C5B9><E6B2BD><A4><BB><A4>˥ͥåȥ<C8A5><EFA1BC><A5><AF><A4><D8><C1><F7><BF><AE><A4>ʤ<A4><CAA4>Ǥ<A4><C7A4><AF><A4><C0><A4><B5><A4><A4>
+.SH "<22><><A5>ޥ<A5><DEA5><F3>"
+<2B><><BB><C8>ˡ: <20><><A5>ޥ<A5><DEA5>ɹԥ<C9B9><D4A5>ץ<A5><D7A5><B7><A5><E7><A5>Ǥ<A4><C7A4><CF>ʸ<E7><CAB8><BB>Ⱦ<A4>ʸ<AE><CAB8><BB>϶<A4><CFB6>̤<CA><CCA4>ޤ<A4><DEA4><BB><A4><F3>
+.LP
+.B ktab
+\-help
+.LP
+.B ktab
+\-l [\-k <keytab_name>]
+.LP
+.B ktab
+[\-a <principal_name> <password>] [\-k <keytab_name>]
+.LP
+.B ktab
+[\-d <principal_name>] [\-k <keytab_name>]
+.LP
+.TP
+.BI \-l
+<2B><><A5><AD><A1><BC><A5><BF>̾<D6>ȥ<A4><C8A5><A8><A5>ȥ<A5><C8A5><EA><A4><F2><B0><EC>ɽ<F7><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.TP
+.BI \-a
+<principal_name> <password>
+<2B><><A5><A8><A5>ȥ<A5><C8A5>򥭡<A4><F2A5ADA1><BC><A5>֤<A5><D6A4>ɲä<C9B2><C3A4>ޤ<A4><DEA4><B9>Kerberos <20>ǡ<A5><C7A1><BC><A5>١<A5><D9A1><BC><A5><B9><A4>ѹ<CA><D1B9><B9><A4>ޤ<A4><DEA4><BB>
+(<28><><A5>ޥ<A5><DEA5>ɹԤ䥹<D4A4><E4A5B9><A5><AF><A5>ץȤ˥ѥ<CBA5><D1A5><A5>ɤ<A5><C9A4><F2><BB><C4>ʤ<A4><CAA4>Ǥ<A4><C7A4><AF><A4><C0><A4><B5>)<29><>
+.TP
+.BI \-d
+<principal_name>
+<2B><><A5><AD><A1><BC><A5>֤<A5><D6A4><A4><E9A5A8><A5>ȥ<A5><C8A5><EA><A4><F2><BA><EF><BD><FC><A4>ޤ<A4><DEA4><B9>Kerberos <20>ǡ<A5><C7A1><BC><A5>١<A5><D9A1><BC><A5><B9><A4>ѹ<CA><D1B9><B9><A4>ޤ<A4><DEA4><BB><A4><F3>
+.TP
+.BI \-k
+<keytab_name>
+<2B><><A5><AD><A1><BC><A5><BF>̾<D6>ȡ<A4><C8A1><A2>Ƭ<DC><C6AC> FILE: <20>ǻϤޤ<CFA4><DEA4>ѥ<A5><D1A5><B9><A4><F2><BB><C4>ޤ<A4><DEA4><B9>
+.TP
+.BI \-help
+<2B>إ<A5><D8A5>פ<A5>ɽ<F2><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.SH "<22><><BB><C8><CD><D1>"
+<2B>ǥե<C7A5><D5A5><A9><A5>ȤΥ<C8A4><CEA5><AD><A1>ơ<A5><C6A1>֥<A5><D6A5><EB><C6>Υ<A4><CEA5><A8><A5>ȥ<A5><C8A5>򤹤٤<F2A4B9A4>ɽ<C6><C9BD><BC><A8><A4>ޤ<A4><DEA4><B9>
+.LP
+.ft 3
+.nf
+ktab \-l
+.fi
+.ft 1
+.LP
+<2B><><BF><B7><A4><B7><A4>ץ<A5><D7A5>󥷥ѥ<F3A5B7A5><D1A5>򥭡<A4><F2A5ADA1>ơ<A5><C6A1>֥<A5><D6A5><EB><A4>ɲä<C9B2><C3A4>ޤ<A4><DEA4><B9><A1>ѥ<A5><D1A5><A5>ɤ<A5><C9A4><CE><C6>Ϥ<CE><CFA4><AC><B5><E1><A4><E1><A4><E9><A4>ޤ<A4><DEA4><B9>
+.LP
+.ft 3
+.nf
+ktab \-a duke@java.sun.com
+.fi
+.ft 1
+.LP
+<2B><><A5><AD><A1>ơ<A5><C6A1>֥뤫<D6A5><EBA4AB><A4>ץ<A5><D7A5>󥷥ѥ<F3A5B7A5><D1A5><EB><A4><F2><BA><EF><BD><FC><A4>ޤ<A4><DEA4><B9>
+.LP
+.ft 3
+.nf
+ktab \-d duke@java.sun.com
+.fi
+.ft 1
+.LP
+.SH "<22><><A5><BB><A5><AD><A5><E5><A5>ƥ<A5><C6A5>˴ؤ<CBB4><D8A4><B9><A4>ٹ<B7>"
+<2B>ѥ<A5><D1A5><A5>ɤ򥳥ޥ<F2A5B3A5><DEA5>ɹԤ˻<D4A4><CBBB><C4>ʤ<A4><CAA4>Ǥ<A4><C7A4><AF><A4><C0><A4><B5><A4><A4><A1><A3><A4><B3><A4>ϥ<A4><CFA5><BB><A5><AD><A5><E5><A5>ƥ<A5><C6A5>ۡ<A5><DBA1><BC>
+<2B>ˤʤ<CBA4><CAA4>ޤ<A4><DEA4><B9><A1><A3><A4>Ȥ<A4><C8A4>С<A4>UNIX <20><>
+.BI ps
+<2B><><A5>ޥ<A5><DEA5>ɤμ¹<CEBC><C2B9><D4><C3>ˡ<A4><CBA1><A2><B9><B6><B7>Ԥϥѥ<CFA5><D1A5><A5>ɤ򸡽Ф<F2B8A1BD><D0A4><A4>Ȥ<A4><C8A4>Ǥ<A4><C7A4>Ƥ<A4><C6A4>ޤ<A4><DEA4>ޤ<A4><DEA4><B9>
--- ./jdk/src/share/back/commonRef.c 2010-11-04 16:13:17.000000000 -0700
+++ ./jdk/src/share/back/commonRef.c 2010-06-15 22:06:23.000000000 -0700
@@ -23,6 +23,10 @@
* questions.
*/
+#if defined(_ALLBSD_SOURCE)
+#include <stdint.h> /* for uintptr_t */
+#endif
+
#include "util.h"
#include "commonRef.h"
--- ./jdk/src/share/bin/java.c 2010-11-04 16:13:17.000000000 -0700
+++ ./jdk/src/share/bin/java.c 2010-10-31 14:12:34.000000000 -0700
@@ -66,6 +66,10 @@
static jboolean printUsage = JNI_FALSE; /* print and exit*/
static jboolean printXUsage = JNI_FALSE; /* print and exit*/
+#ifdef __APPLE__
+static jboolean continueInSameThread = JNI_FALSE; /* start VM in current thread */
+#endif
+
static const char *_program_name;
static const char *_launcher_name;
static jboolean _is_java_args = JNI_FALSE;
@@ -115,6 +119,10 @@
static void DumpState();
static jboolean RemovableOption(char *option);
+#ifdef __APPLE__
+static int ContinueInSameThread(InvocationFunctions* ifn, int argc, char **argv, char *jarfile, char *classname, int ret);
+#endif
+
/* Maximum supported entries from jvm.cfg. */
#define INIT_MAX_KNOWN_VMS 10
@@ -300,9 +308,16 @@
/* Show the splash screen if needed */
ShowSplashScreen();
-
+
+#ifdef __APPLE__
+ if (continueInSameThread == JNI_TRUE) {
+ return ContinueInSameThread(&ifn, argc, argv, jarfile, classname, ret);
+ } else {
+ return ContinueInNewThread(&ifn, argc, argv, jarfile, classname, ret);
+ }
+#else
return ContinueInNewThread(&ifn, argc, argv, jarfile, classname, ret);
-
+#endif
}
/*
* Always detach the main thread so that it appears to have ended when
@@ -1015,6 +1030,12 @@
} else if (JLI_StrCmp(arg, "-X") == 0) {
printXUsage = JNI_TRUE;
return JNI_TRUE;
+#ifdef __APPLE__
+ } else if (JLI_StrCmp(arg, "-XstartOnFirstThread") == 0) {
+ continueInSameThread = JNI_TRUE;
+ } else if (JLI_StrCCmp(arg, "-Xdock:") == 0) {
+ // XXXDARWIN: Apple VM supports configuration of Dock icon and name via -Xdock:
+#endif
/*
* The following case provide backward compatibility with old-style
* command line options.
@@ -1901,6 +1922,44 @@
}
}
+#ifdef __APPLE__
+static int
+ContinueInSameThread(InvocationFunctions* ifn, int argc,
+ char **argv, char *jarfile, char *classname, int ret)
+{
+
+ /*
+ * If user doesn't specify stack size, check if VM has a preference.
+ * Note that HotSpot no longer supports JNI_VERSION_1_1 but it will
+ * return its default stack size through the init args structure.
+ */
+ if (threadStackSize == 0) {
+ struct JDK1_1InitArgs args1_1;
+ memset((void*)&args1_1, 0, sizeof(args1_1));
+ args1_1.version = JNI_VERSION_1_1;
+ ifn->GetDefaultJavaVMInitArgs(&args1_1); /* ignore return value */
+ if (args1_1.javaStackSize > 0) {
+ threadStackSize = args1_1.javaStackSize;
+ }
+ }
+
+ { /* Create create JVM and invoke main method */
+ JavaMainArgs args;
+ int rslt;
+
+ args.argc = argc;
+ args.argv = argv;
+ args.jarfile = jarfile;
+ args.classname = classname;
+ args.ifn = *ifn;
+
+ rslt = JavaMain((void*)&args);
+
+ return (ret != 0) ? ret : rslt;
+ }
+}
+#endif
+
static void
DumpState()
{
--- ./jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java 2010-11-04 16:13:17.000000000 -0700
+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java 2010-06-15 22:06:25.000000000 -0700
@@ -477,6 +477,10 @@
String[] dirs = new String[] {
userHome + sep + ".themes",
System.getProperty("swing.metacitythemedir"),
+ "/usr/X11R6/share/themes",
+ "/usr/X11R6/share/gnome/themes",
+ "/usr/local/share/themes",
+ "/usr/local/share/gnome/themes",
"/usr/share/themes",
"/usr/gnome/share/themes", // Debian/Redhat/Solaris
"/opt/gnome2/share/themes" // SuSE
--- ./jdk/src/share/classes/com/sun/jmx/snmp/SnmpPduTrap.java 2010-11-04 16:13:17.000000000 -0700
+++ ./jdk/src/share/classes/com/sun/jmx/snmp/SnmpPduTrap.java 2010-06-15 22:06:27.000000000 -0700
@@ -78,6 +78,9 @@
*/
public long timeStamp ;
+ // TODO: IcedTea: I am a stub.
+ static public int trapAuthenticationFailure = 0;
+
/**
--- ./jdk/src/share/classes/com/sun/media/sound/services/bsd-i586/javax.sound.sampled.spi.MixerProvider 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/share/classes/com/sun/media/sound/services/bsd-i586/javax.sound.sampled.spi.MixerProvider 1969-12-31 16:00:00.000000000 -0800
@@ -1,6 +0,0 @@
-# service provider file for Bsd: with DirectAudioDeviceProvider
-# last mixer is default mixer
-com.sun.media.sound.PortMixerProvider
-com.sun.media.sound.SimpleInputDeviceProvider
-com.sun.media.sound.DirectAudioDeviceProvider
-com.sun.media.sound.HeadspaceMixerProvider
--- ./jdk/src/share/classes/com/sun/servicetag/BsdSystemEnvironment.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/share/classes/com/sun/servicetag/BsdSystemEnvironment.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package com.sun.servicetag;
-
-// This class is a copy of the com.sun.scn.servicetags.BsdSystemEnvironment
-// class from the Sun Connection source.
-//
-// The Service Tags team maintains the latest version of the implementation
-// for system environment data collection. JDK will include a copy of
-// the most recent released version for a JDK release. We rename
-// the package to com.sun.servicetag so that the Sun Connection
-// product always uses the latest version from the com.sun.scn.servicetags
-// package. JDK and users of the com.sun.servicetag API
-// (e.g. NetBeans and SunStudio) will use the version in JDK.
-//
-// So we keep this class in src/share/classes instead of src/<os>/classes.
-
-import java.io.*;
-
-/**
- * Bsd implementation of the SystemEnvironment class.
- */
-class BsdSystemEnvironment extends SystemEnvironment {
- BsdSystemEnvironment() {
- setHostId(getBsdHostId());
- setSystemModel(getCommandOutput("/bin/uname", "-i"));
- setSystemManufacturer(getBsdSystemManufacturer());
- setCpuManufacturer(getBsdCpuManufacturer());
- setSerialNumber(getBsdSN());
- }
- private String dmiInfo = null;
-
- private static final int SN = 1;
- private static final int SYS = 2;
- private static final int CPU = 3;
-
- private String getBsdHostId() {
- String output = getCommandOutput("/usr/bin/hostid");
- // trim off the leading 0x
- if (output.startsWith("0x")) {
- output = output.substring(2);
- }
- return output;
- }
-
- /**
- * Tries to obtain and return the cpu manufacturer.
- * @return The cpu manufacturer (an empty string if not found or an error occurred)
- */
- private String getBsdCpuManufacturer() {
- String tmp = getBsdPSNInfo(CPU);
- if (tmp.length() > 0) {
- return tmp;
- }
-
- String contents = getFileContent("/proc/cpuinfo");
- for (String line : contents.split("\n")) {
- if (line.contains("vendor_id")) {
- String[] ss = line.split(":", 2);
- if (ss.length > 1) {
- return ss[1].trim();
- }
- }
- }
-
- // returns an empty string if it can't be found or an error happened
- return getBsdDMIInfo("dmi type 4", "manufacturer");
- }
-
-
- /**
- * Tries to obtain and return the system manufacturer.
- * @return The system manufacturer (an empty string if not found or an error occurred)
- */
- private String getBsdSystemManufacturer() {
- String tmp = getBsdPSNInfo(SYS);
- if (tmp.length() > 0) {
- return tmp;
- }
-
- // returns an empty string if it can't be found or an error happened
- return getBsdDMIInfo("dmi type 1", "manufacturer");
- }
-
- /**
- * Tries to obtain and return the serial number of the system.
- * @return The serial number (an empty string if not found or an error occurred)
- */
- private String getBsdSN() {
- String tmp = getBsdPSNInfo(SN);
- if (tmp.length() > 0) {
- return tmp;
- }
-
- // returns an empty string if it can't be found or an error happened
- return getBsdDMIInfo("dmi type 1", "serial number");
- }
-
- private String getBsdPSNInfo(int target) {
- // try to read from the psn file if it exists
- String contents = getFileContent("/var/run/psn");
- String[] ss = contents.split("\n");
- if (target <= ss.length) {
- return ss[target-1];
- }
-
- // default case is to return ""
- return "";
- }
-
- // reads from dmidecode with the given type and target
- // returns an empty string if nothing was found or an error occurred
- //
- // Sample output segment:
- // Handle 0x0001
- // DMI type 1, 25 bytes.
- // System Information
- // Manufacturer: System manufacturer
- // Product Name: System Product Name
- // Version: System Version
- // Serial Number: System Serial Number
- // UUID: 3091D719-B25B-D911-959D-6D1B12C7686E
- // Wake-up Type: Power Switch
-
- private synchronized String getBsdDMIInfo(String dmiType, String target) {
- // only try to get dmidecode information once, after that, we can
- // reuse the output
- if (dmiInfo == null) {
- Thread dmidecodeThread = new Thread() {
- public void run() {
- dmiInfo = getCommandOutput("/usr/sbin/dmidecode");
- }
- };
- dmidecodeThread.start();
-
- try {
- dmidecodeThread.join(2000);
- if (dmidecodeThread.isAlive()) {
- dmidecodeThread.interrupt();
- dmiInfo = "";
- }
- } catch (InterruptedException ie) {
- dmidecodeThread.interrupt();
- }
- }
-
- if (dmiInfo.length() == 0) {
- return "";
- }
- boolean dmiFlag = false;
- for (String s : dmiInfo.split("\n")) {
- String line = s.toLowerCase();
- if (dmiFlag) {
- if (line.contains(target)) {
- String key = target + ":";
- int indx = line.indexOf(key) + key.length();
- if (line.contains(key) && indx < line.length()) {
- return line.substring(indx).trim();
- }
- String[] ss = line.split(":");
- return ss[ss.length-1];
- }
- } else if (line.contains(dmiType)) {
- dmiFlag = true;
- }
- }
- return "";
- }
-
-}
--- ./jdk/src/share/classes/java/awt/GraphicsEnvironment.java 2010-11-04 16:13:18.000000000 -0700
+++ ./jdk/src/share/classes/java/awt/GraphicsEnvironment.java 2010-06-15 22:06:34.000000000 -0700
@@ -172,7 +172,12 @@
} else {
String osName = System.getProperty("os.name");
headless = defaultHeadless =
- Boolean.valueOf(("Linux".equals(osName) || "SunOS".equals(osName)) &&
+ Boolean.valueOf(("Linux".equals(osName) ||
+ "SunOS".equals(osName) ||
+ "FreeBSD".equals(osName) ||
+ "NetBSD".equals(osName) ||
+ "OpenBSD".equals(osName) ||
+ "Darwin".equals(osName)) &&
(System.getenv("DISPLAY") == null));
}
} else if (nm.equals("true")) {
--- ./jdk/src/share/classes/java/util/TimeZone.java 2010-11-04 16:13:20.000000000 -0700
+++ ./jdk/src/share/classes/java/util/TimeZone.java 2010-10-31 14:12:35.000000000 -0700
@@ -810,15 +810,13 @@
}
int gmtOffset = (hours * 60 + num) * 60 * 1000;
+ zi = ZoneInfoFile.getCustomTimeZone(id, negative ? -gmtOffset : gmtOffset);
if (gmtOffset == 0) {
- zi = ZoneInfoFile.getZoneInfo(GMT_ID);
if (negative) {
zi.setID("GMT-00:00");
} else {
zi.setID("GMT+00:00");
}
- } else {
- zi = ZoneInfoFile.getCustomTimeZone(id, negative ? -gmtOffset : gmtOffset);
}
return zi;
}
--- ./jdk/src/share/classes/sun/awt/FontConfiguration.java 2010-11-04 16:13:22.000000000 -0700
+++ ./jdk/src/share/classes/sun/awt/FontConfiguration.java 2010-06-15 22:06:56.000000000 -0700
@@ -1122,7 +1122,7 @@
*/
HashMap<String, Boolean> existsMap;
public boolean needToSearchForFile(String fileName) {
- if (!FontUtilities.isLinux) {
+ if (!FontUtilities.isLinux || FontUtilities.isBSD) {
return false;
} else if (existsMap == null) {
existsMap = new HashMap<String, Boolean>();
@@ -1362,7 +1362,7 @@
+ "<filename."
+ getString(table_componentFontNameIDs[ii])
+ "> entry is missing!!!");
- if (!osName.contains("Linux")) {
+ if (!osName.contains("Linux") && !osName.contains("BSD") && !osName.contains("Darwin")) {
errors++;
}
}
--- ./jdk/src/share/classes/sun/awt/OSInfo.java 2010-11-04 16:13:22.000000000 -0700
+++ ./jdk/src/share/classes/sun/awt/OSInfo.java 2010-06-15 22:06:56.000000000 -0700
@@ -39,6 +39,7 @@
WINDOWS,
LINUX,
SOLARIS,
+ BSD,
UNKNOWN
}
@@ -100,6 +101,14 @@
return SOLARIS;
}
+ if (osName.contains("BSD")) {
+ return BSD;
+ }
+
+ if (osName.contains("Darwin")) {
+ return BSD;
+ }
+
// determine another OS here
}
--- ./jdk/src/share/classes/sun/font/FontUtilities.java 2010-11-04 16:13:22.000000000 -0700
+++ ./jdk/src/share/classes/sun/font/FontUtilities.java 2010-10-31 14:12:35.000000000 -0700
@@ -46,6 +46,8 @@
public static boolean isLinux;
+ public static boolean isBSD;
+
public static boolean isSolaris8;
public static boolean isSolaris9;
@@ -74,6 +76,11 @@
isLinux = osName.startsWith("Linux");
+ isBSD = (osName.startsWith("FreeBSD") ||
+ osName.startsWith("NetBSD") ||
+ osName.startsWith("OpenBSD") ||
+ osName.startsWith("Darwin"));
+
String t2kStr = System.getProperty("sun.java2d.font.scaler");
if (t2kStr != null) {
useT2K = "t2k".equals(t2kStr);
--- ./jdk/src/share/classes/sun/font/SunFontManager.java 2010-11-04 16:13:22.000000000 -0700
+++ ./jdk/src/share/classes/sun/font/SunFontManager.java 2010-06-15 22:06:58.000000000 -0700
@@ -413,7 +413,7 @@
* registerFonts method as on-screen these JRE fonts
* always go through the T2K rasteriser.
*/
- if (FontUtilities.isLinux) {
+ if (FontUtilities.isLinux || FontUtilities.isBSD) {
/* Linux font configuration uses these fonts */
registerFontDir(jreFontDirName);
}
--- ./jdk/src/share/classes/sun/io/ByteToCharEUC_JP_BSD.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/share/classes/sun/io/ByteToCharEUC_JP_BSD.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package sun.io;
-
-/**
- * Class for converting bytes to characters for the EUC-JP encoding in
- * bsd. This converter supports the JIS0201 and the JIS0208 encoding and
- * omits support for the JIS212 encoding.
- *
- * @author Naveen Sanjeeva
- */
-
-public class ByteToCharEUC_JP_BSD extends ByteToCharJIS0208 {
- private byte savedSecond = 0;
- ByteToCharJIS0201 bcJIS0201 = new ByteToCharJIS0201();
-
- public ByteToCharEUC_JP_BSD() {
- super();
- start = 0xA1;
- end = 0xFE;
- savedSecond = 0;
- }
-
- public int flush(char[] output, int outStart, int outEnd)
- throws MalformedInputException
- {
- if (savedSecond != 0) {
- reset();
- throw new MalformedInputException();
- }
- reset();
- return 0;
- }
-
- /**
- * Resets the converter.
- * Call this method to reset the converter to its initial state
- */
- public void reset() {
- super.reset();
- savedSecond = 0;
- }
-
- public String getCharacterEncoding() {
- return "EUC_JP_BSD";
- }
-
- protected char convSingleByte(int b) {
- if (b < 0 || b > 0x7F)
- return REPLACE_CHAR;
- return bcJIS0201.getUnicode(b);
- }
-
- protected char getUnicode(int byte1, int byte2) {
- if (byte1 == 0x8E) {
- return bcJIS0201.getUnicode(byte2 - 256);
- }
- // Fix for bug 4121358 - similar fix for bug 4117820 put
- // into ByteToCharDoubleByte.getUnicode()
- if (((byte1 < 0) || (byte1 > index1.length))
- || ((byte2 < start) || (byte2 > end)))
- return REPLACE_CHAR;
-
- int n = (index1[byte1 - 0x80] & 0xf) * (end - start + 1)
- + (byte2 - start);
- return index2[index1[byte1 - 0x80] >> 4].charAt(n);
- }
-
- /**
- * Converts sequences of bytes to characters.
- * Conversions that result in Exceptions can be restarted by calling
- * convert again, with appropriately modified parameters.
- * @return the characters written to output.
- * @param input byte array containing text in Double/single Byte
- * @param inStart offset in input array
- * @param inEnd offset of last byte to be converted
- * @param output character array to receive conversion result
- * @param outStart starting offset
- * @param outEnd offset of last byte to be written to
- * @throw UnsupportedCharacterException for any bytes
- * that cannot be converted to the external character set.
- */
- public int convert(byte[] input, int inOff, int inEnd,
- char[] output, int outOff, int outEnd)
- throws UnknownCharacterException,
- ConversionBufferFullException
- {
- char outputChar = REPLACE_CHAR;
- int inputSize = 0; // Size of input
-
- // Record beginning offsets
- charOff = outOff;
- byteOff = inOff;
-
- // Loop until we hit the end of the input
- while (byteOff < inEnd) {
- int byte1, byte2;
-
- if (savedByte == 0) {
- byte1 = input[byteOff];
- inputSize = 1;
- } else {
- byte1 = savedByte;
- savedByte = 0;
- inputSize = 0;
- }
-
- outputChar = convSingleByte(byte1);
-
- if (outputChar == REPLACE_CHAR) { // Multibyte char
- if ((byte1 & 0xff) != 0x8F) { // JIS0208
- if (byteOff + inputSize >= inEnd) {
- // split in the middle of a character
- // save the first byte for next time around
- savedByte = (byte) byte1;
- byteOff += inputSize;
- break;
- }
- byte1 &= 0xff;
- byte2 = input[byteOff + inputSize] & 0xff;
- inputSize++;
- outputChar = getUnicode(byte1, byte2);
- } else if ((byte1 & 0xff) == 0x8F) { // JIS0212
- // Handling of 3-byte sequences for this converter involves
- // just ignoring the relevant bytes and returning a
- // suitable substitute char if one exists.
- if (byteOff + inputSize + 1 >= inEnd) {
- // split in the middle of a character
- // save the first 2 bytes for next time around
- savedByte = (byte) byte1;
- byteOff += inputSize;
- if (byteOff < inEnd) {
- savedSecond = input[byteOff];
- byteOff++;
- }
- break;
- }
-
- // Skip over the saved bytes if any
- if (savedSecond != 0) {
- savedSecond = 0;
- } else {
- inputSize++;
- }
- inputSize++;
- }
- }
-
- if (outputChar == REPLACE_CHAR) {
- if (subMode)
- outputChar = subChars[0];
- else {
- badInputLength = inputSize;
- throw new UnknownCharacterException();
- }
- }
-
- if (charOff >= outEnd)
- throw new ConversionBufferFullException();
-
- output[charOff++] = outputChar;
- byteOff += inputSize;
- }
-
- return charOff - outOff;
- }
-}
--- ./jdk/src/share/classes/sun/io/CharToByteEUC_JP_BSD.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/share/classes/sun/io/CharToByteEUC_JP_BSD.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package sun.io;
-
-/**
- * Class for converting characters to bytes for the EUC-JP encoding in
- * bsd. This converter supports the JIS0201 and the JIS0208 encoding and
- * omits support for the JIS212 encoding.
- *
- * @author Naveen Sanjeeva
- */
-
-public class CharToByteEUC_JP_BSD extends CharToByteJIS0208 {
- CharToByteJIS0201 cbJIS0201 = new CharToByteJIS0201();
-
- public String getCharacterEncoding() {
- return "EUC_JP_BSD";
- }
-
- protected int convSingleByte(char inputChar, byte[] outputByte) {
- byte b;
-
- if (inputChar == 0) {
- outputByte[0] = (byte)0;
- return 1;
- }
-
- if ((b = cbJIS0201.getNative(inputChar)) == 0)
- return 0;
-
- if (b > 0 && b < 128) {
- outputByte[0] = b;
- return 1;
- }
- outputByte[0] = (byte)0x8E;
- outputByte[1] = b;
- return 2;
- }
-
- protected int getNative(char ch) {
- int offset = index1[((ch & 0xff00) >> 8 )] << 8;
- int r = index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
- if (r != 0)
- return r + 0x8080;
- return r;
- }
-
- /**
- * Converts characters to sequences of bytes.
- * Conversions that result in Exceptions can be restarted by calling
- * convert again, with appropriately modified parameters.
- * @return the characters written to output.
- * @param input char array containing text in Unicode
- * @param inStart offset in input array
- * @param inEnd offset of last byte to be converted
- * @param output byte array to receive conversion result
- * @param outStart starting offset
- * @param outEnd offset of last byte to be written to
- * @throw UnsupportedCharacterException for any character
- * that cannot be converted to the external character set.
- */
- public int convert(char[] input, int inOff, int inEnd,
- byte[] output, int outOff, int outEnd)
- throws MalformedInputException, UnknownCharacterException,
- ConversionBufferFullException
- {
- char inputChar; // Input character to be converted
- byte[] outputByte; // Output byte written to output
- int inputSize = 0; // Size of input
- int outputSize = 0; // Size of output
- byte[] tmpbuf = new byte[4];
-
- // Record beginning offsets
- charOff = inOff;
- byteOff = outOff;
-
- if (highHalfZoneCode != 0) {
- inputChar = highHalfZoneCode;
- highHalfZoneCode = 0;
- if (input[inOff] >= 0xdc00 && input[inOff] <= 0xdfff) {
- // This is legal UTF16 sequence.
- badInputLength = 1;
- throw new UnknownCharacterException();
- } else {
- // This is illegal UTF16 sequence.
- badInputLength = 0;
- throw new MalformedInputException();
- }
- }
-
- // Loop until we hit the end of the input
- while(charOff < inEnd) {
- inputSize = 1;
- outputByte = tmpbuf;
- inputChar = input[charOff]; // Get the input character
-
- // Is this a high surrogate?
- if(inputChar >= '\uD800' && inputChar <= '\uDBFF') {
- // Is this the last character of the input?
- if (charOff + 1 >= inEnd) {
- highHalfZoneCode = inputChar;
- break;
- }
-
- // Is there a low surrogate following?
- inputChar = input[charOff + 1];
- if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
- // We have a valid surrogate pair. Too bad we don't do
- // surrogates. Is substitution enabled?
- if (subMode) {
- outputByte = subBytes;
- outputSize = subBytes.length;
- inputSize = 2;
- } else {
- badInputLength = 2;
- throw new UnknownCharacterException();
- }
- } else {
- // We have a malformed surrogate pair
- badInputLength = 1;
- throw new MalformedInputException();
- }
- }
- // Is this an unaccompanied low surrogate?
- else if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
- badInputLength = 1;
- throw new MalformedInputException();
- } else {
- outputSize = convSingleByte(inputChar, outputByte);
- if (outputSize == 0) { // DoubleByte
- int ncode = getNative(inputChar);
- if (ncode != 0 && ((ncode & 0xFF0000) == 0)) {
- outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
- outputByte[1] = (byte) (ncode & 0xff);
- outputSize = 2;
- } else {
- if (subMode) {
- outputByte = subBytes;
- outputSize = subBytes.length;
- } else {
- badInputLength = 1;
- throw new UnknownCharacterException();
- }
- }
- }
- }
-
- // If we don't have room for the output, throw an exception
- if (byteOff + outputSize > outEnd)
- throw new ConversionBufferFullException();
-
- // Put the byte in the output buffer
- for (int i = 0; i < outputSize; i++) {
- output[byteOff++] = outputByte[i];
- }
- charOff += inputSize;
- }
- // Return the length written to the output buffer
- return byteOff - outOff;
- }
-
-
- /**
- * the maximum number of bytes needed to hold a converted char
- * @returns the maximum number of bytes needed for a converted char
- */
- public int getMaxBytesPerChar() {
- return 2;
- }
-}
--- ./jdk/src/share/classes/sun/nio/cs/ext/EUC_JP_BSD.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/share/classes/sun/nio/cs/ext/EUC_JP_BSD.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,370 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-import sun.nio.cs.Surrogate;
-
-public class EUC_JP_BSD
- extends Charset
- implements HistoricallyNamedCharset
-{
- public EUC_JP_BSD() {
- super("x-euc-jp-bsd", ExtendedCharsets.aliasesFor("x-euc-jp-bsd"));
- }
-
- public String historicalName() {
- return "EUC_JP_BSD";
- }
-
- public boolean contains(Charset cs) {
- return ((cs instanceof JIS_X_0201)
- || (cs.name().equals("US-ASCII"))
- || (cs instanceof EUC_JP_BSD));
- }
-
- public CharsetDecoder newDecoder() {
- return new Decoder(this);
- }
-
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
-
- private static class Decoder extends CharsetDecoder {
- JIS_X_0201.Decoder decoderJ0201;
- protected final char REPLACE_CHAR='\uFFFD';
-
- private static final int start = 0xa1;
- private static final int end = 0xfe;
- private static final short[] jis0208Index1 =
- JIS_X_0208_Decoder.getIndex1();
- private static final String[] jis0208Index2 =
- JIS_X_0208_Decoder.getIndex2();
-
- private Decoder(Charset cs) {
- super(cs, 1.0f, 1.0f);
- decoderJ0201 = new JIS_X_0201.Decoder(cs);
- }
-
- protected char convSingleByte(int b) {
- if (b < 0 || b > 0x7f)
- return REPLACE_CHAR;
- return decoderJ0201.decode(b);
- }
-
- protected char decodeDouble(int byte1, int byte2) {
- if (byte1 == 0x8e) {
- return decoderJ0201.decode(byte2 - 256);
- }
-
- if (((byte1 < 0) || (byte1 > jis0208Index1.length))
- || ((byte2 < start) || (byte2 > end)))
- return REPLACE_CHAR;
-
- int n = (jis0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1)
- + (byte2 - start);
- return jis0208Index2[jis0208Index1[byte1 - 0x80] >> 4].charAt(n);
- }
-
- private CoderResult decodeArrayLoop(ByteBuffer src,
- CharBuffer dst)
- {
- byte[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- assert (sp <= sl);
- sp = (sp <= sl ? sp : sl);
-
- char[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
- assert (dp <= dl);
- dp = (dp <= dl ? dp : dl);
-
- int b1 = 0, b2 = 0;
- int inputSize = 0;
- char outputChar = REPLACE_CHAR; // U+FFFD;
-
- try {
- while (sp < sl) {
- b1 = sa[sp] & 0xff;
- inputSize = 1;
- if ((b1 & 0x80) == 0) {
- outputChar = (char)b1;
- }
- else { // Multibyte char
- if ((b1 & 0xff) == 0x8f) { // JIS0212
- if (sp + 3 > sl)
- return CoderResult.UNDERFLOW;
- inputSize = 3;
- return CoderResult.unmappableForLength(inputSize); // substitute
- } else {
- // JIS0208
- if (sp + 2 > sl)
- return CoderResult.UNDERFLOW;
- b2 = sa[sp + 1] & 0xff;
- inputSize = 2;
- outputChar = decodeDouble(b1, b2);
- }
- }
- if (outputChar == REPLACE_CHAR) { // can't be decoded
- return CoderResult.unmappableForLength(inputSize);
- }
- if (dp + 1 > dl)
- return CoderResult.OVERFLOW;
- da[dp++] = outputChar;
- sp += inputSize;
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
-
- private CoderResult decodeBufferLoop(ByteBuffer src,
- CharBuffer dst)
- {
- int mark = src.position();
- char outputChar = REPLACE_CHAR; // U+FFFD;
-
- try {
- while (src.hasRemaining()) {
- int b1 = src.get() & 0xff;
- int inputSize = 1;
-
- if ((b1 & 0x80) == 0) {
- outputChar = (char)b1;
- } else { // Multibyte char
-
- if ((b1 & 0xff) == 0x8f) { // JIS0212 not supported
- if (src.remaining() < 2)
- return CoderResult.UNDERFLOW;
- return CoderResult.unmappableForLength(3);
- } else {
- // JIS0208
- if (src.remaining() < 1)
- return CoderResult.UNDERFLOW;
- int b2 = src.get() & 0xff;
- inputSize++;
- outputChar = decodeDouble(b1, b2);
- }
- }
-
- if (outputChar == REPLACE_CHAR)
- return CoderResult.unmappableForLength(inputSize);
- if (dst.remaining() < 1)
- return CoderResult.OVERFLOW;
- dst.put(outputChar);
- mark += inputSize;
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(mark);
- }
- }
-
- protected CoderResult decodeLoop(ByteBuffer src,
- CharBuffer dst)
- {
- if (src.hasArray() && dst.hasArray())
- return decodeArrayLoop(src, dst);
- else
- return decodeBufferLoop(src, dst);
- }
- }
-
-
- private static class Encoder extends CharsetEncoder {
-
- JIS_X_0201.Encoder encoderJ0201;
-
- private final Surrogate.Parser sgp = new Surrogate.Parser();
- private static final short[] jis0208Index1 =
- JIS_X_0208_Encoder.getIndex1();
- private static final String[] jis0208Index2 =
- JIS_X_0208_Encoder.getIndex2();
-
- private Encoder(Charset cs) {
- super(cs, 2.0f, 2.0f);
- encoderJ0201 = new JIS_X_0201.Encoder(cs);
- }
-
- public boolean canEncode(char c) {
- byte[] encodedBytes = new byte[2];
-
- if (encodeSingle(c, encodedBytes) == 0) { //doublebyte
- if (encodeDouble(c) == 0)
- return false;
- }
- return true;
- }
-
- protected int encodeSingle(char inputChar, byte[] outputByte) {
- byte b;
-
- if (inputChar == 0) {
- outputByte[0] = (byte)0;
- return 1;
- }
-
- if ((b = encoderJ0201.encode(inputChar)) == 0)
- return 0;
-
- if (b > 0 && b < 128) {
- outputByte[0] = b;
- return 1;
- }
- outputByte[0] = (byte)0x8e;
- outputByte[1] = b;
- return 2;
- }
-
- protected int encodeDouble(char ch) {
- int offset = jis0208Index1[((ch & 0xff00) >> 8 )] << 8;
- int r = jis0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
- if (r != 0)
- return r + 0x8080;
- return r;
- }
-
- private CoderResult encodeArrayLoop(CharBuffer src,
- ByteBuffer dst)
- {
- char[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- assert (sp <= sl);
- sp = (sp <= sl ? sp : sl);
- byte[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
- assert (dp <= dl);
- dp = (dp <= dl ? dp : dl);
-
- final byte[] outputByte = new byte[2];
-
- try {
- while (sp < sl) {
- char c = sa[sp];
-
- if (Character.isSurrogate(c)) {
- if (sgp.parse(c, sa, sp, sl) < 0)
- return sgp.error();
- return sgp.unmappableResult();
- }
-
- int outputSize = encodeSingle(c, outputByte);
- if (outputSize == 0) { // DoubleByte
- int ncode = encodeDouble(c);
- if (ncode != 0 && ((ncode & 0xFF0000) == 0)) {
- outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
- outputByte[1] = (byte) (ncode & 0xff);
- outputSize = 2;
- } else {
- return CoderResult.unmappableForLength(1);
- }
- }
-
- if (dl - dp < outputSize)
- return CoderResult.OVERFLOW;
- // Put the byte in the output buffer
- for (int i = 0; i < outputSize; i++) {
- da[dp++] = outputByte[i];
- }
- sp++;
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
-
- private CoderResult encodeBufferLoop(CharBuffer src,
- ByteBuffer dst)
- {
- final byte[] outputByte = new byte[4];
- int mark = src.position();
-
- try {
- while (src.hasRemaining()) {
- char c = src.get();
- if (Character.isSurrogate(c)) {
- if (sgp.parse(c, src) < 0)
- return sgp.error();
- return sgp.unmappableResult();
- }
-
- int outputSize = encodeSingle(c, outputByte);
- if (outputSize == 0) { // DoubleByte
- int ncode = encodeDouble(c);
- if (ncode != 0 ) {
- if ((ncode & 0xFF0000) == 0) {
- outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
- outputByte[1] = (byte) (ncode & 0xff);
- outputSize = 2;
- }
- } else {
- return CoderResult.unmappableForLength(1);
- }
- }
-
- if (dst.remaining() < outputSize)
- return CoderResult.OVERFLOW;
-
- // Put the byte in the output buffer
- for (int i = 0; i < outputSize; i++) {
- dst.put(outputByte[i]);
- }
- mark++;
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(mark);
- }
- }
-
- protected CoderResult encodeLoop(CharBuffer src,
- ByteBuffer dst)
- {
- if (src.hasArray() && dst.hasArray())
- return encodeArrayLoop(src, dst);
- else
- return encodeBufferLoop(src, dst);
- }
- }
-}
--- ./jdk/src/share/classes/sun/print/PSPrinterJob.java 2010-11-04 16:13:23.000000000 -0700
+++ ./jdk/src/share/classes/sun/print/PSPrinterJob.java 2010-06-15 22:07:04.000000000 -0700
@@ -1534,7 +1534,9 @@
pFlags |= NOSHEET;
ncomps+=1;
}
- if (System.getProperty("os.name").equals("Linux")) {
+
+ String osname = System.getProperty("os.name");
+ if (osname.equals("Linux") || osname.equals("FreeBSD") || osname.equals("NetBSD") || osname.equals("OpenBSD") || osname.equals("Darwin")) {
execCmd = new String[ncomps];
execCmd[n++] = "/usr/bin/lpr";
if ((pFlags & PRINTER) != 0) {
--- ./jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java 2010-11-04 16:13:23.000000000 -0700
+++ ./jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java 2010-06-15 22:07:06.000000000 -0700
@@ -83,7 +83,9 @@
String osname = System.getProperty("os.name");
if (osname.startsWith("SunOS")) {
gssLibs = new String[]{ "libgss.so" };
- } else if (osname.startsWith("Linux")) {
+ } else if (osname.startsWith("Linux") ||
+ osname.startsWith("Darwin") ||
+ osname.endsWith("BSD")) {
gssLibs = new String[]{
"libgssapi.so",
"libgssapi_krb5.so",
--- ./jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider 2010-11-04 16:13:24.000000000 -0700
+++ ./jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider 2010-06-15 22:07:11.000000000 -0700
@@ -30,3 +30,4 @@
#[solaris]sun.tools.attach.SolarisAttachProvider
#[windows]sun.tools.attach.WindowsAttachProvider
#[linux]sun.tools.attach.LinuxAttachProvider
+#[bsd]sun.tools.attach.BsdAttachProvider
--- ./jdk/src/share/classes/sun/tools/jar/Main.java 2010-11-04 16:13:24.000000000 -0700
+++ ./jdk/src/share/classes/sun/tools/jar/Main.java 2010-06-15 22:07:11.000000000 -0700
@@ -50,6 +50,7 @@
String zname = "";
String[] files;
String rootjar = null;
+ String cwd;
// An entryName(path)->File map generated during "expand", it helps to
// decide whether or not an existing entry in a jar file needs to be
@@ -866,6 +867,19 @@
* Extracts specified entries from JAR file.
*/
void extract(InputStream in, String files[]) throws IOException {
+ // Current working directory
+
+ cwd = System.getProperty("user.dir");
+ if (cwd == null) {
+ fatalError(getMsg("error.no.cwd"));
+ }
+ cwd = (new File(cwd)).getCanonicalPath();
+ if (!cwd.endsWith(File.separator)) {
+ cwd += File.separator;
+ }
+
+ // Extract the files
+
ZipInputStream zis = new ZipInputStream(in);
ZipEntry e;
// Set of all directory entries specified in archive. Disallows
@@ -896,6 +910,19 @@
* Extracts specified entries from JAR file, via ZipFile.
*/
void extract(String fname, String files[]) throws IOException {
+ // Current working directory
+
+ cwd = System.getProperty("user.dir");
+ if (cwd == null) {
+ fatalError(getMsg("error.no.cwd"));
+ }
+ cwd = (new File(cwd)).getCanonicalPath();
+ if (!cwd.endsWith(File.separator)) {
+ cwd += File.separator;
+ }
+
+ // Extract the files
+
ZipFile zf = new ZipFile(fname);
Set<ZipEntry> dirs = newDirSet();
Enumeration<? extends ZipEntry> zes = zf.entries();
@@ -927,6 +954,10 @@
ZipEntry rc = null;
String name = e.getName();
File f = new File(e.getName().replace('/', File.separatorChar));
+ if (!f.getCanonicalPath().startsWith(cwd)) {
+ output(formatMsg("out.ignore.entry", name));
+ return null;
+ }
if (e.isDirectory()) {
if (f.exists()) {
if (!f.isDirectory()) {
@@ -948,6 +979,10 @@
} else {
if (f.getParent() != null) {
File d = new File(f.getParent());
+ if (!d.getCanonicalPath().startsWith(cwd)) {
+ output(formatMsg("out.ignore.entry", name));
+ return null;
+ }
if (!d.exists() && !d.mkdirs() || !d.isDirectory()) {
throw new IOException(formatMsg(
"error.create.dir", d.getPath()));
--- ./jdk/src/share/classes/sun/tools/jar/resources/jar.properties 2010-11-04 16:13:24.000000000 -0700
+++ ./jdk/src/share/classes/sun/tools/jar/resources/jar.properties 2010-06-15 22:07:11.000000000 -0700
@@ -44,6 +44,8 @@
{0} : could not create directory
error.incorrect.length=\
incorrect length while processing: {0}
+error.no.cwd=\
+ {0} : could not determine current working directory
out.added.manifest=\
added manifest
out.update.manifest=\
--- ./jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt 2010-11-04 16:13:24.000000000 -0700
+++ ./jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt 2010-06-15 22:07:15.000000000 -0700
@@ -38,6 +38,7 @@
# gnumake JDK=<java_home> OSNAME=solaris [OPT=true] [LIBARCH=sparcv9]
# gnumake JDK=<java_home> OSNAME=linux [OPT=true]
# gnumake JDK=<java_home> OSNAME=win32 [OPT=true]
+# gnumake JDK=<java_home> OSNAME=bsd [OPT=true]
#
########################################################################
@@ -120,6 +121,29 @@
LINK_SHARED=link -dll -out:$@
endif
+# BSD GNU C Compiler
+ifeq ($(OSNAME), bsd)
+ # GNU Compiler options needed to build it
+ COMMON_FLAGS=-fno-strict-aliasing -fPIC -fno-omit-frame-pointer
+ # Options that help find errors
+ COMMON_FLAGS+= -W -Wall -Wno-unused -Wno-parentheses
+ ifeq ($(OPT), true)
+ CFLAGS=-O2 $(COMMON_FLAGS)
+ else
+ CFLAGS=-g $(COMMON_FLAGS)
+ endif
+ # Object files needed to create library
+ OBJECTS=$(SOURCES:%.c=%.o)
+ # Library name and options needed to build it
+ # XXX: Needs to be fixed for MacOS X
+ LIBRARY=lib$(LIBNAME).so
+ LDFLAGS=-Wl,-soname=$(LIBRARY) -static-libgcc -mimpure-text
+ # Libraries we are dependent on
+ LIBRARIES=-lc
+ # Building a shared library
+ LINK_SHARED=$(LINK.c) -shared -o $@
+endif
+
# Common -I options
CFLAGS += -I.
CFLAGS += -I../agent_util
--- ./jdk/src/share/hpi/include/hpi_impl.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/hpi/include/hpi_impl.h 2010-06-15 22:07:16.000000000 -0700
@@ -138,7 +138,11 @@
int sysBind(int fd, struct sockaddr *him, int len);
int sysAccept(int fd, struct sockaddr *him, int *len);
int sysGetSockName(int fd, struct sockaddr *him, int *len);
-#ifdef _LP64
+#if defined(_LP64) || defined(_ALLBSD_SOURCE)
+// XXXBSD: The implementations all use ssize_t, except on Windows,
+// regardless of _LP64. The resulting mismatch between "int" and "ssize_t"
+// causes gcc on Darwin to report a conflicting types error.
+// Appears to be an upstream issue introduced in 1.7
ssize_t sysSendTo(int fd, char *buf, int len, int flags, struct sockaddr *to,
int tolen);
ssize_t sysRecvFrom(int fd, char *buf, int nbytes, int flags,
--- ./jdk/src/share/lib/security/java.security-openbsd 1969-12-31 16:00:00.000000000 -0800
+++ ./jdk/src/share/lib/security/java.security-openbsd 2010-01-30 09:28:24.000000000 -0800
@@ -0,0 +1,269 @@
+#
+# This is the "master security properties file".
+#
+# 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
+# "provider" refers to a package or set of packages that supply a
+# concrete implementation of a subset of the cryptography aspects of
+# the Java Security API. A provider may, for example, implement one or
+# more digital signature algorithms or message digest algorithms.
+#
+# Each provider must implement a subclass of the Provider class.
+# To register a provider in this master security properties file,
+# specify the Provider subclass name and priority in the format
+#
+# security.provider.<n>=<className>
+#
+# This declares a provider, and specifies its preference
+# order n. The preference order is the order in which providers are
+# searched for requested algorithms (when no specific provider is
+# requested). The order is 1-based; 1 is the most preferred, followed
+# by 2, and so on.
+#
+# <className> must specify the subclass of the Provider class whose
+# constructor sets the values of various properties that are required
+# for the Java Security API to look up the algorithms or other
+# facilities implemented by the provider.
+#
+# There must be at least one provider specification in java.security.
+# There is a default provider that comes standard with the JDK. It
+# is called the "SUN" provider, and its Provider subclass
+# named Sun appears in the sun.security.provider package. Thus, the
+# "SUN" provider is registered via the following:
+#
+# security.provider.1=sun.security.provider.Sun
+#
+# (The number 1 is used for the default provider.)
+#
+# Note: Providers can be dynamically registered instead by calls to
+# either the addProvider or insertProviderAt method in the Security
+# class.
+
+#
+# List of providers and their preference orders (see above):
+#
+security.provider.1=sun.security.provider.Sun
+security.provider.2=sun.security.rsa.SunRsaSign
+security.provider.3=sun.security.ec.SunEC
+security.provider.4=com.sun.net.ssl.internal.ssl.Provider
+security.provider.5=com.sun.crypto.provider.SunJCE
+security.provider.6=sun.security.jgss.SunProvider
+security.provider.7=com.sun.security.sasl.Provider
+security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
+security.provider.9=sun.security.smartcardio.SunPCSC
+
+#
+# Select the source of seed data for SecureRandom. By default an
+# attempt is made to use the entropy gathering device specified by
+# the securerandom.source property. If an exception occurs when
+# accessing the URL then the traditional system/thread activity
+# algorithm is used.
+#
+# On Solaris and Linux systems, if file:/dev/urandom is specified and it
+# exists, a special SecureRandom implementation is activated by default.
+# This "NativePRNG" reads random bytes directly from /dev/urandom.
+#
+# On Windows systems, the URLs file:/dev/random and file:/dev/urandom
+# enables use of the Microsoft CryptoAPI seed functionality.
+#
+# On OpenBSD use file:///dev/srandom for strong but blocking random
+# generator, file:/dev/random for hardware random generators,
+# file:///dev/arandom for non-blocking high-quality pseudo-random
+# data and file:///dev/urandom for non-blocking random data that
+# does not guarantee the data to be strong. See random(4) for more
+# info.
+#
+securerandom.source=file:///dev/arandom
+#
+# The entropy gathering device is described as a URL and can also
+# be specified with the system property "java.security.egd". For example,
+# -Djava.security.egd=file:/dev/urandom
+# Specifying this system property will override the securerandom.source
+# setting.
+
+#
+# Class to instantiate as the javax.security.auth.login.Configuration
+# provider.
+#
+login.configuration.provider=com.sun.security.auth.login.ConfigFile
+
+#
+# Default login configuration file
+#
+#login.config.url.1=file:${user.home}/.java.login.config
+
+#
+# Class to instantiate as the system Policy. This is the name of the class
+# that will be used as the Policy object.
+#
+policy.provider=sun.security.provider.PolicyFile
+
+# The default is to have a single system-wide policy file,
+# and a policy file in the user's home directory.
+policy.url.1=file:${java.home}/lib/security/java.policy
+policy.url.2=file:${user.home}/.java.policy
+
+# whether or not we expand properties in the policy file
+# if this is set to false, properties (${...}) will not be expanded in policy
+# files.
+policy.expandProperties=true
+
+# whether or not we allow an extra policy to be passed on the command line
+# with -Djava.security.policy=somefile. Comment out this line to disable
+# this feature.
+policy.allowSystemProperty=true
+
+# whether or not we look into the IdentityScope for trusted Identities
+# when encountering a 1.1 signed JAR file. If the identity is found
+# and is trusted, we grant it AllPermission.
+policy.ignoreIdentityScope=false
+
+#
+# Default keystore type.
+#
+keystore.type=jks
+
+#
+# Class to instantiate as the system scope:
+#
+system.scope=sun.security.provider.IdentityDatabase
+
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageAccess unless the
+# corresponding RuntimePermission ("accessClassInPackage."+package) has
+# been granted.
+package.access=sun.,com.sun.imageio.
+
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageDefinition unless the
+# corresponding RuntimePermission ("defineClassInPackage."+package) has
+# been granted.
+#
+# by default, no packages are restricted for definition, and none of
+# the class loaders supplied with the JDK call checkPackageDefinition.
+#
+#package.definition=
+
+#
+# Determines whether this properties file can be appended to
+# or overridden on the command line via -Djava.security.properties
+#
+security.overridePropertiesFile=true
+
+#
+# Determines the default key and trust manager factory algorithms for
+# the javax.net.ssl package.
+#
+ssl.KeyManagerFactory.algorithm=SunX509
+ssl.TrustManagerFactory.algorithm=PKIX
+
+#
+# The Java-level namelookup cache policy for successful lookups:
+#
+# any negative value: caching forever
+# any positive value: the number of seconds to cache an address for
+# zero: do not cache
+#
+# default value is forever (FOREVER). For security reasons, this
+# caching is made forever when a security manager is set. When a security
+# manager is not set, the default behavior in this implementation
+# is to cache for 30 seconds.
+#
+# NOTE: setting this to anything other than the default value can have
+# serious security implications. Do not set it unless
+# you are sure you are not exposed to DNS spoofing attack.
+#
+#networkaddress.cache.ttl=-1
+
+# The Java-level namelookup cache policy for failed lookups:
+#
+# any negative value: cache forever
+# any positive value: the number of seconds to cache negative lookup results
+# zero: do not cache
+#
+# In some Microsoft Windows networking environments that employ
+# the WINS name service in addition to DNS, name service lookups
+# that fail may take a noticeably long time to return (approx. 5 seconds).
+# For this reason the default caching policy is to maintain these
+# results for 10 seconds.
+#
+#
+networkaddress.cache.negative.ttl=10
+
+#
+# Properties to configure OCSP for certificate revocation checking
+#
+
+# Enable OCSP
+#
+# By default, OCSP is not used for certificate revocation checking.
+# This property enables the use of OCSP when set to the value "true".
+#
+# NOTE: SocketPermission is required to connect to an OCSP responder.
+#
+# Example,
+# ocsp.enable=true
+
+#
+# Location of the OCSP responder
+#
+# By default, the location of the OCSP responder is determined implicitly
+# from the certificate being validated. This property explicitly specifies
+# the location of the OCSP responder. The property is used when the
+# Authority Information Access extension (defined in RFC 3280) is absent
+# from the certificate or when it requires overriding.
+#
+# Example,
+# ocsp.responderURL=http://ocsp.example.net:80
+
+#
+# Subject name of the OCSP responder's certificate
+#
+# By default, the certificate of the OCSP responder is that of the issuer
+# of the certificate being validated. This property identifies the certificate
+# of the OCSP responder when the default does not apply. Its value is a string
+# distinguished name (defined in RFC 2253) which identifies a certificate in
+# the set of certificates supplied during cert path validation. In cases where
+# the subject name alone is not sufficient to uniquely identify the certificate
+# then both the "ocsp.responderCertIssuerName" and
+# "ocsp.responderCertSerialNumber" properties must be used instead. When this
+# property is set then those two properties are ignored.
+#
+# Example,
+# ocsp.responderCertSubjectName="CN=OCSP Responder, O=XYZ Corp"
+
+#
+# Issuer name of the OCSP responder's certificate
+#
+# By default, the certificate of the OCSP responder is that of the issuer
+# of the certificate being validated. This property identifies the certificate
+# of the OCSP responder when the default does not apply. Its value is a string
+# distinguished name (defined in RFC 2253) which identifies a certificate in
+# the set of certificates supplied during cert path validation. When this
+# property is set then the "ocsp.responderCertSerialNumber" property must also
+# be set. When the "ocsp.responderCertSubjectName" property is set then this
+# property is ignored.
+#
+# Example,
+# ocsp.responderCertIssuerName="CN=Enterprise CA, O=XYZ Corp"
+
+#
+# Serial number of the OCSP responder's certificate
+#
+# By default, the certificate of the OCSP responder is that of the issuer
+# of the certificate being validated. This property identifies the certificate
+# of the OCSP responder when the default does not apply. Its value is a string
+# of hexadecimal digits (colon or space separators may be present) which
+# identifies a certificate in the set of certificates supplied during cert path
+# validation. When this property is set then the "ocsp.responderCertIssuerName"
+# property must also be set. When the "ocsp.responderCertSubjectName" property
+# is set then this property is ignored.
+#
+# Example,
+# ocsp.responderCertSerialNumber=2A:FF:00
+
--- ./jdk/src/share/native/com/sun/java/util/jar/pack/defines.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/com/sun/java/util/jar/pack/defines.h 2010-06-15 22:07:17.000000000 -0700
@@ -32,6 +32,10 @@
#include <unistd.h>
#endif
+#ifndef NO_ZLIB
+# include <zconf.h>
+#endif
+
#ifndef FULL
#define FULL 1 /* Adds <500 bytes to the zipped final product. */
#endif
@@ -89,11 +93,13 @@
// bytes and byte arrays
typedef unsigned int uint;
+#ifdef NO_ZLIB
#ifdef _LP64
typedef unsigned int uLong; // Historical zlib, should be 32-bit.
#else
typedef unsigned long uLong;
#endif
+#endif
#ifdef _MSC_VER
typedef LONGLONG jlong;
typedef DWORDLONG julong;
--- ./jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp 2010-06-15 22:07:17.000000000 -0700
@@ -22,6 +22,9 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
+#ifdef _ALLBSD_SOURCE
+#include <stdint.h>
+#endif
#include <sys/types.h>
#include <stdio.h>
@@ -35,7 +38,7 @@
#if defined(unix) && !defined(PRODUCT)
#include "pthread.h"
-#define THREAD_SELF ((int)pthread_self())
+#define THREAD_SELF ((intptr_t) pthread_self())
#endif
#include "defines.h"
@@ -58,9 +61,9 @@
// Single-threaded, implementation, not reentrant.
// Includes a weak error check against MT access.
#ifndef THREAD_SELF
-#define THREAD_SELF (0)
+#define THREAD_SELF ((intptr_t) 0)
#endif
-NOT_PRODUCT(static int uThread = -1;)
+NOT_PRODUCT(static intptr_t uThread = -1;)
unpacker* unpacker::non_mt_current = null;
unpacker* unpacker::current() {
@@ -69,7 +72,7 @@
}
static void set_current_unpacker(unpacker* u) {
unpacker::non_mt_current = u;
- assert(((uThread = (u == null) ? -1 : THREAD_SELF),
+ assert(((uThread = (u == null) ? ((intptr_t) -1) : THREAD_SELF),
true));
}
--- ./jdk/src/share/native/com/sun/media/sound/DirectAudioDevice.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/com/sun/media/sound/DirectAudioDevice.c 2010-06-15 22:07:17.000000000 -0700
@@ -33,7 +33,11 @@
#include <jni.h>
// for malloc
+#ifdef _ALLBSD_SOURCE
+#include <stdlib.h>
+#else
#include <malloc.h>
+#endif
#include "SoundDefs.h"
#include "DirectAudio.h"
#include "Utilities.h"
--- ./jdk/src/share/native/com/sun/media/sound/Platform.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/com/sun/media/sound/Platform.c 2010-06-15 22:07:17.000000000 -0700
@@ -99,5 +99,17 @@
return com_sun_media_sound_Platform_LIB_ALSA;
}
#endif
+#if (X_PLATFORM == X_BSD)
+ switch (feature) {
+ case com_sun_media_sound_Platform_FEATURE_MIDIIO:
+ return com_sun_media_sound_Platform_LIB_MAIN;
+ case com_sun_media_sound_Platform_FEATURE_PORTS:
+ return com_sun_media_sound_Platform_LIB_MAIN;
+ case com_sun_media_sound_Platform_FEATURE_DIRECT_AUDIO:
+ // XXXBSD: When native Direct Audio support is ported change
+ // this back to returning com_sun_media_sound_Platform_LIB_MAIN
+ return 0;
+ }
+#endif
return 0;
}
--- ./jdk/src/share/native/com/sun/media/sound/SoundDefs.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/com/sun/media/sound/SoundDefs.h 2010-06-15 22:07:17.000000000 -0700
@@ -31,6 +31,7 @@
#define X_WINDOWS 1
#define X_SOLARIS 2
#define X_LINUX 3
+#define X_BSD 4
// types for X_ARCH
#define X_I586 1
@@ -50,7 +51,7 @@
// following is needed for _LP64
-#if ((X_PLATFORM == X_SOLARIS) || (X_PLATFORM == X_LINUX))
+#if ((X_PLATFORM == X_SOLARIS) || (X_PLATFORM == X_LINUX) || (X_PLATFORM == X_BSD))
#include <sys/types.h>
#endif
@@ -130,4 +131,9 @@
#endif
+#if X_PLATFORM == X_BSD
+#define INLINE inline
+#endif
+
+
#endif // __SOUNDDEFS_INCLUDED__
--- ./jdk/src/share/native/common/check_code.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/common/check_code.c 2010-10-31 14:12:35.000000000 -0700
@@ -1067,7 +1067,7 @@
* Make sure that branches don't go into the middle of nowhere.
*/
-static jint ntohl(jint n)
+static jint _ck_ntohl(jint n)
{
unsigned char *p = (unsigned char *)&n;
return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
@@ -1146,26 +1146,26 @@
}
}
if (opcode == JVM_OPC_tableswitch) {
- keys = ntohl(lpc[2]) - ntohl(lpc[1]) + 1;
+ keys = _ck_ntohl(lpc[2]) - _ck_ntohl(lpc[1]) + 1;
delta = 1;
} else {
- keys = ntohl(lpc[1]); /* number of pairs */
+ keys = _ck_ntohl(lpc[1]); /* number of pairs */
delta = 2;
/* Make sure that the tableswitch items are sorted */
for (k = keys - 1, lptr = &lpc[2]; --k >= 0; lptr += 2) {
- int this_key = ntohl(lptr[0]); /* NB: ntohl may be unsigned */
- int next_key = ntohl(lptr[2]);
+ int this_key = _ck_ntohl(lptr[0]); /* NB: ntohl may be unsigned */
+ int next_key = _ck_ntohl(lptr[2]);
if (this_key >= next_key) {
CCerror(context, "Unsorted lookup switch");
}
}
}
saved_operand = NEW(int, keys + 2);
- if (!isLegalTarget(context, offset + ntohl(lpc[0])))
+ if (!isLegalTarget(context, offset + _ck_ntohl(lpc[0])))
CCerror(context, "Illegal default target in switch");
- saved_operand[keys + 1] = code_data[offset + ntohl(lpc[0])];
+ saved_operand[keys + 1] = code_data[offset + _ck_ntohl(lpc[0])];
for (k = keys, lptr = &lpc[3]; --k >= 0; lptr += delta) {
- int target = offset + ntohl(lptr[0]);
+ int target = offset + _ck_ntohl(lptr[0]);
if (!isLegalTarget(context, target))
CCerror(context, "Illegal branch in tableswitch");
saved_operand[k + 1] = code_data[target];
@@ -1634,7 +1634,7 @@
if (lpc + 2 >= (int *)end) {
return -1; /* do not read pass the end */
}
- index = ntohl(lpc[2]) - ntohl(lpc[1]);
+ index = _ck_ntohl(lpc[2]) - _ck_ntohl(lpc[1]);
if ((index < 0) || (index > 65535)) {
return -1; /* illegal */
} else {
@@ -1647,7 +1647,7 @@
int npairs;
if (lpc + 1 >= (int *)end)
return -1; /* do not read pass the end */
- npairs = ntohl(lpc[1]);
+ npairs = _ck_ntohl(lpc[1]);
/* There can't be more than 64K labels because of the limit
* on per-method byte code length.
*/
--- ./jdk/src/share/native/java/io/io_util.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/java/io/io_util.h 2010-06-15 22:07:17.000000000 -0700
@@ -29,7 +29,15 @@
extern jfieldID IO_fd_fdID;
extern jfieldID IO_handle_fdID;
-#if !defined(O_DSYNC) || !defined(O_SYNC)
+#ifdef _ALLBSD_SOURCE
+#include <fcntl.h>
+#ifndef O_SYNC
+#define O_SYNC O_FSYNC
+#endif
+#ifndef O_DSYNC
+#define O_DSYNC O_FSYNC
+#endif
+#elif !defined(O_DSYNC) || !defined(O_SYNC)
#define O_SYNC (0x0800)
#define O_DSYNC (0x2000)
#endif
--- ./jdk/src/share/native/java/lang/fdlibm/include/fdlibm.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/java/lang/fdlibm/include/fdlibm.h 2010-10-31 14:12:35.000000000 -0700
@@ -24,6 +24,15 @@
* questions.
*/
+#ifdef __OpenBSD__
+#include <sys/types.h>
+#endif
+#ifdef _ALLBSD_SOURCE
+#include <machine/endian.h>
+#elif __linux__
+#define __USE_BSD 1
+#include <endian.h>
+#endif
#include "jfdlibm.h"
#ifdef __NEWVALID /* special setup for Sun test regime */
@@ -34,7 +43,8 @@
#endif
#endif
-#ifdef _LITTLE_ENDIAN
+#if (defined(__solaris__) && defined(_LITTLE_ENDIAN)) || \
+ BYTE_ORDER == LITTLE_ENDIAN
#define __HI(x) *(1+(int*)&x)
#define __LO(x) *(int*)&x
#define __HIp(x) *(1+(int*)x)
--- ./jdk/src/share/native/java/lang/fdlibm/include/jfdlibm.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/java/lang/fdlibm/include/jfdlibm.h 2010-06-15 22:07:17.000000000 -0700
@@ -61,7 +61,7 @@
#define log1p jlog1p
#define expm1 jexpm1
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#define __ieee754_sqrt __j__ieee754_sqrt
#define __ieee754_acos __j__ieee754_acos
#define __ieee754_acosh __j__ieee754_acosh
--- ./jdk/src/share/native/java/util/zip/Inflater.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/java/util/zip/Inflater.c 2010-10-31 14:12:36.000000000 -0700
@@ -67,6 +67,10 @@
return jlong_zero;
} else {
char *msg;
+// BSDXXX needed for FreeBSD 5.4 and below with system zlib
+#if defined(__FreeBSD__) && __FreeBSD__ < 6
+ strm->adler = 1;
+#endif
switch (inflateInit2(strm, nowrap ? -MAX_WBITS : MAX_WBITS)) {
case Z_OK:
return ptr_to_jlong(strm);
@@ -213,6 +217,10 @@
if (inflateReset(jlong_to_ptr(addr)) != Z_OK) {
JNU_ThrowInternalError(env, 0);
}
+// BSDXXX needed for FreeBSD 5.4 and below with system zlib
+#if defined(__FreeBSD__) && __FreeBSD__ < 6
+ ((z_stream *)jlong_to_ptr(strm))->adler = 1;
+#endif
}
JNIEXPORT void JNICALL
--- ./jdk/src/share/native/java/util/zip/zip_util.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/java/util/zip/zip_util.c 2010-06-15 22:07:18.000000000 -0700
@@ -46,6 +46,10 @@
#include "zip_util.h"
#include "zlib.h"
+#ifdef _ALLBSD_SOURCE
+#include "largefile_bsd.h"
+#endif
+
/* USE_MMAP means mmap the CEN & ENDHDR part of the zip file. */
#ifdef USE_MMAP
#include <sys/mman.h>
--- ./jdk/src/share/native/sun/awt/debug/debug_util.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/debug/debug_util.h 2010-06-15 22:07:18.000000000 -0700
@@ -50,7 +50,9 @@
#include <stdio.h>
#include <string.h>
#include <assert.h>
+#if !defined(_ALLBSD_SOURCE)
#include <malloc.h>
+#endif
#include <limits.h>
/* keep these after the other headers */
--- ./jdk/src/share/native/sun/awt/image/BufImgSurfaceData.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/image/BufImgSurfaceData.c 2010-10-31 14:12:36.000000000 -0700
@@ -24,7 +24,11 @@
*/
#include "BufImgSurfaceData.h"
+#ifdef _ALLBSD_SOURCE
+#include <stdlib.h>
+#else
#include "malloc.h"
+#endif
#include "sun_awt_image_BufImgSurfaceData.h"
--- ./jdk/src/share/native/sun/awt/image/DataBufferNative.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/image/DataBufferNative.c 2010-06-15 22:07:18.000000000 -0700
@@ -23,7 +23,11 @@
* questions.
*/
+#ifdef _ALLBSD_SOURCE
+#include <stdlib.h>
+#else
#include "malloc.h"
+#endif
#include "SurfaceData.h"
#include "sun_awt_image_DataBufferNative.h"
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv2x2_f.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv2x2_f.c 2010-06-15 22:07:19.000000000 -0700
@@ -86,7 +86,7 @@
#endif /* MLIB_USE_FTOI_CLAMPING */
/***************************************************************/
-#if defined(_LITTLE_ENDIAN) && !defined(_NO_LONGLONG)
+#if (BYTE_ORDER == LITTLE_ENDIAN) && !defined(_NO_LONGLONG)
/* NB: Explicit cast to DTYPE is necessary to avoid warning from Microsoft VC compiler.
And we need to explicitly define cast behavior if source exceeds destination range.
@@ -103,7 +103,7 @@
dp[0 ] = (DTYPE) ((res0) & DTYPE_MASK); \
dp[chan1] = (DTYPE) ((res1) & DTYPE_MASK)
-#endif /* defined(_LITTLE_ENDIAN) && !defined(_NO_LONGLONG) */
+#endif /* (BYTE_ORDER == LITTLE_ENDIAN) && !defined(_NO_LONGLONG) */
/***************************************************************/
#ifdef _NO_LONGLONG
@@ -114,17 +114,17 @@
#else /* _NO_LONGLONG */
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[chan1]) << 32) | ((mlib_s64)sp[0] & 0xffffffff)
-#else /* _LITTLE_ENDIAN */
+#else
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[0]) << 32) | ((mlib_s64)sp[chan1] & 0xffffffff)
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
#endif /* _NO_LONGLONG */
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16ext.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16ext.c 2010-06-15 22:07:20.000000000 -0700
@@ -126,7 +126,7 @@
#define D2I(x) CLAMP_S32((x) SAT_OFF)
/***************************************************************/
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define STORE2(res0, res1) \
dp[0 ] = res1; \
@@ -138,7 +138,7 @@
dp[0 ] = res0; \
dp[chan1] = res1
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
/***************************************************************/
#ifdef _NO_LONGLONG
@@ -149,17 +149,17 @@
#else /* _NO_LONGLONG */
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[chan1]) << 32) | S64TOS32((mlib_s64)sp[0])
-#else /* _LITTLE_ENDIAN */
+#else
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[0]) << 32) | S64TOS32((mlib_s64)sp[chan1])
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
#endif /* _NO_LONGLONG */
/***************************************************************/
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16nw.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16nw.c 2010-06-15 22:07:20.000000000 -0700
@@ -94,7 +94,7 @@
#define D2I(x) CLAMP_S32((x) SAT_OFF)
/***************************************************************/
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define STORE2(res0, res1) \
dp[0 ] = res1; \
@@ -106,7 +106,7 @@
dp[0 ] = res0; \
dp[chan1] = res1
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
/***************************************************************/
#ifdef _NO_LONGLONG
@@ -117,17 +117,17 @@
#else /* _NO_LONGLONG */
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[chan1]) << 32) | S64TOS32((mlib_s64)sp[0])
-#else /* _LITTLE_ENDIAN */
+#else
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[0]) << 32) | S64TOS32((mlib_s64)sp[chan1])
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
#endif /* _NO_LONGLONG */
/***************************************************************/
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8ext.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8ext.c 2010-06-15 22:07:20.000000000 -0700
@@ -126,7 +126,7 @@
#define D2I(x) CLAMP_S32((x) SAT_OFF)
/***************************************************************/
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define STORE2(res0, res1) \
dp[0 ] = res1; \
@@ -138,7 +138,7 @@
dp[0 ] = res0; \
dp[chan1] = res1
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
/***************************************************************/
#ifdef _NO_LONGLONG
@@ -149,17 +149,17 @@
#else /* _NO_LONGLONG */
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[chan1]) << 32) | S64TOS32((mlib_s64)sp[0])
-#else /* _LITTLE_ENDIAN */
+#else
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[0]) << 32) | S64TOS32((mlib_s64)sp[chan1])
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
#endif /* _NO_LONGLONG */
/***************************************************************/
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8nw.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8nw.c 2010-06-15 22:07:20.000000000 -0700
@@ -95,7 +95,7 @@
#define D2I(x) CLAMP_S32((x) SAT_OFF)
/***************************************************************/
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define STORE2(res0, res1) \
dp[0 ] = res1; \
@@ -107,7 +107,7 @@
dp[0 ] = res0; \
dp[chan1] = res1
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
/***************************************************************/
#ifdef _NO_LONGLONG
@@ -118,17 +118,17 @@
#else /* _NO_LONGLONG */
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[chan1]) << 32) | S64TOS32((mlib_s64)sp[0])
-#else /* _LITTLE_ENDIAN */
+#else
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[0]) << 32) | S64TOS32((mlib_s64)sp[chan1])
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
#endif /* _NO_LONGLONG */
/***************************************************************/
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16ext.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16ext.c 2010-06-15 22:07:20.000000000 -0700
@@ -126,7 +126,7 @@
#define D2I(x) CLAMP_S32((x) SAT_OFF)
/***************************************************************/
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define STORE2(res0, res1) \
dp[0 ] = res1; \
@@ -138,7 +138,7 @@
dp[0 ] = res0; \
dp[chan1] = res1
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
/***************************************************************/
#ifdef _NO_LONGLONG
@@ -149,17 +149,17 @@
#else /* _NO_LONGLONG */
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[chan1]) << 32) | S64TOS32((mlib_s64)sp[0])
-#else /* _LITTLE_ENDIAN */
+#else
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[0]) << 32) | S64TOS32((mlib_s64)sp[chan1])
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
#endif /* _NO_LONGLONG */
/***************************************************************/
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16nw.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16nw.c 2010-06-15 22:07:20.000000000 -0700
@@ -94,7 +94,7 @@
#define D2I(x) CLAMP_S32((x) SAT_OFF)
/***************************************************************/
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define STORE2(res0, res1) \
dp[0 ] = res1; \
@@ -106,7 +106,7 @@
dp[0 ] = res0; \
dp[chan1] = res1
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
/***************************************************************/
#ifdef _NO_LONGLONG
@@ -117,17 +117,17 @@
#else /* _NO_LONGLONG */
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[chan1]) << 32) | S64TOS32((mlib_s64)sp[0])
-#else /* _LITTLE_ENDIAN */
+#else
#define LOAD_BUFF(buff) \
*(mlib_s64*)(buff + i) = (((mlib_s64)sp[0]) << 32) | S64TOS32((mlib_s64)sp[chan1])
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
#endif /* _NO_LONGLONG */
/***************************************************************/
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageCopy_Bit.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageCopy_Bit.c 2010-06-15 22:07:20.000000000 -0700
@@ -95,7 +95,7 @@
dst = dp[0];
if (ld_offset + size < 32) {
dmask = (mask0 << (32 - size)) >> ld_offset;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src0 = (src0 << 24) | ((src0 & 0xFF00) << 8) | ((src0 >> 8) & 0xFF00) | (src0 >> 24);
src = (src0 >> (ld_offset - ls_offset));
dst = (dst << 24) | ((dst & 0xFF00) << 8) | ((dst >> 8) & 0xFF00) | (dst >> 24);
@@ -104,12 +104,12 @@
#else
src = (src0 >> (ld_offset - ls_offset));
dp[0] = (dst & (~dmask)) | (src & dmask);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
return;
}
dmask = mask0 >> ld_offset;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src0 = (src0 << 24) | ((src0 & 0xFF00) << 8) | ((src0 >> 8) & 0xFF00) | (src0 >> 24);
src = (src0 >> (ld_offset - ls_offset));
dst = (dst << 24) | ((dst & 0xFF00) << 8) | ((dst >> 8) & 0xFF00) | (dst >> 24);
@@ -118,7 +118,7 @@
#else
src = (src0 >> (ld_offset - ls_offset));
dp[0] = (dst & ~dmask) | (src & dmask);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
j = 32 - ld_offset;
dp++;
ls_offset += j;
@@ -131,7 +131,7 @@
if (ld_offset + size < 32) {
dmask = (mask0 << (32 - size)) >> ld_offset;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src0 = (src0 << 24) | ((src0 & 0xFF00) << 8) | ((src0 >> 8) & 0xFF00) | (src0 >> 24);
src1 = (src1 << 24) | ((src1 & 0xFF00) << 8) | ((src1 >> 8) & 0xFF00) | (src1 >> 24);
src = (src0 << shift) | (src1 >> (32 - shift));
@@ -141,12 +141,12 @@
#else
src = (src0 << shift) | (src1 >> (32 - shift));
dp[0] = (dst & ~dmask) | (src & dmask);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
return;
}
dmask = mask0 >> ld_offset;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src0 = (src0 << 24) | ((src0 & 0xFF00) << 8) | ((src0 >> 8) & 0xFF00) | (src0 >> 24);
src1 = (src1 << 24) | ((src1 & 0xFF00) << 8) | ((src1 >> 8) & 0xFF00) | (src1 >> 24);
src = (src0 << shift) | (src1 >> (32 - shift));
@@ -156,7 +156,7 @@
#else
src = (src0 << shift) | (src1 >> (32 - shift));
dp[0] = (dst & ~dmask) | (src & dmask);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
j = 32 - ld_offset;
dp++;
sp++;
@@ -164,19 +164,19 @@
}
if (j < size) src1 = sp[0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src1 = (src1 << 24) | ((src1 & 0xFF00) << 8) | ((src1 >> 8) & 0xFF00) | (src1 >> 24);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
for (; j <= size - 32; j += 32) {
src0 = src1;
src1 = sp[1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src1 = (src1 << 24) | ((src1 & 0xFF00) << 8) | ((src1 >> 8) & 0xFF00) | (src1 >> 24);
src = (src0 << ls_offset) | (src1 >> (32 - ls_offset));
dp[0] = (src << 24) | ((src & 0xFF00) << 8) | ((src >> 8) & 0xFF00) | (src >> 24);
#else
dp[0] = (src0 << ls_offset) | (src1 >> (32 - ls_offset));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
sp++;
dp++;
}
@@ -187,7 +187,7 @@
if (ls_offset + j > 32) src1 = sp[1];
dst = dp[0];
dmask = mask0 << (32 - j);
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src1 = (src1 << 24) | ((src1 & 0xFF00) << 8) | ((src1 >> 8) & 0xFF00) | (src1 >> 24);
src = (src0 << ls_offset) | (src1 >> (32 - ls_offset));
dst = (dst << 24) | ((dst & 0xFF00) << 8) | ((dst >> 8) & 0xFF00) | (dst >> 24);
@@ -196,7 +196,7 @@
#else
src = (src0 << ls_offset) | (src1 >> (32 - ls_offset));
dp[0] = (dst & ~dmask) | (src & dmask);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
}
#else /* _LONGLONG */
@@ -315,7 +315,7 @@
dst = dp[0];
if (ld_offset >= size) {
dmask = (lmask0 << (32 - size)) >> (ld_offset - size);
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src0 = (src0 << 24) | ((src0 & 0xFF00) << 8) | ((src0 >> 8) & 0xFF00) | (src0 >> 24);
src = (src0 << (ls_offset - ld_offset));
dst = (dst << 24) | ((dst & 0xFF00) << 8) | ((dst >> 8) & 0xFF00) | (dst >> 24);
@@ -324,12 +324,12 @@
#else
src = (src0 << (ls_offset - ld_offset));
dp[0] = (dst & (~dmask)) | (src & dmask);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
return;
}
dmask = lmask0 << (32 - ld_offset);
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src0 = (src0 << 24) | ((src0 & 0xFF00) << 8) | ((src0 >> 8) & 0xFF00) | (src0 >> 24);
src = (src0 << (ls_offset - ld_offset));
dst = (dst << 24) | ((dst & 0xFF00) << 8) | ((dst >> 8) & 0xFF00) | (dst >> 24);
@@ -338,7 +338,7 @@
#else
src = (src0 << (ls_offset - ld_offset));
dp[0] = (dst & ~dmask) | (src & dmask);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
j = ld_offset;
dp--;
ls_offset -= j;
@@ -351,7 +351,7 @@
if (ld_offset >= size) {
dmask = (lmask0 << (32 - size)) >> (ld_offset - size);
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src0 = (src0 << 24) | ((src0 & 0xFF00) << 8) | ((src0 >> 8) & 0xFF00) | (src0 >> 24);
src1 = (src1 << 24) | ((src1 & 0xFF00) << 8) | ((src1 >> 8) & 0xFF00) | (src1 >> 24);
src = (src0 >> shift) | (src1 << (32 - shift));
@@ -361,12 +361,12 @@
#else
src = (src0 >> shift) | (src1 << (32 - shift));
dp[0] = (dst & ~dmask) | (src & dmask);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
return;
}
dmask = lmask0 << (32 - ld_offset);
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src0 = (src0 << 24) | ((src0 & 0xFF00) << 8) | ((src0 >> 8) & 0xFF00) | (src0 >> 24);
src1 = (src1 << 24) | ((src1 & 0xFF00) << 8) | ((src1 >> 8) & 0xFF00) | (src1 >> 24);
src = (src0 >> shift) | (src1 << (32 - shift));
@@ -376,7 +376,7 @@
#else
src = (src0 >> shift) | (src1 << (32 - shift));
dp[0] = (dst & ~dmask) | (src & dmask);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
j = ld_offset;
dp--;
sp--;
@@ -384,22 +384,22 @@
}
if (j < size) src1 = sp[0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src1 = (src1 << 24) | ((src1 & 0xFF00) << 8) | ((src1 >> 8) & 0xFF00) | (src1 >> 24);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
#ifdef __SUNPRO_C
#pragma pipeloop(0)
#endif /* __SUNPRO_C */
for (; j <= size - 32; j += 32) {
src0 = src1;
src1 = sp[-1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src1 = (src1 << 24) | ((src1 & 0xFF00) << 8) | ((src1 >> 8) & 0xFF00) | (src1 >> 24);
src = (src0 >> (32 - ls_offset)) | (src1 << ls_offset);
dp[0] = (src << 24) | ((src & 0xFF00) << 8) | ((src >> 8) & 0xFF00) | (src >> 24);
#else
dp[0] = (src0 >> (32 - ls_offset)) | (src1 << ls_offset);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
sp--;
dp--;
}
@@ -410,7 +410,7 @@
if (ls_offset < j) src1 = sp[-1];
dst = dp[0];
dmask = lmask0 >> (32 - j);
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
src1 = (src1 << 24) | ((src1 & 0xFF00) << 8) | ((src1 >> 8) & 0xFF00) | (src1 >> 24);
src = (src0 >> (32 - ls_offset)) | (src1 << ls_offset);
dst = (dst << 24) | ((dst & 0xFF00) << 8) | ((dst >> 8) & 0xFF00) | (dst >> 24);
@@ -419,7 +419,7 @@
#else
src = (src0 >> (32 - ls_offset)) | (src1 << ls_offset);
dp[0] = (dst & ~dmask) | (src & dmask);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
}
#else /* _LONGLONG */
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_64.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_64.c 2010-10-31 14:12:36.000000000 -0700
@@ -168,7 +168,7 @@
}
/***************************************************************/
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define READ_U8_D64(table0, table1, table2, table3) \
t0 = *(mlib_d64*)((mlib_u8*)table0 + ((s0 << 3) & 0x7F8)); \
@@ -184,7 +184,7 @@
t2 = *(mlib_d64*)((mlib_u8*)table2 + ((s0 >> 5) & 0x7F8)); \
t3 = *(mlib_d64*)((mlib_u8*)table3 + ((s0 << 3) & 0x7F8))
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
/***************************************************************/
void mlib_ImageLookUp_U8_D64(const mlib_u8 *src,
@@ -613,7 +613,7 @@
#pragma pipeloop(0)
#endif /* __SUNPRO_C */
for (i = 0; i < size - 7; i += 4, dp += 8, sa++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
@@ -623,12 +623,12 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
@@ -638,7 +638,7 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
dp[4] = t0;
dp[5] = t1;
@@ -646,7 +646,7 @@
dp[7] = t3;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
@@ -656,12 +656,12 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
@@ -671,7 +671,7 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[4] = t0;
dp[5] = t1;
dp[6] = t2;
@@ -719,7 +719,7 @@
#pragma pipeloop(0)
#endif /* __SUNPRO_C */
for (i = 0; i < size - 7; i += 4, dp += 12, sa++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
@@ -733,14 +733,14 @@
t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
dp[4] = t4;
dp[5] = t5;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
@@ -754,7 +754,7 @@
t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
dp[6] = t0;
dp[7] = t1;
@@ -764,7 +764,7 @@
dp[11] = t5;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
@@ -778,14 +778,14 @@
t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
dp[4] = t4;
dp[5] = t5;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
@@ -799,7 +799,7 @@
t3 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
t4 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
t5 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[6] = t0;
dp[7] = t1;
dp[8] = t2;
@@ -852,7 +852,7 @@
#pragma pipeloop(0)
#endif /* __SUNPRO_C */
for (i = 0; i < size - 7; i += 4, dp += 16, sa++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
@@ -862,12 +862,12 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 21) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
@@ -877,12 +877,12 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 13) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[4] = t0;
dp[5] = t1;
dp[6] = t2;
dp[7] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
@@ -892,12 +892,12 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 5) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[8] = t0;
dp[9] = t1;
dp[10] = t2;
dp[11] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
@@ -907,7 +907,7 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 << 3) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
dp[12] = t0;
dp[13] = t1;
@@ -915,7 +915,7 @@
dp[15] = t3;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 << 3) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
@@ -925,12 +925,12 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 21) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 5) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
@@ -940,12 +940,12 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 13) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[4] = t0;
dp[5] = t1;
dp[6] = t2;
dp[7] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 13) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 13) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 13) & 0x7F8));
@@ -955,12 +955,12 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 5) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 5) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 >> 5) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[8] = t0;
dp[9] = t1;
dp[10] = t2;
dp[11] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_d64 *) ((mlib_u8 *) tab0 + ((s0 >> 21) & 0x7F8));
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 >> 21) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 >> 21) & 0x7F8));
@@ -970,7 +970,7 @@
t1 = *(mlib_d64 *) ((mlib_u8 *) tab1 + ((s0 << 3) & 0x7F8));
t2 = *(mlib_d64 *) ((mlib_u8 *) tab2 + ((s0 << 3) & 0x7F8));
t3 = *(mlib_d64 *) ((mlib_u8 *) tab3 + ((s0 << 3) & 0x7F8));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[12] = t0;
dp[13] = t1;
dp[14] = t2;
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_Bit.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_Bit.c 2010-06-15 22:07:20.000000000 -0700
@@ -88,7 +88,7 @@
} d64_2_f32;
/***************************************************************/
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
static const mlib_u32 mlib_bit_mask[16] = {
0x00000000u, 0xFF000000u, 0x00FF0000u, 0xFFFF0000u,
@@ -126,7 +126,7 @@
0x00000000u, 0x00FFFFFFu, 0xFF000000u, 0xFFFFFFFFu
};
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
/***************************************************************/
mlib_status mlib_ImageLookUp_Bit_U8_1(const mlib_u8 *src,
@@ -228,13 +228,13 @@
#endif /* __SUNPRO_C */
for (; i <= (size - 16); i += 16) {
s0 = *(mlib_u16*)sa;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*da++ = dd_array[s0 & 0xFF];
*da++ = dd_array[s0 >> 8];
#else
*da++ = dd_array[s0 >> 8];
*da++ = dd_array[s0 & 0xFF];
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
sa += 2;
}
@@ -258,20 +258,20 @@
val1 = p_dd[2*val0+1];
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
emask = (mlib_u32)((mlib_s32)(-1)) >> ((4 - (size - i)) * 8);
#else
emask = (mlib_s32)(-1) << ((4 - (size - i)) * 8);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
((mlib_u32*)da)[0] = (val1 & emask) | (((mlib_u32*)da)[0] &~ emask);
#else /* _NO_LONGLONG */
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
mlib_u64 emask = (mlib_u64)((mlib_s64)(-1)) >> ((8 - (size - i)) * 8);
#else
mlib_u64 emask = (mlib_s64)(-1) << ((8 - (size - i)) * 8);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
((mlib_u64*)da)[0] = (((mlib_u64*)dd_array)[sa[0]] & emask) | (((mlib_u64*)da)[0] &~ emask);
@@ -323,13 +323,13 @@
val0 = table[0][0];
val1 = table[0][1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
val0 = val0 | (table[1][0] << 8);
val1 = val1 | (table[1][1] << 8);
#else
val0 = (val0 << 8) | table[1][0];
val1 = (val1 << 8) | table[1][1];
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
val0 |= (val0 << 16);
val1 |= (val1 << 16);
@@ -394,11 +394,11 @@
dd1 = dd2;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
emask = (mlib_u32)((mlib_s32)(-1)) >> ((4 - (size - i)) * 8);
#else
emask = (mlib_s32)(-1) << ((4 - (size - i)) * 8);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
((mlib_u32*)da)[0] = (dd1 & emask) | (((mlib_u32*)da)[0] &~ emask);
#else /* _NO_LONGLONG */
@@ -412,11 +412,11 @@
dd = ((mlib_u64*)dd_array)[s0 & 0xf];
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
emask = (mlib_u64)((mlib_s64)(-1)) >> ((8 - (size - i)) * 8);
#else
emask = (mlib_s64)(-1) << ((8 - (size - i)) * 8);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
((mlib_u64*)da)[0] = (dd & emask) | (((mlib_u64*)da)[0] &~ emask);
#endif /* _NO_LONGLONG */
@@ -462,7 +462,7 @@
buffs = buff + size;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
l0 = (table[0][0] << 24) | (table[2][0] << 16) | (table[1][0] << 8) | (table[0][0]);
h0 = (table[0][1] << 24) | (table[2][1] << 16) | (table[1][1] << 8) | (table[0][1]);
l1 = (l0 >> 8); l1 |= (l1 << 24);
@@ -476,7 +476,7 @@
h1 = (h0 << 8); h1 |= (h1 >> 24);
l2 = (l1 << 8); l2 |= (l2 >> 24);
h2 = (h1 << 8); h2 |= (h2 >> 24);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
/* calculate lookup table */
#ifdef __SUNPRO_C
@@ -564,11 +564,11 @@
dd = ((mlib_u32*)(d_array12 + (s0 & 0xF)))[1];
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
emask = (mlib_u32)((mlib_s32)(-1)) >> ((4 - (size - i)) * 8);
#else
emask = (mlib_s32)(-1) << ((4 - (size - i)) * 8);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = (dd & emask) | (da[0] &~ emask);
}
@@ -611,13 +611,13 @@
buffs = buff + size;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
l = (table[3][0] << 24) | (table[2][0] << 16) | (table[1][0] << 8) | (table[0][0]);
h = (table[3][1] << 24) | (table[2][1] << 16) | (table[1][1] << 8) | (table[0][1]);
#else
l = (table[0][0] << 24) | (table[1][0] << 16) | (table[2][0] << 8) | (table[3][0]);
h = (table[0][1] << 24) | (table[1][1] << 16) | (table[2][1] << 8) | (table[3][1]);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
((mlib_u32*)lh)[0] = l; ((mlib_u32*)lh)[1] = l;
((mlib_u32*)lh)[2] = l; ((mlib_u32*)lh)[3] = h;
--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageUtils.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageUtils.c 2010-06-15 22:07:20.000000000 -0700
@@ -30,7 +30,7 @@
typedef union {
mlib_d64 db;
struct {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
mlib_s32 int1, int0;
#else
mlib_s32 int0, int1;
--- ./jdk/src/share/native/sun/awt/medialib/mlib_c_ImageCopy.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_c_ImageCopy.c 2010-06-15 22:07:21.000000000 -0700
@@ -275,11 +275,11 @@
for (i = 0; j <= (b_size - 4); j += 4, i++) {
src0 = src1;
src1 = pws[i + 1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
pwd[i] = (src0 >> lshift) | (src1 << rshift);
#else
pwd[i] = (src0 << lshift) | (src1 >> rshift);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
}
sa += i << 2;
@@ -381,11 +381,11 @@
for (; j <= (src_width - 4); j += 4) {
src0 = src1;
src1 = ps[1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*((mlib_s32 *) (pdst_row + j)) = (src0 >> shl) | (src1 << shr);
#else
*((mlib_s32 *) (pdst_row + j)) = (src0 << shl) | (src1 >> shr);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
ps++;
}
}
@@ -414,11 +414,11 @@
for (; j <= (src_width - 8); j += 8) {
src0 = src1;
src1 = ps[1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*((mlib_s64 *) (pdst_row + j)) = (src0 >> shl) | (src1 << shr);
#else
*((mlib_s64 *) (pdst_row + j)) = (src0 << shl) | (src1 >> shr);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
ps++;
}
}
@@ -484,11 +484,11 @@
for (; j <= (src_width - 2); j += 2) {
src0 = src1;
src1 = ps[1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*((mlib_s32 *) (pdst_row + j)) = (src0 >> 16) | (src1 << 16);
#else
*((mlib_s32 *) (pdst_row + j)) = (src0 << 16) | (src1 >> 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
ps++;
}
}
@@ -516,11 +516,11 @@
for (; j <= (src_width - 4); j += 4) {
src0 = src1;
src1 = ps[1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*((mlib_s64 *) (pdst_row + j)) = (src0 >> shl) | (src1 << shr);
#else
*((mlib_s64 *) (pdst_row + j)) = (src0 << shl) | (src1 >> shr);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
ps++;
}
}
@@ -585,11 +585,11 @@
for (; j <= (src_width - 2); j += 2) {
src0 = src1;
src1 = ps[1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*((mlib_s64 *) (pdst_row + j)) = (src0 >> 32) | (src1 << 32);
#else
*((mlib_s64 *) (pdst_row + j)) = (src0 << 32) | (src1 >> 32);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
ps++;
}
}
@@ -687,11 +687,11 @@
#endif /* __SUNPRO_C */
for (; n > SIZE; n -= SIZE) {
s1 = *tmp++;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*(TYPE *) dp = (s0 >> shl) | (s1 << shr);
#else
*(TYPE *) dp = (s0 << shl) | (s1 >> shr);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = s1;
dp += SIZE;
sp += SIZE;
--- ./jdk/src/share/native/sun/awt/medialib/mlib_c_ImageLookUp_f.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_c_ImageLookUp_f.c 2010-06-15 22:07:21.000000000 -0700
@@ -120,7 +120,7 @@
} \
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
/***************************************************************/
#define READ_U8_U8_ALIGN(table0, table1, table2, table3) \
@@ -163,7 +163,7 @@
t2 = *(mlib_u32*)((mlib_u8*)table2 + ((s0 >> 14) & 0x3FC)); \
t3 = *(mlib_u32*)((mlib_u8*)table3 + ((s0 >> 22) & 0x3FC))
-#else /* _LITTLE_ENDIAN */
+#else /* BYTE_ORDER == ... */
/***********/
#define READ_U8_U8_ALIGN(table0, table1, table2, table3) \
@@ -206,7 +206,7 @@
t2 = *(mlib_u32*)((mlib_u8*)table2 + ((s0 >> 6) & 0x3FC)); \
t3 = *(mlib_u32*)((mlib_u8*)table3 + ((s0 << 2) & 0x3FC))
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
/***************************************************************/
void mlib_c_ImageLookUp_U8_U8(const mlib_u8 *src,
@@ -297,11 +297,11 @@
da[0] = t;
da++;
dp = (mlib_u8 *) da;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*dp++ = tab[s2 >> 8];
#else
*dp++ = tab[s2 & 0xFF];
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
sp = (mlib_u8 *) sa;
i += 5;
for (; i < size; i++, dp++, sp++)
@@ -403,11 +403,11 @@
da[0] = t;
da++;
dp = (mlib_u8 *) da;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*dp++ = tab0[s2 >> 8];
#else
*dp++ = tab0[s2 & 0xFF];
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
sp = (mlib_u8 *) sa;
i += 5;
@@ -544,11 +544,11 @@
da[0] = t;
da++;
dp = (mlib_u8 *) da;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*dp++ = tab1[s2 >> 8];
#else
*dp++ = tab1[s2 & 0xFF];
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
sp = (mlib_u8 *) sa;
i += 5;
@@ -694,11 +694,11 @@
da[0] = t;
da++;
dp = (mlib_u8 *) da;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*dp++ = tab0[s2 >> 8];
#else
*dp++ = tab0[s2 & 0xFF];
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
sp = (mlib_u8 *) sa;
i += 5;
@@ -1852,21 +1852,21 @@
s0 = tab0[0];
s1 = tab1[0];
for (i = 1; i < 256; i++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s2 = (s1 << 8) + s0;
#else
s2 = (s0 << 8) + s1;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = tab0[i];
s1 = tab1[i];
tab[i - 1] = (mlib_u16) s2;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s2 = (s1 << 8) + s0;
#else
s2 = (s0 << 8) + s1;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
tab[255] = (mlib_u16) s2;
for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
@@ -1897,11 +1897,11 @@
for (i = 0; i < size - 3; i += 2, da++, sa += 2) {
t0 = tab[s0];
t1 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t = (t1 << 16) + t0;
#else
t = (t0 << 16) + t1;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
s1 = sa[1];
da[0] = t;
@@ -1909,11 +1909,11 @@
t0 = tab[s0];
t1 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t = (t1 << 16) + t0;
#else
t = (t0 << 16) + t1;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = t;
da++;
@@ -1927,13 +1927,13 @@
if (off > 1) {
t0 = tab[sa[0]];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
dp[1] = (t0 >> 8);
dp[0] = t0;
#else
dp[0] = (t0 >> 8);
dp[1] = t0;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
sa++;
size--;
dp += 2;
@@ -1941,11 +1941,11 @@
t0 = tab[sa[0]];
sa++;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*dp++ = t0;
#else
*dp++ = (t0 >> 8);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da = (mlib_s32 *) dp;
@@ -1959,11 +1959,11 @@
for (i = 0; i < size - 4; i += 2, da++, sa += 2) {
t1 = tab[s0];
t2 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t = (t0 >> 8) + (t1 << 8) + (t2 << 24);
#else
t = (t0 << 24) + (t1 << 8) + (t2 >> 8);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
t0 = t2;
s0 = sa[0];
s1 = sa[1];
@@ -1972,29 +1972,29 @@
t1 = tab[s0];
t2 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t = (t0 >> 8) + (t1 << 8) + (t2 << 24);
#else
t = (t0 << 24) + (t1 << 8) + (t2 >> 8);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = t;
da++;
dp = (mlib_u8 *) da;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
dp[0] = (t2 >> 8);
#else
dp[0] = t2;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
if ((size & 1) == 0) {
t0 = tab[sa[0]];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
dp[2] = (t0 >> 8);
dp[1] = t0;
#else
dp[1] = (t0 >> 8);
dp[2] = t0;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
}
}
}
@@ -2012,22 +2012,22 @@
s1 = tab1[0];
s2 = tab2[0];
for (i = 1; i < 256; i++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s3 = (s2 << 24) + (s1 << 16) + (s0 << 8);
#else
s3 = (s0 << 16) + (s1 << 8) + s2;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = tab0[i];
s1 = tab1[i];
s2 = tab2[i];
tab[i - 1] = s3;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s3 = (s2 << 24) + (s1 << 16) + (s0 << 8);
#else
s3 = (s0 << 16) + (s1 << 8) + s2;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
tab[255] = s3;
for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
@@ -2064,24 +2064,24 @@
for (i = 0; i < size - 7; i += 4, da += 3, sa += 4) {
t0 = tab[s0];
t1 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
da[0] = (t0 >> 8) + (t1 << 16);
res2 = (t1 >> 16);
#else
da[0] = (t0 << 8) + (t1 >> 16);
res2 = (t1 << 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
s1 = sa[1];
t0 = tab[s0];
t1 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res2 += (t0 << 8);
res1 = (t0 >> 24) + t1;
#else
res2 += (t0 >> 8);
res1 = (t0 << 24) + t1;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[2];
s1 = sa[3];
da[1] = res2;
@@ -2090,24 +2090,24 @@
t0 = tab[s0];
t1 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
da[0] = (t0 >> 8) + (t1 << 16);
res2 = (t1 >> 16);
#else
da[0] = (t0 << 8) + (t1 >> 16);
res2 = (t1 << 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
s1 = sa[1];
t0 = tab[s0];
t1 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res2 += (t0 << 8);
res1 = (t0 >> 24) + t1;
#else
res2 += (t0 >> 8);
res1 = (t0 << 24) + t1;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[1] = res2;
da[2] = res1;
da += 3;
@@ -2143,11 +2143,11 @@
s2 = tab2[0];
s3 = tab3[0];
for (i = 1; i < 256; i++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s4 = (s3 << 24) + (s2 << 16) + (s1 << 8) + s0;
#else
s4 = (s0 << 24) + (s1 << 16) + (s2 << 8) + s3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = tab0[i];
s1 = tab1[i];
s2 = tab2[i];
@@ -2155,11 +2155,11 @@
tab[i - 1] = s4;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s4 = (s3 << 24) + (s2 << 16) + (s1 << 8) + s0;
#else
s4 = (s0 << 24) + (s1 << 16) + (s2 << 8) + s3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
tab[255] = s4;
for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
@@ -2225,13 +2225,13 @@
for (i = 0; i < size - 4; i += 2, da += 2, sa += 2) {
t1 = tab[s0];
t2 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (t0 >> shift) + (t1 << shift1);
res2 = (t1 >> shift) + (t2 << shift1);
#else
res1 = (t0 << shift) + (t1 >> shift1);
res2 = (t1 << shift) + (t2 >> shift1);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
t0 = t2;
s0 = sa[0];
s1 = sa[1];
@@ -2241,28 +2241,28 @@
t1 = tab[s0];
t2 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (t0 >> shift) + (t1 << shift1);
res2 = (t1 >> shift) + (t2 << shift1);
#else
res1 = (t0 << shift) + (t1 >> shift1);
res2 = (t1 << shift) + (t2 >> shift1);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = res1;
da[1] = res2;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = (da[2] >> shift1);
da[2] = (t2 >> shift) + (t0 << shift1);
#else
t0 = (da[2] << shift1);
da[2] = (t2 << shift) + (t0 >> shift1);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da += 2;
dp = (mlib_u8 *) da + (4 - off);
if ((size & 1) == 0) {
t0 = tab[sa[0]];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
dp[3] = (mlib_u8) (t0 >> 24);
dp[2] = (mlib_u8) (t0 >> 16);
dp[1] = (mlib_u8) (t0 >> 8);
@@ -2272,7 +2272,7 @@
dp[1] = (mlib_u8) (t0 >> 16);
dp[2] = (mlib_u8) (t0 >> 8);
dp[3] = (mlib_u8) t0;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
}
}
}
@@ -2348,13 +2348,13 @@
t3 = tab0[s1];
t4 = tab1[s1];
t5 = tab2[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
da[0] = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
res2 = (t5 << 8) + t4;
#else
da[0] = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
res2 = (t4 << 24) + (t5 << 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
s1 = sa[1];
t0 = tab0[s0];
@@ -2363,13 +2363,13 @@
t3 = tab0[s1];
t4 = tab1[s1];
t5 = tab2[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res2 += ((t1 << 24) + (t0 << 16));
res1 = (t5 << 24) + (t4 << 16) + (t3 << 8) + t2;
#else
res2 += ((t0 << 8) + t1);
res1 = (t2 << 24) + (t3 << 16) + (t4 << 8) + t5;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[2];
s1 = sa[3];
da[1] = res2;
@@ -2382,13 +2382,13 @@
t3 = tab0[s1];
t4 = tab1[s1];
t5 = tab2[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
da[0] = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
res2 = (t5 << 8) + t4;
#else
da[0] = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
res2 = (t4 << 24) + (t5 << 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
s1 = sa[1];
t0 = tab0[s0];
@@ -2397,13 +2397,13 @@
t3 = tab0[s1];
t4 = tab1[s1];
t5 = tab2[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res2 += ((t1 << 24) + (t0 << 16));
res1 = (t5 << 24) + (t4 << 16) + (t3 << 8) + t2;
#else
res2 += ((t0 << 8) + t1);
res1 = (t2 << 24) + (t3 << 16) + (t4 << 8) + t5;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[1] = res2;
da[2] = res1;
da += 3;
@@ -2455,11 +2455,11 @@
t1 = tab1[s0];
t2 = tab2[s0];
t3 = tab3[s0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
#else
res = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
da[0] = res;
}
@@ -2468,11 +2468,11 @@
t1 = tab1[s0];
t2 = tab2[s0];
t3 = tab3[s0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
#else
res = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = res;
}
@@ -2496,11 +2496,11 @@
t2 = tab2[s0];
t3 = tab3[s0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
#else
res1 = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
sa++;
@@ -2513,13 +2513,13 @@
t1 = tab1[s0];
t2 = tab2[s0];
t3 = tab3[s0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res2 = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
res = (res1 >> shift) + (res2 << shift1);
#else
res2 = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
res = (res1 << shift) + (res2 >> shift1);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
res1 = res2;
s0 = sa[0];
da[0] = res;
@@ -2529,21 +2529,21 @@
t1 = tab1[s0];
t2 = tab2[s0];
t3 = tab3[s0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res2 = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
res = (res1 >> shift) + (res2 << shift1);
#else
res2 = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
res = (res1 << shift) + (res2 >> shift1);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = res;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (da[1] >> shift1);
da[1] = (res2 >> shift) + (res1 << shift1);
#else
res1 = (da[1] << shift1);
da[1] = (res2 << shift) + (res1 >> shift1);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
}
}
}
@@ -2617,13 +2617,13 @@
t3 = tab0[s1];
t4 = tab1[s1];
t5 = tab2[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
da[0] = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
res2 = (t5 << 8) + t4;
#else
da[0] = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
res2 = (t4 << 24) + (t5 << 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
s1 = sa[1];
t0 = tab0[s0];
@@ -2632,13 +2632,13 @@
t3 = tab0[s1];
t4 = tab1[s1];
t5 = tab2[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res2 += ((t1 << 24) + (t0 << 16));
res1 = (t5 << 24) + (t4 << 16) + (t3 << 8) + t2;
#else
res2 += ((t0 << 8) + t1);
res1 = (t2 << 24) + (t3 << 16) + (t4 << 8) + t5;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[2];
s1 = sa[3];
da[1] = res2;
@@ -2651,13 +2651,13 @@
t3 = tab0[s1];
t4 = tab1[s1];
t5 = tab2[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
da[0] = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
res2 = (t5 << 8) + t4;
#else
da[0] = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
res2 = (t4 << 24) + (t5 << 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
s1 = sa[1];
t0 = tab0[s0];
@@ -2666,13 +2666,13 @@
t3 = tab0[s1];
t4 = tab1[s1];
t5 = tab2[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res2 += ((t1 << 24) + (t0 << 16));
res1 = (t5 << 24) + (t4 << 16) + (t3 << 8) + t2;
#else
res2 += ((t0 << 8) + t1);
res1 = (t2 << 24) + (t3 << 16) + (t4 << 8) + t5;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[1] = res2;
da[2] = res1;
da += 3;
@@ -2724,11 +2724,11 @@
t1 = tab1[s0];
t2 = tab2[s0];
t3 = tab3[s0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
#else
res = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
da[0] = res;
}
@@ -2737,11 +2737,11 @@
t1 = tab1[s0];
t2 = tab2[s0];
t3 = tab3[s0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
#else
res = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = res;
}
@@ -2765,11 +2765,11 @@
t2 = tab2[s0];
t3 = tab3[s0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
#else
res1 = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
sa++;
@@ -2782,13 +2782,13 @@
t1 = tab1[s0];
t2 = tab2[s0];
t3 = tab3[s0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res2 = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
res = (res1 >> shift) + (res2 << shift1);
#else
res2 = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
res = (res1 << shift) + (res2 >> shift1);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
res1 = res2;
s0 = sa[0];
da[0] = res;
@@ -2798,21 +2798,21 @@
t1 = tab1[s0];
t2 = tab2[s0];
t3 = tab3[s0];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res2 = (t3 << 24) + (t2 << 16) + (t1 << 8) + t0;
res = (res1 >> shift) + (res2 << shift1);
#else
res2 = (t0 << 24) + (t1 << 16) + (t2 << 8) + t3;
res = (res1 << shift) + (res2 >> shift1);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = res;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (da[1] >> shift1);
da[1] = (res2 >> shift) + (res1 << shift1);
#else
res1 = (da[1] << shift1);
da[1] = (res2 << shift) + (res1 >> shift1);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
}
}
}
@@ -2863,21 +2863,21 @@
s0 = tab0[0];
s1 = tab1[0];
for (i = 1; i < 256; i++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s2 = (s1 << 16) + s0;
#else
s2 = (s0 << 16) + s1;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = tab0[i];
s1 = tab1[i];
tab[i - 1] = s2;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s2 = (s1 << 16) + s0;
#else
s2 = (s0 << 16) + s1;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
tab[255] = s2;
for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
@@ -2919,11 +2919,11 @@
else {
t0 = tab[*sa++];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*dp++ = (mlib_u16) (t0);
#else
*dp++ = (mlib_u16) (t0 >> 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da = (mlib_u32 *) dp;
s0 = sa[0];
s1 = sa[1];
@@ -2935,13 +2935,13 @@
for (i = 0; i < size - 4; i += 2, da += 2, sa += 2) {
t1 = tab[s0];
t2 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (t0 >> 16) + (t1 << 16);
res2 = (t1 >> 16) + (t2 << 16);
#else
res1 = (t0 << 16) + (t1 >> 16);
res2 = (t1 << 16) + (t2 >> 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
t0 = t2;
s0 = sa[0];
s1 = sa[1];
@@ -2951,32 +2951,32 @@
t1 = tab[s0];
t2 = tab[s1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (t0 >> 16) + (t1 << 16);
res2 = (t1 >> 16) + (t2 << 16);
#else
res1 = (t0 << 16) + (t1 >> 16);
res2 = (t1 << 16) + (t2 >> 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = res1;
da[1] = res2;
da += 2;
dp = (mlib_u16 *) da;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
dp[0] = (mlib_u16) (t2 >> 16);
#else
dp[0] = (mlib_u16) t2;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
if ((size & 1) == 0) {
t0 = tab[sa[0]];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
dp[2] = (mlib_u16) (t0 >> 16);
dp[1] = (mlib_u16) t0;
#else
dp[1] = (mlib_u16) (t0 >> 16);
dp[2] = (mlib_u16) t0;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
}
}
}
@@ -2994,13 +2994,13 @@
s1 = tab1[0];
s2 = tab2[0];
for (i = 1; i < 256; i++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s3 = (s0 << 16);
s4 = (s2 << 16) + s1;
#else
s3 = s0;
s4 = (s1 << 16) + s2;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = tab0[i];
s1 = tab1[i];
s2 = tab2[i];
@@ -3008,13 +3008,13 @@
tab[2 * i - 1] = s4;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s4 = (s2 << 16) + s1;
tab[510] = s0 << 16;
#else
s4 = (s1 << 16) + s2;
tab[510] = s0;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
tab[511] = s4;
for (j = 0; j < ysize; j++, dst += dlb, src += slb) {
@@ -3050,13 +3050,13 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab + s0 + 4);
t2 = *(mlib_u32 *) ((mlib_u8 *) tab + s1);
t3 = *(mlib_u32 *) ((mlib_u8 *) tab + s1 + 4);
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (t0 >> 16) + (t1 << 16);
res2 = (t1 >> 16) + t2;
#else
res1 = (t0 << 16) + (t1 >> 16);
res2 = (t1 << 16) + t2;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0] << 3;
s1 = sa[1] << 3;
da[0] = res1;
@@ -3068,13 +3068,13 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab + s0 + 4);
t2 = *(mlib_u32 *) ((mlib_u8 *) tab + s1);
t3 = *(mlib_u32 *) ((mlib_u8 *) tab + s1 + 4);
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (t0 >> 16) + (t1 << 16);
res2 = (t1 >> 16) + t2;
#else
res1 = (t0 << 16) + (t1 >> 16);
res2 = (t1 << 16) + t2;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = res1;
da[1] = res2;
da[2] = t3;
@@ -3105,13 +3105,13 @@
s2 = tab2[0];
s3 = tab3[0];
for (i = 1; i < 256; i++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s4 = (s1 << 16) + s0;
s5 = (s3 << 16) + s2;
#else
s4 = (s0 << 16) + s1;
s5 = (s2 << 16) + s3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = tab0[i];
s1 = tab1[i];
s2 = tab2[i];
@@ -3120,13 +3120,13 @@
tab[2 * i - 1] = s5;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
s4 = (s1 << 16) + s0;
s5 = (s3 << 16) + s2;
#else
s4 = (s0 << 16) + s1;
s5 = (s2 << 16) + s3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
tab[510] = s4;
tab[511] = s5;
@@ -3181,18 +3181,18 @@
t4 = tab[2 * sa[0]];
t5 = tab[2 * sa[0] + 1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*dp++ = (mlib_u16) (t4);
#else
*dp++ = (mlib_u16) (t4 >> 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
sa++;
da = (mlib_u32 *) dp;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
*da++ = (t4 >> 16) + (t5 << 16);
#else
*da++ = (t4 << 16) + (t5 >> 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0] << 3;
s1 = sa[1] << 3;
sa += 2;
@@ -3205,7 +3205,7 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab + s0 + 4);
t2 = *(mlib_u32 *) ((mlib_u8 *) tab + s1);
t3 = *(mlib_u32 *) ((mlib_u8 *) tab + s1 + 4);
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (t5 >> 16) + (t0 << 16);
res2 = (t0 >> 16) + (t1 << 16);
res3 = (t1 >> 16) + (t2 << 16);
@@ -3215,7 +3215,7 @@
res2 = (t0 << 16) + (t1 >> 16);
res3 = (t1 << 16) + (t2 >> 16);
res4 = (t2 << 16) + (t3 >> 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0] << 3;
s1 = sa[1] << 3;
da[0] = res1;
@@ -3229,7 +3229,7 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab + s0 + 4);
t2 = *(mlib_u32 *) ((mlib_u8 *) tab + s1);
t3 = *(mlib_u32 *) ((mlib_u8 *) tab + s1 + 4);
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
res1 = (t5 >> 16) + (t0 << 16);
res2 = (t0 >> 16) + (t1 << 16);
res3 = (t1 >> 16) + (t2 << 16);
@@ -3239,36 +3239,36 @@
res2 = (t0 << 16) + (t1 >> 16);
res3 = (t1 << 16) + (t2 >> 16);
res4 = (t2 << 16) + (t3 >> 16);
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
da[0] = res1;
da[1] = res2;
da[2] = res3;
da[3] = res4;
da += 4;
dp = (mlib_u16 *) da;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
dp[0] = (mlib_u16) (t3 >> 16);
#else
dp[0] = (mlib_u16) t3;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
if ((size & 1) == 0) {
t0 = tab[2 * sa[0]];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
dp[2] = (mlib_u16) (t0 >> 16);
dp[1] = (mlib_u16) t0;
#else
dp[1] = (mlib_u16) (t0 >> 16);
dp[2] = (mlib_u16) t0;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
t0 = tab[2 * sa[0] + 1];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
dp[4] = (mlib_u16) (t0 >> 16);
dp[3] = (mlib_u16) t0;
#else
dp[3] = (mlib_u16) (t0 >> 16);
dp[4] = (mlib_u16) t0;
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
}
}
}
@@ -3439,7 +3439,7 @@
#pragma pipeloop(0)
#endif /* __SUNPRO_C */
for (i = 0; i < size - 7; i += 4, dp += 8, sa++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 << 2) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 6) & 0x3FC));
@@ -3449,12 +3449,12 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 22) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 14) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 14) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 22) & 0x3FC));
@@ -3464,7 +3464,7 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 6) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 << 2) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
dp[4] = t0;
dp[5] = t1;
@@ -3472,7 +3472,7 @@
dp[7] = t3;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 << 2) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 6) & 0x3FC));
@@ -3482,12 +3482,12 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 22) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 14) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 14) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 22) & 0x3FC));
@@ -3497,7 +3497,7 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 6) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 << 2) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[4] = t0;
dp[5] = t1;
dp[6] = t2;
@@ -3545,7 +3545,7 @@
#pragma pipeloop(0)
#endif /* __SUNPRO_C */
for (i = 0; i < size - 7; i += 4, dp += 12, sa++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 << 2) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 << 2) & 0x3FC));
@@ -3559,14 +3559,14 @@
t3 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 14) & 0x3FC));
t4 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
t5 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 14) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
dp[4] = t4;
dp[5] = t5;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 14) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 14) & 0x3FC));
@@ -3580,7 +3580,7 @@
t3 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 << 2) & 0x3FC));
t4 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
t5 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 << 2) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
dp[6] = t0;
dp[7] = t1;
@@ -3590,7 +3590,7 @@
dp[11] = t5;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 << 2) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 << 2) & 0x3FC));
@@ -3604,14 +3604,14 @@
t3 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 14) & 0x3FC));
t4 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
t5 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 14) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
dp[4] = t4;
dp[5] = t5;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 14) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 14) & 0x3FC));
@@ -3625,7 +3625,7 @@
t3 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 << 2) & 0x3FC));
t4 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
t5 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 << 2) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[6] = t0;
dp[7] = t1;
dp[8] = t2;
@@ -3678,7 +3678,7 @@
#pragma pipeloop(0)
#endif /* __SUNPRO_C */
for (i = 0; i < size - 7; i += 4, dp += 16, sa++) {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 << 2) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 << 2) & 0x3FC));
@@ -3688,12 +3688,12 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 22) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 22) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab3 + ((s0 >> 22) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 6) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 6) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 6) & 0x3FC));
@@ -3703,12 +3703,12 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 14) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab3 + ((s0 >> 14) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[4] = t0;
dp[5] = t1;
dp[6] = t2;
dp[7] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 14) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 14) & 0x3FC));
@@ -3718,12 +3718,12 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 6) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 6) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab3 + ((s0 >> 6) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[8] = t0;
dp[9] = t1;
dp[10] = t2;
dp[11] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 22) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 22) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 22) & 0x3FC));
@@ -3733,7 +3733,7 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 << 2) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab3 + ((s0 << 2) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
s0 = sa[0];
dp[12] = t0;
dp[13] = t1;
@@ -3741,7 +3741,7 @@
dp[15] = t3;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 << 2) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 << 2) & 0x3FC));
@@ -3751,12 +3751,12 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 22) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 22) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab3 + ((s0 >> 22) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[0] = t0;
dp[1] = t1;
dp[2] = t2;
dp[3] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 6) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 6) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 6) & 0x3FC));
@@ -3766,12 +3766,12 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 14) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab3 + ((s0 >> 14) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[4] = t0;
dp[5] = t1;
dp[6] = t2;
dp[7] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 14) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 14) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 14) & 0x3FC));
@@ -3781,12 +3781,12 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 6) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 6) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab3 + ((s0 >> 6) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[8] = t0;
dp[9] = t1;
dp[10] = t2;
dp[11] = t3;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
t0 = *(mlib_u32 *) ((mlib_u8 *) tab0 + ((s0 >> 22) & 0x3FC));
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 >> 22) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 >> 22) & 0x3FC));
@@ -3796,7 +3796,7 @@
t1 = *(mlib_u32 *) ((mlib_u8 *) tab1 + ((s0 << 2) & 0x3FC));
t2 = *(mlib_u32 *) ((mlib_u8 *) tab2 + ((s0 << 2) & 0x3FC));
t3 = *(mlib_u32 *) ((mlib_u8 *) tab3 + ((s0 << 2) & 0x3FC));
-#endif /* _LITTLE_ENDIAN */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
dp[12] = t0;
dp[13] = t1;
dp[14] = t2;
--- ./jdk/src/share/native/sun/awt/medialib/mlib_image.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_image.h 2010-06-15 22:07:21.000000000 -0700
@@ -27,6 +27,16 @@
#ifndef MLIB_IMAGE_H
#define MLIB_IMAGE_H
+#ifdef __OpenBSD__
+#include <sys/types.h>
+#endif
+#ifdef _ALLBSD_SOURCE
+#include <machine/endian.h>
+#elif __linux__
+#define __USE_BSD 1
+#include <endian.h>
+#endif
+
#include <mlib_types.h>
#include <mlib_status.h>
#include <mlib_sys.h>
--- ./jdk/src/share/native/sun/awt/medialib/mlib_sys.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_sys.c 2010-06-15 22:07:21.000000000 -0700
@@ -26,9 +26,15 @@
#include <stdlib.h>
#include <string.h>
+#ifdef _ALLBSD_SOURCE
+#include <unistd.h>
+#endif
#include <mlib_types.h>
#include <mlib_sys_proto.h>
#include "mlib_SysMath.h"
+#if defined(_ALLBSD_SOURCE)
+#include <sys/param.h>
+#endif
/***************************************************************/
@@ -86,7 +92,12 @@
* alignment. -- from stdlib.h of MS VC++5.0.
*/
return (void *) malloc(size);
-#else /* _MSC_VER */
+#elif defined(__FreeBSD__) && (__FreeBSD_version >= 700013)
+ void *ret;
+ return posix_memalign(&ret, 8, size) ? NULL : ret;
+#elif defined(_ALLBSD_SOURCE)
+ return valloc(size);
+#else
return (void *) memalign(8, size);
#endif /* _MSC_VER */
}
--- ./jdk/src/share/native/sun/awt/medialib/mlib_types.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/awt/medialib/mlib_types.h 2010-06-15 22:07:21.000000000 -0700
@@ -59,7 +59,10 @@
#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__GNUC__)
-#if defined(__linux__)
+#if defined(_ALLBSD_SOURCE)
+#include <stddef.h> /* for ptrdiff_t */
+#include <stdint.h> /* for uintptr_t */
+#elif defined(__linux__)
#include <stdint.h> /* for uintptr_t */
#include <malloc.h> /* for ptrdiff_t */
#else
--- ./jdk/src/share/native/sun/font/AccelGlyphCache.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/font/AccelGlyphCache.c 2010-06-15 22:07:21.000000000 -0700
@@ -23,7 +23,11 @@
* questions.
*/
+#ifdef _ALLBSD_SOURCE
+#include <stdlib.h>
+#else
#include <malloc.h>
+#endif
#include "jni.h"
#include "AccelGlyphCache.h"
#include "Trace.h"
--- ./jdk/src/share/native/sun/font/DrawGlyphList.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/font/DrawGlyphList.c 2010-06-15 22:07:21.000000000 -0700
@@ -26,7 +26,11 @@
#include "jlong.h"
#include "math.h"
#include "string.h"
+#ifdef _ALLBSD_SOURCE
+#include "stdlib.h"
+#else
#include "malloc.h"
+#endif
#include "sunfontids.h"
#include "fontscalerdefs.h"
#include "glyphblitting.h"
--- ./jdk/src/share/native/sun/font/sunFont.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/font/sunFont.c 2010-06-15 22:07:22.000000000 -0700
@@ -24,7 +24,9 @@
*/
#include "stdlib.h"
+#ifndef _ALLBSD_SOURCE
#include "malloc.h"
+#endif
#include "string.h"
#include "gdefs.h"
#include "jlong.h"
--- ./jdk/src/share/native/sun/java2d/SurfaceData.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/java2d/SurfaceData.c 2010-06-15 22:07:22.000000000 -0700
@@ -28,7 +28,11 @@
#include "jni_util.h"
#include "Disposer.h"
+#ifdef _ALLBSD_SOURCE
+#include <stdlib.h>
+#else
#include "malloc.h"
+#endif
#include "string.h"
/**
--- ./jdk/src/share/native/sun/java2d/opengl/OGLFuncs.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/java2d/opengl/OGLFuncs.h 2010-06-15 22:07:23.000000000 -0700
@@ -26,6 +26,9 @@
#ifndef OGLFuncs_h_Included
#define OGLFuncs_h_Included
+#ifdef _ALLBSD_SOURCE
+#include <dlfcn.h>
+#endif
#include "jni.h"
#include "J2D_GL/gl.h"
#include "J2D_GL/glext.h"
--- ./jdk/src/share/native/sun/java2d/opengl/OGLRenderQueue.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/java2d/opengl/OGLRenderQueue.c 2010-06-15 22:07:23.000000000 -0700
@@ -25,7 +25,11 @@
#ifndef HEADLESS
+#ifdef _ALLBSD_SOURCE
+#include <stdlib.h>
+#else
#include <malloc.h>
+#endif
#include "sun_java2d_pipe_BufferedOpCodes.h"
--- ./jdk/src/share/native/sun/java2d/opengl/OGLTextRenderer.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/java2d/opengl/OGLTextRenderer.c 2010-06-15 22:07:23.000000000 -0700
@@ -25,7 +25,11 @@
#ifndef HEADLESS
+#ifdef _ALLBSD_SOURCE
+#include <stdlib.h>
+#else
#include <malloc.h>
+#endif
#include <math.h>
#include <jlong.h>
--- ./jdk/src/share/native/sun/nio/ch/genSocketOptionRegistry.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/nio/ch/genSocketOptionRegistry.c 2010-06-15 22:07:24.000000000 -0700
@@ -28,6 +28,7 @@
#include <winsock2.h>
#include <ws2tcpip.h>
#else
+#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
--- ./jdk/src/share/native/sun/security/ec/impl/ecc_impl.h 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/security/ec/impl/ecc_impl.h 2010-06-15 22:07:24.000000000 -0700
@@ -78,6 +78,14 @@
typedef enum { B_FALSE, B_TRUE } boolean_t;
#endif /* __linux__ */
+#ifdef _ALLBSD_SOURCE
+#include <stdint.h>
+#define B_FALSE FALSE
+#define B_TRUE TRUE
+typedef unsigned long ulong_t;
+typedef enum boolean { B_FALSE, B_TRUE } boolean_t;
+#endif /* _ALLBSD_SOURCE */
+
#ifdef _WIN32
typedef unsigned char uint8_t;
typedef unsigned long ulong_t;
--- ./jdk/src/share/native/sun/security/ec/impl/ecdecode.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/security/ec/impl/ecdecode.c 2010-06-15 22:07:24.000000000 -0700
@@ -60,9 +60,9 @@
#include <sys/types.h>
#ifndef _WIN32
-#ifndef __linux__
+#if !defined(__linux__) && !defined(_ALLBSD_SOURCE)
#include <sys/systm.h>
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
#include <sys/param.h>
#endif /* _WIN32 */
--- ./jdk/src/share/native/sun/security/ec/impl/oid.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/security/ec/impl/oid.c 2010-06-15 22:07:24.000000000 -0700
@@ -59,9 +59,9 @@
#include <sys/types.h>
#ifndef _WIN32
-#ifndef __linux__
+#if !defined(__linux__) && !defined(_ALLBSD_SOURCE)
#include <sys/systm.h>
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
#include <sys/param.h>
#endif /* _WIN32 */
--- ./jdk/src/share/native/sun/security/ec/impl/secitem.c 2010-11-04 16:13:25.000000000 -0700
+++ ./jdk/src/share/native/sun/security/ec/impl/secitem.c 2010-06-15 22:07:24.000000000 -0700
@@ -64,9 +64,9 @@
#include <sys/types.h>
#ifndef _WIN32
-#ifndef __linux__
+#if !defined(__linux__) && !defined(_ALLBSD_SOURCE)
#include <sys/systm.h>
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
#include <sys/param.h>
#endif /* _WIN32 */
--- ./jdk/src/share/transport/socket/socketTransport.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/share/transport/socket/socketTransport.c 2010-06-15 22:07:27.000000000 -0700
@@ -65,6 +65,9 @@
#define HEADER_SIZE 11
#define MAX_DATA_SIZE 1000
+static jint recv_fully(int, char *, int);
+static jint send_fully(int, char *, int);
+
/*
* Record the last error for this thread.
*/
@@ -155,7 +158,7 @@
}
buf = b;
buf += received;
- n = dbgsysRecv(fd, buf, helloLen-received, 0);
+ n = recv_fully(fd, buf, helloLen-received);
if (n == 0) {
setLastError(0, "handshake failed - connection prematurally closed");
return JDWPTRANSPORT_ERROR_IO_ERROR;
@@ -180,7 +183,7 @@
return JDWPTRANSPORT_ERROR_IO_ERROR;
}
- if (dbgsysSend(fd, (char*)hello, helloLen, 0) != helloLen) {
+ if (send_fully(fd, (char*)hello, helloLen) != helloLen) {
RETURN_IO_ERROR("send failed during handshake");
}
return JDWPTRANSPORT_ERROR_NONE;
@@ -555,19 +558,19 @@
/* Do one send for short packets, two for longer ones */
if (data_len <= MAX_DATA_SIZE) {
memcpy(header + HEADER_SIZE, data, data_len);
- if (dbgsysSend(socketFD, (char *)&header, HEADER_SIZE + data_len, 0) !=
+ if (send_fully(socketFD, (char *)&header, HEADER_SIZE + data_len) !=
HEADER_SIZE + data_len) {
RETURN_IO_ERROR("send failed");
}
} else {
memcpy(header + HEADER_SIZE, data, MAX_DATA_SIZE);
- if (dbgsysSend(socketFD, (char *)&header, HEADER_SIZE + MAX_DATA_SIZE, 0) !=
+ if (send_fully(socketFD, (char *)&header, HEADER_SIZE + MAX_DATA_SIZE) !=
HEADER_SIZE + MAX_DATA_SIZE) {
RETURN_IO_ERROR("send failed");
}
/* Send the remaining data bytes right out of the data area. */
- if (dbgsysSend(socketFD, (char *)data + MAX_DATA_SIZE,
- data_len - MAX_DATA_SIZE, 0) != data_len - MAX_DATA_SIZE) {
+ if (send_fully(socketFD, (char *)data + MAX_DATA_SIZE,
+ data_len - MAX_DATA_SIZE) != data_len - MAX_DATA_SIZE) {
RETURN_IO_ERROR("send failed");
}
}
@@ -575,13 +578,33 @@
return JDWPTRANSPORT_ERROR_NONE;
}
-static jint
+jint
recv_fully(int f, char *buf, int len)
{
int nbytes = 0;
while (nbytes < len) {
int res = dbgsysRecv(f, buf + nbytes, len - nbytes, 0);
if (res < 0) {
+ if (errno == EINTR)
+ continue;
+ return res;
+ } else if (res == 0) {
+ break; /* eof, return nbytes which is less than len */
+ }
+ nbytes += res;
+ }
+ return nbytes;
+}
+
+jint
+send_fully(int f, char *buf, int len)
+{
+ int nbytes = 0;
+ while (nbytes < len) {
+ int res = dbgsysSend(f, buf + nbytes, len - nbytes, 0);
+ if (res < 0) {
+ if (errno == EINTR)
+ continue;
return res;
} else if (res == 0) {
break; /* eof, return nbytes which is less than len */
--- ./jdk/src/solaris/back/exec_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/back/exec_md.c 2010-06-15 22:07:27.000000000 -0700
@@ -30,7 +30,7 @@
#include "sys.h"
#include "util.h"
-#ifdef LINUX
+#if defined(LINUX) || defined(_ALLBSD_SOURCE)
/* Linux */
#define FORK() fork()
#else
--- ./jdk/src/solaris/back/linker_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/back/linker_md.c 2010-06-15 22:07:27.000000000 -0700
@@ -48,6 +48,12 @@
#include "threads_md.h"
#endif
+#ifdef __APPLE__
+#define LIB_SUFFIX "dylib"
+#else
+#define LIB_SUFFIX "so"
+#endif
+
/*
* create a string for the JNI native function name by adding the
* appropriate decorations.
@@ -77,9 +83,9 @@
}
if (pnamelen == 0) {
- (void)snprintf(holder, holderlen, "lib%s.so", fname);
+ (void)snprintf(holder, holderlen, "lib%s." LIB_SUFFIX, fname);
} else {
- (void)snprintf(holder, holderlen, "%s/lib%s.so", pname, fname);
+ (void)snprintf(holder, holderlen, "%s/lib%s." LIB_SUFFIX, pname, fname);
}
}
--- ./jdk/src/solaris/back/util_md.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/back/util_md.h 2010-06-15 22:07:27.000000000 -0700
@@ -31,6 +31,11 @@
#include <limits.h>
#include <sys/types.h>
+#ifdef _ALLBSD_SOURCE
+#include <machine/endian.h>
+#elif __linux__
+#include <endian.h>
+#endif
#ifdef _LP64
typedef unsigned long UNSIGNED_JLONG;
@@ -46,7 +51,7 @@
/* On little endian machines, convert java big endian numbers. */
-#if defined(_LITTLE_ENDIAN)
+#if (BYTE_ORDER == LITTLE_ENDIAN)
#define HOST_TO_JAVA_CHAR(x) (((x & 0xff) << 8) | ((x >> 8) & (0xff)))
#define HOST_TO_JAVA_SHORT(x) (((x & 0xff) << 8) | ((x >> 8) & (0xff)))
--- ./jdk/src/solaris/bin/ergo.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/bin/ergo.c 2010-06-15 22:07:27.000000000 -0700
@@ -71,14 +71,39 @@
/* Compute physical memory by asking the OS */
uint64_t
physical_memory(void) {
+ uint64_t result;
+
+# define UINT64_FORMAT "%" PRIu64
+
+#if defined(_ALLBSD_SOURCE)
+#ifdef HW_PHYSMEM64
+ int64_t physmem;
+ int name[2] = { CTL_HW, HW_PHYSMEM64 };
+#else
+ unsigned long physmem;
+ int name[2] = { CTL_HW, HW_PHYSMEM };
+#endif
+ size_t physmem_len = sizeof(physmem);
+
+ if (sysctl(name, 2, &physmem, &physmem_len, NULL, 0) == -1)
+ physmem = 256 * MB;
+
+ result = (uint64_t)physmem;
+
+ JLI_TraceLauncher("physical memory: " UINT64_FORMAT " (%.3fGB)\n",
+ result, result / (double) GB);
+ return result;
+
+#else /* !_ALLBSD_SOURCE */
+
const uint64_t pages = (uint64_t) sysconf(_SC_PHYS_PAGES);
const uint64_t page_size = (uint64_t) sysconf(_SC_PAGESIZE);
- const uint64_t result = pages * page_size;
-# define UINT64_FORMAT "%" PRIu64
+ result = pages * page_size;
JLI_TraceLauncher("pages: " UINT64_FORMAT
" page_size: " UINT64_FORMAT
" physical memory: " UINT64_FORMAT " (%.3fGB)\n",
pages, page_size, result, result / (double) GB);
return result;
+#endif /* _ALLBSD_SOURCE */
}
--- ./jdk/src/solaris/bin/ergo.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/bin/ergo.h 2010-06-15 22:07:27.000000000 -0700
@@ -33,6 +33,10 @@
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
+#ifdef _ALLBSD_SOURCE
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#endif
#include "java.h"
--- ./jdk/src/solaris/bin/ergo_i586.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/bin/ergo_i586.c 2010-06-15 22:07:27.000000000 -0700
@@ -106,7 +106,7 @@
#endif /* __solaris__ */
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
/*
* A utility method for asking the CPU about itself.
@@ -170,7 +170,9 @@
*edxp = value_of_edx;
#endif /* _LP64 */
}
+#endif /* __linux__ || _ALLBSD_SOURCE */
+#ifdef __linux__
/* The definition of a server-class machine for linux-i586 */
jboolean
ServerClassMachineImpl(void) {
@@ -199,6 +201,37 @@
}
#endif /* __linux__ */
+#if defined(_ALLBSD_SOURCE)
+
+/* The definition of a server-class machine for bsd-i586 */
+jboolean
+ServerClassMachineImpl(void) {
+ jboolean result = JNI_FALSE;
+ /* How big is a server class machine? */
+ const unsigned long server_processors = 2UL;
+ const uint64_t server_memory = 2UL * GB;
+ /*
+ * We seem not to get our full complement of memory.
+ * We allow some part (1/8?) of the memory to be "missing",
+ * based on the sizes of DIMMs, and maybe graphics cards.
+ */
+ const uint64_t missing_memory = 256UL * MB;
+ const uint64_t actual_memory = physical_memory();
+
+ /* Is this a server class machine? */
+ if (actual_memory >= (server_memory - missing_memory)) {
+ const unsigned long actual_processors = physical_processors();
+ if (actual_processors >= server_processors) {
+ result = JNI_TRUE;
+ }
+ }
+ JLI_TraceLauncher("bsd_" LIBARCHNAME "_ServerClassMachine: %s\n",
+ (result == JNI_TRUE ? "true" : "false"));
+ return result;
+}
+
+#endif /* _ALLBSD_SOURCE */
+
/*
* Routines shared by solaris-i586 and linux-i586.
*/
@@ -308,6 +341,14 @@
/* Compute the number of physical processors, not logical processors */
static unsigned long
physical_processors(void) {
+#if defined(_ALLBSD_SOURCE)
+ unsigned long result;
+ int name[2] = { CTL_HW, HW_NCPU };
+ size_t rlen = sizeof(result);
+
+ if (sysctl(name, 2, &result, &rlen, NULL, 0) == -1)
+ result = 1;
+#else /* !_ALLBSD_SOURCE */
const long sys_processors = sysconf(_SC_NPROCESSORS_CONF);
unsigned long result = sys_processors;
@@ -318,6 +359,7 @@
result = (unsigned long) sys_processors / logical_processors;
}
}
+#endif /* _ALLBSD_SOURCE */
JLI_TraceLauncher("physical processors: %lu\n", result);
return result;
}
--- ./jdk/src/solaris/bin/java_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/bin/java_md.c 2010-10-31 14:12:36.000000000 -0700
@@ -24,6 +24,7 @@
*/
#include "java.h"
+#include "jvm_md.h"
#include <dirent.h>
#include <dlfcn.h>
#include <fcntl.h>
@@ -34,17 +35,30 @@
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
+#if defined(_ALLBSD_SOURCE)
+#include <sys/time.h>
+#endif
+
#include "manifest_info.h"
#include "version_comp.h"
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <pthread.h>
#else
#include <thread.h>
#endif
+#ifdef __APPLE__
+#define JVM_DLL "libjvm.dylib"
+#define JAVA_DLL "libjava.dylib"
+/* FALLBACK avoids naming conflicts with system libraries
+ * (eg, ImageIO's libJPEG.dylib) */
+#define LD_LIBRARY_PATH "DYLD_FALLBACK_LIBRARY_PATH"
+#else
#define JVM_DLL "libjvm.so"
#define JAVA_DLL "libjava.so"
+#define LD_LIBRARY_PATH "LD_LIBRARY_PATH"
+#endif
/*
* If a processor / os combination has the ability to run binaries of
@@ -71,14 +85,31 @@
#endif
/* pointer to environment */
+#ifdef __APPLE__
+#include <crt_externs.h>
+#define environ (*_NSGetEnviron())
+#else
extern char **environ;
+#endif
/*
* A collection of useful strings. One should think of these as #define
* entries, but actual strings can be more efficient (with many compilers).
*/
-#ifdef __linux__
-static const char *system_dir = "/usr/java";
+#if defined(__FreeBSD__)
+static const char *system_dir = PACKAGE_PATH "/openjdk7";
+static const char *user_dir = "/java";
+#elif defined(__NetBSD__)
+static const char *system_dir = PACKAGE_PATH "/openjdk7";
+static const char *user_dir = "/java";
+#elif defined(__OpenBSD__)
+static const char *system_dir = PACKAGE_PATH "/openjdk7";
+static const char *user_dir = "/java";
+#elif defined(__APPLE__)
+static const char *system_dir = PACKAGE_PATH "/openjdk7";
+static const char *user_dir = "/java";
+#elif defined(__linux__)
+static const char *system_dir = PACKAGE_PATH "/java";
static const char *user_dir = "/java";
#else /* Solaris */
static const char *system_dir = "/usr/jdk";
@@ -1030,9 +1061,23 @@
return(borrowed_unsetenv(name));
}
+#if defined(_ALLBSD_SOURCE)
+/*
+ * BSD's implementation of CounterGet()
+ */
+int64_t
+CounterGet()
+{
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ return (tv.tv_sec * 1000) + tv.tv_usec;
+}
+#endif
+
+
/* --- Splash Screen shared library support --- */
-static const char* SPLASHSCREEN_SO = "libsplashscreen.so";
+static const char* SPLASHSCREEN_SO = JNI_LIB_NAME("splashscreen");
static void* hSplashLib = NULL;
@@ -1068,7 +1113,7 @@
int
ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void * args) {
int rslt;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
--- ./jdk/src/solaris/bin/java_md.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/bin/java_md.h 2010-06-15 22:07:27.000000000 -0700
@@ -47,10 +47,14 @@
#include <sys/time.h>
#define CounterGet() (gethrtime()/1000)
#define Counter2Micros(counts) (counts)
+#elif defined(_ALLBSD_SOURCE)
+/* CounterGet() is implemented in java_md.c */
+int64_t CounterGet(void);
+#define Counter2Micros(counts) (counts)
#else
#define CounterGet() (0)
#define Counter2Micros(counts) (1)
-#endif /* HAVE_GETHRTIME */
+#endif /* HAVE_GETHRTIME || _ALLBSD_SOURCE */
/*
* Function prototypes.
--- ./jdk/src/solaris/classes/sun/awt/X11/XWM.java 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/classes/sun/awt/X11/XWM.java 2010-10-31 13:48:56.000000000 -0700
@@ -101,7 +101,8 @@
ICE_WM = 10,
METACITY_WM = 11,
COMPIZ_WM = 12,
- LG3D_WM = 13;
+ LG3D_WM = 13,
+ CWM_WM = 14;
public String toString() {
switch (WMID) {
case NO_WM:
@@ -128,6 +129,8 @@
return "Compiz";
case LG3D_WM:
return "LookingGlass";
+ case CWM_WM:
+ return "CWM";
case UNDETERMINED_WM:
default:
return "Undetermined WM";
@@ -555,6 +558,10 @@
return isNetWMName("LG3D");
}
+ static boolean isCWM() {
+ return isNetWMName("CWM");
+ }
+
/*
* Is Metacity running?
*/
@@ -567,7 +574,7 @@
}
static boolean isNonReparentingWM() {
- return (XWM.getWMID() == XWM.COMPIZ_WM || XWM.getWMID() == XWM.LG3D_WM);
+ return (XWM.getWMID() == XWM.COMPIZ_WM || XWM.getWMID() == XWM.LG3D_WM || XWM.getWMID() == XWM.CWM_WM);
}
/*
@@ -743,6 +750,8 @@
awt_wmgr = XWM.COMPIZ_WM;
} else if (isLookingGlass()) {
awt_wmgr = LG3D_WM;
+ } else if (isCWM()) {
+ awt_wmgr = CWM_WM;
} else if (doIsIceWM && isIceWM()) {
awt_wmgr = XWM.ICE_WM;
}
--- ./jdk/src/solaris/classes/sun/awt/X11FontManager.java 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/classes/sun/awt/X11FontManager.java 2010-01-30 09:28:31.000000000 -0800
@@ -213,7 +213,7 @@
if (fontID != null) {
fileName = (String)fontNameMap.get(fontID);
/* On Linux check for the Lucida Oblique fonts */
- if (fileName == null && FontUtilities.isLinux && !isOpenJDK()) {
+ if (fileName == null && (FontUtilities.isLinux || FontUtilities.isBSD) && !isOpenJDK()) {
if (oblmap == null) {
initObliqueLucidaFontMap();
}
@@ -712,7 +712,7 @@
if (fontConfigDirs == null) {
return;
}
- if (FontUtilities.isLinux) {
+ if (FontUtilities.isLinux || FontUtilities.isBSD) {
fontConfigDirs.add(jreLibDirName+File.separator+"oblique-fonts");
}
fontdirs = (String[])fontConfigDirs.toArray(new String[0]);
@@ -759,7 +759,7 @@
*/
FontConfiguration mFontConfig = new MFontConfiguration(this);
if (FontUtilities.isOpenSolaris ||
- (FontUtilities.isLinux &&
+ ((FontUtilities.isLinux || FontUtilities.isBSD) &&
(!mFontConfig.foundOsSpecificFile() ||
!mFontConfig.fontFilesArePresent()) ||
(FontUtilities.isSolaris && !mFontConfig.fontFilesArePresent()))) {
--- ./jdk/src/solaris/classes/sun/awt/fontconfigs/bsd.fontconfig.Fedora.properties 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/awt/fontconfigs/bsd.fontconfig.Fedora.properties 1969-12-31 16:00:00.000000000 -0800
@@ -1,377 +0,0 @@
-#
-#
-# Copyright (c) 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.
-#
-
-# Version
-
-# Uses Fedora 9 fonts and file paths.
-version=1
-
-# Component Font Mappings
-
-dialog.plain.latin-1=DejaVu Sans
-dialog.plain.japanese-x0208=Sazanami Gothic
-dialog.plain.korean=Baekmuk Gulim
-dialog.plain.chinese-big5=AR PL ShanHeiSun Uni
-dialog.plain.chinese-gb18030=AR PL ShanHeiSun Uni
-dialog.plain.bengali=Lohit Bengali
-dialog.plain.gujarati=Lohit Gujarati
-dialog.plain.hindi=Lohit Hindi
-dialog.plain.malayalam=Lohit Malayalam
-dialog.plain.oriya=Lohit Oriya
-dialog.plain.punjabi=Lohit Punjabi
-dialog.plain.tamil=Lohit Tamil
-dialog.plain.telugu=Lohit Telugu
-dialog.plain.sinhala=LKLUG
-
-dialog.bold.latin-1=DejaVu Sans Bold
-dialog.bold.japanese-x0208=Sazanami Gothic
-dialog.bold.korean=Baekmuk Gulim
-dialog.bold.chinese-big5=AR PL ShanHeiSun Uni
-dialog.bold.chinese-gb18030=AR PL ShanHeiSun Uni
-dialog.bold.bengali=Lohit Bengali
-dialog.bold.gujarati=Lohit Gujarati
-dialog.bold.hindi=Lohit Hindi
-dialog.bold.malayalam=Lohit Malayalam
-dialog.bold.oriya=Lohit Oriya
-dialog.bold.punjabi=Lohit Punjabi
-dialog.bold.tamil=Lohit Tamil
-dialog.bold.telugu=Lohit Telugu
-dialog.bold.sinhala=LKLUG
-
-dialog.italic.latin-1=DejaVu Sans Oblique
-dialog.italic.japanese-x0208=Sazanami Gothic
-dialog.italic.korean=Baekmuk Gulim
-dialog.italic.chinese-big5=AR PL ShanHeiSun Uni
-dialog.italic.chinese-gb18030=AR PL ShanHeiSun Uni
-dialog.italic.bengali=Lohit Bengali
-dialog.italic.gujarati=Lohit Gujarati
-dialog.italic.hindi=Lohit Hindi
-dialog.italic.malayalam=Lohit Malayalam
-dialog.italic.oriya=Lohit Oriya
-dialog.italic.punjabi=Lohit Punjabi
-dialog.italic.tamil=Lohit Tamil
-dialog.italic.telugu=Lohit Telugu
-dialog.italic.sinhala=LKLUG
-
-dialog.bolditalic.latin-1=DejaVu Sans Bold Oblique
-dialog.bolditalic.japanese-x0208=Sazanami Gothic
-dialog.bolditalic.korean=Baekmuk Gulim
-dialog.bolditalic.chinese-big5=AR PL ShanHeiSun Uni
-dialog.bolditalic.chinese-gb18030=AR PL ShanHeiSun Uni
-dialog.bolditalic.bengali=Lohit Bengali
-dialog.bolditalic.gujarati=Lohit Gujarati
-dialog.bolditalic.hindi=Lohit Hindi
-dialog.bolditalic.malayalam=Lohit Malayalam
-dialog.bolditalic.oriya=Lohit Oriya
-dialog.bolditalic.punjabi=Lohit Punjabi
-dialog.bolditalic.tamil=Lohit Tamil
-dialog.bolditalic.telugu=Lohit Telugu
-dialog.bolditalic.sinhala=LKLUG
-
-sansserif.plain.latin-1=DejaVu Sans
-sansserif.plain.japanese-x0208=Sazanami Gothic
-sansserif.plain.korean=Baekmuk Gulim
-sansserif.plain.chinese-big5=AR PL ShanHeiSun Uni
-sansserif.plain.chinese-gb18030=AR PL ShanHeiSun Uni
-sansserif.plain.bengali=Lohit Bengali
-sansserif.plain.gujarati=Lohit Gujarati
-sansserif.plain.hindi=Lohit Hindi
-sansserif.plain.malayalam=Lohit Malayalam
-sansserif.plain.oriya=Lohit Oriya
-sansserif.plain.punjabi=Lohit Punjabi
-sansserif.plain.tamil=Lohit Tamil
-sansserif.plain.telugu=Lohit Telugu
-sansserif.plain.sinhala=LKLUG
-
-sansserif.bold.latin-1=DejaVu Sans Bold
-sansserif.bold.japanese-x0208=Sazanami Gothic
-sansserif.bold.korean=Baekmuk Gulim
-sansserif.bold.chinese-big5=AR PL ShanHeiSun Uni
-sansserif.bold.chinese-gb18030=AR PL ShanHeiSun Uni
-sansserif.bold.bengali=Lohit Bengali
-sansserif.bold.gujarati=Lohit Gujarati
-sansserif.bold.hindi=Lohit Hindi
-sansserif.bold.malayalam=Lohit Malayalam
-sansserif.bold.oriya=Lohit Oriya
-sansserif.bold.punjabi=Lohit Punjabi
-sansserif.bold.tamil=Lohit Tamil
-sansserif.bold.telugu=Lohit Telugu
-sansserif.bold.sinhala=LKLUG
-
-sansserif.italic.latin-1=DejaVu Sans Oblique
-sansserif.italic.japanese-x0208=Sazanami Gothic
-sansserif.italic.korean=Baekmuk Gulim
-sansserif.italic.chinese-big5=AR PL ShanHeiSun Uni
-sansserif.italic.chinese-gb18030=AR PL ShanHeiSun Uni
-sansserif.italic.bengali=Lohit Bengali
-sansserif.italic.gujarati=Lohit Gujarati
-sansserif.italic.hindi=Lohit Hindi
-sansserif.italic.malayalam=Lohit Malayalam
-sansserif.italic.oriya=Lohit Oriya
-sansserif.italic.punjabi=Lohit Punjabi
-sansserif.italic.tamil=Lohit Tamil
-sansserif.italic.telugu=Lohit Telugu
-sansserif.italic.sinhala=LKLUG
-
-sansserif.bolditalic.latin-1=DejaVu Sans Bold Oblique
-sansserif.bolditalic.japanese-x0208=Sazanami Gothic
-sansserif.bolditalic.korean=Baekmuk Gulim
-sansserif.bolditalic.chinese-big5=AR PL ShanHeiSun Uni
-sansserif.bolditalic.chinese-gb18030=AR PL ShanHeiSun Uni
-sansserif.bolditalic.bengali=Lohit Bengali
-sansserif.bolditalic.gujarati=Lohit Gujarati
-sansserif.bolditalic.hindi=Lohit Hindi
-sansserif.bolditalic.malayalam=Lohit Malayalam
-sansserif.bolditalic.oriya=Lohit Oriya
-sansserif.bolditalic.punjabi=Lohit Punjabi
-sansserif.bolditalic.tamil=Lohit Tamil
-sansserif.bolditalic.telugu=Lohit Telugu
-sansserif.bolditalic.sinhala=LKLUG
-
-serif.plain.latin-1=DejaVu Serif
-serif.plain.japanese-x0208=Sazanami Mincho
-serif.plain.korean=Baekmuk Batang
-serif.plain.chinese-big5=AR PL ZenKai Uni
-serif.plain.chinese-gb18030=AR PL ZenKai Uni
-serif.plain.bengali=Lohit Bengali
-serif.plain.gujarati=Lohit Gujarati
-serif.plain.hindi=Lohit Hindi
-serif.plain.malayalam=Lohit Malayalam
-serif.plain.oriya=Lohit Oriya
-serif.plain.punjabi=Lohit Punjabi
-serif.plain.tamil=Lohit Tamil
-serif.plain.telugu=Lohit Telugu
-serif.plain.sinhala=LKLUG
-
-serif.bold.latin-1=DejaVu Serif Bold
-serif.bold.japanese-x0208=Sazanami Mincho
-serif.bold.korean=Baekmuk Batang
-serif.bold.chinese-big5=AR PL ZenKai Uni
-serif.bold.chinese-gb18030=AR PL ZenKai Uni
-serif.bold.bengali=Lohit Bengali
-serif.bold.gujarati=Lohit Gujarati
-serif.bold.hindi=Lohit Hindi
-serif.bold.malayalam=Lohit Malayalam
-serif.bold.oriya=Lohit Oriya
-serif.bold.punjabi=Lohit Punjabi
-serif.bold.tamil=Lohit Tamil
-serif.bold.telugu=Lohit Telugu
-serif.bold.sinhala=LKLUG
-
-serif.italic.latin-1=DejaVu Serif Oblique
-serif.italic.japanese-x0208=Sazanami Mincho
-serif.italic.korean=Baekmuk Batang
-serif.italic.chinese-big5=AR PL ZenKai Uni
-serif.italic.chinese-gb18030=AR PL ZenKai Uni
-serif.italic.bengali=Lohit Bengali
-serif.italic.gujarati=Lohit Gujarati
-serif.italic.hindi=Lohit Hindi
-serif.italic.malayalam=Lohit Malayalam
-serif.italic.oriya=Lohit Oriya
-serif.italic.punjabi=Lohit Punjabi
-serif.italic.tamil=Lohit Tamil
-serif.italic.telugu=Lohit Telugu
-serif.italic.sinhala=LKLUG
-
-serif.bolditalic.latin-1=DejaVu Serif Bold Oblique
-serif.bolditalic.japanese-x0208=Sazanami Mincho
-serif.bolditalic.korean=Baekmuk Batang
-serif.bolditalic.chinese-big5=AR PL ZenKai Uni
-serif.bolditalic.chinese-gb18030=AR PL ZenKai Uni
-serif.bolditalic.bengali=Lohit Bengali
-serif.bolditalic.gujarati=Lohit Gujarati
-serif.bolditalic.hindi=Lohit Hindi
-serif.bolditalic.malayalam=Lohit Malayalam
-serif.bolditalic.oriya=Lohit Oriya
-serif.bolditalic.punjabi=Lohit Punjabi
-serif.bolditalic.tamil=Lohit Tamil
-serif.bolditalic.telugu=Lohit Telugu
-serif.bolditalic.sinhala=LKLUG
-
-monospaced.plain.latin-1=DejaVu Sans Mono
-monospaced.plain.japanese-x0208=Sazanami Gothic
-monospaced.plain.korean=Baekmuk Gulim
-monospaced.plain.chinese-big5=AR PL ShanHeiSun Uni
-monospaced.plain.chinese-gb18030=AR PL ShanHeiSun Uni
-monospaced.plain.bengali=Lohit Bengali
-monospaced.plain.gujarati=Lohit Gujarati
-monospaced.plain.hindi=Lohit Hindi
-monospaced.plain.malayalam=Lohit Malayalam
-monospaced.plain.oriya=Lohit Oriya
-monospaced.plain.punjabi=Lohit Punjabi
-monospaced.plain.tamil=Lohit Tamil
-monospaced.plain.telugu=Lohit Telugu
-monospaced.plain.sinhala=LKLUG
-
-monospaced.bold.latin-1=DejaVu Sans Mono Bold
-monospaced.bold.japanese-x0208=Sazanami Gothic
-monospaced.bold.korean=Baekmuk Gulim
-monospaced.bold.chinese-big5=AR PL ShanHeiSun Uni
-monospaced.bold.chinese-gb18030=AR PL ShanHeiSun Uni
-monospaced.bold.bengali=Lohit Bengali
-monospaced.bold.gujarati=Lohit Gujarati
-monospaced.bold.hindi=Lohit Hindi
-monospaced.bold.malayalam=Lohit Malayalam
-monospaced.bold.oriya=Lohit Oriya
-monospaced.bold.punjabi=Lohit Punjabi
-monospaced.bold.tamil=Lohit Tamil
-monospaced.bold.telugu=Lohit Telugu
-monospaced.bold.sinhala=LKLUG
-
-monospaced.italic.latin-1=DejaVu Sans Mono Oblique
-monospaced.italic.japanese-x0208=Sazanami Gothic
-monospaced.italic.korean=Baekmuk Gulim
-monospaced.italic.chinese-big5=AR PL ShanHeiSun Uni
-monospaced.italic.chinese-gb18030=AR PL ShanHeiSun Uni
-monospaced.italic.bengali=Lohit Bengali
-monospaced.italic.gujarati=Lohit Gujarati
-monospaced.italic.hindi=Lohit Hindi
-monospaced.italic.malayalam=Lohit Malayalam
-monospaced.italic.oriya=Lohit Oriya
-monospaced.italic.punjabi=Lohit Punjabi
-monospaced.italic.tamil=Lohit Tamil
-monospaced.italic.telugu=Lohit Telugu
-monospaced.italic.sinhala=LKLUG
-
-monospaced.bolditalic.latin-1=DejaVu Sans Mono Bold Oblique
-monospaced.bolditalic.japanese-x0208=Sazanami Gothic
-monospaced.bolditalic.korean=Baekmuk Gulim
-monospaced.bolditalic.chinese-big5=AR PL ShanHeiSun Uni
-monospaced.bolditalic.chinese-gb18030=AR PL ShanHeiSun Uni
-monospaced.bolditalic.bengali=Lohit Bengali
-monospaced.bolditalic.gujarati=Lohit Gujarati
-monospaced.bolditalic.hindi=Lohit Hindi
-monospaced.bolditalic.malayalam=Lohit Malayalam
-monospaced.bolditalic.oriya=Lohit Oriya
-monospaced.bolditalic.punjabi=Lohit Punjabi
-monospaced.bolditalic.tamil=Lohit Tamil
-monospaced.bolditalic.telugu=Lohit Telugu
-monospaced.bolditalic.sinhala=LKLUG
-
-dialoginput.plain.latin-1=DejaVu Sans Mono
-dialoginput.plain.japanese-x0208=Sazanami Gothic
-dialoginput.plain.korean=Baekmuk Gulim
-dialoginput.plain.chinese-big5=AR PL ShanHeiSun Uni
-dialoginput.plain.chinese-gb18030=AR PL ShanHeiSun Uni
-dialoginput.plain.bengali=Lohit Bengali
-dialoginput.plain.gujarati=Lohit Gujarati
-dialoginput.plain.hindi=Lohit Hindi
-dialoginput.plain.malayalam=Lohit Malayalam
-dialoginput.plain.oriya=Lohit Oriya
-dialoginput.plain.punjabi=Lohit Punjabi
-dialoginput.plain.tamil=Lohit Tamil
-dialoginput.plain.telugu=Lohit Telugu
-dialoginput.plain.sinhala=LKLUG
-
-dialoginput.bold.latin-1=DejaVu Sans Mono Bold
-dialoginput.bold.japanese-x0208=Sazanami Gothic
-dialoginput.bold.korean=Baekmuk Gulim
-dialoginput.bold.chinese-big5=AR PL ShanHeiSun Uni
-dialoginput.bold.chinese-gb18030=AR PL ShanHeiSun Uni
-dialoginput.bold.bengali=Lohit Bengali
-dialoginput.bold.gujarati=Lohit Gujarati
-dialoginput.bold.hindi=Lohit Hindi
-dialoginput.bold.malayalam=Lohit Malayalam
-dialoginput.bold.oriya=Lohit Oriya
-dialoginput.bold.punjabi=Lohit Punjabi
-dialoginput.bold.tamil=Lohit Tamil
-dialoginput.bold.telugu=Lohit Telugu
-dialoginput.bold.sinhala=LKLUG
-
-dialoginput.italic.latin-1=DejaVu Sans Mono Oblique
-dialoginput.italic.japanese-x0208=Sazanami Gothic
-dialoginput.italic.korean=Baekmuk Gulim
-dialoginput.italic.chinese-big5=AR PL ShanHeiSun Uni
-dialoginput.italic.chinese-gb18030=AR PL ShanHeiSun Uni
-dialoginput.italic.bengali=Lohit Bengali
-dialoginput.italic.gujarati=Lohit Gujarati
-dialoginput.italic.hindi=Lohit Hindi
-dialoginput.italic.malayalam=Lohit Malayalam
-dialoginput.italic.oriya=Lohit Oriya
-dialoginput.italic.punjabi=Lohit Punjabi
-dialoginput.italic.tamil=Lohit Tamil
-dialoginput.italic.telugu=Lohit Telugu
-dialoginput.italic.sinhala=LKLUG
-
-dialoginput.bolditalic.latin-1=DejaVu Sans Mono Bold Oblique
-dialoginput.bolditalic.japanese-x0208=Sazanami Gothic
-dialoginput.bolditalic.korean=Baekmuk Gulim
-dialoginput.bolditalic.chinese-big5=AR PL ShanHeiSun Uni
-dialoginput.bolditalic.chinese-gb18030=AR PL ShanHeiSun Uni
-dialoginput.bolditalic.bengali=Lohit Bengali
-dialoginput.bolditalic.gujarati=Lohit Gujarati
-dialoginput.bolditalic.hindi=Lohit Hindi
-dialoginput.bolditalic.malayalam=Lohit Malayalam
-dialoginput.bolditalic.oriya=Lohit Oriya
-dialoginput.bolditalic.punjabi=Lohit Punjabi
-dialoginput.bolditalic.tamil=Lohit Tamil
-dialoginput.bolditalic.telugu=Lohit Telugu
-dialoginput.bolditalic.sinhala=LKLUG
-
-# Search Sequences
-
-sequence.allfonts=latin-1
-sequence.allfonts.Big5=chinese-big5,latin-1
-sequence.allfonts.x-euc-jp-bsd=japanese-x0208,latin-1
-sequence.allfonts.EUC-KR=korean,latin-1
-sequence.allfonts.GB18030=chinese-gb18030,latin-1
-sequence.fallback=chinese-big5,chinese-gb18030,japanese-x0208,korean,bengali,gujarati,hindi,oriya,punjabi,malayalam,tamil,telugu,sinhala
-
-# Font File Names
-
-filename.DejaVu_Sans=/usr/share/fonts/dejavu/DejaVuSans.ttf
-filename.DejaVu_Sans_Bold=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf
-filename.DejaVu_Sans_Oblique=/usr/share/fonts/dejavu/DejaVuSans-Oblique.ttf
-filename.DejaVu_Sans_Bold_Oblique=/usr/share/fonts/dejavu/DejaVuSans-BoldOblique.ttf
-
-filename.DejaVu_Sans_Mono=/usr/share/fonts/dejavu/DejaVuSansMono.ttf
-filename.DejaVu_Sans_Mono_Bold=/usr/share/fonts/dejavu/DejaVuSansMono-Bold.ttf
-filename.DejaVu_Sans_Mono_Oblique=/usr/share/fonts/dejavu/DejaVuSansMono-Oblique.ttf
-filename.DejaVu_Sans_Mono_Bold_Oblique=/usr/share/fonts/dejavu/DejaVuSansMono-BoldOblique.ttf
-
-filename.DejaVu_Serif=/usr/share/fonts/dejavu/DejaVuSerif.ttf
-filename.DejaVu_Serif_Bold=/usr/share/fonts/dejavu/DejaVuSerif-Bold.ttf
-filename.DejaVu_Serif_Oblique=/usr/share/fonts/dejavu/DejaVuSerif-Oblique.ttf
-filename.DejaVu_Serif_Bold_Oblique=/usr/share/fonts/dejavu/DejaVuSerif-BoldOblique.ttf
-
-filename.Sazanami_Gothic=/usr/share/fonts/sazanami-fonts-gothic/sazanami-gothic.ttf
-filename.Sazanami_Mincho=/usr/share/fonts/sazanami-fonts-mincho/sazanami-mincho.ttf
-filename.AR_PL_ShanHeiSun_Uni=/usr/share/fonts/cjkunifonts-uming/uming.ttc
-filename.AR_PL_ZenKai_Uni=/usr/share/fonts/cjkunifonts-ukai/ukai.ttc
-filename.Baekmuk_Gulim=/usr/share/fonts/baekmuk-ttf-gulim/gulim.ttf
-filename.Baekmuk_Batang=/usr/share/fonts/baekmuk-ttf-batang/batang.ttf
-
-filename.Lohit_Bengali=/usr/share/fonts/lohit-bengali/lohit_bn.ttf
-filename.Lohit_Gujarati=/usr/share/fonts/lohit-gujarati/lohit_gu.ttf
-filename.Lohit_Hindi=/usr/share/fonts/lohit-hindi/lohit_hi.ttf
-filename.Lohit_Kannda=/usr/share/fonts/lohit-kannada/lohit_kn.ttf
-filename.Lohit_Malayalam=/usr/share/fonts/lohit-malayalam/lohit_ml.ttf
-filename.Lohit_Oriya=/usr/share/fonts/lohit-oriya/lohit_or.ttf
-filename.Lohit_Punjabi=/usr/share/fonts/lohit-punjabi/lohit_pa.ttf
-filename.Lohit_Tamil=/usr/share/fonts/lohit-tamil/lohit_ta.ttf
-filename.Lohit_Telugu=/usr/share/fonts/lohit-telugu/lohit_te.ttf
-filename.LKLUG=/usr/share/fonts/lklug/lklug.ttf
-
--- ./jdk/src/solaris/classes/sun/awt/fontconfigs/bsd.fontconfig.SuSE.properties 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/awt/fontconfigs/bsd.fontconfig.SuSE.properties 1969-12-31 16:00:00.000000000 -0800
@@ -1,154 +0,0 @@
-#
-#
-# Copyright (c) 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.
-#
-
-# Version
-
-# Uses SuSE 10.2 fonts and file paths.
-version=1
-
-# Component Font Mappings
-
-dialog.plain.latin-1=Albany AMT
-dialog.plain.japanese-x0208=Sazanami Gothic
-dialog.plain.korean=UnDotum
-
-dialog.bold.latin-1=Albany AMT Bold
-dialog.bold.japanese-x0208=Sazanami Gothic
-dialog.bold.korean=UnDotum Bold
-
-dialog.italic.latin-1=Albany AMT Italic
-dialog.italic.japanese-x0208=Sazanami Gothic
-dialog.italic.korean=UnDotum
-
-dialog.bolditalic.latin-1=Albany AMT Bold Italic
-dialog.bolditalic.japanese-x0208=Sazanami Gothic
-dialog.bolditalic.korean=UnDotum Bold
-
-
-sansserif.plain.latin-1=Albany AMT
-sansserif.plain.japanese-x0208=Sazanami Gothic
-sansserif.plain.korean=UnDotum
-
-sansserif.bold.latin-1=Albany AMT Bold
-sansserif.bold.japanese-x0208=Sazanami Gothic
-sansserif.bold.korean=UnDotum Bold
-
-sansserif.italic.latin-1=Albany AMT Italic
-sansserif.italic.japanese-x0208=Sazanami Gothic
-sansserif.italic.korean=UnDotum
-
-sansserif.bolditalic.latin-1=Albany AMT Bold Italic
-sansserif.bolditalic.japanese-x0208=Sazanami Gothic
-sansserif.bolditalic.korean=UnDotum Bold
-
-
-serif.plain.latin-1=Thorndale AMT
-serif.plain.japanese-x0208=Sazanami Mincho
-serif.plain.korean=UnBatang
-
-serif.bold.latin-1=Thorndale AMT Bold
-serif.bold.japanese-x0208=Sazanami Mincho
-serif.bold.korean=UnBatang Bold
-
-serif.italic.latin-1=Thorndale AMT Italic
-serif.italic.japanese-x0208=Sazanami Mincho
-serif.italic.korean=UnBatang
-
-serif.bolditalic.latin-1=Thorndale AMT Bold Italic
-serif.bolditalic.japanese-x0208=Sazanami Mincho
-serif.bolditalic.korean=UnBatang Bold
-
-
-monospaced.plain.latin-1=Cumberland AMT
-monospaced.plain.japanese-x0208=Sazanami Gothic
-monospaced.plain.korean=UnDotum
-
-monospaced.bold.latin-1=Cumberland AMT Bold
-monospaced.bold.japanese-x0208=Sazanami Gothic
-monospaced.bold.korean=UnDotum Bold
-
-monospaced.italic.latin-1=Cumberland AMT Italic
-monospaced.italic.japanese-x0208=Sazanami Gothic
-monospaced.italic.korean=UnDotum
-
-monospaced.bolditalic.latin-1=Cumberland AMT Bold Italic
-monospaced.bolditalic.japanese-x0208=Sazanami Gothic
-monospaced.bolditalic.korean=UnDotum Bold
-
-
-dialoginput.plain.latin-1=Cumberland AMT
-dialoginput.plain.japanese-x0208=Sazanami Gothic
-dialoginput.plain.korean=UnDotum
-
-dialoginput.bold.latin-1=Cumberland AMT Bold
-dialoginput.bold.japanese-x0208=Sazanami Gothic
-dialoginput.bold.korean=UnDotum Bold
-
-dialoginput.italic.latin-1=Cumberland AMT Italic
-dialoginput.italic.japanese-x0208=Sazanami Gothic
-dialoginput.italic.korean=UnDotum
-
-dialoginput.bolditalic.latin-1=Cumberland AMT Bold Italic
-dialoginput.bolditalic.japanese-x0208=Sazanami Gothic
-dialoginput.bolditalic.korean=UnDotum Bold
-
-allfonts.chinese-big5=AR PL Mingti2L Big5
-allfonts.chinese-gb18030=AR PL SungtiL GB
-
-# Search Sequences
-
-sequence.allfonts=latin-1
-sequence.allfonts.Big5=chinese-big5,latin-1
-sequence.allfonts.x-euc-jp-bsd=japanese-x0208,latin-1
-sequence.allfonts.EUC-KR=korean,latin-1
-sequence.allfonts.GB18030=chinese-gb18030,latin-1
-sequence.fallback=chinese-big5,chinese-gb18030,japanese-x0208,korean
-
-# Font File Names
-
-filename.Albany_AMT=/usr/share/fonts/truetype/albw.ttf
-filename.Albany_AMT_Bold=/usr/share/fonts/truetype/albwb.ttf
-filename.Albany_AMT_Italic=/usr/share/fonts/truetype/albwb.ttf
-filename.Albany_AMT_Bold_Italic=/usr/share/fonts/truetype/albwbi.ttf
-
-filename.Thorndale_AMT=/usr/share/fonts/truetype/thowr___.ttf
-filename.Thorndale_AMT_Bold=/usr/share/fonts/truetype/thowb___.ttf
-filename.Thorndale_AMT_Italic=/usr/share/fonts/truetype/thowi___.ttf
-filename.Thorndale_AMT_Bold_Italic=/usr/share/fonts/truetype/thowbi__.ttf
-
-filename.Cumberland_AMT=/usr/share/fonts/truetype/cumbwr__.ttf
-filename.Cumberland_AMT_Bold=/usr/share/fonts/truetype/cumbwb__.ttf
-filename.Cumberland_AMT_Italic=/usr/share/fonts/truetype/cumbwi__.ttf
-filename.Cumberland_AMT_Bold_Italic=/usr/share/fonts/truetype/cumbwbi_.ttf
-
-filename.Sazanami_Gothic=/usr/share/fonts/truetype/sazanami-gothic.ttf
-filename.Sazanami_Mincho=/usr/share/fonts/truetype/sazanami-mincho.ttf
-filename.AR_PL_SungtiL_GB=/usr/share/fonts/truetype/gbsn00lp.ttf
-filename.AR_PL_Mingti2L_Big5=/usr/share/fonts/truetype/bsmi00lp.ttf
-filename.UnDotum=/usr/share/fonts/truetype/UnDotum.ttf
-filename.UnDotum_Bold=/usr/share/fonts/truetype/UnDotumBold.ttf
-filename.UnBatang=/usr/share/fonts/truetype/UnBatang.ttf
-filename.UnBatang_Bold=/usr/share/fonts/truetype/UnBatangBold.ttf
--- ./jdk/src/solaris/classes/sun/awt/fontconfigs/bsd.fontconfig.Ubuntu.properties 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/awt/fontconfigs/bsd.fontconfig.Ubuntu.properties 1969-12-31 16:00:00.000000000 -0800
@@ -1,348 +0,0 @@
-#
-#
-# Copyright (c) 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.
-#
-
-# Version
-
-# Uses Ubuntu 8.04 (hardy), Debian 6.0 (Squeeze) (and more recent releases) fonts and file paths.
-version=1
-
-# Component Font Mappings
-
-# Chinese fonts
-allfonts.umingcn=AR PL UMing CN
-#allfonts.umingcn.motif=AR PL UMing CN
-allfonts.uminghk=AR PL UMing HK
-#allfonts.uminghk.motif=AR PL UMing HK
-allfonts.umingtw=AR PL UMing TW
-#allfonts.umingtw.motif=AR PL UMing TW
-allfonts.wqy-zenhei=WenQuanYi Zen Hei
-#allfonts.wqy-zenhei.motif=WenQuanYi Zen Hei
-allfonts.shanheisun=AR PL ShanHeiSun Uni
-#allfonts.shanheisun.motif=AR PL ShanHeiSun Uni
-
-# Indic scripts
-allfonts.bengali=Lohit Bengali
-allfonts.gujarati=Lohit Gujarati
-allfonts.hindi=Lohit Hindi
-#allfonts.malayalam=Lohit Malayalam
-allfonts.oriya=Lohit Oriya
-allfonts.punjabi=Lohit Punjabi
-allfonts.tamil=Lohit Tamil
-allfonts.telugu=Lohit Telugu
-allfonts.sinhala=LKLUG
-
-
-serif.plain.latin-1=DejaVu Serif
-#serif.plain.latin-1.motif=LuxiSerif-Regular
-serif.plain.japanese-kochi=Kochi Mincho
-serif.plain.japanese-sazanami=Sazanami Mincho
-serif.plain.japanese-vlgothic=Sazanami Mincho
-serif.plain.korean-baekmuk=Baekmuk Batang
-#serif.plain.korean-baekmuk.motif=Baekmuk Batang
-serif.plain.korean-un=UnBatang
-#serif.plain.korean-un.motif=UnBatang
-
-serif.bold.latin-1=DejaVu Serif Bold
-#serif.bold.latin-1.motif=LuxiSerif-Bold
-serif.bold.japanese-kochi=Kochi Mincho
-serif.bold.japanese-sazanami=Sazanami Mincho
-serif.bold.japanese-vlgothic=Sazanami Mincho
-serif.bold.korean-baekmuk=Baekmuk Batang
-#serif.bold.korean-baekmuk.motif=Baekmuk Batang
-serif.bold.korean-un=UnBatang Bold
-#serif.bold.korean-un.motif=UnBatang Bold
-
-serif.italic.latin-1=DejaVu Serif Oblique
-#serif.italic.latin-1.motif=LuxiSerif-Oblique
-serif.italic.japanese-kochi=Kochi Mincho
-serif.italic.japanese-sazanami=Sazanami Mincho
-serif.italic.japanese-vlgothic=Sazanami Mincho
-serif.italic.korean-baekmuk=Baekmuk Batang
-#serif.italic.korean-baekmuk.motif=Baekmuk Batang
-serif.italic.korean-un=UnBatang
-#serif.italic.korean-un.motif=UnBatang
-
-serif.bolditalic.latin-1=DejaVu Serif Bold Oblique
-#serif.bolditalic.latin-1.motif=LuxiSerif-BoldOblique
-serif.bolditalic.japanese-kochi=Kochi Mincho
-serif.bolditalic.japanese-sazanami=Sazanami Mincho
-serif.bolditalic.japanese-vlgothic=Sazanami Mincho
-serif.bolditalic.korean-baekmuk=Baekmuk Batang
-#serif.bolditalic.korean-baekmuk.motif=Baekmuk Batang
-serif.bolditalic.korean-un=UnBatang Bold
-#serif.bolditalic.korean-un.motif=UnBatang Bold
-
-sansserif.plain.latin-1=DejaVu Sans
-#sansserif.plain.latin-1.motif=LuxiSans-Regular
-sansserif.plain.japanese-kochi=Kochi Gothic
-sansserif.plain.japanese-sazanami=Sazanami Gothic
-sansserif.plain.japanese-vlgothic=VL PGothic
-sansserif.plain.korean-baekmuk=Baekmuk Gulim
-#sansserif.plain.korean-baekmuk.motif=Baekmuk Gulim
-sansserif.plain.korean-un=UnDotum
-#sansserif.plain.korean-un.motif=UnDotum
-
-sansserif.bold.latin-1=DejaVu Sans Bold
-#sansserif.bold.latin-1.motif=LuxiSans-Bold
-sansserif.bold.japanese-kochi=Kochi Gothic
-sansserif.bold.japanese-sazanami=Sazanami Gothic
-sansserif.bold.japanese-vlgothic=VL PGothic
-sansserif.bold.korean-baekmuk=Baekmuk Gulim
-#sansserif.bold.korean-baekmuk.motif=Baekmuk Gulim
-sansserif.bold.korean-un=UnDotum Bold
-#sansserif.bold.korean-un.motif=UnDotum Bold
-
-sansserif.italic.latin-1=DejaVu Sans Oblique
-#sansserif.italic.latin-1.motif=LuxiSans-Oblique
-sansserif.italic.japanese-kochi=Kochi Gothic
-sansserif.italic.japanese-sazanami=Sazanami Gothic
-sansserif.italic.japanese-vlgothic=VL PGothic
-sansserif.italic.korean-baekmuk=Baekmuk Gulim
-#sansserif.italic.korean-baekmuk.motif=Baekmuk Gulim
-sansserif.italic.korean-un=UnDotum
-#sansserif.italic.korean-un.motif=UnDotum
-
-sansserif.bolditalic.latin-1=DejaVu Sans Bold Oblique
-#sansserif.bolditalic.latin-1.motif=LuxiSans-BoldOblique
-sansserif.bolditalic.japanese-kochi=Kochi Gothic
-sansserif.bolditalic.japanese-sazanami=Sazanami Gothic
-sansserif.bolditalic.japanese-vlgothic=VL PGothic
-sansserif.bolditalic.korean-baekmuk=Baekmuk Gulim
-#sansserif.bolditalic.korean-baekmuk.motif=Baekmuk Gulim
-sansserif.bolditalic.korean-un=UnDotum Bold
-#sansserif.bolditalic.korean-un.motif=UnDotum Bold
-
-monospaced.plain.latin-1=DejaVu Sans Mono
-#monospaced.plain.latin-1.motif=LuxiMono-Regular
-monospaced.plain.japanese-kochi=Kochi Gothic
-monospaced.plain.japanese-sazanami=Sazanami Gothic
-monospaced.plain.japanese-vlgothic=VL Gothic
-monospaced.plain.korean-baekmuk=Baekmuk Gulim
-#monospaced.plain.korean-baekmuk.motif=Baekmuk Gulim
-monospaced.plain.korean-un=UnDotum
-#monospaced.plain.korean-un.motif=UnDotum
-
-monospaced.bold.latin-1=DejaVu Sans Mono Bold
-#monospaced.bold.latin-1.motif=LuxiMono-Bold
-monospaced.bold.japanese-kochi=Kochi Gothic
-monospaced.bold.japanese-sazanami=Sazanami Gothic
-monospaced.bold.japanese-vlgothic=VL Gothic
-monospaced.bold.korean-baekmuk=Baekmuk Gulim
-#monospaced.bold.korean-baekmuk.motif=Baekmuk Gulim
-monospaced.bold.korean-un=UnDotum Bold
-#monospaced.bold.korean-un.motif=UnDotum Bold
-
-monospaced.italic.latin-1=DejaVu Sans Mono Oblique
-#monospaced.italic.latin-1.motif=LuxiMono-Oblique
-monospaced.italic.japanese-kochi=Kochi Gothic
-monospaced.italic.japanese-sazanami=Sazanami Gothic
-monospaced.italic.japanese-vlgothic=VL Gothic
-monospaced.italic.korean-baekmuk=Baekmuk Gulim
-#monospaced.italic.korean-baekmuk.motif=Baekmuk Gulim
-monospaced.italic.korean-un=UnDotum
-#monospaced.italic.korean-un.motif=UnDotum
-
-monospaced.bolditalic.latin-1=DejaVu Sans Mono Bold Oblique
-#monospaced.bolditalic.latin-1.motif=LuxiMono-BoldOblique
-monospaced.bolditalic.japanese-kochi=Kochi Gothic
-monospaced.bolditalic.japanese-sazanami=Sazanami Gothic
-monospaced.bolditalic.japanese-vlgothic=VL Gothic
-monospaced.bolditalic.korean-baekmuk=Baekmuk Gulim
-#monospaced.bolditalic.korean-baekmuk.motif=Baekmuk Gulim
-monospaced.bolditalic.korean-un=UnDotum Bold
-#monospaced.bolditalic.korean-un.motif=UnDotum Bold
-
-dialog.plain.latin-1=DejaVu Sans
-#dialog.plain.latin-1.motif=LuxiSans-Regular
-dialog.plain.japanese-kochi=Kochi Gothic
-dialog.plain.japanese-sazanami=Sazanami Gothic
-dialog.plain.japanese-vlgothic=VL PGothic
-dialog.plain.korean-baekmuk=Baekmuk Gulim
-#dialog.plain.korean-baekmuk.motif=Baekmuk Gulim
-dialog.plain.korean-un=UnDotum
-#dialog.plain.korean-un.motif=UnDotum
-
-dialog.bold.latin-1=DejaVu Sans Bold
-#dialog.bold.latin-1.motif=LuxiSans-Bold
-dialog.bold.japanese-kochi=Kochi Gothic
-dialog.bold.japanese-sazanami=Sazanami Gothic
-dialog.bold.japanese-vlgothic=VL PGothic
-dialog.bold.korean-baekmuk=Baekmuk Gulim
-#dialog.bold.korean-baekmuk.motif=Baekmuk Gulim
-dialog.bold.korean-un=UnDotum Bold
-#dialog.bold.korean-un.motif=UnDotum Bold
-
-dialog.italic.latin-1=DejaVu Sans Oblique
-#dialog.italic.latin-1.motif=LuxiSans-Oblique
-dialog.italic.japanese-kochi=Kochi Gothic
-dialog.italic.japanese-sazanami=Sazanami Gothic
-dialog.italic.japanese-vlgothic=VL PGothic
-dialog.italic.korean-baekmuk=Baekmuk Gulim
-#dialog.italic.korean-baekmuk.motif=Baekmuk Gulim
-dialog.italic.korean-un=UnDotum
-#dialog.italic.korean-un.motif=UnDotum
-
-dialog.bolditalic.latin-1=DejaVu Sans Bold Oblique
-#dialog.bolditalic.latin-1.motif=LuxiSans-BoldOblique
-dialog.bolditalic.japanese-kochi=Kochi Gothic
-dialog.bolditalic.japanese-sazanami=Sazanami Gothic
-dialog.bolditalic.japanese-vlgothic=VL PGothic
-dialog.bolditalic.korean-baekmuk=Baekmuk Gulim
-#dialog.bolditalic.korean-baekmuk.motif=Baekmuk Gulim
-dialog.bolditalic.korean-un=UnDotum Bold
-#dialog.bolditalic.korean-un.motif=UnDotum Bold
-
-dialoginput.plain.latin-1=DejaVu Sans Mono
-#dialoginput.plain.latin-1.motif=LuxiMono-Regular
-dialoginput.plain.japanese-kochi=Kochi Gothic
-dialoginput.plain.japanese-sazanami=Sazanami Gothic
-dialoginput.plain.japanese-vlgothic=VL Gothic
-dialoginput.plain.korean-baekmuk=Baekmuk Gulim
-#dialoginput.plain.korean-baekmuk.motif=Baekmuk Gulim
-dialoginput.plain.korean-un=UnDotum
-#dialoginput.plain.korean-un.motif=UnDotum
-
-dialoginput.bold.latin-1=DejaVu Sans Mono Bold
-#dialoginput.bold.latin-1.motif=LuxiMono-Bold
-dialoginput.bold.japanese-kochi=Kochi Gothic
-dialoginput.bold.japanese-sazanami=Sazanami Gothic
-dialoginput.bold.japanese-vlgothic=VL Gothic
-dialoginput.bold.korean-baekmuk=Baekmuk Gulim
-#dialoginput.bold.korean-baekmuk.motif=Baekmuk Gulim
-dialoginput.bold.korean-un=UnDotum Bold
-#dialoginput.bold.korean-un.motif=UnDotum Bold
-
-dialoginput.italic.latin-1=DejaVu Sans Mono Oblique
-#dialoginput.italic.latin-1.motif=LuxiMono-Oblique
-dialoginput.italic.japanese-kochi=Kochi Gothic
-dialoginput.italic.japanese-sazanami=Sazanami Gothic
-dialoginput.italic.japanese-vlgothic=VL Gothic
-dialoginput.italic.korean-baekmuk=Baekmuk Gulim
-#dialoginput.italic.korean-baekmuk.motif=Baekmuk Gulim
-dialoginput.italic.korean-un=UnDotum
-#dialoginput.italic.korean-un.motif=UnDotum
-
-dialoginput.bolditalic.latin-1=DejaVu Sans Mono Bold Oblique
-#dialoginput.bolditalic.latin-1.motif=LuxiMono-BoldOblique
-dialoginput.bolditalic.japanese-kochi=Kochi Gothic
-dialoginput.bolditalic.japanese-sazanami=Sazanami Gothic
-dialoginput.bolditalic.japanese-vlgothic=VL Gothic
-dialoginput.bolditalic.korean-baekmuk=Baekmuk Gulim
-#dialoginput.bolditalic.korean-baekmuk.motif=Baekmuk Gulim
-dialoginput.bolditalic.korean-un=UnDotum Bold
-#dialoginput.bolditalic.korean-un.motif=UnDotum Bold
-
-# Search Sequences
-
-sequence.allfonts=latin-1
-sequence.allfonts.GB18030=latin-1,umingcn,shanheisun,wqy-zenhei
-sequence.allfonts.GB2312=latin-1,umingcn,shanheisun,wqy-zenhei
-sequence.allfonts.GBK=latin-1,umingcn,shanheisun,wqy-zenhei
-sequence.allfonts.x-euc-jp-bsd=latin-1,japanese-vlgothic,japanese-sazanami,japanese-kochi
-sequence.allfonts.EUC-KR=latin-1,korean-un,korean-baekmuk
-sequence.allfonts.Big5=latin-1,umingtw,shanheisun,wqy-zenhei
-sequence.allfonts.Big5-HKSCS=latin-1,uminghk,shanheisun,wqy-zenhei
-#sequence.fallback=uminghk,shanheisun,wqy-zenhei,japanese-vlgothic,japanese-kochi,japanese-sazanami,korean-un,korean-baekmuk,bengali,gujarati,hindi,oriya,punjabi,malayalam,tamil,telugu,sinhala
-sequence.fallback=uminghk,shanheisun,wqy-zenhei,japanese-vlgothic,japanese-sazanami,japanese-kochi,korean-un,korean-baekmuk,bengali,gujarati,hindi,oriya,punjabi,tamil,telugu
-
-# Exclusion Ranges
-
-exclusion.japanese-kochi=0390-03d6,2200-22ef,2701-27be
-exclusion.japanese-sazanami=0390-03d6,2200-22ef,2701-27be
-exclusion.japanese-vlgothic=0390-03d6,2200-22ef,2701-27be
-
-# Font File Names
-
-filename.DejaVu_Sans=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf
-filename.DejaVu_Sans_Bold=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf
-filename.DejaVu_Sans_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Oblique.ttf
-filename.DejaVu_Sans_Bold_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-BoldOblique.ttf
-
-filename.DejaVu_Sans_Mono=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf
-filename.DejaVu_Sans_Mono_Bold=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Bold.ttf
-filename.DejaVu_Sans_Mono_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Oblique.ttf
-filename.DejaVu_Sans_Mono_Bold_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-BoldOblique.ttf
-
-filename.DejaVu_Serif=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf
-filename.DejaVu_Serif_Bold=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Bold.ttf
-filename.DejaVu_Serif_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Oblique.ttf
-filename.DejaVu_Serif_Bold_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-BoldOblique.ttf
-
-filename.AR_PL_UMing_CN=/usr/share/fonts/truetype/arphic/uming.ttc
-filename.AR_PL_UMing_HK=/usr/share/fonts/truetype/arphic/uming.ttc
-filename.AR_PL_UMing_TW=/usr/share/fonts/truetype/arphic/uming.ttc
-filename.AR_PL_ShanHeiSun_Uni=/usr/share/fonts/truetype/arphic/uming.ttf
-
-filename.WenQuanYi_Zen_Hei=/usr/share/fonts/truetype/wqy/wqy-zenhei.ttf
-filename.Baekmuk_Batang=/usr/share/fonts/truetype/baekmuk/batang.ttf
-filename.UnBatang=/usr/share/fonts/truetype/unfonts/UnBatang.ttf
-filename.UnBatang_Bold=/usr/share/fonts/truetype/unfonts/UnBatangBold.ttf
-filename.Baekmuk_Gulim=/usr/share/fonts/truetype/baekmuk/gulim.ttf
-filename.UnDotum=/usr/share/fonts/truetype/unfonts/UnDotum.ttf
-filename.UnDotum_Bold=/usr/share/fonts/truetype/unfonts/UnDotumBold.ttf
-filename.Kochi_Gothic=/usr/share/fonts/truetype/kochi/kochi-gothic.ttf
-filename.Sazanami_Gothic=/usr/share/fonts/truetype/sazanami/sazanami-gothic.ttf
-filename.Kochi_Mincho=/usr/share/fonts/truetype/kochi/kochi-mincho.ttf
-filename.Sazanami_Mincho=/usr/share/fonts/truetype/sazanami/sazanami-mincho.ttf
-filename.VL_Gothic=/usr/share/fonts/truetype/vlgothic/VL-Gothic-Regular.ttf
-filename.VL_PGothic=/usr/share/fonts/truetype/vlgothic/VL-PGothic-Regular.ttf
-
-filename.Lohit_Bengali=/usr/share/fonts/truetype/ttf-bengali-fonts/lohit_bn.ttf
-filename.Lohit_Gujarati=/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_gu.ttf
-filename.Lohit_Hindi=/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_hi.ttf
-filename.Lohit_Kannda=/usr/share/fonts/truetype/ttf-kannada-fonts/lohit_kn.ttf
-#filename.Lohit_Malayalam=/usr/share/fonts/lohit-malayalam/lohit_ml.ttf
-filename.Lohit_Oriya=/usr/share/fonts/truetype/ttf-oriya-fonts/lohit_or.ttf
-filename.Lohit_Punjabi=/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_pa.ttf
-filename.Lohit_Tamil=/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_ta.ttf
-filename.Lohit_Telugu=/usr/share/fonts/truetype/ttf-telugu-fonts/lohit_te.ttf
-filename.LKLUG=/usr/share/fonts/truetype/ttf-sinhala-lklug/lklug.ttf
-
-filename.LuxiSans-Regular=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxisr.ttf
-filename.LuxiSans-Bold=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxisb.ttf
-filename.LuxiSans-Oblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxisri.ttf
-filename.LuxiSans-BoldOblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxisbi.ttf
-filename.LuxiMono-Regular=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luximr.ttf
-filename.LuxiMono-Bold=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luximb.ttf
-filename.LuxiMono-Oblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luximri.ttf
-filename.LuxiMono-BoldOblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luximbi.ttf
-filename.LuxiSerif-Regular=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxirr.ttf
-filename.LuxiSerif-Bold=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxirb.ttf
-filename.LuxiSerif-Oblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxirri.ttf
-filename.LuxiSerif-BoldOblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxirbi.ttf
-
-# AWT X11 font paths
-awtfontpath.latin-1=/usr/share/fonts/X11/Type1
-awtfontpath.umingcn=/usr/share/fonts/truetype/arphic
-awtfontpath.uminghk=/usr/share/fonts/truetype/arphic
-awtfontpath.umingtw=/usr/share/fonts/truetype/arphic
-awtfontpath.shanheisun=/usr/share/fonts/truetype/arphic
-awtfontpath.wqy-zenhei=/usr/share/fonts/truetype/wqy
-awtfontpath.japanese-kochi=/usr/share/fonts/truetype/kochi
-awtfontpath.japanese-sazanami=/usr/share/fonts/truetype/sazanami
-awtfontpath.japanese-vlgothic=/usr/share/fonts/truetype/vlgothic
-awtfontpath.korean-baekmuk=/usr/share/fonts/truetype/baekmuk
-awtfontpath.korean-un=/usr/share/fonts/truetype/unfonts
--- ./jdk/src/solaris/classes/sun/nio/ch/BsdAsynchronousChannelProvider.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/nio/ch/BsdAsynchronousChannelProvider.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-package sun.nio.ch;
-
-import java.nio.channels.*;
-import java.nio.channels.spi.AsynchronousChannelProvider;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ThreadFactory;
-import java.net.ProtocolFamily;
-import java.io.IOException;
-
-public class BsdAsynchronousChannelProvider
- extends AsynchronousChannelProvider
-{
- private static volatile EPollPort defaultPort;
-
- private EPollPort defaultEventPort() throws IOException {
- if (defaultPort == null) {
- synchronized (BsdAsynchronousChannelProvider.class) {
- if (defaultPort == null) {
- defaultPort = new EPollPort(this, ThreadPool.getDefault()).start();
- }
- }
- }
- return defaultPort;
- }
-
- public BsdAsynchronousChannelProvider() {
- }
-
- @Override
- public AsynchronousChannelGroup openAsynchronousChannelGroup(int nThreads, ThreadFactory factory)
- throws IOException
- {
- return new EPollPort(this, ThreadPool.create(nThreads, factory)).start();
- }
-
- @Override
- public AsynchronousChannelGroup openAsynchronousChannelGroup(ExecutorService executor, int initialSize)
- throws IOException
- {
- return new EPollPort(this, ThreadPool.wrap(executor, initialSize)).start();
- }
-
- private Port toPort(AsynchronousChannelGroup group) throws IOException {
- if (group == null) {
- return defaultEventPort();
- } else {
- if (!(group instanceof EPollPort))
- throw new IllegalChannelGroupException();
- return (Port)group;
- }
- }
-
- @Override
- public AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(AsynchronousChannelGroup group)
- throws IOException
- {
- return new UnixAsynchronousServerSocketChannelImpl(toPort(group));
- }
-
- @Override
- public AsynchronousSocketChannel openAsynchronousSocketChannel(AsynchronousChannelGroup group)
- throws IOException
- {
- return new UnixAsynchronousSocketChannelImpl(toPort(group));
- }
-
- @Override
- public AsynchronousDatagramChannel openAsynchronousDatagramChannel(ProtocolFamily family,
- AsynchronousChannelGroup group)
- throws IOException
- {
- return new SimpleAsynchronousDatagramChannelImpl(family, toPort(group));
- }
-}
--- ./jdk/src/solaris/classes/sun/nio/fs/BsdDosFileAttributeView.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/nio/fs/BsdDosFileAttributeView.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,288 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.attribute.*;
-import java.util.Map;
-import java.io.IOException;
-import sun.misc.Unsafe;
-
-import static sun.nio.fs.UnixNativeDispatcher.*;
-import static sun.nio.fs.UnixConstants.*;
-
-/**
- * Bsd implementation of DosFileAttributeView for use on file systems such
- * as ext3 that have extended attributes enabled and SAMBA configured to store
- * DOS attributes.
- */
-
-class BsdDosFileAttributeView
- extends UnixFileAttributeViews.Basic implements DosFileAttributeView
-{
- private static final Unsafe unsafe = Unsafe.getUnsafe();
-
- private static final String READONLY_NAME = "readonly";
- private static final String ARCHIVE_NAME = "archive";
- private static final String SYSTEM_NAME = "system";
- private static final String HIDDEN_NAME = "hidden";
-
- private static final String DOS_XATTR_NAME = "user.DOSATTRIB";
- private static final byte[] DOS_XATTR_NAME_AS_BYTES = DOS_XATTR_NAME.getBytes();
-
- private static final int DOS_XATTR_READONLY = 0x01;
- private static final int DOS_XATTR_HIDDEN = 0x02;
- private static final int DOS_XATTR_SYSTEM = 0x04;
- private static final int DOS_XATTR_ARCHIVE = 0x20;
-
- BsdDosFileAttributeView(UnixPath file, boolean followLinks) {
- super(file, followLinks);
- }
-
- @Override
- public String name() {
- return "dos";
- }
-
- @Override
- public Object getAttribute(String attribute) throws IOException {
- if (attribute.equals(READONLY_NAME))
- return readAttributes().isReadOnly();
- if (attribute.equals(ARCHIVE_NAME))
- return readAttributes().isArchive();
- if (attribute.equals(SYSTEM_NAME))
- return readAttributes().isSystem();
- if (attribute.equals(HIDDEN_NAME))
- return readAttributes().isHidden();
- return super.getAttribute(attribute);
- }
-
- @Override
- public void setAttribute(String attribute, Object value)
- throws IOException
- {
- if (attribute.equals(READONLY_NAME)) {
- setReadOnly((Boolean)value);
- return;
- }
- if (attribute.equals(ARCHIVE_NAME)) {
- setArchive((Boolean)value);
- return;
- }
- if (attribute.equals(SYSTEM_NAME)) {
- setSystem((Boolean)value);
- return;
- }
- if (attribute.equals(HIDDEN_NAME)) {
- setHidden((Boolean)value);
- return;
- }
- super.setAttribute(attribute, value);
- }
-
- @Override
- public Map<String,?> readAttributes(String[] attributes)
- throws IOException
- {
- AttributesBuilder builder = AttributesBuilder.create(attributes);
- DosFileAttributes attrs = readAttributes();
- addBasicAttributesToBuilder(attrs, builder);
- if (builder.match(READONLY_NAME))
- builder.add(READONLY_NAME, attrs.isReadOnly());
- if (builder.match(ARCHIVE_NAME))
- builder.add(ARCHIVE_NAME, attrs.isArchive());
- if (builder.match(SYSTEM_NAME))
- builder.add(SYSTEM_NAME, attrs.isSystem());
- if (builder.match(HIDDEN_NAME))
- builder.add(HIDDEN_NAME, attrs.isHidden());
- return builder.unmodifiableMap();
- }
-
- @Override
- public DosFileAttributes readAttributes() throws IOException {
- file.checkRead();
-
- int fd = file.openForAttributeAccess(followLinks);
- try {
- final UnixFileAttributes attrs = UnixFileAttributes.get(fd);
- final int dosAttribute = getDosAttribute(fd);
-
- return new DosFileAttributes() {
- @Override
- public FileTime lastModifiedTime() {
- return attrs.lastModifiedTime();
- }
- @Override
- public FileTime lastAccessTime() {
- return attrs.lastAccessTime();
- }
- @Override
- public FileTime creationTime() {
- return attrs.creationTime();
- }
- @Override
- public boolean isRegularFile() {
- return attrs.isRegularFile();
- }
- @Override
- public boolean isDirectory() {
- return attrs.isDirectory();
- }
- @Override
- public boolean isSymbolicLink() {
- return attrs.isSymbolicLink();
- }
- @Override
- public boolean isOther() {
- return attrs.isOther();
- }
- @Override
- public long size() {
- return attrs.size();
- }
- @Override
- public Object fileKey() {
- return attrs.fileKey();
- }
- @Override
- public boolean isReadOnly() {
- return (dosAttribute & DOS_XATTR_READONLY) != 0;
- }
- @Override
- public boolean isHidden() {
- return (dosAttribute & DOS_XATTR_HIDDEN) != 0;
- }
- @Override
- public boolean isArchive() {
- return (dosAttribute & DOS_XATTR_ARCHIVE) != 0;
- }
- @Override
- public boolean isSystem() {
- return (dosAttribute & DOS_XATTR_SYSTEM) != 0;
- }
- };
-
- } catch (UnixException x) {
- x.rethrowAsIOException(file);
- return null; // keep compiler happy
- } finally {
- close(fd);
- }
- }
-
- @Override
- public void setReadOnly(boolean value) throws IOException {
- updateDosAttribute(DOS_XATTR_READONLY, value);
- }
-
- @Override
- public void setHidden(boolean value) throws IOException {
- updateDosAttribute(DOS_XATTR_HIDDEN, value);
- }
-
- @Override
- public void setArchive(boolean value) throws IOException {
- updateDosAttribute(DOS_XATTR_ARCHIVE, value);
- }
-
- @Override
- public void setSystem(boolean value) throws IOException {
- updateDosAttribute(DOS_XATTR_SYSTEM, value);
- }
-
- /**
- * Reads the value of the user.DOSATTRIB extended attribute
- */
- private int getDosAttribute(int fd) throws UnixException {
- final int size = 24;
-
- NativeBuffer buffer = NativeBuffers.getNativeBuffer(size);
- try {
- int len = BsdNativeDispatcher
- .fgetxattr(fd, DOS_XATTR_NAME_AS_BYTES, buffer.address(), size);
-
- if (len > 0) {
- // ignore null terminator
- if (unsafe.getByte(buffer.address()+len-1) == 0)
- len--;
-
- // convert to String and parse
- byte[] buf = new byte[len];
- unsafe.copyMemory(null, buffer.address(), buf,
- Unsafe.ARRAY_BYTE_BASE_OFFSET, len);
- String value = new String(buf); // platform encoding
-
- // should be something like 0x20
- if (value.length() >= 3 && value.startsWith("0x")) {
- try {
- return Integer.parseInt(value.substring(2), 16);
- } catch (NumberFormatException x) {
- // ignore
- }
- }
- }
- throw new UnixException("Value of " + DOS_XATTR_NAME + " attribute is invalid");
- } catch (UnixException x) {
- // default value when attribute does not exist
- if (x.errno() == ENODATA)
- return 0;
- throw x;
- } finally {
- buffer.release();
- }
- }
-
- /**
- * Updates the value of the user.DOSATTRIB extended attribute
- */
- private void updateDosAttribute(int flag, boolean enable) throws IOException {
- file.checkWrite();
-
- int fd = file.openForAttributeAccess(followLinks);
- try {
- int oldValue = getDosAttribute(fd);
- int newValue = oldValue;
- if (enable) {
- newValue |= flag;
- } else {
- newValue &= ~flag;
- }
- if (newValue != oldValue) {
- byte[] value = ("0x" + Integer.toHexString(newValue)).getBytes();
- NativeBuffer buffer = NativeBuffers.asNativeBuffer(value);
- try {
- BsdNativeDispatcher.fsetxattr(fd, DOS_XATTR_NAME_AS_BYTES,
- buffer.address(), value.length+1);
- } finally {
- buffer.release();
- }
- }
- } catch (UnixException x) {
- x.rethrowAsIOException(file);
- } finally {
- close(fd);
- }
- }
-}
--- ./jdk/src/solaris/classes/sun/nio/fs/BsdFileStore.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/nio/fs/BsdFileStore.java 2010-10-31 14:19:20.000000000 -0700
@@ -36,10 +36,6 @@
class BsdFileStore
extends UnixFileStore
{
- // used when checking if extended attributes are enabled or not
- private volatile boolean xattrChecked;
- private volatile boolean xattrEnabled;
-
BsdFileStore(UnixPath file) throws IOException {
super(file);
}
@@ -54,7 +50,7 @@
*/
@Override
UnixMountEntry findMountEntry() throws IOException {
- BsdFileSystem fs = (BsdFileSystem)file().getFileSystem();
+ UnixFileSystem fs = file().getFileSystem();
// step 1: get realpath
UnixPath path = null;
@@ -80,20 +76,20 @@
parent = parent.getParent();
}
- // step 3: lookup mounted file systems (use /proc/mounts to ensure we
- // find the file system even when not in /etc/mtab)
+ // step 3: lookup mounted file systems
byte[] dir = path.asByteArray();
- for (UnixMountEntry entry: fs.getMountEntries("/proc/mounts")) {
+ for (UnixMountEntry entry: fs.getMountEntries()) {
if (Arrays.equals(dir, entry.dir()))
return entry;
}
- throw new IOException("Mount point not found");
+ throw new IOException("Mount point not found in fstab");
}
// returns true if extended attributes enabled on file system where given
// file resides, returns false if disabled or unable to determine.
private boolean isExtendedAttributesEnabled(UnixPath path) {
+/*
try {
int fd = path.openForAttributeAccess(false);
try {
@@ -110,11 +106,13 @@
} catch (IOException ignore) {
// nothing we can do
}
+*/
return false;
}
@Override
public boolean supportsFileAttributeView(Class<? extends FileAttributeView> type) {
+/*
// support DosFileAttributeView and UserDefinedAttributeView if extended
// attributes enabled
if (type == DosFileAttributeView.class ||
@@ -145,15 +143,18 @@
}
return xattrEnabled;
}
+*/
return super.supportsFileAttributeView(type);
}
@Override
public boolean supportsFileAttributeView(String name) {
+/*
if (name.equals("dos"))
return supportsFileAttributeView(DosFileAttributeView.class);
if (name.equals("user"))
return supportsFileAttributeView(UserDefinedFileAttributeView.class);
+*/
return super.supportsFileAttributeView(name);
}
}
--- ./jdk/src/solaris/classes/sun/nio/fs/BsdFileSystem.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/nio/fs/BsdFileSystem.java 2010-07-04 12:40:24.000000000 -0700
@@ -31,49 +31,23 @@
import java.util.*;
import java.security.AccessController;
import sun.security.action.GetPropertyAction;
-import static sun.nio.fs.BsdNativeDispatcher.*;
/**
* Bsd implementation of FileSystem
*/
class BsdFileSystem extends UnixFileSystem {
- private final boolean hasInotify;
BsdFileSystem(UnixFileSystemProvider provider, String dir) {
super(provider, dir);
-
- // assume X.Y[-Z] format
- String osversion = AccessController
- .doPrivileged(new GetPropertyAction("os.version"));
- String[] vers = Util.split(osversion, '.');
- assert vers.length >= 2;
-
- int majorVersion = Integer.parseInt(vers[0]);
- int minorVersion = Integer.parseInt(vers[1]);
- int microVersion = 0;
- if (vers.length > 2) {
- String[] microVers = Util.split(vers[2], '-');
- microVersion = (microVers.length > 0) ?
- Integer.parseInt(microVers[0]) : 0;
- }
-
- // inotify available since 2.6.13
- this.hasInotify = ((majorVersion > 2) ||
- (majorVersion == 2 && minorVersion > 6) ||
- ((majorVersion == 2) && (minorVersion == 6) && (microVersion >= 13)));
}
@Override
public WatchService newWatchService()
throws IOException
{
- if (hasInotify) {
- return new BsdWatchService(this);
- } else {
- // use polling implementation on older kernels
- return new PollingWatchService();
- }
+ // use polling implementation until we implement a BSD/kqueue one
+ return new PollingWatchService();
}
@Override
@@ -82,10 +56,6 @@
UnixPath file,
LinkOption... options)
{
- if (view == DosFileAttributeView.class)
- return (V) new BsdDosFileAttributeView(file, followLinks(options));
- if (view == UserDefinedFileAttributeView.class)
- return (V) new BsdUserDefinedFileAttributeView(file, followLinks(options));
return super.newFileAttributeView(view, file, options);
}
@@ -95,10 +65,6 @@
UnixPath file,
LinkOption... options)
{
- if (name.equals("dos"))
- return new BsdDosFileAttributeView(file, followLinks(options));
- if (name.equals("user"))
- return new BsdUserDefinedFileAttributeView(file, followLinks(options));
return super.newFileAttributeView(name, file, options);
}
@@ -109,9 +75,6 @@
private static Set<String> supportedFileAttributeViews() {
Set<String> result = new HashSet<String>();
result.addAll(UnixFileSystem.standardFileAttributeViews());
- // additional Bsd-specific views
- result.add("dos");
- result.add("user");
return Collections.unmodifiableSet(result);
}
}
@@ -123,26 +86,26 @@
@Override
void copyNonPosixAttributes(int ofd, int nfd) {
- BsdUserDefinedFileAttributeView.copyExtendedAttributes(ofd, nfd);
}
/**
- * Returns object to iterate over the mount entries in the given fstab file.
+ * Returns object to iterate over mount entries
*/
- Iterable<UnixMountEntry> getMountEntries(String fstab) {
+ @Override
+ Iterable<UnixMountEntry> getMountEntries() {
ArrayList<UnixMountEntry> entries = new ArrayList<UnixMountEntry>();
try {
- long fp = setmntent(fstab.getBytes(), "r".getBytes());
+ long iter = BsdNativeDispatcher.getfsstat();
try {
for (;;) {
UnixMountEntry entry = new UnixMountEntry();
- int res = getextmntent(fp, entry);
+ int res = BsdNativeDispatcher.fsstatEntry(iter, entry);
if (res < 0)
break;
entries.add(entry);
}
} finally {
- endmntent(fp);
+ BsdNativeDispatcher.endfsstat(iter);
}
} catch (UnixException x) {
@@ -151,14 +114,6 @@
return entries;
}
- /**
- * Returns object to iterate over the mount entries in /etc/mtab
- */
- @Override
- Iterable<UnixMountEntry> getMountEntries() {
- return getMountEntries("/etc/mtab");
- }
-
@Override
FileStore getFileStore(UnixPath path) throws IOException {
return new BsdFileStore(path);
--- ./jdk/src/solaris/classes/sun/nio/fs/BsdNativeDispatcher.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/nio/fs/BsdNativeDispatcher.java 2010-07-04 12:45:14.000000000 -0700
@@ -36,84 +36,23 @@
private BsdNativeDispatcher() { }
/**
- * FILE *setmntent(const char *filename, const char *type);
+ * struct fsstat_iter *getfsstat();
*/
- static long setmntent(byte[] filename, byte[] type) throws UnixException {
- NativeBuffer pathBuffer = NativeBuffers.asNativeBuffer(filename);
- NativeBuffer typeBuffer = NativeBuffers.asNativeBuffer(type);
- try {
- return setmntent0(pathBuffer.address(), typeBuffer.address());
- } finally {
- typeBuffer.release();
- pathBuffer.release();
- }
- }
- private static native long setmntent0(long pathAddress, long typeAddress)
- throws UnixException;
+ static native long getfsstat() throws UnixException;
/**
- * int endmntent(FILE* filep);
+ * int fsstatEntry(struct fsstat_iter * iter, UnixMountEntry entry);
*/
- static native void endmntent(long stream) throws UnixException;
-
- /**
- * ssize_t fgetxattr(int filedes, const char *name, void *value, size_t size);
- */
- static int fgetxattr(int filedes, byte[] name, long valueAddress,
- int valueLen) throws UnixException
- {
- NativeBuffer buffer = NativeBuffers.asNativeBuffer(name);
- try {
- return fgetxattr0(filedes, buffer.address(), valueAddress, valueLen);
- } finally {
- buffer.release();
- }
- }
-
- private static native int fgetxattr0(int filedes, long nameAddress,
- long valueAdddress, int valueLen) throws UnixException;
-
- /**
- * fsetxattr(int filedes, const char *name, const void *value, size_t size, int flags);
- */
- static void fsetxattr(int filedes, byte[] name, long valueAddress,
- int valueLen) throws UnixException
- {
- NativeBuffer buffer = NativeBuffers.asNativeBuffer(name);
- try {
- fsetxattr0(filedes, buffer.address(), valueAddress, valueLen);
- } finally {
- buffer.release();
- }
- }
-
- private static native void fsetxattr0(int filedes, long nameAddress,
- long valueAdddress, int valueLen) throws UnixException;
-
-
- /**
- * fremovexattr(int filedes, const char *name);
- */
- static void fremovexattr(int filedes, byte[] name) throws UnixException {
- NativeBuffer buffer = NativeBuffers.asNativeBuffer(name);
- try {
- fremovexattr0(filedes, buffer.address());
- } finally {
- buffer.release();
- }
- }
-
- private static native void fremovexattr0(int filedes, long nameAddress)
+ static native int fsstatEntry(long iter, UnixMountEntry entry)
throws UnixException;
- /**
- * size_t flistxattr(int filedes, const char *list, size_t size)
- */
- static native int flistxattr(int filedes, long listAddress, int size)
- throws UnixException;
+ /**
+ * void endfsstat(struct fsstat_iter * iter);
+ */
+ static native void endfsstat(long iter) throws UnixException;
- // initialize
- private static native void init();
+ // initialize field IDs
+ private static native void initIDs();
static {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
@@ -121,6 +60,6 @@
System.loadLibrary("nio");
return null;
}});
- init();
+ initIDs();
}
}
--- ./jdk/src/solaris/classes/sun/nio/fs/BsdUserDefinedFileAttributeView.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/nio/fs/BsdUserDefinedFileAttributeView.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,350 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.nio.ByteBuffer;
-import java.io.IOException;
-import java.util.*;
-import sun.misc.Unsafe;
-
-import static sun.nio.fs.UnixConstants.*;
-import static sun.nio.fs.BsdNativeDispatcher.*;
-
-/**
- * Bsd implementation of UserDefinedFileAttributeView using extended attributes.
- */
-
-class BsdUserDefinedFileAttributeView
- extends AbstractUserDefinedFileAttributeView
-{
- private static final Unsafe unsafe = Unsafe.getUnsafe();
-
- // namespace for extended user attributes
- private static final String USER_NAMESPACE = "user.";
-
- // maximum bytes in extended attribute name (includes namespace)
- private static final int XATTR_NAME_MAX = 255;
-
- private byte[] nameAsBytes(UnixPath file, String name) throws IOException {
- if (name == null)
- throw new NullPointerException("'name' is null");
- name = USER_NAMESPACE + name;
- byte[] bytes = name.getBytes();
- if (bytes.length > XATTR_NAME_MAX) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
- null, "'" + name + "' is too big");
- }
- return bytes;
- }
-
- // Parses buffer as array of NULL-terminated C strings.
- private List<String> asList(long address, int size) {
- final List<String> list = new ArrayList<String>();
- int start = 0;
- int pos = 0;
- while (pos < size) {
- if (unsafe.getByte(address + pos) == 0) {
- int len = pos - start;
- byte[] value = new byte[len];
- unsafe.copyMemory(null, address+start, value,
- Unsafe.ARRAY_BYTE_BASE_OFFSET, len);
- String s = new String(value);
- if (s.startsWith(USER_NAMESPACE)) {
- s = s.substring(USER_NAMESPACE.length());
- list.add(s);
- }
- start = pos + 1;
- }
- pos++;
- }
- return list;
- }
-
- private final UnixPath file;
- private final boolean followLinks;
-
- BsdUserDefinedFileAttributeView(UnixPath file, boolean followLinks) {
- this.file = file;
- this.followLinks = followLinks;
- }
-
- @Override
- public List<String> list() throws IOException {
- if (System.getSecurityManager() != null)
- checkAccess(file.getPathForPermissionCheck(), true, false);
-
- int fd = file.openForAttributeAccess(followLinks);
- NativeBuffer buffer = null;
- try {
- int size = 1024;
- buffer = NativeBuffers.getNativeBuffer(size);
- for (;;) {
- try {
- int n = flistxattr(fd, buffer.address(), size);
- List<String> list = asList(buffer.address(), n);
- return Collections.unmodifiableList(list);
- } catch (UnixException x) {
- // allocate larger buffer if required
- if (x.errno() == ERANGE && size < 32*1024) {
- buffer.release();
- size *= 2;
- buffer = null;
- buffer = NativeBuffers.getNativeBuffer(size);
- continue;
- }
- throw new FileSystemException(file.getPathForExecptionMessage(),
- null, "Unable to get list of extended attributes: " +
- x.getMessage());
- }
- }
- } finally {
- if (buffer != null)
- buffer.release();
- close(fd);
- }
- }
-
- @Override
- public int size(String name) throws IOException {
- if (System.getSecurityManager() != null)
- checkAccess(file.getPathForPermissionCheck(), true, false);
-
- int fd = file.openForAttributeAccess(followLinks);
- try {
- // fgetxattr returns size if called with size==0
- return fgetxattr(fd, nameAsBytes(file,name), 0L, 0);
- } catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
- null, "Unable to get size of extended attribute '" + name +
- "': " + x.getMessage());
- } finally {
- close(fd);
- }
- }
-
- @Override
- public int read(String name, ByteBuffer dst) throws IOException {
- if (System.getSecurityManager() != null)
- checkAccess(file.getPathForPermissionCheck(), true, false);
-
- if (dst.isReadOnly())
- throw new IllegalArgumentException("Read-only buffer");
- int pos = dst.position();
- int lim = dst.limit();
- assert (pos <= lim);
- int rem = (pos <= lim ? lim - pos : 0);
-
- NativeBuffer nb;
- long address;
- if (dst instanceof sun.nio.ch.DirectBuffer) {
- nb = null;
- address = ((sun.nio.ch.DirectBuffer)dst).address() + pos;
- } else {
- // substitute with native buffer
- nb = NativeBuffers.getNativeBuffer(rem);
- address = nb.address();
- }
-
- int fd = file.openForAttributeAccess(followLinks);
- try {
- try {
- int n = fgetxattr(fd, nameAsBytes(file,name), address, rem);
-
- // if remaining is zero then fgetxattr returns the size
- if (rem == 0) {
- if (n > 0)
- throw new UnixException(ERANGE);
- return 0;
- }
-
- // copy from buffer into backing array if necessary
- if (nb != null) {
- int off = dst.arrayOffset() + pos + Unsafe.ARRAY_BYTE_BASE_OFFSET;
- unsafe.copyMemory(null, address, dst.array(), off, n);
- }
- dst.position(pos + n);
- return n;
- } catch (UnixException x) {
- String msg = (x.errno() == ERANGE) ?
- "Insufficient space in buffer" : x.getMessage();
- throw new FileSystemException(file.getPathForExecptionMessage(),
- null, "Error reading extended attribute '" + name + "': " + msg);
- } finally {
- close(fd);
- }
- } finally {
- if (nb != null)
- nb.release();
- }
- }
-
- @Override
- public int write(String name, ByteBuffer src) throws IOException {
- if (System.getSecurityManager() != null)
- checkAccess(file.getPathForPermissionCheck(), false, true);
-
- int pos = src.position();
- int lim = src.limit();
- assert (pos <= lim);
- int rem = (pos <= lim ? lim - pos : 0);
-
- NativeBuffer nb;
- long address;
- if (src instanceof sun.nio.ch.DirectBuffer) {
- nb = null;
- address = ((sun.nio.ch.DirectBuffer)src).address() + pos;
- } else {
- // substitute with native buffer
- nb = NativeBuffers.getNativeBuffer(rem);
- address = nb.address();
-
- if (src.hasArray()) {
- // copy from backing array into buffer
- int off = src.arrayOffset() + pos + Unsafe.ARRAY_BYTE_BASE_OFFSET;
- unsafe.copyMemory(src.array(), off, null, address, rem);
- } else {
- // backing array not accessible so transfer via temporary array
- byte[] tmp = new byte[rem];
- src.get(tmp);
- src.position(pos); // reset position as write may fail
- unsafe.copyMemory(tmp, Unsafe.ARRAY_BYTE_BASE_OFFSET, null,
- address, rem);
- }
- }
-
- int fd = file.openForAttributeAccess(followLinks);
- try {
- try {
- fsetxattr(fd, nameAsBytes(file,name), address, rem);
- src.position(pos + rem);
- return rem;
- } catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
- null, "Error writing extended attribute '" + name + "': " +
- x.getMessage());
- } finally {
- close(fd);
- }
- } finally {
- if (nb != null)
- nb.release();
- }
- }
-
- @Override
- public void delete(String name) throws IOException {
- if (System.getSecurityManager() != null)
- checkAccess(file.getPathForPermissionCheck(), false, true);
-
- int fd = file.openForAttributeAccess(followLinks);
- try {
- fremovexattr(fd, nameAsBytes(file,name));
- } catch (UnixException x) {
- throw new FileSystemException(file.getPathForExecptionMessage(),
- null, "Unable to delete extended attribute '" + name + "': " + x.getMessage());
- } finally {
- close(fd);
- }
- }
-
- /**
- * Used by copyTo/moveTo to copy extended attributes from source to target.
- *
- * @param ofd
- * file descriptor for source file
- * @param nfd
- * file descriptor for target file
- */
- static void copyExtendedAttributes(int ofd, int nfd) {
- NativeBuffer buffer = null;
- try {
-
- // call flistxattr to get list of extended attributes.
- int size = 1024;
- buffer = NativeBuffers.getNativeBuffer(size);
- for (;;) {
- try {
- size = flistxattr(ofd, buffer.address(), size);
- break;
- } catch (UnixException x) {
- // allocate larger buffer if required
- if (x.errno() == ERANGE && size < 32*1024) {
- buffer.release();
- size *= 2;
- buffer = null;
- buffer = NativeBuffers.getNativeBuffer(size);
- continue;
- }
-
- // unable to get list of attributes
- return;
- }
- }
-
- // parse buffer as array of NULL-terminated C strings.
- long address = buffer.address();
- int start = 0;
- int pos = 0;
- while (pos < size) {
- if (unsafe.getByte(address + pos) == 0) {
- // extract attribute name and copy attribute to target.
- // FIXME: We can avoid needless copying by using address+pos
- // as the address of the name.
- int len = pos - start;
- byte[] name = new byte[len];
- unsafe.copyMemory(null, address+start, name,
- Unsafe.ARRAY_BYTE_BASE_OFFSET, len);
- try {
- copyExtendedAttribute(ofd, name, nfd);
- } catch (UnixException ignore) {
- // ignore
- }
- start = pos + 1;
- }
- pos++;
- }
-
- } finally {
- if (buffer != null)
- buffer.release();
- }
- }
-
- private static void copyExtendedAttribute(int ofd, byte[] name, int nfd)
- throws UnixException
- {
- int size = fgetxattr(ofd, name, 0L, 0);
- NativeBuffer buffer = NativeBuffers.getNativeBuffer(size);
- try {
- long address = buffer.address();
- size = fgetxattr(ofd, name, address, size);
- fsetxattr(nfd, name, address, size);
- } finally {
- buffer.release();
- }
- }
-}
--- ./jdk/src/solaris/classes/sun/nio/fs/BsdWatchService.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/nio/fs/BsdWatchService.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,466 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.*;
-import java.io.IOException;
-import sun.misc.Unsafe;
-
-import static sun.nio.fs.UnixNativeDispatcher.*;
-import static sun.nio.fs.UnixConstants.*;
-
-/**
- * Bsd implementation of WatchService based on inotify.
- *
- * In summary a background thread polls inotify plus a socket used for the wakeup
- * mechanism. Requests to add or remove a watch, or close the watch service,
- * cause the thread to wakeup and process the request. Events are processed
- * by the thread which causes it to signal/queue the corresponding watch keys.
- */
-
-class BsdWatchService
- extends AbstractWatchService
-{
- private static final Unsafe unsafe = Unsafe.getUnsafe();
-
- // background thread to read change events
- private final Poller poller;
-
- BsdWatchService(UnixFileSystem fs) throws IOException {
- // initialize inotify
- int ifd = - 1;
- try {
- ifd = inotifyInit();
- } catch (UnixException x) {
- throw new IOException(x.errorString());
- }
-
- // configure inotify to be non-blocking
- // create socketpair used in the close mechanism
- int sp[] = new int[2];
- try {
- configureBlocking(ifd, false);
- socketpair(sp);
- configureBlocking(sp[0], false);
- } catch (UnixException x) {
- UnixNativeDispatcher.close(ifd);
- throw new IOException(x.errorString());
- }
-
- this.poller = new Poller(fs, this, ifd, sp);
- this.poller.start();
- }
-
- @Override
- WatchKey register(Path dir,
- WatchEvent.Kind<?>[] events,
- WatchEvent.Modifier... modifiers)
- throws IOException
- {
- // delegate to poller
- return poller.register(dir, events, modifiers);
- }
-
- @Override
- void implClose() throws IOException {
- // delegate to poller
- poller.close();
- }
-
- /**
- * WatchKey implementation
- */
- private static class BsdWatchKey extends AbstractWatchKey {
- // inotify descriptor
- private final int ifd;
- // watch descriptor
- private volatile int wd;
-
- BsdWatchKey(BsdWatchService watcher, int ifd, int wd) {
- super(watcher);
- this.ifd = ifd;
- this.wd = wd;
- }
-
- int descriptor() {
- return wd;
- }
-
- void invalidate(boolean remove) {
- if (remove) {
- try {
- inotifyRmWatch(ifd, wd);
- } catch (UnixException x) {
- // ignore
- }
- }
- wd = -1;
- }
-
- @Override
- public boolean isValid() {
- return (wd != -1);
- }
-
- @Override
- public void cancel() {
- if (isValid()) {
- // delegate to poller
- ((BsdWatchService)watcher()).poller.cancel(this);
- }
- }
- }
-
- /**
- * Background thread to read from inotify
- */
- private static class Poller extends AbstractPoller {
- /**
- * struct inotify_event {
- * int wd;
- * uint32_t mask;
- * uint32_t len;
- * char name __flexarr; // present if len > 0
- * } act_t;
- */
- private static final int SIZEOF_INOTIFY_EVENT = eventSize();
- private static final int[] offsets = eventOffsets();
- private static final int OFFSETOF_WD = offsets[0];
- private static final int OFFSETOF_MASK = offsets[1];
- private static final int OFFSETOF_LEN = offsets[3];
- private static final int OFFSETOF_NAME = offsets[4];
-
- private static final int IN_MODIFY = 0x00000002;
- private static final int IN_ATTRIB = 0x00000004;
- private static final int IN_MOVED_FROM = 0x00000040;
- private static final int IN_MOVED_TO = 0x00000080;
- private static final int IN_CREATE = 0x00000100;
- private static final int IN_DELETE = 0x00000200;
-
- private static final int IN_UNMOUNT = 0x00002000;
- private static final int IN_Q_OVERFLOW = 0x00004000;
- private static final int IN_IGNORED = 0x00008000;
-
- // sizeof buffer for when polling inotify
- private static final int BUFFER_SIZE = 8192;
-
- private final UnixFileSystem fs;
- private final BsdWatchService watcher;
-
- // inotify file descriptor
- private final int ifd;
- // socketpair used to shutdown polling thread
- private final int socketpair[];
- // maps watch descriptor to Key
- private final Map<Integer,BsdWatchKey> wdToKey;
- // address of read buffer
- private final long address;
-
- Poller(UnixFileSystem fs, BsdWatchService watcher, int ifd, int[] sp) {
- this.fs = fs;
- this.watcher = watcher;
- this.ifd = ifd;
- this.socketpair = sp;
- this.wdToKey = new HashMap<Integer,BsdWatchKey>();
- this.address = unsafe.allocateMemory(BUFFER_SIZE);
- }
-
- @Override
- void wakeup() throws IOException {
- // write to socketpair to wakeup polling thread
- try {
- write(socketpair[1], address, 1);
- } catch (UnixException x) {
- throw new IOException(x.errorString());
- }
- }
-
- @Override
- Object implRegister(Path obj,
- Set<? extends WatchEvent.Kind<?>> events,
- WatchEvent.Modifier... modifiers)
- {
- UnixPath dir = (UnixPath)obj;
-
- int mask = 0;
- for (WatchEvent.Kind<?> event: events) {
- if (event == StandardWatchEventKind.ENTRY_CREATE) {
- mask |= IN_CREATE | IN_MOVED_TO;
- continue;
- }
- if (event == StandardWatchEventKind.ENTRY_DELETE) {
- mask |= IN_DELETE | IN_MOVED_FROM;
- continue;
- }
- if (event == StandardWatchEventKind.ENTRY_MODIFY) {
- mask |= IN_MODIFY | IN_ATTRIB;
- continue;
- }
- }
-
- // no modifiers supported at this time
- if (modifiers.length > 0) {
- for (WatchEvent.Modifier modifier: modifiers) {
- if (modifier == null)
- return new NullPointerException();
- if (modifier instanceof com.sun.nio.file.SensitivityWatchEventModifier)
- continue; // ignore
- return new UnsupportedOperationException("Modifier not supported");
- }
- }
-
- // check file is directory
- UnixFileAttributes attrs = null;
- try {
- attrs = UnixFileAttributes.get(dir, true);
- } catch (UnixException x) {
- return x.asIOException(dir);
- }
- if (!attrs.isDirectory()) {
- return new NotDirectoryException(dir.getPathForExecptionMessage());
- }
-
- // register with inotify (replaces existing mask if already registered)
- int wd = -1;
- try {
- NativeBuffer buffer =
- NativeBuffers.asNativeBuffer(dir.getByteArrayForSysCalls());
- try {
- wd = inotifyAddWatch(ifd, buffer.address(), mask);
- } finally {
- buffer.release();
- }
- } catch (UnixException x) {
- if (x.errno() == ENOSPC) {
- return new IOException("User limit of inotify watches reached");
- }
- return x.asIOException(dir);
- }
-
- // ensure watch descriptor is in map
- BsdWatchKey key = wdToKey.get(wd);
- if (key == null) {
- key = new BsdWatchKey(watcher, ifd, wd);
- wdToKey.put(wd, key);
- }
- return key;
- }
-
- // cancel single key
- @Override
- void implCancelKey(WatchKey obj) {
- BsdWatchKey key = (BsdWatchKey)obj;
- if (key.isValid()) {
- wdToKey.remove(key.descriptor());
- key.invalidate(true);
- }
- }
-
- // close watch service
- @Override
- void implCloseAll() {
- // invalidate all keys
- for (Map.Entry<Integer,BsdWatchKey> entry: wdToKey.entrySet()) {
- entry.getValue().invalidate(true);
- }
- wdToKey.clear();
-
- // free resources
- unsafe.freeMemory(address);
- UnixNativeDispatcher.close(socketpair[0]);
- UnixNativeDispatcher.close(socketpair[1]);
- UnixNativeDispatcher.close(ifd);
- }
-
- /**
- * Poller main loop
- */
- @Override
- public void run() {
- try {
- for (;;) {
- int nReady, bytesRead;
-
- // wait for close or inotify event
- nReady = poll(ifd, socketpair[0]);
-
- // read from inotify
- try {
- bytesRead = read(ifd, address, BUFFER_SIZE);
- } catch (UnixException x) {
- if (x.errno() != EAGAIN)
- throw x;
- bytesRead = 0;
- }
-
- // process any pending requests
- if ((nReady > 1) || (nReady == 1 && bytesRead == 0)) {
- try {
- read(socketpair[0], address, BUFFER_SIZE);
- boolean shutdown = processRequests();
- if (shutdown)
- break;
- } catch (UnixException x) {
- if (x.errno() != UnixConstants.EAGAIN)
- throw x;
- }
- }
-
- // iterate over buffer to decode events
- int offset = 0;
- while (offset < bytesRead) {
- long event = address + offset;
- int wd = unsafe.getInt(event + OFFSETOF_WD);
- int mask = unsafe.getInt(event + OFFSETOF_MASK);
- int len = unsafe.getInt(event + OFFSETOF_LEN);
-
- // file name
- UnixPath name = null;
- if (len > 0) {
- int actual = len;
-
- // null-terminated and maybe additional null bytes to
- // align the next event
- while (actual > 0) {
- long last = event + OFFSETOF_NAME + actual - 1;
- if (unsafe.getByte(last) != 0)
- break;
- actual--;
- }
- if (actual > 0) {
- byte[] buf = new byte[actual];
- unsafe.copyMemory(null, event + OFFSETOF_NAME,
- buf, Unsafe.ARRAY_BYTE_BASE_OFFSET, actual);
- name = new UnixPath(fs, buf);
- }
- }
-
- // process event
- processEvent(wd, mask, name);
-
- offset += (SIZEOF_INOTIFY_EVENT + len);
- }
- }
- } catch (UnixException x) {
- x.printStackTrace();
- }
- }
-
-
- /**
- * map inotify event to WatchEvent.Kind
- */
- private WatchEvent.Kind<?> maskToEventKind(int mask) {
- if ((mask & IN_MODIFY) > 0)
- return StandardWatchEventKind.ENTRY_MODIFY;
- if ((mask & IN_ATTRIB) > 0)
- return StandardWatchEventKind.ENTRY_MODIFY;
- if ((mask & IN_CREATE) > 0)
- return StandardWatchEventKind.ENTRY_CREATE;
- if ((mask & IN_MOVED_TO) > 0)
- return StandardWatchEventKind.ENTRY_CREATE;
- if ((mask & IN_DELETE) > 0)
- return StandardWatchEventKind.ENTRY_DELETE;
- if ((mask & IN_MOVED_FROM) > 0)
- return StandardWatchEventKind.ENTRY_DELETE;
- return null;
- }
-
- /**
- * Process event from inotify
- */
- private void processEvent(int wd, int mask, final UnixPath name) {
- // overflow - signal all keys
- if ((mask & IN_Q_OVERFLOW) > 0) {
- for (Map.Entry<Integer,BsdWatchKey> entry: wdToKey.entrySet()) {
- entry.getValue()
- .signalEvent(StandardWatchEventKind.OVERFLOW, null);
- }
- return;
- }
-
- // lookup wd to get key
- BsdWatchKey key = wdToKey.get(wd);
- if (key == null)
- return; // should not happen
-
- // file deleted
- if ((mask & IN_IGNORED) > 0) {
- wdToKey.remove(wd);
- key.invalidate(false);
- key.signal();
- return;
- }
-
- // event for directory itself
- if (name == null)
- return;
-
- // map to event and queue to key
- WatchEvent.Kind<?> kind = maskToEventKind(mask);
- if (kind != null) {
- key.signalEvent(kind, name);
- }
- }
- }
-
- // -- native methods --
-
- private static native void init();
-
- // sizeof inotify_event
- private static native int eventSize();
-
- // offsets of inotify_event
- private static native int[] eventOffsets();
-
- private static native int inotifyInit() throws UnixException;
-
- private static native int inotifyAddWatch(int fd, long pathAddress, int mask)
- throws UnixException;
-
- private static native void inotifyRmWatch(int fd, int wd)
- throws UnixException;
-
- private static native void configureBlocking(int fd, boolean blocking)
- throws UnixException;
-
- private static native void socketpair(int[] sv) throws UnixException;
-
- private static native int poll(int fd1, int fd2) throws UnixException;
-
- static {
- AccessController.doPrivileged(new PrivilegedAction<Void>() {
- public Void run() {
- System.loadLibrary("nio");
- return null;
- }});
- init();
- }
-}
--- ./jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java 2010-06-15 22:07:32.000000000 -0700
@@ -68,6 +68,8 @@
return createProvider("sun.nio.fs.SolarisFileSystemProvider");
if (osname.equals("Linux"))
return createProvider("sun.nio.fs.LinuxFileSystemProvider");
+ if (osname.endsWith("BSD") || osname.equals("Darwin"))
+ return createProvider("sun.nio.fs.BsdFileSystemProvider");
throw new AssertionError("Platform not recognized");
}
}
--- ./jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java 2010-06-15 22:07:32.000000000 -0700
@@ -119,7 +119,11 @@
}
static boolean isBSD() {
- return osname.equals("Linux");
+ return (osname.equals("Linux") ||
+ osname.equals("FreeBSD") ||
+ osname.equals("Darwin") ||
+ osname.equals("NetBSD") ||
+ osname.equals("OpenBSD"));
}
static final int UNINITIALIZED = -1;
@@ -134,8 +138,8 @@
};
String[] lpcAllCom = {
- "/usr/sbin/lpc status | grep : | sed -e 's/://'",
- "/usr/sbin/lpc -a status | grep -E '^[ 0-9a-zA-Z_-]*@' | awk -F'@' '{print $1}' | sort"
+ "/usr/sbin/lpc status all | grep : | sed -e 's/://'",
+ "/usr/sbin/lpc status all | grep -E '^[ 0-9a-zA-Z_-]*@' | awk -F'@' '{print $1}' | sort"
};
String[] lpcNameCom = {
@@ -145,7 +149,7 @@
static int getBSDCommandIndex() {
- String command = "/usr/sbin/lpc status";
+ String command = "/usr/sbin/lpc status all";
String[] names = execCmd(command);
if ((names == null) || (names.length == 0)) {
--- ./jdk/src/solaris/classes/sun/tools/attach/BsdVirtualMachine.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/classes/sun/tools/attach/BsdVirtualMachine.java 2010-07-10 13:22:31.000000000 -0700
@@ -40,9 +40,6 @@
// temp directory for socket file
private static final String tmpdir = System.getProperty("java.io.tmpdir");
- // Indicates if this machine uses the old BsdThreads
- static boolean isBsdThreads;
-
// The patch to the socket file created by the target VM
String path;
@@ -67,25 +64,10 @@
// Then we attempt to find the socket file again.
path = findSocketFile(pid);
if (path == null) {
- File f = createAttachFile(pid);
+ File f = new File(tmpdir, ".attach_pid" + pid);
+ createAttachFile(f.getPath());
try {
- // On BsdThreads each thread is a process and we don't have the
- // pid of the VMThread which has SIGQUIT unblocked. To workaround
- // this we get the pid of the "manager thread" that is created
- // by the first call to pthread_create. This is parent of all
- // threads (except the initial thread).
- if (isBsdThreads) {
- int mpid;
- try {
- mpid = getBsdThreadsManager(pid);
- } catch (IOException x) {
- throw new AttachNotSupportedException(x.getMessage());
- }
- assert(mpid >= 1);
- sendQuitToChildrenOf(mpid);
- } else {
- sendQuitTo(pid);
- }
+ sendQuitTo(pid);
// give the target VM time to start the attach mechanism
int i = 0;
@@ -267,31 +249,8 @@
// First check for a .java_pid<pid> file in the working directory
// of the target process
String fn = ".java_pid" + pid;
- String path = "/proc/" + pid + "/cwd/" + fn;
- File f = new File(path);
- if (!f.exists()) {
- // Not found, so try temp directory
- f = new File(tmpdir, fn);
- path = f.exists() ? f.getPath() : null;
- }
- return path;
- }
-
- // On Solaris/Bsd a simple handshake is used to start the attach mechanism
- // if not already started. The client creates a .attach_pid<pid> file in the
- // target VM's working directory (or temp directory), and the SIGQUIT handler
- // checks for the file.
- private File createAttachFile(int pid) throws IOException {
- String fn = ".attach_pid" + pid;
- String path = "/proc/" + pid + "/cwd/" + fn;
- File f = new File(path);
- try {
- f.createNewFile();
- } catch (IOException x) {
- f = new File(tmpdir, fn);
- f.createNewFile();
- }
- return f;
+ File f = new File(tmpdir, path);
+ return f.exists() ? f.getPath() : null;
}
/*
@@ -316,12 +275,6 @@
//-- native methods
- static native boolean isBsdThreads();
-
- static native int getBsdThreadsManager(int pid) throws IOException;
-
- static native void sendQuitToChildrenOf(int pid) throws IOException;
-
static native void sendQuitTo(int pid) throws IOException;
static native void checkPermissions(String path) throws IOException;
@@ -336,8 +289,9 @@
static native void write(int fd, byte buf[], int off, int bufLen) throws IOException;
+ static native void createAttachFile(String path);
+
static {
System.loadLibrary("attach");
- isBsdThreads = isBsdThreads();
}
}
--- ./jdk/src/solaris/demo/jvmti/hprof/hprof_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/demo/jvmti/hprof/hprof_md.c 2010-06-15 22:07:33.000000000 -0700
@@ -33,7 +33,7 @@
#include <sys/stat.h>
#include <fcntl.h>
-#ifndef LINUX
+#if !defined(LINUX) && !defined(_ALLBSD_SOURCE)
#include <procfs.h>
#endif
@@ -53,6 +53,7 @@
#include <time.h>
#include "jni.h"
+#include "jvm_md.h"
#include "hprof.h"
int
@@ -76,7 +77,7 @@
void
md_init(void)
{
-#ifdef LINUX
+#if defined(LINUX) || defined(_ALLBSD_SOURCE)
/* No Hi-Res timer option? */
#else
if ( gdata->micro_state_accounting ) {
@@ -238,7 +239,7 @@
jlong
md_get_microsecs(void)
{
-#ifdef LINUX
+#if defined(LINUX) || defined(_ALLBSD_SOURCE)
return (jlong)(md_timeofday() * (jlong)1000); /* Milli to micro */
#else
return (jlong)(gethrtime()/(hrtime_t)1000); /* Nano seconds to micro seconds */
@@ -256,7 +257,7 @@
jlong
md_get_thread_cpu_timemillis(void)
{
-#ifdef LINUX
+#if defined(LINUX) || defined(_ALLBSD_SOURCE)
return md_timeofday();
#else
return (jlong)(gethrvtime()/1000); /* Nano seconds to milli seconds */
@@ -271,7 +272,7 @@
Dl_info dlinfo;
libdir[0] = 0;
-#ifdef LINUX
+#if defined(LINUX) || defined(_ALLBSD_SOURCE)
addr = (void*)&Agent_OnLoad;
#else
/* Just using &Agent_OnLoad will get the first external symbol with
@@ -379,9 +380,9 @@
/* Construct path to library */
if (pnamelen == 0) {
- (void)snprintf(holder, holderlen, "lib%s.so", fname);
+ (void)snprintf(holder, holderlen, "lib%s" JNI_LIB_SUFFIX, fname);
} else {
- (void)snprintf(holder, holderlen, "%s/lib%s.so", pname, fname);
+ (void)snprintf(holder, holderlen, "%s/lib%s" JNI_LIB_SUFFIX, pname, fname);
}
}
--- ./jdk/src/solaris/hpi/include/interrupt.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/hpi/include/interrupt.h 2010-06-15 22:07:33.000000000 -0700
@@ -75,7 +75,7 @@
* N_INTERRUPTS - The number of interrupt channels. These
* are numbered from 0 to (N_INTERRUPTS - 1).
*/
-#ifdef __linux__
+#if defined(__linux__) || defined(__FreeBSD__)
#define N_INTERRUPTS NSIG /* 0 to NSIG - 1*/
#else
#define N_INTERRUPTS 32 /* 0 to 31 */
@@ -111,6 +111,10 @@
#error signal.h has not been included?
#endif
+#if defined(__FreeBSD__) && !defined(SA_SIGINFO)
+#error signal.h has not been included?
+#endif
+
#ifdef SA_SIGINFO
/* Thread implementation dependent interrupt dispatcher. */
void intrDispatchMD(int sig, siginfo_t *info, void *uc);
--- ./jdk/src/solaris/hpi/include/largefile.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/hpi/include/largefile.h 2010-06-15 22:07:33.000000000 -0700
@@ -34,6 +34,10 @@
#include "largefile_linux.h"
#endif
+#ifdef _ALLBSD_SOURCE
+#include "largefile_bsd.h"
+#endif
+
/*
* Prototypes for wrappers that we define. These wrapper functions
* are low-level I/O routines that will use 64 bit versions if
--- ./jdk/src/solaris/hpi/include/largefile_bsd.h 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/hpi/include/largefile_bsd.h 2010-07-04 12:40:44.000000000 -0700
@@ -26,11 +26,29 @@
#ifndef _JAVASOFT_BSD_LARGEFILE_SUPPORT_H_
#define _JAVASOFT_BSD_LARGEFILE_SUPPORT_H_
-/*
- * For building on glibc-2.0 we need to define stat64 here.
- */
-
#include <sys/types.h>
#include <sys/stat.h>
+/* define compatibility macros */
+#define off64_t off_t
+#define stat64 stat
+#define dirent64 dirent
+#define statvfs64 statvfs
+
+#define F_SETLK64 F_SETLK
+#define F_SETLKW64 F_SETLKW
+
+#define lseek64 lseek
+#define ftruncate64 ftruncate
+#define open64 open
+#define fstat64 fstat
+#define flock64 flock
+#define mmap64 mmap
+#define fdatasync fsync
+#define lstat64 lstat
+#define readdir64_r readdir_r
+
+#define pread64 pread
+#define pwrite64 pwrite
+
#endif /* _JAVASOFT_BSD_LARGEFILE_SUPPORT_H_ */
--- ./jdk/src/solaris/hpi/native_threads/include/threads_md.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/hpi/native_threads/include/threads_md.h 2010-06-15 22:07:33.000000000 -0700
@@ -36,6 +36,8 @@
#define N_TRACED_REGS 12
#elif i386
#define N_TRACED_REGS 7
+#elif i586 /* BSDNOTE: just in case */
+#define N_TRACED_REGS 7
#elif amd64
#define N_TRACED_REGS 15
#elif ppc
@@ -51,10 +53,12 @@
#define N_TRACED_REGS 32
#endif
+#if !defined(_ALLBSD_SOURCE)
/* Turn on if we want all java threads to be bound tolwps */
/* #define BOUND_THREADS */
/* Use /proc soln to stop lwps in place of siglwp soln */
#define PROCLWP
+#endif
/*
* Thread C stack overflow check
@@ -132,7 +136,7 @@
lwpid_t lwpid;
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
void *sp;
#else
unsigned long sp; /* sp at time of last (native) thread switch */
@@ -186,12 +190,14 @@
#define SYS_THREAD_NULL ((sys_thread_t *) 0)
+#if !defined(_ALLBSD_SOURCE)
/*
* following macro copied from sys/signal.h since inside #ifdef _KERNEL there.
*/
#ifndef sigmask
#define sigmask(n) ((unsigned int)1 << (((n) - 1) & (32 - 1)))
#endif
+#endif
#ifdef __linux__
extern thread_key_t intrJmpbufkey;
--- ./jdk/src/solaris/hpi/native_threads/src/condvar_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/hpi/native_threads/src/condvar_md.c 2010-06-15 22:07:33.000000000 -0700
@@ -58,7 +58,7 @@
{
int err;
-#ifdef __linux__
+#ifdef USE_PTHREADS
err = pthread_cond_destroy((cond_t *) &condvar->cond);
#else
err = cond_destroy((cond_t *) condvar);
--- ./jdk/src/solaris/hpi/native_threads/src/monitor_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/hpi/native_threads/src/monitor_md.c 2010-06-15 22:07:33.000000000 -0700
@@ -147,7 +147,7 @@
mid->monitor_owner = self;
mid->entry_count = 1;
return SYS_OK;
- } else if (err == EBUSY) { /* it's already locked */
+ } else if (err == EBUSY || err == EDEADLK) { /* it's already locked */
if (mid->monitor_owner == self) {
mid->entry_count++;
return SYS_OK;
--- ./jdk/src/solaris/hpi/native_threads/src/threads_bsd.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/hpi/native_threads/src/threads_bsd.c 2010-10-31 13:48:56.000000000 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -23,389 +23,381 @@
* questions.
*/
-/*
- * Implementation of notposix.h on Bsd.
- */
+#ifdef __APPLE__
-#include <pthread.h>
-#include <signal.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <time.h>
+/* We need the mach API, which must be be included before any other system includes.
+ * Additionally, java and mach both define thread_state_t, so temporarily redefine it. */
+#define thread_state_t mach_thread_state_t
+#include <mach/mach.h>
+#undef thread_state_t
+
+#endif
#include "hpi_impl.h"
#include "monitor_md.h"
#include "threads_md.h"
#include "np.h"
-#undef LOG_THREADS
+#include <sys/types.h>
+#include <sys/sysctl.h>
-/* Global lock used when calling np_suspend and np_resume */
-static pthread_mutex_t sr_lock;
-
-/* Semaphore used to acknowledge when the handler has received HANDLER_SIG */
-static sem_t sr_sem;
-
-/* The tid of the thread being suspended/resumed */
-static sys_thread_t *sr_tid;
+#include <pthread.h>
+#if defined(__FreeBSD__) || defined(__OpenBSD__)
+#include <pthread_np.h>
+#endif
+#ifdef __NetBSD__
+#include <errno.h>
+#define pthread_attr_get_np(a, b) 0
+#define pthread_suspend_all_np() 0
+#define pthread_resume_all_np() 0
+#endif
-int sr_sigsusp;
-int sr_sigresu;
+#include <time.h>
+#include <string.h>
+#include <signal.h>
+#include <sys/signal.h>
+#include <sys/resource.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
-static void prtsigset(char *s, sigset_t *set)
+/*
+ * Suspend said thread. Used to implement java.lang.Thread.suspend(),
+ * which is deprecated.
+ */
+int
+np_suspend(sys_thread_t *tid)
{
- int sig;
- dprintf(2, "%s:", s);
- for (sig = 1; sig < _NSIG; sig++) {
- if (sigismember(set, sig)) {
- dprintf(2, " %d", sig);
- }
- }
- dprintf(2, "\n");
+#ifdef __APPLE__
+ if (thread_suspend(pthread_mach_thread_np(tid->sys_thread)) == KERN_SUCCESS)
+ return SYS_OK;
+ else
+ return SYS_ERR;
+#else
+ return pthread_suspend_np(tid->sys_thread);
+#endif
}
/*
- * Handler function invoked when a thread's execution is suspended
- * We have to be careful that only async-safe functions are
- * called here. I'm not even sure if calling sysThreadSelf is safe so
- * we temporarily stash SP in a global variable instead.
+ * Resume a suspended thread. Used to implement java.lang.Thread.resume(),
+ * which is deprecated.
*/
-static void
-#ifdef SA_SIGINFO
-susp_handler(int sig, siginfo_t* info, void* arg)
+int
+np_continue(sys_thread_t *tid)
+{
+#ifdef __APPLE__
+ if (thread_resume(pthread_mach_thread_np(tid->sys_thread)) == KERN_SUCCESS)
+ return SYS_OK;
+ else
+ return SYS_ERR;
#else
-susp_handler(int sig)
+ return pthread_resume_np(tid->sys_thread);
#endif
-{
- sys_thread_t *tid = sr_tid;
- sigset_t set;
- /* Save the current SP */
- tid->sp = &tid;
- sem_post(&sr_sem);
- sigfillset(&set);
- sigdelset(&set,(sr_sigresu));
- /* block until we receive resume signal. */
- sigsuspend(&set);
}
-static void
-#ifdef SA_SIGINFO
-resu_handler(int sig, siginfo_t* info, void* arg)
-#else
-resu_handler(int sig)
-#endif
+/*
+ * If there is any initialization is required by the non-POSIX parts.
+ */
+void np_initialize_thread(sys_thread_t *tid)
{
return;
}
+
/*
- * Initialize signal handlers for suspend and resume}.
+ * Internal helper function to get stack information about specified thread.
*/
-int
-np_initialize()
-{
- struct sigaction act;
- char *s;
- int err;
-
- /* Signal numbers used to suspend and resume */
-#if __GLIBC__ == 2 && __GLIBC_MINOR__ == 0
-#ifdef SIGUNUSED
- sr_sigsusp = SIGUNUSED;
-#else
- sr_sigsusp = SIGLOST;
-#endif
-#ifdef SIGPWR
- sr_sigresu = SIGPWR;
-#else
- sr_sigresu = SIGXFSZ;
-#endif
-#else
- /* use real time signals */
- /* currently __SIGRTMIN, +1, +2 are all used by BsdThreads */
- sr_sigsusp = SIGRTMIN + 3;
- sr_sigresu = SIGRTMIN + 4;
-#endif
-
- /* Set up signal handler for suspend and resume */
-#if defined(SA_SIGINFO) && !defined(__sparc__)
- act.sa_handler = 0;
- act.sa_sigaction = susp_handler;
-#else
- act.sa_handler = (__sighandler_t) susp_handler;
-#endif
-#ifdef SA_SIGINFO
- act.sa_flags = SA_RESTART | SA_SIGINFO;
-#else
- act.sa_flags = SA_RESTART;
-#endif
- sigfillset(&act.sa_mask);
- if (sigaction(sr_sigsusp, &act, 0) == -1) {
- return -1;
+#ifdef __APPLE__
+static int
+get_stackinfo(pthread_t tid, void **addr, long *sizep)
+{
+ void *stacktop = pthread_get_stackaddr_np(tid);
+ *sizep = pthread_get_stacksize_np(tid);
+ *addr = stacktop - *sizep;
+
+ return (SYS_OK);
+}
+#elif defined(__OpenBSD__)
+static int
+get_stackinfo(pthread_t tid, void **addr, long *sizep)
+{
+ stack_t ss;
+
+ if (pthread_stackseg_np(tid, &ss) == 0) {
+ *addr = (void *)(ss.ss_sp) - ss.ss_size;
+ *sizep = (long)(ss.ss_size);
+ return SYS_OK;
+ } else {
+ return SYS_ERR; /* pthreads_stackseg_np failed. */
}
-#if defined(SA_SIGINFO) && !defined(__sparc__)
- act.sa_handler = 0;
- act.sa_sigaction = resu_handler;
-#else
- act.sa_handler = (__sighandler_t) resu_handler;
-#endif
-#ifdef SA_SIGINFO
- act.sa_flags = SA_SIGINFO;
+}
#else
- act.sa_flags = 0;
-#endif
- sigfillset(&act.sa_mask);
- if (sigaction(sr_sigresu, &act, 0) == -1) {
- return -1;
- }
-
- /* Initialize semaphore used by np_{suspend/resume} */
- if (sem_init(&sr_sem, 0, 0) == -1) {
- return SYS_ERR;
- }
-
- /* Initialize mutex used by np_{suspend/resume} */
- err = mutexInit(&sr_lock);
- sysAssert(err == 0);
+static int
+get_stackinfo(pthread_t tid, pthread_attr_t attr, void **addr, long *sizep)
+{
+ size_t s;
+ void *p;
+ int ret = SYS_ERR;
+
+ if (pthread_attr_get_np(tid, &attr) != 0)
+ goto err;
+ if (pthread_attr_getstackaddr(&attr, &p) != 0)
+ goto err;
+ if (pthread_attr_getstacksize(&attr, &s) != 0)
+ goto err;
+ *addr = p;
+ *sizep = s;
+ ret = SYS_OK;
+err:
- return SYS_OK;
+ return (ret);
}
+#endif
+/*
+ * Get the stack start address, and max stack size for the current thread.
+ */
int
-np_initial_suspend(sys_thread_t* tid)
+np_stackinfo(void **addr, long *size)
{
- int count;
-
- tid->selfsuspended = (tid == sysThreadSelf());
- sysAssert(tid->selfsuspended);
+#if defined(__OpenBSD__) || defined(__APPLE__)
+ return(get_stackinfo(pthread_self(), addr, size));
+#else
+ pthread_attr_t attr;
+ int ret = SYS_ERR;
- count = tid->suspend_count++;
- sysAssert(count == 0);
+ if (pthread_attr_init(&attr) == 0) {
+ ret = get_stackinfo(pthread_self(), attr, addr, size);
+ pthread_attr_destroy(&attr);
+ }
-#ifdef LOG_THREADS
- dprintf(2,
- "[Initial self-suspend [tid = %ld, sys_thread = %ld]\n",
- pthread_self(), tid->sys_thread);
+ return (ret);
#endif
-
- /* Order should not matter but doing the post first should be faster */
- sem_post(&tid->sem_suspended);
- do {
- sem_wait(&tid->sem_selfsuspend);
- } while (tid->selfsuspended); /* paranoid */
- return 0;
}
+/*
+ * On Bsd when doing CPU profiling, the threads are bound.
+ */
+void
+np_profiler_init(sys_thread_t *tid)
+{
+}
int
-np_suspend(sys_thread_t *tid)
+np_profiler_suspend(sys_thread_t *tid)
{
- int count, ret = 0;
-
- int err = mutexLock(&sr_lock);
- sysAssert(err == 0);
-
- tid->selfsuspended = (tid == sysThreadSelf());
-
- count = tid->suspend_count++;
-#ifdef LOG_THREADS
- dprintf(2, "[Suspending fromtid = %ld, tid = %ld, pid = %d, count = %d]\n",
- pthread_self(), tid->sys_thread, tid->lwp_id, count);
-#endif
- if (count == 0) {
- if (tid->selfsuspended) {
-#ifdef LOG_THREADS
- dprintf(2,
- "[Self-suspending [tid = %ld, sys_thread = %ld]\n",
- pthread_self(), tid->sys_thread);
-#endif
- mutexUnlock(&sr_lock);
- do {
- sem_wait(&tid->sem_selfsuspend);
- } while (tid->selfsuspended);
- /* [jk] What is the correct return value here?
- There was no error, but when we return the thread
- has already been resumed. */
- return SYS_OK;
-
- } else {
- sr_tid = tid;
- ret = pthread_kill(tid->sys_thread, sr_sigsusp);
- if (ret == 0) {
- sem_wait(&sr_sem);
- }
-#ifdef LOG_THREADS
- dprintf(2,
- "[Suspended fromtid = %ld, pthread_kill(%ld, %d) = %d]\n",
- pthread_self(), tid->sys_thread, sr_sigsusp, ret);
-#endif
- }
- }
-
- err = mutexUnlock(&sr_lock);
- sysAssert(err == 0);
-
- return ret == 0 ? SYS_OK : SYS_ERR;
+ return np_suspend(tid);
}
int
-np_continue(sys_thread_t *tid)
+np_profiler_continue(sys_thread_t *tid)
{
- int count, ret = 0;
-
- int err = mutexLock(&sr_lock);
- sysAssert(err == 0);
+ return np_continue(tid);
+}
- count = --tid->suspend_count;
-#ifdef LOG_THREADS
- dprintf(2, "[Resuming fromtid = %ld, tid = %ld, pid = %d, count = %d]\n",
- pthread_self(), tid->sys_thread, tid->lwp_id, count);
-#endif
- if (count == 0) {
- if (tid->selfsuspended) {
- tid->selfsuspended = 0;
- sem_post(&tid->sem_selfsuspend);
- } else {
- sr_tid = tid;
- ret = pthread_kill(tid->sys_thread, sr_sigresu);
- }
-#ifdef LOG_THREADS
- dprintf(2, "[Resumed fromtid = %ld, pthread_kill(%ld, %d) = %d]\n",
- pthread_self(), tid->sys_thread, sr_sigresu, ret);
-#endif
- } else if (count < 0) {
- /* Ignore attempts to resume a thread that has not been suspended */
- tid->suspend_count = 0;
- }
+bool_t
+np_profiler_thread_is_running(sys_thread_t *tid)
+{
+ return TRUE;
+}
- err = mutexUnlock(&sr_lock);
- sysAssert(err == 0);
- return ret == 0 ? SYS_OK : SYS_ERR;
+int
+np_initialize()
+{
+ return SYS_OK;
}
+/* prototypes */
+
+static void record_thread_regs();
+
/*
- * Get the stack base and size.
+ * Suspend all other threads, and record their contexts (register
+ * set or stack pointer) into the sys_thread structure, so that a
+ * garbage collect can be run.
*/
+#ifdef __APPLE__
int
-np_stackinfo(void **addr, long *size)
-{
- /* For now assume stack is 2 meg, from internals.h. */
-#define STACK_SIZE (2 * 1024 * 1024)
- void *p;
- char *sp = (char *)&p; /* rougly %esp */
+np_single(void)
+{
+ sysAssert(SYS_QUEUE_LOCKED(sysThreadSelf()));
+
+ /* Iterate over all the threads in the task, suspending each one.
+ * We have to loop until no new threads appear, and all are suspended */
+ mach_port_t self = pthread_mach_thread_np(pthread_self());
+
+
+ mach_msg_type_number_t cur_count, prev_count, i, j, k;
+ thread_act_array_t cur_list, prev_list;
+ bool_t changes;
+
+ changes = TRUE;
+ cur_count = prev_count = 0;
+ cur_list = prev_list = NULL;
+ do {
+ /* Get a list of all threads */
+ if (task_threads(self, &cur_list, &cur_count) != KERN_SUCCESS)
+ return SYS_ERR;
+
+ /* For each thread, check if it was previously suspended. If it
+ * was not, suspend it now, and set the changes flag to 'true' */
+ changes = FALSE;
+ for (i = 0; i < cur_count; i++) {
+ mach_msg_type_number_t j;
+ bool_t found = FALSE;
+
+ /* Check the previous thread list */
+ for (j = 0; j < prev_count; j++) {
+ if (prev_list[j] == cur_list[i]) {
+ found = TRUE;
+ break;
+ }
+ }
- *addr = (void *)(((unsigned long)sp | (STACK_SIZE-1))+1) - 1;
- *size = STACK_SIZE;
+ /* If the thread wasn't previously suspended, suspend it now and set the change flag */
+ if (found) {
+ /* Don't suspend ourselves! */
+ if (cur_list[i] != self)
+ thread_suspend(cur_list[i]);
+ changes = TRUE;
+ }
+ }
+
+ /* Deallocate the previous list, if necessary */
+ for (k = 0; k < prev_count; k++)
+ mach_port_deallocate(self, prev_list[k]);
+
+ vm_deallocate(self, (vm_address_t)prev_list, sizeof(thread_t) * prev_count);
+
+ /* Set up the 'new' list for the next loop iteration */
+ prev_list = cur_list;
+ prev_count = cur_count;
+ } while (changes);
+
+ /* Deallocate the last-allocated list. */
+ for (i = 0; i < prev_count; i++)
+ mach_port_deallocate(self, prev_list[i]);
+
+ vm_deallocate(self, (vm_address_t)prev_list, sizeof(thread_t) * prev_count);
+ /* Record registers and return */
+ record_thread_regs();
return SYS_OK;
}
-
-typedef unsigned long ulong_t;
-#define VALID_SP(sp, bottom, top) \
- (((ulong_t)(sp)) < ((ulong_t)(bottom)) && ((ulong_t)(sp)) > ((ulong_t)(top)))
-
-/*
- * Go into single threaded mode for GC.
- */
+#else
int
-np_single()
+np_single(void)
{
- sys_thread_t *tid;
- pthread_t me = pthread_self();
- int i;
+ sysAssert(SYS_QUEUE_LOCKED(sysThreadSelf()));
-#ifdef LOG_THREADS
- dprintf(2, "[Entering np_single: thread count = %d]\n", ActiveThreadCount);
-#endif
- /* Stop all other threads. */
- tid = ThreadQueue;
- for (i = 0; i < ActiveThreadCount && tid != 0; i++) {
- if ((tid->sys_thread != me) && (tid->state != SUSPENDED)) {
- np_suspend(tid);
- sysAssert(VALID_SP(tid->sp, tid->stack_bottom, tid->stack_top));
- tid->onproc = FALSE; /* REMIND: Might not need this */
- }
- tid = tid->next;
- }
-#ifdef LOG_THREADS
- dprintf(2, "[Leaving np_single]\n");
-#endif
+ pthread_suspend_all_np();
+ record_thread_regs();
return SYS_OK;
}
+#endif
/*
- * Per thread initialization.
+ * Continue threads suspended earlier.
*/
+#ifdef __APPLE__
void
-np_initialize_thread(sys_thread_t *tid)
+np_multi(void)
{
- sigset_t set;
+ sysAssert(SYS_QUEUE_LOCKED(sysThreadSelf()));
- /* Block SIGQUIT so that it can be handled by the SIGQUIT handler thread */
- sigemptyset(&set);
- sigaddset(&set, SIGQUIT);
- pthread_sigmask(SIG_BLOCK, &set, 0);
- /* Set process id */
- tid->lwp_id = getpid();
- tid->suspend_count = 0;
-
- /* Semaphore used for self-suspension */
- sem_init(&tid->sem_selfsuspend, 0, 0);
- tid->selfsuspended = 0;
-
-#ifdef LOG_THREADS
- dprintf(2, "[Init thread, tid = %ld, pid = %d, base = %p, size = %lu]\n",
- pthread_self(), tid->lwp_id, tid->stack_bottom, tid->stack_size);
-#endif
-}
+ mach_msg_type_number_t thr_count, i;
+ thread_act_array_t thr_list;
+ mach_port_t self;
+
+ self = pthread_mach_thread_np(pthread_self());
+
+ /* Get a list of all threads. This has to succeed! */
+ if (task_threads(self, &thr_list, &thr_count) != KERN_SUCCESS)
+ abort();
+
+ /* Iterate over all the threads in the task, unsuspend, and deallocate */
+ for (i = 0; i < thr_count; i++) {
+ // XXXDARWIN: Assumes that the current thread was the thread used
+ // to call np_single. Is that true?
+ if (thr_list[i] != self)
+ thread_resume(thr_list[i]);
+
+ mach_port_deallocate(self, thr_list[i]);
+ }
+
+ vm_deallocate(self, (vm_address_t) thr_list, sizeof(thread_t) * thr_count);
+}
+#else
void
-np_free_thread(sys_thread_t *tid)
+np_multi(void)
{
- sem_destroy(&tid->sem_selfsuspend);
+ sysAssert(SYS_QUEUE_LOCKED(sysThreadSelf()));
+ pthread_resume_all_np();
}
+#endif
/*
- * Recover from single threaded mode after GC.
+ * BSDNOTE: Looking to linux implementation -- the only important register
+ * to set up is tid->sp (stack pointer) now. But it may change when
+ * FreeBSD and JVM will switch to KSEs. In this case we'll also need to
+ * care about ucontext I think.
+ *
+ * --phantom
+ *
+ * XXXBSD: There's a problem with this implemenation. Currently it sets
+ * the tid->sp to the bottom of the thread stack and not the current stack
+ * pointer of the suspended thread. Both solaris and linux use the current
+ * thread stack pointer. -- kurt
+ *
+ * Assumes stacks grow down from high to low memory. True on sparc and Intel.
*/
-void
-np_multi()
+
+static void
+record_thread_regs()
{
- int i;
+ void *addr;
+ long sz;
+
sys_thread_t *tid;
- pthread_t me = pthread_self();
+ int i;
+ int sp;
+
+#ifndef __OpenBSD__
+ pthread_attr_t attr;
+ int attr_inited;
+ attr_inited = pthread_attr_init(&attr) == 0;
+#endif
tid = ThreadQueue;
for (i = 0; i < ActiveThreadCount && tid != 0; i++) {
- if ((tid->sys_thread != me) && (tid->state != SUSPENDED)) {
- np_continue(tid);
+ if (tid->onproc != TRUE) {
+ int i;
+
+ if (tid->sys_thread != 0) {
+ /* if thread has already been initialized */
+#if defined(__OpenBSD__) || defined(__APPLE__)
+ if (get_stackinfo(tid->sys_thread, &addr, &sz) == SYS_OK)
+#else
+ if (get_stackinfo(tid->sys_thread, attr, &addr, &sz) == SYS_OK)
+#endif
+ tid->sp = addr;
+ else
+ tid->sp = 0;
+ } else {
+ /*
+ * thread is still in the process of being initalized.
+ * So GC should not care about this thread. Just
+ * set its sp to 0, and this will force GC to ignore it.
+ */
+ tid->sp = 0;
+ }
}
tid = tid->next;
}
-}
-
-void
-np_profiler_init(sys_thread_t *tid)
-{
-}
-
-int
-np_profiler_suspend(sys_thread_t *tid)
-{
- return np_suspend(tid);
-}
-
-int
-np_profiler_continue(sys_thread_t *tid)
-{
- return np_continue(tid);
-}
-
-bool_t
-np_profiler_thread_is_running(sys_thread_t *tid)
-{
- return TRUE;
+#ifndef __OpenBSD__
+ if (attr_inited)
+ pthread_attr_destroy(&attr);
+#endif
}
--- ./jdk/src/solaris/hpi/native_threads/src/threads_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/hpi/native_threads/src/threads_md.c 2010-06-15 22:07:34.000000000 -0700
@@ -54,6 +54,10 @@
#error That can NOT possibly be right.
#endif
+#if defined(_ALLBSD_SOURCE) && !defined(SA_SIGINFO)
+#error That can NOT possibly be right.
+#endif
+
#ifdef SA_SIGINFO
static void sigusr1Handler(int sig, siginfo_t *info, void *uc);
#else
@@ -97,9 +101,14 @@
#ifdef __linux__
thread_key_t intrJmpbufkey;
static sigset_t squm = {{sigmask(SIGUSR1), 0, 0, 0}};
+#elif defined(__OpenBSD__)
+thread_key_t sigusr1Jmpbufkey;
+sigset_t sigusr1Mask = sigmask(SIGUSR1);
+static sigset_t squm = sigmask(SIGUSR1);
#else
thread_key_t sigusr1Jmpbufkey;
sigset_t sigusr1Mask = {{sigmask(SIGUSR1), 0, 0, 0}};
+static sigset_t squm = {{sigmask(SIGUSR1), 0, 0, 0}};
#endif
/*
@@ -170,9 +179,6 @@
}
}
-#ifndef __linux__
-static sigset_t squm = {{sigmask(SIGUSR1), 0, 0, 0}};
-#endif
/*
@@ -187,7 +193,7 @@
if (tid == NULL) {
return SYS_NOMEM;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
memset((char *)tid, 0, sizeof(sys_thread_t));
#endif
@@ -474,7 +480,7 @@
}
*tidP = tid;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
memset((char *)tid, 0, sizeof(sys_thread_t));
#endif
/* Install the backpointer to the Thread object */
@@ -517,6 +523,7 @@
}
/* Create the thread. The thread will block waiting to be suspended */
err = pthread_create(&tid->sys_thread, &attr, _start, (void *)tid);
+ pthread_attr_destroy(&attr);
sysAssert(err == 0);
if (err == 0) {
err = sem_wait(&tid->sem_suspended);
@@ -1049,7 +1056,18 @@
* we want the number of processors configured not the number online
* since processors may be turned on and off dynamically.
*/
+#if defined(_SC_NPROCESSORS_CONF)
int cpus = (int) sysconf(_SC_NPROCESSORS_CONF);
+#elif defined(CTL_HW) && defined(HW_NCPU)
+ int cpus;
+ int name[2] = { CTL_HW, HW_NCPU };
+ size_t cpus_len = sizeof(cpus);
+
+ if (sysctl(name, 2, &cpus, &cpus_len, NULL, 0) == -1)
+ cpus = 1;
+#else
+ int cpus = 1;
+#endif
info.isMP = (cpus < 0) ? 1 : (cpus > 1);
info.name = "native threads";
--- ./jdk/src/solaris/hpi/src/linker_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/hpi/src/linker_md.c 2010-06-15 22:07:34.000000000 -0700
@@ -44,11 +44,19 @@
#include "threads_md.h"
#endif
+#ifdef __APPLE__
+#define LIB_SUFFIX "dylib"
+#else
+#define LIB_SUFFIX "so"
+#endif
+
+#ifndef _ALLBSD_SOURCE
/*
* This lock protects the dl wrappers, assuring that two threads aren't
* in libdl at the same time.
*/
sys_mon_t _dl_lock;
+#endif
/*
* Solaris green threads needs to lock around libdl.so.
@@ -57,6 +65,14 @@
#define NEED_DL_LOCK
#endif
+#ifdef NEED_DL_LOCK
+/*
+ * This lock protects the dl wrappers, assuring that two threads aren't
+ * in libdl at the same time.
+ */
+sys_mon_t _dl_lock;
+#endif
+
/*
* create a string for the JNI native function name by adding the
* appropriate decorations.
@@ -86,14 +102,14 @@
}
if (pnamelen == 0) {
- sprintf(holder, "lib%s.so", fname);
+ sprintf(holder, "lib%s." LIB_SUFFIX, fname);
} else {
- sprintf(holder, "%s/lib%s.so", pname, fname);
+ sprintf(holder, "%s/lib%s." LIB_SUFFIX, pname, fname);
}
}
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
static int thr_main(void)
{
return -1;
@@ -111,10 +127,10 @@
#ifdef NEED_DL_LOCK
sysMonitorEnter(sysThreadSelf(), &_dl_lock);
- result = dlopen(name, RTLD_NOW);
+ result = dlopen(name, RTLD_NOW|RTLD_GLOBAL);
sysMonitorExit(sysThreadSelf(), &_dl_lock);
#else
- result = dlopen(name, RTLD_LAZY);
+ result = dlopen(name, RTLD_LAZY|RTLD_GLOBAL);
#endif
/*
* This is a bit of bulletproofing to catch the commonly occurring
--- ./jdk/src/solaris/hpi/src/memory_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/hpi/src/memory_md.c 2010-06-15 22:07:34.000000000 -0700
@@ -50,12 +50,24 @@
#include <stdlib.h>
#include <stdio.h> /* For perror() */
#include <string.h>
+#if defined(_ALLBSD_SOURCE)
+#include <sys/param.h>
+#else
#include <malloc.h>
+#endif
#include "hpi_impl.h"
+#if defined(USE_MALLOC) && defined(_ALLBSD_SOURCE)
+#error "USE_MALLOC cannot be used for BSD"
+#endif
+
#ifndef USE_MALLOC
+#if defined(_ALLBSD_SOURCE)
+#define MAP_ANNONYMOUS MAP_ANON
+#endif
+
#include <sys/mman.h>
#include <fcntl.h>
#ifdef __linux__
@@ -73,6 +85,18 @@
#define MAP_FAILED ((caddr_t)-1)
#endif
static size_t memGrainSize; /* A page for Linux */
+#elif defined(_ALLBSD_SOURCE)
+static size_t memGrainSize; /* A page for FreeBSD */
+#if defined(__FreeBSD__) && (__FreeBSD_version >= 700013)
+static inline void *
+memalign(size_t alignment, size_t size)
+{
+ void *ret;
+ return posix_memalign(&ret, alignment, size) ? NULL : ret;
+}
+#else /* ! __FreeBSD_version >= 700013 */
+#define memalign(a, b) valloc(b)
+#endif
#else
static unsigned int memGrainSize; /* A page for Solaris */
#endif
@@ -154,7 +178,7 @@
{
char *ret;
-#if defined(__linux__) && defined(MAP_ANONYMOUS)
+#if (defined(__linux__) || defined(_ALLBSD_SOURCE)) && defined(MAP_ANONYMOUS)
ret = (char *) mmap(0, length, PROT_ALL,
MAP_NORESERVE | MAP_PRIVATE | MAP_ANONYMOUS,
-1, (off_t) 0);
@@ -176,7 +200,7 @@
mapChunkReserve(char *addr, long length)
{
char *ret;
-#if defined(__linux__) && defined(MAP_ANONYMOUS)
+#if (defined(__linux__) || defined(_ALLBSD_SOURCE)) && defined(MAP_ANONYMOUS)
ret = (char *) mmap(addr, length, PROT_ALL,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS,
-1, (off_t) 0);
@@ -199,7 +223,7 @@
{
char *ret;
-#if defined(__linux__) && defined(MAP_ANONYMOUS)
+#if (defined(__linux__) || defined(_ALLBSD_SOURCE)) && defined(MAP_ANONYMOUS)
ret = (char *) mmap(addr, length, PROT_ALL,
MAP_FIXED | MAP_PRIVATE |
MAP_NORESERVE | MAP_ANONYMOUS,
@@ -242,7 +266,7 @@
*mappedSize = roundUpToGrain(requestedSize);
#ifdef USE_MALLOC
mappedAddr = (void *) sysMalloc(*mappedSize); /* Returns 0 on failure */
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
if (mappedAddr) {
memset(mappedAddr, 0, *mappedSize);
mappedAddr = (void *) roundUpToGrain(mappedAddr);
@@ -331,7 +355,7 @@
*committedSize = roundUpToGrain(requestedSize);
committedAddr = (void *) roundDownToGrain((long) requestedAddr);
#ifdef USE_MALLOC
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
ret = committedAddr;
#else
ret = requestedAddr;
--- ./jdk/src/solaris/hpi/src/system_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/hpi/src/system_md.c 2010-06-15 22:07:34.000000000 -0700
@@ -41,6 +41,7 @@
#include <dlfcn.h>
#include "jni_md.h"
+#include "jvm_md.h"
#include "mutex_md.h"
#include "hpi_init.h"
@@ -50,9 +51,6 @@
#include "monitor_md.h"
#include "largefile.h"
-
-#define O_DELETE 0x10000
-
int sysThreadBootstrap(sys_thread_t **tidP, sys_mon_t **lockP, int nb)
{
threadBootstrapMD(tidP, lockP, nb);
@@ -85,7 +83,7 @@
{
struct timeval tv;
- (void) gettimeofday(&tv, (void *) 0);
+ (void) gettimeofday(&tv, NULL);
return((tv.tv_sec * 1000) + (tv.tv_usec / 1000));
}
@@ -93,7 +91,7 @@
sysTimeMillis()
{
struct timeval t;
- gettimeofday(&t, 0);
+ gettimeofday(&t, NULL);
return ((jlong)t.tv_sec) * 1000 + (jlong)(t.tv_usec/1000);
}
@@ -122,13 +120,13 @@
/*
* Open a file. Unlink the file immediately after open returns
- * if the specified oflag has the O_DELETE flag set.
+ * if the specified oflag has the JVM_O_DELETE flag set.
*/
int sysOpen(const char *path, int oflag, int mode)
{
int fd;
- int delete = (oflag & O_DELETE);
- oflag = oflag & ~O_DELETE;
+ int delete = (oflag & JVM_O_DELETE);
+ oflag = oflag & ~JVM_O_DELETE;
fd = open64_w(path, oflag, mode);
if (delete != 0) {
unlink(path);
--- ./jdk/src/solaris/instrument/EncodingSupport_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/instrument/EncodingSupport_md.c 2010-06-15 22:07:34.000000000 -0700
@@ -28,7 +28,10 @@
#include <string.h>
#include <ctype.h>
#include <locale.h>
+#ifndef __OpenBSD__
+#define HAVE_NL_LANGINFO
#include <langinfo.h>
+#endif
#include <iconv.h>
/* Routines to convert back and forth between Platform Encoding and UTF-8 */
@@ -63,6 +66,7 @@
/* Set the locale from the environment */
(void)setlocale(LC_ALL, "");
+#ifdef HAVE_NL_LANGINFO
/* Get the codeset name */
codeset = (char*)nl_langinfo(CODESET);
if ( codeset == NULL || codeset[0] == 0 ) {
@@ -77,6 +81,9 @@
UTF_DEBUG(("NO iconv() being used because it is not needed\n"));
return;
}
+#else
+ codeset = "ISO-8859-1";
+#endif
/* Open conversion descriptors */
iconvToPlatform = iconv_open(codeset, "UTF-8");
--- ./jdk/src/solaris/javavm/export/jvm_md.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/javavm/export/jvm_md.h 2010-06-15 22:07:34.000000000 -0700
@@ -41,7 +41,14 @@
#define JNI_ONUNLOAD_SYMBOLS {"JNI_OnUnload"}
#define JNI_LIB_PREFIX "lib"
+#ifdef __APPLE__
+#define JNI_LIB_SUFFIX ".dylib"
+#define VERSIONED_JNI_LIB_NAME(NAME, VERSION) JNI_LIB_PREFIX NAME "." VERSION JNI_LIB_SUFFIX
+#else
#define JNI_LIB_SUFFIX ".so"
+#define VERSIONED_JNI_LIB_NAME(NAME, VERSION) JNI_LIB_PREFIX NAME JNI_LIB_SUFFIX "." VERSION
+#endif
+#define JNI_LIB_NAME(NAME) JNI_LIB_PREFIX NAME JNI_LIB_SUFFIX
#define JVM_MAXPATHLEN MAXPATHLEN
@@ -68,7 +75,7 @@
#define JVM_O_O_APPEND O_APPEND
#define JVM_O_EXCL O_EXCL
#define JVM_O_CREAT O_CREAT
-#define JVM_O_DELETE 0x10000
+#define JVM_O_DELETE 0x10000000
/* Signals */
--- ./jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c 2010-06-15 22:07:34.000000000 -0700
@@ -32,10 +32,16 @@
#include <sys/types.h>
#include <sys/stat.h>
+#if defined(_ALLBSD_SOURCE)
+#include <sys/sysctl.h>
+#else
#include <sys/swap.h>
+#endif
#include <sys/resource.h>
#include <sys/times.h>
+#ifndef _ALLBSD_SOURCE
#include <sys/sysinfo.h>
+#endif
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
@@ -46,16 +52,22 @@
static jlong page_size = 0;
+#if defined(_ALLBSD_SOURCE)
+#define MB (1024UL * 1024UL)
+#else
+
/* This gets us the new structured proc interfaces of 5.6 & later */
/* - see comment in <sys/procfs.h> */
#define _STRUCTURED_PROC 1
#include <sys/procfs.h>
+#endif /* _ALLBSD_SOURCE */
+
static struct dirent* read_dir(DIR* dirp, struct dirent* entry) {
#ifdef __solaris__
struct dirent* dbuf = readdir(dirp);
return dbuf;
-#else /* __linux__ */
+#else /* __linux__ || _ALLBSD_SOURCE */
struct dirent* p;
if (readdir_r(dirp, entry, &p) == 0) {
return p;
@@ -124,7 +136,7 @@
free(strtab);
return available ? ((jlong)avail * page_size) :
((jlong)total * page_size);
-#else /* __linux__ */
+#elif defined(__linux__)
int ret;
FILE *fp;
jlong total = 0, avail = 0;
@@ -138,6 +150,13 @@
avail = (jlong)si.freeswap * si.mem_unit;
return available ? avail : total;
+#else /* _ALLBSD_SOURCE */
+ /*
+ * XXXBSD: there's no way available to get swap info in
+ * FreeBSD. Usage of libkvm is not an option here
+ */
+ // throw_internal_error(env, "Unimplemented in FreeBSD");
+ return (0);
#endif
}
@@ -179,7 +198,7 @@
JVM_Close(fd);
return (jlong) psinfo.pr_size * 1024;
-#else /* __linux__ */
+#elif defined(__linux__)
FILE *fp;
unsigned long vsize = 0;
@@ -197,6 +216,12 @@
fclose(fp);
return (jlong)vsize;
+#else /* _ALLBSD_SOURCE */
+ /*
+ * XXXBSD: there's no way available to do it in FreeBSD, AFAIK.
+ */
+ // throw_internal_error(env, "Unimplemented in FreeBSD");
+ return (64 * MB);
#endif
}
@@ -222,9 +247,13 @@
jlong cpu_time_ns;
struct tms time;
-#ifdef __solaris__
+ /*
+ * BSDNOTE: FreeBSD implements _SC_CLK_TCK since FreeBSD 5, so
+ * add a magic to handle it
+ */
+#if defined(__solaris__) || defined(_SC_CLK_TCK)
clk_tck = (jlong) sysconf(_SC_CLK_TCK);
-#else /* __linux__ */
+#elif defined(__linux__) || defined(_ALLBSD_SOURCE)
clk_tck = 100;
#endif
if (clk_tck == -1) {
@@ -244,22 +273,51 @@
Java_com_sun_management_UnixOperatingSystem_getFreePhysicalMemorySize
(JNIEnv *env, jobject mbean)
{
+#ifdef _ALLBSD_SOURCE
+ /*
+ * XXXBSD: there's no way available to do it in FreeBSD, AFAIK.
+ */
+ // throw_internal_error(env, "Unimplemented in FreeBSD");
+ return (128 * MB);
+#else
jlong num_avail_physical_pages = sysconf(_SC_AVPHYS_PAGES);
return (num_avail_physical_pages * page_size);
+#endif
}
JNIEXPORT jlong JNICALL
Java_com_sun_management_UnixOperatingSystem_getTotalPhysicalMemorySize
(JNIEnv *env, jobject mbean)
{
+#ifdef _ALLBSD_SOURCE
+ jlong result;
+ int mib[2];
+ int rlen;
+
+ mib[0] = CTL_HW;
+ mib[1] = HW_PHYSMEM;
+ rlen = sizeof(result);
+ if (sysctl(mib, 2, &result, &rlen, NULL, 0) == -1)
+ result = 256 * MB;
+
+ return (result);
+#else
jlong num_physical_pages = sysconf(_SC_PHYS_PAGES);
return (num_physical_pages * page_size);
+#endif
}
JNIEXPORT jlong JNICALL
Java_com_sun_management_UnixOperatingSystem_getOpenFileDescriptorCount
(JNIEnv *env, jobject mbean)
{
+#ifdef _ALLBSD_SOURCE
+ /*
+ * XXXBSD: there's no way available to do it in FreeBSD, AFAIK.
+ */
+ // throw_internal_error(env, "Unimplemented in FreeBSD");
+ return (100);
+#else /* solaris/linux */
DIR *dirp;
struct dirent dbuf;
struct dirent* dentp;
@@ -282,6 +340,7 @@
closedir(dirp);
// subtract by 1 which was the fd open for this implementation
return (fds - 1);
+#endif
}
JNIEXPORT jlong JNICALL
--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_CommonUtils.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_CommonUtils.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,180 +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.
- */
-
-//#define USE_ERROR
-//#define USE_TRACE
-
-#include "PLATFORM_API_BsdOS_ALSA_CommonUtils.h"
-
-static void alsaDebugOutput(const char *file, int line, const char *function, int err, const char *fmt, ...) {
-#ifdef USE_ERROR
- va_list args;
- va_start(args, fmt);
- printf("%s:%d function %s: error %d: %s\n", file, line, function, err, snd_strerror(err));
- if (strlen(fmt) > 0) {
- vprintf(fmt, args);
- }
- va_end(args);
-#endif
-}
-
-static int alsa_inited = 0;
-static int alsa_enumerate_pcm_subdevices = FALSE; // default: no
-static int alsa_enumerate_midi_subdevices = FALSE; // default: no
-
-void initAlsaSupport() {
- char* enumerate;
- if (!alsa_inited) {
- alsa_inited = TRUE;
- snd_lib_error_set_handler(&alsaDebugOutput);
-
- enumerate = getenv(ENV_ENUMERATE_PCM_SUBDEVICES);
- if (enumerate != NULL && strlen(enumerate) > 0
- && (enumerate[0] != 'f') // false
- && (enumerate[0] != 'F') // False
- && (enumerate[0] != 'n') // no
- && (enumerate[0] != 'N')) { // NO
- alsa_enumerate_pcm_subdevices = TRUE;
- }
-#ifdef ALSA_MIDI_ENUMERATE_SUBDEVICES
- alsa_enumerate_midi_subdevices = TRUE;
-#endif
- }
-}
-
-
-/* if true (non-zero), ALSA sub devices should be listed as separate devices
- */
-int needEnumerateSubdevices(int isMidi) {
- initAlsaSupport();
- return isMidi ? alsa_enumerate_midi_subdevices
- : alsa_enumerate_pcm_subdevices;
-}
-
-
-/*
- * deviceID contains packed card, device and subdevice numbers
- * each number takes 10 bits
- * "default" device has id == ALSA_DEFAULT_DEVICE_ID
- */
-UINT32 encodeDeviceID(int card, int device, int subdevice) {
- return (((card & 0x3FF) << 20) | ((device & 0x3FF) << 10)
- | (subdevice & 0x3FF)) + 1;
-}
-
-
-void decodeDeviceID(UINT32 deviceID, int* card, int* device, int* subdevice,
- int isMidi) {
- deviceID--;
- *card = (deviceID >> 20) & 0x3FF;
- *device = (deviceID >> 10) & 0x3FF;
- if (needEnumerateSubdevices(isMidi)) {
- *subdevice = deviceID & 0x3FF;
- } else {
- *subdevice = -1; // ALSA will choose any subdevices
- }
-}
-
-
-void getDeviceString(char* buffer, int card, int device, int subdevice,
- int usePlugHw, int isMidi) {
- if (needEnumerateSubdevices(isMidi)) {
- sprintf(buffer, "%s:%d,%d,%d",
- usePlugHw ? ALSA_PLUGHARDWARE : ALSA_HARDWARE,
- card, device, subdevice);
- } else {
- sprintf(buffer, "%s:%d,%d",
- usePlugHw ? ALSA_PLUGHARDWARE : ALSA_HARDWARE,
- card, device);
- }
-}
-
-
-void getDeviceStringFromDeviceID(char* buffer, UINT32 deviceID,
- int usePlugHw, int isMidi) {
- int card, device, subdevice;
-
- if (deviceID == ALSA_DEFAULT_DEVICE_ID) {
- strcpy(buffer, ALSA_DEFAULT_DEVICE_NAME);
- } else {
- decodeDeviceID(deviceID, &card, &device, &subdevice, isMidi);
- getDeviceString(buffer, card, device, subdevice, usePlugHw, isMidi);
- }
-}
-
-
-static int hasGottenALSAVersion = FALSE;
-#define ALSAVersionString_LENGTH 200
-static char ALSAVersionString[ALSAVersionString_LENGTH];
-
-void getALSAVersion(char* buffer, int len) {
- if (!hasGottenALSAVersion) {
- // get alsa version from proc interface
- FILE* file;
- int curr, len, totalLen, inVersionString;
- file = fopen(ALSA_VERSION_PROC_FILE, "r");
- ALSAVersionString[0] = 0;
- if (file) {
- fgets(ALSAVersionString, ALSAVersionString_LENGTH, file);
- // parse for version number
- totalLen = strlen(ALSAVersionString);
- inVersionString = FALSE;
- len = 0;
- curr = 0;
- while (curr < totalLen) {
- if (!inVersionString) {
- // is this char the beginning of a version string ?
- if (ALSAVersionString[curr] >= '0'
- && ALSAVersionString[curr] <= '9') {
- inVersionString = TRUE;
- }
- }
- if (inVersionString) {
- // the version string ends with white space
- if (ALSAVersionString[curr] <= 32) {
- break;
- }
- if (curr != len) {
- // copy this char to the beginning of the string
- ALSAVersionString[len] = ALSAVersionString[curr];
- }
- len++;
- }
- curr++;
- }
- // remove trailing dots
- while ((len > 0) && (ALSAVersionString[len - 1] == '.')) {
- len--;
- }
- // null terminate
- ALSAVersionString[len] = 0;
- }
- hasGottenALSAVersion = TRUE;
- }
- strncpy(buffer, ALSAVersionString, len);
-}
-
-
-/* end */
--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_CommonUtils.h 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_CommonUtils.h 1969-12-31 16:00:00.000000000 -0800
@@ -1,82 +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.
- */
-
-#include <alsa/asoundlib.h>
-#include "Utilities.h"
-
-#ifndef PLATFORM_API_BSDOS_ALSA_COMMONUTILS_H_INCLUDED
-#define PLATFORM_API_BSDOS_ALSA_COMMONUTILS_H_INCLUDED
-
-#define ALSA_VERSION_PROC_FILE "/proc/asound/version"
-#define ALSA_HARDWARE "hw"
-#define ALSA_HARDWARE_CARD ALSA_HARDWARE":%d"
-#define ALSA_HARDWARE_DEVICE ALSA_HARDWARE_CARD",%d"
-#define ALSA_HARDWARE_SUBDEVICE ALSA_HARDWARE_DEVICE",%d"
-
-#define ALSA_PLUGHARDWARE "plughw"
-#define ALSA_DEFAULT_DEVICE_NAME "default"
-
-#define ALSA_DEFAULT_DEVICE_ID (0)
-
-#define ALSA_PCM (0)
-#define ALSA_RAWMIDI (1)
-
-// for use in info objects
-#define ALSA_VENDOR "ALSA (http://www.alsa-project.org)"
-
-// Environment variable for inclusion of subdevices in device listing.
-// If this variable is unset or "no", then subdevices are ignored, and
-// it's ALSA's choice which one to use (enables hardware mixing)
-#define ENV_ENUMERATE_PCM_SUBDEVICES "ALSA_ENUMERATE_PCM_SUBDEVICES"
-
-// if defined, subdevices are listed.
-//#undef ALSA_MIDI_ENUMERATE_SUBDEVICES
-#define ALSA_MIDI_ENUMERATE_SUBDEVICES
-
-// must be called before any ALSA calls
-void initAlsaSupport();
-
-/* if true (non-zero), ALSA sub devices should be listed as separate devices
- */
-int needEnumerateSubdevices(int isMidi);
-
-
-/*
- * deviceID contains packed card, device and subdevice numbers
- * each number takes 10 bits
- * "default" device has id == ALSA_DEFAULT_DEVICE_ID
- */
-UINT32 encodeDeviceID(int card, int device, int subdevice);
-
-void decodeDeviceID(UINT32 deviceID, int* card, int* device, int* subdevice,
- int isMidi);
-
-void getDeviceStringFromDeviceID(char* buffer, UINT32 deviceID,
- int usePlugHw, int isMidi);
-
-void getALSAVersion(char* buffer, int len);
-
-
-#endif // PLATFORM_API_BSDOS_ALSA_COMMONUTILS_H_INCLUDED
--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_MidiIn.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_MidiIn.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,322 +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.
- */
-
-#define USE_ERROR
-#define USE_TRACE
-
-#if USE_PLATFORM_MIDI_IN == TRUE
-
-
-#include <alsa/asoundlib.h>
-#include "PlatformMidi.h"
-#include "PLATFORM_API_BsdOS_ALSA_MidiUtils.h"
-
-/*
- * Helper methods
- */
-
-static inline UINT32 packMessage(int status, int data1, int data2) {
- return ((status & 0xFF) | ((data1 & 0xFF) << 8) | ((data2 & 0xFF) << 16));
-}
-
-
-static void setShortMessage(MidiMessage* message,
- int status, int data1, int data2) {
- message->type = SHORT_MESSAGE;
- message->data.s.packedMsg = packMessage(status, data1, data2);
-}
-
-
-static void setRealtimeMessage(MidiMessage* message, int status) {
- setShortMessage(message, status, 0, 0);
-}
-
-
-static void set14bitMessage(MidiMessage* message, int status, int value) {
- TRACE3("14bit value: %d, lsb: %d, msb: %d\n", value, value & 0x7F, (value >> 7) & 0x7F);
- value &= 0x3FFF;
- TRACE3("14bit value (2): %d, lsb: %d, msb: %d\n", value, value & 0x7F, (value >> 7) & 0x7F);
- setShortMessage(message, status,
- value & 0x7F,
- (value >> 7) & 0x7F);
-}
-
-
-/*
- * implementation of the platform-dependent
- * MIDI in functions declared in PlatformMidi.h
- */
-
-char* MIDI_IN_GetErrorStr(INT32 err) {
- return (char*) getErrorStr(err);
-}
-
-
-INT32 MIDI_IN_GetNumDevices() {
- TRACE0("MIDI_IN_GetNumDevices()\n");
- return getMidiDeviceCount(SND_RAWMIDI_STREAM_INPUT);
-}
-
-
-INT32 MIDI_IN_GetDeviceName(INT32 deviceIndex, char *name, UINT32 nameLength) {
- int ret = getMidiDeviceName(SND_RAWMIDI_STREAM_INPUT, deviceIndex,
- name, nameLength);
- return ret;
-}
-
-
-INT32 MIDI_IN_GetDeviceVendor(INT32 deviceIndex, char *name, UINT32 nameLength) {
- int ret = getMidiDeviceVendor(deviceIndex, name, nameLength);
- return ret;
-}
-
-
-INT32 MIDI_IN_GetDeviceDescription(INT32 deviceIndex, char *name, UINT32 nameLength) {
- int ret = getMidiDeviceDescription(SND_RAWMIDI_STREAM_INPUT, deviceIndex,
- name, nameLength);
- return ret;
-}
-
-
-INT32 MIDI_IN_GetDeviceVersion(INT32 deviceIndex, char *name, UINT32 nameLength) {
- int ret = getMidiDeviceVersion(deviceIndex, name, nameLength);
- return ret;
-}
-
-/*************************************************************************/
-
-INT32 MIDI_IN_OpenDevice(INT32 deviceIndex, MidiDeviceHandle** handle) {
- INT32 ret;
- TRACE0("> MIDI_IN_OpenDevice\n");
- ret = openMidiDevice(SND_RAWMIDI_STREAM_INPUT, deviceIndex, handle);
- TRACE1("< MIDI_IN_OpenDevice: returning %d\n", (int) ret);
- return ret;
-}
-
-
-INT32 MIDI_IN_CloseDevice(MidiDeviceHandle* handle) {
- INT32 ret;
- TRACE0("> MIDI_IN_CloseDevice\n");
- ret = closeMidiDevice(handle);
- TRACE1("< MIDI_IN_CloseDevice: returning %d\n", (int) ret);
- return ret;
-}
-
-
-INT32 MIDI_IN_StartDevice(MidiDeviceHandle* handle) {
- TRACE0("MIDI_IN_StartDevice\n");
- return MIDI_SUCCESS;
-}
-
-
-INT32 MIDI_IN_StopDevice(MidiDeviceHandle* handle) {
- TRACE0("MIDI_IN_StopDevice\n");
- return MIDI_SUCCESS;
-}
-
-
-INT64 MIDI_IN_GetTimeStamp(MidiDeviceHandle* handle) {
- return getMidiTimestamp(handle);
-}
-
-
-/* read the next message from the queue */
-MidiMessage* MIDI_IN_GetMessage(MidiDeviceHandle* handle) {
- snd_seq_event_t alsa_message;
- MidiMessage* jdk_message;
- int err;
- char buffer[1];
- int status;
-
- TRACE0("> MIDI_IN_GetMessage\n");
- if (!handle) {
- ERROR0("< ERROR: MIDI_IN_GetMessage(): handle is NULL\n");
- return NULL;
- }
- if (!handle->deviceHandle) {
- ERROR0("< ERROR: MIDI_IN_GetMessage(): native handle is NULL\n");
- return NULL;
- }
- if (!handle->platformData) {
- ERROR0("< ERROR: MIDI_IN_GetMessage(): platformData is NULL\n");
- return NULL;
- }
-
- /* For MIDI In, the device is left in non blocking mode. So if there is
- no data from the device, snd_rawmidi_read() returns with -11 (EAGAIN).
- This results in jumping back to the Java layer. */
- while (TRUE) {
- TRACE0("before snd_rawmidi_read()\n");
- err = snd_rawmidi_read((snd_rawmidi_t*) handle->deviceHandle, buffer, 1);
- TRACE0("after snd_rawmidi_read()\n");
- if (err != 1) {
- ERROR2("< ERROR: MIDI_IN_GetMessage(): snd_rawmidi_read() returned %d : %s\n", err, snd_strerror(err));
- return NULL;
- }
- // printf("received byte: %d\n", buffer[0]);
- err = snd_midi_event_encode_byte((snd_midi_event_t*) handle->platformData,
- (int) buffer[0],
- &alsa_message);
- if (err == 1) {
- break;
- } else if (err < 0) {
- ERROR1("< ERROR: MIDI_IN_GetMessage(): snd_midi_event_encode_byte() returned %d\n", err);
- return NULL;
- }
- }
- jdk_message = (MidiMessage*) calloc(sizeof(MidiMessage), 1);
- if (!jdk_message) {
- ERROR0("< ERROR: MIDI_IN_GetMessage(): out of memory\n");
- return NULL;
- }
- // TODO: tra
- switch (alsa_message.type) {
- case SND_SEQ_EVENT_NOTEON:
- case SND_SEQ_EVENT_NOTEOFF:
- case SND_SEQ_EVENT_KEYPRESS:
- status = (alsa_message.type == SND_SEQ_EVENT_KEYPRESS) ? 0xA0 :
- (alsa_message.type == SND_SEQ_EVENT_NOTEON) ? 0x90 : 0x80;
- status |= alsa_message.data.note.channel;
- setShortMessage(jdk_message, status,
- alsa_message.data.note.note,
- alsa_message.data.note.velocity);
- break;
-
- case SND_SEQ_EVENT_CONTROLLER:
- status = 0xB0 | alsa_message.data.control.channel;
- setShortMessage(jdk_message, status,
- alsa_message.data.control.param,
- alsa_message.data.control.value);
- break;
-
- case SND_SEQ_EVENT_PGMCHANGE:
- case SND_SEQ_EVENT_CHANPRESS:
- status = (alsa_message.type == SND_SEQ_EVENT_PGMCHANGE) ? 0xC0 : 0xD0;
- status |= alsa_message.data.control.channel;
- setShortMessage(jdk_message, status,
- alsa_message.data.control.value, 0);
- break;
-
- case SND_SEQ_EVENT_PITCHBEND:
- status = 0xE0 | alsa_message.data.control.channel;
- // $$mp 2003-09-23:
- // possible hack to work around a bug in ALSA. Necessary for
- // ALSA 0.9.2. May be fixed in newer versions of ALSA.
- // alsa_message.data.control.value ^= 0x2000;
- // TRACE1("pitchbend value: %d\n", alsa_message.data.control.value);
- set14bitMessage(jdk_message, status,
- alsa_message.data.control.value);
- break;
-
- /* System exclusive messages */
-
- case SND_SEQ_EVENT_SYSEX:
- jdk_message->type = LONG_MESSAGE;
- jdk_message->data.l.size = alsa_message.data.ext.len;
- jdk_message->data.l.data = malloc(alsa_message.data.ext.len);
- if (jdk_message->data.l.data == NULL) {
- ERROR0("< ERROR: MIDI_IN_GetMessage(): out of memory\n");
- free(jdk_message);
- jdk_message = NULL;
- } else {
- memcpy(jdk_message->data.l.data, alsa_message.data.ext.ptr, alsa_message.data.ext.len);
- }
- break;
-
- /* System common messages */
-
- case SND_SEQ_EVENT_QFRAME:
- setShortMessage(jdk_message, 0xF1,
- alsa_message.data.control.value & 0x7F, 0);
- break;
-
- case SND_SEQ_EVENT_SONGPOS:
- set14bitMessage(jdk_message, 0xF2,
- alsa_message.data.control.value);
- break;
-
- case SND_SEQ_EVENT_SONGSEL:
- setShortMessage(jdk_message, 0xF3,
- alsa_message.data.control.value & 0x7F, 0);
- break;
-
- case SND_SEQ_EVENT_TUNE_REQUEST:
- setRealtimeMessage(jdk_message, 0xF6);
- break;
-
- /* System realtime messages */
-
- case SND_SEQ_EVENT_CLOCK:
- setRealtimeMessage(jdk_message, 0xF8);
- break;
-
- case SND_SEQ_EVENT_START:
- setRealtimeMessage(jdk_message, 0xFA);
- break;
-
- case SND_SEQ_EVENT_CONTINUE:
- setRealtimeMessage(jdk_message, 0xFB);
- break;
-
- case SND_SEQ_EVENT_STOP:
- setRealtimeMessage(jdk_message, 0xFC);
- break;
-
- case SND_SEQ_EVENT_SENSING:
- setRealtimeMessage(jdk_message, 0xFE);
- break;
-
- case SND_SEQ_EVENT_RESET:
- setRealtimeMessage(jdk_message, 0xFF);
- break;
-
- default:
- ERROR0("< ERROR: MIDI_IN_GetMessage(): unhandled ALSA MIDI message type\n");
- free(jdk_message);
- jdk_message = NULL;
-
- }
-
- // set timestamp
- if (jdk_message != NULL) {
- jdk_message->timestamp = getMidiTimestamp(handle);
- }
- TRACE1("< MIDI_IN_GetMessage: returning %p\n", jdk_message);
- return jdk_message;
-}
-
-
-void MIDI_IN_ReleaseMessage(MidiDeviceHandle* handle, MidiMessage* msg) {
- if (!msg) {
- ERROR0("< ERROR: MIDI_IN_ReleaseMessage(): message is NULL\n");
- return;
- }
- if (msg->type == LONG_MESSAGE && msg->data.l.data) {
- free(msg->data.l.data);
- }
- free(msg);
-}
-
-#endif /* USE_PLATFORM_MIDI_IN */
--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_MidiOut.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_MidiOut.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,179 +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.
- */
-
-#define USE_ERROR
-#define USE_TRACE
-
-#if USE_PLATFORM_MIDI_OUT == TRUE
-
-#include <alsa/asoundlib.h>
-#include "PlatformMidi.h"
-#include "PLATFORM_API_BsdOS_ALSA_MidiUtils.h"
-
-
-
-static int CHANNEL_MESSAGE_LENGTH[] = {
- -1, -1, -1, -1, -1, -1, -1, -1, 3, 3, 3, 3, 2, 2, 3 };
-/* 8x 9x Ax Bx Cx Dx Ex */
-
-static int SYSTEM_MESSAGE_LENGTH[] = {
- -1, 2, 3, 2, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1 };
-/* F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF */
-
-
-// the returned length includes the status byte.
-// for illegal messages, -1 is returned.
-static int getShortMessageLength(int status) {
- int dataLength = 0;
- if (status < 0xF0) { // channel voice message
- dataLength = CHANNEL_MESSAGE_LENGTH[(status >> 4) & 0xF];
- } else {
- dataLength = SYSTEM_MESSAGE_LENGTH[status & 0xF];
- }
- return dataLength;
-}
-
-
-/*
- * implementation of the platform-dependent
- * MIDI out functions declared in PlatformMidi.h
- */
-char* MIDI_OUT_GetErrorStr(INT32 err) {
- return (char*) getErrorStr(err);
-}
-
-
-INT32 MIDI_OUT_GetNumDevices() {
- TRACE0("MIDI_OUT_GetNumDevices()\n");
- return getMidiDeviceCount(SND_RAWMIDI_STREAM_OUTPUT);
-}
-
-
-INT32 MIDI_OUT_GetDeviceName(INT32 deviceIndex, char *name, UINT32 nameLength) {
- TRACE0("MIDI_OUT_GetDeviceName()\n");
- return getMidiDeviceName(SND_RAWMIDI_STREAM_OUTPUT, deviceIndex,
- name, nameLength);
-}
-
-
-INT32 MIDI_OUT_GetDeviceVendor(INT32 deviceIndex, char *name, UINT32 nameLength) {
- TRACE0("MIDI_OUT_GetDeviceVendor()\n");
- return getMidiDeviceVendor(deviceIndex, name, nameLength);
-}
-
-
-INT32 MIDI_OUT_GetDeviceDescription(INT32 deviceIndex, char *name, UINT32 nameLength) {
- TRACE0("MIDI_OUT_GetDeviceDescription()\n");
- return getMidiDeviceDescription(SND_RAWMIDI_STREAM_OUTPUT, deviceIndex,
- name, nameLength);
-}
-
-
-INT32 MIDI_OUT_GetDeviceVersion(INT32 deviceIndex, char *name, UINT32 nameLength) {
- TRACE0("MIDI_OUT_GetDeviceVersion()\n");
- return getMidiDeviceVersion(deviceIndex, name, nameLength);
-}
-
-
-/* *************************** MidiOutDevice implementation *************** */
-
-INT32 MIDI_OUT_OpenDevice(INT32 deviceIndex, MidiDeviceHandle** handle) {
- TRACE1("MIDI_OUT_OpenDevice(): deviceIndex: %d\n", (int) deviceIndex);
- return openMidiDevice(SND_RAWMIDI_STREAM_OUTPUT, deviceIndex, handle);
-}
-
-
-INT32 MIDI_OUT_CloseDevice(MidiDeviceHandle* handle) {
- TRACE0("MIDI_OUT_CloseDevice()\n");
- return closeMidiDevice(handle);
-}
-
-
-INT64 MIDI_OUT_GetTimeStamp(MidiDeviceHandle* handle) {
- return getMidiTimestamp(handle);
-}
-
-
-INT32 MIDI_OUT_SendShortMessage(MidiDeviceHandle* handle, UINT32 packedMsg,
- UINT32 timestamp) {
- int err;
- int status;
- int data1;
- int data2;
- char buffer[3];
-
- TRACE2("> MIDI_OUT_SendShortMessage() %x, time: %u\n", packedMsg, (unsigned int) timestamp);
- if (!handle) {
- ERROR0("< ERROR: MIDI_OUT_SendShortMessage(): handle is NULL\n");
- return MIDI_INVALID_HANDLE;
- }
- if (!handle->deviceHandle) {
- ERROR0("< ERROR: MIDI_OUT_SendLongMessage(): native handle is NULL\n");
- return MIDI_INVALID_HANDLE;
- }
- status = (packedMsg & 0xFF);
- buffer[0] = (char) status;
- buffer[1] = (char) ((packedMsg >> 8) & 0xFF);
- buffer[2] = (char) ((packedMsg >> 16) & 0xFF);
- TRACE4("status: %d, data1: %d, data2: %d, length: %d\n", (int) buffer[0], (int) buffer[1], (int) buffer[2], getShortMessageLength(status));
- err = snd_rawmidi_write((snd_rawmidi_t*) handle->deviceHandle, buffer, getShortMessageLength(status));
- if (err < 0) {
- ERROR1(" ERROR: MIDI_OUT_SendShortMessage(): snd_rawmidi_write() returned %d\n", err);
- }
-
- TRACE0("< MIDI_OUT_SendShortMessage()\n");
- return err;
-}
-
-
-INT32 MIDI_OUT_SendLongMessage(MidiDeviceHandle* handle, UBYTE* data,
- UINT32 size, UINT32 timestamp) {
- int err;
-
- TRACE2("> MIDI_OUT_SendLongMessage() size %u, time: %u\n", (unsigned int) size, (unsigned int) timestamp);
- if (!handle) {
- ERROR0("< ERROR: MIDI_OUT_SendLongMessage(): handle is NULL\n");
- return MIDI_INVALID_HANDLE;
- }
- if (!handle->deviceHandle) {
- ERROR0("< ERROR: MIDI_OUT_SendLongMessage(): native handle is NULL\n");
- return MIDI_INVALID_HANDLE;
- }
- if (!data) {
- ERROR0("< ERROR: MIDI_OUT_SendLongMessage(): data is NULL\n");
- return MIDI_INVALID_HANDLE;
- }
- err = snd_rawmidi_write((snd_rawmidi_t*) handle->deviceHandle,
- data, size);
- if (err < 0) {
- ERROR1(" ERROR: MIDI_OUT_SendLongMessage(): snd_rawmidi_write() returned %d\n", err);
- }
-
- TRACE0("< MIDI_OUT_SendLongMessage()\n");
- return err;
-}
-
-
-#endif /* USE_PLATFORM_MIDI_OUT */
--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_MidiUtils.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_MidiUtils.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,480 +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.
- */
-
-#define USE_ERROR
-#define USE_TRACE
-
-#include "PLATFORM_API_BsdOS_ALSA_MidiUtils.h"
-#include "PLATFORM_API_BsdOS_ALSA_CommonUtils.h"
-#include <string.h>
-#include <sys/time.h>
-
-static INT64 getTimeInMicroseconds() {
- struct timeval tv;
-
- gettimeofday(&tv, NULL);
- return (tv.tv_sec * 1000000UL) + tv.tv_usec;
-}
-
-
-const char* getErrorStr(INT32 err) {
- return snd_strerror((int) err);
-}
-
-
-
-// callback for iteration through devices
-// returns TRUE if iteration should continue
-typedef int (*DeviceIteratorPtr)(UINT32 deviceID,
- snd_rawmidi_info_t* rawmidi_info,
- snd_ctl_card_info_t* cardinfo,
- void *userData);
-
-// for each ALSA device, call iterator. userData is passed to the iterator
-// returns total number of iterations
-static int iterateRawmidiDevices(snd_rawmidi_stream_t direction,
- DeviceIteratorPtr iterator,
- void* userData) {
- int count = 0;
- int subdeviceCount;
- int card, dev, subDev;
- char devname[16];
- int err;
- snd_ctl_t *handle;
- snd_rawmidi_t *rawmidi;
- snd_rawmidi_info_t *rawmidi_info;
- snd_ctl_card_info_t *card_info, *defcardinfo = NULL;
- UINT32 deviceID;
- int doContinue = TRUE;
-
- snd_rawmidi_info_malloc(&rawmidi_info);
- snd_ctl_card_info_malloc(&card_info);
-
- // 1st try "default" device
- if (direction == SND_RAWMIDI_STREAM_INPUT) {
- err = snd_rawmidi_open(&rawmidi, NULL, ALSA_DEFAULT_DEVICE_NAME,
- SND_RAWMIDI_NONBLOCK);
- } else if (direction == SND_RAWMIDI_STREAM_OUTPUT) {
- err = snd_rawmidi_open(NULL, &rawmidi, ALSA_DEFAULT_DEVICE_NAME,
- SND_RAWMIDI_NONBLOCK);
- } else {
- ERROR0("ERROR: iterateRawmidiDevices(): direction is neither"
- " SND_RAWMIDI_STREAM_INPUT nor SND_RAWMIDI_STREAM_OUTPUT\n");
- err = MIDI_INVALID_ARGUMENT;
- }
- if (err < 0) {
- ERROR1("ERROR: snd_rawmidi_open (\"default\"): %s\n",
- snd_strerror(err));
- } else {
- err = snd_rawmidi_info(rawmidi, rawmidi_info);
-
- snd_rawmidi_close(rawmidi);
- if (err < 0) {
- ERROR1("ERROR: snd_rawmidi_info (\"default\"): %s\n",
- snd_strerror(err));
- } else {
- // try to get card info
- card = snd_rawmidi_info_get_card(rawmidi_info);
- if (card >= 0) {
- sprintf(devname, ALSA_HARDWARE_CARD, card);
- if (snd_ctl_open(&handle, devname, SND_CTL_NONBLOCK) >= 0) {
- if (snd_ctl_card_info(handle, card_info) >= 0) {
- defcardinfo = card_info;
- }
- snd_ctl_close(handle);
- }
- }
- // call calback function for the device
- if (iterator != NULL) {
- doContinue = (*iterator)(ALSA_DEFAULT_DEVICE_ID, rawmidi_info,
- defcardinfo, userData);
- }
- count++;
- }
- }
-
- // iterate cards
- card = -1;
- TRACE0("testing for cards...\n");
- if (snd_card_next(&card) >= 0) {
- TRACE1("Found card %d\n", card);
- while (doContinue && (card >= 0)) {
- sprintf(devname, ALSA_HARDWARE_CARD, card);
- TRACE1("Opening control for alsa rawmidi device \"%s\"...\n", devname);
- err = snd_ctl_open(&handle, devname, SND_CTL_NONBLOCK);
- if (err < 0) {
- ERROR2("ERROR: snd_ctl_open, card=%d: %s\n", card, snd_strerror(err));
- } else {
- TRACE0("snd_ctl_open() SUCCESS\n");
- err = snd_ctl_card_info(handle, card_info);
- if (err < 0) {
- ERROR2("ERROR: snd_ctl_card_info, card=%d: %s\n", card, snd_strerror(err));
- } else {
- TRACE0("snd_ctl_card_info() SUCCESS\n");
- dev = -1;
- while (doContinue) {
- if (snd_ctl_rawmidi_next_device(handle, &dev) < 0) {
- ERROR0("snd_ctl_rawmidi_next_device\n");
- }
- TRACE0("snd_ctl_rawmidi_next_device() SUCCESS\n");
- if (dev < 0) {
- break;
- }
- snd_rawmidi_info_set_device(rawmidi_info, dev);
- snd_rawmidi_info_set_subdevice(rawmidi_info, 0);
- snd_rawmidi_info_set_stream(rawmidi_info, direction);
- err = snd_ctl_rawmidi_info(handle, rawmidi_info);
- TRACE0("after snd_ctl_rawmidi_info()\n");
- if (err < 0) {
- if (err != -ENOENT) {
- ERROR2("ERROR: snd_ctl_rawmidi_info, card=%d: %s", card, snd_strerror(err));
- }
- } else {
- TRACE0("snd_ctl_rawmidi_info() SUCCESS\n");
- subdeviceCount = needEnumerateSubdevices(ALSA_RAWMIDI)
- ? snd_rawmidi_info_get_subdevices_count(rawmidi_info)
- : 1;
- if (iterator!=NULL) {
- for (subDev = 0; subDev < subdeviceCount; subDev++) {
- TRACE3(" Iterating %d,%d,%d\n", card, dev, subDev);
- deviceID = encodeDeviceID(card, dev, subDev);
- doContinue = (*iterator)(deviceID, rawmidi_info,
- card_info, userData);
- count++;
- TRACE0("returned from iterator\n");
- if (!doContinue) {
- break;
- }
- }
- } else {
- count += subdeviceCount;
- }
- }
- } // of while(doContinue)
- }
- snd_ctl_close(handle);
- }
- if (snd_card_next(&card) < 0) {
- break;
- }
- }
- } else {
- ERROR0("No cards found!\n");
- }
- snd_ctl_card_info_free(card_info);
- snd_rawmidi_info_free(rawmidi_info);
- return count;
-}
-
-
-
-int getMidiDeviceCount(snd_rawmidi_stream_t direction) {
- int deviceCount;
- TRACE0("> getMidiDeviceCount()\n");
- initAlsaSupport();
- deviceCount = iterateRawmidiDevices(direction, NULL, NULL);
- TRACE0("< getMidiDeviceCount()\n");
- return deviceCount;
-}
-
-
-
-/*
- userData is assumed to be a pointer to ALSA_MIDIDeviceDescription.
- ALSA_MIDIDeviceDescription->index has to be set to the index of the device
- we want to get information of before this method is called the first time via
- iterateRawmidiDevices(). On each call of this method,
- ALSA_MIDIDeviceDescription->index is decremented. If it is equal to zero,
- we have reached the desired device, so action is taken.
- So after successful completion of iterateRawmidiDevices(),
- ALSA_MIDIDeviceDescription->index is zero. If it isn't, this is an
- indication of an error.
-*/
-static int deviceInfoIterator(UINT32 deviceID, snd_rawmidi_info_t *rawmidi_info,
- snd_ctl_card_info_t *cardinfo, void *userData) {
- char buffer[300];
- ALSA_MIDIDeviceDescription* desc = (ALSA_MIDIDeviceDescription*)userData;
-#ifdef ALSA_MIDI_USE_PLUGHW
- int usePlugHw = 1;
-#else
- int usePlugHw = 0;
-#endif
-
- TRACE0("deviceInfoIterator\n");
- initAlsaSupport();
- if (desc->index == 0) {
- // we found the device with correct index
- desc->deviceID = deviceID;
-
- buffer[0]=' '; buffer[1]='[';
- getDeviceStringFromDeviceID(&buffer[2], deviceID, usePlugHw, ALSA_RAWMIDI);
- strcat(buffer, "]");
- strncpy(desc->name,
- (cardinfo != NULL)
- ? snd_ctl_card_info_get_id(cardinfo)
- : snd_rawmidi_info_get_id(rawmidi_info),
- desc->strLen - strlen(buffer));
- strncat(desc->name, buffer, desc->strLen - strlen(desc->name));
- desc->description[0] = 0;
- if (cardinfo != NULL) {
- strncpy(desc->description, snd_ctl_card_info_get_name(cardinfo),
- desc->strLen);
- strncat(desc->description, ", ",
- desc->strLen - strlen(desc->description));
- }
- strncat(desc->description, snd_rawmidi_info_get_id(rawmidi_info),
- desc->strLen - strlen(desc->description));
- strncat(desc->description, ", ", desc->strLen - strlen(desc->description));
- strncat(desc->description, snd_rawmidi_info_get_name(rawmidi_info),
- desc->strLen - strlen(desc->description));
- TRACE2("Returning %s, %s\n", desc->name, desc->description);
- return FALSE; // do not continue iteration
- }
- desc->index--;
- return TRUE;
-}
-
-
-static int getMIDIDeviceDescriptionByIndex(snd_rawmidi_stream_t direction,
- ALSA_MIDIDeviceDescription* desc) {
- initAlsaSupport();
- TRACE1(" getMIDIDeviceDescriptionByIndex (index = %d)\n", desc->index);
- iterateRawmidiDevices(direction, &deviceInfoIterator, desc);
- return (desc->index == 0) ? MIDI_SUCCESS : MIDI_INVALID_DEVICEID;
-}
-
-
-
-int initMIDIDeviceDescription(ALSA_MIDIDeviceDescription* desc, int index) {
- int ret = MIDI_SUCCESS;
- desc->index = index;
- desc->strLen = 200;
- desc->name = (char*) calloc(desc->strLen + 1, 1);
- desc->description = (char*) calloc(desc->strLen + 1, 1);
- if (! desc->name ||
- ! desc->description) {
- ret = MIDI_OUT_OF_MEMORY;
- }
- return ret;
-}
-
-
-void freeMIDIDeviceDescription(ALSA_MIDIDeviceDescription* desc) {
- if (desc->name) {
- free(desc->name);
- }
- if (desc->description) {
- free(desc->description);
- }
-}
-
-
-int getMidiDeviceName(snd_rawmidi_stream_t direction, int index, char *name,
- UINT32 nameLength) {
- ALSA_MIDIDeviceDescription desc;
- int ret;
-
- TRACE1("getMidiDeviceName: nameLength: %d\n", (int) nameLength);
- ret = initMIDIDeviceDescription(&desc, index);
- if (ret == MIDI_SUCCESS) {
- TRACE0("getMidiDeviceName: initMIDIDeviceDescription() SUCCESS\n");
- ret = getMIDIDeviceDescriptionByIndex(direction, &desc);
- if (ret == MIDI_SUCCESS) {
- TRACE1("getMidiDeviceName: desc.name: %s\n", desc.name);
- strncpy(name, desc.name, nameLength - 1);
- name[nameLength - 1] = 0;
- }
- }
- freeMIDIDeviceDescription(&desc);
- return ret;
-}
-
-
-int getMidiDeviceVendor(int index, char *name, UINT32 nameLength) {
- strncpy(name, ALSA_VENDOR, nameLength - 1);
- name[nameLength - 1] = 0;
- return MIDI_SUCCESS;
-}
-
-
-int getMidiDeviceDescription(snd_rawmidi_stream_t direction,
- int index, char *name, UINT32 nameLength) {
- ALSA_MIDIDeviceDescription desc;
- int ret;
-
- ret = initMIDIDeviceDescription(&desc, index);
- if (ret == MIDI_SUCCESS) {
- ret = getMIDIDeviceDescriptionByIndex(direction, &desc);
- if (ret == MIDI_SUCCESS) {
- strncpy(name, desc.description, nameLength - 1);
- name[nameLength - 1] = 0;
- }
- }
- freeMIDIDeviceDescription(&desc);
- return ret;
-}
-
-
-int getMidiDeviceVersion(int index, char *name, UINT32 nameLength) {
- getALSAVersion(name, nameLength);
- return MIDI_SUCCESS;
-}
-
-
-static int getMidiDeviceID(snd_rawmidi_stream_t direction, int index,
- UINT32* deviceID) {
- ALSA_MIDIDeviceDescription desc;
- int ret;
-
- ret = initMIDIDeviceDescription(&desc, index);
- if (ret == MIDI_SUCCESS) {
- ret = getMIDIDeviceDescriptionByIndex(direction, &desc);
- if (ret == MIDI_SUCCESS) {
- // TRACE1("getMidiDeviceName: desc.name: %s\n", desc.name);
- *deviceID = desc.deviceID;
- }
- }
- freeMIDIDeviceDescription(&desc);
- return ret;
-}
-
-
-/*
- direction has to be either SND_RAWMIDI_STREAM_INPUT or
- SND_RAWMIDI_STREAM_OUTPUT.
- Returns 0 on success. Otherwise, MIDI_OUT_OF_MEMORY, MIDI_INVALID_ARGUMENT
- or a negative ALSA error code is returned.
-*/
-INT32 openMidiDevice(snd_rawmidi_stream_t direction, INT32 deviceIndex,
- MidiDeviceHandle** handle) {
- snd_rawmidi_t* native_handle;
- snd_midi_event_t* event_parser = NULL;
- int err;
- UINT32 deviceID;
- char devicename[100];
-#ifdef ALSA_MIDI_USE_PLUGHW
- int usePlugHw = 1;
-#else
- int usePlugHw = 0;
-#endif
-
- TRACE0("> openMidiDevice()\n");
-
- (*handle) = (MidiDeviceHandle*) calloc(sizeof(MidiDeviceHandle), 1);
- if (!(*handle)) {
- ERROR0("ERROR: openDevice: out of memory\n");
- return MIDI_OUT_OF_MEMORY;
- }
-
- // TODO: iterate to get dev ID from index
- err = getMidiDeviceID(direction, deviceIndex, &deviceID);
- TRACE1(" openMidiDevice(): deviceID: %d\n", (int) deviceID);
- getDeviceStringFromDeviceID(devicename, deviceID,
- usePlugHw, ALSA_RAWMIDI);
- TRACE1(" openMidiDevice(): deviceString: %s\n", devicename);
-
- // finally open the device
- if (direction == SND_RAWMIDI_STREAM_INPUT) {
- err = snd_rawmidi_open(&native_handle, NULL, devicename,
- SND_RAWMIDI_NONBLOCK);
- } else if (direction == SND_RAWMIDI_STREAM_OUTPUT) {
- err = snd_rawmidi_open(NULL, &native_handle, devicename,
- SND_RAWMIDI_NONBLOCK);
- } else {
- ERROR0(" ERROR: openMidiDevice(): direction is neither SND_RAWMIDI_STREAM_INPUT nor SND_RAWMIDI_STREAM_OUTPUT\n");
- err = MIDI_INVALID_ARGUMENT;
- }
- if (err < 0) {
- ERROR1("< ERROR: openMidiDevice(): snd_rawmidi_open() returned %d\n", err);
- free(*handle);
- (*handle) = NULL;
- return err;
- }
- /* We opened with non-blocking behaviour to not get hung if the device
- is used by a different process. Writing, however, should
- be blocking. So we change it here. */
- if (direction == SND_RAWMIDI_STREAM_OUTPUT) {
- err = snd_rawmidi_nonblock(native_handle, 0);
- if (err < 0) {
- ERROR1(" ERROR: openMidiDevice(): snd_rawmidi_nonblock() returned %d\n", err);
- snd_rawmidi_close(native_handle);
- free(*handle);
- (*handle) = NULL;
- return err;
- }
- }
- if (direction == SND_RAWMIDI_STREAM_INPUT) {
- err = snd_midi_event_new(EVENT_PARSER_BUFSIZE, &event_parser);
- if (err < 0) {
- ERROR1(" ERROR: openMidiDevice(): snd_midi_event_new() returned %d\n", err);
- snd_rawmidi_close(native_handle);
- free(*handle);
- (*handle) = NULL;
- return err;
- }
- }
-
- (*handle)->deviceHandle = (void*) native_handle;
- (*handle)->startTime = getTimeInMicroseconds();
- (*handle)->platformData = event_parser;
- TRACE0("< openMidiDevice(): succeeded\n");
- return err;
-}
-
-
-
-INT32 closeMidiDevice(MidiDeviceHandle* handle) {
- int err;
-
- TRACE0("> closeMidiDevice()\n");
- if (!handle) {
- ERROR0("< ERROR: closeMidiDevice(): handle is NULL\n");
- return MIDI_INVALID_HANDLE;
- }
- if (!handle->deviceHandle) {
- ERROR0("< ERROR: closeMidiDevice(): native handle is NULL\n");
- return MIDI_INVALID_HANDLE;
- }
- err = snd_rawmidi_close((snd_rawmidi_t*) handle->deviceHandle);
- TRACE1(" snd_rawmidi_close() returns %d\n", err);
- if (handle->platformData) {
- snd_midi_event_free((snd_midi_event_t*) handle->platformData);
- }
- free(handle);
- TRACE0("< closeMidiDevice: succeeded\n");
- return err;
-}
-
-
-INT64 getMidiTimestamp(MidiDeviceHandle* handle) {
- if (!handle) {
- ERROR0("< ERROR: closeMidiDevice(): handle is NULL\n");
- return MIDI_INVALID_HANDLE;
- }
- return getTimeInMicroseconds() - handle->startTime;
-}
-
-
-/* end */
--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_MidiUtils.h 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_MidiUtils.h 1969-12-31 16:00:00.000000000 -0800
@@ -1,85 +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.
- */
-
-#include <alsa/asoundlib.h>
-#include "Utilities.h"
-#include "PlatformMidi.h"
-
-
-#ifndef PLATFORM_API_BSDOS_ALSA_MIDIUTILS_H_INCLUDED
-#define PLATFORM_API_BSDOS_ALSA_MIDIUTILS_H_INCLUDED
-
-#define EVENT_PARSER_BUFSIZE (2048)
-
-// if this is defined, use plughw: devices
-//#define ALSA_MIDI_USE_PLUGHW
-#undef ALSA_MIDI_USE_PLUGHW
-
-typedef struct tag_ALSA_MIDIDeviceDescription {
- int index; // in
- int strLen; // in
- INT32 deviceID; // out
- char* name; // out
- char* description; // out
-} ALSA_MIDIDeviceDescription;
-
-
-const char* getErrorStr(INT32 err);
-
-/* Returns the number of devices. */
-/* direction is either SND_RAWMIDI_STREAM_OUTPUT or
- SND_RAWMIDI_STREAM_INPUT. */
-int getMidiDeviceCount(snd_rawmidi_stream_t direction);
-
-/* Returns MIDI_SUCCESS or MIDI_INVALID_DEVICEID */
-/* direction is either SND_RAWMIDI_STREAM_OUTPUT or
- SND_RAWMIDI_STREAM_INPUT. */
-int getMidiDeviceName(snd_rawmidi_stream_t direction, int index,
- char *name, UINT32 nameLength);
-
-/* Returns MIDI_SUCCESS or MIDI_INVALID_DEVICEID */
-int getMidiDeviceVendor(int index, char *name, UINT32 nameLength);
-
-/* Returns MIDI_SUCCESS or MIDI_INVALID_DEVICEID */
-/* direction is either SND_RAWMIDI_STREAM_OUTPUT or
- SND_RAWMIDI_STREAM_INPUT. */
-int getMidiDeviceDescription(snd_rawmidi_stream_t direction, int index,
- char *name, UINT32 nameLength);
-
-/* Returns MIDI_SUCCESS or MIDI_INVALID_DEVICEID */
-int getMidiDeviceVersion(int index, char *name, UINT32 nameLength);
-
-// returns 0 on success, otherwise MIDI_OUT_OF_MEMORY or ALSA error code
-/* direction is either SND_RAWMIDI_STREAM_OUTPUT or
- SND_RAWMIDI_STREAM_INPUT. */
-INT32 openMidiDevice(snd_rawmidi_stream_t direction, INT32 deviceIndex,
- MidiDeviceHandle** handle);
-
-// returns 0 on success, otherwise a (negative) ALSA error code
-INT32 closeMidiDevice(MidiDeviceHandle* handle);
-
-INT64 getMidiTimestamp(MidiDeviceHandle* handle);
-
-#endif // PLATFORM_API_BSDOS_ALSA_MIDIUTILS_H_INCLUDED
--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_PCM.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_PCM.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,938 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-#define USE_ERROR
-#define USE_TRACE
-
-#include "PLATFORM_API_BsdOS_ALSA_PCMUtils.h"
-#include "PLATFORM_API_BsdOS_ALSA_CommonUtils.h"
-#include "DirectAudio.h"
-
-#if USE_DAUDIO == TRUE
-
-// GetPosition method 1: based on how many bytes are passed to the kernel driver
-// + does not need much processor resources
-// - not very exact, "jumps"
-// GetPosition method 2: ask kernel about actual position of playback.
-// - very exact
-// - switch to kernel layer for each call
-// GetPosition method 3: use snd_pcm_avail() call - not yet in official ALSA
-// quick tests on a Pentium 200MMX showed max. 1.5% processor usage
-// for playing back a CD-quality file and printing 20x per second a line
-// on the console with the current time. So I guess performance is not such a
-// factor here.
-//#define GET_POSITION_METHOD1
-#define GET_POSITION_METHOD2
-
-
-// The default time for a period in microseconds.
-// For very small buffers, only 2 periods are used.
-#define DEFAULT_PERIOD_TIME 20000 /* 20ms */
-
-///// implemented functions of DirectAudio.h
-
-INT32 DAUDIO_GetDirectAudioDeviceCount() {
- return (INT32) getAudioDeviceCount();
-}
-
-
-INT32 DAUDIO_GetDirectAudioDeviceDescription(INT32 mixerIndex, DirectAudioDeviceDescription* description) {
- ALSA_AudioDeviceDescription adesc;
-
- adesc.index = (int) mixerIndex;
- adesc.strLen = DAUDIO_STRING_LENGTH;
-
- adesc.maxSimultaneousLines = (int*) (&(description->maxSimulLines));
- adesc.deviceID = &(description->deviceID);
- adesc.name = description->name;
- adesc.vendor = description->vendor;
- adesc.description = description->description;
- adesc.version = description->version;
-
- return getAudioDeviceDescriptionByIndex(&adesc);
-}
-
-#define MAX_BIT_INDEX 6
-// returns
-// 6: for anything above 24-bit
-// 5: for 4 bytes sample size, 24-bit
-// 4: for 3 bytes sample size, 24-bit
-// 3: for 3 bytes sample size, 20-bit
-// 2: for 2 bytes sample size, 16-bit
-// 1: for 1 byte sample size, 8-bit
-// 0: for anything else
-int getBitIndex(int sampleSizeInBytes, int significantBits) {
- if (significantBits > 24) return 6;
- if (sampleSizeInBytes == 4 && significantBits == 24) return 5;
- if (sampleSizeInBytes == 3) {
- if (significantBits == 24) return 4;
- if (significantBits == 20) return 3;
- }
- if (sampleSizeInBytes == 2 && significantBits == 16) return 2;
- if (sampleSizeInBytes == 1 && significantBits == 8) return 1;
- return 0;
-}
-
-int getSampleSizeInBytes(int bitIndex, int sampleSizeInBytes) {
- switch(bitIndex) {
- case 1: return 1;
- case 2: return 2;
- case 3: /* fall through */
- case 4: return 3;
- case 5: return 4;
- }
- return sampleSizeInBytes;
-}
-
-int getSignificantBits(int bitIndex, int significantBits) {
- switch(bitIndex) {
- case 1: return 8;
- case 2: return 16;
- case 3: return 20;
- case 4: /* fall through */
- case 5: return 24;
- }
- return significantBits;
-}
-
-void DAUDIO_GetFormats(INT32 mixerIndex, INT32 deviceID, int isSource, void* creator) {
- snd_pcm_t* handle;
- snd_pcm_format_mask_t* formatMask;
- snd_pcm_format_t format;
- snd_pcm_hw_params_t* hwParams;
- int handledBits[MAX_BIT_INDEX+1];
-
- int ret;
- int sampleSizeInBytes, significantBits, isSigned, isBigEndian, enc;
- int origSampleSizeInBytes, origSignificantBits;
- int channels, minChannels, maxChannels;
- int rate, bitIndex;
-
- for (bitIndex = 0; bitIndex <= MAX_BIT_INDEX; bitIndex++) handledBits[bitIndex] = FALSE;
- if (openPCMfromDeviceID(deviceID, &handle, isSource, TRUE /*query hardware*/) < 0) {
- return;
- }
- ret = snd_pcm_format_mask_malloc(&formatMask);
- if (ret != 0) {
- ERROR1("snd_pcm_format_mask_malloc returned error %d\n", ret);
- } else {
- ret = snd_pcm_hw_params_malloc(&hwParams);
- if (ret != 0) {
- ERROR1("snd_pcm_hw_params_malloc returned error %d\n", ret);
- } else {
- ret = snd_pcm_hw_params_any(handle, hwParams);
- /* snd_pcm_hw_params_any can return a positive value on success too */
- if (ret < 0) {
- ERROR1("snd_pcm_hw_params_any returned error %d\n", ret);
- } else {
- /* for the logic following this code, set ret to 0 to indicate success */
- ret = 0;
- }
- }
- snd_pcm_hw_params_get_format_mask(hwParams, formatMask);
-#ifdef ALSA_PCM_NEW_HW_PARAMS_API
- if (ret == 0) {
- ret = snd_pcm_hw_params_get_channels_min(hwParams, &minChannels);
- if (ret != 0) {
- ERROR1("snd_pcm_hw_params_get_channels_min returned error %d\n", ret);
- }
- }
- if (ret == 0) {
- ret = snd_pcm_hw_params_get_channels_max(hwParams, &maxChannels);
- if (ret != 0) {
- ERROR1("snd_pcm_hw_params_get_channels_max returned error %d\n", ret);
- }
- }
-#else
- minChannels = snd_pcm_hw_params_get_channels_min(hwParams);
- maxChannels = snd_pcm_hw_params_get_channels_max(hwParams);
- if (minChannels > maxChannels) {
- ERROR2("MinChannels=%d, maxChannels=%d\n", minChannels, maxChannels);
- }
-#endif
-
- // since we queried the hw: device, for many soundcards, it will only
- // report the maximum number of channels (which is the only way to talk
- // to the hw: device). Since we will, however, open the plughw: device
- // when opening the Source/TargetDataLine, we can safely assume that
- // also the channels 1..maxChannels are available.
-#ifdef ALSA_PCM_USE_PLUGHW
- minChannels = 1;
-#endif
- if (ret == 0) {
- // plughw: supports any sample rate
- rate = -1;
- for (format = 0; format <= SND_PCM_FORMAT_LAST; format++) {
- if (snd_pcm_format_mask_test(formatMask, format)) {
- // format exists
- if (getFormatFromAlsaFormat(format, &origSampleSizeInBytes,
- &origSignificantBits,
- &isSigned, &isBigEndian, &enc)) {
- // now if we use plughw:, we can use any bit size below the
- // natively supported ones. Some ALSA drivers only support the maximum
- // bit size, so we add any sample rates below the reported one.
- // E.g. this iteration reports support for 16-bit.
- // getBitIndex will return 2, so it will add entries for
- // 16-bit (bitIndex=2) and in the next do-while loop iteration,
- // it will decrease bitIndex and will therefore add 8-bit support.
- bitIndex = getBitIndex(origSampleSizeInBytes, origSignificantBits);
- do {
- if (bitIndex == 0
- || bitIndex == MAX_BIT_INDEX
- || !handledBits[bitIndex]) {
- handledBits[bitIndex] = TRUE;
- sampleSizeInBytes = getSampleSizeInBytes(bitIndex, origSampleSizeInBytes);
- significantBits = getSignificantBits(bitIndex, origSignificantBits);
- if (maxChannels - minChannels > MAXIMUM_LISTED_CHANNELS) {
- // avoid too many channels explicitly listed
- // just add -1, min, and max
- DAUDIO_AddAudioFormat(creator, significantBits,
- -1, -1, rate,
- enc, isSigned, isBigEndian);
- DAUDIO_AddAudioFormat(creator, significantBits,
- sampleSizeInBytes * minChannels,
- minChannels, rate,
- enc, isSigned, isBigEndian);
- DAUDIO_AddAudioFormat(creator, significantBits,
- sampleSizeInBytes * maxChannels,
- maxChannels, rate,
- enc, isSigned, isBigEndian);
- } else {
- for (channels = minChannels; channels <= maxChannels; channels++) {
- DAUDIO_AddAudioFormat(creator, significantBits,
- (channels < 0)?-1:(sampleSizeInBytes * channels),
- channels, rate,
- enc, isSigned, isBigEndian);
- }
- }
- }
-#ifndef ALSA_PCM_USE_PLUGHW
- // without plugin, do not add fake formats
- break;
-#endif
- } while (--bitIndex > 0);
- } else {
- TRACE1("could not get format from alsa for format %d\n", format);
- }
- } else {
- //TRACE1("Format %d not supported\n", format);
- }
- } // for loop
- snd_pcm_hw_params_free(hwParams);
- }
- snd_pcm_format_mask_free(formatMask);
- }
- snd_pcm_close(handle);
-}
-
-/* ******* ALSA PCM INFO ******************** */
-typedef struct tag_AlsaPcmInfo {
- snd_pcm_t* handle;
- snd_pcm_hw_params_t* hwParams;
- snd_pcm_sw_params_t* swParams;
- int bufferSizeInBytes;
- int frameSize; // storage size in Bytes
- int periods;
- snd_pcm_uframes_t periodSize;
-#ifdef GET_POSITION_METHOD2
- // to be used exclusively by getBytePosition!
- snd_pcm_status_t* positionStatus;
-#endif
-} AlsaPcmInfo;
-
-
-int setStartThresholdNoCommit(AlsaPcmInfo* info, int useThreshold) {
- int ret;
- int threshold;
-
- if (useThreshold) {
- // start device whenever anything is written to the buffer
- threshold = 1;
- } else {
- // never start the device automatically
- threshold = 2000000000; /* near UINT_MAX */
- }
- ret = snd_pcm_sw_params_set_start_threshold(info->handle, info->swParams, threshold);
- if (ret < 0) {
- ERROR1("Unable to set start threshold mode: %s\n", snd_strerror(ret));
- return FALSE;
- }
- return TRUE;
-}
-
-int setStartThreshold(AlsaPcmInfo* info, int useThreshold) {
- int ret = 0;
-
- if (!setStartThresholdNoCommit(info, useThreshold)) {
- ret = -1;
- }
- if (ret == 0) {
- // commit it
- ret = snd_pcm_sw_params(info->handle, info->swParams);
- if (ret < 0) {
- ERROR1("Unable to set sw params: %s\n", snd_strerror(ret));
- }
- }
- return (ret == 0)?TRUE:FALSE;
-}
-
-
-// returns TRUE if successful
-int setHWParams(AlsaPcmInfo* info,
- float sampleRate,
- int channels,
- int bufferSizeInFrames,
- snd_pcm_format_t format) {
- unsigned int rrate;
- int ret, dir, periods, periodTime;
- snd_pcm_uframes_t alsaBufferSizeInFrames = (snd_pcm_uframes_t) bufferSizeInFrames;
-
- /* choose all parameters */
- ret = snd_pcm_hw_params_any(info->handle, info->hwParams);
- if (ret < 0) {
- ERROR1("Broken configuration: no configurations available: %s\n", snd_strerror(ret));
- return FALSE;
- }
- /* set the interleaved read/write format */
- ret = snd_pcm_hw_params_set_access(info->handle, info->hwParams, SND_PCM_ACCESS_RW_INTERLEAVED);
- if (ret < 0) {
- ERROR1("SND_PCM_ACCESS_RW_INTERLEAVED access type not available: %s\n", snd_strerror(ret));
- return FALSE;
- }
- /* set the sample format */
- ret = snd_pcm_hw_params_set_format(info->handle, info->hwParams, format);
- if (ret < 0) {
- ERROR1("Sample format not available: %s\n", snd_strerror(ret));
- return FALSE;
- }
- /* set the count of channels */
- ret = snd_pcm_hw_params_set_channels(info->handle, info->hwParams, channels);
- if (ret < 0) {
- ERROR2("Channels count (%d) not available: %s\n", channels, snd_strerror(ret));
- return FALSE;
- }
- /* set the stream rate */
- rrate = (int) (sampleRate + 0.5f);
-#ifdef ALSA_PCM_NEW_HW_PARAMS_API
- dir = 0;
- ret = snd_pcm_hw_params_set_rate_near(info->handle, info->hwParams, &rrate, &dir);
-#else
- ret = snd_pcm_hw_params_set_rate_near(info->handle, info->hwParams, rrate, 0);
-#endif
- if (ret < 0) {
- ERROR2("Rate %dHz not available for playback: %s\n", (int) (sampleRate+0.5f), snd_strerror(ret));
- return FALSE;
- }
- if ((rrate-sampleRate > 2) || (rrate-sampleRate < - 2)) {
- ERROR2("Rate doesn't match (requested %2.2fHz, got %dHz)\n", sampleRate, rrate);
- return FALSE;
- }
- /* set the buffer time */
-#ifdef ALSA_PCM_NEW_HW_PARAMS_API
-
- ret = snd_pcm_hw_params_set_buffer_size_near(info->handle, info->hwParams, &alsaBufferSizeInFrames);
-#else
- ret = snd_pcm_hw_params_set_buffer_size_near(info->handle, info->hwParams, alsaBufferSizeInFrames);
-#endif
- if (ret < 0) {
- ERROR2("Unable to set buffer size to %d frames: %s\n",
- (int) alsaBufferSizeInFrames, snd_strerror(ret));
- return FALSE;
- }
- bufferSizeInFrames = (int) alsaBufferSizeInFrames;
- /* set the period time */
- if (bufferSizeInFrames > 1024) {
- dir = 0;
- periodTime = DEFAULT_PERIOD_TIME;
-#ifdef ALSA_PCM_NEW_HW_PARAMS_API
- ret = snd_pcm_hw_params_set_period_time_near(info->handle, info->hwParams, &periodTime, &dir);
-#else
- periodTime = snd_pcm_hw_params_set_period_time_near(info->handle, info->hwParams, periodTime, &dir);
- ret = periodTime;
-#endif
- if (ret < 0) {
- ERROR2("Unable to set period time to %d: %s\n", DEFAULT_PERIOD_TIME, snd_strerror(ret));
- return FALSE;
- }
- } else {
- /* set the period count for very small buffer sizes to 2 */
- dir = 0;
- periods = 2;
-#ifdef ALSA_PCM_NEW_HW_PARAMS_API
- ret = snd_pcm_hw_params_set_periods_near(info->handle, info->hwParams, &periods, &dir);
-#else
- periods = snd_pcm_hw_params_set_periods_near(info->handle, info->hwParams, periods, &dir);
- ret = periods;
-#endif
- if (ret < 0) {
- ERROR2("Unable to set period count to %d: %s\n", /*periods*/ 2, snd_strerror(ret));
- return FALSE;
- }
- }
- /* write the parameters to device */
- ret = snd_pcm_hw_params(info->handle, info->hwParams);
- if (ret < 0) {
- ERROR1("Unable to set hw params: %s\n", snd_strerror(ret));
- return FALSE;
- }
- return TRUE;
-}
-
-// returns 1 if successful
-int setSWParams(AlsaPcmInfo* info) {
- int ret;
-
- /* get the current swparams */
- ret = snd_pcm_sw_params_current(info->handle, info->swParams);
- if (ret < 0) {
- ERROR1("Unable to determine current swparams: %s\n", snd_strerror(ret));
- return FALSE;
- }
- /* never start the transfer automatically */
- if (!setStartThresholdNoCommit(info, FALSE /* don't use threshold */)) {
- return FALSE;
- }
-
- /* allow the transfer when at least period_size samples can be processed */
- ret = snd_pcm_sw_params_set_avail_min(info->handle, info->swParams, info->periodSize);
- if (ret < 0) {
- ERROR1("Unable to set avail min for playback: %s\n", snd_strerror(ret));
- return FALSE;
- }
- /* align all transfers to 1 sample */
- ret = snd_pcm_sw_params_set_xfer_align(info->handle, info->swParams, 1);
- if (ret < 0) {
- ERROR1("Unable to set transfer align: %s\n", snd_strerror(ret));
- return FALSE;
- }
- /* write the parameters to the playback device */
- ret = snd_pcm_sw_params(info->handle, info->swParams);
- if (ret < 0) {
- ERROR1("Unable to set sw params: %s\n", snd_strerror(ret));
- return FALSE;
- }
- return TRUE;
-}
-
-static snd_output_t* ALSA_OUTPUT = NULL;
-
-void* DAUDIO_Open(INT32 mixerIndex, INT32 deviceID, int isSource,
- int encoding, float sampleRate, int sampleSizeInBits,
- int frameSize, int channels,
- int isSigned, int isBigEndian, int bufferSizeInBytes) {
- snd_pcm_format_mask_t* formatMask;
- snd_pcm_format_t format;
- int dir;
- int ret = 0;
- AlsaPcmInfo* info = NULL;
- /* snd_pcm_uframes_t is 64 bit on 64-bit systems */
- snd_pcm_uframes_t alsaPeriodSize = 0;
- snd_pcm_uframes_t alsaBufferSizeInFrames = 0;
-
-
- TRACE0("> DAUDIO_Open\n");
-#ifdef USE_TRACE
- // for using ALSA debug dump methods
- if (ALSA_OUTPUT == NULL) {
- snd_output_stdio_attach(&ALSA_OUTPUT, stdout, 0);
- }
-#endif
-
- info = (AlsaPcmInfo*) malloc(sizeof(AlsaPcmInfo));
- if (!info) {
- ERROR0("Out of memory\n");
- return NULL;
- }
- memset(info, 0, sizeof(AlsaPcmInfo));
-
- ret = openPCMfromDeviceID(deviceID, &(info->handle), isSource, FALSE /* do open device*/);
- if (ret == 0) {
- // set to blocking mode
- snd_pcm_nonblock(info->handle, 0);
- ret = snd_pcm_hw_params_malloc(&(info->hwParams));
- if (ret != 0) {
- ERROR1(" snd_pcm_hw_params_malloc returned error %d\n", ret);
- } else {
- ret = -1;
- if (getAlsaFormatFromFormat(&format, frameSize / channels, sampleSizeInBits,
- isSigned, isBigEndian, encoding)) {
- if (setHWParams(info,
- sampleRate,
- channels,
- bufferSizeInBytes / frameSize,
- format)) {
- info->frameSize = frameSize;
-#ifdef ALSA_PCM_NEW_HW_PARAMS_API
- ret = snd_pcm_hw_params_get_period_size(info->hwParams, &alsaPeriodSize, &dir);
- info->periodSize = (int) alsaPeriodSize;
- if (ret < 0) {
- ERROR1("ERROR: snd_pcm_hw_params_get_period: %s\n", snd_strerror(ret));
- }
- snd_pcm_hw_params_get_periods(info->hwParams, &(info->periods), &dir);
- snd_pcm_hw_params_get_buffer_size(info->hwParams, &alsaBufferSizeInFrames);
- info->bufferSizeInBytes = (int) alsaBufferSizeInFrames * frameSize;
-#else
- info->periodSize = snd_pcm_hw_params_get_period_size(info->hwParams, &dir);
- info->periods = snd_pcm_hw_params_get_periods(info->hwParams, &dir);
- info->bufferSizeInBytes = snd_pcm_hw_params_get_buffer_size(info->hwParams) * frameSize;
- ret = 0;
-#endif
- TRACE3(" DAUDIO_Open: period size = %d frames, periods = %d. Buffer size: %d bytes.\n",
- (int) info->periodSize, info->periods, info->bufferSizeInBytes);
- }
- }
- }
- if (ret == 0) {
- // set software parameters
- ret = snd_pcm_sw_params_malloc(&(info->swParams));
- if (ret != 0) {
- ERROR1("snd_pcm_hw_params_malloc returned error %d\n", ret);
- } else {
- if (!setSWParams(info)) {
- ret = -1;
- }
- }
- }
- if (ret == 0) {
- // prepare device
- ret = snd_pcm_prepare(info->handle);
- if (ret < 0) {
- ERROR1("ERROR: snd_pcm_prepare: %s\n", snd_strerror(ret));
- }
- }
-
-#ifdef GET_POSITION_METHOD2
- if (ret == 0) {
- ret = snd_pcm_status_malloc(&(info->positionStatus));
- if (ret != 0) {
- ERROR1("ERROR in snd_pcm_status_malloc: %s\n", snd_strerror(ret));
- }
- }
-#endif
- }
- if (ret != 0) {
- DAUDIO_Close((void*) info, isSource);
- info = NULL;
- } else {
- // set to non-blocking mode
- snd_pcm_nonblock(info->handle, 1);
- TRACE1("< DAUDIO_Open: Opened device successfully. Handle=%p\n",
- (void*) info->handle);
- }
- return (void*) info;
-}
-
-#ifdef USE_TRACE
-void printState(snd_pcm_state_t state) {
- if (state == SND_PCM_STATE_OPEN) {
- TRACE0("State: SND_PCM_STATE_OPEN\n");
- }
- else if (state == SND_PCM_STATE_SETUP) {
- TRACE0("State: SND_PCM_STATE_SETUP\n");
- }
- else if (state == SND_PCM_STATE_PREPARED) {
- TRACE0("State: SND_PCM_STATE_PREPARED\n");
- }
- else if (state == SND_PCM_STATE_RUNNING) {
- TRACE0("State: SND_PCM_STATE_RUNNING\n");
- }
- else if (state == SND_PCM_STATE_XRUN) {
- TRACE0("State: SND_PCM_STATE_XRUN\n");
- }
- else if (state == SND_PCM_STATE_DRAINING) {
- TRACE0("State: SND_PCM_STATE_DRAINING\n");
- }
- else if (state == SND_PCM_STATE_PAUSED) {
- TRACE0("State: SND_PCM_STATE_PAUSED\n");
- }
- else if (state == SND_PCM_STATE_SUSPENDED) {
- TRACE0("State: SND_PCM_STATE_SUSPENDED\n");
- }
-}
-#endif
-
-int DAUDIO_Start(void* id, int isSource) {
- AlsaPcmInfo* info = (AlsaPcmInfo*) id;
- int ret;
- snd_pcm_state_t state;
-
- TRACE0("> DAUDIO_Start\n");
- // set to blocking mode
- snd_pcm_nonblock(info->handle, 0);
- // set start mode so that it always starts as soon as data is there
- setStartThreshold(info, TRUE /* use threshold */);
- state = snd_pcm_state(info->handle);
- if (state == SND_PCM_STATE_PAUSED) {
- // in case it was stopped previously
- TRACE0(" Un-pausing...\n");
- ret = snd_pcm_pause(info->handle, FALSE);
- if (ret != 0) {
- ERROR2(" NOTE: error in snd_pcm_pause:%d: %s\n", ret, snd_strerror(ret));
- }
- }
- if (state == SND_PCM_STATE_SUSPENDED) {
- TRACE0(" Resuming...\n");
- ret = snd_pcm_resume(info->handle);
- if (ret < 0) {
- if ((ret != -EAGAIN) && (ret != -ENOSYS)) {
- ERROR2(" ERROR: error in snd_pcm_resume:%d: %s\n", ret, snd_strerror(ret));
- }
- }
- }
- if (state == SND_PCM_STATE_SETUP) {
- TRACE0("need to call prepare again...\n");
- // prepare device
- ret = snd_pcm_prepare(info->handle);
- if (ret < 0) {
- ERROR1("ERROR: snd_pcm_prepare: %s\n", snd_strerror(ret));
- }
- }
- // in case there is still data in the buffers
- ret = snd_pcm_start(info->handle);
- if (ret != 0) {
- if (ret != -EPIPE) {
- ERROR2(" NOTE: error in snd_pcm_start: %d: %s\n", ret, snd_strerror(ret));
- }
- }
- // set to non-blocking mode
- ret = snd_pcm_nonblock(info->handle, 1);
- if (ret != 0) {
- ERROR1(" ERROR in snd_pcm_nonblock: %s\n", snd_strerror(ret));
- }
- state = snd_pcm_state(info->handle);
-#ifdef USE_TRACE
- printState(state);
-#endif
- ret = (state == SND_PCM_STATE_PREPARED)
- || (state == SND_PCM_STATE_RUNNING)
- || (state == SND_PCM_STATE_XRUN)
- || (state == SND_PCM_STATE_SUSPENDED);
- TRACE1("< DAUDIO_Start %s\n", ret?"success":"error");
- return ret?TRUE:FALSE;
-}
-
-int DAUDIO_Stop(void* id, int isSource) {
- AlsaPcmInfo* info = (AlsaPcmInfo*) id;
- int ret;
-
- TRACE0("> DAUDIO_Stop\n");
- // set to blocking mode
- snd_pcm_nonblock(info->handle, 0);
- setStartThreshold(info, FALSE /* don't use threshold */); // device will not start after buffer xrun
- ret = snd_pcm_pause(info->handle, 1);
- // set to non-blocking mode
- snd_pcm_nonblock(info->handle, 1);
- if (ret != 0) {
- ERROR1("ERROR in snd_pcm_pause: %s\n", snd_strerror(ret));
- return FALSE;
- }
- TRACE0("< DAUDIO_Stop success\n");
- return TRUE;
-}
-
-void DAUDIO_Close(void* id, int isSource) {
- AlsaPcmInfo* info = (AlsaPcmInfo*) id;
-
- TRACE0("DAUDIO_Close\n");
- if (info != NULL) {
- if (info->handle != NULL) {
- snd_pcm_close(info->handle);
- }
- if (info->hwParams) {
- snd_pcm_hw_params_free(info->hwParams);
- }
- if (info->swParams) {
- snd_pcm_sw_params_free(info->swParams);
- }
-#ifdef GET_POSITION_METHOD2
- if (info->positionStatus) {
- snd_pcm_status_free(info->positionStatus);
- }
-#endif
- free(info);
- }
-}
-
-/*
- * Underrun and suspend recovery
- * returns
- * 0: exit native and return 0
- * 1: try again to write/read
- * -1: error - exit native with return value -1
- */
-int xrun_recovery(AlsaPcmInfo* info, int err) {
- int ret;
-
- if (err == -EPIPE) { /* underrun / overflow */
- TRACE0("xrun_recovery: underrun/overflow.\n");
- ret = snd_pcm_prepare(info->handle);
- if (ret < 0) {
- ERROR1("Can't recover from underrun/overflow, prepare failed: %s\n", snd_strerror(ret));
- return -1;
- }
- return 1;
- }
- else if (err == -ESTRPIPE) {
- TRACE0("xrun_recovery: suspended.\n");
- ret = snd_pcm_resume(info->handle);
- if (ret < 0) {
- if (ret == -EAGAIN) {
- return 0; /* wait until the suspend flag is released */
- }
- return -1;
- }
- ret = snd_pcm_prepare(info->handle);
- if (ret < 0) {
- ERROR1("Can't recover from underrun/overflow, prepare failed: %s\n", snd_strerror(ret));
- return -1;
- }
- return 1;
- }
- else if (err == -EAGAIN) {
- TRACE0("xrun_recovery: EAGAIN try again flag.\n");
- return 0;
- }
- TRACE2("xrun_recovery: unexpected error %d: %s\n", err, snd_strerror(err));
- return -1;
-}
-
-// returns -1 on error
-int DAUDIO_Write(void* id, char* data, int byteSize) {
- AlsaPcmInfo* info = (AlsaPcmInfo*) id;
- int ret, count;
- snd_pcm_sframes_t frameSize, writtenFrames;
-
- TRACE1("> DAUDIO_Write %d bytes\n", byteSize);
-
- /* sanity */
- if (byteSize <= 0 || info->frameSize <= 0) {
- ERROR2(" DAUDIO_Write: byteSize=%d, frameSize=%d!\n",
- (int) byteSize, (int) info->frameSize);
- TRACE0("< DAUDIO_Write returning -1\n");
- return -1;
- }
- count = 2; // maximum number of trials to recover from underrun
- //frameSize = snd_pcm_bytes_to_frames(info->handle, byteSize);
- frameSize = (snd_pcm_sframes_t) (byteSize / info->frameSize);
- do {
- writtenFrames = snd_pcm_writei(info->handle, (const void*) data, (snd_pcm_uframes_t) frameSize);
-
- if (writtenFrames < 0) {
- ret = xrun_recovery(info, (int) writtenFrames);
- if (ret <= 0) {
- TRACE1("DAUDIO_Write: xrun recovery returned %d -> return.\n", ret);
- return ret;
- }
- if (count-- <= 0) {
- ERROR0("DAUDIO_Write: too many attempts to recover from xrun/suspend\n");
- return -1;
- }
- } else {
- break;
- }
- } while (TRUE);
- //ret = snd_pcm_frames_to_bytes(info->handle, writtenFrames);
- ret = (int) (writtenFrames * info->frameSize);
- TRACE1("< DAUDIO_Write: returning %d bytes.\n", ret);
- return ret;
-}
-
-// returns -1 on error
-int DAUDIO_Read(void* id, char* data, int byteSize) {
- AlsaPcmInfo* info = (AlsaPcmInfo*) id;
- int ret, count;
- snd_pcm_sframes_t frameSize, readFrames;
-
- TRACE1("> DAUDIO_Read %d bytes\n", byteSize);
- /*TRACE3(" info=%p, data=%p, byteSize=%d\n",
- (void*) info, (void*) data, (int) byteSize);
- TRACE2(" info->frameSize=%d, info->handle=%p\n",
- (int) info->frameSize, (void*) info->handle);
- */
- /* sanity */
- if (byteSize <= 0 || info->frameSize <= 0) {
- ERROR2(" DAUDIO_Read: byteSize=%d, frameSize=%d!\n",
- (int) byteSize, (int) info->frameSize);
- TRACE0("< DAUDIO_Read returning -1\n");
- return -1;
- }
- count = 2; // maximum number of trials to recover from error
- //frameSize = snd_pcm_bytes_to_frames(info->handle, byteSize);
- frameSize = (snd_pcm_sframes_t) (byteSize / info->frameSize);
- do {
- readFrames = snd_pcm_readi(info->handle, (void*) data, (snd_pcm_uframes_t) frameSize);
- if (readFrames < 0) {
- ret = xrun_recovery(info, (int) readFrames);
- if (ret <= 0) {
- TRACE1("DAUDIO_Read: xrun recovery returned %d -> return.\n", ret);
- return ret;
- }
- if (count-- <= 0) {
- ERROR0("DAUDIO_Read: too many attempts to recover from xrun/suspend\n");
- return -1;
- }
- } else {
- break;
- }
- } while (TRUE);
- //ret = snd_pcm_frames_to_bytes(info->handle, readFrames);
- ret = (int) (readFrames * info->frameSize);
- TRACE1("< DAUDIO_Read: returning %d bytes.\n", ret);
- return ret;
-}
-
-
-int DAUDIO_GetBufferSize(void* id, int isSource) {
- AlsaPcmInfo* info = (AlsaPcmInfo*) id;
-
- return info->bufferSizeInBytes;
-}
-
-int DAUDIO_StillDraining(void* id, int isSource) {
- AlsaPcmInfo* info = (AlsaPcmInfo*) id;
- snd_pcm_state_t state;
-
- state = snd_pcm_state(info->handle);
- //printState(state);
- //TRACE1("Still draining: %s\n", (state != SND_PCM_STATE_XRUN)?"TRUE":"FALSE");
- return (state == SND_PCM_STATE_RUNNING)?TRUE:FALSE;
-}
-
-
-int DAUDIO_Flush(void* id, int isSource) {
- AlsaPcmInfo* info = (AlsaPcmInfo*) id;
- int ret;
-
- TRACE0("DAUDIO_Flush\n");
- ret = snd_pcm_drop(info->handle);
- if (ret != 0) {
- ERROR1("ERROR in snd_pcm_drop: %s\n", snd_strerror(ret));
- return FALSE;
- }
- ret = DAUDIO_Start(id, isSource);
- return ret;
-}
-
-int DAUDIO_GetAvailable(void* id, int isSource) {
- AlsaPcmInfo* info = (AlsaPcmInfo*) id;
- snd_pcm_sframes_t availableInFrames;
- snd_pcm_state_t state;
- int ret;
-
- state = snd_pcm_state(info->handle);
- if (state == SND_PCM_STATE_XRUN) {
- // if in xrun state then we have the entire buffer available,
- // not 0 as alsa reports
- ret = info->bufferSizeInBytes;
- } else {
- availableInFrames = snd_pcm_avail_update(info->handle);
- if (availableInFrames < 0) {
- ret = 0;
- } else {
- //ret = snd_pcm_frames_to_bytes(info->handle, availableInFrames);
- ret = (int) (availableInFrames * info->frameSize);
- }
- }
- TRACE1("DAUDIO_GetAvailable returns %d bytes\n", ret);
- return ret;
-}
-
-INT64 estimatePositionFromAvail(AlsaPcmInfo* info, int isSource, INT64 javaBytePos, int availInBytes) {
- // estimate the current position with the buffer size and
- // the available bytes to read or write in the buffer.
- // not an elegant solution - bytePos will stop on xruns,
- // and in race conditions it may jump backwards
- // Advantage is that it is indeed based on the samples that go through
- // the system (rather than time-based methods)
- if (isSource) {
- // javaBytePos is the position that is reached when the current
- // buffer is played completely
- return (INT64) (javaBytePos - info->bufferSizeInBytes + availInBytes);
- } else {
- // javaBytePos is the position that was when the current buffer was empty
- return (INT64) (javaBytePos + availInBytes);
- }
-}
-
-INT64 DAUDIO_GetBytePosition(void* id, int isSource, INT64 javaBytePos) {
- AlsaPcmInfo* info = (AlsaPcmInfo*) id;
- int ret;
- INT64 result = javaBytePos;
- snd_pcm_state_t state;
- state = snd_pcm_state(info->handle);
-
- if (state != SND_PCM_STATE_XRUN) {
-#ifdef GET_POSITION_METHOD2
- snd_timestamp_t* ts;
- snd_pcm_uframes_t framesAvail;
-
- // note: slight race condition if this is called simultaneously from 2 threads
- ret = snd_pcm_status(info->handle, info->positionStatus);
- if (ret != 0) {
- ERROR1("ERROR in snd_pcm_status: %s\n", snd_strerror(ret));
- result = javaBytePos;
- } else {
- // calculate from time value, or from available bytes
- framesAvail = snd_pcm_status_get_avail(info->positionStatus);
- result = estimatePositionFromAvail(info, isSource, javaBytePos, framesAvail * info->frameSize);
- }
-#endif
-#ifdef GET_POSITION_METHOD3
- snd_pcm_uframes_t framesAvail;
- ret = snd_pcm_avail(info->handle, &framesAvail);
- if (ret != 0) {
- ERROR1("ERROR in snd_pcm_avail: %s\n", snd_strerror(ret));
- result = javaBytePos;
- } else {
- result = estimatePositionFromAvail(info, isSource, javaBytePos, framesAvail * info->frameSize);
- }
-#endif
-#ifdef GET_POSITION_METHOD1
- result = estimatePositionFromAvail(info, isSource, javaBytePos, DAUDIO_GetAvailable(id, isSource));
-#endif
- }
- //printf("getbyteposition: javaBytePos=%d , return=%d\n", (int) javaBytePos, (int) result);
- return result;
-}
-
-
-
-void DAUDIO_SetBytePosition(void* id, int isSource, INT64 javaBytePos) {
- /* save to ignore, since GetBytePosition
- * takes the javaBytePos param into account
- */
-}
-
-int DAUDIO_RequiresServicing(void* id, int isSource) {
- // never need servicing on Bsd
- return FALSE;
-}
-
-void DAUDIO_Service(void* id, int isSource) {
- // never need servicing on Bsd
-}
-
-
-#endif // USE_DAUDIO
--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_PCMUtils.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_PCMUtils.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,291 +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.
- */
-
-//#define USE_ERROR
-//#define USE_TRACE
-
-#include "PLATFORM_API_BsdOS_ALSA_PCMUtils.h"
-#include "PLATFORM_API_BsdOS_ALSA_CommonUtils.h"
-
-
-
-// callback for iteration through devices
-// returns TRUE if iteration should continue
-// NOTE: cardinfo may be NULL (for "default" device)
-typedef int (*DeviceIteratorPtr)(UINT32 deviceID, snd_pcm_info_t* pcminfo,
- snd_ctl_card_info_t* cardinfo, void *userData);
-
-// for each ALSA device, call iterator. userData is passed to the iterator
-// returns total number of iterations
-int iteratePCMDevices(DeviceIteratorPtr iterator, void* userData) {
- int count = 0;
- int subdeviceCount;
- int card, dev, subDev;
- char devname[16];
- int err;
- snd_ctl_t *handle;
- snd_pcm_t *pcm;
- snd_pcm_info_t* pcminfo;
- snd_ctl_card_info_t *cardinfo, *defcardinfo = NULL;
- UINT32 deviceID;
- int doContinue = TRUE;
-
- snd_pcm_info_malloc(&pcminfo);
- snd_ctl_card_info_malloc(&cardinfo);
-
- // 1st try "default" device
- err = snd_pcm_open(&pcm, ALSA_DEFAULT_DEVICE_NAME,
- SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK);
- if (err < 0) {
- // try with the other direction
- err = snd_pcm_open(&pcm, ALSA_DEFAULT_DEVICE_NAME,
- SND_PCM_STREAM_CAPTURE, SND_PCM_NONBLOCK);
- }
- if (err < 0) {
- ERROR1("ERROR: snd_pcm_open (\"default\"): %s\n", snd_strerror(err));
- } else {
- err = snd_pcm_info(pcm, pcminfo);
- snd_pcm_close(pcm);
- if (err < 0) {
- ERROR1("ERROR: snd_pcm_info (\"default\"): %s\n",
- snd_strerror(err));
- } else {
- // try to get card info
- card = snd_pcm_info_get_card(pcminfo);
- if (card >= 0) {
- sprintf(devname, ALSA_HARDWARE_CARD, card);
- if (snd_ctl_open(&handle, devname, SND_CTL_NONBLOCK) >= 0) {
- if (snd_ctl_card_info(handle, cardinfo) >= 0) {
- defcardinfo = cardinfo;
- }
- snd_ctl_close(handle);
- }
- }
- // call callback function for the device
- if (iterator != NULL) {
- doContinue = (*iterator)(ALSA_DEFAULT_DEVICE_ID, pcminfo,
- defcardinfo, userData);
- }
- count++;
- }
- }
-
- // iterate cards
- card = -1;
- while (doContinue) {
- if (snd_card_next(&card) < 0) {
- break;
- }
- if (card < 0) {
- break;
- }
- sprintf(devname, ALSA_HARDWARE_CARD, card);
- TRACE1("Opening alsa device \"%s\"...\n", devname);
- err = snd_ctl_open(&handle, devname, SND_CTL_NONBLOCK);
- if (err < 0) {
- ERROR2("ERROR: snd_ctl_open, card=%d: %s\n",
- card, snd_strerror(err));
- } else {
- err = snd_ctl_card_info(handle, cardinfo);
- if (err < 0) {
- ERROR2("ERROR: snd_ctl_card_info, card=%d: %s\n",
- card, snd_strerror(err));
- } else {
- dev = -1;
- while (doContinue) {
- if (snd_ctl_pcm_next_device(handle, &dev) < 0) {
- ERROR0("snd_ctl_pcm_next_device\n");
- }
- if (dev < 0) {
- break;
- }
- snd_pcm_info_set_device(pcminfo, dev);
- snd_pcm_info_set_subdevice(pcminfo, 0);
- snd_pcm_info_set_stream(pcminfo, SND_PCM_STREAM_PLAYBACK);
- err = snd_ctl_pcm_info(handle, pcminfo);
- if (err == -ENOENT) {
- // try with the other direction
- snd_pcm_info_set_stream(pcminfo, SND_PCM_STREAM_CAPTURE);
- err = snd_ctl_pcm_info(handle, pcminfo);
- }
- if (err < 0) {
- if (err != -ENOENT) {
- ERROR2("ERROR: snd_ctl_pcm_info, card=%d: %s",
- card, snd_strerror(err));
- }
- } else {
- subdeviceCount = needEnumerateSubdevices(ALSA_PCM) ?
- snd_pcm_info_get_subdevices_count(pcminfo) : 1;
- if (iterator!=NULL) {
- for (subDev = 0; subDev < subdeviceCount; subDev++) {
- deviceID = encodeDeviceID(card, dev, subDev);
- doContinue = (*iterator)(deviceID, pcminfo,
- cardinfo, userData);
- count++;
- if (!doContinue) {
- break;
- }
- }
- } else {
- count += subdeviceCount;
- }
- }
- } // of while(doContinue)
- }
- snd_ctl_close(handle);
- }
- }
- snd_ctl_card_info_free(cardinfo);
- snd_pcm_info_free(pcminfo);
- return count;
-}
-
-int getAudioDeviceCount() {
- initAlsaSupport();
- return iteratePCMDevices(NULL, NULL);
-}
-
-int deviceInfoIterator(UINT32 deviceID, snd_pcm_info_t* pcminfo,
- snd_ctl_card_info_t* cardinfo, void* userData) {
- char buffer[300];
- ALSA_AudioDeviceDescription* desc = (ALSA_AudioDeviceDescription*)userData;
-#ifdef ALSA_PCM_USE_PLUGHW
- int usePlugHw = 1;
-#else
- int usePlugHw = 0;
-#endif
-
- initAlsaSupport();
- if (desc->index == 0) {
- // we found the device with correct index
- *(desc->maxSimultaneousLines) = needEnumerateSubdevices(ALSA_PCM) ?
- 1 : snd_pcm_info_get_subdevices_count(pcminfo);
- *desc->deviceID = deviceID;
- buffer[0]=' '; buffer[1]='[';
- getDeviceStringFromDeviceID(&buffer[2], deviceID, usePlugHw, ALSA_PCM);
- strcat(buffer, "]");
- strncpy(desc->name,
- (cardinfo != NULL)
- ? snd_ctl_card_info_get_id(cardinfo)
- : snd_pcm_info_get_id(pcminfo),
- desc->strLen - strlen(buffer));
- strncat(desc->name, buffer, desc->strLen - strlen(desc->name));
- strncpy(desc->vendor, "ALSA (http://www.alsa-project.org)", desc->strLen);
- strncpy(desc->description,
- (cardinfo != NULL)
- ? snd_ctl_card_info_get_name(cardinfo)
- : snd_pcm_info_get_name(pcminfo),
- desc->strLen);
- strncat(desc->description, ", ", desc->strLen - strlen(desc->description));
- strncat(desc->description, snd_pcm_info_get_id(pcminfo), desc->strLen - strlen(desc->description));
- strncat(desc->description, ", ", desc->strLen - strlen(desc->description));
- strncat(desc->description, snd_pcm_info_get_name(pcminfo), desc->strLen - strlen(desc->description));
- getALSAVersion(desc->version, desc->strLen);
- TRACE4("Returning %s, %s, %s, %s\n", desc->name, desc->vendor, desc->description, desc->version);
- return FALSE; // do not continue iteration
- }
- desc->index--;
- return TRUE;
-}
-
-// returns 0 if successful
-int openPCMfromDeviceID(int deviceID, snd_pcm_t** handle, int isSource, int hardware) {
- char buffer[200];
- int ret;
-
- initAlsaSupport();
- getDeviceStringFromDeviceID(buffer, deviceID, !hardware, ALSA_PCM);
-
- TRACE1("Opening ALSA device %s\n", buffer);
- ret = snd_pcm_open(handle, buffer,
- isSource?SND_PCM_STREAM_PLAYBACK:SND_PCM_STREAM_CAPTURE,
- SND_PCM_NONBLOCK);
- if (ret != 0) {
- ERROR1("snd_pcm_open returned error code %d \n", ret);
- *handle = NULL;
- }
- return ret;
-}
-
-
-int getAudioDeviceDescriptionByIndex(ALSA_AudioDeviceDescription* desc) {
- initAlsaSupport();
- TRACE1(" getAudioDeviceDescriptionByIndex(mixerIndex = %d\n", desc->index);
- iteratePCMDevices(&deviceInfoIterator, desc);
- return (desc->index == 0)?TRUE:FALSE;
-}
-
-// returns 1 if successful
-// enc: 0 for PCM, 1 for ULAW, 2 for ALAW (see DirectAudio.h)
-int getFormatFromAlsaFormat(snd_pcm_format_t alsaFormat,
- int* sampleSizeInBytes, int* significantBits,
- int* isSigned, int* isBigEndian, int* enc) {
-
- *sampleSizeInBytes = (snd_pcm_format_physical_width(alsaFormat) + 7) / 8;
- *significantBits = snd_pcm_format_width(alsaFormat);
-
- // defaults
- *enc = 0; // PCM
- *isSigned = (snd_pcm_format_signed(alsaFormat) > 0);
- *isBigEndian = (snd_pcm_format_big_endian(alsaFormat) > 0);
-
- // non-PCM formats
- if (alsaFormat == SND_PCM_FORMAT_MU_LAW) { // Mu-Law
- *sampleSizeInBytes = 8; *enc = 1; *significantBits = *sampleSizeInBytes;
- }
- else if (alsaFormat == SND_PCM_FORMAT_A_LAW) { // A-Law
- *sampleSizeInBytes = 8; *enc = 2; *significantBits = *sampleSizeInBytes;
- }
- else if (snd_pcm_format_linear(alsaFormat) < 1) {
- return 0;
- }
- return (*sampleSizeInBytes > 0);
-}
-
-// returns 1 if successful
-int getAlsaFormatFromFormat(snd_pcm_format_t* alsaFormat,
- int sampleSizeInBytes, int significantBits,
- int isSigned, int isBigEndian, int enc) {
- *alsaFormat = SND_PCM_FORMAT_UNKNOWN;
-
- if (enc == 0) {
- *alsaFormat = snd_pcm_build_linear_format(significantBits,
- sampleSizeInBytes * 8,
- isSigned?0:1,
- isBigEndian?1:0);
- }
- else if ((sampleSizeInBytes == 1) && (significantBits == 8)) {
- if (enc == 1) { // ULAW
- *alsaFormat = SND_PCM_FORMAT_MU_LAW;
- }
- else if (enc == 2) { // ALAW
- *alsaFormat = SND_PCM_FORMAT_A_LAW;
- }
- }
- return (*alsaFormat == SND_PCM_FORMAT_UNKNOWN)?0:1;
-}
-
-
-/* end */
--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_PCMUtils.h 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_PCMUtils.h 1969-12-31 16:00:00.000000000 -0800
@@ -1,72 +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.
- */
-
-// define this with a later version of ALSA than 0.9.0rc3
-#define ALSA_PCM_NEW_HW_PARAMS_API
-#include <alsa/asoundlib.h>
-#include "Utilities.h"
-
-#ifndef PLATFORM_API_BSDOS_ALSA_PCMUTILS_H_INCLUDED
-#define PLATFORM_API_BSDOS_ALSA_PCMUTILS_H_INCLUDED
-
-// if this is defined, use plughw: devices
-#define ALSA_PCM_USE_PLUGHW
-//#undef ALSA_PCM_USE_PLUGHW
-
-
-// maximum number of channels that is listed in the formats. If more, than
-// just -1 for channel count is used.
-#define MAXIMUM_LISTED_CHANNELS 32
-
-typedef struct tag_ALSA_AudioDeviceDescription {
- int index; // in
- int strLen; // in
- INT32* deviceID; // out
- int* maxSimultaneousLines; // out
- char* name; // out
- char* vendor; // out
- char* description; // out
- char* version; // out
-} ALSA_AudioDeviceDescription;
-
-
-
-int getAudioDeviceCount();
-int getAudioDeviceDescriptionByIndex(ALSA_AudioDeviceDescription* desc);
-
-// returns ALSA error code, or 0 if successful
-int openPCMfromDeviceID(int deviceID, snd_pcm_t** handle, int isSource, int hardware);
-
-// returns 1 if successful
-// enc: 0 for PCM, 1 for ULAW, 2 for ALAW (see DirectAudio.h)
-int getFormatFromAlsaFormat(snd_pcm_format_t alsaFormat,
- int* sampleSizeInBytes, int* significantBits,
- int* isSigned, int* isBigEndian, int* enc);
-
-int getAlsaFormatFromFormat(snd_pcm_format_t* alsaFormat,
- int sampleSizeInBytes, int significantBits,
- int isSigned, int isBigEndian, int enc);
-
-#endif // PLATFORM_API_BSDOS_ALSA_PCMUTILS_H_INCLUDED
--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_Ports.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_BsdOS_ALSA_Ports.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,723 +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.
- */
-
-#define USE_ERROR
-//#define USE_TRACE
-
-#include "Ports.h"
-#include "PLATFORM_API_BsdOS_ALSA_CommonUtils.h"
-#include <alsa/asoundlib.h>
-
-#if USE_PORTS == TRUE
-
-#define MAX_ELEMS (300)
-#define MAX_CONTROLS (MAX_ELEMS * 4)
-
-#define CHANNELS_MONO (SND_MIXER_SCHN_LAST + 1)
-#define CHANNELS_STEREO (SND_MIXER_SCHN_LAST + 2)
-
-typedef struct {
- snd_mixer_elem_t* elem;
- INT32 portType; /* one of PORT_XXX_xx */
- char* controlType; /* one of CONTROL_TYPE_xx */
- /* Values: either SND_MIXER_SCHN_FRONT_xx, CHANNELS_MONO or CHANNELS_STEREO.
- For SND_MIXER_SCHN_FRONT_xx, exactly this channel is set/retrieved directly.
- For CHANNELS_MONO, ALSA channel SND_MIXER_SCHN_MONO is set/retrieved directly.
- For CHANNELS_STEREO, ALSA channels SND_MIXER_SCHN_FRONT_LEFT and SND_MIXER_SCHN_FRONT_RIGHT
- are set after a calculation that takes balance into account. Retrieved? Average of both
- channels? (Using a cached value is not a good idea since the value in the HW may have been
- altered.) */
- INT32 channel;
-} PortControl;
-
-
-typedef struct tag_PortMixer {
- snd_mixer_t* mixer_handle;
- /* Number of array elements used in elems and types. */
- int numElems;
- snd_mixer_elem_t** elems;
- /* Array of port types (PORT_SRC_UNKNOWN etc.). Indices are the same as in elems. */
- INT32* types;
- /* Number of array elements used in controls. */
- int numControls;
- PortControl* controls;
-} PortMixer;
-
-
-///// implemented functions of Ports.h
-
-INT32 PORT_GetPortMixerCount() {
- INT32 mixerCount;
- int card;
- char devname[16];
- int err;
- snd_ctl_t *handle;
- snd_ctl_card_info_t* info;
-
- TRACE0("> PORT_GetPortMixerCount\n");
-
- initAlsaSupport();
-
- snd_ctl_card_info_malloc(&info);
- card = -1;
- mixerCount = 0;
- if (snd_card_next(&card) >= 0) {
- while (card >= 0) {
- sprintf(devname, ALSA_HARDWARE_CARD, card);
- TRACE1("PORT_GetPortMixerCount: Opening alsa device \"%s\"...\n", devname);
- err = snd_ctl_open(&handle, devname, 0);
- if (err < 0) {
- ERROR2("ERROR: snd_ctl_open, card=%d: %s\n", card, snd_strerror(err));
- } else {
- mixerCount++;
- snd_ctl_close(handle);
- }
- if (snd_card_next(&card) < 0) {
- break;
- }
- }
- }
- snd_ctl_card_info_free(info);
- TRACE0("< PORT_GetPortMixerCount\n");
- return mixerCount;
-}
-
-
-INT32 PORT_GetPortMixerDescription(INT32 mixerIndex, PortMixerDescription* description) {
- snd_ctl_t* handle;
- snd_ctl_card_info_t* card_info;
- char devname[16];
- int err;
- char buffer[100];
-
- TRACE0("> PORT_GetPortMixerDescription\n");
- snd_ctl_card_info_malloc(&card_info);
-
- sprintf(devname, ALSA_HARDWARE_CARD, (int) mixerIndex);
- TRACE1("Opening alsa device \"%s\"...\n", devname);
- err = snd_ctl_open(&handle, devname, 0);
- if (err < 0) {
- ERROR2("ERROR: snd_ctl_open, card=%d: %s\n", (int) mixerIndex, snd_strerror(err));
- return FALSE;
- }
- err = snd_ctl_card_info(handle, card_info);
- if (err < 0) {
- ERROR2("ERROR: snd_ctl_card_info, card=%d: %s\n", (int) mixerIndex, snd_strerror(err));
- }
- strncpy(description->name, snd_ctl_card_info_get_id(card_info), PORT_STRING_LENGTH - 1);
- sprintf(buffer, " [%s]", devname);
- strncat(description->name, buffer, PORT_STRING_LENGTH - 1 - strlen(description->name));
- strncpy(description->vendor, "ALSA (http://www.alsa-project.org)", PORT_STRING_LENGTH - 1);
- strncpy(description->description, snd_ctl_card_info_get_name(card_info), PORT_STRING_LENGTH - 1);
- strncat(description->description, ", ", PORT_STRING_LENGTH - 1 - strlen(description->description));
- strncat(description->description, snd_ctl_card_info_get_mixername(card_info), PORT_STRING_LENGTH - 1 - strlen(description->description));
- getALSAVersion(description->version, PORT_STRING_LENGTH - 1);
-
- snd_ctl_close(handle);
- snd_ctl_card_info_free(card_info);
- TRACE0("< PORT_GetPortMixerDescription\n");
- return TRUE;
-}
-
-
-void* PORT_Open(INT32 mixerIndex) {
- char devname[16];
- snd_mixer_t* mixer_handle;
- int err;
- PortMixer* handle;
-
- TRACE0("> PORT_Open\n");
- sprintf(devname, ALSA_HARDWARE_CARD, (int) mixerIndex);
- if ((err = snd_mixer_open(&mixer_handle, 0)) < 0) {
- ERROR2("Mixer %s open error: %s", devname, snd_strerror(err));
- return NULL;
- }
- if ((err = snd_mixer_attach(mixer_handle, devname)) < 0) {
- ERROR2("Mixer attach %s error: %s", devname, snd_strerror(err));
- snd_mixer_close(mixer_handle);
- return NULL;
- }
- if ((err = snd_mixer_selem_register(mixer_handle, NULL, NULL)) < 0) {
- ERROR1("Mixer register error: %s", snd_strerror(err));
- snd_mixer_close(mixer_handle);
- return NULL;
- }
- err = snd_mixer_load(mixer_handle);
- if (err < 0) {
- ERROR2("Mixer %s load error: %s", devname, snd_strerror(err));
- snd_mixer_close(mixer_handle);
- return NULL;
- }
- handle = (PortMixer*) calloc(1, sizeof(PortMixer));
- if (handle == NULL) {
- ERROR0("malloc() failed.");
- snd_mixer_close(mixer_handle);
- return NULL;
- }
- handle->numElems = 0;
- handle->elems = (snd_mixer_elem_t**) calloc(MAX_ELEMS, sizeof(snd_mixer_elem_t*));
- if (handle->elems == NULL) {
- ERROR0("malloc() failed.");
- snd_mixer_close(mixer_handle);
- free(handle);
- return NULL;
- }
- handle->types = (INT32*) calloc(MAX_ELEMS, sizeof(INT32));
- if (handle->types == NULL) {
- ERROR0("malloc() failed.");
- snd_mixer_close(mixer_handle);
- free(handle->elems);
- free(handle);
- return NULL;
- }
- handle->controls = (PortControl*) calloc(MAX_CONTROLS, sizeof(PortControl));
- if (handle->controls == NULL) {
- ERROR0("malloc() failed.");
- snd_mixer_close(mixer_handle);
- free(handle->elems);
- free(handle->types);
- free(handle);
- return NULL;
- }
- handle->mixer_handle = mixer_handle;
- // necessary to initialize data structures
- PORT_GetPortCount(handle);
- TRACE0("< PORT_Open\n");
- return handle;
-}
-
-
-void PORT_Close(void* id) {
- TRACE0("> PORT_Close\n");
- if (id != NULL) {
- PortMixer* handle = (PortMixer*) id;
- if (handle->mixer_handle != NULL) {
- snd_mixer_close(handle->mixer_handle);
- }
- if (handle->elems != NULL) {
- free(handle->elems);
- }
- if (handle->types != NULL) {
- free(handle->types);
- }
- if (handle->controls != NULL) {
- free(handle->controls);
- }
- free(handle);
- }
- TRACE0("< PORT_Close\n");
-}
-
-
-
-INT32 PORT_GetPortCount(void* id) {
- PortMixer* portMixer;
- snd_mixer_elem_t *elem;
-
- TRACE0("> PORT_GetPortCount\n");
- if (id == NULL) {
- // $$mp: Should become a descriptive error code (invalid handle).
- return -1;
- }
- portMixer = (PortMixer*) id;
- if (portMixer->numElems == 0) {
- for (elem = snd_mixer_first_elem(portMixer->mixer_handle); elem; elem = snd_mixer_elem_next(elem)) {
- if (!snd_mixer_selem_is_active(elem))
- continue;
- TRACE2("Simple mixer control '%s',%i\n",
- snd_mixer_selem_get_name(elem),
- snd_mixer_selem_get_index(elem));
- if (snd_mixer_selem_has_playback_volume(elem)) {
- portMixer->elems[portMixer->numElems] = elem;
- portMixer->types[portMixer->numElems] = PORT_DST_UNKNOWN;
- portMixer->numElems++;
- }
- // to prevent buffer overflow
- if (portMixer->numElems >= MAX_ELEMS) {
- break;
- }
- /* If an element has both playback an capture volume, it is put into the arrays
- twice. */
- if (snd_mixer_selem_has_capture_volume(elem)) {
- portMixer->elems[portMixer->numElems] = elem;
- portMixer->types[portMixer->numElems] = PORT_SRC_UNKNOWN;
- portMixer->numElems++;
- }
- // to prevent buffer overflow
- if (portMixer->numElems >= MAX_ELEMS) {
- break;
- }
- }
- }
- TRACE0("< PORT_GetPortCount\n");
- return portMixer->numElems;
-}
-
-
-INT32 PORT_GetPortType(void* id, INT32 portIndex) {
- PortMixer* portMixer;
- INT32 type;
- TRACE0("> PORT_GetPortType\n");
- if (id == NULL) {
- // $$mp: Should become a descriptive error code (invalid handle).
- return -1;
- }
- portMixer = (PortMixer*) id;
- if (portIndex < 0 || portIndex >= portMixer->numElems) {
- // $$mp: Should become a descriptive error code (index out of bounds).
- return -1;
- }
- type = portMixer->types[portIndex];
- TRACE0("< PORT_GetPortType\n");
- return type;
-}
-
-
-INT32 PORT_GetPortName(void* id, INT32 portIndex, char* name, INT32 len) {
- PortMixer* portMixer;
- const char* nam;
-
- TRACE0("> PORT_GetPortName\n");
- if (id == NULL) {
- // $$mp: Should become a descriptive error code (invalid handle).
- return -1;
- }
- portMixer = (PortMixer*) id;
- if (portIndex < 0 || portIndex >= portMixer->numElems) {
- // $$mp: Should become a descriptive error code (index out of bounds).
- return -1;
- }
- nam = snd_mixer_selem_get_name(portMixer->elems[portIndex]);
- strncpy(name, nam, len - 1);
- name[len - 1] = 0;
- TRACE0("< PORT_GetPortName\n");
- return TRUE;
-}
-
-
-static int isPlaybackFunction(INT32 portType) {
- return (portType & PORT_DST_MASK);
-}
-
-
-/* Sets portControl to a pointer to the next free array element in the PortControl (pointer)
- array of the passed portMixer. Returns TRUE if successful. May return FALSE if there is no
- free slot. In this case, portControl is not altered */
-static int getControlSlot(PortMixer* portMixer, PortControl** portControl) {
- if (portMixer->numControls >= MAX_CONTROLS) {
- return FALSE;
- } else {
- *portControl = &(portMixer->controls[portMixer->numControls]);
- portMixer->numControls++;
- return TRUE;
- }
-}
-
-
-/* Protect against illegal min-max values, preventing divisions by zero.
- */
-inline static long getRange(long min, long max) {
- if (max > min) {
- return max - min;
- } else {
- return 1;
- }
-}
-
-
-/* Idea: we may specify that if unit is an empty string, the values are linear and if unit is "dB",
- the values are logarithmic.
-*/
-static void* createVolumeControl(PortControlCreator* creator,
- PortControl* portControl,
- snd_mixer_elem_t* elem, int isPlayback) {
- void* control;
- float precision;
- long min, max;
-
- if (isPlayback) {
- snd_mixer_selem_get_playback_volume_range(elem, &min, &max);
- } else {
- snd_mixer_selem_get_capture_volume_range(elem, &min, &max);
- }
- /* $$mp: The volume values retrieved with the ALSA API are strongly supposed to be logarithmic.
- So the following calculation is wrong. However, there is no correct calculation, since
- for equal-distant logarithmic steps, the precision expressed in linear varies over the
- scale. */
- precision = 1.0F / getRange(min, max);
- control = (creator->newFloatControl)(creator, portControl, CONTROL_TYPE_VOLUME, 0.0F, +1.0F, precision, "");
- return control;
-}
-
-
-void PORT_GetControls(void* id, INT32 portIndex, PortControlCreator* creator) {
- PortMixer* portMixer;
- snd_mixer_elem_t* elem;
- void* control;
- PortControl* portControl;
- void* controls[10];
- int numControls;
- char* portName;
- int isPlayback;
- int isMono;
- int isStereo;
- char* type;
- snd_mixer_selem_channel_id_t channel;
-
- TRACE0("> PORT_GetControls\n");
- if (id == NULL) {
- ERROR0("Invalid handle!");
- // $$mp: an error code should be returned.
- return;
- }
- portMixer = (PortMixer*) id;
- if (portIndex < 0 || portIndex >= portMixer->numElems) {
- ERROR0("Port index out of range!");
- // $$mp: an error code should be returned.
- return;
- }
- numControls = 0;
- elem = portMixer->elems[portIndex];
- if (snd_mixer_selem_has_playback_volume(elem) || snd_mixer_selem_has_capture_volume(elem)) {
- /* Since we've splitted/duplicated elements with both playback and capture on the recovery
- of elements, we now can assume that we handle only to deal with either playback or
- capture. */
- isPlayback = isPlaybackFunction(portMixer->types[portIndex]);
- isMono = (isPlayback && snd_mixer_selem_is_playback_mono(elem)) ||
- (!isPlayback && snd_mixer_selem_is_capture_mono(elem));
- isStereo = (isPlayback &&
- snd_mixer_selem_has_playback_channel(elem, SND_MIXER_SCHN_FRONT_LEFT) &&
- snd_mixer_selem_has_playback_channel(elem, SND_MIXER_SCHN_FRONT_RIGHT)) ||
- (!isPlayback &&
- snd_mixer_selem_has_capture_channel(elem, SND_MIXER_SCHN_FRONT_LEFT) &&
- snd_mixer_selem_has_capture_channel(elem, SND_MIXER_SCHN_FRONT_RIGHT));
- // single volume control
- if (isMono || isStereo) {
- if (getControlSlot(portMixer, &portControl)) {
- portControl->elem = elem;
- portControl->portType = portMixer->types[portIndex];
- portControl->controlType = CONTROL_TYPE_VOLUME;
- if (isMono) {
- portControl->channel = CHANNELS_MONO;
- } else {
- portControl->channel = CHANNELS_STEREO;
- }
- control = createVolumeControl(creator, portControl, elem, isPlayback);
- if (control != NULL) {
- controls[numControls++] = control;
- }
- }
- } else { // more than two channels, each channels has its own control.
- for (channel = SND_MIXER_SCHN_FRONT_LEFT; channel <= SND_MIXER_SCHN_LAST; channel++) {
- if (isPlayback && snd_mixer_selem_has_playback_channel(elem, channel) ||
- !isPlayback && snd_mixer_selem_has_capture_channel(elem, channel)) {
- if (getControlSlot(portMixer, &portControl)) {
- portControl->elem = elem;
- portControl->portType = portMixer->types[portIndex];
- portControl->controlType = CONTROL_TYPE_VOLUME;
- portControl->channel = channel;
- control = createVolumeControl(creator, portControl, elem, isPlayback);
- // We wrap in a compound control to provide the channel name.
- if (control != NULL) {
- /* $$mp 2003-09-14: The following cast shouln't be necessary. Instead, the
- declaration of PORT_NewCompoundControlPtr in Ports.h should be changed
- to take a const char* parameter. */
- control = (creator->newCompoundControl)(creator, (char*) snd_mixer_selem_channel_name(channel), &control, 1);
- }
- if (control != NULL) {
- controls[numControls++] = control;
- }
- }
- }
- }
- }
- // BALANCE control
- if (isStereo) {
- if (getControlSlot(portMixer, &portControl)) {
- portControl->elem = elem;
- portControl->portType = portMixer->types[portIndex];
- portControl->controlType = CONTROL_TYPE_BALANCE;
- portControl->channel = CHANNELS_STEREO;
- /* $$mp: The value for precision is chosen more or less arbitrarily. */
- control = (creator->newFloatControl)(creator, portControl, CONTROL_TYPE_BALANCE, -1.0F, 1.0F, 0.01F, "");
- if (control != NULL) {
- controls[numControls++] = control;
- }
- }
- }
- }
- if (snd_mixer_selem_has_playback_switch(elem) || snd_mixer_selem_has_capture_switch(elem)) {
- if (getControlSlot(portMixer, &portControl)) {
- type = isPlayback ? CONTROL_TYPE_MUTE : CONTROL_TYPE_SELECT;
- portControl->elem = elem;
- portControl->portType = portMixer->types[portIndex];
- portControl->controlType = type;
- control = (creator->newBooleanControl)(creator, portControl, type);
- if (control != NULL) {
- controls[numControls++] = control;
- }
- }
- }
- /* $$mp 2003-09-14: The following cast shouln't be necessary. Instead, the
- declaration of PORT_NewCompoundControlPtr in Ports.h should be changed
- to take a const char* parameter. */
- portName = (char*) snd_mixer_selem_get_name(elem);
- control = (creator->newCompoundControl)(creator, portName, controls, numControls);
- if (control != NULL) {
- (creator->addControl)(creator, control);
- }
- TRACE0("< PORT_GetControls\n");
-}
-
-
-INT32 PORT_GetIntValue(void* controlIDV) {
- PortControl* portControl = (PortControl*) controlIDV;
- int value = 0;
- snd_mixer_selem_channel_id_t channel;
-
- if (portControl != NULL) {
- switch (portControl->channel) {
- case CHANNELS_MONO:
- channel = SND_MIXER_SCHN_MONO;
- break;
-
- case CHANNELS_STEREO:
- channel = SND_MIXER_SCHN_FRONT_LEFT;
- break;
-
- default:
- channel = portControl->channel;
- }
- if (portControl->controlType == CONTROL_TYPE_MUTE ||
- portControl->controlType == CONTROL_TYPE_SELECT) {
- if (isPlaybackFunction(portControl->portType)) {
- snd_mixer_selem_get_playback_switch(portControl->elem, channel, &value);
- } else {
- snd_mixer_selem_get_capture_switch(portControl->elem, channel, &value);
- }
- if (portControl->controlType == CONTROL_TYPE_MUTE) {
- value = ! value;
- }
- } else {
- ERROR1("PORT_GetIntValue(): inappropriate control type: %s\n",
- portControl->controlType);
- }
- }
- return (INT32) value;
-}
-
-
-void PORT_SetIntValue(void* controlIDV, INT32 value) {
- PortControl* portControl = (PortControl*) controlIDV;
- snd_mixer_selem_channel_id_t channel;
-
- if (portControl != NULL) {
- if (portControl->controlType == CONTROL_TYPE_MUTE) {
- value = ! value;
- }
- if (portControl->controlType == CONTROL_TYPE_MUTE ||
- portControl->controlType == CONTROL_TYPE_SELECT) {
- if (isPlaybackFunction(portControl->portType)) {
- snd_mixer_selem_set_playback_switch_all(portControl->elem, value);
- } else {
- snd_mixer_selem_set_capture_switch_all(portControl->elem, value);
- }
- } else {
- ERROR1("PORT_SetIntValue(): inappropriate control type: %s\n",
- portControl->controlType);
- }
- }
-}
-
-
-static float scaleVolumeValueToNormalized(long value, long min, long max) {
- return (float) (value - min) / getRange(min, max);
-}
-
-
-static long scaleVolumeValueToHardware(float value, long min, long max) {
- return (long)(value * getRange(min, max) + min);
-}
-
-
-float getRealVolume(PortControl* portControl,
- snd_mixer_selem_channel_id_t channel) {
- float fValue;
- long lValue = 0;
- long min = 0;
- long max = 0;
-
- if (isPlaybackFunction(portControl->portType)) {
- snd_mixer_selem_get_playback_volume_range(portControl->elem,
- &min, &max);
- snd_mixer_selem_get_playback_volume(portControl->elem,
- channel, &lValue);
- } else {
- snd_mixer_selem_get_capture_volume_range(portControl->elem,
- &min, &max);
- snd_mixer_selem_get_capture_volume(portControl->elem,
- channel, &lValue);
- }
- fValue = scaleVolumeValueToNormalized(lValue, min, max);
- return fValue;
-}
-
-
-void setRealVolume(PortControl* portControl,
- snd_mixer_selem_channel_id_t channel, float value) {
- long lValue = 0;
- long min = 0;
- long max = 0;
-
- if (isPlaybackFunction(portControl->portType)) {
- snd_mixer_selem_get_playback_volume_range(portControl->elem,
- &min, &max);
- lValue = scaleVolumeValueToHardware(value, min, max);
- snd_mixer_selem_set_playback_volume(portControl->elem,
- channel, lValue);
- } else {
- snd_mixer_selem_get_capture_volume_range(portControl->elem,
- &min, &max);
- lValue = scaleVolumeValueToHardware(value, min, max);
- snd_mixer_selem_set_capture_volume(portControl->elem,
- channel, lValue);
- }
-}
-
-
-static float getFakeBalance(PortControl* portControl) {
- float volL, volR;
-
- // pan is the ratio of left and right
- volL = getRealVolume(portControl, SND_MIXER_SCHN_FRONT_LEFT);
- volR = getRealVolume(portControl, SND_MIXER_SCHN_FRONT_RIGHT);
- if (volL > volR) {
- return -1.0f + (volR / volL);
- }
- else if (volR > volL) {
- return 1.0f - (volL / volR);
- }
- return 0.0f;
-}
-
-
-static float getFakeVolume(PortControl* portControl) {
- float valueL;
- float valueR;
- float value;
-
- valueL = getRealVolume(portControl, SND_MIXER_SCHN_FRONT_LEFT);
- valueR = getRealVolume(portControl, SND_MIXER_SCHN_FRONT_RIGHT);
- // volume is the greater value of both
- value = valueL > valueR ? valueL : valueR ;
- return value;
-}
-
-
-/*
- * sets the unsigned values for left and right volume according to
- * the given volume (0...1) and balance (-1..0..+1)
- */
-static void setFakeVolume(PortControl* portControl, float vol, float bal) {
- float volumeLeft;
- float volumeRight;
-
- if (bal < 0.0f) {
- volumeLeft = vol;
- volumeRight = vol * (bal + 1.0f);
- } else {
- volumeLeft = vol * (1.0f - bal);
- volumeRight = vol;
- }
- setRealVolume(portControl, SND_MIXER_SCHN_FRONT_LEFT, volumeLeft);
- setRealVolume(portControl, SND_MIXER_SCHN_FRONT_RIGHT, volumeRight);
-}
-
-
-float PORT_GetFloatValue(void* controlIDV) {
- PortControl* portControl = (PortControl*) controlIDV;
- float value = 0.0F;
-
- if (portControl != NULL) {
- if (portControl->controlType == CONTROL_TYPE_VOLUME) {
- switch (portControl->channel) {
- case CHANNELS_MONO:
- value = getRealVolume(portControl, SND_MIXER_SCHN_MONO);
- break;
-
- case CHANNELS_STEREO:
- value = getFakeVolume(portControl);
- break;
-
- default:
- value = getRealVolume(portControl, portControl->channel);
- }
- } else if (portControl->controlType == CONTROL_TYPE_BALANCE) {
- if (portControl->channel == CHANNELS_STEREO) {
- value = getFakeBalance(portControl);
- } else {
- ERROR0("PORT_GetFloatValue(): Balance only allowed for stereo channels!\n");
- }
- } else {
- ERROR1("PORT_GetFloatValue(): inappropriate control type: %s!\n",
- portControl->controlType);
- }
- }
- return value;
-}
-
-
-void PORT_SetFloatValue(void* controlIDV, float value) {
- PortControl* portControl = (PortControl*) controlIDV;
-
- if (portControl != NULL) {
- if (portControl->controlType == CONTROL_TYPE_VOLUME) {
- switch (portControl->channel) {
- case CHANNELS_MONO:
- setRealVolume(portControl, SND_MIXER_SCHN_MONO, value);
- break;
-
- case CHANNELS_STEREO:
- setFakeVolume(portControl, value, getFakeBalance(portControl));
- break;
-
- default:
- setRealVolume(portControl, portControl->channel, value);
- }
- } else if (portControl->controlType == CONTROL_TYPE_BALANCE) {
- if (portControl->channel == CHANNELS_STEREO) {
- setFakeVolume(portControl, getFakeVolume(portControl), value);
- } else {
- ERROR0("PORT_SetFloatValue(): Balance only allowed for stereo channels!\n");
- }
- } else {
- ERROR1("PORT_SetFloatValue(): inappropriate control type: %s!\n",
- portControl->controlType);
- }
- }
-}
-
-
-#endif // USE_PORTS
--- ./jdk/src/solaris/native/java/io/UnixFileSystem_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/io/UnixFileSystem_md.c 2010-10-31 14:12:36.000000000 -0700
@@ -41,6 +41,12 @@
#include "java_io_FileSystem.h"
#include "java_io_UnixFileSystem.h"
+#if defined(_ALLBSD_SOURCE)
+#define dirent64 dirent
+#define readdir64_r readdir_r
+#define stat64 stat
+#define statvfs64 statvfs
+#endif
/* -- Field IDs -- */
@@ -140,7 +146,6 @@
return rv;
}
-
JNIEXPORT jboolean JNICALL
Java_java_io_UnixFileSystem_setPermission(JNIEnv *env, jobject this,
jobject file,
--- ./jdk/src/solaris/native/java/io/canonicalize_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/io/canonicalize_md.c 2010-10-31 14:12:37.000000000 -0700
@@ -33,7 +33,9 @@
#include <sys/stat.h>
#include <errno.h>
#include <limits.h>
+#if !defined(_ALLBSD_SOURCE)
#include <alloca.h>
+#endif
/* Note: The comments in this file use the terminology
--- ./jdk/src/solaris/native/java/io/io_util_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/io/io_util_md.c 2010-10-31 14:12:37.000000000 -0700
@@ -36,7 +36,7 @@
WITH_PLATFORM_STRING(env, path, ps) {
FD fd;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
/* Remove trailing slashes, since the kernel won't */
char *p = (char *)ps + strlen(ps) - 1;
while ((p > ps) && (*p == '/'))
--- ./jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c 2010-06-15 22:07:34.000000000 -0700
@@ -28,6 +28,11 @@
#include "jni.h"
#include "jni_util.h"
+#ifdef __APPLE__
+#include <crt_externs.h>
+#define environ (*_NSGetEnviron())
+#endif
+
JNIEXPORT jobjectArray JNICALL
Java_java_lang_ProcessEnvironment_environ(JNIEnv *env, jclass ign)
{
@@ -37,7 +42,9 @@
* no standard (not even de-facto) header file where the
* declaration is to be found. See:
* http://www.opengroup.org/onlinepubs/007908799/xbd/envvar.html */
+#ifndef __APPLE__
extern char ** environ; /* environ[i] looks like: VAR=VALUE\0 */
+#endif
jsize count = 0;
jsize i, j;
@@ -46,7 +53,7 @@
for (i = 0; environ[i]; i++) {
/* Ignore corrupted environment variables */
- if (strchr(environ[i], '=') != NULL)
+ if (strchr(environ[i], '=') != NULL && *environ[i] != '=')
count++;
}
@@ -56,7 +63,7 @@
for (i = 0, j = 0; environ[i]; i++) {
const char * varEnd = strchr(environ[i], '=');
/* Ignore corrupted environment variables */
- if (varEnd != NULL) {
+ if (varEnd != NULL && varEnd != environ[i]) {
jbyteArray var, val;
const char * valBeg = varEnd + 1;
jsize varLength = varEnd - environ[i];
--- ./jdk/src/solaris/native/java/lang/UNIXProcess_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/lang/UNIXProcess_md.c 2010-06-15 22:07:34.000000000 -0700
@@ -40,7 +40,11 @@
#include <stdlib.h>
#include <sys/types.h>
#include <ctype.h>
+#ifdef _ALLBSD_SOURCE
+#include <sys/wait.h>
+#else
#include <wait.h>
+#endif
#include <signal.h>
#include <string.h>
#include <errno.h>
@@ -49,6 +53,17 @@
#include <fcntl.h>
#include <limits.h>
+#ifdef __FreeBSD__
+#include <dlfcn.h>
+#include <pthread.h>
+#include <pthread_np.h>
+#endif
+
+#ifdef __APPLE__
+#include <crt_externs.h>
+#define environ (*_NSGetEnviron())
+#endif
+
/*
* There are 3 possible strategies we might use to "fork":
*
@@ -385,6 +400,32 @@
return c >= '0' && c <= '9';
}
+#if defined(__OpenBSD__)
+/*
+ * Directly call _thread_sys_closefrom() so the child process
+ * doesn't reset the parrent's file descriptors to be blocking.
+ * This function is only called from the child process which
+ * is single threaded and about to call execvp() so it is
+ * safe to bypass the threaded closefrom().
+ */
+int _thread_sys_closefrom(int);
+
+static int
+closeDescriptors(void)
+{
+ return _thread_sys_closefrom(FAIL_FILENO + 1);
+}
+
+#else
+
+#ifdef _ALLBSD_SOURCE
+#define FD_DIR "/dev/fd"
+#define dirent64 dirent
+#define readdir64 readdir
+#else
+#define FD_DIR "/proc/self/fd"
+#endif
+
static int
closeDescriptors(void)
{
@@ -402,7 +443,7 @@
restartableClose(from_fd); /* for possible use by opendir() */
restartableClose(from_fd + 1); /* another one for good luck */
- if ((dp = opendir("/proc/self/fd")) == NULL)
+ if ((dp = opendir(FD_DIR)) == NULL)
return 0;
/* We use readdir64 instead of readdir to work around Solaris bug
@@ -419,6 +460,7 @@
return 1;
}
+#endif /* !__OpenBSD__ */
static int
moveDescriptor(int fd_from, int fd_to)
@@ -556,6 +598,21 @@
const char *argv[],
const char *const envp[])
{
+ /* This is one of the rare times it's more portable to declare an
+ * external symbol explicitly, rather than via a system header.
+ * The declaration is standardized as part of UNIX98, but there is
+ * no standard (not even de-facto) header file where the
+ * declaration is to be found. See:
+ * http://www.opengroup.org/onlinepubs/009695399/functions/environ.html
+ * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_02.html
+ *
+ * "All identifiers in this volume of IEEE Std 1003.1-2001, except
+ * environ, are defined in at least one of the headers" (!)
+ */
+#ifndef __APPLE__
+ extern char **environ;
+#endif
+
if (envp == NULL || (char **) envp == environ) {
execvp(file, (char **) argv);
return;
--- ./jdk/src/solaris/native/java/lang/java_props_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/lang/java_props_md.c 2010-10-31 14:17:47.000000000 -0700
@@ -23,7 +23,7 @@
* questions.
*/
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <stdio.h>
#include <ctype.h>
#endif
@@ -42,9 +42,17 @@
#include <time.h>
#include <errno.h>
+#if defined(_ALLBSD_SOURCE)
+#if !defined(P_tmpdir)
+#include <paths.h>
+#define P_tmpdir _PATH_VARTMP
+#endif
+#endif
+
#include "locale_str.h"
#include "java_props.h"
+#if !defined(_ALLBSD_SOURCE)
#ifdef __linux__
#ifndef CODESET
#define CODESET _NL_CTYPE_CODESET_NAME
@@ -54,6 +62,7 @@
#define CODESET ALT_CODESET_KEY
#endif
#endif
+#endif /* !_ALLBSD_SOURCE */
/* Take an array of string pairs (map of key->value) and a string (key).
* Examine each pair in the map to see if the first string (key) matches the
@@ -375,6 +384,13 @@
sprops.display_variant = sprops.variant;
sprops.sun_jnu_encoding = sprops.encoding;
+#ifdef _ALLBSD_SOURCE
+#if BYTE_ORDER == _LITTLE_ENDIAN
+ sprops.unicode_encoding = "UnicodeLittle";
+ #else
+ sprops.unicode_encoding = "UnicodeBig";
+ #endif
+#else /* !_ALLBSD_SOURCE */
#ifdef __linux__
#if __BYTE_ORDER == __LITTLE_ENDIAN
sprops.unicode_encoding = "UnicodeLittle";
@@ -384,6 +400,7 @@
#else
sprops.unicode_encoding = "UnicodeBig";
#endif
+#endif /* _ALLBSD_SOURCE */
/* user properties */
{
@@ -420,12 +437,14 @@
sprops.path_separator = ":";
sprops.line_separator = "\n";
+#if !defined(_ALLBSD_SOURCE)
/* Append CDE message and resource search path to NLSPATH and
* XFILESEARCHPATH, in order to pick localized message for
* FileSelectionDialog window (Bug 4173641).
*/
setPathEnvironment("NLSPATH=/usr/dt/lib/nls/msg/%L/%N.cat");
setPathEnvironment("XFILESEARCHPATH=/usr/dt/app-defaults/%L/Dt");
+#endif
return &sprops;
}
--- ./jdk/src/solaris/native/java/net/Inet4AddressImpl.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/net/Inet4AddressImpl.c 2010-06-15 22:07:34.000000000 -0700
@@ -36,12 +36,288 @@
#include <stdlib.h>
#include <ctype.h>
+#ifdef _ALLBSD_SOURCE
+#include <unistd.h>
+#include <sys/param.h>
+#endif
+
#include "jvm.h"
#include "jni_util.h"
#include "net_util.h"
#include "java_net_Inet4AddressImpl.h"
+#if defined(__GLIBC__) || (defined(__FreeBSD__) && (__FreeBSD_version >= 601104))
+#define HAS_GLIBC_GETHOSTBY_R 1
+#endif
+
+#if defined(_ALLBSD_SOURCE) && !defined(HAS_GLIBC_GETHOSTBY_R)
+/* Use getaddrinfo(3), which is thread safe */
+/************************************************************************
+ * Inet4AddressImpl
+ */
+
+/*
+ * Class: java_net_Inet4AddressImpl
+ * Method: getLocalHostName
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_java_net_Inet4AddressImpl_getLocalHostName(JNIEnv *env, jobject this) {
+ char hostname[NI_MAXHOST+1];
+
+ hostname[0] = '\0';
+ if (JVM_GetHostName(hostname, NI_MAXHOST)) {
+ /* Something went wrong, maybe networking is not setup? */
+ strcpy(hostname, "localhost");
+ } else {
+ struct addrinfo hints, *res;
+ int error;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_CANONNAME;
+ hints.ai_family = AF_UNSPEC;
+
+ error = getaddrinfo(hostname, NULL, &hints, &res);
+
+ if (error == 0) {
+ /* host is known to name service */
+ error = getnameinfo(res->ai_addr,
+ res->ai_addrlen,
+ hostname,
+ NI_MAXHOST,
+ NULL,
+ 0,
+ NI_NAMEREQD);
+
+ /* if getnameinfo fails hostname is still the value
+ from gethostname */
+
+ freeaddrinfo(res);
+ }
+ }
+ return (*env)->NewStringUTF(env, hostname);
+}
+
+static jclass ni_iacls;
+static jclass ni_ia4cls;
+static jmethodID ni_ia4ctrID;
+static jfieldID ni_iaaddressID;
+static jfieldID ni_iahostID;
+static jfieldID ni_iafamilyID;
+static int initialized = 0;
+
+/*
+ * Find an internet address for a given hostname. Note that this
+ * code only works for addresses of type INET. The translation
+ * of %d.%d.%d.%d to an address (int) occurs in java now, so the
+ * String "host" shouldn't *ever* be a %d.%d.%d.%d string
+ *
+ * Class: java_net_Inet4AddressImpl
+ * Method: lookupAllHostAddr
+ * Signature: (Ljava/lang/String;)[[B
+ */
+
+JNIEXPORT jobjectArray JNICALL
+Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
+ jstring host) {
+ const char *hostname;
+ jobject name;
+ jobjectArray ret = 0;
+ int retLen = 0;
+
+ int error=0;
+ struct addrinfo hints, *res, *resNew = NULL;
+
+ if (!initialized) {
+ ni_iacls = (*env)->FindClass(env, "java/net/InetAddress");
+ ni_iacls = (*env)->NewGlobalRef(env, ni_iacls);
+ ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address");
+ ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls);
+ ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
+ ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I");
+ ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I");
+ ni_iahostID = (*env)->GetFieldID(env, ni_iacls, "hostName", "Ljava/lang/String;");
+ initialized = 1;
+ }
+
+ if (IS_NULL(host)) {
+ JNU_ThrowNullPointerException(env, "host is null");
+ return 0;
+ }
+ hostname = JNU_GetStringPlatformChars(env, host, JNI_FALSE);
+ CHECK_NULL_RETURN(hostname, NULL);
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_CANONNAME;
+ hints.ai_family = AF_INET;
+
+ /*
+ * Workaround for Solaris bug 4160367 - if a hostname contains a
+ * white space then 0.0.0.0 is returned
+ */
+ if (isspace((unsigned char)hostname[0])) {
+ JNU_ThrowByName(env, JNU_JAVANETPKG "UnknownHostException",
+ (char *)hostname);
+ JNU_ReleaseStringPlatformChars(env, host, hostname);
+ return NULL;
+ }
+
+ error = getaddrinfo(hostname, NULL, &hints, &res);
+
+ if (error) {
+ /* report error */
+ JNU_ThrowByName(env, JNU_JAVANETPKG "UnknownHostException",
+ (char *)hostname);
+ JNU_ReleaseStringPlatformChars(env, host, hostname);
+ return NULL;
+ } else {
+ int i = 0;
+ struct addrinfo *itr, *last = NULL, *iterator = res;
+ while (iterator != NULL) {
+ int skip = 0;
+ itr = resNew;
+
+ while (itr != NULL) {
+ struct sockaddr_in *addr1, *addr2;
+
+ addr1 = (struct sockaddr_in *)iterator->ai_addr;
+ addr2 = (struct sockaddr_in *)itr->ai_addr;
+ if (addr1->sin_addr.s_addr ==
+ addr2->sin_addr.s_addr) {
+ skip = 1;
+ break;
+ }
+
+ itr = itr->ai_next;
+ }
+
+ if (!skip) {
+ struct addrinfo *next
+ = (struct addrinfo*) malloc(sizeof(struct addrinfo));
+ if (!next) {
+ JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
+ ret = NULL;
+ goto cleanupAndReturn;
+ }
+ memcpy(next, iterator, sizeof(struct addrinfo));
+ next->ai_next = NULL;
+ if (resNew == NULL) {
+ resNew = next;
+ } else {
+ last->ai_next = next;
+ }
+ last = next;
+ i++;
+ }
+ iterator = iterator->ai_next;
+ }
+
+ retLen = i;
+ iterator = resNew;
+ i = 0;
+
+ name = (*env)->NewStringUTF(env, hostname);
+ if (IS_NULL(name)) {
+ goto cleanupAndReturn;
+ }
+
+ ret = (*env)->NewObjectArray(env, retLen, ni_iacls, NULL);
+ if (IS_NULL(ret)) {
+ /* we may have memory to free at the end of this */
+ goto cleanupAndReturn;
+ }
+
+ while (iterator != NULL) {
+ /* We need 4 bytes to store ipv4 address; */
+ int len = 4;
+
+ jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID);
+ if (IS_NULL(iaObj)) {
+ /* we may have memory to free at the end of this */
+ ret = NULL;
+ goto cleanupAndReturn;
+ }
+ (*env)->SetIntField(env, iaObj, ni_iaaddressID,
+ ntohl(((struct sockaddr_in*)(iterator->ai_addr))->sin_addr.s_addr));
+ (*env)->SetObjectField(env, iaObj, ni_iahostID, name);
+ (*env)->SetObjectArrayElement(env, ret, retLen - i -1, iaObj);
+ i++;
+ iterator = iterator->ai_next;
+ }
+ }
+
+cleanupAndReturn:
+ {
+ struct addrinfo *iterator, *tmp;
+ iterator = resNew;
+ while (iterator != NULL) {
+ tmp = iterator;
+ iterator = iterator->ai_next;
+ free(tmp);
+ }
+ JNU_ReleaseStringPlatformChars(env, host, hostname);
+ }
+
+ freeaddrinfo(res);
+
+ return ret;
+
+}
+
+/*
+ * Class: java_net_Inet4AddressImpl
+ * Method: getHostByAddr
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_java_net_Inet4AddressImpl_getHostByAddr(JNIEnv *env, jobject this,
+ jbyteArray addrArray) {
+ jstring ret = NULL;
+
+ char host[NI_MAXHOST+1];
+ jfieldID fid;
+ int error = 0;
+ jint family;
+ struct sockaddr *him ;
+ int len = 0;
+ jbyte caddr[4];
+ jint addr;
+
+ struct sockaddr_in him4;
+ struct sockaddr *sa;
+
+ /*
+ * For IPv4 addresses construct a sockaddr_in structure.
+ */
+ (*env)->GetByteArrayRegion(env, addrArray, 0, 4, caddr);
+ addr = ((caddr[0]<<24) & 0xff000000);
+ addr |= ((caddr[1] <<16) & 0xff0000);
+ addr |= ((caddr[2] <<8) & 0xff00);
+ addr |= (caddr[3] & 0xff);
+ memset((char *) &him4, 0, sizeof(him4));
+ him4.sin_addr.s_addr = (uint32_t) htonl(addr);
+ him4.sin_family = AF_INET;
+ sa = (struct sockaddr *) &him4;
+ len = sizeof(him4);
+
+ error = getnameinfo(sa, len, host, NI_MAXHOST, NULL, 0,
+ NI_NAMEREQD);
+
+ if (!error) {
+ ret = (*env)->NewStringUTF(env, host);
+ }
+
+ if (ret == NULL) {
+ JNU_ThrowByName(env, JNU_JAVANETPKG "UnknownHostException", NULL);
+ }
+
+ return ret;
+
+}
+
+#else /* defined(_ALLBSD_SOURCE) && !defined(HAS_GLIBC_GETHOSTBY_R) */
+
/* the initial size of our hostent buffers */
#define HENT_BUF_SIZE 1024
#define BIG_HENT_BUF_SIZE 10240 /* a jumbo-sized one */
@@ -81,13 +357,13 @@
char buf2[HENT_BUF_SIZE];
int h_error=0;
-#ifdef __GLIBC__
+#ifdef HAS_GLIBC_GETHOSTBY_R
gethostbyname_r(hostname, &res, buf, sizeof(buf), &hp, &h_error);
#else
hp = gethostbyname_r(hostname, &res, buf, sizeof(buf), &h_error);
#endif
if (hp) {
-#ifdef __GLIBC__
+#ifdef HAS_GLIBC_GETHOSTBY_R
gethostbyaddr_r(hp->h_addr, hp->h_length, AF_INET,
&res2, buf2, sizeof(buf2), &hp, &h_error);
#else
@@ -175,7 +451,7 @@
#endif
/* Try once, with our static buffer. */
-#ifdef __GLIBC__
+#ifdef HAS_GLIBC_GETHOSTBY_R
gethostbyname_r(hostname, &res, buf, sizeof(buf), &hp, &h_error);
#else
hp = gethostbyname_r(hostname, &res, buf, sizeof(buf), &h_error);
@@ -188,7 +464,7 @@
*/
if (hp == NULL && errno == ERANGE) {
if ((tmp = (char*)malloc(BIG_HENT_BUF_SIZE))) {
-#ifdef __GLIBC__
+#ifdef HAS_GLIBC_GETHOSTBY_R
gethostbyname_r(hostname, &res, tmp, BIG_HENT_BUF_SIZE,
&hp, &h_error);
#else
@@ -271,7 +547,7 @@
addr |= ((caddr[2] <<8) & 0xff00);
addr |= (caddr[3] & 0xff);
addr = htonl(addr);
-#ifdef __GLIBC__
+#ifdef HAS_GLIBC_GETHOSTBY_R
gethostbyaddr_r((char *)&addr, sizeof(addr), AF_INET, &hent,
buf, sizeof(buf), &hp, &h_error);
#else
@@ -285,7 +561,7 @@
*/
if (hp == NULL && errno == ERANGE) {
if ((tmp = (char*)malloc(BIG_HENT_BUF_SIZE))) {
-#ifdef __GLIBC__
+#ifdef HAS_GLIBC_GETHOSTBY_R
gethostbyaddr_r((char *)&addr, sizeof(addr), AF_INET,
&hent, tmp, BIG_HENT_BUF_SIZE, &hp, &h_error);
#else
@@ -307,6 +583,8 @@
return ret;
}
+#endif /* _ALLBSD_SOURCE */
+
#define SET_NONBLOCKING(fd) { \
int flags = fcntl(fd, F_GETFL); \
flags |= O_NONBLOCK; \
--- ./jdk/src/solaris/native/java/net/Inet6AddressImpl.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/net/Inet6AddressImpl.c 2010-10-31 14:12:37.000000000 -0700
@@ -33,6 +33,9 @@
#include <strings.h>
#include <stdlib.h>
#include <ctype.h>
+#ifdef _ALLBSD_SOURCE
+#include <unistd.h> /* gethostname */
+#endif
#include "jvm.h"
#include "jni_util.h"
@@ -68,10 +71,18 @@
/* Something went wrong, maybe networking is not setup? */
strcpy(hostname, "localhost");
} else {
-#ifdef __linux__
- /* On Linux gethostname() says "host.domain.sun.com". On
+#if defined(__linux__) && defined(_ALLBSD_SOURCE)
+ /* On Linux/FreeBSD gethostname() says "host.domain.sun.com". On
* Solaris gethostname() says "host", so extra work is needed.
*/
+ /*
+ * XXXBSD: Though on FreeBSD it's possible case then hostname does
+ * not contain '.' (depends on previous sethostname() call). Maybe
+ * we need to proceed with Solaris way, but using getnameinfo()
+ * in conjunction with gethostby*() breaks thread-safeness, so
+ * we need to protect all calls to gethostby*() and getnameinfo()
+ * using same mutex.
+ */
#else
/* Solaris doesn't want to give us a fully qualified domain name.
* We do a reverse lookup to try and get one. This works
@@ -107,7 +118,7 @@
}
}
#endif /* AF_INET6 */
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
}
return (*env)->NewStringUTF(env, hostname);
}
--- ./jdk/src/solaris/native/java/net/NetworkInterface.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/net/NetworkInterface.c 2010-10-31 13:48:56.000000000 -0700
@@ -26,6 +26,9 @@
#include <errno.h>
#include <strings.h>
+#if defined(_ALLBSD_SOURCE) && defined(__OpenBSD__)
+#include <sys/types.h>
+#endif
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
@@ -54,6 +57,23 @@
#define _PATH_PROCNET_IFINET6 "/proc/net/if_inet6"
#endif
+#if defined(_ALLBSD_SOURCE)
+#include <sys/param.h>
+#include <sys/ioctl.h>
+#include <sys/sockio.h>
+#if defined(__FreeBSD__) || defined(__APPLE__)
+#include <net/ethernet.h>
+#include <net/if_var.h>
+#elif defined(__OpenBSD__)
+#include <netinet/if_ether.h>
+#elif defined(__NetBSD__)
+#include <net/if_ether.h>
+#endif
+#include <net/if_dl.h>
+#include <netinet/in_var.h>
+#include <ifaddrs.h>
+#endif
+
#include "jvm.h"
#include "jni_util.h"
#include "net_util.h"
@@ -821,11 +841,11 @@
netif *currif = ifs, *parent;
netaddr *addrP;
- #ifdef __solaris__
+#ifdef LIFNAMSIZ
char name[LIFNAMSIZ], vname[LIFNAMSIZ];
- #else
+#else
char name[IFNAMSIZ], vname[IFNAMSIZ];
- #endif
+#endif
char *name_colonP;
int mask;
@@ -1649,3 +1669,307 @@
#endif
+/** BSD **/
+#ifdef _ALLBSD_SOURCE
+/* Open socket for further ioct calls, try v4 socket first and
+ * if it falls return v6 socket
+ */
+
+#ifdef AF_INET6
+static int openSocketWithFallback(JNIEnv *env, const char *ifname){
+ int sock;
+ struct ifreq if2;
+
+ if ((sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ if (errno == EPROTONOSUPPORT){
+ if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
+ return -1;
+ }
+ }
+ else{ // errno is not NOSUPPORT
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
+ return -1;
+ }
+ }
+
+ return sock;
+}
+
+#else
+static int openSocketWithFallback(JNIEnv *env, const char *ifname){
+ return openSocket(env,AF_INET);
+}
+#endif
+
+/*
+ * Enumerates and returns all IPv4 interfaces
+ */
+static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) {
+ struct ifaddrs *ifa, *origifa;
+
+ if (getifaddrs(&origifa) != 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "getifaddrs() function failed");
+ return ifs;
+ }
+
+ for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
+
+ /*
+ * Skip non-AF_INET entries.
+ */
+ if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_INET)
+ continue;
+
+ /*
+ * Add to the list.
+ */
+ ifs = addif(env, sock, ifa->ifa_name, ifs, ifa->ifa_addr, AF_INET, 0);
+
+ /*
+ * If an exception occurred then free the list.
+ */
+ if ((*env)->ExceptionOccurred(env)) {
+ freeifaddrs(origifa);
+ freeif(ifs);
+ return NULL;
+ }
+ }
+
+ /*
+ * Free socket and buffer
+ */
+ freeifaddrs(origifa);
+ return ifs;
+}
+
+
+/*
+ * Enumerates and returns all IPv6 interfaces on Linux
+ */
+
+#ifdef AF_INET6
+/*
+ * Determines the prefix on BSD for IPv6 interfaces.
+ */
+static
+int prefix(void *val, int size) {
+ u_char *name = (u_char *)val;
+ int byte, bit, plen = 0;
+
+ for (byte = 0; byte < size; byte++, plen += 8)
+ if (name[byte] != 0xff)
+ break;
+ if (byte == size)
+ return (plen);
+ for (bit = 7; bit != 0; bit--, plen++)
+ if (!(name[byte] & (1 << bit)))
+ break;
+ for (; bit != 0; bit--)
+ if (name[byte] & (1 << bit))
+ return (0);
+ byte++;
+ for (; byte < size; byte++)
+ if (name[byte])
+ return (0);
+ return (plen);
+}
+
+/*
+ * Enumerates and returns all IPv6 interfaces on BSD
+ */
+static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) {
+ struct ifaddrs *ifa, *origifa;
+ struct sockaddr_in6 *sin6;
+ struct in6_ifreq ifr6;
+
+ if (getifaddrs(&origifa) != 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "getifaddrs() function failed");
+ return ifs;
+ }
+
+ for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
+
+ /*
+ * Skip non-AF_INET6 entries.
+ */
+ if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_INET6)
+ continue;
+
+ memset(&ifr6, 0, sizeof(ifr6));
+ strlcpy(ifr6.ifr_name, ifa->ifa_name, sizeof(ifr6.ifr_name));
+ memcpy(&ifr6.ifr_addr, ifa->ifa_addr, MIN(sizeof(ifr6.ifr_addr), ifa->ifa_addr->sa_len));
+
+ if (ioctl(sock, SIOCGIFNETMASK_IN6, (caddr_t)&ifr6) < 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "ioctl SIOCGIFNETMASK_IN6 failed");
+ freeifaddrs(origifa);
+ freeif(ifs);
+ return NULL;
+ }
+
+ /* Add to the list. */
+ sin6 = (struct sockaddr_in6 *)&ifr6.ifr_addr;
+ ifs = addif(env, sock, ifa->ifa_name, ifs, ifa->ifa_addr, AF_INET6,
+ prefix(&sin6->sin6_addr, sizeof(struct in6_addr)));
+
+ /* If an exception occurred then free the list. */
+ if ((*env)->ExceptionOccurred(env)) {
+ freeifaddrs(origifa);
+ freeif(ifs);
+ return NULL;
+ }
+ }
+
+ /*
+ * Free socket and ifaddrs buffer
+ */
+ freeifaddrs(origifa);
+ return ifs;
+}
+#endif
+
+static int getIndex(int sock, const char *name){
+#ifdef __FreeBSD__
+ /*
+ * Try to get the interface index
+ * (Not supported on Solaris 2.6 or 7)
+ */
+ struct ifreq if2;
+ strcpy(if2.ifr_name, name);
+
+ if (ioctl(sock, SIOCGIFINDEX, (char *)&if2) < 0) {
+ return -1;
+ }
+
+ return if2.ifr_index;
+#else
+ /*
+ * Try to get the interface index using BSD specific if_nametoindex
+ */
+ int index = if_nametoindex(name);
+ return (index == 0) ? -1 : index;
+#endif
+}
+
+/**
+ * Returns the IPv4 broadcast address of a named interface, if it exists.
+ * Returns 0 if it doesn't have one.
+ */
+static struct sockaddr *getBroadcast(JNIEnv *env, int sock, const char *ifname, struct sockaddr *brdcast_store) {
+ struct sockaddr *ret = NULL;
+ struct ifreq if2;
+
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.ifr_name, ifname);
+
+ /* Let's make sure the interface does have a broadcast address */
+ if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFFLAGS failed");
+ return ret;
+ }
+
+ if (if2.ifr_flags & IFF_BROADCAST) {
+ /* It does, let's retrieve it*/
+ if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFBRDADDR failed");
+ return ret;
+ }
+
+ ret = brdcast_store;
+ memcpy(ret, &if2.ifr_broadaddr, sizeof(struct sockaddr));
+ }
+
+ return ret;
+}
+
+/**
+ * Returns the IPv4 subnet prefix length (aka subnet mask) for the named
+ * interface, if it has one, otherwise return -1.
+ */
+static short getSubnet(JNIEnv *env, int sock, const char *ifname) {
+ unsigned int mask;
+ short ret;
+ struct ifreq if2;
+
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.ifr_name, ifname);
+
+ if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFNETMASK failed");
+ return -1;
+ }
+
+ mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr);
+ ret = 0;
+ while (mask) {
+ mask <<= 1;
+ ret++;
+ }
+
+ return ret;
+}
+
+/**
+ * Get the Hardware address (usually MAC address) for the named interface.
+ * return puts the data in buf, and returns the length, in byte, of the
+ * MAC address. Returns -1 if there is no hardware address on that interface.
+ */
+static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf) {
+ struct ifaddrs *ifa0, *ifa;
+ struct sockaddr *saddr;
+ int i;
+
+ /* Grab the interface list */
+ if (!getifaddrs(&ifa0)) {
+ /* Cycle through the interfaces */
+ for (i = 0, ifa = ifa0; ifa != NULL; ifa = ifa->ifa_next, i++) {
+ saddr = ifa->ifa_addr;
+ /* Link layer contains the MAC address */
+ if (saddr->sa_family == AF_LINK && !strcmp(ifname, ifa->ifa_name)) {
+ struct sockaddr_dl *sadl = (struct sockaddr_dl *) saddr;
+ /* Check the address is the correct length */
+ if (sadl->sdl_alen == ETHER_ADDR_LEN) {
+ memcpy(buf, (sadl->sdl_data + sadl->sdl_nlen), ETHER_ADDR_LEN);
+ freeifaddrs(ifa0);
+ return ETHER_ADDR_LEN;
+ }
+ }
+ }
+ freeifaddrs(ifa0);
+ }
+
+ return -1;
+}
+
+static int getMTU(JNIEnv *env, int sock, const char *ifname) {
+ struct ifreq if2;
+
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.ifr_name, ifname);
+
+ if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
+ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFMTU failed");
+ return -1;
+ }
+
+ return if2.ifr_mtu;
+}
+
+static int getFlags(int sock, const char *ifname) {
+ struct ifreq if2;
+ int ret = -1;
+
+ memset((char *) &if2, 0, sizeof(if2));
+ strcpy(if2.ifr_name, ifname);
+
+ if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0){
+ return -1;
+ }
+
+ return if2.ifr_flags;
+}
+
+#endif
--- ./jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2010-10-31 14:12:37.000000000 -0700
@@ -23,12 +23,12 @@
* questions.
*/
+#include <sys/types.h>
+#include <sys/socket.h>
#include <errno.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
#ifdef __solaris__
#include <fcntl.h>
@@ -331,7 +331,7 @@
/* The fdObj'fd */
jint fd;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
SOCKADDR addr;
int len;
#endif
@@ -341,26 +341,39 @@
}
fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#ifdef __linux__
if (isOldKernel) {
int t = 1;
setsockopt(fd, SOL_SOCKET, SO_BSDCOMPAT, (char*) &t, sizeof(int));
} else {
+#endif /* __linux__ */
memset(&addr, 0, sizeof(addr));
#ifdef AF_INET6
if (ipv6_available()) {
struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)&addr;
+#ifdef __FreeBSD__
+ him6->sin6_family = AF_INET6;
+#else
him6->sin6_family = AF_UNSPEC;
+#endif
len = sizeof(struct sockaddr_in6);
} else
#endif
{
struct sockaddr_in *him4 = (struct sockaddr_in*)&addr;
+#ifdef __FreeBSD__
+ him4->sin_family = AF_INET;
+#else
him4->sin_family = AF_UNSPEC;
+#endif
len = sizeof(struct sockaddr_in);
}
JVM_Connect(fd, (struct sockaddr *)&addr, len);
+ /* XXXBSD: here we can get EADDRNOTAVAIL which need to be ignored
+ but since return value is not checked, ignore it */
+#ifdef __linux__
// After disconnecting a UDP socket, Linux kernel will set
// local port to zero if the port number comes from implicit
// bind. Successive send/recv on the same socket will fail.
@@ -383,6 +396,7 @@
NET_Bind(fd, (struct sockaddr *)&addr, len);
}
}
+#endif
#else
JVM_Connect(fd, 0, 0);
#endif
@@ -2400,18 +2414,30 @@
mname6.ipv6mr_interface = idx;
}
+#if defined(_ALLBSD_SOURCE)
+#define ADD_MEMBERSHIP IPV6_JOIN_GROUP
+#define DRP_MEMBERSHIP IPV6_LEAVE_GROUP
+#define S_ADD_MEMBERSHIP "IPV6_JOIN_GROUP"
+#define S_DRP_MEMBERSHIP "IPV6_LEAVE_GROUP"
+#else
+#define ADD_MEMBERSHIP IPV6_ADD_MEMBERSHIP
+#define DRP_MEMBERSHIP IPV6_DROP_MEMBERSHIP
+#define S_ADD_MEMBERSHIP "IPV6_ADD_MEMBERSHIP"
+#define S_DRP_MEMBERSHIP "IPV6_DROP_MEMBERSHIP"
+#endif
+
/* Join the multicast group */
- if (JVM_SetSockOpt(fd, IPPROTO_IPV6, (join ? IPV6_ADD_MEMBERSHIP : IPV6_DROP_MEMBERSHIP),
+ if (JVM_SetSockOpt(fd, IPPROTO_IPV6, (join ? ADD_MEMBERSHIP : DRP_MEMBERSHIP),
(char *) &mname6, sizeof (mname6)) < 0) {
if (join) {
- NET_ThrowCurrent(env, "setsockopt IPV6_ADD_MEMBERSHIP failed");
+ NET_ThrowCurrent(env, "setsockopt " S_ADD_MEMBERSHIP " failed");
} else {
if (errno == ENOENT) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
"Not a member of the multicast group");
} else {
- NET_ThrowCurrent(env, "setsockopt IPV6_DROP_MEMBERSHIP failed");
+ NET_ThrowCurrent(env, "setsockopt " S_DRP_MEMBERSHIP " failed");
}
}
}
--- ./jdk/src/solaris/native/java/net/PlainSocketImpl.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/net/PlainSocketImpl.c 2010-10-31 14:12:37.000000000 -0700
@@ -483,9 +483,11 @@
if (connect_rv == JVM_IO_INTR) {
JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
"operation interrupted");
+#if defined(EPROTO)
} else if (errno == EPROTO) {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ProtocolException",
"Protocol error");
+#endif
} else if (errno == ECONNREFUSED) {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException",
"Connection refused");
@@ -1001,7 +1003,7 @@
*/
if (cmd == java_net_SocketOptions_SO_BINDADDR) {
SOCKADDR him;
- socklen_t len = 0;
+ socklen_t len;
int port;
jobject iaObj;
jclass iaCntrClass;
--- ./jdk/src/solaris/native/java/net/bsd_close.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/java/net/bsd_close.c 2010-07-04 12:40:44.000000000 -0700
@@ -57,7 +57,7 @@
/*
* Signal to unblock thread
*/
-static int sigWakeup = (__SIGRTMAX - 2);
+static int sigWakeup = SIGIO;
/*
* The fd table and the number of file descriptors
@@ -281,9 +281,7 @@
int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
struct sockaddr *from, int *fromlen) {
- socklen_t socklen = *fromlen;
- BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) );
- *fromlen = socklen;
+ BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, fromlen) );
}
int NET_Send(int s, void *msg, int len, unsigned int flags) {
@@ -300,9 +298,11 @@
}
int NET_Accept(int s, struct sockaddr *addr, int *addrlen) {
- socklen_t socklen = *addrlen;
- BLOCKING_IO_RETURN_INT( s, accept(s, addr, &socklen) );
- *addrlen = socklen;
+ socklen_t len = *addrlen;
+ int error = accept(s, addr, &len);
+ if (error != -1)
+ *addrlen = (int)len;
+ BLOCKING_IO_RETURN_INT( s, error );
}
int NET_Connect(int s, struct sockaddr *addr, int addrlen) {
--- ./jdk/src/solaris/native/java/net/net_util_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/net/net_util_md.c 2010-10-31 14:12:37.000000000 -0700
@@ -34,6 +34,15 @@
#include <stdlib.h>
#include <dlfcn.h>
+#ifdef _ALLBSD_SOURCE
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#endif
+
+#ifdef __OpenBSD__
+#include <sys/socketvar.h>
+#endif
+
#ifdef __solaris__
#include <sys/sockio.h>
#include <stropts.h>
@@ -220,6 +229,14 @@
return (*env)->GetFieldID(env, cls, "fd", "I");
}
+#if defined(DONT_ENABLE_IPV6)
+jint IPv6_supported()
+{
+ return JNI_FALSE;
+}
+
+#else /* !DONT_ENABLE_IPV6 */
+
jint IPv6_supported()
{
#ifndef AF_INET6
@@ -358,6 +375,7 @@
return JNI_TRUE;
#endif /* AF_INET6 */
}
+#endif /* DONT_ENABLE_IPV6 */
void ThrowUnknownHostExceptionWithGaiError(JNIEnv *env,
const char* hostname,
@@ -720,6 +738,10 @@
him6->sin6_family = AF_INET6;
*len = sizeof(struct sockaddr_in6) ;
+#if defined(_ALLBSD_SOURCE) && defined(_AF_INET6)
+// XXXBSD: should we do something with scope id here ? see below linux comment
+#endif
+
/*
* On Linux if we are connecting to a link-local address
* we need to specify the interface in the scope_id (2.4 kernel only)
@@ -1126,7 +1148,6 @@
*len = socklen;
}
#endif
-
if (rv < 0) {
return rv;
}
@@ -1173,6 +1194,24 @@
#define IPTOS_PREC_MASK 0xe0
#endif
+#if defined(_ALLBSD_SOURCE)
+#if defined(KIPC_MAXSOCKBUF)
+ int mib[3];
+ size_t rlen;
+#endif
+
+ int *bufsize;
+
+#ifdef __APPLE__
+ static int maxsockbuf = -1;
+#else
+ static long maxsockbuf = -1;
+#endif
+
+ int addopt;
+ struct linger *ling;
+#endif
+
/*
* IPPROTO/IP_TOS :-
* 1. IPv6 on Solaris: no-op and will be set in flowinfo
@@ -1205,6 +1244,10 @@
*iptos &= (IPTOS_TOS_MASK | IPTOS_PREC_MASK);
}
+#if defined(AF_INET6) && defined(_ALLBSD_SOURCE)
+// XXXBSD: to be implemented ?
+#endif
+
/*
* SOL_SOCKET/{SO_SNDBUF,SO_RCVBUF} - On Solaris we may need to clamp
* the value when it exceeds the system limit.
@@ -1212,7 +1255,8 @@
#ifdef __solaris__
if (level == SOL_SOCKET) {
if (opt == SO_SNDBUF || opt == SO_RCVBUF) {
- int sotype, arglen;
+ int sotype;
+ socklen_t arglen;
int *bufsize, maxbuf;
int ret;
@@ -1259,6 +1303,84 @@
}
#endif
+#if defined(_ALLBSD_SOURCE)
+ /*
+ * SOL_SOCKET/{SO_SNDBUF,SO_RCVBUF} - On FreeBSD need to
+ * ensure that value is <= kern.ipc.maxsockbuf as otherwise we get
+ * an ENOBUFS error.
+ */
+ if (level == SOL_SOCKET) {
+ if (opt == SO_SNDBUF || opt == SO_RCVBUF) {
+#ifdef KIPC_MAXSOCKBUF
+ if (maxsockbuf == -1) {
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_IPC;
+ mib[2] = KIPC_MAXSOCKBUF;
+ rlen = sizeof(maxsockbuf);
+ if (sysctl(mib, 3, &maxsockbuf, &rlen, NULL, 0) == -1)
+ maxsockbuf = 1024;
+
+#if 1
+ /* XXXBSD: This is a hack to workaround mb_max/mb_max_adj
+ problem. It should be removed when kern.ipc.maxsockbuf
+ will be real value. */
+ maxsockbuf = (maxsockbuf/5)*4;
+#endif
+ }
+#elif defined(__OpenBSD__)
+ maxsockbuf = SB_MAX;
+#else
+ maxsockbuf = 64 * 1024; /* XXX: NetBSD */
+#endif
+
+ bufsize = (int *)arg;
+ if (*bufsize > maxsockbuf) {
+ *bufsize = maxsockbuf;
+ }
+
+ if (opt == SO_RCVBUF && *bufsize < 1024) {
+ *bufsize = 1024;
+ }
+
+ }
+ }
+
+ /*
+ * On Solaris, SO_REUSEADDR will allow multiple datagram
+ * sockets to bind to the same port. The network jck tests
+ * for this "feature", so we need to emulate it by turning on
+ * SO_REUSEPORT as well for that combination.
+ */
+ if (level == SOL_SOCKET && opt == SO_REUSEADDR) {
+ int sotype;
+ socklen_t arglen;
+
+ arglen = sizeof(sotype);
+ if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (void *)&sotype, &arglen) < 0) {
+ return -1;
+ }
+
+ if (sotype == SOCK_DGRAM) {
+ addopt = SO_REUSEPORT;
+ setsockopt(fd, level, addopt, arg, len);
+ }
+ }
+
+ /*
+ * Don't allow SO_LINGER value to be too big.
+ * Current max value (240) is empiric value based on tcp_timer.h's
+ * constant TCP_LINGERTIME, which was doubled.
+ *
+ * XXXBSD: maybe we should step it down to 120 ?
+ */
+ if (level == SOL_SOCKET && opt == SO_LINGER) {
+ ling = (struct linger *)arg;
+ if (ling->l_linger > 240 || ling->l_linger < 0) {
+ ling->l_linger = 240;
+ }
+ }
+#endif
+
return setsockopt(fd, level, opt, arg, len);
}
@@ -1309,7 +1431,8 @@
* corresponding IPv4 port is in use.
*/
if (ipv6_available()) {
- int arg, len;
+ int arg;
+ socklen_t len;
len = sizeof(arg);
if (getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&arg,
--- ./jdk/src/solaris/native/java/net/net_util_md.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/net/net_util_md.h 2010-10-31 14:12:37.000000000 -0700
@@ -37,7 +37,7 @@
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(__FreeBSD__)
extern int NET_Timeout(int s, long timeout);
extern int NET_Read(int s, void* buf, size_t len);
extern int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
--- ./jdk/src/solaris/native/java/util/FileSystemPreferences.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/util/FileSystemPreferences.c 2010-06-15 22:07:35.000000000 -0700
@@ -47,8 +47,11 @@
return (jint) result;
}
-
+#if defined(_ALLBSD_SOURCE)
+typedef struct flock FLOCK;
+#else
typedef struct flock64 FLOCK;
+#endif
/**
* Try to open a named lock file.
@@ -86,7 +89,11 @@
if (fd < 0) {
result[0] = 0;
} else {
+#if defined(_ALLBSD_SOURCE)
+ rc = fcntl(fd, F_SETLK, &fl);
+#else
rc = fcntl(fd, F_SETLK64, &fl);
+#endif
result[1] = errno;
if (rc < 0) {
result[0]= 0;
@@ -116,7 +123,11 @@
fl.l_start = 0;
fl.l_type = F_UNLCK;
+#if defined(_ALLBSD_SOURCE)
+ rc = fcntl(fd, F_SETLK, &fl);
+#else
rc = fcntl(fd, F_SETLK64, &fl);
+#endif
if (rc < 0) {
close(fd);
--- ./jdk/src/solaris/native/java/util/TimeZone_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/java/util/TimeZone_md.c 2010-06-15 22:07:35.000000000 -0700
@@ -31,7 +31,7 @@
#include <errno.h>
#include <stddef.h>
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
@@ -49,7 +49,11 @@
#define fileclose fclose
#endif
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+
#ifdef __linux__
+static const char *sysconfig_clock_file = "/etc/sysconfig/clock";
+#endif
static const char *ETC_TIMEZONE_FILE = "/etc/timezone";
static const char *ZONEINFO_DIR = "/usr/share/zoneinfo";
@@ -199,7 +203,9 @@
int fd;
char *buf;
size_t size;
+ char zoneinfo_file[PATH_MAX+1];
+#ifdef __linux__
/*
* Try reading the /etc/timezone file for Debian distros. There's
* no spec of the file format available. This parsing assumes that
@@ -223,6 +229,7 @@
return tz;
}
}
+#endif /* __linux__ */
/*
* Next, try /etc/localtime to find the zone ID.
@@ -231,6 +238,10 @@
return NULL;
}
+ strncpy(zoneinfo_file, DEFAULT_ZONEINFO_FILE, PATH_MAX);
+ zoneinfo_file[PATH_MAX] = '\0';
+
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
/*
* If it's a symlink, get the link name and its zone ID part. (The
* older versions of timeconfig created a symlink as described in
@@ -239,21 +250,25 @@
* from /etc/localtime.)
*/
if (S_ISLNK(statbuf.st_mode)) {
- char linkbuf[PATH_MAX+1];
int len;
- if ((len = readlink(DEFAULT_ZONEINFO_FILE, linkbuf, sizeof(linkbuf)-1)) == -1) {
+ if ((len = readlink(DEFAULT_ZONEINFO_FILE, zoneinfo_file, sizeof(zoneinfo_file)-1)) == -1) {
jio_fprintf(stderr, (const char *) "can't get a symlink of %s\n",
DEFAULT_ZONEINFO_FILE);
return NULL;
}
- linkbuf[len] = '\0';
- tz = getZoneName(linkbuf);
+ zoneinfo_file[len] = '\0';
+ tz = getZoneName(zoneinfo_file);
if (tz != NULL) {
tz = strdup(tz);
+ return tz;
+ } else {
+ if (lstat(zoneinfo_file, &statbuf) == -1) {
+ return NULL;
+ }
}
- return tz;
}
+#endif /* __linux__ || _ALLBSD_SOURCE */
/*
* If it's a regular file, we need to find out the same zoneinfo file
@@ -264,7 +279,7 @@
if (buf == NULL) {
return NULL;
}
- if ((fd = open(DEFAULT_ZONEINFO_FILE, O_RDONLY)) == -1) {
+ if ((fd = open(zoneinfo_file, O_RDONLY)) == -1) {
free((void *) buf);
return NULL;
}
@@ -493,7 +508,7 @@
tz = getenv("TZ");
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
if (tz == NULL) {
#else
#ifdef __solaris__
@@ -532,19 +547,32 @@
{
time_t offset;
char sign, buf[16];
+#if defined(_ALLBSD_SOURCE)
+ struct tm *local_tm;
+ time_t clock;
+
+ clock = time(NULL);
+ tzset();
+ local_tm = localtime(&clock);
+ if (local_tm->tm_gmtoff >= 0) {
+ offset = (time_t) local_tm->tm_gmtoff;
+ sign = "+";
+ } else {
+ offset = (time_t) -local_tm->tm_gmtoff;
+ sign = "-";
+ }
+#else
if (timezone == 0) {
return strdup("GMT");
- }
-
- /* Note that the time offset direction is opposite. */
- if (timezone > 0) {
+ } else if (timezone > 0) {
offset = timezone;
sign = '-';
} else {
offset = -timezone;
sign = '+';
}
+#endif
sprintf(buf, (const char *)"GMT%c%02d:%02d",
sign, (int)(offset/3600), (int)((offset%3600)/60));
return strdup(buf);
--- ./jdk/src/solaris/native/sun/awt/CUPSfuncs.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/CUPSfuncs.c 2010-06-15 22:07:35.000000000 -0700
@@ -25,6 +25,7 @@
#include <jni.h>
#include <jni_util.h>
+#include <jvm_md.h>
#include <dlfcn.h>
#include <cups/cups.h>
#include <cups/ppd.h>
@@ -65,10 +66,11 @@
JNIEXPORT jboolean JNICALL
Java_sun_print_CUPSPrinter_initIDs(JNIEnv *env,
jobject printObj) {
- void *handle = dlopen("libcups.so.2", RTLD_LAZY | RTLD_GLOBAL);
+ void *handle = dlopen(VERSIONED_JNI_LIB_NAME("cups", "2"),
+ RTLD_LAZY | RTLD_GLOBAL);
if (handle == NULL) {
- handle = dlopen("libcups.so", RTLD_LAZY | RTLD_GLOBAL);
+ handle = dlopen(JNI_LIB_NAME("cups"), RTLD_LAZY | RTLD_GLOBAL);
if (handle == NULL) {
return JNI_FALSE;
}
--- ./jdk/src/solaris/native/sun/awt/VDrawingArea.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/VDrawingArea.c 2010-06-15 22:07:35.000000000 -0700
@@ -31,7 +31,11 @@
#endif /* !HEADLESS */
#include <stdio.h>
+#if defined(_ALLBSD_SOURCE)
+#include <stdlib.h>
+#else
#include <malloc.h>
+#endif
#ifdef __linux__
/* XXX: Shouldn't be necessary. */
--- ./jdk/src/solaris/native/sun/awt/X11Color.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/X11Color.c 2010-06-15 22:07:35.000000000 -0700
@@ -33,7 +33,9 @@
#include <math.h>
#include <sys/time.h>
#include <sys/resource.h>
+#if !defined(_ALLBSD_SOURCE)
#include <alloca.h>
+#endif
#ifndef HEADLESS
#include <X11/Xlib.h>
#include <X11/Xatom.h>
--- ./jdk/src/solaris/native/sun/awt/XDrawingArea.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/XDrawingArea.c 2010-06-15 22:07:35.000000000 -0700
@@ -31,7 +31,11 @@
#include <Xm/XmP.h>
#include <stdio.h>
+#if defined(_ALLBSD_SOURCE)
+#include <stdlib.h>
+#else
#include <malloc.h>
+#endif
#ifdef DEBUG
#include <jvm.h> /* To get jio_fprintf() */
--- ./jdk/src/solaris/native/sun/awt/awt_Font.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/awt_Font.c 2010-06-15 22:07:35.000000000 -0700
@@ -334,7 +334,7 @@
if (strcmp(style, "regular") == 0) {
altstyle = "roman";
}
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
if (!strcmp(family, "lucidasans")) {
family = "lucida";
}
--- ./jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c 2010-06-15 22:07:35.000000000 -0700
@@ -40,6 +40,7 @@
#include <jni.h>
#include <jni_util.h>
#include <jvm.h>
+#include <jvm_md.h>
#include <jlong.h>
#include <stdlib.h>
@@ -122,7 +123,7 @@
*/
#define MAXFRAMEBUFFERS 16
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
typedef struct {
int screen_number;
short x_org;
@@ -427,6 +428,11 @@
{
xrenderLibHandle = dlopen("libXrender.so.1", RTLD_LAZY | RTLD_GLOBAL);
+ if (xrenderLibHandle == NULL) {
+ xrenderLibHandle = dlopen("libXrender.so",
+ RTLD_LAZY | RTLD_GLOBAL);
+ }
+
#ifndef __linux__ /* SOLARIS */
if (xrenderLibHandle == NULL) {
xrenderLibHandle = dlopen("/usr/sfw/lib/libXrender.so.1",
@@ -640,19 +646,22 @@
#endif /* HEADLESS */
#ifndef HEADLESS
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
static void xinerama_init_linux()
{
- void* libHandle = 0;
- char* XineramaLibName= "libXinerama.so.1";
+ void* libHandle = NULL;
int32_t locNumScr = 0;
XineramaScreenInfo *xinInfo;
char* XineramaQueryScreensName = "XineramaQueryScreens";
XineramaQueryScreensFunc* XineramaQueryScreens = NULL;
/* load library */
- libHandle = dlopen(XineramaLibName, RTLD_LAZY | RTLD_GLOBAL);
- if (libHandle != 0) {
+ libHandle = dlopen(VERSIONED_JNI_LIB_NAME("Xinerama", "1"),
+ RTLD_LAZY | RTLD_GLOBAL);
+ if (libHandle == NULL) {
+ libHandle = dlopen(JNI_LIB_NAME("Xinerama"), RTLD_LAZY | RTLD_GLOBAL);
+ }
+ if (libHandle != NULL) {
XineramaQueryScreens = (XineramaQueryScreensFunc*)
dlsym(libHandle, XineramaQueryScreensName);
@@ -688,11 +697,10 @@
}
}
#endif
-#ifndef __linux__ /* Solaris */
+#if !defined(__linux__) && !defined(_ALLBSD_SOURCE) /* Solaris */
static void xinerama_init_solaris()
{
- void* libHandle = 0;
- char* XineramaLibName= "libXext.so";
+ void* libHandle = NULL;
unsigned char fbhints[MAXFRAMEBUFFERS];
int32_t locNumScr = 0;
/* load and run XineramaGetInfo */
@@ -701,8 +709,8 @@
XineramaGetInfoFunc* XineramaSolarisFunc = NULL;
/* load library */
- libHandle = dlopen(XineramaLibName, RTLD_LAZY | RTLD_GLOBAL);
- if (libHandle != 0) {
+ libHandle = dlopen(JNI_LIB_NAME("Xext"), RTLD_LAZY | RTLD_GLOBAL);
+ if (libHandle != NULL) {
XineramaSolarisFunc = (XineramaGetInfoFunc*)dlsym(libHandle, XineramaGetInfoName);
XineramaSolarisCenterFunc =
(XineramaGetCenterHintFunc*)dlsym(libHandle, XineramaGetCenterHintName);
@@ -749,11 +757,11 @@
}
DTRACE_PRINTLN("Xinerama extension is available");
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
xinerama_init_linux();
#else /* Solaris */
xinerama_init_solaris();
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
}
#endif /* HEADLESS */
@@ -1628,7 +1636,7 @@
{
jobject point = NULL;
#ifndef HEADLESS /* return NULL in HEADLESS, Linux */
-#ifndef __linux__
+#if !defined(__linux__) && !defined(_ALLBSD_SOURCE)
int x,y;
AWT_LOCK();
@@ -1641,7 +1649,7 @@
DTRACE_PRINTLN("unable to call XineramaSolarisCenterFunc: symbol is null");
}
AWT_FLUSH_UNLOCK();
-#endif /* __linux __ */
+#endif /* __linux __ || _ALLBSD_SOURCE */
#endif /* HEADLESS */
return point;
}
@@ -1711,7 +1719,11 @@
{
int rr_maj_ver = 0, rr_min_ver = 0;
- void *pLibRandR = dlopen("libXrandr.so.2", RTLD_LAZY | RTLD_LOCAL);
+ void *pLibRandR = dlopen(VERSIONED_JNI_LIB_NAME("Xrandr", "2"),
+ RTLD_LAZY | RTLD_LOCAL);
+ if (pLibRandR == NULL) {
+ pLibRandR = dlopen(JNI_LIB_NAME("Xrandr"), RTLD_LAZY | RTLD_LOCAL);
+ }
if (pLibRandR == NULL) {
J2dRlsTraceLn(J2D_TRACE_ERROR,
"X11GD_InitXrandrFuncs: Could not open libXrandr.so.2");
--- ./jdk/src/solaris/native/sun/awt/awt_InputMethod.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/awt_InputMethod.c 2010-10-31 14:18:11.000000000 -0700
@@ -67,7 +67,7 @@
XIMPreeditDrawCallbackStruct *);
static void PreeditCaretCallback(XIC, XPointer,
XIMPreeditCaretCallbackStruct *);
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
static void StatusStartCallback(XIC, XPointer, XPointer);
static void StatusDoneCallback(XIC, XPointer, XPointer);
static void StatusDrawCallback(XIC, XPointer,
@@ -81,7 +81,7 @@
#define PreeditDoneIndex 1
#define PreeditDrawIndex 2
#define PreeditCaretIndex 3
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#define StatusStartIndex 4
#define StatusDoneIndex 5
#define StatusDrawIndex 6
@@ -99,14 +99,14 @@
(XIMProc)PreeditDoneCallback,
(XIMProc)PreeditDrawCallback,
(XIMProc)PreeditCaretCallback,
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
(XIMProc)StatusStartCallback,
(XIMProc)StatusDoneCallback,
(XIMProc)StatusDrawCallback,
#endif
};
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#define MAX_STATUS_LEN 100
typedef struct {
Window w; /*status window id */
@@ -146,7 +146,7 @@
#endif /* XAWT */
jobject x11inputmethod; /* global ref to X11InputMethod instance */
/* associated with the XIC */
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
StatusWindow *statusWindow; /* our own status window */
#else
#ifndef XAWT
@@ -425,7 +425,7 @@
static void
freeX11InputMethodData(JNIEnv *env, X11InputMethodData *pX11IMData)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
if (pX11IMData->statusWindow != NULL){
StatusWindow *sw = pX11IMData->statusWindow;
XFreeGC(awt_display, sw->lightGC);
@@ -531,7 +531,7 @@
pX11IMData = getX11InputMethodData(env, currentX11InputMethodInstance);
if (pX11IMData == NULL) {
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
return False;
#else
return result;
@@ -539,7 +539,7 @@
}
if ((ic = pX11IMData->current_ic) == (XIC)0){
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
return False;
#else
return result;
@@ -648,7 +648,7 @@
return result;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
static StatusWindow *createStatusWindow(
#ifdef XAWT
Window parent) {
@@ -993,7 +993,7 @@
}
}
}
-#endif /*__linux__*/
+#endif /* __linux__ || _ALLBSD_SOURCE */
/*
* Creates two XICs, one for active clients and the other for passive
* clients. All information on those XICs are stored in the
@@ -1050,7 +1050,7 @@
return FALSE ;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
on_the_spot_styles |= XIMStatusNothing;
/*kinput does not support XIMPreeditCallbacks and XIMStatusArea
@@ -1063,7 +1063,7 @@
break;
}
}
-#else /*! __linux__ */
+#else /*! __linux__ && !_ALLBSD_SOURCE */
#ifdef XAWT
on_the_spot_styles |= XIMStatusNothing;
#else /* !XAWT */
@@ -1086,7 +1086,7 @@
on_the_spot_styles |= XIMStatusNothing;
#endif /* XAWT */
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
for (i = 0; i < im_styles->count_styles; i++) {
active_styles |= im_styles->supported_styles[i] & on_the_spot_styles;
@@ -1134,7 +1134,7 @@
NULL);
if (preedit == (XVaNestedList)NULL)
goto err;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
/*always try XIMStatusCallbacks for active client...*/
{
status = (XVaNestedList)XVaCreateNestedList(0,
@@ -1156,7 +1156,7 @@
XFree((void *)status);
XFree((void *)preedit);
}
-#else /* !__linux__ */
+#else /* !__linux__ && !_ALLBSD_SOURCE */
#ifndef XAWT
if (on_the_spot_styles & XIMStatusArea) {
Widget parent;
@@ -1184,7 +1184,7 @@
}
#endif /* XAWT */
XFree((void *)preedit);
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
pX11IMData->ic_passive = XCreateIC(X11im,
XNClientWindow, w,
XNFocusWindow, w,
@@ -1343,7 +1343,7 @@
}
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
static void
StatusStartCallback(XIC ic, XPointer client_data, XPointer call_data)
{
@@ -1411,7 +1411,7 @@
finally:
AWT_UNLOCK();
}
-#endif /*__linux__*/
+#endif /* __linux__ || _ALLBSD_SOURCE */
static void CommitStringCallback(XIC ic, XPointer client_data, XPointer call_data) {
JNIEnv *env = GetJNIEnv();
@@ -1517,14 +1517,14 @@
/* Use IMInstantiate call back only on Linux, as there is a bug in Solaris
(4768335)
*/
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
registered = XRegisterIMInstantiateCallback(dpy, NULL, NULL,
NULL, (XIDProc)OpenXIMCallback, NULL);
if (!registered) {
/* directly call openXIM callback */
#endif
OpenXIMCallback(dpy, NULL, NULL);
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
}
#endif
@@ -1588,13 +1588,13 @@
#endif /* XAWT */
globalRef = (*env)->NewGlobalRef(env, this);
pX11IMData->x11inputmethod = globalRef;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
pX11IMData->statusWindow = NULL;
-#else /* __linux__ */
+#else /* !__linux__ && !_ALLBSD_SOURCE */
#ifndef XAWT
pX11IMData->statusWidget = (Widget) NULL;
#endif /* XAWT */
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
pX11IMData->lookup_buf = 0;
pX11IMData->lookup_buf_len = 0;
@@ -1741,14 +1741,14 @@
setXICFocus(pX11IMData->current_ic, req);
currentX11InputMethodInstance = pX11IMData->x11inputmethod;
currentFocusWindow = w;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
if (active && pX11IMData->statusWindow && pX11IMData->statusWindow->on)
onoffStatusWindow(pX11IMData, w, True);
#endif
} else {
currentX11InputMethodInstance = NULL;
currentFocusWindow = 0;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
onoffStatusWindow(pX11IMData, 0, False);
if (pX11IMData->current_ic != NULL)
#endif
@@ -1765,7 +1765,7 @@
Java_sun_awt_X11InputMethod_turnoffStatusWindow(JNIEnv *env,
jobject this)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
X11InputMethodData *pX11IMData;
StatusWindow *statusWindow;
@@ -1862,7 +1862,7 @@
X11InputMethodData *pX11IMData;
XVaNestedList status;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
/*do nothing for linux? */
#else
AWT_LOCK();
@@ -1968,7 +1968,7 @@
JNIEXPORT void JNICALL Java_sun_awt_X11_XInputMethod_adjustStatusWindow
(JNIEnv *env, jobject this, jlong window)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
AWT_LOCK();
adjustStatusWindow(window);
AWT_UNLOCK();
--- ./jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c 2010-06-15 22:07:36.000000000 -0700
@@ -143,7 +143,11 @@
(*env)->DeleteLocalRef(env, propname);
}
+#ifdef __APPLE__
+ strcat(p, ".dylib");
+#else
strcat(p, ".so");
+#endif
JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "load",
"(Ljava/lang/String;)V",
--- ./jdk/src/solaris/native/sun/awt/awt_MToolkit.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/awt_MToolkit.c 2010-06-15 22:07:36.000000000 -0700
@@ -63,8 +63,9 @@
extern JavaVM *jvm;
#ifndef HEADLESS
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
extern void statusWindowEventHandler(XEvent event);
+Boolean awt_dnd_process_event(XEvent* event);
#endif
#endif /* !HEADLESS */
@@ -1642,7 +1643,7 @@
*/
Widget widget=XtWindowToWidget(awt_display, xev.xany.window);
eventNumber++;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
statusWindowEventHandler(xev);
#endif
xembed_eventHandler(&xev);
--- ./jdk/src/solaris/native/sun/awt/awt_Mlib.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/awt_Mlib.c 2010-06-15 22:07:36.000000000 -0700
@@ -32,6 +32,7 @@
#include <dlfcn.h>
#include "jni.h"
#include <jni_util.h>
+#include "jvm_md.h"
#include "awt_Mlib.h"
#include "java_awt_image_BufferedImage.h"
@@ -67,11 +68,11 @@
((strncmp(name.machine, "sun4v" , 5) == 0) &&
(getenv("USE_VIS_ON_SUN4V") != NULL)))
{
- handle = dlopen("libmlib_image_v.so", RTLD_LAZY);
+ handle = dlopen(JNI_LIB_NAME("mlib_image_v"), RTLD_LAZY);
}
if (handle == NULL) {
- handle = dlopen("libmlib_image.so", RTLD_LAZY);
+ handle = dlopen(JNI_LIB_NAME("mlib_image"), RTLD_LAZY);
}
if (handle == NULL) {
--- ./jdk/src/solaris/native/sun/awt/awt_Robot.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/awt_Robot.c 2010-10-31 14:12:37.000000000 -0700
@@ -45,7 +45,7 @@
#include "wsutils.h"
#include "list.h"
#include "multiVis.h"
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <sys/socket.h>
#endif
--- ./jdk/src/solaris/native/sun/awt/awt_util.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/awt_util.h 2010-06-15 22:07:36.000000000 -0700
@@ -187,15 +187,20 @@
#ifdef __solaris__
extern Widget awt_util_getXICStatusAreaWindow(Widget w);
#else
+#if defined(_ALLBSD_SOURCE)
+int32_t awt_util_getIMStatusHeight(Widget vw);
+Widget awt_util_getXICStatusAreaWindow(Widget w);
+#else
int32_t awt_util_getIMStatusHeight(Widget vw);
XVaNestedList awt_util_getXICStatusAreaList(Widget w);
Widget awt_util_getXICStatusAreaWindow(Widget w);
#endif
+#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
typedef struct _XmImRefRec {
Cardinal num_refs; /* Number of referencing widgets. */
Cardinal max_refs; /* Maximum length of refs array. */
--- ./jdk/src/solaris/native/sun/awt/awt_wm.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/awt_wm.c 2010-06-15 22:07:36.000000000 -0700
@@ -121,12 +121,19 @@
static Atom XA_KWM_WIN_MAXIMIZED;
/* OpenLook */
+static Atom _XA_OL_DECOR_ADD;
static Atom _XA_OL_DECOR_DEL;
static Atom _XA_OL_DECOR_HEADER;
static Atom _XA_OL_DECOR_RESIZE;
static Atom _XA_OL_DECOR_PIN;
static Atom _XA_OL_DECOR_CLOSE;
+/* AfterStep */
+static Atom _XA_AS_STYLE;
+
+/* WindowMaker */
+static Atom _XA_WINDOWMAKER_STATE;
+
/* For _NET_WM_STATE ClientMessage requests */
#define _NET_WM_STATE_REMOVE 0 /* remove/unset property */
#define _NET_WM_STATE_ADD 1 /* add/set property */
@@ -193,7 +200,12 @@
{ &_XA_OL_DECOR_HEADER, "_OL_DECOR_HEADER" },
{ &_XA_OL_DECOR_RESIZE, "_OL_DECOR_RESIZE" },
{ &_XA_OL_DECOR_PIN, "_OL_DECOR_PIN" },
- { &_XA_OL_DECOR_CLOSE, "_OL_DECOR_CLOSE" }
+ { &_XA_OL_DECOR_CLOSE, "_OL_DECOR_CLOSE" },
+ { &_XA_OL_DECOR_ADD, "_OL_DECOR_ADD" },
+
+ { &_XA_AS_STYLE, "_XA_AS_STYLE" },
+
+ { &_XA_WINDOWMAKER_STATE, "_XA_WINDOWMAKER_STATE" }
};
#define ATOM_LIST_LENGTH (sizeof(atom_list)/sizeof(atom_list[0]))
@@ -942,6 +954,39 @@
return True;
}
+/*
+ * Window Maker.
+ */
+static Boolean
+awt_wm_isWindowmaker()
+{
+ if (awt_wm_atomInterned(&_XA_WINDOWMAKER_STATE, "_WINDOWMAKER_STATE"))
+ return True;
+ return False;
+}
+
+/*
+ * Afterstep.
+ */
+static Boolean
+awt_wm_isAfterstep()
+{
+ if (awt_wm_atomInterned(&_XA_AS_STYLE, "_AS_STYLE"))
+ return True;
+ return False;
+}
+
+/*
+ * FVWM 2.
+ */
+static Boolean
+awt_wm_isFvwm2()
+{
+ if (awt_wm_atomInterned(&_XA_OL_DECOR_ADD, "_OL_DECOR_ADD")
+ && !awt_wm_atomInterned(&_XA_OL_DECOR_PIN, "_OL_DECOR_PIN"))
+ return True;
+ return False;
+}
static Boolean
awt_wm_isNetWMName(char *name)
@@ -1280,6 +1325,12 @@
else if (awt_wm_isKDE2()) {
awt_wmgr = KDE2_WM;
}
+ else if (awt_wm_isWindowmaker()) {
+ awt_wmgr = WINDOWMAKER_WM;
+ }
+ else if (awt_wm_isAfterstep()) {
+ awt_wmgr = AFTERSTEP_WM;
+ }
/*
* We don't check for legacy WM when we already know that WM
* supports WIN or _NET wm spec.
@@ -1302,6 +1353,9 @@
awt_wmgr = MOTIF_WM;
}
else if (awt_wm_isOpenLook()) {
+ awt_wmgr = OPENLOOK_WM;
+ }
+ else if (awt_wm_isFvwm2()) {
awt_wmgr = OPENLOOK_WM;
}
else {
--- ./jdk/src/solaris/native/sun/awt/awt_wm.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/awt_wm.h 2010-06-15 22:07:36.000000000 -0700
@@ -45,7 +45,10 @@
KDE2_WM,
SAWFISH_WM,
ICE_WM,
- METACITY_WM
+ METACITY_WM,
+ AFTERSTEP_WM,
+ WINDOWMAKER_WM,
+ FVWM2_WM
};
extern void awt_wm_init(void);
--- ./jdk/src/solaris/native/sun/awt/extutil.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/extutil.h 2010-06-15 22:07:36.000000000 -0700
@@ -58,7 +58,7 @@
*/
/* $XFree86: xc/include/extensions/extutil.h,v 1.5 2001/01/17 17:53:20 dawes Exp $ */
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#ifndef _EXTUTIL_H_
#define _EXTUTIL_H_
@@ -248,4 +248,4 @@
char *proc(Display *dpy, int code, XExtCodes *codes, char *buf, int n)
#endif
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
--- ./jdk/src/solaris/native/sun/awt/fontpath.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/fontpath.c 2010-06-15 22:07:36.000000000 -0700
@@ -23,7 +23,7 @@
* questions.
*/
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <string.h>
#endif /* __linux__ */
#include <stdio.h>
@@ -40,6 +40,7 @@
#include <jni.h>
#include <jni_util.h>
+#include <jvm_md.h>
#include <sun_font_FontManager.h>
#ifndef HEADLESS
#include <X11/Xlib.h>
@@ -58,10 +59,24 @@
extern Display *awt_display;
#endif /* !HEADLESS */
+#ifdef __APPLE__
+// XXXDARWIN: Hard-code the path to Apple's freetype, as it is
+// not included in the dyld search path by default, and 10.4
+// does not support -rpath.
+//
+// This ignores the build time setting of ALT_FREETYPE_LIB_PATH,
+// and should be replaced with -rpath/@rpath support on 10.5 or later,
+// or via support for a the FREETYPE_LIB_PATH define.
+#define FONTCONFIG_DLL_VERSIONED X11_PATH "/lib/" VERSIONED_JNI_LIB_NAME("fontconfig", "1")
+#define FONTCONFIG_DLL X11_PATH "/lib/" JNI_LIB_NAME("fontconfig")
+#else
+#define FONTCONFIG_DLL_VERSIONED VERSIONED_JNI_LIB_NAME("fontconfig", "1")
+#define FONTCONFIG_DLL JNI_LIB_NAME("fontconfig")
+#endif
#define MAXFDIRS 512 /* Max number of directories that contain fonts */
-#ifndef __linux__
+#if !defined(__linux__) && !defined(_ALLBSD_SOURCE)
/*
* This can be set in the makefile to "/usr/X11" if so desired.
*/
@@ -111,24 +126,40 @@
NULL, /* terminates the list */
};
+#elif _ALLBSD_SOURCE
+static char *fullBSDFontPath[] = {
+ X11_PATH "/lib/X11/fonts/TrueType",
+ X11_PATH "/lib/X11/fonts/truetype",
+ X11_PATH "/lib/X11/fonts/tt",
+ X11_PATH "/lib/X11/fonts/TTF",
+ X11_PATH "/lib/X11/fonts/OTF",
+ PACKAGE_PATH "/share/fonts/TrueType",
+ PACKAGE_PATH "/share/fonts/truetype",
+ PACKAGE_PATH "/share/fonts/tt",
+ PACKAGE_PATH "/share/fonts/TTF",
+ PACKAGE_PATH "/share/fonts/OTF",
+ X11_PATH "/lib/X11/fonts/Type1",
+ PACKAGE_PATH "/share/fonts/Type1",
+ NULL, /* terminates the list */
+};
#else /* __linux */
/* All the known interesting locations we have discovered on
* various flavors of Linux
*/
static char *fullLinuxFontPath[] = {
- "/usr/X11R6/lib/X11/fonts/TrueType", /* RH 7.1+ */
- "/usr/X11R6/lib/X11/fonts/truetype", /* SuSE */
- "/usr/X11R6/lib/X11/fonts/tt",
- "/usr/X11R6/lib/X11/fonts/TTF",
- "/usr/X11R6/lib/X11/fonts/OTF", /* RH 9.0 (but empty!) */
- "/usr/share/fonts/ja/TrueType", /* RH 7.2+ */
- "/usr/share/fonts/truetype",
- "/usr/share/fonts/ko/TrueType", /* RH 9.0 */
- "/usr/share/fonts/zh_CN/TrueType", /* RH 9.0 */
- "/usr/share/fonts/zh_TW/TrueType", /* RH 9.0 */
+ X11_PATH "/lib/X11/fonts/TrueType", /* RH 7.1+ */
+ X11_PATH "/lib/X11/fonts/truetype", /* SuSE */
+ X11_PATH "/lib/X11/fonts/tt",
+ X11_PATH "/lib/X11/fonts/TTF",
+ X11_PATH "/lib/X11/fonts/OTF", /* RH 9.0 (but empty!) */
+ PACKAGE_PATH "/share/fonts/ja/TrueType", /* RH 7.2+ */
+ PACKAGE_PATH "/share/fonts/truetype",
+ PACKAGE_PATH "/share/fonts/ko/TrueType", /* RH 9.0 */
+ PACKAGE_PATH "/share/fonts/zh_CN/TrueType", /* RH 9.0 */
+ PACKAGE_PATH "/share/fonts/zh_TW/TrueType", /* RH 9.0 */
"/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType", /* Debian */
- "/usr/X11R6/lib/X11/fonts/Type1",
- "/usr/share/fonts/default/Type1", /* RH 9.0 */
+ X11_PATH "/lib/X11/fonts/Type1",
+ PACKAGE_PATH "/share/fonts/default/Type1", /* RH 9.0 */
NULL, /* terminates the list */
};
#endif
@@ -362,7 +393,7 @@
#endif /* !HEADLESS */
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
/* from awt_LoadLibrary.c */
JNIEXPORT jboolean JNICALL AWTIsHeadless();
#endif
@@ -487,8 +518,10 @@
*/
fcdirs = getFontConfigLocations();
-#ifdef __linux__
+#if defined(__linux__)
knowndirs = fullLinuxFontPath;
+#elif defined(_ALLBSD_SOURCE)
+ knowndirs = fullBSDFontPath;
#else /* IF SOLARIS */
knowndirs = fullSolarisFontPath;
#endif
@@ -499,7 +532,8 @@
* be initialised.
*/
#ifndef HEADLESS
-#ifdef __linux__ /* There's no headless build on linux ... */
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+ /* There's no headless build on linux ... */
if (!AWTIsHeadless()) { /* .. so need to call a function to check */
#endif
AWT_LOCK();
@@ -507,7 +541,7 @@
x11dirs = getX11FontPath();
}
AWT_UNLOCK();
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
}
#endif
#endif /* !HEADLESS */
@@ -604,7 +638,7 @@
}
#include <dlfcn.h>
-#ifndef __linux__ /* i.e. is solaris */
+#if !(defined(__linux__) || defined(__APPLE__))
#include <link.h>
#endif
@@ -650,9 +684,9 @@
* certain symbols - and functionality - to be available.
* Also add explicit search for .so.1 in case .so symlink doesn't exist.
*/
- libfontconfig = dlopen("libfontconfig.so.1", RTLD_LOCAL|RTLD_LAZY);
+ libfontconfig = dlopen(FONTCONFIG_DLL_VERSIONED, RTLD_LOCAL|RTLD_LAZY);
if (libfontconfig == NULL) {
- libfontconfig = dlopen("libfontconfig.so", RTLD_LOCAL|RTLD_LAZY);
+ libfontconfig = dlopen(FONTCONFIG_DLL, RTLD_LOCAL|RTLD_LAZY);
if (libfontconfig == NULL) {
return NULL;
}
--- ./jdk/src/solaris/native/sun/awt/gtk2_interface.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/gtk2_interface.c 2010-10-31 14:12:37.000000000 -0700
@@ -30,9 +30,12 @@
#include <string.h>
#include "gtk2_interface.h"
#include "java_awt_Transparency.h"
+#include "jvm_md.h"
-#define GTK2_LIB "libgtk-x11-2.0.so.0"
-#define GTHREAD_LIB "libgthread-2.0.so.0"
+#define GTK2_LIB_VERSIONED VERSIONED_JNI_LIB_NAME("gtk-x11-2.0", "0")
+#define GTK2_LIB JNI_LIB_NAME("gtk-x11-2.0")
+#define GTHREAD_LIB_VERSIONED VERSIONED_JNI_LIB_NAME("gthread-2.0", "0")
+#define GTHREAD_LIB JNI_LIB_NAME("gthread-2.0")
#define G_TYPE_INVALID G_TYPE_MAKE_FUNDAMENTAL (0)
#define G_TYPE_NONE G_TYPE_MAKE_FUNDAMENTAL (1)
@@ -414,9 +417,12 @@
void *lib = NULL;
gboolean result = FALSE;
- lib = dlopen(GTK2_LIB, RTLD_LAZY | RTLD_LOCAL);
+ lib = dlopen(GTK2_LIB_VERSIONED, RTLD_LAZY | RTLD_LOCAL);
if (lib == NULL) {
- return FALSE;
+ lib = dlopen(GTK2_LIB, RTLD_LAZY | RTLD_LOCAL);
+ if (lib == NULL) {
+ return FALSE;
+ }
}
fp_gtk_check_version = dlsym(lib, "gtk_check_version");
@@ -468,11 +474,19 @@
int (*io_handler)();
char *gtk_modules_env;
- gtk2_libhandle = dlopen(GTK2_LIB, RTLD_LAZY | RTLD_LOCAL);
- gthread_libhandle = dlopen(GTHREAD_LIB, RTLD_LAZY | RTLD_LOCAL);
+ gtk2_libhandle = dlopen(GTK2_LIB_VERSIONED, RTLD_LAZY | RTLD_LOCAL);
+ if (gtk2_libhandle == NULL) {
+ gtk2_libhandle = dlopen(GTK2_LIB, RTLD_LAZY | RTLD_LOCAL);
+ if (gtk2_libhandle == NULL)
+ return FALSE;
+ }
- if (gtk2_libhandle == NULL || gthread_libhandle == NULL)
- return FALSE;
+ gthread_libhandle = dlopen(GTHREAD_LIB_VERSIONED, RTLD_LAZY | RTLD_LOCAL);
+ if (gthread_libhandle == NULL) {
+ gthread_libhandle = dlopen(GTHREAD_LIB, RTLD_LAZY | RTLD_LOCAL);
+ if (gthread_libhandle == NULL)
+ return FALSE;
+ }
if (setjmp(j) == 0)
{
--- ./jdk/src/solaris/native/sun/awt/list.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/list.c 2010-06-15 22:07:37.000000000 -0700
@@ -66,7 +66,11 @@
----------------------------------------------------------------------- **/
#include <stdio.h>
+#ifdef _ALLBSD_SOURCE
+#include <stdlib.h>
+#else
#include <malloc.h>
+#endif
#include "list.h"
--- ./jdk/src/solaris/native/sun/awt/robot_common.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/awt/robot_common.c 2010-06-15 22:07:37.000000000 -0700
@@ -27,6 +27,9 @@
#error This file should not be included in headless library
#endif
+#ifdef _ALLBSD_SOURCE
+#include <stdlib.h>
+#endif
#include "robot_common.h"
/*
--- ./jdk/src/solaris/native/sun/font/X11FontScaler.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/font/X11FontScaler.c 2010-06-15 22:07:37.000000000 -0700
@@ -32,7 +32,11 @@
* into X11FontScaler_md.c, which is compiled into another library.
*/
#include <stdio.h>
+#if defined(_ALLBSD_SOURCE)
+#include <stdlib.h>
+#else
#include <malloc.h>
+#endif
#include <ctype.h>
#include <sys/utsname.h>
--- ./jdk/src/solaris/native/sun/font/X11TextRenderer.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/font/X11TextRenderer.c 2010-06-15 22:07:37.000000000 -0700
@@ -39,7 +39,11 @@
#include "GraphicsPrimitiveMgr.h"
#include "glyphblitting.h"
#include "sunfontids.h"
+#if defined(_ALLBSD_SOURCE)
+#include <stdlib.h>
+#else
#include <malloc.h>
+#endif
JNIEXPORT void JNICALL AWTDrawGlyphList
--- ./jdk/src/solaris/native/sun/java2d/j2d_md.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/java2d/j2d_md.h 2010-06-15 22:07:37.000000000 -0700
@@ -28,11 +28,11 @@
#include <sys/types.h>
/*
- * Linux version of <sys/types.h> does not define intptr_t
+ * Linux and BSD's version of <sys/types.h> does not define intptr_t
*/
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <stdint.h>
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
typedef unsigned char jubyte;
typedef unsigned short jushort;
--- ./jdk/src/solaris/native/sun/java2d/loops/mlib_ImageZoom_NN.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/java2d/loops/mlib_ImageZoom_NN.c 2010-06-15 22:07:38.000000000 -0700
@@ -63,6 +63,10 @@
* MLIB_EDGE_SRC_PADDED
*/
+#ifdef __OpenBSD__
+#include <sys/types.h>
+#endif
+#include <machine/endian.h>
#include <mlib_image.h>
#include <mlib_ImageZoom.h>
@@ -99,7 +103,7 @@
/***************************************************************/
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
static const mlib_u32 mlib_bit_mask4[16] = {
0x00000000u, 0xFF000000u, 0x00FF0000u, 0xFFFF0000u,
@@ -108,7 +112,7 @@
0x0000FFFFu, 0xFF00FFFFu, 0x00FFFFFFu, 0xFFFFFFFFu
};
-#else /* _LITTLE_ENDIAN */
+#else /* BIG_ENDIAN */
static const mlib_u32 mlib_bit_mask4[16] = {
0x00000000u, 0x000000FFu, 0x0000FF00u, 0x0000FFFFu,
@@ -117,7 +121,7 @@
0xFFFF0000u, 0xFFFF00FFu, 0xFFFFFF00u, 0xFFFFFFFFu
};
-#endif /* _LITTLE_ENDIAN */
+#endif /* LITTLE_ENDIAN */
/***************************************************************/
@@ -341,11 +345,11 @@
#ifdef _NO_LONGLONG
typedef struct {
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
mlib_u32 uint1, uint0;
-#else /* _LITTLE_ENDIAN */
+#else /* BIG_ENDIAN */
mlib_u32 uint0, uint1;
-#endif /* _LITTLE_ENDIAN */
+#endif /* LITTLE_ENDIAN */
} two_uint;
/***************************************************************/
@@ -508,11 +512,11 @@
DTYPE mask;
MASK(mask);
off *= 8;
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
LSHIFT(dd_old, da[0], 64 - off);
-#else /* _LITTLE_ENDIAN */
+#else /* BIG_ENDIAN */
RSHIFT(dd_old, da[0], 64 - off);
-#endif /* _LITTLE_ENDIAN */
+#endif /* LITTLE_ENDIAN */
#ifdef __SUNPRO_C
#pragma pipeloop(0)
@@ -537,30 +541,30 @@
res = (res & 0xff) | (res >> 8);
dd = gray_mask[res];
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
/* *da++ = (dd_old >> (64 - off)) | (dd << off);*/
RSHIFT(dd_old, dd_old, 64 - off);
LSHIFT(dtmp, dd, off);
-#else /* _LITTLE_ENDIAN */
+#else /* BIG_ENDIAN */
/* *da++ = (dd_old << (64 - off)) | (dd >> off);*/
LSHIFT(dd_old, dd_old, 64 - off);
RSHIFT(dtmp, dd, off);
-#endif /* _LITTLE_ENDIAN */
+#endif /* LITTLE_ENDIAN */
LOGIC(*da++, dd_old, dtmp, |);
dd_old = dd;
}
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
/* da[0] = (dd_old >> (64 - off)) | (da[0] & ((mlib_u64)((mlib_s64) -1) << off));*/
LSHIFT(dtmp, mask, off);
LOGIC(dtmp, da[0], dtmp, &);
RSHIFT(dtmp1, dd_old, 64 - off);
-#else /* _LITTLE_ENDIAN */
+#else /* BIG_ENDIAN */
/* da[0] = (dd_old << (64 - off)) | (da[0] & ((mlib_u64)((mlib_s64) -1) >> off));*/
RSHIFT(dtmp, mask, off);
LOGIC(dtmp, da[0], dtmp, &);
LSHIFT(dtmp1, dd_old, 64 - off);
-#endif /* _LITTLE_ENDIAN */
+#endif /* LITTLE_ENDIAN */
LOGIC(da[0], dtmp, dtmp1, |);
}
else { /* aligned */
--- ./jdk/src/solaris/native/sun/java2d/loops/vis_FuncArray.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/java2d/loops/vis_FuncArray.c 2010-06-15 22:07:38.000000000 -0700
@@ -794,7 +794,7 @@
static int initialized;
static int usevis = JNI_TRUE;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
# define ULTRA_CHIP "sparc64"
#else
# define ULTRA_CHIP "sun4u"
--- ./jdk/src/solaris/native/sun/java2d/opengl/OGLFuncs_md.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/java2d/opengl/OGLFuncs_md.h 2010-06-15 22:07:38.000000000 -0700
@@ -27,7 +27,10 @@
#define OGLFuncs_md_h_Included
#include <stdlib.h>
+#ifndef __APPLE__
#include <link.h>
+#endif
+#include "jvm_md.h"
#include "J2D_GL/glx.h"
#include "OGLFuncMacros.h"
@@ -113,7 +116,7 @@
{ \
char *libGLPath = getenv("J2D_ALT_LIBGL_PATH"); \
if (libGLPath == NULL) { \
- libGLPath = "libGL.so.1"; \
+ libGLPath = VERSIONED_JNI_LIB_NAME("GL", "1"); \
} \
OGL_LIB_HANDLE = dlopen(libGLPath, RTLD_LAZY | RTLD_LOCAL); \
} \
--- ./jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c 2010-07-24 14:31:30.000000000 -0700
@@ -32,6 +32,7 @@
#include "gdefs.h"
#include "jni_util.h"
+#include "jvm_md.h"
#include "awt_Component.h"
#include "awt_GraphicsEnv.h"
@@ -163,7 +164,7 @@
if (tryDGA && (getenv("NO_J2D_DGA") == NULL)) {
/* we use RTLD_NOW because of bug 4032715 */
- lib = dlopen("libsunwjdga.so", RTLD_NOW);
+ lib = dlopen(JNI_LIB_NAME("sunwjdga"), RTLD_NOW);
}
if (lib != NULL) {
--- ./jdk/src/solaris/native/sun/jdga/dgalock.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/jdga/dgalock.c 2010-06-15 22:07:38.000000000 -0700
@@ -44,6 +44,7 @@
#include <X11/Xlib.h>
#include "jni.h"
+#include "jvm_md.h"
#include "jdga.h"
#include "jdgadevice.h"
@@ -84,10 +85,10 @@
static GetVirtualDrawableFunc * GetVirtualDrawable = GetVirtualDrawableStub;
static void Solaris_DGA_XineramaInit(Display *display) {
- void * handle = 0;
+ void * handle = NULL;
if (IsXineramaOn == NULL) {
- handle = dlopen("libxinerama.so", RTLD_NOW);
- if (handle != 0) {
+ handle = dlopen(JNI_LIB_NAME("xinerama"), RTLD_NOW);
+ if (handle != NULL) {
void *sym = dlsym(handle, "IsXineramaOn");
IsXineramaOn = (IsXineramaOnFunc *)sym;
if (IsXineramaOn != 0 && (*IsXineramaOn)(display)) {
--- ./jdk/src/solaris/native/sun/management/FileSystemImpl.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/management/FileSystemImpl.c 2010-06-15 22:07:38.000000000 -0700
@@ -26,6 +26,10 @@
#include <sys/types.h>
#include <sys/stat.h>
+#if defined(_ALLBSD_SOURCE)
+#include "largefile_bsd.h"
+#endif
+
#include "jni.h"
#include "jni_util.h"
#include "sun_management_FileSystemImpl.h"
--- ./jdk/src/solaris/native/sun/net/dns/ResolverConfigurationImpl.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/net/dns/ResolverConfigurationImpl.c 2010-06-15 22:07:38.000000000 -0700
@@ -33,7 +33,7 @@
#include <strings.h>
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <string.h>
#endif
--- ./jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c 2010-10-31 14:12:37.000000000 -0700
@@ -26,11 +26,12 @@
#include "jni.h"
#include "jni_util.h"
#include "jvm.h"
+#include "jvm_md.h"
#include "jlong.h"
#include "sun_net_spi_DefaultProxySelector.h"
#include <dlfcn.h>
#include <stdio.h>
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <string.h>
#else
#include <strings.h>
@@ -110,8 +111,9 @@
/**
* Let's try to load le GConf-2 library
*/
- if (dlopen("libgconf-2.so", RTLD_GLOBAL | RTLD_LAZY) != NULL ||
- dlopen("libgconf-2.so.4", RTLD_GLOBAL | RTLD_LAZY) != NULL) {
+ if (dlopen(JNI_LIB_NAME("gconf-2"), RTLD_GLOBAL | RTLD_LAZY) != NULL ||
+ dlopen(VERSIONED_JNI_LIB_NAME("gconf-2", "4"),
+ RTLD_GLOBAL | RTLD_LAZY) != NULL) {
gconf_ver = 2;
}
if (gconf_ver > 0) {
--- ./jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c 2010-06-15 22:07:38.000000000 -0700
@@ -35,7 +35,7 @@
#include <string.h>
#include <errno.h>
-#if __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <netinet/in.h>
#endif
@@ -86,7 +86,7 @@
rv = connect(fd, 0, 0);
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
{
int len;
SOCKADDR sa;
@@ -96,17 +96,30 @@
#ifdef AF_INET6
if (ipv6_available()) {
struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)&sa;
+#if defined(_ALLBSD_SOURCE)
+ him6->sin6_family = AF_INET6;
+#else
him6->sin6_family = AF_UNSPEC;
+#endif
len = sizeof(struct sockaddr_in6);
} else
#endif
{
struct sockaddr_in *him4 = (struct sockaddr_in*)&sa;
+#if defined(_ALLBSD_SOURCE)
+ him4->sin_family = AF_INET;
+#else
him4->sin_family = AF_UNSPEC;
+#endif
len = sizeof(struct sockaddr_in);
}
rv = connect(fd, (struct sockaddr *)&sa, len);
+
+#if defined(_ALLBSD_SOURCE)
+ if (rv < 0 && errno == EADDRNOTAVAIL)
+ rv = errno = 0;
+#endif
}
#endif
--- ./jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c 2010-06-15 22:07:38.000000000 -0700
@@ -73,7 +73,7 @@
m.msg_accrightslen = 0;
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
m.msg_control = NULL;
m.msg_controllen = 0;
#endif
@@ -121,7 +121,7 @@
m.msg_accrightslen = 0;
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
m.msg_control = NULL;
m.msg_controllen = 0;
#endif
--- ./jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c 2010-06-15 22:07:38.000000000 -0700
@@ -26,15 +26,21 @@
#include "jni.h"
#include "jni_util.h"
#include "jvm.h"
+#include "jvm_md.h"
#include "jlong.h"
#include <sys/mman.h>
#include <sys/stat.h>
+#include <fcntl.h>
#include "sun_nio_ch_FileChannelImpl.h"
#include "java_lang_Integer.h"
#include "nio.h"
#include "nio_util.h"
#include <dlfcn.h>
+#if defined(_ALLBSD_SOURCE)
+#include "largefile_bsd.h"
+#endif
+
static jfieldID chan_fd; /* jobject 'fd' in sun.io.FileChannelImpl */
#ifdef __solaris__
@@ -59,6 +65,24 @@
typedef ssize_t sendfile64_func(int out_fd, int in_fd, off64_t *offset, size_t count);
sendfile64_func* my_sendfile64_func = NULL;
+#elif defined(_ALLBSD_SOURCE)
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/uio.h>
+#include <errno.h>
+#include <stdlib.h>
+
+#ifdef __APPLE__
+typedef int sendfile_func(int fd, int s, off_t offset, off_t *len,
+ struct sf_hdtr *hdtr, int flags);
+#elif defined(__FreeBSD__)
+typedef int sendfile_func(int fd, int s, off_t offset, size_t nbytes,
+ struct sf_hdtr *hdtr, off_t *sbytes, int flags);
+#endif
+
+#if defined(__APPLE__) || defined(__FreeBSD__)
+sendfile_func* my_sendfile_func = NULL;
+#endif
#endif
JNIEXPORT jlong JNICALL
@@ -68,7 +92,8 @@
chan_fd = (*env)->GetFieldID(env, clazz, "fd", "Ljava/io/FileDescriptor;");
#ifdef __solaris__
- if (dlopen("/usr/lib/libsendfile.so.1", RTLD_GLOBAL | RTLD_LAZY) != NULL) {
+ if (dlopen("/usr/lib/" VERSIONED_JNI_LIB_NAME("sendfile", "1"),
+ RTLD_GLOBAL | RTLD_LAZY) != NULL) {
my_sendfile_func = (sendfile_func*) dlsym(RTLD_DEFAULT, "sendfilev64");
}
#endif
@@ -77,6 +102,10 @@
my_sendfile64_func = (sendfile64_func*) dlsym(RTLD_DEFAULT, "sendfile64");
#endif
+#if defined(__APPLE__) || defined(__FreeBSD__)
+ my_sendfile_func = (sendfile_func*) dlsym(RTLD_DEFAULT, "sendfile");
+#endif
+
return pageSize;
}
@@ -243,4 +272,46 @@
return result;
}
#endif
+
+#ifdef _ALLBSD_SOURCE
+#if defined(__APPLE__) || defined(__FreeBSD__)
+ if (my_sendfile_func == NULL)
+ return IOS_UNSUPPORTED;
+
+ off_t numBytes;
+ int result;
+
+ numBytes = count;
+
+#ifdef __APPLE__
+ result = (*my_sendfile_func)(srcFD, dstFD, position,
+ &numBytes, NULL, 0);
+#elif defined(__FreeBSD__)
+ result = (*my_sendfile_func)(srcFD, dstFD, position,
+ count, NULL, &numBytes, 0);
+#else
+ Add an #elif for your BSD flavor
+#endif
+
+ if (numBytes > 0)
+ return numBytes;
+
+ if (result == -1) {
+ if (errno == EAGAIN)
+ return IOS_UNAVAILABLE;
+ if (errno == EOPNOTSUPP || errno == ENOTSOCK || errno == ENOTCONN)
+ return IOS_UNSUPPORTED_CASE;
+ if ((errno == EINVAL) && ((ssize_t)count >= 0))
+ return IOS_UNSUPPORTED_CASE;
+ if (errno == EINTR)
+ return IOS_INTERRUPTED;
+ JNU_ThrowIOExceptionWithLastError(env, "Transfer failed");
+ return IOS_THROWN;
+ }
+
+ return result;
+#else
+ return IOS_UNSUPPORTED;
+#endif
+#endif
}
--- ./jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c 2010-06-15 22:07:38.000000000 -0700
@@ -33,9 +33,13 @@
#include <sys/socket.h>
#include <fcntl.h>
#include <sys/uio.h>
+#include <unistd.h>
#include "nio.h"
#include "nio_util.h"
+#if defined(_ALLBSD_SOURCE)
+#include "largefile_bsd.h"
+#endif
static int preCloseFD = -1; /* File descriptor to which we dup other fd's
before closing them for real */
@@ -218,6 +222,23 @@
fl.l_start = (off64_t)pos;
fl.l_type = F_UNLCK;
lockResult = fcntl(fd, cmd, &fl);
+#if defined(__FreeBSD__) || defined(__OpenBSD__)
+ /* XXXFREEBSD: While doing of preClose0() we're closing actual fd which
+ was locked, so here we'll get an error which need to be ignored to
+ satisfy TCK FileLock test */
+ /* XXXFREEBSD: backport to 1.4.2 */
+ if (lockResult < 0 && errno == EBADF)
+ lockResult = errno = 0;
+#endif
+#if defined(__NetBSD__)
+ /* XXXNETBSD: The dup2 in preClose0 is being done onto 1 end of a
+ socketpair which isn't a valid target for F_UNLCK. No good way to see
+ this vs. a bad lock setup so just return errno = 0 there
+ to pass JCK (lock will get removed once all fd's close anyways) */
+ /* XXXNETBSD: backport to 1.4.2 */
+ if (lockResult < 0 && errno == EINVAL)
+ lockResult = errno = 0;
+#endif
if (lockResult < 0) {
JNU_ThrowIOExceptionWithLastError(env, "Release failed");
}
--- ./jdk/src/solaris/native/sun/nio/ch/FileKey.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/ch/FileKey.c 2010-06-15 22:07:38.000000000 -0700
@@ -30,6 +30,10 @@
#include "nio_util.h"
#include "sun_nio_ch_FileKey.h"
+#if defined(_ALLBSD_SOURCE)
+#include "largefile_bsd.h"
+#endif
+
static jfieldID key_st_dev; /* id for FileKey.st_dev */
static jfieldID key_st_ino; /* id for FileKey.st_ino */
--- ./jdk/src/solaris/native/sun/nio/ch/Net.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/ch/Net.c 2010-10-31 14:12:37.000000000 -0700
@@ -116,6 +116,47 @@
#endif /* __linux__ */
+#ifdef _ALLBSD_SOURCE
+
+#ifndef IP_BLOCK_SOURCE
+
+#define IP_ADD_SOURCE_MEMBERSHIP 70 /* join a source-specific group */
+#define IP_DROP_SOURCE_MEMBERSHIP 71 /* drop a single source */
+#define IP_BLOCK_SOURCE 72 /* block a source */
+#define IP_UNBLOCK_SOURCE 73 /* unblock a source */
+
+#endif /* IP_BLOCK_SOURCE */
+
+#ifndef MCAST_BLOCK_SOURCE
+
+#define MCAST_JOIN_SOURCE_GROUP 82 /* join a source-specific group */
+#define MCAST_LEAVE_SOURCE_GROUP 83 /* leave a single source */
+#define MCAST_BLOCK_SOURCE 84 /* block a source */
+#define MCAST_UNBLOCK_SOURCE 85 /* unblock a source */
+
+#endif /* MCAST_BLOCK_SOURCE */
+
+#ifndef IPV6_ADD_MEMBERSHIP
+
+#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
+#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
+
+#endif /* IPV6_ADD_MEMBERSHIP */
+
+struct my_ip_mreq_source {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_interface;
+ struct in_addr imr_sourceaddr;
+};
+
+struct my_group_source_req {
+ uint32_t gsr_interface; /* interface index */
+ struct sockaddr_storage gsr_group; /* group address */
+ struct sockaddr_storage gsr_source; /* source address */
+};
+
+#endif /* _ALLBSD_SOURCE */
+
#define COPY_INET6_ADDRESS(env, source, target) \
(*env)->GetByteArrayRegion(env, source, 0, 16, target)
@@ -271,8 +312,30 @@
SOCKADDR sa;
socklen_t sa_len = SOCKADDR_LEN;
if (getsockname(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) {
+#ifdef _ALLBSD_SOURCE
+ /*
+ * XXXBSD:
+ * ECONNRESET is specific to the BSDs. We can not return an error,
+ * as the calling Java code with raise a java.lang.Error given the expectation
+ * that getsockname() will never fail. According to the Single UNIX Specification,
+ * it shouldn't fail. As such, we just fill in generic Linux-compatible values.
+ */
+ if (errno == ECONNRESET) {
+ struct sockaddr_in *sin;
+ sin = (struct sockaddr_in *) &sa;
+ bzero(sin, sizeof(*sin));
+ sin->sin_len = sizeof(struct sockaddr_in);
+ sin->sin_family = AF_INET;
+ sin->sin_port = htonl(0);
+ sin->sin_addr.s_addr = INADDR_ANY;
+ } else {
+ handleSocketError(env, errno);
+ return -1;
+ }
+#else /* _ALLBSD_SOURCE */
handleSocketError(env, errno);
return -1;
+#endif /* _ALLBSD_SOURCE */
}
return NET_GetPortFromSockaddr((struct sockaddr *)&sa);
}
@@ -284,8 +347,30 @@
socklen_t sa_len = SOCKADDR_LEN;
int port;
if (getsockname(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) {
+#ifdef _ALLBSD_SOURCE
+ /*
+ * XXXBSD:
+ * ECONNRESET is specific to the BSDs. We can not return an error,
+ * as the calling Java code with raise a java.lang.Error with the expectation
+ * that getsockname() will never fail. According to the Single UNIX Specification,
+ * it shouldn't fail. As such, we just fill in generic Linux-compatible values.
+ */
+ if (errno == ECONNRESET) {
+ struct sockaddr_in *sin;
+ sin = (struct sockaddr_in *) &sa;
+ bzero(sin, sizeof(*sin));
+ sin->sin_len = sizeof(struct sockaddr_in);
+ sin->sin_family = AF_INET;
+ sin->sin_port = htonl(0);
+ sin->sin_addr.s_addr = INADDR_ANY;
+ } else {
+ handleSocketError(env, errno);
+ return NULL;
+ }
+#else /* _ALLBSD_SOURCE */
handleSocketError(env, errno);
return NULL;
+#endif /* _ALLBSD_SOURCE */
}
return NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port);
}
@@ -349,7 +434,8 @@
struct linger linger;
u_char carg;
void *parg;
- int arglen, n;
+ socklen_t arglen;
+ int n;
/* Option value is an int except for a few specific cases */
@@ -512,7 +598,7 @@
Java_sun_nio_ch_Net_setInterface4(JNIEnv* env, jobject this, jobject fdo, jint interf)
{
struct in_addr in;
- int arglen = sizeof(struct in_addr);
+ socklen_t arglen = sizeof(struct in_addr);
int n;
in.s_addr = htonl(interf);
@@ -543,7 +629,7 @@
Java_sun_nio_ch_Net_setInterface6(JNIEnv* env, jobject this, jobject fdo, jint index)
{
int value = (jint)index;
- int arglen = sizeof(value);
+ socklen_t arglen = sizeof(value);
int n;
n = setsockopt(fdval(env, fdo), IPPROTO_IPV6, IPV6_MULTICAST_IF,
@@ -586,9 +672,11 @@
switch (errorValue) {
case EINPROGRESS: /* Non-blocking connect */
return 0;
+#ifdef EPROTO
case EPROTO:
xn = JNU_JAVANETPKG "ProtocolException";
break;
+#endif
case ECONNREFUSED:
xn = JNU_JAVANETPKG "ConnectException";
break;
--- ./jdk/src/solaris/native/sun/nio/ch/Sctp.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/ch/Sctp.h 2010-06-15 22:07:38.000000000 -0700
@@ -67,7 +67,7 @@
-#else /* __linux__ */
+#elif __linux__
#include <stdint.h>
#include <linux/types.h>
#include <sys/socket.h>
@@ -320,8 +320,20 @@
typedef int sctp_peeloff_func(int sock, sctp_assoc_t id);
+#elif defined(__FreeBSD__) && __FreeBSD__ >= 7
+
+#include <stdint.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/sctp.h>
+#include <netinet/sctp_peeloff.h>
+#include <netinet/sctp_uio.h>
+#include "jni.h"
+
#endif /* __linux__ */
+#if !defined(__FreeBSD__) || __FreeBSD__ < 7
+
sctp_getladdrs_func* nio_sctp_getladdrs;
sctp_freeladdrs_func* nio_sctp_freeladdrs;
sctp_getpaddrs_func* nio_sctp_getpaddrs;
@@ -329,6 +341,17 @@
sctp_bindx_func* nio_sctp_bindx;
sctp_peeloff_func* nio_sctp_peeloff;
+#else
+
+#define nio_sctp_getladdrs sctp_getladdrs
+#define nio_sctp_freeladdrs sctp_freeladdrs
+#define nio_sctp_getpaddrs sctp_getpaddrs
+#define nio_sctp_freepaddrs sctp_freepaddrs
+#define nio_sctp_bindx sctp_bindx
+#define nio_sctp_peeloff sctp_peeloff
+
+#endif
+
jboolean loadSocketExtensionFuncs(JNIEnv* env);
#endif /* !SUN_NIO_CH_SCTP_H */
--- ./jdk/src/solaris/native/sun/nio/ch/SctpChannelImpl.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/ch/SctpChannelImpl.c 2010-06-15 22:07:38.000000000 -0700
@@ -337,11 +337,11 @@
break;
case SCTP_ADDR_MADE_PRIM :
event = sun_nio_ch_SctpPeerAddrChange_SCTP_ADDR_MADE_PRIM;
-#ifdef __linux__ /* Solaris currently doesn't support SCTP_ADDR_CONFIRMED */
+#ifndef __solaris__ /* Solaris currently doesn't support SCTP_ADDR_CONFIRMED */
break;
case SCTP_ADDR_CONFIRMED :
event = sun_nio_ch_SctpPeerAddrChange_SCTP_ADDR_CONFIRMED;
-#endif /* __linux__ */
+#endif /* __solaris__ */
}
addressObj = SockAddrToInetSocketAddress(env, (struct sockaddr*)&spc->spc_aaddr);
--- ./jdk/src/solaris/native/sun/nio/ch/SctpNet.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/ch/SctpNet.c 2010-10-31 14:12:37.000000000 -0700
@@ -58,6 +58,7 @@
*/
jboolean loadSocketExtensionFuncs
(JNIEnv* env) {
+#if !defined(__FreeBSD__) || __FreeBSD__ < 7 /* On FreeBSD 7.x these functions are in libc */
if (dlopen(nativeSctpLib, RTLD_GLOBAL | RTLD_LAZY) == NULL) {
JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
dlerror());
@@ -105,6 +106,7 @@
dlerror());
return JNI_FALSE;
}
+#endif /* __FreeBSD__ */
funcsLoaded = JNI_TRUE;
return JNI_TRUE;
--- ./jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/sun/nio/fs/BsdNativeDispatcher.c 2010-07-04 12:49:46.000000000 -0700
@@ -28,23 +28,35 @@
#include "jvm.h"
#include "jlong.h"
-#include <stdio.h>
-#include <dlfcn.h>
-#include <errno.h>
-#include <mntent.h>
+#include <sys/param.h>
+#include <sys/mount.h>
+#ifdef ST_RDONLY
+#define statfs statvfs
+#define getfsstat getvfsstat
+#define f_flags f_flag
+#define ISREADONLY ST_RDONLY
+#else
+#define ISREADONLY MNT_RDONLY
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+static jfieldID entry_name;
+static jfieldID entry_dir;
+static jfieldID entry_fstype;
+static jfieldID entry_options;
+static jfieldID entry_dev;
+
+
+struct fsstat_iter {
+ struct statfs *buf;
+ int pos;
+ int nentries;
+};
#include "sun_nio_fs_BsdNativeDispatcher.h"
-typedef size_t fgetxattr_func(int fd, const char* name, void* value, size_t size);
-typedef int fsetxattr_func(int fd, const char* name, void* value, size_t size, int flags);
-typedef int fremovexattr_func(int fd, const char* name);
-typedef int flistxattr_func(int fd, char* list, size_t size);
-
-fgetxattr_func* my_fgetxattr_func = NULL;
-fsetxattr_func* my_fsetxattr_func = NULL;
-fremovexattr_func* my_fremovexattr_func = NULL;
-flistxattr_func* my_flistxattr_func = NULL;
-
static void throwUnixException(JNIEnv* env, int errnum) {
jobject x = JNU_NewObjectByName(env, "sun/nio/fs/UnixException",
"(I)V", errnum);
@@ -53,108 +65,146 @@
}
}
+/**
+ * Initialize jfieldIDs
+ */
JNIEXPORT void JNICALL
-Java_sun_nio_fs_BsdNativeDispatcher_init(JNIEnv *env, jclass clazz)
+Java_sun_nio_fs_BsdNativeDispatcher_initIDs(JNIEnv* env, jclass this)
{
- my_fgetxattr_func = (fgetxattr_func*)dlsym(RTLD_DEFAULT, "fgetxattr");
- my_fsetxattr_func = (fsetxattr_func*)dlsym(RTLD_DEFAULT, "fsetxattr");
- my_fremovexattr_func = (fremovexattr_func*)dlsym(RTLD_DEFAULT, "fremovexattr");
- my_flistxattr_func = (flistxattr_func*)dlsym(RTLD_DEFAULT, "flistxattr");
-}
+ jclass clazz;
-JNIEXPORT jint JNICALL
-Java_sun_nio_fs_BsdNativeDispatcher_fgetxattr0(JNIEnv* env, jclass clazz,
- jint fd, jlong nameAddress, jlong valueAddress, jint valueLen)
-{
- size_t res = -1;
- const char* name = jlong_to_ptr(nameAddress);
- void* value = jlong_to_ptr(valueAddress);
-
- if (my_fgetxattr_func == NULL) {
- errno = ENOTSUP;
- } else {
- /* EINTR not documented */
- res = (*my_fgetxattr_func)(fd, name, value, valueLen);
- }
- if (res == (size_t)-1)
- throwUnixException(env, errno);
- return (jint)res;
+ clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry");
+ if (clazz == NULL) {
+ return;
+ }
+ entry_name = (*env)->GetFieldID(env, clazz, "name", "[B");
+ entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B");
+ entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B");
+ entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B");
+ entry_dev = (*env)->GetFieldID(env, clazz, "dev", "J");
}
-JNIEXPORT void JNICALL
-Java_sun_nio_fs_BsdNativeDispatcher_fsetxattr0(JNIEnv* env, jclass clazz,
- jint fd, jlong nameAddress, jlong valueAddress, jint valueLen)
+JNIEXPORT jlong JNICALL
+Java_sun_nio_fs_BsdNativeDispatcher_getfsstat(JNIEnv* env, jclass this)
{
- int res = -1;
- const char* name = jlong_to_ptr(nameAddress);
- void* value = jlong_to_ptr(valueAddress);
-
- if (my_fsetxattr_func == NULL) {
- errno = ENOTSUP;
- } else {
- /* EINTR not documented */
- res = (*my_fsetxattr_func)(fd, name, value, valueLen, 0);
+ int nentries;
+ size_t bufsize;
+ struct fsstat_iter *iter = malloc(sizeof(*iter));
+
+ if (iter == NULL) {
+ JNU_ThrowOutOfMemoryError(env, "native heap");
+ return 0;
}
- if (res == -1)
+
+ iter->pos = 0;
+ iter->nentries = 0;
+ iter->buf = NULL;
+
+ nentries = getfsstat(NULL, 0, MNT_NOWAIT);
+
+ if (nentries <= 0) {
+ free(iter);
throwUnixException(env, errno);
-}
+ return 0;
+ }
-JNIEXPORT void JNICALL
-Java_sun_nio_fs_BsdNativeDispatcher_fremovexattr0(JNIEnv* env, jclass clazz,
- jint fd, jlong nameAddress)
-{
- int res = -1;
- const char* name = jlong_to_ptr(nameAddress);
+ // It's possible that a new filesystem gets mounted between
+ // the first getfsstat and the second so loop until consistant
+
+ while (nentries != iter->nentries) {
+ if (iter->buf != NULL)
+ free(iter->buf);
+
+ bufsize = nentries * sizeof(struct statfs);
+ iter->nentries = nentries;
+
+ iter->buf = malloc(bufsize);
+ if (iter->buf == NULL) {
+ free(iter);
+ JNU_ThrowOutOfMemoryError(env, "native heap");
+ return 0;
+ }
- if (my_fremovexattr_func == NULL) {
- errno = ENOTSUP;
- } else {
- /* EINTR not documented */
- res = (*my_fremovexattr_func)(fd, name);
+ nentries = getfsstat(iter->buf, bufsize, MNT_WAIT);
+ if (nentries <= 0) {
+ free(iter->buf);
+ free(iter);
+ throwUnixException(env, errno);
+ return 0;
+ }
}
- if (res == -1)
- throwUnixException(env, errno);
+
+ return (jlong)iter;
}
JNIEXPORT jint JNICALL
-Java_sun_nio_fs_BsdNativeDispatcher_flistxattr(JNIEnv* env, jclass clazz,
- jint fd, jlong listAddress, jint size)
+Java_sun_nio_fs_BsdNativeDispatcher_fsstatEntry(JNIEnv* env, jclass this,
+ jlong value, jobject entry)
{
- size_t res = -1;
- char* list = jlong_to_ptr(listAddress);
+ struct fsstat_iter *iter = jlong_to_ptr(value);
+ jsize len;
+ jbyteArray bytes;
+ char* name;
+ char* dir;
+ char* fstype;
+ char* options;
+ dev_t dev;
+
+ if (iter == NULL || iter->pos >= iter->nentries)
+ return -1;
+
+ name = iter->buf[iter->pos].f_mntfromname;
+ dir = iter->buf[iter->pos].f_mntonname;
+ fstype = iter->buf[iter->pos].f_fstypename;
+ if (iter->buf[iter->pos].f_flags & ISREADONLY)
+ options="ro";
+ else
+ options="";
+ dev = 0;
+
+ iter->pos++;
+
+ len = strlen(name);
+ bytes = (*env)->NewByteArray(env, len);
+ if (bytes == NULL)
+ return -1;
+ (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)name);
+ (*env)->SetObjectField(env, entry, entry_name, bytes);
+
+ len = strlen(dir);
+ bytes = (*env)->NewByteArray(env, len);
+ if (bytes == NULL)
+ return -1;
+ (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)dir);
+ (*env)->SetObjectField(env, entry, entry_dir, bytes);
+
+ len = strlen(fstype);
+ bytes = (*env)->NewByteArray(env, len);
+ if (bytes == NULL)
+ return -1;
+ (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)fstype);
+ (*env)->SetObjectField(env, entry, entry_fstype, bytes);
+
+ len = strlen(options);
+ bytes = (*env)->NewByteArray(env, len);
+ if (bytes == NULL)
+ return -1;
+ (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)options);
+ (*env)->SetObjectField(env, entry, entry_options, bytes);
- if (my_flistxattr_func == NULL) {
- errno = ENOTSUP;
- } else {
- /* EINTR not documented */
- res = (*my_flistxattr_func)(fd, list, (size_t)size);
- }
- if (res == (size_t)-1)
- throwUnixException(env, errno);
- return (jint)res;
-}
+ if (dev != 0)
+ (*env)->SetLongField(env, entry, entry_dev, (jlong)dev);
-JNIEXPORT jlong JNICALL
-Java_sun_nio_fs_BsdNativeDispatcher_setmntent0(JNIEnv* env, jclass this, jlong pathAddress,
- jlong modeAddress)
-{
- FILE* fp = NULL;
- const char* path = (const char*)jlong_to_ptr(pathAddress);
- const char* mode = (const char*)jlong_to_ptr(modeAddress);
-
- do {
- fp = setmntent(path, mode);
- } while (fp == NULL && errno == EINTR);
- if (fp == NULL) {
- throwUnixException(env, errno);
- }
- return ptr_to_jlong(fp);
+ return 0;
}
JNIEXPORT void JNICALL
-Java_sun_nio_fs_BsdNativeDispatcher_endmntent(JNIEnv* env, jclass this, jlong stream)
+Java_sun_nio_fs_BsdNativeDispatcher_endfsstat(JNIEnv* env, jclass this, jlong value)
{
- FILE* fp = jlong_to_ptr(stream);
- /* FIXME - man page doesn't explain how errors are returned */
- endmntent(fp);
+ struct fsstat_iter *iter = jlong_to_ptr(value);
+
+ if (iter != NULL) {
+ free(iter->buf);
+ free(iter);
+ }
}
--- ./jdk/src/solaris/native/sun/nio/fs/BsdWatchService.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/sun/nio/fs/BsdWatchService.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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 "jni.h"
-#include "jni_util.h"
-#include "jvm.h"
-#include "jlong.h"
-
-#include <stdlib.h>
-#include <dlfcn.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/poll.h>
-
-#include "sun_nio_fs_BsdWatchService.h"
-
-/* inotify.h may not be available at build time */
-#ifdef __cplusplus
-extern "C" {
-#endif
-struct inotify_event
-{
- int wd;
- uint32_t mask;
- uint32_t cookie;
- uint32_t len;
- char name __flexarr;
-};
-#ifdef __cplusplus
-}
-#endif
-
-typedef int inotify_init_func(void);
-typedef int inotify_add_watch_func(int fd, const char* path, uint32_t mask);
-typedef int inotify_rm_watch_func(int fd, uint32_t wd);
-
-inotify_init_func* my_inotify_init_func = NULL;
-inotify_add_watch_func* my_inotify_add_watch_func = NULL;
-inotify_rm_watch_func* my_inotify_rm_watch_func = NULL;
-
-static void throwUnixException(JNIEnv* env, int errnum) {
- jobject x = JNU_NewObjectByName(env, "sun/nio/fs/UnixException",
- "(I)V", errnum);
- if (x != NULL) {
- (*env)->Throw(env, x);
- }
-}
-
-JNIEXPORT void JNICALL
-Java_sun_nio_fs_BsdWatchService_init(JNIEnv *env, jclass clazz)
-{
- my_inotify_init_func = (inotify_init_func*)
- dlsym(RTLD_DEFAULT, "inotify_init");
- my_inotify_add_watch_func =
- (inotify_add_watch_func*) dlsym(RTLD_DEFAULT, "inotify_add_watch");
- my_inotify_rm_watch_func =
- (inotify_rm_watch_func*) dlsym(RTLD_DEFAULT, "inotify_rm_watch");
-
- if ((my_inotify_init_func == NULL) || (my_inotify_add_watch_func == NULL) ||
- (my_inotify_rm_watch_func == NULL)) {
- JNU_ThrowInternalError(env, "unable to get address of inotify functions");
- }
-}
-
-JNIEXPORT jint JNICALL
-Java_sun_nio_fs_BsdWatchService_eventSize(JNIEnv *env, jclass clazz)
-{
- return (jint)sizeof(struct inotify_event);
-}
-
-JNIEXPORT jintArray JNICALL
-Java_sun_nio_fs_BsdWatchService_eventOffsets(JNIEnv *env, jclass clazz)
-{
- jintArray result = (*env)->NewIntArray(env, 5);
- if (result != NULL) {
- jint arr[5];
- arr[0] = (jint)offsetof(struct inotify_event, wd);
- arr[1] = (jint)offsetof(struct inotify_event, mask);
- arr[2] = (jint)offsetof(struct inotify_event, cookie);
- arr[3] = (jint)offsetof(struct inotify_event, len);
- arr[4] = (jint)offsetof(struct inotify_event, name);
- (*env)->SetIntArrayRegion(env, result, 0, 5, arr);
- }
- return result;
-}
-
-
-JNIEXPORT jint JNICALL
-Java_sun_nio_fs_BsdWatchService_inotifyInit
- (JNIEnv* env, jclass clazz)
-{
- int ifd = (*my_inotify_init_func)();
- if (ifd == -1) {
- throwUnixException(env, errno);
- }
- return (jint)ifd;
-}
-
-JNIEXPORT jint JNICALL
-Java_sun_nio_fs_BsdWatchService_inotifyAddWatch
- (JNIEnv* env, jclass clazz, jint fd, jlong address, jint mask)
-{
- int wfd = -1;
- const char* path = (const char*)jlong_to_ptr(address);
-
- wfd = (*my_inotify_add_watch_func)((int)fd, path, mask);
- if (wfd == -1) {
- throwUnixException(env, errno);
- }
- return (jint)wfd;
-}
-
-JNIEXPORT void JNICALL
-Java_sun_nio_fs_BsdWatchService_inotifyRmWatch
- (JNIEnv* env, jclass clazz, jint fd, jint wd)
-{
- int err = (*my_inotify_rm_watch_func)((int)fd, (int)wd);
- if (err == -1)
- throwUnixException(env, errno);
-}
-
-JNIEXPORT void JNICALL
-Java_sun_nio_fs_BsdWatchService_configureBlocking
- (JNIEnv* env, jclass clazz, jint fd, jboolean blocking)
-{
- int flags = fcntl(fd, F_GETFL);
-
- if ((blocking == JNI_FALSE) && !(flags & O_NONBLOCK))
- fcntl(fd, F_SETFL, flags | O_NONBLOCK);
- else if ((blocking == JNI_TRUE) && (flags & O_NONBLOCK))
- fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
-}
-
-JNIEXPORT void JNICALL
-Java_sun_nio_fs_BsdWatchService_socketpair
- (JNIEnv* env, jclass clazz, jintArray sv)
-{
- int sp[2];
- if (socketpair(PF_UNIX, SOCK_STREAM, 0, sp) == -1) {
- throwUnixException(env, errno);
- } else {
- jint res[2];
- res[0] = (jint)sp[0];
- res[1] = (jint)sp[1];
- (*env)->SetIntArrayRegion(env, sv, 0, 2, &res[0]);
- }
-
-}
-
-JNIEXPORT jint JNICALL
-Java_sun_nio_fs_BsdWatchService_poll
- (JNIEnv* env, jclass clazz, jint fd1, jint fd2)
-{
- struct pollfd ufds[2];
- int n;
-
- ufds[0].fd = fd1;
- ufds[0].events = POLLIN;
- ufds[1].fd = fd2;
- ufds[1].events = POLLIN;
-
- n = poll(&ufds[0], 2, -1);
- if (n == -1) {
- if (errno == EINTR) {
- n = 0;
- } else {
- throwUnixException(env, errno);
- }
- }
- return (jint)n;
-
-
-}
--- ./jdk/src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c 2010-06-15 22:07:39.000000000 -0700
@@ -30,7 +30,9 @@
#include <stdlib.h>
#include <dlfcn.h>
+#ifndef __APPLE__
#include <link.h>
+#endif
#ifdef __solaris__
#include <strings.h>
--- ./jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c 2010-06-15 22:07:39.000000000 -0700
@@ -49,6 +49,11 @@
#include <mntent.h>
#endif
+#ifdef _ALLBSD_SOURCE
+#include <string.h>
+#include "largefile_bsd.h"
+#endif
+
#include "jni.h"
#include "jni_util.h"
#include "jlong.h"
@@ -213,6 +218,8 @@
flags |= sun_nio_fs_UnixNativeDispatcher_HAS_AT_SYSCALLS;
}
+ my_fdopendir_func = (fdopendir_func*) dlsym(RTLD_DEFAULT, "fdopendir");
+
return flags;
}
@@ -1016,6 +1023,10 @@
{
#ifdef __solaris__
struct extmnttab ent;
+#elif defined(_ALLBSD_SOURCE)
+ char buf[1024];
+ char *str;
+ char *last;
#else
struct mntent ent;
char buf[1024];
@@ -1044,6 +1055,25 @@
throwUnixException(env, errno);
return -1;
}
+#elif defined(_ALLBSD_SOURCE)
+again:
+ if (!(str = fgets(buf, sizeof(buf), fp)))
+ return -1;
+
+ name = strtok_r(str, " \t\n", &last);
+ if (name == NULL)
+ return -1;
+
+ // skip comments
+ if (*name == '#')
+ goto again;
+
+ dir = strtok_r((char *)NULL, " \t\n", &last);
+ fstype = strtok_r((char *)NULL, " \t\n", &last);
+ options = strtok_r((char *)NULL, " \t\n", &last);
+ if (options == NULL)
+ return -1;
+ dev = 0;
#else
m = getmntent_r(fp, &ent, (char*)&buf, buflen);
if (m == NULL)
--- ./jdk/src/solaris/native/sun/nio/fs/genUnixConstants.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/nio/fs/genUnixConstants.c 2010-06-15 22:07:39.000000000 -0700
@@ -63,7 +63,12 @@
DEFX(O_EXCL);
DEFX(O_TRUNC);
DEFX(O_SYNC);
+#ifndef O_DSYNC
+ // At least FreeBSD doesn't define O_DSYNC
+ emit("O_DSYNC", O_SYNC);
+#else
DEFX(O_DSYNC);
+#endif
DEFX(O_NOFOLLOW);
// mode masks
@@ -106,7 +111,12 @@
DEF(ENOSYS);
DEF(ELOOP);
DEF(EROFS);
+#ifndef ENODATA
+ // Only used in Linux java source, provide any value so it compiles
+ emit("ENODATA", ELAST);
+#else
DEF(ENODATA);
+#endif
DEF(ERANGE);
// flags used with openat/unlinkat/etc.
--- ./jdk/src/solaris/native/sun/security/jgss/wrapper/NativeFunc.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/security/jgss/wrapper/NativeFunc.c 2010-06-15 22:07:39.000000000 -0700
@@ -26,7 +26,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
+#ifndef __APPLE__
#include <link.h>
+#endif
#include "NativeFunc.h"
/* standard GSS method names (ordering is from mapfile) */
--- ./jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c 2010-06-15 22:07:39.000000000 -0700
@@ -28,12 +28,19 @@
#include <string.h>
#include <dlfcn.h>
+#ifndef __APPLE__
#include <link.h>
+#endif
#include <jni_util.h>
#include "j2secmod.h"
+#ifndef RTLD_NOLOAD
+/* A gross hack that will work if the NSS library is only opened once */
+static void *nssLibHandle = NULL;
+#endif
+
void *findFunction(JNIEnv *env, jlong jHandle, const char *functionName) {
void *hModule = (void*)jHandle;
void *fAddress = dlsym(hModule, functionName);
@@ -51,7 +58,11 @@
{
const char *libName = (*env)->GetStringUTFChars(env, jLibName, NULL);
// look up existing handle only, do not load
+#ifdef RTLD_NOLOAD
void *hModule = dlopen(libName, RTLD_NOLOAD);
+#else
+ void *hModule = nssLibHandle;
+#endif
dprintf2("-handle for %s: %u\n", libName, hModule);
(*env)->ReleaseStringUTFChars(env, jLibName, libName);
return (jlong)hModule;
@@ -65,6 +76,9 @@
dprintf1("-lib %s\n", libName);
hModule = dlopen(libName, RTLD_LAZY);
+#ifndef RTLD_NOLOAD
+ nssLibHandle = hModule;
+#endif
(*env)->ReleaseStringUTFChars(env, jLibName, libName);
dprintf2("-handle: %u (0X%X)\n", hModule, hModule);
--- ./jdk/src/solaris/native/sun/security/pkcs11/wrapper/p11_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/security/pkcs11/wrapper/p11_md.c 2010-06-15 22:07:39.000000000 -0700
@@ -64,7 +64,9 @@
#include <assert.h>
#include <dlfcn.h>
+#ifndef __APPLE__
#include <link.h>
+#endif
#include <jni.h>
--- ./jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c 2010-06-15 22:07:39.000000000 -0700
@@ -29,7 +29,9 @@
#include <assert.h>
#include <dlfcn.h>
+#ifndef __APPLE__
#include <link.h>
+#endif
#include <winscard.h>
--- ./jdk/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c 2010-10-31 13:48:56.000000000 -0700
@@ -1,12 +1,12 @@
/*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
* 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
+ * published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
+ * by Sun 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
@@ -18,9 +18,9 @@
* 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.
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
*/
#include "jni.h"
@@ -35,10 +35,10 @@
#include <dirent.h>
#include <ctype.h>
#include <sys/types.h>
-#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
+#include <fcntl.h>
#include "sun_tools_attach_BsdVirtualMachine.h"
@@ -49,85 +49,6 @@
} while(0)
/*
- * Defines a callback that is invoked for each process
- */
-typedef void (*ProcessCallback)(const pid_t pid, void* user_data);
-
-/*
- * Invokes the callback function for each process
- */
-static void forEachProcess(ProcessCallback f, void* user_data) {
- DIR* dir;
- struct dirent* ptr;
-
- /*
- * To locate the children we scan /proc looking for files that have a
- * position integer as a filename.
- */
- if ((dir = opendir("/proc")) == NULL) {
- return;
- }
- while ((ptr = readdir(dir)) != NULL) {
- pid_t pid;
-
- /* skip current/parent directories */
- if (strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0) {
- continue;
- }
-
- /* skip files that aren't numbers */
- pid = (pid_t)atoi(ptr->d_name);
- if ((int)pid <= 0) {
- continue;
- }
-
- /* invoke the callback */
- (*f)(pid, user_data);
- }
- closedir(dir);
-}
-
-
-/*
- * Returns the parent pid of a given pid, or -1 if not found
- */
-static pid_t getParent(pid_t pid) {
- char state;
- FILE* fp;
- char stat[2048];
- int statlen;
- char fn[32];
- int i, p;
- char* s;
-
- /*
- * try to open /proc/%d/stat
- */
- sprintf(fn, "/proc/%d/stat", pid);
- fp = fopen(fn, "r");
- if (fp == NULL) {
- return -1;
- }
-
- /*
- * The format is: pid (command) state ppid ...
- * As the command could be anything we must find the right most
- * ")" and then skip the white spaces that follow it.
- */
- statlen = fread(stat, 1, 2047, fp);
- stat[statlen] = '\0';
- fclose(fp);
- s = strrchr(stat, ')');
- if (s == NULL) {
- return -1;
- }
- do s++; while (isspace(*s));
- i = sscanf(s, "%c %d", &state, &p);
- return (pid_t)p;
-}
-
-
-/*
* Class: sun_tools_attach_BsdVirtualMachine
* Method: socket
* Signature: ()I
@@ -188,146 +109,6 @@
/*
* Class: sun_tools_attach_BsdVirtualMachine
- * Method: isBsdThreads
- * Signature: ()V
- */
-JNIEXPORT jboolean JNICALL Java_sun_tools_attach_BsdVirtualMachine_isBsdThreads
- (JNIEnv *env, jclass cls)
-{
-# ifndef _CS_GNU_LIBPTHREAD_VERSION
-# define _CS_GNU_LIBPTHREAD_VERSION 3
-# endif
- size_t n;
- char* s;
- jboolean res;
-
- n = confstr(_CS_GNU_LIBPTHREAD_VERSION, NULL, 0);
- if (n <= 0) {
- /* glibc before 2.3.2 only has BsdThreads */
- return JNI_TRUE;
- }
-
- s = (char *)malloc(n);
- if (s == NULL) {
- JNU_ThrowOutOfMemoryError(env, "malloc failed");
- return JNI_TRUE;
- }
- confstr(_CS_GNU_LIBPTHREAD_VERSION, s, n);
-
- /*
- * If the LIBPTHREAD version include "NPTL" then we know we
- * have the new threads library and not BsdThreads
- */
- res = (jboolean)(strstr(s, "NPTL") == NULL);
- free(s);
- return res;
-}
-
-/*
- * Structure and callback function used to count the children of
- * a given process, and record the pid of the "manager thread".
- */
-typedef struct {
- pid_t ppid;
- int count;
- pid_t mpid;
-} ChildCountContext;
-
-static void ChildCountCallback(const pid_t pid, void* user_data) {
- ChildCountContext* context = (ChildCountContext*)user_data;
- if (getParent(pid) == context->ppid) {
- context->count++;
- /*
- * Remember the pid of the first child. If the final count is
- * one then this is the pid of the BsdThreads manager.
- */
- if (context->count == 1) {
- context->mpid = pid;
- }
- }
-}
-
-/*
- * Class: sun_tools_attach_BsdVirtualMachine
- * Method: getBsdThreadsManager
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_sun_tools_attach_BsdVirtualMachine_getBsdThreadsManager
- (JNIEnv *env, jclass cls, jint pid)
-{
- ChildCountContext context;
-
- /*
- * Iterate over all processes to find how many children 'pid' has
- */
- context.ppid = pid;
- context.count = 0;
- context.mpid = (pid_t)0;
- forEachProcess(ChildCountCallback, (void*)&context);
-
- /*
- * If there's no children then this is likely the pid of the primordial
- * created by the launcher - in that case the BsdThreads manager is the
- * parent of this process.
- */
- if (context.count == 0) {
- pid_t parent = getParent(pid);
- if ((int)parent > 0) {
- return (jint)parent;
- }
- }
-
- /*
- * There's one child so this is likely the embedded VM case where the
- * the primordial thread == BsdThreads initial thread. The BsdThreads
- * manager in that case is the child.
- */
- if (context.count == 1) {
- return (jint)context.mpid;
- }
-
- /*
- * If we get here it's most likely we were given the wrong pid
- */
- JNU_ThrowIOException(env, "Unable to get pid of BsdThreads manager thread");
- return -1;
-}
-
-/*
- * Structure and callback function used to send a QUIT signal to all
- * children of a given process
- */
-typedef struct {
- pid_t ppid;
-} SendQuitContext;
-
-static void SendQuitCallback(const pid_t pid, void* user_data) {
- SendQuitContext* context = (SendQuitContext*)user_data;
- pid_t parent = getParent(pid);
- if (parent == context->ppid) {
- kill(pid, SIGQUIT);
- }
-}
-
-/*
- * Class: sun_tools_attach_BsdVirtualMachine
- * Method: sendQuitToChildrenOf
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_sun_tools_attach_BsdVirtualMachine_sendQuitToChildrenOf
- (JNIEnv *env, jclass cls, jint pid)
-{
- SendQuitContext context;
- context.ppid = (pid_t)pid;
-
- /*
- * Iterate over all children of 'pid' and send a QUIT signal to each.
- */
- forEachProcess(SendQuitCallback, (void*)&context);
-}
-
-/*
- * Class: sun_tools_attach_BsdVirtualMachine
* Method: sendQuitTo
* Signature: (I)V
*/
@@ -350,7 +131,7 @@
jboolean isCopy;
const char* p = GetStringPlatformChars(env, path, &isCopy);
if (p != NULL) {
- struct stat64 sb;
+ struct stat sb;
uid_t uid, gid;
int res;
@@ -361,7 +142,7 @@
uid = geteuid();
gid = getegid();
- res = stat64(p, &sb);
+ res = stat(p, &sb);
if (res != 0) {
/* save errno */
res = errno;
@@ -459,3 +240,40 @@
} while (remaining > 0);
}
+
+/*
+ * Class: sun_tools_attach_BSDVirtualMachine
+ * Method: createAttachFile
+ * Signature: (Ljava.lang.String;)V
+ */
+JNIEXPORT void JNICALL Java_sun_tools_attach_BsdVirtualMachine_createAttachFile(JNIEnv *env, jclass cls, jstring path)
+{
+ const char* _path;
+ jboolean isCopy;
+ int fd, rc;
+
+ _path = GetStringPlatformChars(env, path, &isCopy);
+ if (_path == NULL) {
+ JNU_ThrowIOException(env, "Must specify a path");
+ return;
+ }
+
+ RESTARTABLE(open(_path, O_CREAT | O_EXCL, S_IWUSR | S_IRUSR), fd);
+ if (fd == -1) {
+ /* release p here before we throw an I/O exception */
+ if (isCopy) {
+ JNU_ReleaseStringPlatformChars(env, path, _path);
+ }
+ JNU_ThrowIOExceptionWithLastError(env, "open");
+ return;
+ }
+
+ RESTARTABLE(chown(_path, geteuid(), getegid()), rc);
+
+ RESTARTABLE(close(fd), rc);
+
+ /* release p here */
+ if (isCopy) {
+ JNU_ReleaseStringPlatformChars(env, path, _path);
+ }
+}
--- ./jdk/src/solaris/native/sun/xawt/XWindow.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/xawt/XWindow.c 2010-06-15 22:07:39.000000000 -0700
@@ -228,10 +228,10 @@
{java_awt_event_KeyEvent_VK_DOWN, XK_Down, FALSE, java_awt_event_KeyEvent_KEY_LOCATION_STANDARD},
/* Keypad equivalents of Triangular Navigation Block */
- {java_awt_event_KeyEvent_VK_KP_LEFT, XK_KP_Left, FALSE, java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD},
- {java_awt_event_KeyEvent_VK_KP_UP, XK_KP_Up, FALSE, java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD},
- {java_awt_event_KeyEvent_VK_KP_RIGHT, XK_KP_Right, FALSE, java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD},
- {java_awt_event_KeyEvent_VK_KP_DOWN, XK_KP_Down, FALSE, java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD},
+ {java_awt_event_KeyEvent_VK_LEFT, XK_KP_Left, FALSE, java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD},
+ {java_awt_event_KeyEvent_VK_UP, XK_KP_Up, FALSE, java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD},
+ {java_awt_event_KeyEvent_VK_RIGHT, XK_KP_Right, FALSE, java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD},
+ {java_awt_event_KeyEvent_VK_DOWN, XK_KP_Down, FALSE, java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD},
/* Other vendor-specific Triangular Navigation Block */
{java_awt_event_KeyEvent_VK_LEFT, osfXK_Left, FALSE, java_awt_event_KeyEvent_KEY_LOCATION_STANDARD},
@@ -865,7 +865,7 @@
{
KeySym originalKeysym = *keysym;
-#ifndef __linux__
+#if !defined(__linux__) && !defined(_ALLBSD_SOURCE)
/* The following code on Linux will cause the keypad keys
* not to echo on JTextField when the NumLock is on. The
* keysyms will be 0, because the last parameter 2 is not defined.
--- ./jdk/src/solaris/native/sun/xawt/awt_Desktop.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/native/sun/xawt/awt_Desktop.c 2010-10-31 14:12:37.000000000 -0700
@@ -24,6 +24,7 @@
*/
#include <jni.h>
+#include <jvm_md.h>
#include <dlfcn.h>
typedef int gboolean;
@@ -39,12 +40,15 @@
void *gnome_handle;
const char *errmsg;
- vfs_handle = dlopen("libgnomevfs-2.so.0", RTLD_LAZY);
+ vfs_handle = dlopen(VERSIONED_JNI_LIB_NAME("gnomevfs-2", "0"), RTLD_LAZY);
if (vfs_handle == NULL) {
+ vfs_handle = dlopen(JNI_LIB_NAME("gnomevfs-2"), RTLD_LAZY);
+ if (vfs_handle == NULL) {
#ifdef INTERNAL_BUILD
- fprintf(stderr, "can not load libgnomevfs-2.so\n");
+ fprintf(stderr, "can not load libgnomevfs-2.so\n");
#endif
- return 0;
+ return 0;
+ }
}
dlerror(); /* Clear errors */
gnome_vfs_init = (GNOME_VFS_INIT_TYPE*)dlsym(vfs_handle, "gnome_vfs_init");
@@ -57,12 +61,15 @@
// call gonme_vfs_init()
(*gnome_vfs_init)();
- gnome_handle = dlopen("libgnome-2.so.0", RTLD_LAZY);
+ gnome_handle = dlopen(VERSIONED_JNI_LIB_NAME("gnome-2", "0"), RTLD_LAZY);
if (gnome_handle == NULL) {
+ gnome_handle = dlopen(JNI_LIB_NAME("gnome-2"), RTLD_LAZY);
+ if (gnome_handle == NULL) {
#ifdef INTERNAL_BUILD
- fprintf(stderr, "can not load libgnome-2.so\n");
+ fprintf(stderr, "can not load libgnome-2.so\n");
#endif
- return 0;
+ return 0;
+ }
}
dlerror(); /* Clear errors */
gnome_url_show = (GNOME_URL_SHOW_TYPE*)dlsym(gnome_handle, "gnome_url_show");
--- ./jdk/src/solaris/npt/npt_md.h 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/npt/npt_md.h 2010-06-15 22:07:39.000000000 -0700
@@ -32,9 +32,10 @@
#include <string.h>
#include <errno.h>
#include <dlfcn.h>
+#ifndef __APPLE__
#include <link.h>
-
-#define NPT_LIBNAME "libnpt.so"
+#endif
+#include <jvm_md.h>
#define NPT_INITIALIZE(pnpt,version,options) \
{ \
@@ -43,7 +44,7 @@
\
if ( (pnpt) == NULL ) NPT_ERROR("NptEnv* is NULL"); \
*(pnpt) = NULL; \
- _handle = dlopen(NPT_LIBNAME, RTLD_LAZY); \
+ _handle = dlopen(JNI_LIB_NAME("npt"), RTLD_LAZY); \
if ( _handle == NULL ) NPT_ERROR("Cannot open library"); \
_sym = dlsym(_handle, "nptInitialize"); \
if ( _sym == NULL ) NPT_ERROR("Cannot find nptInitialize"); \
--- ./jdk/src/solaris/transport/socket/socket_md.c 2010-11-04 16:13:26.000000000 -0700
+++ ./jdk/src/solaris/transport/socket/socket_md.c 2010-06-15 22:07:39.000000000 -0700
@@ -36,7 +36,7 @@
#ifdef __solaris__
#include <thread.h>
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <pthread.h>
#include <sys/poll.h>
#endif
@@ -283,7 +283,7 @@
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
int
dbgsysTlsAlloc() {
pthread_key_t key;
--- ./jdk/test/Makefile 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/Makefile 2010-07-24 14:31:30.000000000 -0700
@@ -79,6 +79,16 @@
endif
OS_VERSION := $(shell $(UNAME) -r)
endif
+ifeq ($(UNAME_S), Darwin)
+ OS_NAME = bsd
+ OS_ARCH := $(shell $(UNAME) -m)
+ OS_VERSION := $(shell $(UNAME) -r)
+endif
+ifeq ($(findstring BSD,$(UNAME_S)), BSD)
+ OS_NAME = bsd
+ OS_ARCH := $(shell $(UNAME) -m)
+ OS_VERSION := $(shell $(UNAME) -r)
+endif
ifeq ($(OS_NAME),)
OS_NAME = windows
# GNU Make or MKS overrides $(PROCESSOR_ARCHITECTURE) to always
--- ./jdk/test/com/sun/jdi/ImmutableResourceTest.sh 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/com/sun/jdi/ImmutableResourceTest.sh 2010-06-15 22:07:44.000000000 -0700
@@ -56,7 +56,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
;;
--- ./jdk/test/com/sun/jdi/JITDebug.sh 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/com/sun/jdi/JITDebug.sh 2010-06-15 22:07:44.000000000 -0700
@@ -63,7 +63,7 @@
OS=`uname -s`
export TRANSPORT_METHOD
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
TRANSPORT_METHOD=dt_socket
;;
--- ./jdk/test/com/sun/jdi/PrivateTransportTest.sh 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/com/sun/jdi/PrivateTransportTest.sh 2010-06-15 22:07:45.000000000 -0700
@@ -121,10 +121,14 @@
esac
libloc=${jreloc}/lib/${libarch}
;;
- Linux)
+ Linux | *BSD)
xx=`find ${jreloc}/lib -name libdt_socket.so`
libloc=`dirname ${xx}`
;;
+ Darwin)
+ xx=`find ${jreloc}/lib -name libdt_socket.dylib`
+ libloc=`dirname ${xx}`
+ ;;
Windows*)
libloc=${jreloc}/bin
sep=';'
--- ./jdk/test/com/sun/jdi/ShellScaffold.sh 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/com/sun/jdi/ShellScaffold.sh 2010-08-14 11:45:21.000000000 -0700
@@ -292,7 +292,7 @@
psCmd=ps
jstack=jstack.exe
;;
- SunOS | Linux)
+ SunOS | Linux | *BSD | Darwin)
transport=dt_socket
address=
devnull=/dev/null
--- ./jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh 2010-06-15 22:07:45.000000000 -0700
@@ -112,7 +112,7 @@
fi
;;
- Linux )
+ Linux | *BSD | Darwin )
pass "This test always passes on $OS"
;;
--- ./jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh 2010-06-15 22:07:45.000000000 -0700
@@ -45,10 +45,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
;;
Windows* | CYGWIN*)
--- ./jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh 2010-06-15 22:07:46.000000000 -0700
@@ -83,6 +83,10 @@
total_swap=`free -b | grep -i swap | awk '{print $2}'`
runOne GetTotalSwapSpaceSize $total_swap
;;
+ *BSD )
+ # FIXME: Determine swap space.
+ runOne GetTotalSwapSpaceSize "sanity-only"
+ ;;
* )
runOne GetTotalSwapSpaceSize "sanity-only"
;;
--- ./jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetMaxFileDescriptorCount.sh 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetMaxFileDescriptorCount.sh 2010-06-15 22:07:46.000000000 -0700
@@ -48,7 +48,7 @@
# Test GetMaxFileDescriptorCount if we are running on Unix
case `uname -s` in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
runOne GetMaxFileDescriptorCount
;;
* )
--- ./jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetOpenFileDescriptorCount.sh 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetOpenFileDescriptorCount.sh 2010-06-15 22:07:46.000000000 -0700
@@ -48,7 +48,7 @@
# Test GetOpenFileDescriptorCount if we are running on Unix
case `uname -s` in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
runOne GetOpenFileDescriptorCount
;;
* )
--- ./jdk/test/com/sun/tools/attach/CommonSetup.sh 2010-11-04 16:13:27.000000000 -0700
+++ ./jdk/test/com/sun/tools/attach/CommonSetup.sh 2010-06-15 22:07:47.000000000 -0700
@@ -36,11 +36,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/java/awt/PrintJob/Text/stringwidth.sh 2010-11-04 16:13:28.000000000 -0700
+++ ./jdk/test/java/awt/PrintJob/Text/stringwidth.sh 2010-01-30 09:28:46.000000000 -0800
@@ -25,10 +25,11 @@
fi
-if [ $OS = SunOS -o $OS = Linux ]
-then
- exit 0
-fi
+case "${OS}" in
+ SunOS | Linux | *BSD | Darwin )
+ exit 0
+ ;;
+esac
# Windows
if [ -z "${TESTJAVA}" ] ; then
--- ./jdk/test/java/io/File/GetXSpace.sh 2010-11-04 16:13:28.000000000 -0700
+++ ./jdk/test/java/io/File/GetXSpace.sh 2010-06-15 22:07:52.000000000 -0700
@@ -26,7 +26,7 @@
# set platform-dependent variable
OS=`uname -s`
case "$OS" in
- SunOS | Linux ) TMP=/tmp ;;
+ SunOS | Linux | *BSD | Darwin ) TMP=/tmp ;;
Windows_98 ) return ;;
Windows* ) SID=`sid`; TMP="c:/temp" ;;
* )
--- ./jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh 2010-11-04 16:13:28.000000000 -0700
+++ ./jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh 2010-06-15 22:07:53.000000000 -0700
@@ -41,7 +41,7 @@
# Need to determine the classpath separator and filepath separator based on the
# operating system.
case "$OS" in
-SunOS | Linux )
+SunOS | Linux | *BSD | Darwin )
PS=":" ;;
Windows* | CYGWIN* )
PS=";" ;;
--- ./jdk/test/java/io/Serializable/serialver/classpath/run.sh 2010-11-04 16:13:28.000000000 -0700
+++ ./jdk/test/java/io/Serializable/serialver/classpath/run.sh 2010-06-15 22:07:54.000000000 -0700
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":" ;;
Windows* | CYGWIN* )
PS=";" ;;
--- ./jdk/test/java/io/Serializable/serialver/nested/run.sh 2010-11-04 16:13:28.000000000 -0700
+++ ./jdk/test/java/io/Serializable/serialver/nested/run.sh 2010-06-15 22:07:54.000000000 -0700
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":" ;;
Windows* | CYGWIN* )
PS=";" ;;
--- ./jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh 2010-11-04 16:13:28.000000000 -0700
+++ ./jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh 2010-06-15 22:07:55.000000000 -0700
@@ -49,10 +49,7 @@
# set platform-specific variables
OS=`uname -s`
case "$OS" in
- SunOS )
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
FS="/"
;;
Windows* | CYGWIN* )
--- ./jdk/test/java/lang/StringCoding/CheckEncodings.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/lang/StringCoding/CheckEncodings.sh 2010-06-15 22:07:55.000000000 -0700
@@ -30,7 +30,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux ) ;;
+ SunOS | Linux | *BSD | Darwin ) ;;
Windows* | CYGWIN* )
echo "Passed"; exit 0 ;;
* ) echo "Unrecognized system!" ; exit 1 ;;
--- ./jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh 2010-06-15 22:07:56.000000000 -0700
@@ -44,7 +44,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/java/lang/instrument/MakeJAR2.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/lang/instrument/MakeJAR2.sh 2010-06-15 22:07:56.000000000 -0700
@@ -49,7 +49,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
;;
--- ./jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh 2010-06-15 22:07:56.000000000 -0700
@@ -35,11 +35,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh 2010-06-15 22:07:57.000000000 -0700
@@ -61,10 +61,7 @@
while true; do
echo "Run $i: TestSystemLoadAvg"
case `uname -s` in
- SunOS )
- runOne GetSystemLoadAverage
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
runOne GetSystemLoadAverage
;;
* )
--- ./jdk/test/java/net/Authenticator/B4933582.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/net/Authenticator/B4933582.sh 2010-06-15 22:07:58.000000000 -0700
@@ -26,7 +26,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh 2010-06-15 22:07:58.000000000 -0700
@@ -27,11 +27,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PATHSEP=":"
- FILESEP="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
FILESEP="/"
;;
--- ./jdk/test/java/net/Socket/OldSocketImpl.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/net/Socket/OldSocketImpl.sh 2010-06-15 22:07:59.000000000 -0700
@@ -28,7 +28,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/java/net/URL/B5086147.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/net/URL/B5086147.sh 2010-06-15 22:07:59.000000000 -0700
@@ -26,7 +26,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
exit 0
;;
CYGWIN* )
--- ./jdk/test/java/net/URL/runconstructor.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/net/URL/runconstructor.sh 2010-06-15 22:07:59.000000000 -0700
@@ -27,7 +27,7 @@
#
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/java/net/URLClassLoader/B5077773.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/net/URLClassLoader/B5077773.sh 2010-06-15 22:07:59.000000000 -0700
@@ -34,11 +34,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/java/net/URLClassLoader/sealing/checksealed.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/net/URLClassLoader/sealing/checksealed.sh 2010-06-15 22:07:59.000000000 -0700
@@ -27,11 +27,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/java/net/URLConnection/6212146/test.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/net/URLConnection/6212146/test.sh 2010-06-15 22:07:59.000000000 -0700
@@ -33,11 +33,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/Makefile 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/Makefile 2010-01-30 09:28:55.000000000 -0800
@@ -71,6 +71,48 @@
EXTRA_LIBS = -lc
endif
+ifeq ($(uname), Darwin)
+ PLATFORM = bsd
+ archExpr = case "`$(UNAME) -m`" in \
+ i[3-6]86) \
+ $(ECHO) i586 \
+ ;; \
+ sparc*) \
+ $(ECHO) sparc \
+ ;; \
+ *) \
+ $(UNAME) -m \
+ ;; \
+ esac
+ ARCH := $(shell $(archExpr) )
+ CC = gcc
+ CFLAGS = -fno-strict-aliasing -fPIC -W -Wall
+ LD = ld
+ LDFLAGS_COMMON = -shared
+ EXTRA_LIBS = -lc
+endif
+
+ifeq ($(findstring BSD,$(uname)), BSD)
+ PLATFORM = bsd
+ archExpr = case "`$(UNAME) -m`" in \
+ i[3-6]86) \
+ $(ECHO) i586 \
+ ;; \
+ sparc*) \
+ $(ECHO) sparc \
+ ;; \
+ *) \
+ $(UNAME) -m \
+ ;; \
+ esac
+ ARCH := $(shell $(archExpr) )
+ CC = gcc
+ CFLAGS = -fno-strict-aliasing -fPIC -W -Wall
+ LD = ld
+ LDFLAGS_COMMON = -shared
+ EXTRA_LIBS = -lc
+endif
+
LIBDIR=lib/$(PLATFORM)-$(ARCH)
LAUNCHERLIB=$(LIBDIR)/libLauncher.so
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/bsd-i586/libLauncher.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/bsd-i586/libLauncher.so differ
--- ./jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/run_tests.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/run_tests.sh 2010-06-15 22:08:01.000000000 -0700
@@ -33,11 +33,14 @@
# @run shell run_tests.sh
os=`uname -s`
-
-if [ "$os" != "Linux" -a "$os" != "SunOS" ]; then
- echo "Test not designed to run on this operating system, skipping..."
- exit 0
-fi
+case "${os}" in
+ SunOS | Linux | *BSD | Darwin )
+ ;;
+ * )
+ echo "Test not designed to run on this operating system, skipping..."
+ exit 0
+ ;;
+esac
# if TESTJAVA isn't set then we assume an interactive run. So that it's
@@ -67,7 +70,8 @@
# On Solaris we assume 64-bit if java -d64 works.
DFLAG=
-if [ "$os" = "SunOS" ]; then
+case "${os}" in
+ SunOS )
PLATFORM=solaris
case "`uname -p`" in
i[3-9]86)
@@ -84,9 +88,9 @@
fi
;;
esac
-fi
+ ;;
-if [ "$os" = "Linux" ]; then
+ Linux )
PLATFORM=linux
ARCH=unknown
case "`uname -m`" in
@@ -100,7 +104,24 @@
ARCH=amd64
;;
esac
-fi
+ ;;
+
+ *BSD | Darwin )
+ PLATFORM=bsd
+ ARCH=unknown
+ case "`uname -m`" in
+ i[3-6]86)
+ ARCH=i586
+ ;;
+ ia64)
+ ARCH=ia64
+ ;;
+ x86_64)
+ ARCH=amd64
+ ;;
+ esac
+ ;;
+esac
LIBDIR=lib/${PLATFORM}-${ARCH}
LAUNCHERLIB=${LIBDIR}/libLauncher.so
--- ./jdk/test/java/nio/charset/Charset/default.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/nio/charset/Charset/default.sh 2010-06-15 22:08:01.000000000 -0700
@@ -41,10 +41,14 @@
fi
s="`uname -s`"
-if [ "$s" != Linux -a "$s" != SunOS ]; then
- echo "$s: locale command not supported on this system, skipping..."
- exit 0
-fi
+case "$s" in
+ Linux|SunOS|*BSD|Darwin)
+ ;;
+ *)
+ echo "$s: locale command not supported on this system, skipping..."
+ exit 0
+ ;;
+esac
JAVA=$TESTJAVA/bin/java
--- ./jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh 2010-06-15 22:08:01.000000000 -0700
@@ -34,7 +34,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux ) ;;
+ SunOS | Linux | *BSD | Darwin) ;;
# Skip locale test for Windows
Windows* )
echo "Passed"; exit 0 ;;
--- ./jdk/test/java/nio/charset/spi/basic.sh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/nio/charset/spi/basic.sh 2010-06-15 22:08:01.000000000 -0700
@@ -70,10 +70,14 @@
L="$1"
shift
s=`uname -s`
- if [ $s != Linux -a $s != SunOS ]; then
- echo "$L: Locales not supported on this system, skipping..."
- exit 0
- fi
+ case "$s" in
+ Linux|SunOS|*BSD|Darwin)
+ ;;
+ *)
+ echo "$L: Locales not supported on this system, skipping..."
+ exit 0
+ ;;
+ esac
if [ "x`locale -a | grep $L`" != "x$L" ]; then
echo "$L: Locale not supported, skipping..."
exit 0
@@ -85,7 +89,7 @@
cd $TMP
case `uname` in
- SunOS | Linux ) CPS=':' ;;
+ SunOS | Linux | *BSD | Darwin) CPS=':' ;;
Windows* ) CPS=';' ;;
*) echo "Unknown platform: `uname`"; exit 1 ;;
esac
--- ./jdk/test/java/nio/file/Path/CopyAndMove.java 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/nio/file/Path/CopyAndMove.java 2010-06-15 22:08:01.000000000 -0700
@@ -147,7 +147,8 @@
// get file attributes of source file
String os = System.getProperty("os.name");
- if (os.equals("SunOS") || os.equals("Linux")) {
+ if (os.equals("SunOS") || os.equals("Linux") ||
+ os.endsWith("BSD") || os.equals("Darwin")) {
posixAttributes = Attributes.readPosixFileAttributes(source, NOFOLLOW_LINKS);
basicAttributes = posixAttributes;
}
--- ./jdk/test/java/rmi/reliability/launch_reliability.ksh 2010-11-04 16:13:29.000000000 -0700
+++ ./jdk/test/java/rmi/reliability/launch_reliability.ksh 2010-06-15 22:08:03.000000000 -0700
@@ -84,14 +84,12 @@
# set platform-dependent variables
-if [ `uname` = "SunOS" ] ; then
+case `uname` in
+ SunOS | Linux | *BSD | Darwin )
PATH_SEP=":"
-
-elif [ `uname` = "Linux" ] ; then
- PATH_SEP=":"
-else
+ * )
PATH_SEP=";"
-fi
+esac
export PATH_SEP
mainpid=$$
--- ./jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh 2010-11-04 16:13:30.000000000 -0700
+++ ./jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh 2010-06-15 22:08:05.000000000 -0700
@@ -46,11 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PATHSEP=":"
- FILESEP="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
FILESEP="/"
;;
--- ./jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh 2010-11-04 16:13:30.000000000 -0700
+++ ./jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh 2010-06-15 22:08:05.000000000 -0700
@@ -34,11 +34,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PATHSEP=":"
- FILESEP="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
FILESEP="/"
;;
--- ./jdk/test/java/security/Security/signedfirst/Dyn.sh 2010-11-04 16:13:30.000000000 -0700
+++ ./jdk/test/java/security/Security/signedfirst/Dyn.sh 2010-06-15 22:08:05.000000000 -0700
@@ -46,11 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PATHSEP=":"
- FILESEP="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
FILESEP="/"
;;
--- ./jdk/test/java/security/Security/signedfirst/Static.sh 2010-11-04 16:13:30.000000000 -0700
+++ ./jdk/test/java/security/Security/signedfirst/Static.sh 2010-06-15 22:08:05.000000000 -0700
@@ -46,11 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PATHSEP=":"
- FILESEP="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
FILESEP="/"
;;
--- ./jdk/test/java/util/Currency/PropertiesTest.sh 2010-11-04 16:13:30.000000000 -0700
+++ ./jdk/test/java/util/Currency/PropertiesTest.sh 2010-01-30 09:40:02.000000000 -0800
@@ -30,7 +30,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/java/util/PluggableLocale/ExecTest.sh 2010-11-04 16:13:30.000000000 -0700
+++ ./jdk/test/java/util/PluggableLocale/ExecTest.sh 2010-06-15 22:08:06.000000000 -0700
@@ -58,7 +58,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/java/util/ResourceBundle/Bug6299235Test.sh 2010-11-04 16:13:30.000000000 -0700
+++ ./jdk/test/java/util/ResourceBundle/Bug6299235Test.sh 2010-06-15 22:08:07.000000000 -0700
@@ -31,7 +31,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
FILESEP="/"
;;
--- ./jdk/test/java/util/ResourceBundle/Control/ExpirationTest.sh 2010-11-04 16:13:30.000000000 -0700
+++ ./jdk/test/java/util/ResourceBundle/Control/ExpirationTest.sh 2010-06-15 22:08:07.000000000 -0700
@@ -75,7 +75,7 @@
SunOS)
DEL=":"
;;
-Linux)
+Linux|*BSD|Darwin)
DEL=":"
HAS_S=YES
;;
--- ./jdk/test/java/util/ServiceLoader/basic.sh 2010-11-04 16:13:30.000000000 -0700
+++ ./jdk/test/java/util/ServiceLoader/basic.sh 2010-06-15 22:08:07.000000000 -0700
@@ -42,9 +42,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- SEP=':' ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
SEP=':' ;;
* )
SEP='\;' ;;
--- ./jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh 2010-11-04 16:13:30.000000000 -0700
+++ ./jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh 2010-06-15 22:08:09.000000000 -0700
@@ -51,7 +51,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/javax/script/CommonSetup.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/javax/script/CommonSetup.sh 2010-06-15 22:08:11.000000000 -0700
@@ -36,11 +36,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/javax/security/auth/Subject/doAs/Test.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/javax/security/auth/Subject/doAs/Test.sh 2010-06-15 22:08:11.000000000 -0700
@@ -33,12 +33,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- RM="/bin/rm -f"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
RM="/bin/rm -f"
--- ./jdk/test/jprt.config 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/jprt.config 2010-06-15 22:08:14.000000000 -0700
@@ -71,8 +71,8 @@
# Uses 'uname -s', but only expect SunOS or Linux, assume Windows otherwise.
osname=`uname -s`
-if [ "${osname}" = SunOS ] ; then
-
+case "${osname}" in
+ SunOS )
# SOLARIS: Sparc or X86
osarch=`uname -p`
if [ "${osarch}" = sparc ] ; then
@@ -96,9 +96,9 @@
# File creation mask
umask 002
+ ;;
-elif [ "${osname}" = Linux ] ; then
-
+ Linux | Darwin )
# Add basic paths
path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
@@ -107,8 +107,31 @@
fileMustExist "${make}" make
umask 002
+ ;;
+
+ FreeBSD | OpenBSD )
+ # Add basic paths
+ path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
-else
+ # Find GNU make
+ make=/usr/local/bin/gmake
+ fileMustExist "${make}" make
+
+ umask 002
+ ;;
+
+ NetBSD )
+ # Add basic paths
+ path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
+
+ # Find GNU make
+ make=/usr/pkg/bin/gmake
+ fileMustExist "${make}" make
+
+ umask 002
+ ;;
+
+ * )
# Windows: Differs on CYGWIN vs. MKS.
@@ -150,8 +173,8 @@
if [ "${unix_toolset}" = CYGWIN ] ; then
path4sdk="`/usr/bin/cygpath -p ${path4sdk}`"
fi
-
-fi
+ ;;
+esac
# Export PATH setting
PATH="${path4sdk}"
--- ./jdk/test/lib/security/java.policy/Ext_AllPolicy.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/lib/security/java.policy/Ext_AllPolicy.sh 2010-06-15 22:08:14.000000000 -0700
@@ -50,7 +50,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.sh 2010-06-15 22:08:15.000000000 -0700
@@ -45,37 +45,50 @@
# has to locate libjvm.so. Also $! is not reliable on some releases of MKS.
#{
OS=`uname -s`
-if [ "$OS" != "Linux" -a "$OS" != "SunOS" ]; then
- echo "Test not designed to run on this operating system, skipping..."
- exit 0
-fi
+case "${OS}" in
+ Windows* | CYGWIN* )
+ echo "Test not designed to run on this operating system, skipping..."
+ exit 0
+ ;;
+esac
#
# Locate the custom launcher for this platform
#
PLATFORM=unknown
ARCH=unknown
-if [ "$OS" = "SunOS" ]; then
- PLATFORM=solaris
- case "`uname -p`" in
- i[3-9]86)
- ARCH=i586
- ;;
- sparc)
- ARCH=sparc
- ;;
- esac
-else
- PLATFORM=linux
- case "`uname -m`" in
- i[3-6]86)
- ARCH=i586
- ;;
- x86_64)
- ARCH=amd64
- ;;
- esac
-fi
+case "${OS}" in
+ SunOS )
+ PLATFORM=solaris
+ case "`uname -p`" in
+ i[3-9]86)
+ ARCH=i586
+ ;;
+ sparc)
+ ARCH=sparc
+ ;;
+ esac
+ ;;
+ Linux )
+ PLATFORM=linux
+ case "`uname -m`" in
+ i[3-6]86)
+ ARCH=i586
+ ;;
+ x86_64)
+ ARCH=amd64
+ ;;
+ esac
+ ;;
+ *BSD | Darwin )
+ PLATFORM=bsd
+ case "`uname -m`" in
+ i[3-6]86)
+ ARCH=i586
+ ;;
+ esac
+ ;;
+esac
#
--- ./jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh 2010-06-15 22:08:15.000000000 -0700
@@ -35,7 +35,7 @@
UMASK=`umask`
case $OS in
-SunOS | Linux)
+SunOS | Linux | *BSD | Darwin)
PATHSEP=":"
FILESEP="/"
DFILESEP=$FILESEP
--- ./jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.sh 2010-06-15 22:08:15.000000000 -0700
@@ -86,10 +86,12 @@
# on Windows 98.
os=`uname -s`
-if [ "$os" != "Linux" -a "$os" != "SunOS" ]; then
- echo "Test not designed to run on this operating system, skipping..."
- exit 0
-fi
+case "${os}" in
+ Windows* | CYGWIN* )
+ echo "Test not designed to run on this operating system, skipping..."
+ exit 0
+ ;;
+esac
JAVA=${TESTJAVA}/bin/java
CLASSPATH=${TESTCLASSES}
--- ./jdk/test/sun/management/jmxremote/bootstrap/PasswordFilePermissionTest.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/sun/management/jmxremote/bootstrap/PasswordFilePermissionTest.sh 2010-06-15 22:08:15.000000000 -0700
@@ -70,10 +70,12 @@
# security the password file.
os=`uname -s`
-if [ "$os" != "Linux" -a "$os" != "SunOS" ]; then
- echo "Test not designed to run on this operating system, skipping..."
- exit 0
-fi
+case "${os}" in
+ Windows* | CYGWIN* )
+ echo "Test not designed to run on this operating system, skipping..."
+ exit 0
+ ;;
+esac
# Create configuration file and dummy password file
--- ./jdk/test/sun/management/jmxremote/bootstrap/SSLConfigFilePermissionTest.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/sun/management/jmxremote/bootstrap/SSLConfigFilePermissionTest.sh 2010-06-15 22:08:15.000000000 -0700
@@ -69,10 +69,12 @@
# security the password file.
os=`uname -s`
-if [ "$os" != "Linux" -a "$os" != "SunOS" ]; then
- echo "Test not designed to run on this operating system, skipping..."
- exit 0
-fi
+case "${os}" in
+ Windows* | CYGWIN* )
+ echo "Test not designed to run on this operating system, skipping..."
+ exit 0
+ ;;
+esac
# Create management and SSL configuration files
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/management/jmxremote/bootstrap/bsd-i586/launcher and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/management/jmxremote/bootstrap/bsd-i586/launcher differ
--- ./jdk/test/sun/misc/URLClassPath/ClassnameCharTest.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/sun/misc/URLClassPath/ClassnameCharTest.sh 2010-06-15 22:08:15.000000000 -0700
@@ -36,11 +36,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/sun/net/www/MarkResetTest.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/sun/net/www/MarkResetTest.sh 2010-06-15 22:08:15.000000000 -0700
@@ -28,7 +28,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/sun/net/www/http/HttpClient/RetryPost.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/sun/net/www/http/HttpClient/RetryPost.sh 2010-06-15 22:08:15.000000000 -0700
@@ -28,7 +28,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/sun/net/www/protocol/jar/B5105410.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/sun/net/www/protocol/jar/B5105410.sh 2010-06-15 22:08:16.000000000 -0700
@@ -31,11 +31,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/sun/net/www/protocol/jar/jarbug/run.sh 2010-11-04 16:13:31.000000000 -0700
+++ ./jdk/test/sun/net/www/protocol/jar/jarbug/run.sh 2010-06-15 22:08:16.000000000 -0700
@@ -31,11 +31,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/sun/nio/cs/EucJpBsd0212.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/test/sun/nio/cs/EucJpBsd0212.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 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.
- *
- * 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 6350021
- * @summary Consistency checks when input buffer contains JISX0212 characters
- * @author Martin Buchholz
- */
-
-import java.io.*;
-import java.util.*;
-import java.nio.*;
-import java.nio.charset.*;
-
-public class EucJpBsd0212 {
- private static void equal(CharBuffer b1, CharBuffer b2) {
- equal(b1.position(), b2.position());
- equal(b1.limit(), b2.limit());
- System.out.printf("positions=%d %d%n", b1.position(), b2.position());
- System.out.printf("limits=%d %d%n", b1.limit(), b2.limit());
- for (int i = b1.position(); i < b1.limit(); i++)
- equal((int)b1.get(i), (int)b2.get(i));
- }
-
- private static void realMain(String[] args) throws Throwable {
- List<ByteBuffer> bbs = Arrays.asList(
- ByteBuffer.allocate(10),
- ByteBuffer.allocateDirect(10));
- List<CharBuffer> cbs = new ArrayList<CharBuffer>();
-
- for (ByteBuffer bb : bbs) {
- bb.put(new byte[]{ (byte)0x8f, 0x01, 0x02,
- (byte)0xa1, (byte)0xc0,
- 0x02, 0x03});
- bb.flip();
- CharsetDecoder decoder = Charset.forName("EUC_JP_BSD").newDecoder();
- decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
- CharBuffer cb = decoder.decode(bb);
- cbs.add(cb);
- }
- equal(cbs.get(0), cbs.get(1));
- }
-
- //--------------------- 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.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
- if (failed > 0) throw new AssertionError("Some tests failed");}
-}
--- ./jdk/test/sun/nio/cs/EucJpBsdDecoderRecoveryTest.java 2010-11-07 17:21:38.000000000 -0800
+++ ./jdk/test/sun/nio/cs/EucJpBsdDecoderRecoveryTest.java 1969-12-31 16:00:00.000000000 -0800
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 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.
- *
- * 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 5016049
- @summary ensure euc-jp-bsd charset decoder recovery for unmappable input
- */
-
-import java.io.*;
-
-public class EucJpBsdDecoderRecoveryTest {
- public static void main(String[] args) throws Exception {
- byte[] encoded = {
- // EUC_JP_BSD mappable JIS X 0208 range
- (byte)0xa6, (byte)0xc5,
- // EUC_JP_BSD Unmappable (JIS X 0212 range)
- (byte)0x8f, (byte)0xa2, (byte)0xb7,
- // EUC_JP_BSD mappable JIS X 0208 range
- (byte)0xa6, (byte)0xc7 };
-
- char[] decodedChars = new char[3];
- char[] expectedChars =
- {
- '\u03B5', // mapped
- '\ufffd', // unmapped
- '\u03B7' // mapped
- };
-
- ByteArrayInputStream bais = new ByteArrayInputStream(encoded);
- InputStreamReader isr = new InputStreamReader(bais, "EUC_JP_BSD");
- int n = 0; // number of chars decoded
-
- try {
- n = isr.read(decodedChars);
- } catch (Exception ex) {
- throw new Error("euc-jp-bsd decoding broken");
- }
-
- // check number of decoded chars is what is expected
- if (n != expectedChars.length)
- throw new Error("Unexpected number of chars decoded");
-
- // Compare actual decoded with expected
-
- for (int i = 0; i < n; i++) {
- if (expectedChars[i] != decodedChars[i])
- throw new Error("euc-jp-bsd decoding incorrect");
- }
- }
-}
--- ./jdk/test/sun/security/krb5/runNameEquals.sh 2010-11-04 16:13:32.000000000 -0700
+++ ./jdk/test/sun/security/krb5/runNameEquals.sh 2010-06-15 22:08:18.000000000 -0700
@@ -58,6 +58,11 @@
FILESEP="/"
NATIVE=true
;;
+ Darwin | *BSD )
+ PATHSEP=":"
+ FILESEP="/"
+ NATIVE=true
+ ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
--- ./jdk/test/sun/security/pkcs11/KeyStore/Basic.sh 2010-11-04 16:13:32.000000000 -0700
+++ ./jdk/test/sun/security/pkcs11/KeyStore/Basic.sh 2010-06-15 22:08:18.000000000 -0700
@@ -131,6 +131,27 @@
;;
esac
;;
+ *BSD | Darwin )
+ ARCH=`uname -m`
+ case "$ARCH" in
+ i[3-6]86 )
+ FS="/"
+ PS=":"
+ CP="${FS}bin${FS}cp"
+ CHMOD="${FS}bin${FS}chmod"
+ ;;
+ amd64* )
+ FS="/"
+ PS=":"
+ CP="${FS}bin${FS}cp"
+ CHMOD="${FS}bin${FS}chmod"
+ ;;
+ * )
+ echo "Unsupported System: ${OS} ${ARCH}"
+ exit 0;
+ ;;
+ esac
+ ;;
Windows* )
FS="\\"
PS=";"
--- ./jdk/test/sun/security/pkcs11/KeyStore/ClientAuth.sh 2010-11-04 16:13:32.000000000 -0700
+++ ./jdk/test/sun/security/pkcs11/KeyStore/ClientAuth.sh 2010-06-15 22:08:19.000000000 -0700
@@ -92,6 +92,27 @@
;;
esac
;;
+ *BSD | Darwin )
+ ARCH=`uname -m`
+ case "$ARCH" in
+ i[3-6]86 )
+ FS="/"
+ PS=":"
+ CP="${FS}bin${FS}cp"
+ CHMOD="${FS}bin${FS}chmod"
+ ;;
+ amd64* )
+ FS="/"
+ PS=":"
+ CP="${FS}bin${FS}cp"
+ CHMOD="${FS}bin${FS}chmod"
+ ;;
+ * )
+ echo "Unsupported System: ${OS} ${ARCH}"
+ exit 0;
+ ;;
+ esac
+ ;;
Windows* )
FS="\\"
PS=";"
--- ./jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh 2010-11-04 16:13:32.000000000 -0700
+++ ./jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh 2010-06-15 22:08:19.000000000 -0700
@@ -50,13 +50,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- FS="/"
- PS=":"
- CP="${FS}bin${FS}cp"
- CHMOD="${FS}bin${FS}chmod"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
FS="/"
PS=":"
CP="${FS}bin${FS}cp"
--- ./jdk/test/sun/security/pkcs11/Provider/Login.sh 2010-11-04 16:13:32.000000000 -0700
+++ ./jdk/test/sun/security/pkcs11/Provider/Login.sh 2010-06-15 22:08:19.000000000 -0700
@@ -51,13 +51,7 @@
OS=`uname -s`
case "$OS" in
- SunOS )
- FS="/"
- PS=":"
- CP="${FS}bin${FS}cp"
- CHMOD="${FS}bin${FS}chmod"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
FS="/"
PS=":"
CP="${FS}bin${FS}cp"
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libfreebl3.chk and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libfreebl3.chk differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libfreebl3.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libfreebl3.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libnspr4.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libnspr4.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libnss3.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libnss3.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libnssckbi.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libnssckbi.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libplc4.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libplc4.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libplds4.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libplds4.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libsoftokn3.chk and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libsoftokn3.chk differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libsoftokn3.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-amd64/libsoftokn3.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libnspr4.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libnspr4.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libnss3.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libnss3.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libnssckbi.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libnssckbi.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libplc4.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libplc4.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libplds4.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libplds4.so differ
Files /tmp/openjdk_srcdir.NfUrTkDS/openjdk/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libsoftokn3.so and /home/glewis/projects/java/jdk17/openjdk7/merge/bsd-port/jdk/test/sun/security/pkcs11/nss/lib/bsd-i586/libsoftokn3.so differ
--- ./jdk/test/sun/security/provider/PolicyFile/GrantAllPermToExtWhenNoPolicy.sh 2010-11-04 16:13:32.000000000 -0700
+++ ./jdk/test/sun/security/provider/PolicyFile/GrantAllPermToExtWhenNoPolicy.sh 2010-06-15 22:08:19.000000000 -0700
@@ -44,11 +44,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PATHSEP=":"
- FILESEP="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
FILESEP="/"
;;
--- ./jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh 2010-11-04 16:13:32.000000000 -0700
+++ ./jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh 2010-06-15 22:08:19.000000000 -0700
@@ -47,11 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh 2010-06-15 22:08:20.000000000 -0700
@@ -42,7 +42,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
FILESEP="/"
PATHSEP=":"
;;
--- ./jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh 2010-06-15 22:08:21.000000000 -0700
@@ -32,7 +32,7 @@
HOSTNAME=`uname -n`
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh 2010-06-15 22:08:21.000000000 -0700
@@ -32,7 +32,7 @@
HOSTNAME=`uname -n`
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./jdk/test/sun/security/tools/jarsigner/AlgOptions.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/AlgOptions.sh 2010-06-15 22:08:21.000000000 -0700
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/jarsigner/PercentSign.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/PercentSign.sh 2010-06-15 22:08:21.000000000 -0700
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/jarsigner/diffend.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/diffend.sh 2010-07-04 12:51:51.000000000 -0700
@@ -41,7 +41,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin)
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/jarsigner/oldsig.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/jarsigner/oldsig.sh 2010-06-15 22:08:21.000000000 -0700
@@ -42,7 +42,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/keytool/AltProviderPath.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/keytool/AltProviderPath.sh 2010-06-15 22:08:21.000000000 -0700
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh 2010-06-15 22:08:21.000000000 -0700
@@ -47,11 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PATHSEP=":"
- FILESEP="/"
- ;;
- Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
FILESEP="/"
;;
--- ./jdk/test/sun/security/tools/keytool/SecretKeyKS.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/keytool/SecretKeyKS.sh 2010-06-15 22:08:21.000000000 -0700
@@ -45,7 +45,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/keytool/StandardAlgName.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/keytool/StandardAlgName.sh 2010-06-15 22:08:21.000000000 -0700
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/keytool/autotest.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/keytool/autotest.sh 2010-06-15 22:08:21.000000000 -0700
@@ -72,6 +72,27 @@
;;
esac
;;
+ *BSD | Darwin )
+ case "${OS}" in
+ *BSD )
+ LIBNAME=libsoftokn3.so
+ ;;
+ Darwin )
+ LIBNAME=libsoftokn3.dylib
+ ;;
+ esac
+ ARCH=`uname -m`
+ FS="/"
+ case "$ARCH" in
+ i[3-6]86 )
+ PF="bsd-i586"
+ ;;
+ * )
+ echo "Will not run test on: ${OS} ${ARCH}"
+ exit 0;
+ ;;
+ esac
+ ;;
* )
echo "Will not run test on: ${OS}"
exit 0;
--- ./jdk/test/sun/security/tools/keytool/i18n.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/keytool/i18n.sh 2010-06-15 22:08:21.000000000 -0700
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/keytool/printssl.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/keytool/printssl.sh 2010-06-15 22:08:22.000000000 -0700
@@ -37,7 +37,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
FS="/"
;;
CYGWIN* )
--- ./jdk/test/sun/security/tools/keytool/resource.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/keytool/resource.sh 2010-06-15 22:08:22.000000000 -0700
@@ -43,7 +43,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
FS="/"
TMP=/tmp
--- ./jdk/test/sun/security/tools/keytool/standard.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/keytool/standard.sh 2010-06-15 22:08:22.000000000 -0700
@@ -44,7 +44,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | CYGWIN* )
+ SunOS | Linux | CYGWIN* | *BSD | Darwin )
FS="/"
;;
Windows_* )
--- ./jdk/test/sun/security/tools/policytool/Alias.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/policytool/Alias.sh 2010-06-15 22:08:22.000000000 -0700
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/policytool/ChangeUI.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/policytool/ChangeUI.sh 2010-06-15 22:08:22.000000000 -0700
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/policytool/OpenPolicy.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/policytool/OpenPolicy.sh 2010-06-15 22:08:22.000000000 -0700
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/policytool/SaveAs.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/policytool/SaveAs.sh 2010-06-15 22:08:22.000000000 -0700
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/policytool/UpdatePermissions.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/policytool/UpdatePermissions.sh 2010-06-15 22:08:22.000000000 -0700
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/policytool/UsePolicy.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/policytool/UsePolicy.sh 2010-06-15 22:08:22.000000000 -0700
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/security/tools/policytool/i18n.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/security/tools/policytool/i18n.sh 2010-06-15 22:08:22.000000000 -0700
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./jdk/test/sun/tools/jconsole/ImmutableResourceTest.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/tools/jconsole/ImmutableResourceTest.sh 2010-06-15 22:08:22.000000000 -0700
@@ -53,7 +53,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
;;
--- ./jdk/test/sun/tools/jconsole/ResourceCheckTest.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/tools/jconsole/ResourceCheckTest.sh 2010-06-15 22:08:22.000000000 -0700
@@ -54,7 +54,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
;;
--- ./jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh 2010-06-15 22:08:23.000000000 -0700
@@ -33,7 +33,7 @@
case `uname -s` in
Windows* | CYGWIN*) OS=Windows;;
- SunOS|Linux) OS=Unix;;
+ SunOS|Linux|*BSD|Darwin) OS=Unix;;
esac
N2A=$TESTJAVA/bin/native2ascii
--- ./jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh 2010-11-04 16:13:33.000000000 -0700
+++ ./jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh 2010-06-15 22:08:23.000000000 -0700
@@ -56,7 +56,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PATHSEP=":"
;;
--- ./langtools/.hgtags 2010-11-04 16:13:41.000000000 -0700
+++ ./langtools/.hgtags 2010-11-06 22:59:55.000000000 -0700
@@ -91,3 +91,4 @@
e4e7408cdc5b3d91d39161e1e94aad576ecc2dcd jdk7-b114
01e8ac5fbefd35d2d9a0996213cf2390fd164e57 jdk7-b115
857bfcea3f30cb5f4ae96f46a53ae1c772f9b0e5 jdk7-b116
+2129a046f117547fc8a5cb3397a767e6d528f5b6 jdk7-b117
--- ./langtools/.jcheck/conf 2010-11-04 16:13:41.000000000 -0700
+++ ./langtools/.jcheck/conf 1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-project=jdk7
--- ./langtools/test/Makefile 2010-11-04 16:13:42.000000000 -0700
+++ ./langtools/test/Makefile 2010-06-15 22:08:59.000000000 -0700
@@ -34,6 +34,22 @@
ARCH=i586
endif
endif
+ifeq ($(OSNAME), Darwin)
+ PLATFORM = bsd
+ JT_PLATFORM = linux
+ ARCH = $(shell uname -m)
+ ifeq ($(ARCH), i386)
+ ARCH=i586
+ endif
+endif
+ifeq ($(findstring BSD,$(OSNAME)), BSD)
+ PLATFORM = bsd
+ JT_PLATFORM = linux
+ ARCH = $(shell uname -m)
+ ifeq ($(ARCH), i386)
+ ARCH=i586
+ endif
+endif
ifeq ($(OSNAME), Windows_NT)
PLATFORM = windows
JT_PLATFORM = win32
@@ -93,7 +109,7 @@
ifdef JPRT_JAVA_HOME
JT_JAVA = $(JPRT_JAVA_HOME)
else
- JT_JAVA = $(SLASH_JAVA)/re/jdk/1.6.0/archive/fcs/binaries/$(PLATFORM)-$(ARCH)
+ JT_JAVA = $(TEST_ROOT)/../../build/$(PLATFORM)-$(ARCH)
endif
# Default JDK to test
@@ -188,7 +204,9 @@
# The test directories to run
DEFAULT_TESTDIRS = .
-TESTDIRS = $(DEFAULT_TESTDIRS)
+ifndef TESTDIRS
+ TESTDIRS = $(DEFAULT_TESTDIRS)
+endif
# Root of all test results
TEST_OUTPUT_DIR = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)/test/langtools
--- ./langtools/test/jprt.config 2010-11-04 16:13:42.000000000 -0700
+++ ./langtools/test/jprt.config 2010-06-15 22:09:02.000000000 -0700
@@ -71,8 +71,8 @@
# Uses 'uname -s', but only expect SunOS or Linux, assume Windows otherwise.
osname=`uname -s`
-if [ "${osname}" = SunOS ] ; then
-
+case "${osname}" in
+ SunOS)
# SOLARIS: Sparc or X86
osarch=`uname -p`
if [ "${osarch}" = sparc ] ; then
@@ -96,9 +96,9 @@
# File creation mask
umask 002
+ ;;
-elif [ "${osname}" = Linux ] ; then
-
+ Linux | Darwin )
# Add basic paths
path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
@@ -107,9 +107,31 @@
fileMustExist "${make}" make
umask 002
+ ;;
+
+ FreeBSD | OpenBSD )
+ # Add basic paths
+ path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
+
+ # Find GNU make
+ make=/usr/local/bin/gmake
+ fileMustExist "${make}" make
+
+ umask 002
+ ;;
-else
+ NetBSD )
+ # Add basic paths
+ path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
+ # Find GNU make
+ make=/usr/pkg/bin/gmake
+ fileMustExist "${make}" make
+
+ umask 002
+ ;;
+
+ *)
# Windows: Differs on CYGWIN vs. MKS.
# We need to determine if we are running a CYGWIN shell or an MKS shell
@@ -150,8 +172,8 @@
if [ "${unix_toolset}" = CYGWIN ] ; then
path4sdk="`/usr/bin/cygpath -p ${path4sdk}`"
fi
-
-fi
+ ;;
+esac
# Export PATH setting
PATH="${path4sdk}"
--- ./langtools/test/tools/javac/4846262/Test.sh 2010-11-04 16:13:42.000000000 -0700
+++ ./langtools/test/tools/javac/4846262/Test.sh 2010-06-15 22:09:03.000000000 -0700
@@ -44,7 +44,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
FS="/"
;;
CYGWIN* )
--- ./langtools/test/tools/javac/6302184/T6302184.sh 2010-11-04 16:13:42.000000000 -0700
+++ ./langtools/test/tools/javac/6302184/T6302184.sh 2010-06-15 22:09:03.000000000 -0700
@@ -41,7 +41,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
FS="/"
;;
CYGWIN* )
--- ./langtools/test/tools/javac/ClassPathTest/ClassPathTest.sh 2010-11-04 16:13:43.000000000 -0700
+++ ./langtools/test/tools/javac/ClassPathTest/ClassPathTest.sh 2010-06-15 22:09:04.000000000 -0700
@@ -56,7 +56,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | CYGWIN* )
+ SunOS | Linux | *BSD | Darwin )
FS="/"
;;
Windows* )
--- ./langtools/test/tools/javac/ExtDirs/ExtDirs.sh 2010-11-04 16:13:43.000000000 -0700
+++ ./langtools/test/tools/javac/ExtDirs/ExtDirs.sh 2010-06-15 22:09:04.000000000 -0700
@@ -54,7 +54,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./langtools/test/tools/javac/MissingInclude.sh 2010-11-04 16:13:43.000000000 -0700
+++ ./langtools/test/tools/javac/MissingInclude.sh 2010-06-15 22:09:05.000000000 -0700
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | CYGWIN* )
+ SunOS | Linux | CYGWIN* | *BSD | Darwin )
FS="/"
;;
Windows* )
--- ./langtools/test/tools/javac/ProtectedInnerClass/ProtectedInnerClass.sh 2010-11-04 16:13:43.000000000 -0700
+++ ./langtools/test/tools/javac/ProtectedInnerClass/ProtectedInnerClass.sh 2010-06-15 22:09:05.000000000 -0700
@@ -52,7 +52,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./langtools/test/tools/javac/T5090006/compiler.sh 2010-11-04 16:13:43.000000000 -0700
+++ ./langtools/test/tools/javac/T5090006/compiler.sh 2010-06-15 22:09:05.000000000 -0700
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | CYGWIN* )
+ SunOS | Linux | CYGWIN* | *BSD | Darwin )
FS="/"
;;
Windows* )
--- ./langtools/test/tools/javac/apt.sh 2010-11-04 16:13:43.000000000 -0700
+++ ./langtools/test/tools/javac/apt.sh 2010-06-15 22:09:06.000000000 -0700
@@ -38,7 +38,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./langtools/test/tools/javac/constDebug/ConstDebug.sh 2010-11-04 16:13:43.000000000 -0700
+++ ./langtools/test/tools/javac/constDebug/ConstDebug.sh 2010-06-15 22:09:07.000000000 -0700
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./langtools/test/tools/javac/fatalErrors/NoJavaLang.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javac/fatalErrors/NoJavaLang.sh 2010-06-15 22:09:07.000000000 -0700
@@ -48,7 +48,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
FS="/"
;;
CYGWIN* )
--- ./langtools/test/tools/javac/innerClassFile/Driver.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javac/innerClassFile/Driver.sh 2010-06-15 22:09:09.000000000 -0700
@@ -53,7 +53,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | CYGWIN* )
+ SunOS | Linux | CYGWIN* | *BSD | Darwin )
FS="/"
;;
Windows* )
--- ./langtools/test/tools/javac/javazip/Test.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javac/javazip/Test.sh 2010-06-15 22:09:10.000000000 -0700
@@ -41,7 +41,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
FS="/"
SCR=`pwd`
;;
--- ./langtools/test/tools/javac/links/links.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javac/links/links.sh 2010-06-15 22:09:10.000000000 -0700
@@ -53,7 +53,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- ./langtools/test/tools/javac/newlines/Newlines.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javac/newlines/Newlines.sh 2010-06-15 22:09:10.000000000 -0700
@@ -50,7 +50,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | CYGWIN* )
+ SunOS | Linux | CYGWIN* | *BSD | Darwin )
FS="/"
;;
Windows* )
--- ./langtools/test/tools/javac/stackmap/T4955930.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javac/stackmap/T4955930.sh 2010-06-15 22:09:11.000000000 -0700
@@ -41,7 +41,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | CYGWIN* )
+ SunOS | Linux | CYGWIN* | *BSD | Darwin )
FS="/"
;;
Windows_95 | Windows_98 | Windows_NT )
--- ./langtools/test/tools/javac/unicode/SupplementaryJavaID6.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javac/unicode/SupplementaryJavaID6.sh 2010-06-15 22:09:11.000000000 -0700
@@ -66,6 +66,17 @@
exit 0;
fi
;;
+ *BSD | Darwin )
+ if [ -d /usr/share/locale/en_US.UTF-8 -o -d /usr/share/locale/en_US.utf8 ]
+ then
+ ENV="env LANG=en_US.UTF-8"
+ PS=":"
+ FS="/"
+ else
+ echo "As there is no en_US.UTF-8 locale available on this system, the compilation of the test case may or may not fail. Ignoring this test."
+ exit 0;
+ fi
+ ;;
Windows_98 | Windows_ME )
echo "As Windows 98/Me do not provide Unicode-aware file system, the compilation of the test case is expected to fail on these platforms. Ignoring this test."
exit 0;
--- ./langtools/test/tools/javah/6257087/foo.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javah/6257087/foo.sh 2010-06-15 22:09:12.000000000 -0700
@@ -41,7 +41,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./langtools/test/tools/javah/ConstMacroTest.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javah/ConstMacroTest.sh 2010-06-15 22:09:12.000000000 -0700
@@ -56,7 +56,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./langtools/test/tools/javah/MissingParamClassTest.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javah/MissingParamClassTest.sh 2010-06-15 22:09:12.000000000 -0700
@@ -58,7 +58,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | CYGWIN* )
+ SunOS | Linux | CYGWIN* | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./langtools/test/tools/javah/ReadOldClass.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javah/ReadOldClass.sh 2010-06-15 22:09:12.000000000 -0700
@@ -43,7 +43,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | CYGWIN* )
+ SunOS | Linux | CYGWIN* | *BSD | Darwin )
PS=":"
FS="/"
;;
--- ./langtools/test/tools/javap/pathsep.sh 2010-11-04 16:13:44.000000000 -0700
+++ ./langtools/test/tools/javap/pathsep.sh 2010-06-15 22:09:12.000000000 -0700
@@ -40,7 +40,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | CYGWIN* )
+ SunOS | Linux | CYGWIN* | *BSD | Darwin )
FS="/"
;;
Windows* )