1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-05 01:55:52 +00:00
freebsd-ports/java/openjdk6/files/patch-set
Jung-uk Kim e45d1e1be9 - Update to b32.
- Update TimeZoneNames to tzdata2014b.
- Enlist openjdk6 users as testers of ant 1.9.4.
2014-07-17 04:03:21 +00:00

15292 lines
459 KiB
Plaintext

--- Makefile
+++ Makefile
@@ -236,6 +236,18 @@
clean: clobber
+# Add location of iconv headers & libs
+ifeq ($(PLATFORM), bsd)
+ ifeq ($(OS_VENDOR), Apple)
+ OTHER_LDLIBS += -liconv
+ else
+ ifneq ($(OS_NAME), netbsd)
+ CPPFLAGS += %%ICONV_CPPFLAGS%%
+ OTHER_LDLIBS += %%ICONV_LDFLAGS%%
+ endif
+ endif
+endif
+
#
# Dev builds
#
--- corba/make/common/Defs-bsd.gmk
+++ corba/make/common/Defs-bsd.gmk
@@ -40,18 +40,12 @@
# Get shared JDK settings
include $(BUILDDIR)/common/shared/Defs.gmk
-# Part of INCREMENTAL_BUILD mechanism.
-# Compiler emits things like: path/file.o: file.h
-# We want something like: relative_path/file.o relative_path/file.d: file.h
-CC_DEPEND = -MM
-CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g'
-
ifndef PLATFORM_SRC
PLATFORM_SRC = $(TOPDIR)/src/solaris
endif # PLATFORM_SRC
# 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.
@@ -94,6 +88,10 @@
# as the default.
CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
+ifeq ($(OS_VENDOR),Apple)
+ # 16-byte stack re-alignment on 32-bit Darwin
+ CFLAGS_REQUIRED_i586 += -mstackrealign
+endif
CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9
LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9
@@ -176,7 +174,7 @@
CXXFLAGS_DBG += $(CC_LOWER_OPT)
endif
-CPPFLAGS_COMMON = -D$(ARCH) -DARCH='"$(ARCH)"' -DLINUX $(VERSION_DEFINES) \
+CPPFLAGS_COMMON = -D$(ARCH) -DARCH='"$(ARCH)"' -D_ALLBSD_SOURCE $(VERSION_DEFINES) \
-D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT
ifeq ($(ARCH_DATA_MODEL), 64)
@@ -186,33 +184,16 @@
CPPFLAGS_OPT =
CPPFLAGS_DBG = -DDEBUG
-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.
- #
- 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
+
+ifneq ($(OS_VENDOR), Apple)
LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH)
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
@@ -243,13 +224,9 @@
#
LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker
-#
-# Support for Quantify.
-#
-ifdef QUANTIFY
-QUANTIFY_CMD = quantify
-QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes
-LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS)
+# Darwin does not support linker map files.
+ifeq ($(OS_VENDOR), Apple)
+LDNOMAP=true
endif
#
@@ -278,24 +255,22 @@
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
else
-override LIBCXX = -lstdc++
+override LIBCXX = %%CXX_LDFLAGS%%
endif
override LIBPOSIX4 =
override LIBSOCKET =
override LIBTHREAD =
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 NO_INTERRUPTIBLE_IO = false
+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
--- corba/make/common/Defs.gmk
+++ corba/make/common/Defs.gmk
@@ -53,6 +53,24 @@
_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
+ PACKAGE_PATH = /usr/local
+ endif
+ endif
+endif
+
#
# Get platform definitions
#
@@ -97,6 +115,9 @@
LDLIBS_COMMON = -ldl
endif
+ ifeq ($(PLATFORM), bsd)
+ LDLIBS_COMMON = -pthread
+ endif
endif # PROGRAM
LDLIBS_COMMON += $(EXTRA_LIBS)
--- corba/make/common/Mapfile-vers.gmk
+++ corba/make/common/Mapfile-vers.gmk
@@ -77,7 +77,7 @@
endif # PLATFORM
-ifeq ($(PLATFORM), linux)
+ifneq (,$(findstring $(PLATFORM), linux bsd))
ifeq ($(VARIANT), OPT)
# OPT build MUST have a mapfile?
--- corba/make/common/shared/Compiler-gcc.gmk
+++ corba/make/common/shared/Compiler-gcc.gmk
@@ -100,6 +100,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.3
+ REQUIRED_GCC_VER = 3.3.*
+
+# 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
--- corba/make/common/shared/Compiler.gmk
+++ corba/make/common/shared/Compiler.gmk
@@ -42,6 +42,11 @@
override CC_VERSION = gcc
endif
+# BSD uses GNU compilers by default
+ifeq ($(PLATFORM), bsd)
+ override CC_VERSION = gcc
+endif
+
# Get the compiler specific settings
include $(BUILDDIR)/common/shared/Compiler-$(CC_VERSION).gmk
--- corba/make/common/shared/Defs-bsd.gmk
+++ corba/make/common/shared/Defs-bsd.gmk
@@ -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.
--- corba/make/common/shared/Defs-utils.gmk
+++ corba/make/common/shared/Defs-utils.gmk
@@ -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)
@@ -199,3 +206,32 @@
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
+ ifneq ($(OS_VENDOR), OpenBSD)
+ CPIO = $(UTILS_USR_BIN_PATH)cpio
+ TAR = $(UTILS_USR_BIN_PATH)tar
+ endif
+endif
--- corba/make/common/shared/Platform.gmk
+++ corba/make/common/shared/Platform.gmk
@@ -261,6 +261,76 @@
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 \
+ ;; \
+ *) \
+ echo $(mach) \
+ ;; \
+ esac
+ ARCH := $(shell $(archExpr) )
+ ARCH_FAMILY := $(ARCH)
+
+ # i586 and sparc are 32 bit, amd64 and sparc64 are 64
+ ifneq (,$(findstring $(ARCH), i586 sparc))
+ 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:
+ MB_OF_MEMORY=$(shell sysctl -n hw.physmem | awk '{print int($$NF / 1048576); }' )
+endif
+
# Windows with and without CYGWIN will be slightly different
ifeq ($(SYSTEM_UNAME), Windows_NT)
PLATFORM = windows
@@ -408,7 +478,14 @@
# build machines and adjustments will be made to prevent excessing
# system swapping during the build.
# If we don't know, assume 512. Subtract 128 from MB for VM MAX.
-# Don't set VM max over 1024-128=896.
+# Don't set VM max over 1024-128=896, except on OpenBSD where
+# 736 is the max.
+ifeq ($(OS_VENDOR), OpenBSD)
+ ABS_MAX_MEMORY := "736"
+else
+ ABS_MAX_MEMORY := "896"
+endif
+
ifneq ($(MB_OF_MEMORY),)
LOW_MEMORY_MACHINE := $(shell \
if [ $(MB_OF_MEMORY) -le 512 ] ; then \
@@ -420,7 +497,7 @@
if [ $(MB_OF_MEMORY) -le 1024 ] ; then \
expr $(MB_OF_MEMORY) '-' 128 ; \
else \
- echo "896"; \
+ echo $(ABS_MAX_MEMORY); \
fi)
MIN_VM_MEMORY := $(shell \
if [ $(MAX_VM_MEMORY) -le 128 ] ; then \
--- hotspot/agent/src/os/bsd/Makefile
+++ hotspot/agent/src/os/bsd/Makefile
@@ -23,7 +23,7 @@
#
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
+GCC ?= gcc
JAVAH = ${JAVA_HOME}/bin/javah
--- hotspot/agent/src/os/bsd/libproc_impl.c
+++ hotspot/agent/src/os/bsd/libproc_impl.c
@@ -235,6 +235,24 @@
}
// add a thread to ps_prochandle
+#ifdef __FreeBSD__
+thread_info* add_thread_info(struct ps_prochandle* ph, lwpid_t lwp_id) {
+ thread_info* newthr;
+ if ( (newthr = (thread_info*) calloc(1, sizeof(thread_info))) == NULL) {
+ print_debug("can't allocate memory for thread_info\n");
+ return NULL;
+ }
+
+ // initialize thread info
+ newthr->lwp_id = lwp_id;
+
+ // add new thread to the list
+ newthr->next = ph->threads;
+ ph->threads = newthr;
+ ph->num_threads++;
+ return newthr;
+}
+#else
thread_info* add_thread_info(struct ps_prochandle* ph, pthread_t pthread_id, lwpid_t lwp_id) {
thread_info* newthr;
if ( (newthr = (thread_info*) calloc(1, sizeof(thread_info))) == NULL) {
@@ -252,6 +270,7 @@
ph->num_threads++;
return newthr;
}
+#endif
// struct used for client data from thread_db callback
@@ -273,10 +292,17 @@
return err;
}
+#ifdef __FreeBSD__
+ print_debug("thread_db : lwp %d\n", ti.ti_lid);
+
+ if (ptr->callback(ptr->ph, ti.ti_lid) != true)
+ return TD_ERR;
+#else
print_debug("thread_db : pthread %d (lwp %d)\n", ti.ti_tid, ti.ti_lid);
if (ptr->callback(ptr->ph, (pthread_t)ti.ti_tid, ti.ti_lid) != true)
return TD_ERR;
+#endif
return TD_OK;
}
--- hotspot/agent/src/os/bsd/libproc_impl.h
+++ hotspot/agent/src/os/bsd/libproc_impl.h
@@ -109,7 +109,11 @@
void print_debug(const char* format,...);
bool is_debug();
+#ifdef __FreeBSD__
+typedef bool (*thread_info_callback)(struct ps_prochandle* ph, lwpid_t lwpid);
+#else
typedef bool (*thread_info_callback)(struct ps_prochandle* ph, pthread_t pid, lwpid_t lwpid);
+#endif
// reads thread info using libthread_db and calls above callback for each thread
bool read_thread_info(struct ps_prochandle* ph, thread_info_callback cb);
@@ -122,7 +126,11 @@
uintptr_t base);
// adds a new thread to threads list, returns NULL on failure
+#ifdef __FreeBSD__
+thread_info* add_thread_info(struct ps_prochandle* ph, lwpid_t lwp_id);
+#else
thread_info* add_thread_info(struct ps_prochandle* ph, pthread_t pthread_id, lwpid_t lwp_id);
+#endif
// a test for ELF signature without using libelf
bool is_elf_file(int fd);
--- hotspot/agent/src/os/bsd/ps_core.c
+++ hotspot/agent/src/os/bsd/ps_core.c
@@ -540,9 +540,14 @@
prstatus_t* prstat = (prstatus_t*) buf;
thread_info* newthr;
print_debug("got integer regset for lwp %d\n", prstat->pr_pid);
+#ifdef __FreeBSD__
+ if((newthr = add_thread_info(ph, prstat->pr_pid)) == NULL)
+ return false;
+#else
// we set pthread_t to -1 for core dump
if((newthr = add_thread_info(ph, (pthread_t) -1, prstat->pr_pid)) == NULL)
return false;
+#endif
// copy regs
memcpy(&newthr->regs, &prstat->pr_reg, sizeof(struct reg));
--- hotspot/agent/src/os/bsd/ps_proc.c
+++ hotspot/agent/src/os/bsd/ps_proc.c
@@ -173,9 +173,15 @@
// -------------------------------------------------------
// callback for read_thread_info
+#ifdef __FreeBSD__
+static bool add_new_thread(struct ps_prochandle* ph, lwpid_t lwp_id) {
+ return add_thread_info(ph, lwp_id) != NULL;
+}
+#else
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;
}
+#endif
#if defined(__FreeBSD__) && __FreeBSD_version < 701000
/*
--- hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ConnectorImpl.java
+++ hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ConnectorImpl.java
@@ -217,7 +217,7 @@
}
protected void checkNativeLink(SecurityManager sm, String os) {
- if (os.equals("SunOS") || os.equals("Linux") || os.contains("OS X")) {
+ if (os.equals("SunOS") || os.equals("Linux") || os.equals("FreeBSD") || os.contains("OS X")) {
// link "saproc" - SA native library on SunOS, Linux, and Mac OS X
sm.checkLink("saproc");
} else if (os.startsWith("Windows")) {
--- hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/SAPIDAttachingConnector.java
+++ hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/SAPIDAttachingConnector.java
@@ -66,7 +66,7 @@
try {
// Whether the caller can perform link against SA native library?
checkNativeLink(sm, os);
- if (os.equals("SunOS") || os.equals("Linux")) {
+ if (os.equals("SunOS") || os.equals("Linux") || os.equals("FreeBSD")) {
// Whether the caller can read /proc/<pid> file?
sm.checkRead("/proc/" + pid);
}
--- hotspot/make/bsd/makefiles/adlc.make
+++ hotspot/make/bsd/makefiles/adlc.make
@@ -69,7 +69,7 @@
# CFLAGS_WARN holds compiler options to suppress/enable warnings.
# Compiler warnings are treated as errors
ifneq ($(COMPILER_WARNINGS_FATAL),false)
- CFLAGS_WARN = -Werror
+ CFLAGS_WARN = $(WARNINGS_ARE_ERRORS)
endif
CFLAGS += $(CFLAGS_WARN)
--- hotspot/make/bsd/makefiles/build_vm_def.sh
+++ hotspot/make/bsd/makefiles/build_vm_def.sh
@@ -7,6 +7,10 @@
NM=nm
fi
-$NM --defined-only $* | awk '
- { if ($3 ~ /^_ZTV/ || $3 ~ /^gHotSpotVM/) print "\t" $3 ";" }
- '
+$NM --defined-only $* \
+ | awk '{
+ if ($3 ~ /^_ZTV/ || $3 ~ /^gHotSpotVM/) print "\t" $3 ";"
+ if ($3 ~ /^UseSharedSpaces$/) print "\t" $3 ";"
+ if ($3 ~ /^_ZN9Arguments17SharedArchivePathE$/) print "\t" $3 ";"
+ }' \
+ | sort -u
--- hotspot/make/bsd/makefiles/gcc.make
+++ hotspot/make/bsd/makefiles/gcc.make
@@ -35,8 +35,8 @@
HOSTCXX = g++
HOSTCC = gcc
else ifneq ($(OS_VENDOR), Darwin)
- CXX = g++
- CC = gcc
+ CXX ?= g++
+ CC ?= gcc
HOSTCXX = $(CXX)
HOSTCC = $(CC)
endif
@@ -110,12 +110,16 @@
CFLAGS += $(VM_PICFLAG)
CFLAGS += -fno-rtti
CFLAGS += -fno-exceptions
-CFLAGS += -pthread
-CFLAGS += -fcheck-new
-# version 4 and above support fvisibility=hidden (matches jni_x86.h file)
-# except 4.1.2 gives pointless warnings that can't be disabled (afaik)
-ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0"
-CFLAGS += -fvisibility=hidden
+CFLAGS += -D_REENTRANT
+ifeq ($(USE_CLANG),)
+ CFLAGS += -fcheck-new
+ # version 4 and above support fvisibility=hidden (matches jni_x86.h file)
+ # except 4.1.2 gives pointless warnings that can't be disabled (afaik)
+ ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0"
+ CFLAGS += -fvisibility=hidden
+ endif
+else
+ CFLAGS += -fvisibility=hidden
endif
ARCHFLAG = $(ARCHFLAG/$(BUILDARCH))
@@ -163,14 +167,24 @@
WARNINGS_ARE_ERRORS = -Werror
endif
-# Except for a few acceptable ones
-# Since GCC 4.3, -Wconversion has changed its meanings to warn these implicit
-# conversions which might affect the values. To avoid that, we need to turn
-# it off explicitly.
-ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0"
+ifeq ($(USE_CLANG), true)
+ # However we need to clean the code up before we can unrestrictedly enable this option with Clang
+ WARNINGS_ARE_ERRORS += -Wno-logical-op-parentheses -Wno-parentheses-equality -Wno-parentheses
+ WARNINGS_ARE_ERRORS += -Wno-switch -Wno-tautological-compare
+# Not yet supported by clang in Xcode 4.6.2
+# WARNINGS_ARE_ERRORS += -Wno-tautological-constant-out-of-range-compare
+ WARNINGS_ARE_ERRORS += -Wno-delete-non-virtual-dtor -Wno-deprecated -Wno-format -Wno-dynamic-class-memaccess
+ WARNINGS_ARE_ERRORS += -Wno-return-type -Wno-empty-body
+endif
+
ACCEPTABLE_WARNINGS = -Wpointer-arith -Wsign-compare
-else
-ACCEPTABLE_WARNINGS = -Wpointer-arith -Wconversion -Wsign-compare
+
+ifeq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0"
+ # Since GCC 4.3, -Wconversion has changed its meanings to warn these implicit
+ # conversions which might affect the values. Only enable it in earlier versions.
+ ifeq ($(USE_CLANG),)
+ ACCEPTABLE_WARNINGS += -Wconversion
+ endif
endif
CFLAGS_WARN/DEFAULT = $(WARNINGS_ARE_ERRORS) $(ACCEPTABLE_WARNINGS)
@@ -282,7 +296,11 @@
DEBUG_CFLAGS/ppc = -g
DEBUG_CFLAGS += $(DEBUG_CFLAGS/$(BUILDARCH))
ifeq ($(DEBUG_CFLAGS/$(BUILDARCH)),)
-DEBUG_CFLAGS += -gstabs
+ ifeq ($(USE_CLANG), true)
+ DEBUG_CFLAGS += -g
+ else
+ DEBUG_CFLAGS += -gstabs
+ endif
endif
# DEBUG_BINARIES overrides everything, use full -g debug information
--- hotspot/make/bsd/makefiles/jsig.make
+++ hotspot/make/bsd/makefiles/jsig.make
@@ -47,7 +47,7 @@
# cause problems with interposing. See CR: 6466665
# LFLAGS_JSIG += $(MAPFLAG:FILENAME=$(LIBJSIG_MAPFILE))
-LFLAGS_JSIG += -D_GNU_SOURCE -pthread $(LDFLAGS_HASH_STYLE)
+LFLAGS_JSIG += -D_GNU_SOURCE -D_REENTRANT $(LDFLAGS_HASH_STYLE)
# DEBUG_BINARIES overrides everything, use full -g debug information
ifeq ($(DEBUG_BINARIES), true)
--- hotspot/make/bsd/makefiles/mapfile-vers-debug
+++ hotspot/make/bsd/makefiles/mapfile-vers-debug
@@ -1,8 +1,4 @@
#
-# @(#)mapfile-vers-debug 1.18 07/10/25 16:47:35
-#
-
-#
# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
@@ -221,6 +217,7 @@
JVM_SetArrayElement;
JVM_SetClassSigners;
JVM_SetLength;
+ JVM_SetNativeThreadName;
JVM_SetPrimitiveArrayElement;
JVM_SetProtectionDomain;
JVM_SetSockOpt;
@@ -244,24 +241,6 @@
JVM_Yield;
JVM_handle_bsd_signal;
- # Old reflection routines
- # These do not need to be present in the product build in JDK 1.4
- # but their code has not been removed yet because there will not
- # be a substantial code savings until JVM_InvokeMethod and
- # JVM_NewInstanceFromConstructor can also be removed; see
- # reflectionCompat.hpp.
- JVM_GetClassConstructor;
- JVM_GetClassConstructors;
- JVM_GetClassField;
- JVM_GetClassFields;
- JVM_GetClassMethod;
- JVM_GetClassMethods;
- JVM_GetField;
- JVM_GetPrimitiveField;
- JVM_NewInstance;
- JVM_SetField;
- JVM_SetPrimitiveField;
-
# debug JVM
JVM_AccessVMBooleanFlag;
JVM_AccessVMIntFlag;
--- hotspot/make/bsd/makefiles/mapfile-vers-product
+++ hotspot/make/bsd/makefiles/mapfile-vers-product
@@ -1,8 +1,4 @@
#
-# @(#)mapfile-vers-product 1.19 08/02/12 10:56:37
-#
-
-#
# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
@@ -221,6 +217,7 @@
JVM_SetArrayElement;
JVM_SetClassSigners;
JVM_SetLength;
+ JVM_SetNativeThreadName;
JVM_SetPrimitiveArrayElement;
JVM_SetProtectionDomain;
JVM_SetSockOpt;
@@ -244,24 +241,6 @@
JVM_Yield;
JVM_handle_bsd_signal;
- # Old reflection routines
- # These do not need to be present in the product build in JDK 1.4
- # but their code has not been removed yet because there will not
- # be a substantial code savings until JVM_InvokeMethod and
- # JVM_NewInstanceFromConstructor can also be removed; see
- # reflectionCompat.hpp.
- JVM_GetClassConstructor;
- JVM_GetClassConstructors;
- JVM_GetClassField;
- JVM_GetClassFields;
- JVM_GetClassMethod;
- JVM_GetClassMethods;
- JVM_GetField;
- JVM_GetPrimitiveField;
- JVM_NewInstance;
- JVM_SetField;
- JVM_SetPrimitiveField;
-
# miscellaneous functions
jio_fprintf;
jio_printf;
--- hotspot/make/bsd/makefiles/rules.make
+++ hotspot/make/bsd/makefiles/rules.make
@@ -126,8 +126,8 @@
RUN.JAR$(MAKE_VERBOSE) += >/dev/null
# Settings for javac
-BOOT_SOURCE_LANGUAGE_VERSION = 6
-BOOT_TARGET_CLASS_VERSION = 6
+BOOT_SOURCE_LANGUAGE_VERSION = 5
+BOOT_TARGET_CLASS_VERSION = 5
JAVAC_FLAGS = -g -encoding ascii
BOOTSTRAP_JAVAC_FLAGS = $(JAVAC_FLAGS) -source $(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION)
--- hotspot/src/cpu/x86/vm/assembler_x86.cpp
+++ hotspot/src/cpu/x86/vm/assembler_x86.cpp
@@ -4087,7 +4087,7 @@
}
void Assembler::adcq(Register dst, Register src) {
- (int) prefixq_and_encode(dst->encoding(), src->encoding());
+ (void) prefixq_and_encode(dst->encoding(), src->encoding());
emit_arith(0x13, 0xC0, dst, src);
}
@@ -4142,7 +4142,7 @@
}
void Assembler::andq(Register dst, Register src) {
- (int) prefixq_and_encode(dst->encoding(), src->encoding());
+ (void) prefixq_and_encode(dst->encoding(), src->encoding());
emit_arith(0x23, 0xC0, dst, src);
}
--- hotspot/src/cpu/x86/vm/globals_x86.hpp
+++ hotspot/src/cpu/x86/vm/globals_x86.hpp
@@ -70,11 +70,7 @@
define_pd_global(bool, RewriteBytecodes, true);
define_pd_global(bool, RewriteFrequentPairs, true);
-#ifdef _ALLBSD_SOURCE
-define_pd_global(bool, UseMembar, true);
-#else
define_pd_global(bool, UseMembar, false);
-#endif
// GC Ergo Flags
define_pd_global(intx, CMSYoungGenPerWorker, 64*M); // default max size of CMS young gen, per GC worker thread
--- hotspot/src/cpu/x86/vm/jni_x86.h
+++ hotspot/src/cpu/x86/vm/jni_x86.h
@@ -28,7 +28,7 @@
#if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE)
-#if defined(__GNUC__) && (__GNUC__ > 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ > 2)
+#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ > 2))
#define JNIEXPORT __attribute__((visibility("default")))
#define JNIIMPORT __attribute__((visibility("default")))
#else
--- hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp
+++ hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp
@@ -94,7 +94,7 @@
private:
#ifdef PRODUCT
-#define inc_counter_np(counter) (0)
+#define inc_counter_np(counter) ((void)0)
#else
void inc_counter_np_(int& counter) {
__ incrementl(ExternalAddress((address)&counter));
--- hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp
+++ hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp
@@ -92,7 +92,7 @@
private:
#ifdef PRODUCT
-#define inc_counter_np(counter) (0)
+#define inc_counter_np(counter) ((void)0)
#else
void inc_counter_np_(int& counter) {
// This can destroy rscratch1 if counter is far from the code cache
--- hotspot/src/os/bsd/vm/globals_bsd.hpp
+++ hotspot/src/os/bsd/vm/globals_bsd.hpp
@@ -26,25 +26,19 @@
#define OS_BSD_VM_GLOBALS_BSD_HPP
//
-// Defines Bsd specific flags. They are not available on other platforms.
+// Defines BSD specific flags. They are not available on other platforms.
//
#define RUNTIME_OS_FLAGS(develop, develop_pd, product, product_pd, diagnostic, notproduct) \
product(bool, UseOprofile, false, \
"enable support for Oprofile profiler") \
\
- product(bool, UseBsdPosixThreadCPUClocks, true, \
- "enable fast Bsd Posix clocks where available") \
-/* NB: The default value of UseBsdPosixThreadCPUClocks may be \
- overridden in Arguments::parse_each_vm_init_arg. */ \
- \
- product(bool, UseHugeTLBFS, false, \
- "Use MAP_HUGETLB for large pages") \
- \
- product(bool, UseSHM, false, \
- "Use SYSV shared memory for large pages")
+ product(bool, UseBsdPosixThreadCPUClocks, true, \
+ "enable fast BSD Posix clocks where available")
+/* NB: The default value of UseBsdPosixThreadCPUClocks may be
+ overridden in Arguments::parse_each_vm_init_arg. */
//
-// Defines Bsd-specific default values. The flags are available on all
+// Defines BSD-specific default values. The flags are available on all
// platforms, but they may have different default values on other platforms.
//
define_pd_global(bool, UseLargePages, false);
--- hotspot/src/os/bsd/vm/jsig.c
+++ hotspot/src/os/bsd/vm/jsig.c
@@ -140,9 +140,13 @@
}
sa_handler_t sigset(int sig, sa_handler_t disp) {
+#ifdef __FreeBSD__
+ return set_signal(sig, disp, true);
+#else
printf("sigset() is not supported by BSD");
exit(0);
- }
+#endif
+}
static int call_os_sigaction(int sig, const struct sigaction *act,
struct sigaction *oact) {
--- hotspot/src/os/bsd/vm/jvm_bsd.cpp
+++ hotspot/src/os/bsd/vm/jvm_bsd.cpp
@@ -50,6 +50,7 @@
case INTERRUPT_SIGNAL:
case SIGFPE:
case SIGILL:
+ case SIGBUS:
case SIGSEGV:
/* The following signal is used by the VM to dump thread stacks unless
@@ -110,71 +111,29 @@
JVM_END
/*
- All the defined signal names for Bsd.
+ All the defined signal names for BSD are defined by sys_signame[].
NOTE that not all of these names are accepted by our Java implementation
Via an existing claim by the VM, sigaction restrictions, or
the "rules of Unix" some of these names will be rejected at runtime.
For example the VM sets up to handle USR1, sigaction returns EINVAL for
- STOP, and Bsd simply doesn't allow catching of KILL.
+ STOP, and BSD simply doesn't allow catching of KILL.
Here are the names currently accepted by a user of sun.misc.Signal with
1.4.1 (ignoring potential interaction with use of chaining, etc):
- HUP, INT, TRAP, ABRT, IOT, BUS, USR2, PIPE, ALRM, TERM, STKFLT,
- CLD, CHLD, CONT, TSTP, TTIN, TTOU, URG, XCPU, XFSZ, VTALRM, PROF,
- WINCH, POLL, IO, PWR, SYS
-
+ HUP, INT, TRAP, ABRT, EMT, SYS, PIPE, ALRM, TERM, URG, TSTP, CONT,
+ CHLD, TTIN, TTOU, IO, XCPU, XFSZ, VTALRM, PROF, WINCH, INFO, USR2
*/
-struct siglabel {
- const char *name;
- int number;
-};
-
-struct siglabel siglabels[] = {
- /* derived from /usr/include/bits/signum.h on RH7.2 */
- "HUP", SIGHUP, /* Hangup (POSIX). */
- "INT", SIGINT, /* Interrupt (ANSI). */
- "QUIT", SIGQUIT, /* Quit (POSIX). */
- "ILL", SIGILL, /* Illegal instruction (ANSI). */
- "TRAP", SIGTRAP, /* Trace trap (POSIX). */
- "ABRT", SIGABRT, /* Abort (ANSI). */
- "EMT", SIGEMT, /* EMT trap */
- "FPE", SIGFPE, /* Floating-point exception (ANSI). */
- "KILL", SIGKILL, /* Kill, unblockable (POSIX). */
- "BUS", SIGBUS, /* BUS error (4.2 BSD). */
- "SEGV", SIGSEGV, /* Segmentation violation (ANSI). */
- "SYS", SIGSYS, /* Bad system call. Only on some Bsden! */
- "PIPE", SIGPIPE, /* Broken pipe (POSIX). */
- "ALRM", SIGALRM, /* Alarm clock (POSIX). */
- "TERM", SIGTERM, /* Termination (ANSI). */
- "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). */
- "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). */
- "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))
/* find and return the named signal's number */
- for(uint i=0; i<ARRAY_SIZE(siglabels); i++)
- if(!strcmp(name, siglabels[i].name))
- return siglabels[i].number;
+ for (int i = 1; i < NSIG; i++)
+ if (strcasecmp(name, sys_signame[i]) == 0)
+ return i;
return -1;
@@ -182,11 +141,14 @@
// used by os::exception_name()
extern bool signal_name(int signo, char* buf, size_t len) {
- for(uint i = 0; i < ARRAY_SIZE(siglabels); i++) {
- if (signo == siglabels[i].number) {
- jio_snprintf(buf, len, "SIG%s", siglabels[i].name);
- return true;
- }
- }
- return false;
+ if (signo <= 0 || signo >= NSIG)
+ return false;
+ char signame[8];
+ const char *s = sys_signame[signo];
+ uint i;
+ for (i = 0; i < sizeof(signame) - 1 && s[i] != '\0'; i++)
+ signame[i] = toupper(s[i]);
+ signame[i] = '\0';
+ jio_snprintf(buf, len, "SIG%s", signame);
+ return true;
}
--- hotspot/src/os/bsd/vm/jvm_bsd.h
+++ hotspot/src/os/bsd/vm/jvm_bsd.h
@@ -112,20 +112,6 @@
#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 */
#endif // OS_BSD_VM_JVM_BSD_H
--- hotspot/src/os/bsd/vm/osThread_bsd.cpp
+++ hotspot/src/os/bsd/vm/osThread_bsd.cpp
@@ -49,7 +49,7 @@
void OSThread::pd_initialize() {
assert(this != NULL, "check");
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(__FreeBSD__)
_thread_id = 0;
#else
_thread_id = NULL;
--- hotspot/src/os/bsd/vm/osThread_bsd.hpp
+++ hotspot/src/os/bsd/vm/osThread_bsd.hpp
@@ -39,7 +39,7 @@
private:
-#ifdef _ALLBSD_SOURCE
+#if defined(_ALLBSD_SOURCE) && !defined(__FreeBSD__)
#ifdef __APPLE__
thread_t _thread_id;
@@ -70,7 +70,7 @@
sigset_t caller_sigmask() const { return _caller_sigmask; }
void set_caller_sigmask(sigset_t sigmask) { _caller_sigmask = sigmask; }
-#ifdef _ALLBSD_SOURCE
+#if defined(_ALLBSD_SOURCE) && !defined(__FreeBSD__)
#ifdef __APPLE__
thread_t thread_id() const {
return _thread_id;
@@ -87,8 +87,12 @@
#endif
#ifndef PRODUCT
// Used for debugging, return a unique integer for each thread.
+#ifdef __FreeBSD__
+ int thread_identifier() const { return _thread_id; }
+#else
intptr_t thread_identifier() const { return (intptr_t)_pthread_id; }
#endif
+#endif
#ifdef ASSERT
// We expect no reposition failures so kill vm if we get one.
//
@@ -96,7 +100,7 @@
return false;
}
#endif // ASSERT
-#ifdef _ALLBSD_SOURCE
+#if defined(_ALLBSD_SOURCE) && !defined(__FreeBSD__)
#ifdef __APPLE__
void set_thread_id(thread_t id) {
_thread_id = id;
--- hotspot/src/os/bsd/vm/os_bsd.cpp
+++ hotspot/src/os/bsd/vm/os_bsd.cpp
@@ -94,7 +94,6 @@
# include <sys/mman.h>
# include <sys/stat.h>
# include <sys/select.h>
-# include <pthread.h>
# include <signal.h>
# include <errno.h>
# include <dlfcn.h>
@@ -131,6 +130,19 @@
# include <inttypes.h>
# include <sys/ioctl.h>
+#ifdef __FreeBSD__
+#if __FreeBSD_version > 700109
+#include <sys/cpuset.h>
+#endif
+#include <vm/swap_pager.h>
+#include <vm/vm_param.h>
+#if __FreeBSD_version > 900030
+#include <pthread_np.h>
+#else
+extern "C" int thr_self(long *); // XXX #include <sys/thr.h>
+#endif
+#endif
+
#if defined(__FreeBSD__) || defined(__NetBSD__)
# include <elf.h>
#endif
@@ -162,8 +174,10 @@
#endif
int (*os::Bsd::_clock_gettime)(clockid_t, struct timespec *) = NULL;
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
int (*os::Bsd::_pthread_getcpuclockid)(pthread_t, clockid_t *) = NULL;
+#endif
+#ifndef _ALLBSD_SOURCE
Mutex* os::Bsd::_createThread_lock = NULL;
#endif
pthread_t os::Bsd::_main_thread;
@@ -171,7 +185,11 @@
#ifndef _ALLBSD_SOURCE
bool os::Bsd::_is_floating_stack = false;
bool os::Bsd::_is_NPTL = false;
+#endif
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
bool os::Bsd::_supports_fast_thread_cpu_time = false;
+#endif
+#ifndef _ALLBSD_SOURCE
const char * os::Bsd::_glibc_version = NULL;
const char * os::Bsd::_libpthread_version = NULL;
#endif
@@ -205,6 +223,28 @@
julong os::Bsd::available_memory() {
#ifdef _ALLBSD_SOURCE
+#ifdef __FreeBSD__
+ static const char *vm_stats[] = {
+ "vm.stats.vm.v_free_count",
+ "vm.stats.vm.v_cache_count",
+ "vm.stats.vm.v_inactive_count"
+ };
+ size_t size;
+ julong free_pages;
+ u_int i, npages;
+
+ for (i = 0, free_pages = 0; i < sizeof(vm_stats) / sizeof(vm_stats[0]); i++) {
+ size = sizeof(npages);
+ if (sysctlbyname(vm_stats[i], &npages, &size, NULL, 0) == -1) {
+ free_pages = 0;
+ break;
+ }
+ free_pages += npages;
+ }
+ if (free_pages > 0)
+ return free_pages * os::vm_page_size();
+ else
+#endif
// XXXBSD: this is just a stopgap implementation
return physical_memory() >> 2;
#else
@@ -221,6 +261,17 @@
}
julong os::allocatable_physical_memory(julong size) {
+#ifdef _ALLBSD_SOURCE
+ struct rlimit limits;
+ getrlimit(RLIMIT_DATA, &limits);
+ if (limits.rlim_cur != RLIM_INFINITY)
+ size = MIN2(size, (julong)limits.rlim_cur);
+#ifdef RLIMIT_AS
+ getrlimit(RLIMIT_AS, &limits);
+ if (limits.rlim_cur != RLIM_INFINITY)
+ size = MIN2(size, (julong)limits.rlim_cur);
+#endif
+#endif
#ifdef _LP64
return size;
#else
@@ -308,16 +359,22 @@
#define COMPILER_VARIANT "client"
#endif
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
// pid_t gettid()
//
// Returns the kernel thread id of the currently running thread. Kernel
// thread id is used to access /proc.
//
-// (Note that getpid() on BsdThreads returns kernel thread id too; but
-// on NPTL, it returns the same pid for all threads, as required by POSIX.)
-//
pid_t os::Bsd::gettid() {
+#ifdef __FreeBSD__
+#if __FreeBSD_version > 900030
+ return pthread_getthreadid_np();
+#else
+ long tid;
+ thr_self(&tid);
+ return (pid_t)tid;
+#endif
+#else
int rslt = syscall(SYS_gettid);
if (rslt == -1) {
// old kernel, no NPTL support
@@ -325,6 +382,7 @@
} else {
return (pid_t)rslt;
}
+#endif
}
// Most versions of bsd have a bug where the number of processors are
@@ -337,7 +395,35 @@
"environment on Bsd when /proc filesystem is not mounted.";
#endif
-#ifdef _ALLBSD_SOURCE
+#if defined(__FreeBSD__)
+void os::Bsd::initialize_system_info() {
+ int cpu_val = sysconf(_SC_NPROCESSORS_CONF);
+ if (cpu_val >= 1)
+ set_processor_count(cpu_val);
+ else
+ set_processor_count(1); // fallback
+
+#ifdef _SC_PHYS_PAGES
+ long phys_pages = sysconf(_SC_PHYS_PAGES);
+ if (phys_pages > 0)
+ _physical_memory = (julong)phys_pages * _page_size;
+ else
+ _physical_memory = 256*1024*1024; // fallback (XXXBSD?)
+#else
+ int mib[2];
+ size_t len;
+ u_long mem_val;
+
+ mib[0] = CTL_HW;
+ mib[1] = HW_PHYSMEM;
+ 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?)
+#endif
+ }
+#elif defined(_ALLBSD_SOURCE)
void os::Bsd::initialize_system_info() {
int mib[2];
size_t len;
@@ -452,7 +538,7 @@
* 7: The default directories, normally /lib and /usr/lib.
*/
#ifndef DEFAULT_LIBPATH
-#define DEFAULT_LIBPATH "/lib:/usr/lib"
+#define DEFAULT_LIBPATH "/lib:/usr/lib:%%LOCALBASE%%/lib"
#endif
#define EXTENSIONS_DIR "/lib/ext"
@@ -997,7 +1083,7 @@
return NULL;
}
-#ifdef _ALLBSD_SOURCE
+#if defined(_ALLBSD_SOURCE) && !defined(__FreeBSD__)
#ifdef __APPLE__
// thread_id is mach thread on macos
osthread->set_thread_id(::mach_thread_self());
@@ -1009,6 +1095,7 @@
// thread_id is kernel thread id (similar to Solaris LWP id)
osthread->set_thread_id(os::Bsd::gettid());
+#ifndef __FreeBSD__
if (UseNUMA) {
int lgrp_id = os::numa_get_group_id();
if (lgrp_id != -1) {
@@ -1016,6 +1103,7 @@
}
}
#endif
+#endif
// initialize signal mask for this thread
os::Bsd::hotspot_sigmask(thread);
@@ -1105,7 +1193,7 @@
// let pthread_create() pick the default value.
}
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
// glibc guard page
pthread_attr_setguardsize(&attr, os::Bsd::default_guard_size(thr_type));
#endif
@@ -1194,7 +1282,7 @@
}
// Store pthread info into the OSThread
-#ifdef _ALLBSD_SOURCE
+#if defined(_ALLBSD_SOURCE) && !defined(__FreeBSD__)
#ifdef __APPLE__
osthread->set_thread_id(::mach_thread_self());
#else
@@ -1630,7 +1718,10 @@
}
#endif
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
+#ifdef __FreeBSD__
+#define sys_clock_getres clock_getres
+#else
#ifndef SYS_clock_getres
#if defined(IA32) || defined(AMD64)
@@ -1644,6 +1735,7 @@
#else
#define sys_clock_getres(x,y) ::syscall(SYS_clock_getres, x, y)
#endif
+#endif
void os::Bsd::fast_thread_clock_init() {
if (!UseBsdPosixThreadCPUClocks) {
@@ -1817,8 +1909,10 @@
}
intx os::current_thread_id() {
-#ifdef __APPLE__
+#if defined(__APPLE__)
return (intx)::mach_thread_self();
+#elif defined(__FreeBSD__)
+ return (intx)os::Bsd::gettid();
#else
return (intx)::pthread_self();
#endif
@@ -2341,14 +2435,16 @@
}
void os::print_os_info_brief(outputStream* st) {
- st->print("Bsd");
+ st->print("BSD");
+ st->cr();
os::Posix::print_uname_info(st);
}
void os::print_os_info(outputStream* st) {
st->print("OS:");
- st->print("Bsd");
+ st->print("BSD");
+ st->cr();
os::Posix::print_uname_info(st);
@@ -2366,7 +2462,23 @@
st->print("Memory:");
st->print(" %dk page", os::vm_page_size()>>10);
-#ifndef _ALLBSD_SOURCE
+#if defined(__FreeBSD__)
+ struct xswdev xsw;
+ size_t mibsize, size;
+ int mib[16], n, total = 0, used = 0;
+
+ mibsize = sizeof(mib) / sizeof(mib[0]);
+ if (sysctlnametomib("vm.swap_info", mib, &mibsize) != -1) {
+ for (n = 0; ; n++) {
+ mib[mibsize] = n;
+ size = sizeof(xsw);
+ if (sysctl(mib, mibsize + 1, &xsw, &size, NULL, 0) == -1)
+ break;
+ total += xsw.xsw_nblks;
+ used += xsw.xsw_used;
+ }
+ }
+#elif !defined(_ALLBSD_SOURCE)
// values in struct sysinfo are "unsigned long"
struct sysinfo si;
sysinfo(&si);
@@ -2376,17 +2488,22 @@
os::physical_memory() >> 10);
st->print("(" UINT64_FORMAT "k free)",
os::available_memory() >> 10);
-#ifndef _ALLBSD_SOURCE
+#if defined(__FreeBSD__)
+ st->print(", swap " UINT64_FORMAT "k",
+ ((jlong)total * os::vm_page_size()) >> 10);
+ st->print("(" UINT64_FORMAT "k free)",
+ ((jlong)(total - used) * os::vm_page_size()) >> 10);
+#elif !defined(_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);
+#endif
st->cr();
}
@@ -2399,7 +2516,7 @@
const char *fpe_names[] = { "FPE0", "FPE_INTDIV", "FPE_INTOVF", "FPE_FLTDIV",
"FPE_FLTOVF", "FPE_FLTUND", "FPE_FLTRES",
- "FPE_FLTINV", "FPE_FLTSUB", "FPE_FLTDEN" };
+ "FPE_FLTINV", "FPE_FLTSUB" };
const char *segv_names[] = { "SEGV0", "SEGV_MAPERR", "SEGV_ACCERR" };
@@ -2425,7 +2542,7 @@
st->print(", si_addr=" PTR_FORMAT, si->si_addr);
break;
case SIGFPE:
- st->print(", si_code=%d (%s)", c, c > 9 ? "" : fpe_names[c]);
+ st->print(", si_code=%d (%s)", c, c > 8 ? "" : fpe_names[c]);
st->print(", si_addr=" PTR_FORMAT, si->si_addr);
break;
case SIGSEGV:
@@ -2533,10 +2650,17 @@
jrelib_p = buf + len;
// Add the appropriate library subdir
+#ifdef __APPLE__
snprintf(jrelib_p, buflen-len, "/jre/lib");
if (0 != access(buf, F_OK)) {
snprintf(jrelib_p, buflen-len, "/lib");
}
+#else
+ snprintf(jrelib_p, buflen-len, "/jre/lib/%s", cpu_arch);
+ if (0 != access(buf, F_OK)) {
+ snprintf(jrelib_p, buflen-len, "/lib/%s", cpu_arch);
+ }
+#endif
// Add the appropriate client or server subdir
len = strlen(buf);
@@ -2817,7 +2941,7 @@
}
void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) {
- ::madvise(addr, bytes, MADV_DONTNEED);
+ commit_memory(addr, bytes, false);
}
void os::numa_make_global(char *addr, size_t bytes) {
@@ -2997,9 +3121,10 @@
flags |= MAP_FIXED;
}
- // Map uncommitted pages PROT_READ and PROT_WRITE, change access
- // to PROT_EXEC if executable when we commit the page.
- addr = (char*)::mmap(requested_addr, bytes, PROT_READ|PROT_WRITE,
+ // Map reserved/uncommitted pages PROT_NONE so we fail early if we
+ // touch an uncommitted page. Otherwise, the read/write might
+ // succeed if we have enough swap space to back the physical page.
+ addr = (char*)::mmap(requested_addr, bytes, PROT_NONE,
flags, -1, 0);
if (addr != MAP_FAILED) {
@@ -3244,9 +3369,11 @@
#endif
char* os::reserve_memory_special(size_t bytes, char* req_addr, bool exec) {
+#ifndef _ALLBSD_SOURCE
// "exec" is passed in but not used. Creating the shared image for
// the code cache doesn't have an SHM_X executable permission to check.
assert(UseLargePages && UseSHM, "only for SHM large pages");
+#endif
key_t key = IPC_PRIVATE;
char *addr;
@@ -3321,11 +3448,19 @@
// with SysV SHM the entire memory region must be allocated as shared
// memory.
bool os::can_commit_large_page_memory() {
+#ifdef _ALLBSD_SOURCE
+ return false;
+#else
return UseHugeTLBFS;
+#endif
}
bool os::can_execute_large_page_memory() {
+#ifdef _ALLBSD_SOURCE
+ return false;
+#else
return UseHugeTLBFS;
+#endif
}
// Reserve memory at an arbitrary address, only if that area is
@@ -3654,8 +3789,8 @@
return OS_OK;
#else
int ret = setpriority(PRIO_PROCESS, thread->osthread()->thread_id(), newpri);
- return (ret == 0) ? OS_OK : OS_ERR;
#endif
+ return (ret == 0) ? OS_OK : OS_ERR;
}
OSReturn os::get_native_priority(const Thread* const thread, int *priority_ptr) {
@@ -4171,7 +4306,7 @@
}
}
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
// 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+.
@@ -4188,6 +4323,7 @@
}
#endif
+#ifndef _ALLBSD_SOURCE
/////
// glibc on Bsd platform uses non-documented flag
// to indicate, that some special sort of signal
@@ -4198,6 +4334,7 @@
#undef SIGNIFICANT_SIGNAL_MASK
#endif
#define SIGNIFICANT_SIGNAL_MASK (~0x04000000)
+#endif
static const char* get_signal_handler_name(address handler,
char* buf, int buflen) {
@@ -4222,8 +4359,10 @@
sigaction(sig, NULL, &sa);
+#ifndef _ALLBSD_SOURCE
// See comment for SIGNIFICANT_SIGNAL_MASK define
sa.sa_flags &= SIGNIFICANT_SIGNAL_MASK;
+#endif
st->print("%s: ", os::exception_name(sig, buf, buflen));
@@ -4245,7 +4384,11 @@
// May be, handler was resetted by VMError?
if(rh != NULL) {
handler = rh;
+#ifdef _ALLBSD_SOURCE
+ sa.sa_flags = VMError::get_resetted_sigflags(sig);
+#else
sa.sa_flags = VMError::get_resetted_sigflags(sig) & SIGNIFICANT_SIGNAL_MASK;
+#endif
}
st->print(", sa_flags=" PTR32_FORMAT, sa.sa_flags);
@@ -4320,7 +4463,9 @@
os_sigaction(sig, (struct sigaction*)NULL, &act);
+#ifndef _ALLBSD_SOURCE
act.sa_flags &= SIGNIFICANT_SIGNAL_MASK;
+#endif
address thisHandler = (act.sa_flags & SA_SIGINFO)
? CAST_FROM_FN_PTR(address, act.sa_sigaction)
@@ -4381,6 +4526,14 @@
extern bool signal_name(int signo, char* buf, size_t len);
+#ifndef SIGRTMAX
+#ifdef __OpenBSD__
+#define SIGRTMAX 31
+#else
+#define SIGRTMAX 63
+#endif
+#endif
+
const char* os::exception_name(int exception_code, char* buf, size_t size) {
if (0 < exception_code && exception_code <= SIGRTMAX) {
// signal
@@ -4450,7 +4603,7 @@
// this is called _after_ the global arguments have been parsed
jint os::init_2(void)
{
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
Bsd::fast_thread_clock_init();
#endif
@@ -4634,6 +4787,20 @@
int os::active_processor_count() {
#ifdef _ALLBSD_SOURCE
+#ifdef __FreeBSD__
+ int online_cpus = 0;
+#if __FreeBSD_version > 700109
+ cpuset_t mask;
+ if (cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, sizeof(mask),
+ &mask) == 0)
+ for (u_int i = 0; i < sizeof(mask) / sizeof(long); i++)
+ online_cpus += __builtin_popcountl(((long *)&mask)[i]);
+#else
+ online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
+#endif
+ if (online_cpus > 0 && online_cpus <= _processor_count)
+ return online_cpus;
+#endif
return _processor_count;
#else
// Bsd doesn't yet have a (official) notion of processor sets,
@@ -5033,7 +5200,7 @@
return munmap(addr, bytes) == 0;
}
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time);
static clockid_t thread_cpu_clockid(Thread* thread) {
@@ -5057,7 +5224,7 @@
jlong os::current_thread_cpu_time() {
#ifdef __APPLE__
return os::thread_cpu_time(Thread::current(), true /* user + sys */);
-#elif !defined(_ALLBSD_SOURCE)
+#elif !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
if (os::Bsd::supports_fast_thread_cpu_time()) {
return os::Bsd::fast_thread_cpu_time(CLOCK_THREAD_CPUTIME_ID);
} else {
@@ -5068,7 +5235,7 @@
}
jlong os::thread_cpu_time(Thread* thread) {
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
// 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));
@@ -5081,7 +5248,7 @@
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)
+#elif !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
if (user_sys_cpu_time && os::Bsd::supports_fast_thread_cpu_time()) {
return os::Bsd::fast_thread_cpu_time(CLOCK_THREAD_CPUTIME_ID);
} else {
@@ -5110,7 +5277,7 @@
} else {
return ((jlong)tinfo.user_time.seconds * 1000000000) + ((jlong)tinfo.user_time.microseconds * (jlong)1000);
}
-#elif !defined(_ALLBSD_SOURCE)
+#elif !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
if (user_sys_cpu_time && os::Bsd::supports_fast_thread_cpu_time()) {
return os::Bsd::fast_thread_cpu_time(thread_cpu_clockid(thread));
} else {
@@ -5119,12 +5286,15 @@
#endif
}
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
//
// -1 on error.
//
static jlong slow_thread_cpu_time(Thread *thread, bool user_sys_cpu_time) {
+#ifdef __FreeBSD__
+ return -1;
+#else
static bool proc_pid_cpu_avail = true;
static bool proc_task_unchecked = true;
static const char *proc_stat_path = "/proc/%d/stat";
@@ -5208,6 +5378,7 @@
} else {
return (jlong)user_time * (1000000000 / clock_tics_per_sec);
}
+#endif
}
#endif
@@ -5226,7 +5397,7 @@
}
bool os::is_thread_cpu_time_supported() {
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(__FreeBSD__)
return true;
#elif defined(_ALLBSD_SOURCE)
return false;
--- hotspot/src/os/bsd/vm/os_bsd.hpp
+++ hotspot/src/os/bsd/vm/os_bsd.hpp
@@ -56,9 +56,11 @@
static int sigflags[MAXSIGNUM];
static int (*_clock_gettime)(clockid_t, struct timespec *);
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
static int (*_pthread_getcpuclockid)(pthread_t, clockid_t *);
+#endif
+#ifndef _ALLBSD_SOURCE
static address _initial_thread_stack_bottom;
static uintptr_t _initial_thread_stack_size;
@@ -67,6 +69,8 @@
static bool _is_floating_stack;
static bool _is_NPTL;
+#endif
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
static bool _supports_fast_thread_cpu_time;
#endif
@@ -112,13 +116,15 @@
#endif
static pthread_t main_thread(void) { return _main_thread; }
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
// returns kernel thread id (similar to LWP id on Solaris), which can be
// used to access /proc
static pid_t gettid();
+#ifndef _ALLBSD_SOURCE
static void set_createThread_lock(Mutex* lk) { _createThread_lock = lk; }
static Mutex* createThread_lock(void) { return _createThread_lock; }
#endif
+#endif
static void hotspot_sigmask(Thread* thread);
#ifndef _ALLBSD_SOURCE
@@ -197,12 +203,12 @@
// Real-time clock functions
static void clock_init(void);
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
// fast POSIX clocks support
static void fast_thread_clock_init(void);
#endif
- static bool supports_monotonic_clock() {
+ static inline bool supports_monotonic_clock() {
return _clock_gettime != NULL;
}
@@ -210,7 +216,7 @@
return _clock_gettime ? _clock_gettime(clock_id, tp) : -1;
}
-#ifndef _ALLBSD_SOURCE
+#if !defined(_ALLBSD_SOURCE) || defined(__FreeBSD__)
static int pthread_getcpuclockid(pthread_t tid, clockid_t *clock_id) {
return _pthread_getcpuclockid ? _pthread_getcpuclockid(tid, clock_id) : -1;
}
--- hotspot/src/os/bsd/vm/threadCritical_bsd.cpp
+++ hotspot/src/os/bsd/vm/threadCritical_bsd.cpp
@@ -33,35 +33,36 @@
// See threadCritical.hpp for details of this class.
//
-static pthread_t tc_owner = 0;
-static pthread_mutex_t tc_mutex = PTHREAD_MUTEX_INITIALIZER;
-static int tc_count = 0;
+static pthread_mutex_t tc_mutex;
+static pthread_mutexattr_t tc_attr;
+static bool initialized = false;
void ThreadCritical::initialize() {
+ int ret;
+ ret = pthread_mutexattr_init(&tc_attr);
+ guarantee(ret == 0, "fatal error with pthread_mutexattr_init()");
+ ret = pthread_mutexattr_settype(&tc_attr, PTHREAD_MUTEX_RECURSIVE);
+ guarantee(ret == 0, "fatal error with pthread_mutexattr_settype()");
+ ret = pthread_mutex_init(&tc_mutex, &tc_attr);
+ guarantee(ret == 0, "fatal error with pthread_mutex_init()");
+ initialized = true;
}
void ThreadCritical::release() {
+ pthread_mutex_destroy(&tc_mutex);
+ pthread_mutexattr_destroy(&tc_attr);
}
ThreadCritical::ThreadCritical() {
- pthread_t self = pthread_self();
- if (self != tc_owner) {
- int ret = pthread_mutex_lock(&tc_mutex);
- guarantee(ret == 0, "fatal error with pthread_mutex_lock()");
- assert(tc_count == 0, "Lock acquired with illegal reentry count.");
- tc_owner = self;
- }
- tc_count++;
+ if (initialized)
+ pthread_mutex_lock(&tc_mutex);
+ else
+ assert(Threads::number_of_threads() == 0, "valid only during initialization");
}
ThreadCritical::~ThreadCritical() {
- assert(tc_owner == pthread_self(), "must have correct owner");
- assert(tc_count > 0, "must have correct count");
-
- tc_count--;
- if (tc_count == 0) {
- tc_owner = 0;
- int ret = pthread_mutex_unlock(&tc_mutex);
- guarantee(ret == 0, "fatal error with pthread_mutex_unlock()");
- }
+ if (initialized)
+ pthread_mutex_unlock(&tc_mutex);
+ else
+ assert(Threads::number_of_threads() == 0, "valid only during initialization");
}
--- hotspot/src/os/bsd/vm/vmError_bsd.cpp
+++ hotspot/src/os/bsd/vm/vmError_bsd.cpp
@@ -34,6 +34,12 @@
#include <unistd.h>
#include <signal.h>
+#ifdef __FreeBSD__
+#define GDB_LAUNCHER "gdb /proc/%d/file %d"
+#else
+#define GDB_LAUNCHER "gdb /proc/%d/exe %d"
+#endif
+
void VMError::show_message_box(char *buf, int buflen) {
bool yes;
do {
@@ -44,7 +50,7 @@
jio_snprintf(p, buflen - len,
"\n\n"
"Do you want to debug the problem?\n\n"
- "To debug, run 'gdb /proc/%d/exe %d'; then switch to thread " INTX_FORMAT " (" INTPTR_FORMAT ")\n"
+ "To debug, run '" GDB_LAUNCHER "'; then switch to thread " INTX_FORMAT " (" INTPTR_FORMAT ")\n"
"Enter 'yes' to launch gdb automatically (PATH must include gdb)\n"
"Otherwise, press RETURN to abort...",
os::current_process_id(), os::current_process_id(),
@@ -54,7 +60,7 @@
if (yes) {
// yes, user asked VM to launch debugger
- jio_snprintf(buf, buflen, "gdb /proc/%d/exe %d",
+ jio_snprintf(buf, buflen, GDB_LAUNCHER,
os::current_process_id(), os::current_process_id());
os::fork_and_exec(buf);
--- hotspot/src/os/posix/launcher/java_md.c
+++ hotspot/src/os/posix/launcher/java_md.c
@@ -35,6 +35,9 @@
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
+#ifndef _SC_PHYS_PAGES
+#include <sys/sysctl.h>
+#endif
#ifndef GAMMA
#include "manifest_info.h"
@@ -96,8 +99,8 @@
* 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(__linux__) || defined(_ALLBSD_SOURCE)
+static const char *system_dir = "%%JAVA_HOME%%";
static const char *user_dir = "/java";
#else /* Solaris */
static const char *system_dir = "/usr/jdk";
@@ -526,7 +529,7 @@
* LD_LIBRARY_PATH. Note that this prevents any possible infinite
* loop of execv() because we test for the prefix, above.
*/
- if (runpath != 0) {
+ if (runpath != 0 && runpath[0] != '\0') {
strcat(new_runpath, ":");
strcat(new_runpath, runpath);
}
@@ -992,9 +995,13 @@
}
}
}
-#elif defined(__linux__)
+#elif defined(__linux__) || defined(_ALLBSD_SOURCE)
{
+#ifdef __FreeBSD__
+ const char* self = "/proc/curproc/file";
+#else
const char* self = "/proc/self/exe";
+#endif
char buf[PATH_MAX+1];
int len = readlink(self, buf, PATH_MAX);
if (len >= 0) {
@@ -1002,7 +1009,7 @@
exec_path = JLI_StringDup(buf);
}
}
-#else /* !__sun && !__linux */
+#else /* !__sun && !__linux && !_ALLBSD_SOURCE */
{
/* Not implemented */
}
@@ -1100,6 +1107,7 @@
/* Compute physical memory by asking the OS */
uint64_t
physical_memory(void) {
+#ifdef _SC_PHYS_PAGES
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;
@@ -1111,6 +1119,28 @@
" physical memory: " UINT64_FORMAT " (%.3fGB)\n",
pages, page_size, result, result / (double) GB);
}
+#else
+#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);
+ uint64_t result;
+# define UINT64_FORMAT "%" PRIu64
+
+ if (sysctl(name, 2, &physmem, &physmem_len, NULL, 0) == -1)
+ physmem = 256 * MB;
+
+ result = (uint64_t)physmem;
+
+ if (_launcher_debug) {
+ printf("physical memory: " UINT64_FORMAT " (%.3fGB)\n",
+ result, result / (double) GB);
+ }
+#endif
return result;
}
@@ -1271,7 +1301,7 @@
#endif
}
-#endif /* __linux__ && i586 */
+#endif /* (__linux__ || _ALLBSD_SOURCE) && i586 */
#ifdef i586
/*
@@ -1450,7 +1480,7 @@
#endif /* __sun && i586 */
-#if defined(__linux__) && defined(i586)
+#if (defined(__linux__) || defined(_ALLBSD_SOURCE)) && defined(i586)
/* The definition of a server-class machine for linux-i586 */
jboolean
@@ -1481,7 +1511,7 @@
return result;
}
-#endif /* __linux__ && i586 */
+#endif /* (__linux__ || _ALLBSD_SOURCE) && i586 */
#if defined(_ALLBSD_SOURCE) && defined(i586)
@@ -1508,7 +1538,7 @@
}
}
if (_launcher_debug) {
- printf("linux_" LIBARCHNAME "_ServerClassMachine: %s\n",
+ printf("bsd_" LIBARCHNAME "_ServerClassMachine: %s\n",
(result == JNI_TRUE ? "true" : "false"));
}
return result;
@@ -1672,7 +1702,7 @@
while (dp != NULL) {
cp = strchr(dp, (int)':');
if (cp != NULL)
- *cp = (char)NULL;
+ *cp = '\0';
if ((target = ProcessDir(info, dp)) != NULL)
break;
dp = cp;
@@ -1931,8 +1961,8 @@
#define MAX_PID_STR_SZ 20
void SetJavaLauncherPlatformProps() {
- /* Linux only */
-#ifdef __linux__
+ /* Linux and BSDs only */
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
const char *substr = "-Dsun.java.launcher.pid=";
char *pid_prop_str = (char *)JLI_MemAlloc(strlen(substr) + MAX_PID_STR_SZ + 1);
sprintf(pid_prop_str, "%s%d", substr, getpid());
--- hotspot/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp
+++ hotspot/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp
@@ -42,7 +42,6 @@
#endif // AMD64
define_pd_global(intx, CompilerThreadStackSize, 0);
-define_pd_global(intx, SurvivorRatio, 8);
define_pd_global(uintx, JVMInvokeMethodSlack, 8192);
--- hotspot/src/os_cpu/bsd_x86/vm/vmStructs_bsd_x86.hpp
+++ hotspot/src/os_cpu/bsd_x86/vm/vmStructs_bsd_x86.hpp
@@ -29,8 +29,10 @@
// constants required by the Serviceability Agent. This file is
// referenced by vmStructs.cpp.
-#ifdef __APPLE__
+#if defined(__APPLE__)
#define OS_THREAD_ID_TYPE thread_t
+#elif defined(__FreeBSD__)
+#define OS_THREAD_ID_TYPE pid_t
#else
#define OS_THREAD_ID_TYPE pthread_t
#endif
@@ -46,17 +48,31 @@
last_entry()
+#ifdef __FreeBSD__
#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_unsigned_integer_type(thread_t) \
+ declare_integer_type(pid_t) \
declare_unsigned_integer_type(pthread_t) \
\
/* This must be the last entry, and must be present */ \
last_entry()
+#else
+#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_unsigned_integer_type(OS_THREAD_ID_TYPE) \
+ declare_unsigned_integer_type(pthread_t) \
+ \
+ /* This must be the last entry, and must be present */ \
+ last_entry()
+#endif
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant, last_entry) \
\
--- hotspot/src/share/vm/adlc/arena.cpp
+++ hotspot/src/share/vm/adlc/arena.cpp
@@ -24,7 +24,7 @@
#include "adlc.hpp"
-void* Chunk::operator new(size_t requested_size, size_t length) {
+void* Chunk::operator new(size_t requested_size, size_t length) throw() {
return CHeapObj::operator new(requested_size + length);
}
@@ -163,7 +163,7 @@
//-----------------------------------------------------------------------------
// CHeapObj
-void* CHeapObj::operator new(size_t size){
+void* CHeapObj::operator new(size_t size) throw() {
return (void *) malloc(size);
}
--- hotspot/src/share/vm/adlc/arena.hpp
+++ hotspot/src/share/vm/adlc/arena.hpp
@@ -42,7 +42,7 @@
class CHeapObj {
public:
- void* operator new(size_t size);
+ void* operator new(size_t size) throw();
void operator delete(void* p);
void* new_array(size_t size);
};
@@ -53,7 +53,7 @@
class ValueObj {
public:
- void* operator new(size_t size);
+ void* operator new(size_t size) throw();
void operator delete(void* p);
};
@@ -61,7 +61,7 @@
class AllStatic {
public:
- void* operator new(size_t size);
+ void* operator new(size_t size) throw();
void operator delete(void* p);
};
@@ -70,7 +70,7 @@
// Linked list of raw memory chunks
class Chunk: public CHeapObj {
public:
- void* operator new(size_t size, size_t length);
+ void* operator new(size_t size, size_t length) throw();
void operator delete(void* p, size_t length);
Chunk(size_t length);
--- hotspot/src/share/vm/adlc/main.cpp
+++ hotspot/src/share/vm/adlc/main.cpp
@@ -508,7 +508,7 @@
// VS2005 has its own definition, identical to this one.
#if !defined(_WIN32) || defined(_WIN64) || _MSC_VER < 1400
-void *operator new( size_t size, int, const char *, int ) {
+void *operator new( size_t size, int, const char *, int ) throw() {
return ::operator new( size );
}
#endif
--- hotspot/src/share/vm/asm/codeBuffer.hpp
+++ hotspot/src/share/vm/asm/codeBuffer.hpp
@@ -290,7 +290,7 @@
// CodeBuffers must be allocated on the stack except for a single
// special case during expansion which is handled internally. This
// is done to guarantee proper cleanup of resources.
- void* operator new(size_t size) { return ResourceObj::operator new(size); }
+ void* operator new(size_t size) throw() { return ResourceObj::operator new(size); }
void operator delete(void* p) { ShouldNotCallThis(); }
public:
--- hotspot/src/share/vm/c1/c1_Compilation.hpp
+++ hotspot/src/share/vm/c1/c1_Compilation.hpp
@@ -263,8 +263,8 @@
// Base class for objects allocated by the compiler in the compilation arena
class CompilationResourceObj ALLOCATION_SUPER_CLASS_SPEC {
public:
- void* operator new(size_t size) { return Compilation::current()->arena()->Amalloc(size); }
- void* operator new(size_t size, Arena* arena) {
+ void* operator new(size_t size) throw() { return Compilation::current()->arena()->Amalloc(size); }
+ void* operator new(size_t size, Arena* arena) throw() {
return arena->Amalloc(size);
}
void operator delete(void* p) {} // nothing to do
--- hotspot/src/share/vm/c1/c1_IR.cpp
+++ hotspot/src/share/vm/c1/c1_IR.cpp
@@ -499,7 +499,7 @@
_loop_map(0, 0), // initialized later with correct size
_compilation(c)
{
- TRACE_LINEAR_SCAN(2, "***** computing linear-scan block order");
+ TRACE_LINEAR_SCAN(2, tty->print_cr("***** computing linear-scan block order"));
init_visited();
count_edges(start_block, NULL);
@@ -665,7 +665,7 @@
}
void ComputeLinearScanOrder::assign_loop_depth(BlockBegin* start_block) {
- TRACE_LINEAR_SCAN(3, "----- computing loop-depth and weight");
+ TRACE_LINEAR_SCAN(3, tty->print_cr("----- computing loop-depth and weight"));
init_visited();
assert(_work_list.is_empty(), "work list must be empty before processing");
@@ -839,7 +839,7 @@
}
void ComputeLinearScanOrder::compute_order(BlockBegin* start_block) {
- TRACE_LINEAR_SCAN(3, "----- computing final block order");
+ TRACE_LINEAR_SCAN(3, tty->print_cr("----- computing final block order"));
// the start block is always the first block in the linear scan order
_linear_scan_order = new BlockList(_num_blocks);
--- hotspot/src/share/vm/c1/c1_Instruction.hpp
+++ hotspot/src/share/vm/c1/c1_Instruction.hpp
@@ -311,7 +311,7 @@
}
public:
- void* operator new(size_t size) {
+ void* operator new(size_t size) throw() {
Compilation* c = Compilation::current();
void* res = c->arena()->Amalloc(size);
((Instruction*)res)->_id = c->get_next_id();
@@ -1529,7 +1529,7 @@
friend class SuxAndWeightAdjuster;
public:
- void* operator new(size_t size) {
+ void* operator new(size_t size) throw() {
Compilation* c = Compilation::current();
void* res = c->arena()->Amalloc(size);
((BlockBegin*)res)->_id = c->get_next_id();
--- hotspot/src/share/vm/ci/ciUtilities.hpp
+++ hotspot/src/share/vm/ci/ciUtilities.hpp
@@ -93,7 +93,7 @@
CLEAR_PENDING_EXCEPTION; \
return (result); \
} \
- (0
+ (void)(0
#define KILL_COMPILE_ON_ANY \
THREAD); \
@@ -101,7 +101,7 @@
fatal("unhandled ci exception"); \
CLEAR_PENDING_EXCEPTION; \
} \
-(0
+(void)(0
inline const char* bool_to_str(bool b) {
--- hotspot/src/share/vm/classfile/verifier.hpp
+++ hotspot/src/share/vm/classfile/verifier.hpp
@@ -84,9 +84,9 @@
// These macros are used similarly to CHECK macros but also check
// the status of the verifier and return if that has an error.
#define CHECK_VERIFY(verifier) \
- CHECK); if ((verifier)->has_error()) return; (0
+ CHECK); if ((verifier)->has_error()) return; ((void)0
#define CHECK_VERIFY_(verifier, result) \
- CHECK_(result)); if ((verifier)->has_error()) return (result); (0
+ CHECK_(result)); if ((verifier)->has_error()) return (result); ((void)0
// A new instance of this class is created for each class being verified
class ClassVerifier : public StackObj {
--- hotspot/src/share/vm/code/codeBlob.cpp
+++ hotspot/src/share/vm/code/codeBlob.cpp
@@ -242,7 +242,7 @@
}
-void* BufferBlob::operator new(size_t s, unsigned size) {
+void* BufferBlob::operator new(size_t s, unsigned size) throw() {
void* p = CodeCache::allocate(size);
return p;
}
@@ -344,14 +344,14 @@
}
-void* RuntimeStub::operator new(size_t s, unsigned size) {
+void* RuntimeStub::operator new(size_t s, unsigned size) throw() {
void* p = CodeCache::allocate(size);
if (!p) fatal("Initial size of CodeCache is too small");
return p;
}
// operator new shared by all singletons:
-void* SingletonBlob::operator new(size_t s, unsigned size) {
+void* SingletonBlob::operator new(size_t s, unsigned size) throw() {
void* p = CodeCache::allocate(size);
if (!p) fatal("Initial size of CodeCache is too small");
return p;
--- hotspot/src/share/vm/code/codeBlob.hpp
+++ hotspot/src/share/vm/code/codeBlob.hpp
@@ -213,7 +213,7 @@
BufferBlob(const char* name, int size);
BufferBlob(const char* name, int size, CodeBuffer* cb);
- void* operator new(size_t s, unsigned size);
+ void* operator new(size_t s, unsigned size) throw();
public:
// Creation
@@ -287,7 +287,7 @@
bool caller_must_gc_arguments
);
- void* operator new(size_t s, unsigned size);
+ void* operator new(size_t s, unsigned size) throw();
public:
// Creation
@@ -325,7 +325,7 @@
friend class VMStructs;
protected:
- void* operator new(size_t s, unsigned size);
+ void* operator new(size_t s, unsigned size) throw();
public:
SingletonBlob(
--- hotspot/src/share/vm/code/debugInfoRec.cpp
+++ hotspot/src/share/vm/code/debugInfoRec.cpp
@@ -38,7 +38,7 @@
int _length; // number of bytes in the stream
int _hash; // hash of stream bytes (for quicker reuse)
- void* operator new(size_t ignore, DebugInformationRecorder* dir) {
+ void* operator new(size_t ignore, DebugInformationRecorder* dir) throw() {
assert(ignore == sizeof(DIR_Chunk), "");
if (dir->_next_chunk >= dir->_next_chunk_limit) {
const int CHUNK = 100;
--- hotspot/src/share/vm/code/dependencies.cpp
+++ hotspot/src/share/vm/code/dependencies.cpp
@@ -932,7 +932,7 @@
assert(changes.involves_context(context_type), "irrelevant dependency");
klassOop new_type = changes.new_type();
- count_find_witness_calls();
+ (void)count_find_witness_calls();
NOT_PRODUCT(deps_find_witness_singles++);
// Current thread must be in VM (not native mode, as in CI):
--- hotspot/src/share/vm/code/nmethod.cpp
+++ hotspot/src/share/vm/code/nmethod.cpp
@@ -784,7 +784,7 @@
}
#endif // def HAVE_DTRACE_H
-void* nmethod::operator new(size_t size, int nmethod_size) {
+void* nmethod::operator new(size_t size, int nmethod_size) throw() {
// Always leave some room in the CodeCache for I2C/C2I adapters
if (CodeCache::largest_free_block() < CodeCacheMinimumFreeSpace) return NULL;
return CodeCache::allocate(nmethod_size);
@@ -2488,7 +2488,8 @@
relocation_begin()-1+ip[1]);
for (; ip < index_end; ip++)
tty->print_cr(" (%d ?)", ip[0]);
- tty->print_cr(" @" INTPTR_FORMAT ": index_size=%d", ip, *ip++);
+ tty->print_cr(" @" INTPTR_FORMAT ": index_size=%d", ip, *ip);
+ ip++;
tty->print_cr("reloc_end @" INTPTR_FORMAT ":", ip);
}
}
--- hotspot/src/share/vm/code/nmethod.hpp
+++ hotspot/src/share/vm/code/nmethod.hpp
@@ -263,7 +263,7 @@
int comp_level);
// helper methods
- void* operator new(size_t size, int nmethod_size);
+ void* operator new(size_t size, int nmethod_size) throw();
const char* reloc_string_for(u_char* begin, u_char* end);
// Returns true if this thread changed the state of the nmethod or
--- hotspot/src/share/vm/code/relocInfo.hpp
+++ hotspot/src/share/vm/code/relocInfo.hpp
@@ -371,7 +371,7 @@
// "immediate" in the prefix header word itself. This optimization
// is invisible outside this module.)
- inline friend relocInfo prefix_relocInfo(int datalen = 0);
+ inline friend relocInfo prefix_relocInfo(int datalen);
protected:
// an immediate relocInfo optimizes a prefix with one 10-bit unsigned value
@@ -466,7 +466,7 @@
return relocInfo(relocInfo::none, relocInfo::offset_limit() - relocInfo::offset_unit);
}
-inline relocInfo prefix_relocInfo(int datalen) {
+inline relocInfo prefix_relocInfo(int datalen = 0) {
assert(relocInfo::fits_into_immediate(datalen), "datalen in limits");
return relocInfo(relocInfo::data_prefix_tag, relocInfo::RAW_BITS, relocInfo::datalen_tag | datalen);
}
@@ -686,7 +686,7 @@
}
public:
- void* operator new(size_t size, const RelocationHolder& holder) {
+ void* operator new(size_t size, const RelocationHolder& holder) throw() {
if (size > sizeof(holder._relocbuf)) guarantee_size();
assert((void* const *)holder.reloc() == &holder._relocbuf[0], "ptrs must agree");
return holder.reloc();
--- hotspot/src/share/vm/code/vtableStubs.cpp
+++ hotspot/src/share/vm/code/vtableStubs.cpp
@@ -49,7 +49,7 @@
static int num_vtable_chunks = 0;
-void* VtableStub::operator new(size_t size, int code_size) {
+void* VtableStub::operator new(size_t size, int code_size) throw() {
assert(size == sizeof(VtableStub), "mismatched size");
num_vtable_chunks++;
// compute real VtableStub size (rounded to nearest word)
--- hotspot/src/share/vm/code/vtableStubs.hpp
+++ hotspot/src/share/vm/code/vtableStubs.hpp
@@ -46,7 +46,7 @@
bool _is_vtable_stub; // True if vtable stub, false, is itable stub
/* code follows here */ // The vtableStub code
- void* operator new(size_t size, int code_size);
+ void* operator new(size_t size, int code_size) throw();
VtableStub(bool is_vtable_stub, int index)
: _next(NULL), _is_vtable_stub(is_vtable_stub),
--- hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
+++ hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
@@ -1858,8 +1858,9 @@
_cm->grayRegionIfNecessary(MemRegion(_real_start_word, _real_end_word));
#ifndef PRODUCT
- if (use_local_bitmaps && verify_local_bitmaps)
- verify();
+#if (use_local_bitmaps && verify_local_bitmaps)
+ verify();
+#endif
#endif // PRODUCT
} else {
assert(_real_start_word == NULL && _real_end_word == NULL, "invariant");
--- hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp
+++ hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp
@@ -144,9 +144,9 @@
_padded_avg(0.0), _deviation(0.0), _padding(padding) {}
// Placement support
- void* operator new(size_t ignored, void* p) { return p; }
+ void* operator new(size_t ignored, void* p) throw() { return p; }
// Allocator
- void* operator new(size_t size) { return CHeapObj::operator new(size); }
+ void* operator new(size_t size) throw() { return CHeapObj::operator new(size); }
// Accessor
float padded_average() const { return _padded_avg; }
--- hotspot/src/share/vm/libadt/port.hpp
+++ hotspot/src/share/vm/libadt/port.hpp
@@ -163,7 +163,7 @@
extern void *safe_calloc (const char *file, unsigned line, unsigned nitems, unsigned size);
extern void *safe_realloc(const char *file, unsigned line, void *ptr, unsigned size);
extern char *safe_strdup (const char *file, unsigned line, const char *src);
-inline void *operator new( size_t size ) { return malloc(size); }
+inline void *operator new( size_t size ) throw() { return malloc(size); }
inline void operator delete( void *ptr ) { free(ptr); }
#endif
--- hotspot/src/share/vm/memory/allocation.cpp
+++ hotspot/src/share/vm/memory/allocation.cpp
@@ -43,11 +43,11 @@
# include "os_bsd.inline.hpp"
#endif
-void* CHeapObj::operator new(size_t size){
+void* CHeapObj::operator new(size_t size) throw() {
return (void *) AllocateHeap(size, "CHeapObj-new");
}
-void* CHeapObj::operator new (size_t size, const std::nothrow_t& nothrow_constant) {
+void* CHeapObj::operator new (size_t size, const std::nothrow_t& nothrow_constant) throw() {
char* p = (char*) os::malloc(size);
#ifdef ASSERT
if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p);
@@ -59,12 +59,12 @@
FreeHeap(p);
}
-void* StackObj::operator new(size_t size) { ShouldNotCallThis(); return 0; };
+void* StackObj::operator new(size_t size) throw() { ShouldNotCallThis(); return 0; };
void StackObj::operator delete(void* p) { ShouldNotCallThis(); };
-void* _ValueObj::operator new(size_t size) { ShouldNotCallThis(); return 0; };
+void* _ValueObj::operator new(size_t size) throw() { ShouldNotCallThis(); return 0; };
void _ValueObj::operator delete(void* p) { ShouldNotCallThis(); };
-void* ResourceObj::operator new(size_t size, allocation_type type) {
+void* ResourceObj::operator new(size_t size, allocation_type type) throw() {
address res;
switch (type) {
case C_HEAP:
@@ -311,7 +311,7 @@
//--------------------------------------------------------------------------------------
// Chunk implementation
-void* Chunk::operator new(size_t requested_size, AllocFailType alloc_failmode, size_t length) {
+void* Chunk::operator new(size_t requested_size, AllocFailType alloc_failmode, size_t length) throw() {
// requested_size is equal to sizeof(Chunk) but in order for the arena
// allocations to come out aligned as expected the size must be aligned
// to expected arean alignment.
@@ -576,7 +576,7 @@
// src/share/native/sun/awt/font/fontmanager/textcache/hsMemory.cpp::hsSoftNew
// define CATCH_OPERATOR_NEW_USAGE if you want to use this.
#ifdef CATCH_OPERATOR_NEW_USAGE
-void* operator new(size_t size){
+void* operator new(size_t size) throw() {
static bool warned = false;
if (!warned && warn_new_operator)
warning("should not call global (default) operator new");
--- hotspot/src/share/vm/memory/allocation.hpp
+++ hotspot/src/share/vm/memory/allocation.hpp
@@ -106,8 +106,8 @@
class CHeapObj ALLOCATION_SUPER_CLASS_SPEC {
public:
- void* operator new(size_t size);
- void* operator new (size_t size, const std::nothrow_t& nothrow_constant);
+ void* operator new(size_t size) throw();
+ void* operator new (size_t size, const std::nothrow_t& nothrow_constant) throw();
void operator delete(void* p);
void* new_array(size_t size);
};
@@ -117,7 +117,7 @@
class StackObj ALLOCATION_SUPER_CLASS_SPEC {
public:
- void* operator new(size_t size);
+ void* operator new(size_t size) throw();
void operator delete(void* p);
};
@@ -141,7 +141,7 @@
//
class _ValueObj {
public:
- void* operator new(size_t size);
+ void* operator new(size_t size) throw();
void operator delete(void* p);
};
@@ -163,7 +163,7 @@
Chunk* _next; // Next Chunk in list
const size_t _len; // Size of this Chunk
public:
- void* operator new(size_t size, AllocFailType alloc_failmode, size_t length);
+ void* operator new(size_t size, AllocFailType alloc_failmode, size_t length) throw();
void operator delete(void* p);
Chunk(size_t length);
@@ -392,19 +392,19 @@
#endif // ASSERT
public:
- void* operator new(size_t size, allocation_type type);
- void* operator new(size_t size, Arena *arena) {
+ void* operator new(size_t size, allocation_type type) throw();
+ void* operator new(size_t size, Arena *arena) throw() {
address res = (address)arena->Amalloc(size);
DEBUG_ONLY(set_allocation_type(res, ARENA);)
return res;
}
- void* operator new(size_t size) {
+ void* operator new(size_t size) throw() {
address res = (address)resource_allocate_bytes(size);
DEBUG_ONLY(set_allocation_type(res, RESOURCE_AREA);)
return res;
}
- void* operator new(size_t size, const std::nothrow_t& nothrow_constant) {
+ void* operator new(size_t size, const std::nothrow_t& nothrow_constant) throw() {
address res = (address)resource_allocate_bytes(size, AllocFailStrategy::RETURN_NULL);
DEBUG_ONLY(if (res != NULL) set_allocation_type(res, RESOURCE_AREA);)
return res;
--- hotspot/src/share/vm/memory/cardTableModRefBS.cpp
+++ hotspot/src/share/vm/memory/cardTableModRefBS.cpp
@@ -389,7 +389,7 @@
}
// Touch the last card of the covered region to show that it
// is committed (or SEGV).
- debug_only(*byte_for(_covered[ind].last());)
+ debug_only((void) (*byte_for(_covered[ind].last()));)
debug_only(verify_guard();)
}
--- hotspot/src/share/vm/memory/memRegion.hpp
+++ hotspot/src/share/vm/memory/memRegion.hpp
@@ -99,13 +99,13 @@
class MemRegionClosureRO: public MemRegionClosure {
public:
- void* operator new(size_t size, ResourceObj::allocation_type type) {
+ void* operator new(size_t size, ResourceObj::allocation_type type) throw() {
return ResourceObj::operator new(size, type);
}
- void* operator new(size_t size, Arena *arena) {
+ void* operator new(size_t size, Arena *arena) throw() {
return ResourceObj::operator new(size, arena);
}
- void* operator new(size_t size) {
+ void* operator new(size_t size) throw() {
return ResourceObj::operator new(size);
}
--- hotspot/src/share/vm/memory/universe.cpp
+++ hotspot/src/share/vm/memory/universe.cpp
@@ -657,7 +657,9 @@
if (vt) vt->initialize_vtable(false, CHECK);
if (ko->oop_is_instance()) {
instanceKlass* ik = (instanceKlass*)ko;
- for (KlassHandle s_h(THREAD, ik->subklass()); s_h() != NULL; s_h = (THREAD, s_h()->klass_part()->next_sibling())) {
+ for (KlassHandle s_h(THREAD, ik->subklass());
+ s_h() != NULL;
+ s_h = KlassHandle(THREAD, s_h()->klass_part()->next_sibling())) {
reinitialize_vtable_of(s_h, CHECK);
}
}
--- hotspot/src/share/vm/oops/klass.cpp
+++ hotspot/src/share/vm/oops/klass.cpp
@@ -181,7 +181,7 @@
}
void* Klass_vtbl::operator new(size_t ignored, KlassHandle& klass,
- int size, TRAPS) {
+ int size, TRAPS) throw() {
// The vtable pointer is installed during the execution of
// constructors in the call to permanent_obj_allocate(). Delay
// the installation of the klass pointer into the new klass "k"
--- hotspot/src/share/vm/oops/klass.hpp
+++ hotspot/src/share/vm/oops/klass.hpp
@@ -167,7 +167,7 @@
bool null_vtbl() { return *(intptr_t*)this == 0; }
protected:
- void* operator new(size_t ignored, KlassHandle& klass, int size, TRAPS);
+ void* operator new(size_t ignored, KlassHandle& klass, int size, TRAPS) throw();
};
--- hotspot/src/share/vm/oops/symbol.cpp
+++ hotspot/src/share/vm/oops/symbol.cpp
@@ -36,7 +36,7 @@
}
}
-void* Symbol::operator new(size_t size, int len) {
+void* Symbol::operator new(size_t size, int len) throw() {
return (void *) AllocateHeap(object_size(len) * HeapWordSize, "symbol");
}
--- hotspot/src/share/vm/oops/symbol.hpp
+++ hotspot/src/share/vm/oops/symbol.hpp
@@ -121,7 +121,7 @@
}
Symbol(const u1* name, int length);
- void* operator new(size_t size, int len);
+ void* operator new(size_t size, int len) throw();
public:
// Low-level access (used with care, since not GC-safe)
--- hotspot/src/share/vm/opto/callGenerator.hpp
+++ hotspot/src/share/vm/opto/callGenerator.hpp
@@ -240,7 +240,7 @@
// Because WarmInfo objects live over the entire lifetime of the
// Compile object, they are allocated into the comp_arena, which
// does not get resource marked or reset during the compile process
- void *operator new( size_t x, Compile* C ) { return C->comp_arena()->Amalloc(x); }
+ void *operator new( size_t x, Compile* C ) throw() { return C->comp_arena()->Amalloc(x); }
void operator delete( void * ) { } // fast deallocation
static WarmCallInfo* always_hot();
--- hotspot/src/share/vm/opto/callnode.hpp
+++ hotspot/src/share/vm/opto/callnode.hpp
@@ -215,7 +215,7 @@
// Because JVMState objects live over the entire lifetime of the
// Compile object, they are allocated into the comp_arena, which
// does not get resource marked or reset during the compile process
- void *operator new( size_t x, Compile* C ) { return C->comp_arena()->Amalloc(x); }
+ void *operator new( size_t x, Compile* C ) throw() { return C->comp_arena()->Amalloc(x); }
void operator delete( void * ) { } // fast deallocation
// Create a new JVMState, ready for abstract interpretation.
--- hotspot/src/share/vm/opto/machnode.hpp
+++ hotspot/src/share/vm/opto/machnode.hpp
@@ -58,7 +58,7 @@
class MachOper : public ResourceObj {
public:
// Allocate right next to the MachNodes in the same arena
- void *operator new( size_t x, Compile* C ) { return C->node_arena()->Amalloc_D(x); }
+ void *operator new( size_t x, Compile* C ) throw() { return C->node_arena()->Amalloc_D(x); }
// Opcode
virtual uint opcode() const = 0;
--- hotspot/src/share/vm/opto/memnode.cpp
+++ hotspot/src/share/vm/opto/memnode.cpp
@@ -1933,6 +1933,11 @@
if (t != NULL) {
// constant oop => constant klass
if (offset == java_lang_Class::array_klass_offset_in_bytes()) {
+ if (t->is_void()) {
+ // We cannot create a void array. Since void is a primitive type return null
+ // klass. Users of this result need to do a null check on the returned klass.
+ return TypePtr::NULL_PTR;
+ }
return TypeKlassPtr::make(ciArrayKlass::make(t));
}
if (!t->is_klass()) {
@@ -4164,7 +4169,7 @@
}
}
#else // !ASSERT
-#define verify_memory_slice(m,i,n) (0) // PRODUCT version is no-op
+#define verify_memory_slice(m,i,n) (void)(0) // PRODUCT version is no-op
#endif
--- hotspot/src/share/vm/opto/node.cpp
+++ hotspot/src/share/vm/opto/node.cpp
@@ -284,6 +284,10 @@
#ifdef _MSC_VER // the IDX_INIT hack falls foul of warning C4355
#pragma warning( disable:4355 ) // 'this' : used in base member initializer list
#endif
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma GCC diagnostic ignored "-Wuninitialized"
+#endif
// Out-of-line code from node constructors.
// Executed only when extra debug info. is being passed around.
@@ -459,6 +463,10 @@
_in[6] = n6; if (n6 != NULL) n6->add_out((Node *)this);
}
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
//------------------------------clone------------------------------------------
// Clone a Node.
--- hotspot/src/share/vm/opto/node.hpp
+++ hotspot/src/share/vm/opto/node.hpp
@@ -207,7 +207,7 @@
// New Operator that takes a Compile pointer, this will eventually
// be the "new" New operator.
- inline void* operator new( size_t x, Compile* C) {
+ inline void* operator new( size_t x, Compile* C) throw() {
Node* n = (Node*)C->node_arena()->Amalloc_D(x);
#ifdef ASSERT
n->_in = (Node**)n; // magic cookie for assertion check
@@ -218,7 +218,7 @@
// New Operator that takes a Compile pointer, this will eventually
// be the "new" New operator.
- inline void* operator new( size_t x, Compile* C, int y) {
+ inline void* operator new( size_t x, Compile* C, int y) throw() {
Node* n = (Node*)C->node_arena()->Amalloc_D(x + y*sizeof(void*));
n->_in = (Node**)(((char*)n) + x);
#ifdef ASSERT
--- hotspot/src/share/vm/opto/parse3.cpp
+++ hotspot/src/share/vm/opto/parse3.cpp
@@ -487,7 +487,8 @@
fun, NULL, TypeRawPtr::BOTTOM,
makecon(TypeKlassPtr::make(array_klass)),
length[0], length[1], length[2],
- length[3], length[4]);
+ (ndimensions > 2) ? length[3] : NULL,
+ (ndimensions > 3) ? length[4] : NULL);
} else {
// Create a java array for dimension sizes
Node* dims = NULL;
--- hotspot/src/share/vm/opto/type.hpp
+++ hotspot/src/share/vm/opto/type.hpp
@@ -144,7 +144,7 @@
public:
- inline void* operator new( size_t x ) {
+ inline void* operator new( size_t x ) throw() {
Compile* compile = Compile::current();
compile->set_type_last_size(x);
void *temp = compile->type_arena()->Amalloc_D(x);
--- hotspot/src/share/vm/prims/forte.cpp
+++ hotspot/src/share/vm/prims/forte.cpp
@@ -635,7 +635,7 @@
void* null_argument_3);
#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 )
+ ( collector_func_load ? collector_func_load(x0,x1,x2,x3,x4,x5,x6),(void)0 : (void)0 )
#endif // __APPLE__
#endif // !_WINDOWS
--- hotspot/src/share/vm/runtime/arguments.cpp
+++ hotspot/src/share/vm/runtime/arguments.cpp
@@ -2499,7 +2499,9 @@
FLAG_SET_CMDLINE(uintx, MaxNewSize, NewSize);
}
+#ifndef _ALLBSD_SOURCE // UseLargePages is not yet supported on BSD.
FLAG_SET_DEFAULT(UseLargePages, true);
+#endif
// Increase some data structure sizes for efficiency
FLAG_SET_CMDLINE(uintx, BaseFootPrintEstimate, MaxHeapSize);
@@ -3046,6 +3048,10 @@
UNSUPPORTED_OPTION(UseG1GC, "G1 GC");
#endif
+#ifdef _ALLBSD_SOURCE // UseLargePages is not yet supported on BSD.
+ UNSUPPORTED_OPTION(UseLargePages, "-XX:+UseLargePages");
+#endif
+
#ifndef PRODUCT
if (TraceBytecodesAt != 0) {
TraceBytecodes = true;
--- hotspot/src/share/vm/runtime/fprofiler.cpp
+++ hotspot/src/share/vm/runtime/fprofiler.cpp
@@ -264,7 +264,7 @@
public:
- void* operator new(size_t size, ThreadProfiler* tp);
+ void* operator new(size_t size, ThreadProfiler* tp) throw();
void operator delete(void* p);
ProfilerNode() {
@@ -371,7 +371,7 @@
}
};
-void* ProfilerNode::operator new(size_t size, ThreadProfiler* tp){
+void* ProfilerNode::operator new(size_t size, ThreadProfiler* tp) throw() {
void* result = (void*) tp->area_top;
tp->area_top += size;
--- hotspot/src/share/vm/runtime/globals.hpp
+++ hotspot/src/share/vm/runtime/globals.hpp
@@ -1125,7 +1125,7 @@
product(intx, hashCode, 0, \
"(Unstable) select hashCode generation algorithm" ) \
\
- product(intx, WorkAroundNPTLTimedWaitHang, 1, \
+ product(intx, WorkAroundNPTLTimedWaitHang, 0, \
"(Unstable, Linux-specific)" \
" avoid NPTL-FUTEX hang pthread_cond_timedwait" ) \
\
--- hotspot/src/share/vm/runtime/interfaceSupport.hpp
+++ hotspot/src/share/vm/runtime/interfaceSupport.hpp
@@ -67,7 +67,7 @@
}
private:
- inline void* operator new(size_t size, void* ptr) {
+ inline void* operator new(size_t size, void* ptr) throw() {
return ptr;
}
};
--- hotspot/src/share/vm/runtime/park.cpp
+++ hotspot/src/share/vm/runtime/park.cpp
@@ -140,7 +140,7 @@
// well as bank access imbalance on Niagara-like platforms,
// although Niagara's hash function should help.
-void * ParkEvent::operator new (size_t sz) {
+void * ParkEvent::operator new (size_t sz) throw() {
return (void *) ((intptr_t (CHeapObj::operator new (sz + 256)) + 256) & -256) ;
}
--- hotspot/src/share/vm/runtime/park.hpp
+++ hotspot/src/share/vm/runtime/park.hpp
@@ -166,7 +166,7 @@
// aligned on 256-byte address boundaries. This ensures that the least
// significant byte of a ParkEvent address is always 0.
- void * operator new (size_t sz) ;
+ void * operator new (size_t sz) throw() ;
void operator delete (void * a) ;
public:
--- hotspot/src/share/vm/runtime/sharedRuntime.cpp
+++ hotspot/src/share/vm/runtime/sharedRuntime.cpp
@@ -2778,7 +2778,7 @@
// ResourceObject, so do not put any ResourceMarks in here.
char *s = sig->as_C_string();
int len = (int)strlen(s);
- *s++; len--; // Skip opening paren
+ s++; len--; // Skip opening paren
char *t = s+len;
while( *(--t) != ')' ) ; // Find close paren
--- hotspot/src/share/vm/runtime/thread.cpp
+++ hotspot/src/share/vm/runtime/thread.cpp
@@ -170,7 +170,7 @@
// ======= Thread ========
// Support for forcing alignment of thread objects for biased locking
-void* Thread::operator new(size_t size) {
+void* Thread::operator new(size_t size) throw() {
if (UseBiasedLocking) {
const int alignment = markOopDesc::biased_lock_alignment;
size_t aligned_size = size + (alignment - sizeof(intptr_t));
--- hotspot/src/share/vm/runtime/thread.hpp
+++ hotspot/src/share/vm/runtime/thread.hpp
@@ -104,7 +104,7 @@
// Support for forcing alignment of thread objects for biased locking
void* _real_malloc_address;
public:
- void* operator new(size_t size);
+ void* operator new(size_t size) throw();
void operator delete(void* p);
private:
--- hotspot/src/share/vm/services/diagnosticArgument.cpp
+++ hotspot/src/share/vm/services/diagnosticArgument.cpp
@@ -191,7 +191,7 @@
} else {
_value._time = 0;
_value._nanotime = 0;
- strcmp(_value._unit, "ns");
+ strcpy(_value._unit, "ns");
}
}
--- hotspot/src/share/vm/utilities/exceptions.hpp
+++ hotspot/src/share/vm/utilities/exceptions.hpp
@@ -182,15 +182,15 @@
#define HAS_PENDING_EXCEPTION (((ThreadShadow*)THREAD)->has_pending_exception())
#define CLEAR_PENDING_EXCEPTION (((ThreadShadow*)THREAD)->clear_pending_exception())
-#define CHECK THREAD); if (HAS_PENDING_EXCEPTION) return ; (0
-#define CHECK_(result) THREAD); if (HAS_PENDING_EXCEPTION) return result; (0
+#define CHECK THREAD); if (HAS_PENDING_EXCEPTION) return ; (void)(0
+#define CHECK_(result) THREAD); if (HAS_PENDING_EXCEPTION) return result; (void)(0
#define CHECK_0 CHECK_(0)
#define CHECK_NH CHECK_(Handle())
#define CHECK_NULL CHECK_(NULL)
#define CHECK_false CHECK_(false)
-#define CHECK_AND_CLEAR THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return; } (0
-#define CHECK_AND_CLEAR_(result) THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return result; } (0
+#define CHECK_AND_CLEAR THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return; } (void)(0
+#define CHECK_AND_CLEAR_(result) THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return result; } (void)(0
#define CHECK_AND_CLEAR_0 CHECK_AND_CLEAR_(0)
#define CHECK_AND_CLEAR_NH CHECK_AND_CLEAR_(Handle())
#define CHECK_AND_CLEAR_NULL CHECK_AND_CLEAR_(NULL)
@@ -263,7 +263,7 @@
CLEAR_PENDING_EXCEPTION; \
ex->print(); \
ShouldNotReachHere(); \
- } (0
+ } (void)(0
// ExceptionMark is a stack-allocated helper class for local exception handling.
// It is used with the EXCEPTION_MARK macro.
--- hotspot/src/share/vm/utilities/globalDefinitions.hpp
+++ hotspot/src/share/vm/utilities/globalDefinitions.hpp
@@ -421,7 +421,7 @@
// Utility macros for compilers
// used to silence compiler warnings
-#define Unused_Variable(var) var
+#define Unused_Variable(var) (void)(var)
//----------------------------------------------------------------------------------------------------
--- hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp
+++ hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp
@@ -260,7 +260,7 @@
#endif
// GCC 4.3 does not allow 0.0/0.0 to produce a NAN value
-#if (__GNUC__ == 4) && (__GNUC_MINOR__ > 2)
+#if defined(__clang__) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 2))
#define CAN_USE_NAN_DEFINE 1
#endif
--- hotspot/src/share/vm/utilities/macros.hpp
+++ hotspot/src/share/vm/utilities/macros.hpp
@@ -177,6 +177,14 @@
#define NOT_WIN64(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/taskqueue.hpp
+++ hotspot/src/share/vm/utilities/taskqueue.hpp
@@ -334,8 +334,12 @@ bool GenericTaskQueue<E, N>::push_slow(E
if (dirty_n_elems == N - 1) {
// Actually means 0, so do the push.
uint localBot = _bottom;
- // g++ complains if the volatile result of the assignment is unused.
- const_cast<E&>(_elems[localBot] = t);
+ // g++ complains if the volatile result of the assignment is
+ // unused, so we cast the volatile away. We cannot cast directly
+ // to void, because gcc treats that as not using the result of the
+ // assignment. However, casting to E& means that we trigger an
+ // unused-value warning. So, we cast the E& to void.
+ (void)const_cast<E&>(_elems[localBot] = t);
OrderAccess::release_store(&_bottom, increment_index(localBot));
TASKQUEUE_STATS_ONLY(stats.record_push());
return true;
@@ -385,13 +389,24 @@ bool GenericTaskQueue<E, N>::pop_local_s
template<class E, unsigned int N>
bool GenericTaskQueue<E, N>::pop_global(E& t) {
Age oldAge = _age.get();
- uint localBot = _bottom;
+ // Architectures with weak memory model require a barrier here
+ // to guarantee that bottom is not older than age,
+ // which is crucial for the correctness of the algorithm.
+#if !(defined SPARC || defined IA32 || defined AMD64)
+ OrderAccess::fence();
+#endif
+ uint localBot = OrderAccess::load_acquire((volatile juint*)&_bottom);
uint n_elems = size(localBot, oldAge.top());
if (n_elems == 0) {
return false;
}
- const_cast<E&>(t = _elems[oldAge.top()]);
+ // g++ complains if the volatile result of the assignment is
+ // unused, so we cast the volatile away. We cannot cast directly
+ // to void, because gcc treats that as not using the result of the
+ // assignment. However, casting to E& means that we trigger an
+ // unused-value warning. So, we cast the E& to void.
+ (void) const_cast<E&>(t = _elems[oldAge.top()]);
Age newAge(oldAge);
newAge.increment();
Age resAge = _age.cmpxchg(newAge, oldAge);
@@ -668,13 +683,17 @@ public:
template<class E, unsigned int N> inline bool
GenericTaskQueue<E, N>::push(E t) {
uint localBot = _bottom;
- assert((localBot >= 0) && (localBot < N), "_bottom out of range.");
+ assert(localBot < N, "_bottom out of range.");
idx_t top = _age.top();
uint dirty_n_elems = dirty_size(localBot, top);
assert(dirty_n_elems < N, "n_elems out of range.");
if (dirty_n_elems < max_elems()) {
- // g++ complains if the volatile result of the assignment is unused.
- const_cast<E&>(_elems[localBot] = t);
+ // g++ complains if the volatile result of the assignment is
+ // unused, so we cast the volatile away. We cannot cast directly
+ // to void, because gcc treats that as not using the result of the
+ // assignment. However, casting to E& means that we trigger an
+ // unused-value warning. So, we cast the E& to void.
+ (void) const_cast<E&>(_elems[localBot] = t);
OrderAccess::release_store(&_bottom, increment_index(localBot));
TASKQUEUE_STATS_ONLY(stats.record_push());
return true;
@@ -698,7 +717,12 @@ GenericTaskQueue<E, N>::pop_local(E& t)
// This is necessary to prevent any read below from being reordered
// before the store just above.
OrderAccess::fence();
- const_cast<E&>(t = _elems[localBot]);
+ // g++ complains if the volatile result of the assignment is
+ // unused, so we cast the volatile away. We cannot cast directly
+ // to void, because gcc treats that as not using the result of the
+ // assignment. However, casting to E& means that we trigger an
+ // unused-value warning. So, we cast the E& to void.
+ (void) const_cast<E&>(t = _elems[localBot]);
// This is a second read of "age"; the "size()" above is the first.
// If there's still at least one element in the queue, based on the
// "_bottom" and "age" we've read, then there can be no interference with
--- hotspot/src/share/vm/utilities/vmError.cpp
+++ hotspot/src/share/vm/utilities/vmError.cpp
@@ -1043,7 +1043,7 @@
const char* ptr = OnOutOfMemoryError;
while ((cmd = next_OnError_command(buffer, sizeof(buffer), &ptr)) != NULL){
tty->print("# Executing ");
-#if defined(LINUX)
+#if defined(LINUX) || defined(_ALLBSD_SOURCE)
tty->print ("/bin/sh -c ");
#elif defined(SOLARIS)
tty->print ("/usr/bin/sh -c ");
--- jdk/make/com/sun/java/pack/Makefile
+++ jdk/make/com/sun/java/pack/Makefile
@@ -61,6 +61,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-1.1.3
OTHER_CXXFLAGS += $(ZINCLUDE)
LDDFLAGS += $(ZIPOBJS)
+ else
+ LDDFLAGS += %%ZLIB_LDFLAGS%%
+ OTHER_CXXFLAGS += -DSYSTEM_ZLIB
+ endif
else
OTHER_CXXFLAGS += -DNO_ZLIB -DUNPACK_JNI
OTHER_LDLIBS += $(JVMLIB)
@@ -102,7 +107,11 @@
COMPILER_WARNINGS_FATAL=false
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/jmx/Makefile
+++ jdk/make/com/sun/jmx/Makefile
@@ -102,16 +102,7 @@
# when available, we need to run with latest rmic version available. rmic
# launch tool not built at this stage but we can invoke via rmi class.
-RMIC_JAVA = $(OUTPUTDIR)/bin/java
-# need to treat 64bit solaris differently
-ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64)
-RMIC_JAVA = $(OUTPUTDIR)/bin/amd64/java
-endif
-ifeq ($(PLATFORM)-$(LIBARCH), solaris-sparcv9)
-RMIC_JAVA = $(OUTPUTDIR)/bin/sparcv9/java
-endif
-
-RMIC = $(RMIC_JAVA) $(JAVA_TOOLS_FLAGS) -cp $(OUTPUTDIR)/classes sun.rmi.rmic.Main
+RMIC = $(BOOT_JAVA_CMD) -cp $(OUTPUTDIR)/classes sun.rmi.rmic.Main
$(CLASSDESTDIR)/%_Stub.class: $(CLASSDESTDIR)/%.class
$(prep-target)
--- jdk/make/com/sun/security/auth/module/Makefile
+++ jdk/make/com/sun/security/auth/module/Makefile
@@ -70,7 +70,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
+++ jdk/make/com/sun/tools/attach/Exportedfiles.gmk
@@ -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
+++ jdk/make/com/sun/tools/attach/FILES_c.gmk
@@ -39,4 +39,7 @@
LinuxVirtualMachine.c
endif
-
+ifeq ($(PLATFORM),bsd)
+FILES_c = \
+ BsdVirtualMachine.c
+endif
--- jdk/make/com/sun/tools/attach/FILES_java.gmk
+++ jdk/make/com/sun/tools/attach/FILES_java.gmk
@@ -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
+++ jdk/make/com/sun/tools/attach/Makefile
@@ -36,6 +36,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
+++ jdk/make/com/sun/tools/attach/mapfile-bsd
@@ -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
+++ jdk/make/common/Defs-bsd.gmk
@@ -43,12 +43,6 @@
# Get shared JDK settings
include $(JDK_MAKE_SHARED_DIR)/Defs.gmk
-# Part of INCREMENTAL_BUILD mechanism.
-# Compiler emits things like: path/file.o: file.h
-# We want something like: relative_path/file.o relative_path/file.d: file.h
-CC_DEPEND = -MM
-CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g'
-
ifndef PLATFORM_SRC
PLATFORM_SRC = $(BUILDDIR)/../src/solaris
endif # PLATFORM_SRC
@@ -61,7 +55,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.
@@ -104,6 +98,10 @@
# as the default.
CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
+ifeq ($(OS_VENDOR),Apple)
+ # 16-byte stack re-alignment on 32-bit Darwin
+ CFLAGS_REQUIRED_i586 += -mstackrealign
+endif
CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9
LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9
@@ -201,7 +199,7 @@
CPP_ARCH_FLAGS += -D_$(ARCH)_
endif
-CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DLINUX $(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)
@@ -211,33 +209,15 @@
CPPFLAGS_OPT =
CPPFLAGS_DBG = -DDEBUG
-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.
- #
- 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
@@ -259,9 +239,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
@@ -271,13 +251,9 @@
#
LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker
-#
-# Support for Quantify.
-#
-ifdef QUANTIFY
-QUANTIFY_CMD = quantify
-QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes
-LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS)
+# Darwin does not support linker map files.
+ifeq ($(OS_VENDOR), Apple)
+LDNOMAP=true
endif
#
@@ -306,24 +282,22 @@
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
else
-override LIBCXX = -lstdc++
+override LIBCXX = %%CXX_LDFLAGS%%
endif
override LIBPOSIX4 =
override LIBSOCKET =
override LIBTHREAD =
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 NO_INTERRUPTIBLE_IO = false
+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
@@ -344,6 +318,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
#
--- jdk/make/common/Defs.gmk
+++ jdk/make/common/Defs.gmk
@@ -117,6 +117,24 @@
_OUTPUTDIR=$(JDK_TOPDIR)/build/$(PLATFORM)-$(ARCH)
endif
+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
+ PACKAGE_PATH = /usr/local
+ endif
+ endif
+endif
+
#
# Get platform definitions
#
@@ -152,6 +170,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
@@ -216,6 +235,10 @@
LDLIBS_COMMON = -ldl
endif
+ ifeq ($(PLATFORM), bsd)
+ LDLIBS_COMMON = -pthread
+ endif
+
endif # PROGRAM
LDLIBS_COMMON += $(EXTRA_LIBS)
--- jdk/make/common/Program.gmk
+++ jdk/make/common/Program.gmk
@@ -67,11 +67,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 += %%ZLIB_LDFLAGS%%
+ endif
+endif
ifneq (,$(findstring $(PLATFORM), linux solaris)) # UNIX systems
LDFLAGS += -L $(LIBDIR)/$(LIBARCH)/jli
OTHER_LDLIBS += -ljli
@@ -166,6 +182,10 @@
THREADLIBS = $(LIBTHREAD)
endif # USE_PTHREADS
+ifeq ($(PLATFORM), bsd)
+THREADLIBS = -pthread
+endif
+
#
# This rule only applies on unix. It supports quantify and its ilk.
#
@@ -221,15 +241,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
+++ jdk/make/common/Release.gmk
@@ -145,14 +145,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 \
@@ -191,6 +190,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 \
@@ -313,6 +317,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.
@@ -629,6 +639,8 @@
$(BOOT_JAVA_CMD) -jar $(JARSPLIT_JARFILE) \
$(TOTAL_JAR_FILELIST) \
-o $(RT_JAR_FILELIST) $(RES_JAR_FILELIST)
+ $(EGREP) -v hotspot.log $(RES_JAR_FILELIST) > $(RES_JAR_FILELIST).temp
+ $(MV) $(RES_JAR_FILELIST).temp $(RES_JAR_FILELIST)
@$(java-vm-cleanup)
# Create the manifest file.
@@ -974,7 +986,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 && \
@@ -987,7 +999,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/shared/Compiler-gcc.gmk
+++ jdk/make/common/shared/Compiler-gcc.gmk
@@ -99,6 +99,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/Compiler.gmk
+++ jdk/make/common/shared/Compiler.gmk
@@ -37,8 +37,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/Defs-bsd.gmk
+++ jdk/make/common/shared/Defs-bsd.gmk
@@ -70,7 +70,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.
@@ -123,7 +123,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.
@@ -162,16 +162,12 @@
endif
MOTIF_INCLUDE = $(MOTIF_DIR)/include
-# 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
+++ jdk/make/common/shared/Defs-utils.gmk
@@ -80,6 +80,13 @@
endif
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
@@ -201,3 +208,32 @@
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
+ ifneq ($(OS_VENDOR), OpenBSD)
+ CPIO = $(UTILS_USR_BIN_PATH)cpio
+ TAR = $(UTILS_USR_BIN_PATH)tar
+ endif
+endif
--- jdk/make/common/shared/Defs.gmk
+++ jdk/make/common/shared/Defs.gmk
@@ -143,7 +143,7 @@
echo older; \
else \
if [ $(call MajorVersion,$1) -eq $(call MajorVersion,$2) -a \
- $(call MinorVersion,$1) -lt $(call MinorVersion,$2) ]; then \
+ `echo $(call MinorVersion,$1) | sed -e 's/\([0-9]*\)\(.*\)/\1/'` -lt $(call MinorVersion,$2) ]; then \
echo older; \
else \
echo newer; \
--- jdk/make/common/shared/Platform.gmk
+++ jdk/make/common/shared/Platform.gmk
@@ -264,6 +264,76 @@
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 \
+ ;; \
+ *) \
+ echo $(mach) \
+ ;; \
+ esac
+ ARCH := $(shell $(archExpr) )
+ ARCH_FAMILY := $(ARCH)
+
+ # i586 and sparc are 32 bit, amd64 and sparc64 are 64
+ ifneq (,$(findstring $(ARCH), i586 sparc))
+ 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:
+ MB_OF_MEMORY=$(shell sysctl -n hw.physmem | awk '{print int($$NF / 1048576); }' )
+endif
+
# Windows with and without CYGWIN will be slightly different
ifeq ($(SYSTEM_UNAME), Windows_NT)
PLATFORM = windows
@@ -413,6 +483,13 @@
# system swapping during the build.
# If we don't know, assume 512. Subtract 128 from MB for VM MAX.
# Don't set VM max over 1024-128=896.
+# 736 is the max for OpenBSD.
+ifeq ($(OS_VENDOR), OpenBSD)
+ ABS_MAX_MEMORY := "736"
+else
+ ABS_MAX_MEMORY := "896"
+endif
+
ifneq ($(MB_OF_MEMORY),)
LOW_MEMORY_MACHINE := $(shell \
if [ $(MB_OF_MEMORY) -le 512 ] ; then \
@@ -424,7 +501,7 @@
if [ $(MB_OF_MEMORY) -le 1024 ] ; then \
expr $(MB_OF_MEMORY) '-' 128 ; \
else \
- echo "896"; \
+ echo $(ABS_MAX_MEMORY); \
fi)
MIN_VM_MEMORY := $(shell \
if [ $(MAX_VM_MEMORY) -le 128 ] ; then \
@@ -476,6 +553,15 @@
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
+
+
# 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
+++ jdk/make/common/shared/Sanity-Settings.gmk
@@ -242,6 +242,7 @@
ALL_SETTINGS+=$(call addAltSetting,FREETYPE_HEADERS_PATH)
ALL_SETTINGS+=$(call addAltSetting,FREETYPE_LIB_PATH)
endif
+ALL_SETTINGS+=$(call addAltSetting,X11_PATH)
ALL_SETTINGS+=$(call addOptionalSetting,PLUG_LIBRARY_NAMES)
ifdef OPENJDK
--- jdk/make/common/shared/Sanity.gmk
+++ jdk/make/common/shared/Sanity.gmk
@@ -90,6 +90,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')
--- jdk/make/java/Makefile
+++ jdk/make/java/Makefile
@@ -49,7 +49,7 @@
endif
endif # PLATFORM
-ifeq ($(PLATFORM), linux)
+ifneq (,$(findstring $(PLATFORM), linux bsd))
SUBDIRS += jexec
endif # PLATFORM
--- jdk/make/java/hpi/hpi_common.gmk
+++ jdk/make/java/hpi/hpi_common.gmk
@@ -86,5 +86,9 @@
# Things that must be linked in.
#
ifneq ($(PLATFORM), windows)
+ifeq ($(PLATFORM), bsd)
+OTHER_LDLIBS += $(LIBM)
+else
OTHER_LDLIBS += $(LIBSOCKET) -lnsl $(LIBM) -ldl
endif
+endif
--- jdk/make/java/hpi/native/Makefile
+++ jdk/make/java/hpi/native/Makefile
@@ -72,11 +72,18 @@
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
--- jdk/make/java/instrument/Makefile
+++ jdk/make/java/instrument/Makefile
@@ -102,6 +102,19 @@
# 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
+ else
+ LDFLAGS += -Wl,--whole-archive
+ LDFLAGS += $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static/libjli.a
+ LDFLAGS += -Wl,--no-whole-archive
+ endif
+# Use CPPFLAGS instead of OTHER_INCLUDES to force this last
+ CPPFLAGS += %%ICONV_CPPFLAGS%%
+ OTHER_LDLIBS += %%ICONV_LDFLAGS%%
+else
LDFLAGS += -L $(LIBDIR)/$(LIBARCH)/jli
OTHER_LDLIBS += -ljli
OTHER_LDLIBS += -ldl
@@ -114,6 +127,7 @@
LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/jli
endif
endif
+endif
#
# Library to compile.
--- jdk/make/java/java/Makefile
+++ jdk/make/java/java/Makefile
@@ -167,8 +167,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
@@ -205,9 +207,14 @@
OTHER_LDLIBS += $(JVMLIB) -libpath:$(OBJDIR)/../../../fdlibm/$(OBJDIRNAME) fdlibm.lib \
-libpath:$(OBJDIR)/../../../verify/$(OBJDIRNAME) verify.lib
else
+ifeq ($(PLATFORM), bsd)
+OTHER_LDLIBS += $(JVMLIB) -lverify \
+ -L$(OBJDIR)/../../../fdlibm/$(OBJDIRNAME) -lfdlibm.$(ARCH)
+else
OTHER_LDLIBS += $(JVMLIB) -lverify $(LIBSOCKET) -lnsl -ldl \
-L$(OBJDIR)/../../../fdlibm/$(OBJDIRNAME) -lfdlibm.$(ARCH)
endif
+endif
#
# Rules.
--- jdk/make/java/java/genlocales.gmk
+++ jdk/make/java/java/genlocales.gmk
@@ -76,11 +76,16 @@
$(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;
- NAWK="$(NAWK)" SED="$(SED)" $(SH) $(LOCALEGEN_SH) $(RESOURCE_NAMES) $@.tmp.euro \
+ @$(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 $< $@
@$(RM) $@.tmp.euro $@.tmp.noneuro;
--- jdk/make/java/java/localegen.sh
+++ jdk/make/java/java/localegen.sh
@@ -29,7 +29,7 @@
# This script is to generate the supported locale list string and replace the
# LocaleDataMetaInfo-XLocales.java in <ws>/src/share/classes/sun/util
#
-# NAWK & SED is passed in as environment variables.
+# SORT, NAWK & SED is passed in as environment variables.
#
# A list of resource base name list;
@@ -47,7 +47,7 @@
localelist=
getlocalelist() {
localelist=""
- localelist=`$NAWK -F$1_ '{print $2}' $2 | sort`
+ localelist=`$NAWK -F$1_ '{print $2}' $2 | $SORT`
}
sed_script="$SED -e \"s@^#warn .*@// -- This file was mechanically generated: Do not edit! -- //@\" "
@@ -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
+++ jdk/make/java/java_hprof_demo/Makefile
@@ -83,8 +83,10 @@
ifeq ($(PLATFORM), windows)
OTHER_LDLIBS += wsock32.lib winmm.lib
else
+ifneq ($(PLATFORM), bsd)
OTHER_LDLIBS += $(LIBSOCKET) -lnsl -ldl
endif
+endif
#
# Tell library.gmk to copy the txt file first
--- jdk/make/java/jli/Makefile
+++ jdk/make/java/jli/Makefile
@@ -44,8 +44,10 @@
include $(BUILDDIR)/common/Defs.gmk
+ifneq ($(SYSTEM_ZLIB),true)
ZLIB_VERSION = 1.1.3
ZIP_SRC = $(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION)
+endif
LAUNCHER_SHARE_SRC = $(SHARE_SRC)/bin
LAUNCHER_PLATFORM_SRC = $(PLATFORM_SRC)/bin
@@ -56,7 +58,10 @@
parse_manifest.c \
version_comp.c \
wildcard.c \
- jli_util.c \
+ jli_util.c
+
+ifneq ($(SYSTEM_ZLIB),true)
+FILES_c += \
inflate.c \
infblock.c \
inftrees.c \
@@ -65,6 +70,7 @@
infutil.c \
zadler32.c \
zutil.c
+endif
OTHER_CPPFLAGS += -DEXPAND_CLASSPATH_WILDCARDS
@@ -98,7 +104,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 += %%ZLIB_LDFLAGS%%
+endif
#
# Library to compile.
@@ -136,8 +146,29 @@
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)
+vpath %.c $(LAUNCHER_SHARE_SRC)
+ifneq ($(SYSTEM_ZLIB),true)
+ vpath %.c $(ZIP_SRC)
+endif
+
--- jdk/make/java/management/Makefile
+++ jdk/make/java/management/Makefile
@@ -85,6 +85,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
+++ jdk/make/java/net/FILES_c.gmk
@@ -43,6 +43,10 @@
FILES_c += linux_close.c
endif
+ifeq ($(OS_VENDOR), FreeBSD)
+ FILES_c += bsd_close.c
+endif
+
ifeq ($(PLATFORM), windows)
FILES_c += TwoStacksPlainSocketImpl.c
FILES_c += DualStackPlainSocketImpl.c
--- jdk/make/java/net/Makefile
+++ jdk/make/java/net/Makefile
@@ -92,6 +92,12 @@
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)
# Will not compile at warning level 3 if warnings are fatal
@@ -102,6 +108,7 @@
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
+++ jdk/make/java/nio/Makefile
@@ -104,6 +104,28 @@
sun/nio/ch/NativeThread.java
endif # PLATFORM = linux
+ifeq ($(PLATFORM), bsd)
+FILES_java += \
+ sun/nio/ch/AbstractPollSelectorImpl.java \
+ sun/nio/ch/InheritedChannel.java \
+ sun/nio/ch/KqueueArrayWrapper.java \
+ sun/nio/ch/KqueueSelectorProvider.java \
+ sun/nio/ch/KqueueSelectorImpl.java \
+ sun/nio/ch/PollSelectorProvider.java \
+ sun/nio/ch/PollSelectorImpl.java
+
+FILES_c += \
+ KqueueArrayWrapper.c \
+ PollArrayWrapper.c \
+ InheritedChannel.c \
+ NativeThread.c
+
+FILES_export += \
+ sun/nio/ch/KqueueArrayWrapper.java \
+ sun/nio/ch/InheritedChannel.java \
+ sun/nio/ch/NativeThread.java
+endif # PLATFORM = bsd
+
# Find platform-specific C source files
#
vpath %.c $(PLATFORM_SRC)/native/sun/nio/ch
@@ -126,6 +148,11 @@
-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 \
@@ -137,6 +164,9 @@
COMPILER_WARNINGS_FATAL=true
OTHER_LDLIBS += -L$(LIBDIR)/$(LIBARCH) -ljava -lnet -lpthread -ldl
endif
+ifeq ($(PLATFORM), bsd)
+OTHER_LDLIBS += -L$(LIBDIR)/$(LIBARCH) -ljava -lnet -pthread
+endif
ifeq ($(PLATFORM), solaris)
OTHER_LDLIBS += $(JVMLIB) $(LIBSOCKET) -lposix4 -ldl \
-L$(LIBDIR)/$(LIBARCH) -ljava -lnet
@@ -159,6 +189,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/npt/Makefile
+++ jdk/make/java/npt/Makefile
@@ -70,6 +70,18 @@
OTHER_LCF += -export:nptInitialize -export:nptTerminate
endif
+# Add location of iconv headers & libs
+ifeq ($(PLATFORM), bsd)
+ ifeq ($(OS_VENDOR), Apple)
+ OTHER_LDLIBS += -liconv
+ else
+ ifneq ($(OS_NAME), netbsd)
+ CPPFLAGS += %%ICONV_CPPFLAGS%%
+ OTHER_LDLIBS += %%ICONV_LDFLAGS%%
+ endif
+ endif
+endif
+
#
# Add to ambient vpath so we pick up the library files
#
--- jdk/make/java/redist/FILES.gmk
+++ jdk/make/java/redist/FILES.gmk
@@ -38,6 +38,14 @@
$(LIBDIR)/fonts/LucidaSansDemiBold.ttf \
ifeq ($(PLATFORM), linux)
+NEED_OBLIQUE_FONTS = true
+endif
+
+ifeq ($(PLATFORM), bsd)
+NEED_OBLIQUE_FONTS = true
+endif
+
+ifeq ($(NEED_OBLIQUE_FONTS), true)
# 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
--- jdk/make/java/redist/Makefile
+++ jdk/make/java/redist/Makefile
@@ -311,7 +311,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.
@@ -325,7 +325,7 @@
$(OBLFONTSDIRFILE): $(PLATFORM_SRC)/classes/sun/awt/motif/java.oblique-fonts.dir
$(install-file)
-endif # linux
+endif # linux || bsd
endif # !OPENJDK
# Import internal files (ones that are stashed in this source tree)
--- jdk/make/java/security/Makefile
+++ jdk/make/java/security/Makefile
@@ -51,7 +51,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
+++ jdk/make/java/zip/FILES_c.gmk
@@ -30,6 +30,10 @@
Inflater.c \
ZipFile.c \
ZipEntry.c \
+ zip_util.c
+
+ifneq ($(SYSTEM_ZLIB),true)
+FILES_c += \
zadler32.c \
zcrc32.c \
deflate.c \
@@ -40,5 +44,5 @@
inftrees.c \
infcodes.c \
infutil.c \
- inffast.c \
- zip_util.c
+ inffast.c
+endif
--- jdk/make/java/zip/Makefile
+++ jdk/make/java/zip/Makefile
@@ -72,16 +72,24 @@
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
+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 = %%ZLIB_LDFLAGS%%
+else
OTHER_LDLIBS = $(JVMLIB)
+endif
+
--- jdk/make/javax/crypto/Makefile
+++ jdk/make/javax/crypto/Makefile
@@ -155,7 +155,7 @@
#
ifdef OPENJDK
-all: build-jar install-jar build-policy install-limited
+all: build-jar install-jar build-policy install-%%POLICY%%
else # OPENJDK
ifeq ($(strip $(FILES_java)),)
all:
--- jdk/make/javax/sound/FILES_c.gmk
+++ jdk/make/javax/sound/FILES_c.gmk
@@ -34,6 +34,8 @@
FILES_linux =
+FILES_bsd =
+
FILES_windows = \
PLATFORM_API_WinOS_MidiIn.c \
PLATFORM_API_WinOS_MidiOut.c \
--- jdk/make/javax/sound/SoundDefs.gmk
+++ jdk/make/javax/sound/SoundDefs.gmk
@@ -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/javax/sound/jsoundalsa/Makefile
+++ jdk/make/javax/sound/jsoundalsa/Makefile
@@ -65,6 +65,15 @@
$(MIDIFILES_export) \
$(PORTFILES_export)
+ifeq ($(PLATFORM), bsd)
+OTHER_LDLIBS += -L$(PACKAGE_PATH)/lib -lasound
+
+CPPFLAGS += \
+ -DUSE_DAUDIO=TRUE \
+ -DUSE_PORTS=TRUE \
+ -I$(PACKAGE_PATH)/include \
+ -I$(SHARE_SRC)/native/com/sun/media/sound
+else
OTHER_LDLIBS += -lasound
CPPFLAGS += \
@@ -73,6 +82,7 @@
-DUSE_PLATFORM_MIDI_OUT=TRUE \
-DUSE_PLATFORM_MIDI_IN=TRUE \
-I$(SHARE_SRC)/native/com/sun/media/sound
+endif
#
# Add to the ambient VPATH.
--- jdk/make/jpda/back/Makefile
+++ jdk/make/jpda/back/Makefile
@@ -49,8 +49,10 @@
-I$(GENNATIVESRCDIR)/jdwp
ifneq ($(PLATFORM), windows)
+ifneq ($(PLATFORM), bsd)
OTHER_LDLIBS += -ldl
endif # PLATFORM
+endif # PLATFORM
#
# This turns off all assert() checking in the optimized library
--- jdk/make/sun/awt/Makefile
+++ jdk/make/sun/awt/Makefile
@@ -129,6 +129,14 @@
OTHER_LDLIBS = $(JVMLIB) $(LIBM) -ldl
endif
+ifeq ($(PLATFORM), bsd)
+FILES_c = $(FILES_2D_c)
+FILES_c += awt_LoadLibrary.c
+OTHER_CFLAGS += -DMLIB_NO_LIBSUNMATH
+OTHER_CFLAGS += -DMOTIF_VERSION=2
+OTHER_LDLIBS = $(JVMLIB) $(LIBM)
+endif
+
FILES_c += initIDs.c
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SOLARIS/LINUX
@@ -241,7 +249,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
@@ -422,6 +430,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)
@@ -515,6 +536,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 \
@@ -536,7 +560,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$(MOTIF_LIB) -L$(OPENWIN_LIB)
endif
--- jdk/make/sun/awt/mawt.gmk
+++ jdk/make/sun/awt/mawt.gmk
@@ -174,7 +174,7 @@
OTHER_LDLIBS = $(LIBXM) -lXt -lXext $(LIBXTST) $(LIBXMU) -lX11 -lXi
endif
-ifeq ($(PLATFORM), linux)
+ifneq (,$(findstring $(PLATFORM), linux bsd))
OTHER_CFLAGS += -DMLIB_NO_LIBSUNMATH
OTHER_CFLAGS += -DMOTIF_VERSION=2
OTHER_CFLAGS += -DXMSTRINGDEFINES=1
@@ -185,7 +185,11 @@
# !HEADLESS
OTHER_LDLIBS += $(JVMLIB) $(LIBCXX) \
- -lawt $(LIBM) -ldl
+ -lawt $(LIBM)
+
+ifneq ($(PLATFORM), bsd)
+OTHER_LDLIBS += -ldl
+endif
#
# Sun CC with -Xa misdefines __STDC__ to 0 (zero).
@@ -229,16 +233,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
+++ jdk/make/sun/font/Makefile
@@ -177,6 +177,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
@@ -187,6 +196,7 @@
OTHER_LDLIBS += -Wl,-Bstatic -lgcc_eh -Wl,-Bdynamic
endif
endif
+endif
endif # PLATFORM
--- jdk/make/sun/image/generic/Makefile
+++ jdk/make/sun/image/generic/Makefile
@@ -69,5 +69,9 @@
-I$(PLATFORM_SRC)/native/$(PKGDIR)/medialib
OTHER_CFLAGS += -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES
-OTHER_LDLIBS = $(LIBM) -ldl
+OTHER_LDLIBS = $(LIBM)
+ifneq ($(PLATFORM), bsd)
+OTHER_LDLIBS += -ldl
+endif
+
--- jdk/make/sun/jawt/Makefile
+++ jdk/make/sun/jawt/Makefile
@@ -98,9 +98,7 @@
#
# Other extra flags needed for compiling.
#
-CPPFLAGS += -I$(OPENWIN_HOME)/include \
- -I$(MOTIF_DIR)/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 \
@@ -114,6 +112,8 @@
-I$(SHARE_SRC)/native/$(PKGDIR)/../dc/doe \
-I$(SHARE_SRC)/native/$(PKGDIR)/../dc/path \
-I$(PLATFORM_SRC)/native/$(PKGDIR)/../jdga \
+ -I$(OPENWIN_HOME)/include \
+ -I$(MOTIF_DIR)/include \
$(EVENT_MODEL)
#
# Libraries to link in.
@@ -122,7 +122,7 @@
OTHER_LDLIBS = -L$(LIBDIR)/$(LIBARCH) -L$(OPENWIN_LIB) -L$(LIBDIR)/$(LIBARCH)/xawt -lmawt
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/security/jgss/wrapper/Makefile
+++ jdk/make/sun/security/jgss/wrapper/Makefile
@@ -71,6 +71,10 @@
#
# Libraries to link
#
-ifneq ($(PLATFORM), windows)
+ifneq (,$(findstring $(PLATFORM), linux solaris))
OTHER_LDLIBS = -ldl $(JVMLIB)
endif
+
+ifeq ($(PLATFORM), bsd)
+ OTHER_LDLIBS = $(JVMLIB)
+endif
--- jdk/make/sun/security/pkcs11/Makefile
+++ jdk/make/sun/security/pkcs11/Makefile
@@ -156,7 +156,7 @@
#
# Libraries to link
#
-ifeq ($(PLATFORM), windows)
+ifneq (,$(findstring $(PLATFORM), windows bsd))
OTHER_LDLIBS = $(JVMLIB)
else
OTHER_LDLIBS = -ldl $(JVMLIB)
--- jdk/make/sun/security/smartcardio/Makefile
+++ jdk/make/sun/security/smartcardio/Makefile
@@ -75,6 +75,10 @@
ifeq ($(PLATFORM), windows)
OTHER_LDLIBS = $(JVMLIB) winscard.lib
else
- OTHER_LDLIBS = -ldl $(JVMLIB)
+ ifeq ($(PLATFORM), bsd)
+ OTHER_LDLIBS = $(JVMLIB)
+ else
+ OTHER_LDLIBS = -ldl $(JVMLIB)
+ endif
OTHER_CFLAGS = -D__sun_jdk
endif
--- jdk/make/sun/splashscreen/FILES_c.gmk
+++ jdk/make/sun/splashscreen/FILES_c.gmk
@@ -49,20 +49,6 @@
dgif_lib.c \
gif_err.c \
gifalloc.c \
- compress.c \
- deflate.c \
- gzio.c \
- infblock.c \
- infcodes.c \
- inffast.c \
- inflate.c \
- inftrees.c \
- infutil.c \
- trees.c \
- uncompr.c \
- zadler32.c \
- zcrc32.c \
- zutil.c \
jcomapi.c \
jdapimin.c \
jdapistd.c \
@@ -108,3 +94,20 @@
jfdctfst.c \
jfdctint.c
+ifneq ($(SYSTEM_ZLIB),true)
+ FILES_c += \
+ compress.c \
+ deflate.c \
+ gzio.c \
+ infblock.c \
+ infcodes.c \
+ inffast.c \
+ inflate.c \
+ inftrees.c \
+ infutil.c \
+ trees.c \
+ uncompr.c \
+ zadler32.c \
+ zcrc32.c \
+ zutil.c
+endif
--- jdk/make/sun/splashscreen/Makefile
+++ jdk/make/sun/splashscreen/Makefile
@@ -61,10 +61,25 @@
CFLAGS += -DSPLASHSCREEN
+CPPFLAGS += -I$(PLATFORM_SRC)/native/$(PKGDIR)/splashscreen -I$(SHARE_SRC)/native/$(PKGDIR)/splashscreen
+CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/image/jpeg
+ifneq ($(SYSTEM_ZLIB),true)
+ CPPFLAGS += -I$(SHARE_SRC)/native/java/util/zip/zlib-1.1.3
+endif
+
+
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)
+ CFLAGS += -DPNG_NO_MMX_CODE
+ CPPFLAGS += -I$(OPENWIN_HOME)/include \
+ -I$(OPENWIN_HOME)/include/X11/extensions
+ CPPFLAGS += %%ICONV_CPPFLAGS%%
+ OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11 -lXext %%ICONV_LDFLAGS%% $(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
@@ -77,14 +92,13 @@
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-1.1.3
+ifneq ($(SYSTEM_ZLIB),true)
+ vpath %.c $(SHARE_SRC)/native/java/util/zip/zlib-1.1.3
+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-1.1.3
-
ifeq ($(PLATFORM), linux)
ifeq ($(ARCH_DATA_MODEL), 64)
# 64-bit gcc has problems compiling MMX instructions.
--- jdk/make/sun/xawt/Makefile
+++ jdk/make/sun/xawt/Makefile
@@ -53,6 +53,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.
@@ -86,7 +91,12 @@
vpath %.c $(PLATFORM_SRC)/native/sun/java2d/opengl
vpath %.c $(PLATFORM_SRC)/native/sun/java2d/x11
-OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 -ldl \
+ifeq ($(PLATFORM), bsd)
+LIBDL=
+else
+LIBDL=-ldl
+endif
+OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 $(LIBDL) \
$(LDFLAGS_COMMON) $(AWT_RUNPATH) $(OTHER_LDFLAGS) -lXtst -lXi
ifeq ($(PLATFORM), solaris)
@@ -94,8 +104,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 \
@@ -122,9 +130,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$(MOTIF_DIR)/include \
-I$(OPENWIN_HOME)/include
@@ -134,6 +144,14 @@
CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions -I$(MOTIF_DIR)/include
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
+++ jdk/make/tools/freetypecheck/Makefile
@@ -60,8 +60,12 @@
#add runtime lib search path to ensure test will be runnable
ifeq ($(PLATFORM), solaris)
FT_OPTIONS += -R $(FT_LIB) -lfreetype
- else #linux
- FT_OPTIONS += -Wl,-rpath -Wl,$(FT_LIB) -lfreetype
+ else
+ ifeq ($(PLATFORM), bsd)
+ FT_OPTIONS += -lfreetype %%ZLIB_LDFLAGS%%
+ else # linux
+ FT_OPTIONS += -Wl,-rpath -Wl,$(FREETYPE_LIB_PATH) -lfreetype
+ endif
endif
endif
--- jdk/src/share/back/commonRef.c
+++ jdk/src/share/back/commonRef.c
@@ -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
+++ jdk/src/share/bin/java.c
@@ -104,6 +104,11 @@
static char *launchername;
jboolean _launcher_debug = JNI_FALSE;
+#ifdef __APPLE__
+static jboolean continueInSameThread = JNI_FALSE; /* start VM in current thread */
+#endif
+
+
/*
* Entries for splash screen environment variables.
* putenv is performed in SelectVersion. We need
@@ -146,6 +151,10 @@
static void SetPaths(int argc, char **argv);
+#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
/* Values for vmdesc.flag */
@@ -184,13 +193,13 @@
int JNICALL JavaMain(void * args); /* entry point */
-struct JavaMainArgs {
+typedef struct {
int argc;
char ** argv;
char * jarfile;
char * classname;
InvocationFunctions ifn;
-};
+} JavaMainArgs;
/*
* Entry point.
@@ -332,49 +341,24 @@
/* Show the splash screen if needed */
ShowSplashScreen();
- /*
- * Done with all command line processing and potential re-execs so
- * clean up the environment.
- */
- (void)UnsetEnv(ENV_ENTRY);
- (void)UnsetEnv(SPLASH_FILE_ENV_ENTRY);
- (void)UnsetEnv(SPLASH_JAR_ENV_ENTRY);
-
- JLI_MemFree(splash_jar_entry);
- JLI_MemFree(splash_file_entry);
- /*
- * 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;
+#ifdef __APPLE__
+ if (continueInSameThread == JNI_TRUE) {
+ return ContinueInSameThread(&ifn, argc, argv, jarfile, classname, ret);
+ } else {
+ return ContinueInNewThread(&ifn, argc, argv, jarfile, classname, ret);
}
- }
-
- { /* Create a new thread to create JVM and invoke main method */
- struct JavaMainArgs args;
+#else
- args.argc = argc;
- args.argv = argv;
- args.jarfile = jarfile;
- args.classname = classname;
- args.ifn = ifn;
+ return ContinueInNewThread(&ifn, argc, argv, jarfile, classname, ret);
+#endif
- return ContinueInNewThread(JavaMain, threadStackSize, (void*)&args, ret);
- }
}
int JNICALL
JavaMain(void * _args)
{
- struct JavaMainArgs *args = (struct JavaMainArgs *)_args;
+ JavaMainArgs *args = (JavaMainArgs *)_args;
int argc = args->argc;
char **argv = args->argv;
char *jarfile = args->jarfile;
@@ -1159,6 +1143,10 @@
} else if (strcmp(arg, "-X") == 0) {
printXUsage = JNI_TRUE;
return JNI_TRUE;
+#ifdef __APPLE__
+ } else if (JLI_StrCmp(arg, "-XstartOnFirstThread") == 0) {
+ continueInSameThread = JNI_TRUE;
+#endif
/*
* The following case provide backward compatibility with old-style
* command line options.
@@ -1979,6 +1967,84 @@
return -1;
}
+static int
+ContinueInNewThread(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 a new thread to 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 = ContinueInNewThread0(JavaMain, threadStackSize, (void*)&args);
+ /* If the caller has deemed there is an error we
+ * simply return that, otherwise we return the value of
+ * the callee
+ */
+ return (ret != 0) ? ret : rslt;
+ }
+}
+
+
+#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
FreeKnownVMs()
{
--- jdk/src/share/bin/java.h
+++ jdk/src/share/bin/java.h
@@ -91,11 +91,17 @@
void PrintMachineDependentOptions();
const char *jlong_format_specifier();
+
/*
* Block current thread and continue execution in new thread
*/
-int ContinueInNewThread(int (JNICALL *continuation)(void *),
- jlong stack_size, void * args, int ret);
+int ContinueInNewThread0(int (JNICALL *continuation)(void *),
+ jlong stack_size, void * args);
+
+
+ static int ContinueInNewThread(InvocationFunctions* ifn, int argc, char** argv,
+ char* jarfile, char* classname, int ret);
+
/* sun.java.launcher.* platform properties. */
void SetJavaLauncherPlatformProps(void);
--- jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java
+++ jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java
@@ -477,6 +477,8 @@
String[] dirs = new String[] {
userHome + sep + ".themes",
System.getProperty("swing.metacitythemedir"),
+ "%%LOCALBASE%%/share/themes",
+ "%%LOCALBASE%%/share/gnome/themes",
"/usr/share/themes",
"/usr/gnome/share/themes", // Debian/Redhat/Solaris
"/opt/gnome2/share/themes" // SuSE
--- jdk/src/share/classes/java/awt/Font.java
+++ jdk/src/share/classes/java/awt/Font.java
@@ -449,18 +449,19 @@
*/
private AttributeValues getAttributeValues() {
if (values == null) {
- values = new AttributeValues();
- values.setFamily(name);
- values.setSize(pointSize); // expects the float value.
+ AttributeValues valuesTmp = new AttributeValues();
+ valuesTmp.setFamily(name);
+ valuesTmp.setSize(pointSize); // expects the float value.
if ((style & BOLD) != 0) {
- values.setWeight(2); // WEIGHT_BOLD
+ valuesTmp.setWeight(2); // WEIGHT_BOLD
}
if ((style & ITALIC) != 0) {
- values.setPosture(.2f); // POSTURE_OBLIQUE
+ valuesTmp.setPosture(.2f); // POSTURE_OBLIQUE
}
- values.defineAll(PRIMARY_MASK); // for streaming compatibility
+ valuesTmp.defineAll(PRIMARY_MASK); // for streaming compatibility
+ values = valuesTmp;
}
return values;
--- jdk/src/share/classes/java/awt/GraphicsEnvironment.java
+++ jdk/src/share/classes/java/awt/GraphicsEnvironment.java
@@ -148,7 +148,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
+++ jdk/src/share/classes/java/util/TimeZone.java
@@ -833,15 +833,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
+++ jdk/src/share/classes/sun/awt/FontConfiguration.java
@@ -1073,7 +1073,7 @@
*/
HashMap<String, Boolean> existsMap;
public boolean needToSearchForFile(String fileName) {
- if (!environment.isLinux) {
+ if (!environment.isLinuxOrBSD) {
return false;
} else if (existsMap == null) {
existsMap = new HashMap<String, Boolean>();
@@ -1309,7 +1309,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/font/TrueTypeFont.java
+++ jdk/src/share/classes/sun/font/TrueTypeFont.java
@@ -160,6 +160,13 @@
private boolean supportsJA;
private boolean supportsCJK;
+ /* These are for faster access to the name of the font as
+ * typically exposed via API to applications.
+ */
+ private Locale nameLocale;
+ private String localeFamilyName;
+ private String localeFullName;
+
/**
* - does basic verification of the file
* - reads the header table for this font (within a collection)
@@ -1061,6 +1068,10 @@
* greater than 32767, so read and store those as ints
*/
int stringPtr = sbuffer.get() & 0xffff;
+
+ nameLocale = sun.awt.SunToolkit.getStartupLocale();
+ short nameLocaleID = FontManager.getLCIDFromLocale(nameLocale);
+
for (int i=0; i<numRecords; i++) {
short platformID = sbuffer.get();
if (platformID != MS_PLATFORM_ID) {
@@ -1072,15 +1083,24 @@
short nameID = sbuffer.get();
int nameLen = ((int) sbuffer.get()) & 0xffff;
int namePtr = (((int) sbuffer.get()) & 0xffff) + stringPtr;
-
+ String tmpName = null;
switch (nameID) {
case FAMILY_NAME_ID:
- if (familyName == null || langID == ENGLISH_LOCALE_ID) {
+ if (familyName == null || langID == ENGLISH_LOCALE_ID ||
+ langID == nameLocaleID)
+ {
buffer.position(namePtr);
buffer.get(name, 0, nameLen);
- familyName = makeString(name, nameLen, encodingID);
+ tmpName = makeString(name, nameLen, encodingID);
+
+ if (familyName == null || langID == ENGLISH_LOCALE_ID){
+ familyName = tmpName;
+ }
+ if (langID == nameLocaleID) {
+ localeFamilyName = tmpName;
+ }
}
/*
for (int ii=0;ii<nameLen;ii++) {
@@ -1098,15 +1118,29 @@
case FULL_NAME_ID:
- if (fullName == null || langID == ENGLISH_LOCALE_ID) {
+ if (fullName == null || langID == ENGLISH_LOCALE_ID ||
+ langID == nameLocaleID)
+ {
buffer.position(namePtr);
buffer.get(name, 0, nameLen);
- fullName = makeString(name, nameLen, encodingID);
+ tmpName = makeString(name, nameLen, encodingID);
+
+ if (fullName == null || langID == ENGLISH_LOCALE_ID) {
+ fullName = tmpName;
+ }
+ if (langID == nameLocaleID) {
+ localeFullName = tmpName;
+ }
}
break;
-
}
}
+ if (localeFamilyName == null) {
+ localeFamilyName = familyName;
+ }
+ if (localeFullName == null) {
+ localeFullName = fullName;
+ }
}
}
@@ -1189,6 +1223,8 @@
public String getFontName(Locale locale) {
if (locale == null) {
return fullName;
+ } else if (locale.equals(nameLocale) && localeFullName != null) {
+ return localeFullName;
} else {
short localeID = FontManager.getLCIDFromLocale(locale);
String name = lookupName(localeID, FULL_NAME_ID);
@@ -1203,11 +1239,13 @@
public String getFamilyName(Locale locale) {
if (locale == null) {
return familyName;
+ } else if (locale.equals(nameLocale) && localeFamilyName != null) {
+ return localeFamilyName;
} else {
short localeID = FontManager.getLCIDFromLocale(locale);
String name = lookupName(localeID, FAMILY_NAME_ID);
if (name == null) {
- return familyName;
+ return familyName;
} else {
return name;
}
--- jdk/src/share/classes/sun/java2d/SunGraphicsEnvironment.java
+++ jdk/src/share/classes/sun/java2d/SunGraphicsEnvironment.java
@@ -76,7 +76,7 @@
public abstract class SunGraphicsEnvironment extends GraphicsEnvironment
implements FontSupport, DisplayChangedListener {
- public static boolean isLinux;
+ public static boolean isLinuxOrBSD;
public static boolean isSolaris;
public static boolean isWindows;
public static boolean noType1Font;
@@ -164,7 +164,15 @@
public Object run() {
String osName = System.getProperty("os.name");
if ("Linux".equals(osName)) {
- isLinux = true;
+ isLinuxOrBSD = true;
+ } else if ("FreeBSD".equals(osName)) {
+ isLinuxOrBSD = true;
+ } else if ("Darwin".equals(osName)) {
+ isLinuxOrBSD = true;
+ } else if ("NetBSD".equals(osName)) {
+ isLinuxOrBSD = true;
+ } else if ("OpenBSD".equals(osName)) {
+ isLinuxOrBSD = true;
} else if ("SunOS".equals(osName)) {
isSolaris = true;
} else if ("Windows".equals(osName)) {
@@ -227,8 +235,8 @@
* Pass "true" to registerFonts method as on-screen these
* JRE fonts always go through the T2K rasteriser.
*/
- if (isLinux) {
- /* Linux font configuration uses these fonts */
+ if (isLinuxOrBSD) {
+ /* Linux/BSD font configuration uses these fonts */
registerFontDir(jreFontDirName);
}
registerFontsInDir(jreFontDirName, true, Font2D.JRE_RANK,
--- jdk/src/share/classes/sun/nio/ch/KqueueSelectorProvider.java
+++ jdk/src/share/classes/sun/nio/ch/KqueueSelectorProvider.java
@@ -0,0 +1,17 @@
+package sun.nio.ch;
+
+import java.io.IOException;
+import java.nio.channels.*;
+import java.nio.channels.spi.*;
+
+public class KqueueSelectorProvider
+ extends SelectorProviderImpl
+{
+ public AbstractSelector openSelector() throws IOException {
+ return new KqueueSelectorImpl(this);
+ }
+
+ public Channel inheritedChannel() throws IOException {
+ return InheritedChannel.getChannel();
+ }
+}
--- jdk/src/share/classes/sun/print/PSPrinterJob.java
+++ jdk/src/share/classes/sun/print/PSPrinterJob.java
@@ -1531,9 +1531,33 @@
pFlags |= NOSHEET;
ncomps+=1;
}
- if (System.getProperty("os.name").equals("Linux")) {
+
+ String osname = System.getProperty("os.name");
+ if (osname.equals("Linux") || osname.endsWith("BSD") || osname.contains("OS X")) {
+ String lprPath = "/usr/bin/lpr";
+ if (osname.endsWith("BSD")) {
+ final PrintService pservice = getPrintService();
+ Boolean isIPPPrinter =
+ (Boolean)java.security.AccessController.doPrivileged(
+ new java.security.PrivilegedAction() {
+ public Object run() {
+ try {
+ Class psClass =
+ Class.forName("sun.print.IPPPrintService");
+ if (psClass.isInstance(pservice)) {
+ return Boolean.TRUE;
+ }
+ } catch (Throwable t) {
+ }
+ return Boolean.FALSE;
+ }
+ });
+ if (isIPPPrinter) {
+ lprPath = "%%LOCALBASE%%/bin/lpr";
+ }
+ }
execCmd = new String[ncomps];
- execCmd[n++] = "/usr/bin/lpr";
+ execCmd[n++] = lprPath;
if ((pFlags & PRINTER) != 0) {
execCmd[n++] = new String("-P" + printer);
}
--- jdk/src/share/classes/sun/security/jgss/GSSManagerImpl.java
+++ jdk/src/share/classes/sun/security/jgss/GSSManagerImpl.java
@@ -49,8 +49,12 @@
AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
public Boolean run() {
String osname = System.getProperty("os.name");
- if (osname.startsWith("SunOS") ||
- osname.startsWith("Linux")) {
+ if (osname.startsWith("SunOS")
+ || osname.startsWith("Linux")
+ || osname.startsWith("FreeBSD")
+ || osname.startsWith("NetBSD")
+ || osname.startsWith("OpenBSD")
+ || osname.startsWith("Darwin")) {
return new Boolean(System.getProperty
(USE_NATIVE_PROP));
}
--- jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java
+++ jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java
@@ -82,7 +82,11 @@
String osname = System.getProperty("os.name");
if (osname.startsWith("SunOS")) {
gssLib = "libgss.so";
- } else if (osname.startsWith("Linux")) {
+ } else if (osname.startsWith("Linux")
+ || osname.startsWith("FreeBSD")
+ || osname.startsWith("NetBSD")
+ || osname.startsWith("OpenBSD")
+ || osname.startsWith("Darwin")) {
gssLib = "libgssapi.so";
}
}
--- jdk/src/share/classes/sun/security/krb5/Config.java
+++ jdk/src/share/classes/sun/security/krb5/Config.java
@@ -711,7 +711,11 @@
}
} else if (osname.startsWith("SunOS")) {
name = "/etc/krb5/krb5.conf";
- } else if (osname.startsWith("Linux")) {
+ } else if (osname.startsWith("Linux")
+ || osname.startsWith("FreeBSD")
+ || osname.startsWith("NetBSD")
+ || osname.startsWith("OpenBSD")
+ || osname.startsWith("Darwin")) {
name = "/etc/krb5.conf";
}
}
--- jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java
+++ jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java
@@ -386,8 +386,12 @@
String uidStr = null;
long uid = 0;
- if (osname.startsWith("SunOS") ||
- (osname.startsWith("Linux"))) {
+ if (osname.startsWith("SunOS")
+ || osname.startsWith("Linux")
+ || osname.startsWith("FreeBSD")
+ || osname.startsWith("NetBSD")
+ || osname.startsWith("OpenBSD")
+ || osname.startsWith("Darwin")) {
try {
Class<?> c = Class.forName
("com.sun.security.auth.module.UnixSystem");
--- jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider
+++ jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider
@@ -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
+++ jdk/src/share/classes/sun/tools/jar/Main.java
@@ -48,6 +48,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
@@ -249,6 +250,16 @@
}
}
} else if (xflag) {
+ // 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
replaceFSC(files);
if (fname != null && files != null) {
extract(fname, files);
@@ -921,6 +932,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()) {
@@ -942,6 +957,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
+++ jdk/src/share/classes/sun/tools/jar/resources/jar.properties
@@ -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/hpi/include/hpi_impl.h
+++ jdk/src/share/hpi/include/hpi_impl.h
@@ -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/native/com/sun/java/util/jar/pack/defines.h
+++ jdk/src/share/native/com/sun/java/util/jar/pack/defines.h
@@ -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
+++ jdk/src/share/native/com/sun/java/util/jar/pack/main.cpp
@@ -33,9 +33,14 @@
#include <limits.h>
#include <time.h>
+/* !PRODUCT needs intptr_t */
+#if defined(_ALLBSD_SOURCE) && !defined(PRODUCT)
+#include <stdint.h>
+#endif
+
#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 +63,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 +74,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
+++ jdk/src/share/native/com/sun/media/sound/DirectAudioDevice.c
@@ -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/SoundDefs.h
+++ jdk/src/share/native/com/sun/media/sound/SoundDefs.h
@@ -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
+++ jdk/src/share/native/common/check_code.c
@@ -1069,7 +1069,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];
@@ -1148,26 +1148,26 @@
}
}
if (opcode == 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 opc_tableswitch");
saved_operand[k + 1] = code_data[target];
@@ -1615,7 +1615,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 {
@@ -1628,7 +1628,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
+++ jdk/src/share/native/java/io/io_util.h
@@ -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
+++ jdk/src/share/native/java/lang/fdlibm/include/fdlibm.h
@@ -25,6 +25,10 @@
* questions.
*/
+#ifdef __OpenBSD__
+#include <sys/types.h>
+#endif
+#include <machine/endian.h>
#include "jfdlibm.h"
#ifdef __NEWVALID /* special setup for Sun test regime */
@@ -47,11 +51,13 @@
#define __LOp(x) *(1+(int*)x)
#endif
+#ifndef __P
#ifdef __STDC__
#define __P(p) p
#else
#define __P(p) ()
#endif
+#endif
/*
* ANSI/POSIX
--- jdk/src/share/native/java/lang/fdlibm/include/jfdlibm.h
+++ jdk/src/share/native/java/lang/fdlibm/include/jfdlibm.h
@@ -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
+++ jdk/src/share/native/java/util/zip/Inflater.c
@@ -65,6 +65,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);
@@ -197,6 +201,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/zlib-1.1.3/zconf.h
+++ jdk/src/share/native/java/util/zip/zlib-1.1.3/zconf.h
@@ -42,44 +42,49 @@
/* for _LP64 */
#include <sys/types.h>
+/**
+ * Privatise the symbols to the JDK.
+ */
+#define Z_PREFIX
+
/*
* If you *really* need a unique prefix for all types and library functions,
* compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
*/
#ifdef Z_PREFIX
-# define deflateInit_ z_deflateInit_
-# define deflate z_deflate
-# define deflateEnd z_deflateEnd
-# define inflateInit_ z_inflateInit_
-# define inflate z_inflate
-# define inflateEnd z_inflateEnd
-# define deflateInit2_ z_deflateInit2_
-# define deflateSetDictionary z_deflateSetDictionary
-# define deflateCopy z_deflateCopy
-# define deflateReset z_deflateReset
-# define deflateParams z_deflateParams
-# define inflateInit2_ z_inflateInit2_
-# define inflateSetDictionary z_inflateSetDictionary
-# define inflateSync z_inflateSync
-# define inflateSyncPoint z_inflateSyncPoint
-# define inflateReset z_inflateReset
-# define compress z_compress
-# define compress2 z_compress2
-# define uncompress z_uncompress
-# define adler32 z_adler32
-# define crc32 z_crc32
-# define get_crc_table z_get_crc_table
-
-# define Byte z_Byte
-# define uInt z_uInt
-# define uLong z_uLong
-# define Bytef z_Bytef
-# define charf z_charf
-# define intf z_intf
-# define uIntf z_uIntf
-# define uLongf z_uLongf
-# define voidpf z_voidpf
-# define voidp z_voidp
+# define deflateInit_ _java_z_deflateInit_
+# define deflate _java_z_deflate
+# define deflateEnd _java_z_deflateEnd
+# define inflateInit_ _java_z_inflateInit_
+# define inflate _java_z_inflate
+# define inflateEnd _java_z_inflateEnd
+# define deflateInit2_ _java_z_deflateInit2_
+# define deflateSetDictionary _java_z_deflateSetDictionary
+# define deflateCopy _java_z_deflateCopy
+# define deflateReset _java_z_deflateReset
+# define deflateParams _java_z_deflateParams
+# define inflateInit2_ _java_z_inflateInit2_
+# define inflateSetDictionary _java_z_inflateSetDictionary
+# define inflateSync _java_z_inflateSync
+# define inflateSyncPoint _java_z_inflateSyncPoint
+# define inflateReset _java_z_inflateReset
+# define compress _java_z_compress
+# define compress2 _java_z_compress2
+# define uncompress _java_z_uncompress
+# define adler32 _java_z_adler32
+# define crc32 _java_z_crc32
+# define get_crc_table _java_z_get_crc_table
+
+# define Byte _java_z_Byte
+# define uInt _java_z_uInt
+# define uLong _java_z_uLong
+# define Bytef _java_z_Bytef
+# define charf _java_z_charf
+# define intf _java_z_intf
+# define uIntf _java_z_uIntf
+# define uLongf _java_z_uLongf
+# define voidpf _java_z_voidpf
+# define voidp _java_z_voidp
#endif
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
--- jdk/src/share/native/sun/awt/debug/debug_util.h
+++ jdk/src/share/native/sun/awt/debug/debug_util.h
@@ -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
+++ jdk/src/share/native/sun/awt/image/BufImgSurfaceData.c
@@ -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
+++ jdk/src/share/native/sun/awt/image/DataBufferNative.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv2x2_f.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16ext.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16nw.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8ext.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8nw.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16ext.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16nw.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageCopy_Bit.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_64.c
@@ -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,
@@ -612,7 +612,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));
@@ -622,12 +622,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));
@@ -637,7 +637,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;
@@ -645,7 +645,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));
@@ -655,12 +655,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));
@@ -670,7 +670,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;
@@ -718,7 +718,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));
@@ -732,14 +732,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));
@@ -753,7 +753,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;
@@ -763,7 +763,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));
@@ -777,14 +777,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));
@@ -798,7 +798,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;
@@ -851,7 +851,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));
@@ -861,12 +861,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));
@@ -876,12 +876,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));
@@ -891,12 +891,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));
@@ -906,7 +906,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;
@@ -914,7 +914,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));
@@ -924,12 +924,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));
@@ -939,12 +939,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));
@@ -954,12 +954,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));
@@ -969,7 +969,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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_Bit.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageUtils.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_c_ImageCopy.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_c_ImageLookUp_f.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_image.h
@@ -27,6 +27,11 @@
#ifndef MLIB_IMAGE_H
#define MLIB_IMAGE_H
+#ifdef __OpenBSD__
+#include <sys/types.h>
+#endif
+#include <machine/endian.h>
+
#include <mlib_types.h>
#include <mlib_status.h>
#include <mlib_sys.h>
--- jdk/src/share/native/sun/awt/medialib/mlib_sys.c
+++ jdk/src/share/native/sun/awt/medialib/mlib_sys.c
@@ -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
+++ jdk/src/share/native/sun/awt/medialib/mlib_types.h
@@ -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
+++ jdk/src/share/native/sun/font/AccelGlyphCache.c
@@ -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
+++ jdk/src/share/native/sun/font/DrawGlyphList.c
@@ -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
+++ jdk/src/share/native/sun/font/sunFont.c
@@ -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
+++ jdk/src/share/native/sun/java2d/SurfaceData.c
@@ -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
+++ jdk/src/share/native/sun/java2d/opengl/OGLFuncs.h
@@ -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
+++ jdk/src/share/native/sun/java2d/opengl/OGLRenderQueue.c
@@ -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
+++ jdk/src/share/native/sun/java2d/opengl/OGLTextRenderer.c
@@ -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/transport/socket/socketTransport.c
+++ jdk/src/share/transport/socket/socketTransport.c
@@ -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, 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
+++ jdk/src/solaris/back/exec_md.c
@@ -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
+++ jdk/src/solaris/back/linker_md.c
@@ -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
+++ jdk/src/solaris/back/util_md.h
@@ -29,7 +29,7 @@
#include <stddef.h>
/* To get uintptr_t */
-#ifdef LINUX
+#if defined(LINUX) || defined(_ALLBSD_SOURCE)
#include <stdint.h>
#else
/* The file stdint.h is not on Solaris 8 machines. */
@@ -40,6 +40,7 @@
#include <limits.h>
#include <sys/types.h>
+#include <machine/endian.h>
#ifdef _LP64
typedef unsigned long UNSIGNED_JLONG;
@@ -55,7 +56,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/java_md.c
+++ jdk/src/solaris/bin/java_md.c
@@ -24,6 +24,7 @@
*/
#include "java.h"
+#include "jvm_md.h"
#include <dirent.h>
#include <dlfcn.h>
#include <fcntl.h>
@@ -34,17 +35,33 @@
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
+#if defined(_ALLBSD_SOURCE)
+#include <sys/time.h>
+#endif
+#ifndef _SC_PHYS_PAGES
+#include <sys/sysctl.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
@@ -75,14 +92,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 = "%%JAVA_HOME%%";
+static const char *user_dir = "/java";
+#elif defined(__NetBSD__)
+static const char *system_dir = "/usr/local/openjdk6";
+static const char *user_dir = "/java";
+#elif defined(__OpenBSD__)
+static const char *system_dir = "/usr/local/openjdk6";
+static const char *user_dir = "/java";
+#elif defined(__APPLE__)
+static const char *system_dir = "/usr/local/openjdk6";
+static const char *user_dir = "/java";
+#elif defined(__linux__)
+static const char *system_dir = "/usr/local/java";
static const char *user_dir = "/java";
#else /* Solaris */
static const char *system_dir = "/usr/jdk";
@@ -404,10 +438,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 __linux
+#if defined(__linux__)
/*
* On linux, if a binary is running as sgid or suid, glibc sets
* LD_LIBRARY_PATH to the empty string for security purposes. (In
@@ -423,6 +457,22 @@
if((getgid() != getegid()) || (getuid() != geteuid()) ) {
return;
}
+#elif defined(_ALLBSD_SOURCE)
+ /*
+ * On BSD, if a binary is running as sgid or suid, libc sets
+ * LD_LIBRARY_PATH to the empty string for security purposes. (In
+ * contrast, on Solaris the LD_LIBRARY_PATH variable for a
+ * privileged binary does not lose its settings; but the dynamic
+ * linker does apply more scrutiny to the path.) The launcher uses
+ * the value of LD_LIBRARY_PATH to prevent an exec loop.
+ * Therefore, if we are running sgid or suid, this function's
+ * setting of LD_LIBRARY_PATH will be ineffective and we should
+ * return from the function now. Getting the right libraries to
+ * be found must be handled through other mechanisms.
+ */
+ if(issetugid()) {
+ return;
+ }
#endif
/* runpath contains current effective LD_LIBRARY_PATH setting */
@@ -431,7 +481,7 @@
new_runpath = JLI_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 "=");
/*
@@ -446,7 +496,7 @@
/* jvmpath, ((running != wanted)?((wanted==64)?"/"LIBARCH64NAME:"/.."):""), */
- sprintf(new_runpath, "LD_LIBRARY_PATH="
+ sprintf(new_runpath, LD_LIBRARY_PATH "="
"%s:"
"%s/lib/%s:"
"%s/../lib/%s",
@@ -721,7 +771,7 @@
jboolean
GetApplicationHome(char *buf, jint bufsize)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
char *execname = GetExecname();
if (execname) {
strncpy(buf, execname, bufsize-1);
@@ -878,9 +928,13 @@
}
}
}
-#elif defined(__linux__)
+#elif defined(__linux__) || defined(_ALLBSD_SOURCE)
{
+#ifdef __FreeBSD__
+ const char* self = "/proc/curproc/file";
+#else
const char* self = "/proc/self/exe";
+#endif
char buf[PATH_MAX+1];
int len = readlink(self, buf, PATH_MAX);
if (len >= 0) {
@@ -888,7 +942,7 @@
exec_path = JLI_StringDup(buf);
}
}
-#else /* !__sun && !__linux */
+#else /* !__sun && !__linux && !_ALLBSD_SOURCE */
{
/* Not implemented */
}
@@ -977,6 +1031,7 @@
/* Compute physical memory by asking the OS */
uint64_t
physical_memory(void) {
+#ifdef _SC_PHYS_PAGES
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;
@@ -988,6 +1043,28 @@
" physical memory: " UINT64_FORMAT " (%.3fGB)\n",
pages, page_size, result, result / (double) GB);
}
+#else
+#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);
+ uint64_t result;
+# define UINT64_FORMAT "%" PRIu64
+
+ if (sysctl(name, 2, &physmem, &physmem_len, NULL, 0) == -1)
+ physmem = 256 * MB;
+
+ result = (uint64_t)physmem;
+
+ if (_launcher_debug) {
+ printf("physical memory: " UINT64_FORMAT " (%.3fGB)\n",
+ result, result / (double) GB);
+ }
+#endif
return result;
}
@@ -1083,7 +1160,7 @@
#endif /* __sun && i586 */
-#if defined(__linux__) && defined(i586)
+#if (defined(__linux__) || defined(_ALLBSD_SOURCE)) && defined(i586)
/*
* A utility method for asking the CPU about itself.
@@ -1148,7 +1225,7 @@
#endif
}
-#endif /* __linux__ && i586 */
+#endif /* (__linux__ || _ALLBSD_SOURCE) && i586 */
#ifdef i586
/*
@@ -1360,6 +1437,39 @@
#endif /* __linux__ && i586 */
+#if defined(_ALLBSD_SOURCE) && defined(i586)
+
+/* The definition of a server-class machine for bsd-i586 */
+jboolean
+bsd_i586_ServerClassMachine(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;
+ }
+ }
+ if (_launcher_debug) {
+ printf("bsd_" LIBARCHNAME "_ServerClassMachine: %s\n",
+ (result == JNI_TRUE ? "true" : "false"));
+ }
+ return result;
+}
+
+#endif /* _ALLBSD_SOURCE && i586 */
+
/* Dispatch to the platform-specific definition of "server-class" */
jboolean
ServerClassMachine(void) {
@@ -1374,6 +1484,8 @@
result = solaris_i586_ServerClassMachine();
#elif defined(__linux__) && defined(i586)
result = linux_i586_ServerClassMachine();
+#elif defined(_ALLBSD_SOURCE) && defined(i586)
+ result = bsd_i586_ServerClassMachine();
#else
if (_launcher_debug) {
printf("ServerClassMachine: returns default value of %s\n",
@@ -1514,7 +1626,7 @@
while (dp != NULL) {
cp = strchr(dp, (int)':');
if (cp != NULL)
- *cp = (char)NULL;
+ *cp = '\0';
if ((target = ProcessDir(info, dp)) != NULL)
break;
dp = cp;
@@ -1692,9 +1804,29 @@
return(borrowed_unsetenv(name));
}
+#if defined(_ALLBSD_SOURCE)
+/*
+ * BSD's implementation of CounterGet()
+ */
+int64_t
+CounterGet()
+{
+#ifdef __FreeBSD__
+ struct timespec tp;
+ clock_gettime(CLOCK_MONOTONIC, &tp);
+ return (uint64_t)tp.tv_sec * 1000000 + tp.tv_nsec / 1000;
+#else
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ return (uint64_t)tv.tv_sec * 1000000 + tv.tv_usec;
+#endif
+}
+#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;
@@ -1722,13 +1854,15 @@
return "%lld";
}
+
+
/*
* Block current thread and continue execution in a new thread
*/
int
-ContinueInNewThread(int (JNICALL *continuation)(void *), jlong stack_size, void * args, int ret) {
+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);
@@ -1741,7 +1875,7 @@
if (pthread_create(&tid, &attr, (void *(*)(void*))continuation, (void*)args) == 0) {
void * tmp;
pthread_join(tid, &tmp);
- rslt = (int)tmp;
+ rslt = (int)(intptr_t)tmp;
} else {
/*
* Continue execution in current thread if for some reason (e.g. out of
@@ -1759,25 +1893,23 @@
if (thr_create(NULL, stack_size, (void *(*)(void *))continuation, args, flags, &tid) == 0) {
void * tmp;
thr_join(tid, NULL, &tmp);
- rslt = (int)tmp;
+ rslt = (int)(intptr_t)tmp;
} else {
/* See above. Continue in current thread if thr_create() failed */
rslt = continuation(args);
}
#endif
- /* If the caller has deemed there is an error we
- * simply return that, otherwise we return the value of
- * the callee
- */
- return (ret != 0) ? ret : rslt;
+ return rslt;
}
+
+
/* Coarse estimation of number of digits assuming the worst case is a 64-bit pid. */
#define MAX_PID_STR_SZ 20
void SetJavaLauncherPlatformProps() {
- /* Linux only */
-#ifdef __linux__
+ /* Linux and BSDs only */
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
const char *substr = "-Dsun.java.launcher.pid=";
char *pid_prop_str = (char *)JLI_MemAlloc(strlen(substr) + MAX_PID_STR_SZ + 1);
sprintf(pid_prop_str, "%s%d", substr, getpid());
--- jdk/src/solaris/bin/java_md.h
+++ jdk/src/solaris/bin/java_md.h
@@ -58,10 +58,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/X11GraphicsEnvironment.java
+++ jdk/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java
@@ -403,7 +403,7 @@
if (fontID != null) {
fileName = (String)fontNameMap.get(fontID);
/* On Linux check for the Lucida Oblique fonts */
- if (fileName == null && isLinux && !isOpenJDK()) {
+ if (fileName == null && isLinuxOrBSD && !isOpenJDK()) {
if (oblmap == null) {
initObliqueLucidaFontMap();
}
@@ -639,7 +639,7 @@
if (fontConfigDirs == null) {
return;
}
- if (isLinux) {
+ if (isLinuxOrBSD) {
fontConfigDirs.add(jreLibDirName+File.separator+"oblique-fonts");
}
fontdirs = (String[])fontConfigDirs.toArray(new String[0]);
--- jdk/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java
+++ jdk/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java
@@ -47,6 +47,10 @@
public static SelectorProvider create() {
String osname = AccessController.doPrivileged(
new GetPropertyAction("os.name"));
+ if ("FreeBSD".equals(osname)) {
+ return new sun.nio.ch.KqueueSelectorProvider();
+ }
+
if ("SunOS".equals(osname)) {
return new sun.nio.ch.DevPollSelectorProvider();
}
--- jdk/src/solaris/classes/sun/nio/ch/KqueueArrayWrapper.java
+++ jdk/src/solaris/classes/sun/nio/ch/KqueueArrayWrapper.java
@@ -0,0 +1,231 @@
+/*
+ * Scratched by davidxu@freebsd.org
+ */
+
+package sun.nio.ch;
+
+import sun.misc.*;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.Arrays;
+
+class KqueueArrayWrapper {
+
+ // Event masks copied from class AbstractPollArrayWrapper
+ static final short POLLIN = 0x0001;
+ static final short POLLOUT = 0x0004;
+ static final short POLLERR = 0x0008;
+ static final short POLLHUP = 0x0010;
+ static final short POLLNVAL = 0x0020;
+ static final short POLLREMOVE = 0x0800;
+
+ // Kevent filters
+ static final short EVFILT_READ = -1;
+ static final short EVFILT_WRITE = -2;
+
+ // Kevent flags
+ static final short EV_ADD = 0x0001;
+ static final short EV_DELETE = 0x0002;
+ static final short EV_ERROR = 0x4000;
+
+ // Miscellaneous constants
+ static final int SIZE_KEVENT = keventSize();
+
+ // Zero mask to unregister events from kqueue
+ static final Integer ZERO_MASK = new Integer(0);
+
+ // Capacity increment of some arrays
+ static final int capacityIncr = 100;
+
+ KqueueArrayWrapper() {
+ int allocationSize;
+
+ // initial size of event array
+ pollKeventSize = capacityIncr * 2;
+ allocationSize = pollKeventSize * SIZE_KEVENT;
+ pollKeventArray = new AllocatedNativeObject(allocationSize, true);
+ kqfd = kqueue();
+ }
+
+ // Machinery for remembering fd registration changes
+ private HashMap<Integer, Integer> updateMap = new HashMap<Integer, Integer>();
+ private int[] oldMasks = new int[capacityIncr];
+
+ // kevent array to receive
+ private AllocatedNativeObject pollKeventArray;
+
+ // current size of pollKeventArray
+ int pollKeventSize;
+
+ // the pollKeventSize should be larger than this
+ int nextKeventSize;
+
+ // The fd of the kqueue()
+ int kqfd;
+
+ // The fd of the interrupt line going out
+ int outgoingInterruptFD;
+
+ // The fd of the interrupt line coming in
+ int incomingInterruptFD;
+
+ // The index of the interrupt FD
+ int interruptedIndex;
+
+ // Number of updated kevent entries
+ int updated;
+
+ // ensure some array sizes are large enough with a given file handle
+ void ensureFd(int fd) {
+ ensureNextEventFd(fd);
+ if (oldMasks.length < fd+1)
+ oldMasks = Arrays.copyOf(oldMasks, fd + capacityIncr);
+ }
+
+ void ensureNextEventFd(int fd) {
+ // each file handle may have two filters, read and write.
+ if (nextKeventSize / 2 < fd+1)
+ nextKeventSize = (fd+1) * 2;
+ }
+
+ void resizeEventBuffer() {
+ if (nextKeventSize > pollKeventSize) {
+ pollKeventArray.free();
+ pollKeventSize = nextKeventSize + capacityIncr * 2;
+ int allocationSize = pollKeventSize * SIZE_KEVENT;
+ pollKeventArray = new AllocatedNativeObject(allocationSize, true);
+ }
+ }
+
+ void initInterrupt(int fd0, int fd1) {
+ outgoingInterruptFD = fd1;
+ incomingInterruptFD = fd0;
+ ensureFd(fd0);
+ register(kqfd, fd0, EVFILT_READ);
+ }
+
+ int getReventOps(int i) {
+ short filter = getKeventFilter(pollKeventArray.address(), i);
+ short flags = getKeventFlags(pollKeventArray.address(), i);
+ if ((flags & EV_ERROR) != 0)
+ return POLLERR;
+ if (filter == EVFILT_READ)
+ return POLLIN;
+ if (filter == EVFILT_WRITE)
+ return POLLOUT;
+ return (0);
+ }
+
+ int getDescriptor(int i) {
+ return getKeventIdent(pollKeventArray.address(), i);
+ }
+
+ void setInterest(int fd, int mask) {
+ if (fd <0)
+ throw new IndexOutOfBoundsException("file handle less than 0");
+ synchronized (updateMap) {
+ ensureFd(fd);
+ updateMap.put(new Integer(fd), new Integer(mask));
+ }
+ }
+
+ void release(int fd) {
+ synchronized (updateMap) {
+ updateMap.put(new Integer(fd), ZERO_MASK);
+ }
+ }
+
+ void closeKqueueFD() throws IOException {
+ FileDispatcher.closeIntFD(kqfd);
+ pollKeventArray.free();
+ }
+
+ int poll(long timeout) {
+ int changeCount = updateRegistrations();
+ updated = kevent(kqfd, pollKeventArray.address(), changeCount,
+ pollKeventArray.address(), pollKeventSize, timeout);
+ for (int i = 0; i < updated; i++) {
+ if (getDescriptor(i) == incomingInterruptFD) {
+ interruptedIndex = i;
+ interrupted = true;
+ break;
+ }
+ }
+ return updated;
+ }
+
+ int updateRegistrations() {
+ int index = 0;
+ synchronized (updateMap) {
+ resizeEventBuffer();
+
+ Set<Integer> s = updateMap.keySet();
+ /*
+ * Because resizeEventBuffer may reallocate event buffer,
+ * we must retrieve fresh address here.
+ */
+ long address = pollKeventArray.address();
+
+ for (Integer fd : s) {
+ Integer newmask = updateMap.get(fd);
+ int oldmask = oldMasks[fd];
+ if ((oldmask & POLLIN) != 0) {
+ if ((newmask & POLLIN) == 0) {
+ putKevent(address, index, fd.intValue(), EV_DELETE, EVFILT_READ);
+ index++;
+ }
+ } else {
+ if ((newmask & POLLIN) != 0) {
+ putKevent(address, index, fd.intValue(), EV_ADD, EVFILT_READ);
+ index++;
+ }
+ }
+
+ if ((oldmask & POLLOUT) != 0) {
+ if ((newmask & POLLOUT) == 0) {
+ putKevent(address, index, fd.intValue(), EV_DELETE, EVFILT_WRITE);
+ index++;
+ }
+ } else {
+ if ((newmask & POLLOUT) != 0) {
+ putKevent(address, index, fd.intValue(), EV_ADD, EVFILT_WRITE);
+ index++;
+ }
+ }
+ oldMasks[fd] = newmask;
+ }
+ updateMap.clear();
+ }
+ return index;
+ }
+
+ boolean interrupted = false;
+
+ public void interrupt() {
+ interrupt(outgoingInterruptFD);
+ }
+
+ public int interruptedIndex() {
+ return interruptedIndex;
+ }
+
+ boolean interrupted() {
+ return interrupted;
+ }
+
+ void clearInterrupted() {
+ interrupted = false;
+ }
+
+ private static native int kqueue();
+ private static native void register(int kqfd, int fd, short filter);
+ private static native int kevent(int kqfd, long changeList, int nchanges, long eventList,
+ int nevents, long timeout);
+ private static native int keventSize();
+ private static native void interrupt(int fd);
+ private static native void putKevent(long address, int index, int fd, short flag, short filter);
+ private static native short getKeventFilter(long address, int index);
+ private static native short getKeventFlags(long address, int index);
+ private static native int getKeventIdent(long address, int index);
+}
--- jdk/src/solaris/classes/sun/nio/ch/KqueueSelectorImpl.java
+++ jdk/src/solaris/classes/sun/nio/ch/KqueueSelectorImpl.java
@@ -0,0 +1,205 @@
+/*
+ * scratched by davidxu@freebsd.org
+ */
+
+package sun.nio.ch;
+
+import java.io.IOException;
+import java.nio.channels.*;
+import java.nio.channels.spi.*;
+import java.util.*;
+import sun.misc.*;
+
+
+/**
+ * An implementation of Selector for FreeBSD.
+ */
+class KqueueSelectorImpl
+ extends SelectorImpl
+{
+
+ // File descriptors used for interrupt
+ protected int fd0;
+ protected int fd1;
+
+ // The kqueue object
+ KqueueArrayWrapper kqueueWrapper;
+
+ // The number of valid channels in this Selector's poll array
+ private int totalChannels;
+
+ // Maps from file descriptors to keys
+ private HashMap fdToKey;
+
+ // True if this Selector has been closed
+ private boolean closed = false;
+
+ // Lock for interrupt triggering and clearing
+ private Object interruptLock = new Object();
+ private boolean interruptTriggered = false;
+
+ // Trace number of file handles are updated.
+ private BitSet updatedSet;
+
+ /**
+ * Package private constructor called by factory method in
+ * the abstract superclass Selector.
+ */
+ KqueueSelectorImpl(SelectorProvider sp) {
+ super(sp);
+ int[] fdes = new int[2];
+ IOUtil.initPipe(fdes, false);
+ fd0 = fdes[0];
+ fd1 = fdes[1];
+ kqueueWrapper = new KqueueArrayWrapper();
+ totalChannels = 1;
+ kqueueWrapper.initInterrupt(fd0, fd1);
+ updatedSet = new BitSet();
+ fdToKey = new HashMap();
+ }
+
+ protected int doSelect(long timeout)
+ throws IOException
+ {
+ if (closed)
+ throw new ClosedSelectorException();
+ processDeregisterQueue();
+ try {
+ begin();
+ kqueueWrapper.poll(timeout);
+ } finally {
+ end();
+ }
+ processDeregisterQueue();
+ int numKeysUpdated = updateSelectedKeys();
+ if (kqueueWrapper.interrupted()) {
+ // Clear the wakeup pipe
+ synchronized (interruptLock) {
+ kqueueWrapper.clearInterrupted();
+ IOUtil.drain(fd0);
+ interruptTriggered = false;
+ }
+ }
+ return numKeysUpdated;
+ }
+
+ /**
+ * Update the keys whose fd's have been selected by the kqueue.
+ * Add the ready keys to the ready queue.
+ */
+ private int updateSelectedKeys() {
+ int entries = kqueueWrapper.updated;
+ int numKeysUpdated = 0;
+ SelectionKeyImpl ski;
+ int fd;
+ int i;
+
+ updatedSet.clear();
+ for (i = 0; i < entries; i++) {
+ fd = kqueueWrapper.getDescriptor(i);
+ ski = (SelectionKeyImpl) fdToKey.get(new Integer(fd));
+ // ski is null in the case of an interrupt
+ if (ski != null)
+ ski.nioReadyOps(0);
+ }
+
+ for (i = 0; i < entries; i++) {
+ fd = kqueueWrapper.getDescriptor(i);
+ ski = (SelectionKeyImpl) fdToKey.get(new Integer(fd));
+ // ski is null in the case of an interrupt
+ if (ski != null) {
+ int rOps = kqueueWrapper.getReventOps(i);
+ if (selectedKeys.contains(ski)) {
+ if (ski.channel.translateAndUpdateReadyOps(rOps, ski)) {
+ if (!updatedSet.get(fd)) {
+ updatedSet.set(fd);
+ numKeysUpdated++;
+ }
+ }
+ } else {
+ ski.channel.translateAndUpdateReadyOps(rOps, ski);
+ if ((ski.nioReadyOps() & ski.nioInterestOps()) != 0) {
+ selectedKeys.add(ski);
+ if (!updatedSet.get(fd)) {
+ updatedSet.set(fd);
+ numKeysUpdated++;
+ }
+ }
+ }
+ }
+ }
+ return numKeysUpdated;
+ }
+
+ protected void implClose() throws IOException {
+ if (!closed) {
+ closed = true;
+ FileDispatcher.closeIntFD(fd0);
+ FileDispatcher.closeIntFD(fd1);
+ if (kqueueWrapper != null) {
+ kqueueWrapper.release(fd0);
+ kqueueWrapper.closeKqueueFD();
+ kqueueWrapper = null;
+ selectedKeys = null;
+
+ // Deregister channels
+ Iterator i = keys.iterator();
+ while (i.hasNext()) {
+ SelectionKeyImpl ski = (SelectionKeyImpl)i.next();
+ deregister(ski);
+ SelectableChannel selch = ski.channel();
+ if (!selch.isOpen() && !selch.isRegistered())
+ ((SelChImpl)selch).kill();
+ i.remove();
+ }
+ totalChannels = 0;
+
+ }
+ fd0 = -1;
+ fd1 = -1;
+ }
+ }
+
+ protected void implRegister(SelectionKeyImpl ski) {
+ int fd = IOUtil.fdVal(ski.channel.getFD());
+ fdToKey.put(new Integer(fd), ski);
+ totalChannels++;
+ keys.add(ski);
+ }
+
+ protected void implDereg(SelectionKeyImpl ski) throws IOException {
+ int i = ski.getIndex();
+ assert (i >= 0);
+ int fd = ski.channel.getFDVal();
+ fdToKey.remove(new Integer(fd));
+ kqueueWrapper.release(fd);
+ totalChannels--;
+ ski.setIndex(-1);
+ keys.remove(ski);
+ selectedKeys.remove(ski);
+ deregister((AbstractSelectionKey)ski);
+ SelectableChannel selch = ski.channel();
+ if (!selch.isOpen() && !selch.isRegistered())
+ ((SelChImpl)selch).kill();
+ }
+
+ void putEventOps(SelectionKeyImpl sk, int ops) {
+ int fd = IOUtil.fdVal(sk.channel.getFD());
+ kqueueWrapper.setInterest(fd, ops);
+ }
+
+ public Selector wakeup() {
+ synchronized (interruptLock) {
+ if (!interruptTriggered) {
+ kqueueWrapper.interrupt();
+ interruptTriggered = true;
+ }
+ }
+ return this;
+ }
+
+ static {
+ Util.load();
+ }
+
+}
--- jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java
+++ jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java
@@ -119,7 +119,9 @@
}
static boolean isBSD() {
- return osname.equals("Linux");
+ return (osname.equals("Linux") ||
+ osname.endsWith("BSD") ||
+ osname.contains("OS X"));
}
static final int UNINITIALIZED = -1;
@@ -129,13 +131,13 @@
static int cmdIndex = UNINITIALIZED;
String[] lpcFirstCom = {
- "/usr/sbin/lpc status | grep : | sed -ne '1,1 s/://p'",
+ "/usr/sbin/lpc status all | grep ':$' | sed -ne '1,1 s/://p'",
"/usr/sbin/lpc status | grep -E '^[ 0-9a-zA-Z_-]*@' | awk -F'@' '{print $1}'"
};
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 +147,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
+++ jdk/src/solaris/classes/sun/tools/attach/BsdVirtualMachine.java
@@ -38,9 +38,6 @@
*/
public class BsdVirtualMachine extends HotSpotVirtualMachine {
- // Indicates if this machine uses the old BsdThreads
- static boolean isBsdThreads;
-
// The patch to the socket file created by the target VM
String path;
@@ -65,25 +62,10 @@
// Then we attempt to find the socket file again.
path = findSocketFile(pid);
if (path == null) {
- File f = createAttachFile(pid);
+ File f = new File("/tmp/.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;
@@ -265,37 +247,14 @@
// 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;
+ String path = "/tmp/" + fn;
File f = new File(path);
if (!f.exists()) {
- // Not found, so try /tmp
- path = "/tmp/" + fn;
- f = new File(path);
- if (!f.exists()) {
- return null; // not found
- }
+ return null; // not found
}
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 /tmp), 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) {
- path = "/tmp/" + fn;
- f = new File(path);
- f.createNewFile();
- }
- return f;
- }
-
/*
* Write/sends the given to the target VM. String is transmitted in
* UTF-8 encoding.
@@ -318,12 +277,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;
@@ -338,8 +291,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
+++ jdk/src/solaris/demo/jvmti/hprof/hprof_md.c
@@ -33,7 +33,7 @@
#include <sys/stat.h>
#include <fcntl.h>
-#ifndef LINUX
+#if !defined(LINUX) && !defined(_ALLBSD_SOURCE)
#include <procfs.h>
#endif
@@ -76,7 +76,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 +238,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 +256,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 +271,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
--- jdk/src/solaris/hpi/include/interrupt.h
+++ jdk/src/solaris/hpi/include/interrupt.h
@@ -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
+++ jdk/src/solaris/hpi/include/largefile.h
@@ -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
+++ jdk/src/solaris/hpi/include/largefile_bsd.h
@@ -23,14 +23,28 @@
* questions.
*/
-#ifndef _JAVASOFT_LINUX_LARGEFILE_SUPPORT_H_
-#define _JAVASOFT_LINUX_LARGEFILE_SUPPORT_H_
-
-/*
- * For building on glibc-2.0 we need to define stat64 here.
- */
+#ifndef _JAVASOFT_BSD_LARGEFILE_SUPPORT_H_
+#define _JAVASOFT_BSD_LARGEFILE_SUPPORT_H_
#include <sys/types.h>
#include <sys/stat.h>
-#endif /* _JAVASOFT_LINUX_LARGEFILE_SUPPORT_H_ */
+/* define compatibility macros */
+#define off64_t off_t
+#define stat64 stat
+
+#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 pread64 pread
+#define pwrite64 pwrite
+
+#endif /* _JAVASOFT_BSD_LARGEFILE_SUPPORT_H_ */
--- jdk/src/solaris/hpi/native_threads/include/threads_md.h
+++ jdk/src/solaris/hpi/native_threads/include/threads_md.h
@@ -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
+++ jdk/src/solaris/hpi/native_threads/src/condvar_md.c
@@ -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
+++ jdk/src/solaris/hpi/native_threads/src/monitor_md.c
@@ -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/sys_api_td.c
+++ jdk/src/solaris/hpi/native_threads/src/sys_api_td.c
@@ -39,6 +39,10 @@
#include <sys/ioctl.h>
#endif
+#ifdef __OpenBSD__
+#include <sys/ioctl.h>
+#endif
+
#include <sys/socket.h>
#include <setjmp.h>
#include <signal.h>
@@ -57,6 +61,10 @@
#error If there was no policy change, this could be a makefile error.
#endif
+#if defined(_ALLBSD_SOURCE) && defined(NO_INTERRUPTIBLE_IO)
+#error If there was no policy change, this could be a makefile error.
+#endif
+
#ifdef NO_INTERRUPTIBLE_IO
#undef CLOSEIO
#else
--- jdk/src/solaris/hpi/native_threads/src/threads_bsd.c
+++ jdk/src/solaris/hpi/native_threads/src/threads_bsd.c
@@ -23,79 +23,44 @@
* questions.
*/
-/*
- * Implementation of HPI that can not be expressed with POSIX threads.
- * Note that even if you are building with USE_PTHREADS, we have to
- * explicitly undef it here because pthread.h and thread.h can not be
- * included in the same file, and this file needs only thread.h.
- */
-#undef USE_PTHREADS
+#ifdef __APPLE__
+
+/* 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"
-#include <thread.h>
-#include <sys/lwp.h>
+#include <sys/types.h>
+#include <sys/sysctl.h>
+
+#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
+
+#include <time.h>
+#include <string.h>
#include <signal.h>
#include <sys/signal.h>
#include <sys/resource.h>
-#include <sys/procfs.h>
#include <stdlib.h>
#include <string.h>
-#include <fcntl.h>
#include <errno.h>
-#include <sys/syscall.h>
-extern int syscall(int, ...);
-
-
-/*
- * Forward declarations.
- */
-static int procfd;
-static void stop_lwps();
-static void clear_onproc_flags();
-static void restart_lwps();
-static void MakeProcName(register char *procname, register pid_t pid);
-static void GC_msec_sleep(int n);
-
-
-/*
- * Make sure that we link against a verion of libthread that has at least
- * the bug fixes and the interface for getting the stack from threads that
- * aren't on LWPs. Otherwise we should exit with some informative message.
- */
-extern ulong_t __gettsp(thread_t);
-
-static const char * gettspMessage =
-"You must install a Bsd patch to run the native threads version of the\n"
-"Java runtime. The green threads version will work without this patch.\n"
-"Please check the native threads release notes for more information.\n"
-"\n"
-"If you are embedding the VM in a native application, please make sure that\n"
-"the native application is linked with libthread.so (-lthread).\n"
-"\n"
-"Exiting.\n";
-
-static void
-checkForCorrectLibthread()
-{
- if (&__gettsp == 0) {
- fprintf(stderr, gettspMessage);
- exit(1);
- }
-}
-#ifdef __GNUC__
-static void checkForCorrectLibthread() __attribute__((constructor));
-#else
-#pragma init(checkForCorrectLibthread)
-#endif
-
-#pragma weak __gettsp
-
-
/*
* Suspend said thread. Used to implement java.lang.Thread.suspend(),
* which is deprecated.
@@ -103,10 +68,16 @@
int
np_suspend(sys_thread_t *tid)
{
- return thr_suspend(tid->sys_thread);
+#ifdef __APPLE__
+ if (thread_suspend(pthread_mach_thread_np(tid->sys_thread)) == KERN_SUCCESS)
+#else
+ if (pthread_suspend_np(tid->sys_thread) == 0)
+#endif
+ return SYS_OK;
+ else
+ return SYS_ERR;
}
-
/*
* Resume a suspended thread. Used to implement java.lang.Thread.resume(),
* which is deprecated.
@@ -114,7 +85,14 @@
int
np_continue(sys_thread_t *tid)
{
- return thr_continue(tid->sys_thread);
+#ifdef __APPLE__
+ if (thread_resume(pthread_mach_thread_np(tid->sys_thread)) == KERN_SUCCESS)
+#else
+ if (pthread_resume_np(tid->sys_thread) == 0)
+#endif
+ return SYS_OK;
+ else
+ return SYS_ERR;
}
/*
@@ -122,9 +100,64 @@
*/
void np_initialize_thread(sys_thread_t *tid)
{
- return;
}
+/*
+ * Internal helper function to get stack information about specified thread.
+ */
+#if defined(__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(__FreeBSD__)
+static int
+get_stackinfo(pthread_t tid, pthread_attr_t *attr, void **addr, long *sizep)
+{
+ if (pthread_attr_get_np(tid, attr) == 0 &&
+ pthread_attr_getstack(attr, addr, sizep) == 0)
+ return SYS_OK;
+ return SYS_ERR;
+}
+#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;
+ }
+ return SYS_ERR;
+}
+#else
+static int
+get_stackinfo(pthread_t tid, pthread_attr_t *attr, void **addr, long *sizep)
+{
+ if (pthread_attr_get_np(tid, attr) == 0 &&
+ pthread_attr_getstackaddr(attr, addr) == 0 &&
+ pthread_attr_getstacksize(attr, sizep) == 0)
+ return SYS_OK;
+ return SYS_ERR;
+}
+#endif
+
+#if !defined(__APPLE__) && !defined(__OpenBSD__)
+static int
+get_stackaddr(pthread_t tid, pthread_attr_t *attr, void **addr)
+{
+ if (pthread_attr_get_np(tid, attr) == 0 &&
+ pthread_attr_getstackaddr(attr, addr) == 0)
+ return SYS_OK;
+ return SYS_ERR;
+}
+#endif
/*
* Get the stack start address, and max stack size for the current thread.
@@ -132,21 +165,19 @@
int
np_stackinfo(void **addr, long *size)
{
- stack_t stkseg;
+#if defined(__APPLE__) || defined(__OpenBSD__)
+ return get_stackinfo(pthread_self(), addr, size);
+#else
+ pthread_attr_t attr;
+ int ret;
- if (thr_stksegment(&stkseg) == 0) {
- *addr = (void *)(stkseg.ss_sp);
- if (thr_main()) {
- struct rlimit r;
- getrlimit(RLIMIT_STACK, &r);
- *size = (long)r.rlim_cur;
- } else {
- *size = (long)(stkseg.ss_size);
- }
- return SYS_OK;
- } else {
- return SYS_ERR; /* thr_stksegment failed. */
+ if (pthread_attr_init(&attr) == 0) {
+ ret = get_stackinfo(pthread_self(), &attr, addr, size);
+ pthread_attr_destroy(&attr);
+ return ret;
}
+ return SYS_ERR;
+#endif
}
/*
@@ -155,309 +186,192 @@
void
np_profiler_init(sys_thread_t *tid)
{
- tid->lwp_id = _lwp_self();
}
int
np_profiler_suspend(sys_thread_t *tid)
{
- return _lwp_suspend(tid->lwp_id);
+ return np_suspend(tid);
}
int
np_profiler_continue(sys_thread_t *tid)
{
- return _lwp_continue(tid->lwp_id);
+ return np_continue(tid);
}
bool_t
np_profiler_thread_is_running(sys_thread_t *tid)
{
- unsigned long sum = 0;
- int i;
- prstatus_t lwpstatus;
- int lwpfd;
- int res;
-
- lwpfd = syscall(SYS_ioctl, procfd, PIOCOPENLWP, &(tid->lwp_id));
- sysAssert(lwpfd >= 0);
-
- retry:
- res = syscall(SYS_ioctl, lwpfd, PIOCSTATUS, &lwpstatus);
- sysAssert(res >= 0);
-
- if (!(lwpstatus.pr_flags & PR_STOPPED)) {
- GC_msec_sleep(1);
- goto retry;
- }
-
- close(lwpfd);
-
-#if defined(sparc)
- sum += lwpstatus.pr_reg[R_SP];
- sum += lwpstatus.pr_reg[R_PC];
-
- sum += lwpstatus.pr_reg[R_G1];
- sum += lwpstatus.pr_reg[R_G2];
- sum += lwpstatus.pr_reg[R_G3];
- sum += lwpstatus.pr_reg[R_G4];
-
- sum += lwpstatus.pr_reg[R_O0];
- sum += lwpstatus.pr_reg[R_O1];
- sum += lwpstatus.pr_reg[R_O2];
- sum += lwpstatus.pr_reg[R_O3];
- sum += lwpstatus.pr_reg[R_O4];
- sum += lwpstatus.pr_reg[R_O5];
-
- sum += lwpstatus.pr_reg[R_I0];
- sum += lwpstatus.pr_reg[R_I1];
- sum += lwpstatus.pr_reg[R_I2];
- sum += lwpstatus.pr_reg[R_I3];
- sum += lwpstatus.pr_reg[R_I4];
- sum += lwpstatus.pr_reg[R_I5];
- sum += lwpstatus.pr_reg[R_I6];
- sum += lwpstatus.pr_reg[R_I7];
-
- sum += lwpstatus.pr_reg[R_L0];
- sum += lwpstatus.pr_reg[R_L1];
- sum += lwpstatus.pr_reg[R_L2];
- sum += lwpstatus.pr_reg[R_L3];
- sum += lwpstatus.pr_reg[R_L4];
- sum += lwpstatus.pr_reg[R_L5];
- sum += lwpstatus.pr_reg[R_L6];
- sum += lwpstatus.pr_reg[R_L7];
-#elif defined(amd64)
- sum += lwpstatus.pr_reg[REG_RIP];
- sum += lwpstatus.pr_reg[REG_RSP];
-
- sum += lwpstatus.pr_reg[REG_RAX];
- sum += lwpstatus.pr_reg[REG_RCX];
- sum += lwpstatus.pr_reg[REG_RDX];
- sum += lwpstatus.pr_reg[REG_RBX];
- sum += lwpstatus.pr_reg[REG_RBP];
- sum += lwpstatus.pr_reg[REG_RSI];
- sum += lwpstatus.pr_reg[REG_RDI];
-
- sum += lwpstatus.pr_reg[REG_R8];
- sum += lwpstatus.pr_reg[REG_R9];
- sum += lwpstatus.pr_reg[REG_R10];
- sum += lwpstatus.pr_reg[REG_R11];
- sum += lwpstatus.pr_reg[REG_R12];
- sum += lwpstatus.pr_reg[REG_R13];
- sum += lwpstatus.pr_reg[REG_R14];
- sum += lwpstatus.pr_reg[REG_R15];
-#elif defined(i386)
- sum += lwpstatus.pr_reg[EIP];
- sum += lwpstatus.pr_reg[UESP];
-
- sum += lwpstatus.pr_reg[EAX];
- sum += lwpstatus.pr_reg[ECX];
- sum += lwpstatus.pr_reg[EDX];
- sum += lwpstatus.pr_reg[EBX];
- sum += lwpstatus.pr_reg[EBP];
- sum += lwpstatus.pr_reg[ESI];
- sum += lwpstatus.pr_reg[EDI];
-#endif
-
- if (tid->last_sum == sum) {
- return FALSE;
- }
- tid->last_sum = sum;
-
return TRUE;
}
-/*
- * If building for Bsd native threads, open up the /proc file
- * descriptor to be used when doing GC. The open is done at JVM start-up so
- * as to reserve this fd, to prevent GC stall due to exhausted fds. This fd
- * will never be closed, and will alwyas be present.
- */
int
np_initialize()
{
- char procname[32];
- MakeProcName(procname, getpid());
- if ((procfd = open(procname, O_RDONLY, 0)) < 0) {
- VM_CALL(jio_fprintf)(stderr, "Cannot open %s for GC", procname);
- return SYS_ERR;
- }
return SYS_OK;
}
-static void
-MakeProcName(register char *procname, register pid_t pid)
-{
- register char * s;
+/* prototypes */
- (void) strcpy(procname, "/proc/00000");
- s = procname + strlen(procname);
- while (pid) {
- *--s = pid%10 + '0';
- pid /= 10;
- }
-}
+static void record_thread_regs();
/*
* 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_single(void)
-{
- int ret;
+{
+ 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;
+ }
+ }
+
+ /* 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;
+}
+#else
+int
+np_single(void)
+{
sysAssert(SYS_QUEUE_LOCKED(sysThreadSelf()));
- stop_lwps();
- ret = SYS_OK;
- return ret;
+ pthread_suspend_all_np();
+ record_thread_regs();
+ return SYS_OK;
}
+#endif
/*
- * Continue threads suspended earlier. But clear their context
- * recorded in sys_thread structure first.
+ * Continue threads suspended earlier.
*/
+#ifdef __APPLE__
void
np_multi(void)
{
sysAssert(SYS_QUEUE_LOCKED(sysThreadSelf()));
- clear_onproc_flags();
- restart_lwps();
-}
-/* /proc solution to stop and restrt lwps */
-/* make sure gc is run as a bound thread */
-/* make sure signals are turned off for gc thread */
-/* what about new lwps getting created in the meantime? */
-
-#define MAX_LWPS 1024
-
-static prstatus_t Mystatus;
-static id_t lwpid_list_buf[MAX_LWPS];
-static id_t oldlwpid_list_buf[MAX_LWPS];
-static sys_thread_t *onproct_list_buf[MAX_LWPS];
-static id_t *lwpid_list = lwpid_list_buf;
-static id_t *oldlwpid_list = oldlwpid_list_buf;
-static sys_thread_t **onproct_list = onproct_list_buf;
-static int lwpid_list_len;
-static int oldlwpid_list_len;
-static int onproct_ix = 0;
-static int gcprio;
-static sigset_t gcmask;
+ mach_msg_type_number_t thr_count, i;
+ thread_act_array_t thr_list;
+ mach_port_t self;
-static void
-clear_onproc_flags()
-{
- int i;
+ self = pthread_mach_thread_np(pthread_self());
- for (i = 0; i < onproct_ix; i++) {
- ((sys_thread_t *)(onproct_list[i]))->onproc = FALSE;
- }
- onproct_ix = 0;
-}
+ /* 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?
-/* Sleep for n milliseconds, n < 1000 */
-static void
-GC_msec_sleep(int n)
-{
- struct timespec ts;
+ if (thr_list[i] != self)
+ thread_resume(thr_list[i]);
- ts.tv_sec = 0;
- ts.tv_nsec = 1000000*n;
- if (syscall(SYS_nanosleep, &ts, 0) < 0) {
- VM_CALL(jio_fprintf)(stderr, "%d\n", errno);
+ mach_port_deallocate(self, thr_list[i]);
}
+
+ vm_deallocate(self, (vm_address_t) thr_list, sizeof(thread_t) * thr_count);
}
+#else
+void
+np_multi(void)
+{
+ sysAssert(SYS_QUEUE_LOCKED(sysThreadSelf()));
+ pthread_resume_all_np();
+}
+#endif
/*
+ * 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.
*/
-#define VALID_SP(sp, bottom, top) \
- (((uintptr_t)(sp)) < ((uintptr_t)(bottom)) && ((uintptr_t)(sp)) > ((uintptr_t)(top)))
-
-static void
-record_lwp_regs(prstatus_t lwpstatus)
-{
- sys_thread_t *tid;
- int i;
-#if defined(sparc)
- register uintptr_t sp = lwpstatus.pr_reg[R_SP];
-#elif defined(amd64)
- register uintptr_t sp = lwpstatus.pr_reg[REG_RSP];
-#elif defined(i386)
- register uintptr_t sp = lwpstatus.pr_reg[UESP];
-#endif
-
- tid = ThreadQueue;
- for (i = 0; i < ActiveThreadCount && tid != 0; i++) {
- if (VALID_SP(sp, tid->stack_bottom, tid->stack_top)) {
- long *regs = tid->regs;
- tid->sp = sp;
- /*
- * The code below relies on N_TRACED_REGS being set
- * correctly for each platform. If you change the
- * number of registers being watched, you should update
- * the define for N_TRACED_REGS
- */
-#if defined(sparc)
- regs[0] = lwpstatus.pr_reg[R_G1];
- regs[1] = lwpstatus.pr_reg[R_G2];
- regs[2] = lwpstatus.pr_reg[R_G3];
- regs[3] = lwpstatus.pr_reg[R_G4];
-
- regs[4] = lwpstatus.pr_reg[R_O0];
- regs[5] = lwpstatus.pr_reg[R_O1];
- regs[6] = lwpstatus.pr_reg[R_O2];
- regs[7] = lwpstatus.pr_reg[R_O3];
- regs[8] = lwpstatus.pr_reg[R_O4];
- regs[9] = lwpstatus.pr_reg[R_O5];
- regs[10] = lwpstatus.pr_reg[R_O6];
- regs[11] = lwpstatus.pr_reg[R_O7];
-#elif defined(amd64)
- regs[0] = lwpstatus.pr_reg[REG_RAX];
- regs[1] = lwpstatus.pr_reg[REG_RCX];
- regs[2] = lwpstatus.pr_reg[REG_RDX];
- regs[3] = lwpstatus.pr_reg[REG_RBX];
- regs[4] = lwpstatus.pr_reg[REG_RBP];
- regs[5] = lwpstatus.pr_reg[REG_RSI];
- regs[6] = lwpstatus.pr_reg[REG_RDI];
- regs[7] = lwpstatus.pr_reg[REG_R8];
- regs[8] = lwpstatus.pr_reg[REG_R9];
- regs[9] = lwpstatus.pr_reg[REG_R10];
- regs[10]= lwpstatus.pr_reg[REG_R11];
- regs[11]= lwpstatus.pr_reg[REG_R12];
- regs[12]= lwpstatus.pr_reg[REG_R13];
- regs[13]= lwpstatus.pr_reg[REG_R14];
- regs[14]= lwpstatus.pr_reg[REG_R15];
-#elif defined(i386)
- regs[0] = lwpstatus.pr_reg[EAX];
- regs[1] = lwpstatus.pr_reg[ECX];
- regs[2] = lwpstatus.pr_reg[EDX];
- regs[3] = lwpstatus.pr_reg[EBX];
- regs[4] = lwpstatus.pr_reg[EBP];
- regs[5] = lwpstatus.pr_reg[ESI];
- regs[6] = lwpstatus.pr_reg[EDI];
-#endif
-
- if (tid->onproc != TRUE) {
- tid->onproc = TRUE;
- onproct_list[onproct_ix++] = tid;
- }
- break;
- }
- tid = tid->next;
- }
-}
static void
record_thread_regs()
{
+ void *addr;
sys_thread_t *tid;
int i;
+#if defined(__APPLE__) || defined(__OpenBSD__)
+ long sz;
+#else
+ 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++) {
@@ -466,7 +380,14 @@
if (tid->sys_thread != 0) {
/* if thread has already been initialized */
- tid->sp = __gettsp(tid->sys_thread);
+#if defined(__APPLE__) || defined(__OpenBSD__)
+ if (get_stackinfo(tid->sys_thread, &addr, &sz) == SYS_OK)
+#else
+ if (get_stackaddr(tid->sys_thread, &attr, &addr) == SYS_OK)
+#endif
+ tid->sp = addr;
+ else
+ tid->sp = 0;
} else {
/*
* thread is still in the process of being initalized.
@@ -475,192 +396,11 @@
*/
tid->sp = 0;
}
-
- /*
- * Clear out the registers since they are no longer live
- * and we don't want to garbage collector to think they are.
- */
-
- for (i = 0; i < N_TRACED_REGS; i++)
- tid->regs[i] = 0;
}
tid = tid->next;
}
-}
-
-static void
-wait_stopped_lwps(void)
-{
- int i, lwpfd;
- prstatus_t lwpstatus;
-
- for (i = 0; i < (int) Mystatus.pr_nlwp; i++) {
- /* if its not me */
- if (lwpid_list[i] != _lwp_self()) {
-
- /* open the lwp and check the status */
- if ((lwpfd = syscall(SYS_ioctl, procfd, PIOCOPENLWP,
- &lwpid_list[i])) < 0) {
-#ifdef MY_DEBUG
- VM_CALL(jio_fprintf)(stderr, "lwpid %d was not found in process\n",
- lwpid_list[i]);
-#endif
- continue;
- }
- memset(&lwpstatus, 0, sizeof(lwpstatus));
- while (1) {
- if (syscall(SYS_ioctl,lwpfd, PIOCSTATUS, &lwpstatus)<0) {
- sysAssert(0);
-#ifdef MY_DEBUG
- VM_CALL(jio_fprintf)(stderr, "PIOCSTATUS failed for lwp %d",
- lwpid_list[i]);
-#endif
- break;
- }
- if (lwpstatus.pr_flags & PR_STOPPED) {
- record_lwp_regs(lwpstatus);
- break;
- }
- GC_msec_sleep(1);
- }
-
- close (lwpfd);
- } /* end of if-me */
- } /* end of for */
-}
-
-static void
-suspend_lwps()
-{
- int i;
- /* pioopen all the lwps and stop them - except the one I am running on */
- for (i = 0; i < (int) Mystatus.pr_nlwp; i++) {
-
- /* open and stop the lwp if its not me */
- if (lwpid_list[i] != _lwp_self()) {
-
- /* PIOCSTOP doesn't work without a writable */
- /* descriptor. And that makes the process */
- /* undebuggable. */
- if (_lwp_suspend(lwpid_list[i]) < 0) {
- /* Could happen if the lwp exited */
- lwpid_list[i] = _lwp_self();
- continue;
- }
- }
- }
-}
-
-static void
-print_lwps()
-{
-#ifdef MY_DEBUG
- /* print all the lwps in the process */
- VM_CALL(jio_fprintf)(stdout, "lwpids ");
- for (i = 0; i < (int) Mystatus.pr_nlwp; i++) {
- if (i == 0) {
- VM_CALL(jio_fprintf)(stdout, "%d", lwpid_list[0]);
- } else if (i != Mystatus.pr_nlwp - 1) {
- VM_CALL(jio_fprintf)(stdout, ", %d", lwpid_list[i]);
- } else {
- VM_CALL(jio_fprintf)(stdout, " and %d", lwpid_list[i]);
- }
- }
-#endif
-}
-
-/* routine to iteratively stop all lwps */
-static void
-stop_lwps()
-{
- int i;
- sigset_t set;
- boolean_t changed;
-
- /* mask all signals */
- (void) sigfillset(&set);
- syscall(SYS_sigprocmask, SIG_SETMASK, &set, &gcmask);
-
- /* run at highest prio so I cannot be preempted */
- thr_getprio(thr_self(), &gcprio);
- thr_setprio(thr_self(), 2147483647); /* #define INT_MAX 2147483647 */
-
- oldlwpid_list_len = 0;
-
- while(1) {
- changed = B_FALSE;
-
- /* Get the # of lwps in the process */
- memset(&Mystatus, 0, sizeof(Mystatus));
- syscall(SYS_ioctl, procfd, PIOCSTATUS, &Mystatus);
-
-#ifdef MY_DEBUG
- VM_CALL(jio_fprintf)(stdout, "Number of lwps in the process is %d\n",
- Mystatus.pr_nlwp);
- VM_CALL(jio_fprintf)(stdout, "My lwp id is %d\n", _lwp_self());
-#endif
- lwpid_list_len = Mystatus.pr_nlwp;
- if (syscall(SYS_ioctl, procfd, PIOCLWPIDS, lwpid_list) == -1) {
-#ifdef MY_DEBUG
- VM_CALL(jio_fprintf)(stderr, "Can't read proc's lwpid list");
+#if !defined(__APPLE__) && !defined(__OpenBSD__)
+ if (attr_inited)
+ pthread_attr_destroy(&attr);
#endif
- return;
- }
-
- print_lwps();
-
- /* suspend all the lwps */
- suspend_lwps();
-
- /* make sure all the lwps have actually stopped */
- wait_stopped_lwps();
-
- /* make sure the list has not changed while you were not looking
- else start all over again */
- if (lwpid_list_len != oldlwpid_list_len) changed = B_TRUE;
- else {
- for (i=0; i<lwpid_list_len; ++i) {
- if (lwpid_list[i] != oldlwpid_list[i]) {
- changed = B_TRUE; break;
- }
- }
- }
- if (!changed) break;
-
- {
- id_t *tmplwpid_list = oldlwpid_list;
- oldlwpid_list = lwpid_list; oldlwpid_list_len = lwpid_list_len;
- lwpid_list = 0; lwpid_list_len = 0;
- lwpid_list = tmplwpid_list;
- }
- }
-
- /* record regs for threads that were not on LWPs */
- record_thread_regs();
-
- return;
-}
-
-
-/* Restart all lwps in process. */
-static void
-restart_lwps()
-{
- int i;
-
- for (i = 0; i < Mystatus.pr_nlwp; i++) {
- if (lwpid_list[i] == _lwp_self()) continue;
- if (_lwp_continue(lwpid_list[i]) < 0) {
-#ifdef MY_DEBUG
- VM_CALL(jio_fprintf)(stderr, "Failed to restart lwp %d\n",lwpid_list[i]);
-#endif
- }
- }
-
- /* restore the old priority of the thread */
- thr_setprio(thr_self(), gcprio);
- /* restore the oldmask */
- syscall(SYS_sigprocmask, SIG_SETMASK, &gcmask, NULL);
-
- print_lwps();
}
--- jdk/src/solaris/hpi/native_threads/src/threads_md.c
+++ jdk/src/solaris/hpi/native_threads/src/threads_md.c
@@ -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
+++ jdk/src/solaris/hpi/src/linker_md.c
@@ -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
/*
* glibc-2.0 libdl is not MT safe. If you are building with any glibc,
@@ -66,6 +74,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.
@@ -95,14 +111,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;
@@ -120,10 +136,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
+++ jdk/src/solaris/hpi/src/memory_md.c
@@ -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
+++ jdk/src/solaris/hpi/src/system_md.c
@@ -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
+++ jdk/src/solaris/instrument/EncodingSupport_md.c
@@ -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
+++ jdk/src/solaris/javavm/export/jvm_md.h
@@ -39,7 +39,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
@@ -66,7 +73,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
+++ jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c
@@ -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>
@@ -43,19 +49,28 @@
#include <limits.h>
#include <stdlib.h>
#include <unistd.h>
+#if defined(__FreeBSD__)
+#include <vm/vm_param.h>
+#endif
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 +139,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 +153,28 @@
avail = (jlong)si.freeswap * si.mem_unit;
return available ? avail : total;
+#elif defined(__FreeBSD__)
+ struct xswdev xsw;
+ size_t mibsize, size;
+ jlong npages;
+ int mib[16], n;
+
+ mibsize = sizeof(mib) / sizeof(mib[0]);
+ if (sysctlnametomib("vm.swap_info", mib, &mibsize) == -1)
+ return (0);
+ for (n = 0, npages = 0; ; n++) {
+ mib[mibsize] = n;
+ size = sizeof(xsw);
+ if (sysctl(mib, mibsize + 1, &xsw, &size, NULL, 0) == -1)
+ break;
+ npages += xsw.xsw_nblks;
+ if (available)
+ npages -= xsw.xsw_used;
+ }
+ return (npages * page_size);
+#else /* _ALLBSD_SOURCE */
+ // throw_internal_error(env, "Unimplemented in BSD");
+ return (0);
#endif
}
@@ -179,7 +216,7 @@
JVM_Close(fd);
return (jlong) psinfo.pr_size * 1024;
-#else /* __linux__ */
+#elif defined(__linux__)
FILE *fp;
unsigned long vsize = 0;
@@ -197,6 +234,31 @@
fclose(fp);
return (jlong)vsize;
+#elif defined(__FreeBSD__)
+ FILE *fp;
+ unsigned long end, start;
+ jlong total = 0;
+
+ if ((fp = fopen("/proc/curproc/map", "r")) == NULL) {
+ throw_internal_error(env, "Unable to open /proc/curproc/map");
+ return -1;
+ }
+
+ for (;;) {
+ // Ignore everything except start and end entries
+ if (fscanf(fp, "0x%lx 0x%lx %*[^\n]\n", &start, &end) != 2 || start > end)
+ break;
+ total += end - start;
+ }
+
+ fclose(fp);
+ return total;
+#else /* _ALLBSD_SOURCE */
+ /*
+ * XXXBSD: there's no way available to get vsize in BSD.
+ */
+ // throw_internal_error(env, "Unimplemented in BSD");
+ return (64 * MB);
#endif
}
@@ -222,9 +284,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,32 +310,79 @@
Java_com_sun_management_UnixOperatingSystem_getFreePhysicalMemorySize
(JNIEnv *env, jobject mbean)
{
+#if defined (__FreeBSD__)
+ static const char *vm_stats[] = {
+ "vm.stats.vm.v_free_count",
+ "vm.stats.vm.v_cache_count",
+ /* "vm.stats.vm.v_inactive_count", */
+ NULL
+ };
+ size_t size;
+ jlong free_pages;
+ u_int i, npages;
+ for (i = 0, free_pages = 0, size = sizeof(npages); vm_stats[i] != NULL; i++) {
+ if (sysctlbyname(vm_stats[i], &npages, &size, NULL, 0) == -1)
+ return 0;
+ free_pages += npages;
+ }
+ return (free_pages * page_size);
+#elif defined(_ALLBSD_SOURCE)
+ // throw_internal_error(env, "Unimplemented in BSD");
+ 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)
{
+#if defined(_ALLBSD_SOURCE) && !defined(_SC_PHYS_PAGES)
+ jlong result;
+ int mib[2];
+ size_t 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)
{
+#if defined(_ALLBSD_SOURCE) && !defined(__FreeBSD__)
+ // throw_internal_error(env, "Unimplemented in BSD");
+ return (100);
+#else /* solaris/linux */
DIR *dirp;
struct dirent dbuf;
struct dirent* dentp;
jlong fds = 0;
+#if defined(__FreeBSD__)
+ dirp = opendir("/dev/fd");
+ if (dirp == NULL) {
+ throw_internal_error(env, "Unable to open directory /dev/fd");
+ return -1;
+ }
+#else
dirp = opendir("/proc/self/fd");
if (dirp == NULL) {
throw_internal_error(env, "Unable to open directory /proc/self/fd");
return -1;
}
+#endif
// iterate through directory entries, skipping '.' and '..'
// each entry represents an open file descriptor.
@@ -282,6 +395,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/java/io/UnixFileSystem_md.c
+++ jdk/src/solaris/native/java/io/UnixFileSystem_md.c
@@ -41,6 +41,11 @@
#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
+#endif
/* -- Field IDs -- */
@@ -58,7 +63,7 @@
"path", "Ljava/lang/String;");
}
-
+#ifndef _ALLBSD_SOURCE
/* -- Large-file support -- */
/* LINUX_FIXME: ifdef __solaris__ here is wrong. We need to move the
@@ -98,6 +103,7 @@
};
#endif /* !_LFS_LARGEFILE */
+#endif /* !_ALLBSD_SOURCE */
typedef int (*STAT64)(const char *, struct stat64 *);
@@ -107,6 +113,7 @@
static STAT64 stat64_ptr = NULL;
#endif
+#ifndef _ALLBSD_SOURCE
#ifndef __linux__
#ifdef __GNUC__
static void init64IO(void) __attribute__((constructor));
@@ -120,7 +127,7 @@
stat64_ptr = (STAT64) dlsym(handle, "_stat64");
dlclose(handle);
}
-
+#endif /* !_ALLBSD_SOURCE */
/* -- Path operations -- */
@@ -485,7 +492,7 @@
#endif
/* Preserve access time */
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
struct stat sb;
if (stat(path, &sb) == 0) {
--- jdk/src/solaris/native/java/io/canonicalize_md.c
+++ jdk/src/solaris/native/java/io/canonicalize_md.c
@@ -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
+++ jdk/src/solaris/native/java/io/io_util_md.c
@@ -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
+++ jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c
@@ -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
+++ jdk/src/solaris/native/java/lang/UNIXProcess_md.c
@@ -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
+
#ifndef STDIN_FILENO
#define STDIN_FILENO 0
#endif
@@ -259,11 +274,89 @@
}
}
+#if defined(__FreeBSD__)
+
+extern pid_t __sys_fork(void);
+
+static pid_t
+jdk_fork_wrapper()
+{
+ pid_t resultPid;
+ typedef void (*void_func)();
+ static void_func func_defer = NULL;
+ static void_func func_undefer = NULL;
+ static int is_libc_r = -1;
+
+ if (is_libc_r == -1) {
+
+ /*
+ * BSDNOTE: Check for loaded symbols.
+ *
+ * If "_thread_kern_sig_defer" symbol is found assume we are
+ * libc_r
+ *
+ * If libc_r is loaded, use fork system call drectly to avoid
+ * problems with using protected pages.
+ *
+ * --phantom
+ */
+ func_defer =
+ (void_func)dlsym(RTLD_DEFAULT, "_thread_kern_sig_defer");
+ func_undefer =
+ (void_func)dlsym(RTLD_DEFAULT, "_thread_kern_sig_undefer");
+ if (func_defer != NULL)
+ is_libc_r = 1;
+ else {
+ is_libc_r = 0;
+ }
+ }
+
+ if (is_libc_r == 0) {
+ /* Not a libc_r */
+ resultPid = fork();
+ } else {
+ (*func_defer)(); /* call _thread_kern_sig_defer() */
+ resultPid = __sys_fork();
+ if (resultPid != 0)
+ (*func_undefer)(); /* call _thread_kern_sig_undefer() */
+ /* leave child with signals disabled, but reenable in parent */
+ }
+
+ return resultPid;
+}
+#endif /* __FreeBSD__ */
+
+#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"
+#else
+#define dirent dirent64
+#define readdir readdir64
+#define FD_DIR "/proc/self/fd"
+#endif
+
static int
closeDescriptors(void)
{
DIR *dp;
- struct dirent64 *dirp;
+ struct dirent *dirp;
int from_fd = FAIL_FILENO + 1;
/* We're trying to close all file descriptors, but opendir() might
@@ -276,13 +369,13 @@
close(from_fd); /* for possible use by opendir() */
close(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
* 6395699: /proc/self/fd fails to report file descriptors >= 1024 on Solaris 9
*/
- while ((dirp = readdir64(dp)) != NULL) {
+ while ((dirp = readdir(dp)) != NULL) {
int fd;
if (isdigit(dirp->d_name[0]) &&
(fd = strtol(dirp->d_name, NULL, 10)) >= from_fd + 2)
@@ -293,6 +386,7 @@
return 1;
}
+#endif /* !__OpenBSD__ */
static void
moveDescriptor(int fd_from, int fd_to)
@@ -449,7 +543,9 @@
* "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)
environ = (char **) envp;
@@ -513,10 +609,15 @@
}
}
+#if defined(__FreeBSD__)
+#undef fork1
+#define fork1() jdk_fork_wrapper()
+#else
#ifndef __solaris__
#undef fork1
#define fork1() fork()
#endif
+#endif
JNIEXPORT jint JNICALL
Java_java_lang_UNIXProcess_forkAndExec(JNIEnv *env,
@@ -578,6 +679,30 @@
if (resultPid == 0) {
/* Child process */
+
+#ifdef __OpenBSD__
+// XXXBSD: Work-around userland pthread implementation issue.
+// Closing file descriptors will reset them to be blocking.
+// This is problematic for the parent when it attemts to use
+// the blocking fd and deadlocks. Setting them to non-blocking
+// in the child prevents the close/dup2 from resetting them.
+ {
+ int flags;
+ flags = fcntl(STDIN_FILENO, F_GETFL, NULL);
+ if (flags != -1)
+ fcntl(STDIN_FILENO, F_SETFL, flags | O_NONBLOCK);
+
+ flags = fcntl(STDOUT_FILENO, F_GETFL, NULL);
+ if (flags != -1)
+ fcntl(STDOUT_FILENO, F_SETFL, flags | O_NONBLOCK);
+
+ flags = fcntl(STDERR_FILENO, F_GETFL, NULL);
+ if (flags != -1)
+ fcntl(STDOUT_FILENO, F_SETFL, flags | O_NONBLOCK);
+ }
+#endif
+
+
/* Close the parent sides of the pipe.
Give the child sides of the pipes the right fileno's.
Closing pipe fds here is redundant, since closeDescriptors()
--- jdk/src/solaris/native/java/lang/java_props_md.c
+++ jdk/src/solaris/native/java/lang/java_props_md.c
@@ -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__
#define CODESET _NL_CTYPE_CODESET_NAME
#else
@@ -52,6 +60,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
@@ -188,7 +197,12 @@
{
char *lc;
lc = setlocale(LC_CTYPE, "");
-#ifndef __linux__
+#if defined(_ALLBSD_SOURCE)
+ if (lc == NULL) {
+ lc = "C";
+ }
+ {
+#elif !defined(__linux__)
if (lc == NULL) {
/*
* 'lc == null' means system doesn't support user's environment
@@ -219,7 +233,7 @@
char *p, encoding_variant[64];
int i, found;
-#ifndef __linux__
+#if !defined(__linux__) && !defined(_ALLBSD_SOURCE)
/*
* Workaround for Solaris bug 4201684: Xlib doesn't like @euro
* locales. Since we don't depend on the libc @euro behavior,
@@ -236,6 +250,13 @@
*p = '\0';
setlocale(LC_ALL, temp);
#endif
+ if (lc == NULL) {
+ strncpy(temp, "C", sizeof(temp)-1);
+ temp[sizeof(temp)-1] = '\0';
+ } else {
+ strncpy(temp, lc, sizeof(temp)-1);
+ temp[sizeof(temp)-1] = '\0';
+ }
strcpy(temp, lc);
@@ -316,6 +337,9 @@
else
p = nl_langinfo(CODESET);
+ if (p == NULL || !strcmp(p, "C") || !strcmp(p, "US-ASCII"))
+ p = ""; // use default
+
/* Convert the bare "646" used on Solaris to a proper IANA name */
if (strcmp(p, "646") == 0)
p = "ISO646-US";
@@ -325,6 +349,7 @@
std_encoding = (*p != '\0') ? p : "ISO8859-1";
+#if !defined(_ALLBSD_SOURCE)
#ifdef __linux__
/*
* Remap the encoding string to a different value for japanese
@@ -355,11 +380,19 @@
std_encoding = "Big5_Solaris";
}
#endif
+#endif /* !_ALLBSD_SOURCE */
sprops.encoding = std_encoding;
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";
@@ -369,6 +402,7 @@
#else
sprops.unicode_encoding = "UnicodeBig";
#endif
+#endif /* _ALLBSD_SOURCE */
/* user properties */
{
@@ -405,12 +439,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
+++ jdk/src/solaris/native/java/net/Inet4AddressImpl.c
@@ -35,17 +35,293 @@
#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(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, *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 */
-#ifndef __GLIBC__
+#if !defined(__GLIBC__) && !defined(_ALLBSD_SOURCE)
/* gethostname() is in libc.so but I can't find a header file for it */
extern int gethostname(char *buf, int buf_len);
#endif
@@ -85,13 +361,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
@@ -172,7 +448,7 @@
}
/* 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);
@@ -185,7 +461,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
@@ -274,7 +550,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
@@ -288,7 +564,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
@@ -310,6 +586,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
+++ jdk/src/solaris/native/java/net/Inet6AddressImpl.c
@@ -32,6 +32,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"
@@ -48,7 +51,7 @@
#define NI_MAXHOST 1025
#endif
-#ifndef __GLIBC__
+#if !defined(__GLIBC__) && !defined(_ALLBSD_SOURCE)
/* gethostname() is in libc.so but I can't find a header file for it */
extern int gethostname(char *buf, int buf_len);
#endif
@@ -71,10 +74,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
@@ -110,7 +121,7 @@
}
}
#endif /* AF_INET6 */
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
}
return (*env)->NewStringUTF(env, hostname);
}
--- jdk/src/solaris/native/java/net/NetworkInterface.c
+++ jdk/src/solaris/native/java/net/NetworkInterface.c
@@ -23,13 +23,13 @@
* questions.
*/
+#include <sys/types.h>
+#include <sys/socket.h>
#include <errno.h>
#include <strings.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <net/if_arp.h>
@@ -47,6 +47,19 @@
#else
#include <sys/sockio.h>
#endif
+#if defined(_ALLBSD_SOURCE)
+#include <sys/param.h>
+#include <sys/ioctl.h>
+#if defined(__FreeBSD__) || defined(__APPLE__)
+#include <net/ethernet.h>
+#include <net/if_var.h>
+#elif defined(__OpenBSD__)
+#include <netinet/if_ether.h>
+#endif
+#include <net/if_dl.h>
+#include <netinet/in_var.h>
+#include <ifaddrs.h>
+#endif
#ifdef __linux__
#define ifr_index ifr_ifindex
@@ -577,6 +590,7 @@
}
+#if !defined(_ALLBSD_SOURCE)
/*
* Enumerates and returns all IPv4 interfaces
*/
@@ -687,6 +701,176 @@
return ifs;
}
+#else /* _ALLBSD_SOURCE */
+
+/*
+ * Enumerates and returns all IPv4 interfaces
+ *
+ * WARNING! Make sure that it's correctly synchronized on future JDK
+ * versions imports!
+ */
+static netif *enumIPv4Interfaces(JNIEnv *env, netif *ifs)
+{
+ int sock;
+ struct ifaddrs *ifa, *origifa;
+
+ sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0);
+ if (sock < 0) {
+ /*
+ * If EPROTONOSUPPORT is returned it means we don't have
+ * IPv4 support so don't throw an exception.
+ */
+ if (errno != EPROTONOSUPPORT) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "Socket creation failed");
+ }
+ return ifs;
+ }
+
+ if (getifaddrs(&origifa) != 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "getifaddrs() function failed");
+ close(sock);
+ 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.
+ *
+ * BSDNOTE: in order to optimize code, interface index detection
+ * logic was added directly to addif().
+ */
+ ifs = addif(env, ifs, ifa->ifa_name, (-1), AF_INET,
+ ifa->ifa_addr, sizeof(struct sockaddr_in), 0);
+
+ /*
+ * If an exception occurred then free the list.
+ */
+ if ((*env)->ExceptionOccurred(env)) {
+ close(sock);
+ freeifaddrs(origifa);
+ freeif(ifs);
+ return NULL;
+ }
+ }
+
+ /*
+ * Free socket and buffer
+ */
+ close(sock);
+ freeifaddrs(origifa);
+ return ifs;
+}
+
+#if defined(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 FreeBSD
+ *
+ * BSDNOTE: it's done in same as IPv4 enumeration and should be carefully
+ * reviewed with each JDK update (according to Solaris/Linux version)
+ */
+static netif *enumIPv6Interfaces(JNIEnv *env, netif *ifs) {
+
+ int sock;
+ struct ifaddrs *ifa, *origifa;
+ struct sockaddr_in6 *sin6;
+ struct in6_ifreq ifr6;
+
+ // Open IPv6 UDP socket.
+ sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0);
+ if (sock < 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "Failed to create IPv6 socket");
+ return ifs;
+ }
+
+ if (getifaddrs(&origifa) != 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "getifaddrs() function failed");
+ close(sock);
+ 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");
+ close(sock);
+ freeifaddrs(origifa);
+ freeif(ifs);
+ return NULL;
+ }
+
+ /* Add to the list. */
+ sin6 = (struct sockaddr_in6 *)&ifr6.ifr_addr;
+ ifs = addif(env, ifs, ifa->ifa_name, (-1), AF_INET6,
+ ifa->ifa_addr, sizeof(struct sockaddr_in6),
+ prefix(&sin6->sin6_addr, sizeof(struct in6_addr)));
+
+ /* If an exception occurred then free the list. */
+ if ((*env)->ExceptionOccurred(env)) {
+ close(sock);
+ freeifaddrs(origifa);
+ freeif(ifs);
+ return NULL;
+ }
+ }
+
+ /*
+ * Free socket and ifaddrs buffer
+ */
+ close(sock);
+ freeifaddrs(origifa);
+ return ifs;
+}
+#endif /* AF_INET6 */
+
+#endif /* !_ALLBSD_SOURCE */
#if defined(__solaris__) && defined(AF_INET6)
/*
@@ -1007,7 +1191,13 @@
JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
return ifs;
}
+#if defined(_ALLBSD_SOURCE)
+ currif->index = if_nametoindex(name);
+ if (currif->index == 0)
+ currif->index = -1;
+#else
currif->index = index;
+#endif
currif->addr = NULL;
currif->childs = NULL;
currif->virtual = isVirtual;
@@ -1295,6 +1485,31 @@
* All bytes to 0 means no hardware address.
*/
return -1;
+#elif defined(_ALLBSD_SOURCE)
+ 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;
#else
struct arpreq arpreq;
struct sockaddr_in* sin;
@@ -1460,7 +1675,7 @@
"Socket creation failed");
} else {
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
memset((char *) &if2, 0, sizeof(if2));
strcpy(if2.ifr_name, name_utf);
--- jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
+++ jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
@@ -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>
@@ -335,7 +335,7 @@
/* The fdObj'fd */
jint fd;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
SOCKADDR addr;
int len;
#endif
@@ -345,26 +345,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.
@@ -387,6 +400,7 @@
NET_Bind(fd, (struct sockaddr *)&addr, len);
}
}
+#endif
#else
JVM_Connect(fd, 0, 0);
#endif
@@ -1056,31 +1070,38 @@
Java_java_net_PlainDatagramSocketImpl_datagramSocketCreate(JNIEnv *env,
jobject this) {
jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID);
- int fd;
-
- int arg = -1;
- int t = 1;
+ int fd, t = 1;
+#ifdef AF_INET6
+ int domain = ipv6_available() ? AF_INET6 : AF_INET;
+#else
+ int domain = AF_INET;
+#endif
if (IS_NULL(fdObj)) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
"Socket closed");
return;
- } else {
-#ifdef AF_INET6
- if (ipv6_available()) {
- fd = JVM_Socket(AF_INET6, SOCK_DGRAM, 0);
- } else
-#endif /* AF_INET6 */
- {
- fd = JVM_Socket(AF_INET, SOCK_DGRAM, 0);
- }
}
- if (fd == JVM_IO_ERR) {
+
+ if ((fd = JVM_Socket(domain, SOCK_DGRAM, 0)) == JVM_IO_ERR) {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
"Error creating socket");
return;
}
+#ifdef AF_INET6
+ /* Disable IPV6_V6ONLY to ensure dual-socket support */
+ if (domain == AF_INET6) {
+ int arg = 0;
+ if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&arg,
+ sizeof(int)) < 0) {
+ NET_ThrowNew(env, errno, "cannot set IPPROTO_IPV6");
+ close(fd);
+ return;
+ }
+ }
+#endif /* AF_INET6 */
+
setsockopt(fd, SOL_SOCKET, SO_BROADCAST, (char*) &t, sizeof(int));
#ifdef __linux__
@@ -1093,7 +1114,7 @@
* On Linux for IPv6 sockets we must set the hop limit
* to 1 to be compatible with default ttl of 1 for IPv4 sockets.
*/
- if (ipv6_available()) {
+ if (domain == AF_INET6) {
int ttl = 1;
setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char *)&ttl,
sizeof(ttl));
@@ -1303,7 +1324,7 @@
/*
* value is an InetAddress.
*/
-#ifdef __solaris__
+#if defined(__solaris__) || defined(_ALLBSD_SOURCE)
if (ipv6_available()) {
mcast_set_if_by_addr_v6(env, this, fd, value);
} else {
@@ -1322,7 +1343,7 @@
/*
* value is a NetworkInterface.
*/
-#ifdef __solaris__
+#if defined(__solaris__) || defined(_ALLBSD_SOURCE)
if (ipv6_available()) {
mcast_set_if_by_if_v6(env, this, fd, value);
} else {
@@ -1399,7 +1420,7 @@
*/
static void setMulticastLoopbackMode(JNIEnv *env, jobject this, int fd,
jint opt, jobject value) {
-#ifdef __solaris__
+#if defined(__solaris__) || defined(_ALLBSD_SOURCE)
if (ipv6_available()) {
mcast_set_loop_v6(env, this, fd, value);
} else {
@@ -1964,7 +1985,7 @@
fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
}
/* setsockopt to be correct ttl */
-#ifdef __solaris__
+#if defined(__solaris__) || defined(_ALLBSD_SOURCE)
if (ipv6_available()) {
setHopLimit(env, fd, ttl);
} else {
@@ -2357,18 +2378,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
+++ jdk/src/solaris/native/java/net/PlainSocketImpl.c
@@ -253,7 +253,12 @@
jboolean stream) {
jobject fdObj, ssObj;
int fd;
- int arg = -1;
+ int type = (stream ? SOCK_STREAM : SOCK_DGRAM);
+#ifdef AF_INET6
+ int domain = ipv6_available() ? AF_INET6 : AF_INET;
+#else
+ int domain = AF_INET;
+#endif
if (socketExceptionCls == NULL) {
jclass c = (*env)->FindClass(env, "java/net/SocketException");
@@ -267,25 +272,29 @@
(*env)->ThrowNew(env, socketExceptionCls, "null fd object");
return;
}
-#ifdef AF_INET6
- if (ipv6_available()) {
- fd = JVM_Socket(AF_INET6, (stream ? SOCK_STREAM: SOCK_DGRAM), 0);
- } else
-#endif /* AF_INET6 */
- {
- fd = JVM_Socket(AF_INET, (stream ? SOCK_STREAM: SOCK_DGRAM), 0);
- }
- if (fd == JVM_IO_ERR) {
+
+ if ((fd = JVM_Socket(domain, type, 0)) == JVM_IO_ERR) {
/* note: if you run out of fds, you may not be able to load
* the exception class, and get a NoClassDefFoundError
* instead.
*/
NET_ThrowNew(env, errno, "can't create socket");
return;
- } else {
- (*env)->SetIntField(env, fdObj, IO_fd_fdID, fd);
}
+#ifdef AF_INET6
+ /* Disable IPV6_V6ONLY to ensure dual-socket support */
+ if (domain == AF_INET6) {
+ int arg = 0;
+ if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&arg,
+ sizeof(int)) < 0) {
+ NET_ThrowNew(env, errno, "cannot set IPPROTO_IPV6");
+ close(fd);
+ return;
+ }
+ }
+#endif /* AF_INET6 */
+
/*
* If this is a server socket then enable SO_REUSEADDR
* automatically and set to non blocking.
@@ -294,9 +303,15 @@
if (ssObj != NULL) {
int arg = 1;
SET_NONBLOCKING(fd);
- JVM_SetSockOpt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&arg,
- sizeof(arg));
+ if (JVM_SetSockOpt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&arg,
+ sizeof(arg)) < 0) {
+ NET_ThrowNew(env, errno, "cannot set SO_REUSEADDR");
+ close(fd);
+ return;
+ }
}
+
+ (*env)->SetIntField(env, fdObj, IO_fd_fdID, fd);
}
/*
@@ -528,9 +543,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");
--- jdk/src/solaris/native/java/net/bsd_close.c
+++ jdk/src/solaris/native/java/net/bsd_close.c
@@ -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
--- jdk/src/solaris/native/java/net/net_util_md.c
+++ jdk/src/solaris/native/java/net/net_util_md.c
@@ -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
@@ -230,7 +247,7 @@
int fd;
void *ipv6_fn;
SOCKADDR sa;
- int sa_len = sizeof(sa);
+ socklen_t sa_len = sizeof(sa);
fd = JVM_Socket(AF_INET6, SOCK_STREAM, 0) ;
if (fd < 0) {
@@ -356,6 +373,7 @@
close(fd);
return JNI_TRUE;
}
+#endif /* DONT_ENABLE_IPV6 */
void
NET_AllocSockaddr(struct sockaddr **him, int *len) {
@@ -710,6 +728,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)
@@ -1107,7 +1129,16 @@
}
#endif
+#ifdef __solaris__
rv = getsockopt(fd, level, opt, result, len);
+#else
+ {
+ socklen_t socklen = *len;
+ rv = getsockopt(fd, level, opt, result, &socklen);
+ *len = socklen;
+ }
+#endif
+
if (rv < 0) {
return rv;
}
@@ -1154,6 +1185,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
@@ -1186,6 +1235,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 need to
* ensure that value is <= max_buf as otherwise we get
@@ -1233,6 +1286,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);
}
--- jdk/src/solaris/native/java/net/net_util_md.h
+++ jdk/src/solaris/native/java/net/net_util_md.h
@@ -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/nio/MappedByteBuffer.c
+++ jdk/src/solaris/native/java/nio/MappedByteBuffer.c
@@ -38,7 +38,11 @@
jlong address, jlong len)
{
jboolean loaded = JNI_TRUE;
+#if defined(_ALLBSD_SOURCE)
+ jint pageSize = getpagesize();
+#else
jint pageSize = sysconf(_SC_PAGESIZE);
+#endif
jint numPages = (len + pageSize - 1) / pageSize;
int result = 0;
int i = 0;
@@ -92,7 +96,11 @@
Java_java_nio_MappedByteBuffer_force0(JNIEnv *env, jobject obj, jlong address,
jlong len)
{
+#if defined(_ALLBSD_SOURCE)
+ jlong pageSize = getpagesize();
+#else
jlong pageSize = sysconf(_SC_PAGESIZE);
+#endif
unsigned long lAddress = address;
jlong offset = lAddress % pageSize;
--- jdk/src/solaris/native/java/util/FileSystemPreferences.c
+++ jdk/src/solaris/native/java/util/FileSystemPreferences.c
@@ -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
+++ jdk/src/solaris/native/java/util/TimeZone_md.c
@@ -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,9 +49,13 @@
#define fileclose fclose
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#ifdef __FreeBSD__
+static const char *ETC_TIMEZONE_FILE = "/var/db/zoneinfo";
+#else
static const char *ETC_TIMEZONE_FILE = "/etc/timezone";
+#endif
static const char *ZONEINFO_DIR = "/usr/share/zoneinfo";
static const char *DEFAULT_ZONEINFO_FILE = "/etc/localtime";
@@ -199,7 +203,9 @@
int fd;
char *buf;
size_t size;
+ char zoneinfo_file[PATH_MAX+1];
+#if defined(__linux__) || defined(__FreeBSD__)
/*
* 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__ || __FreeBSD__ */
/*
* Next, try /etc/localtime to find the zone ID.
@@ -231,6 +238,9 @@
return NULL;
}
+ strlcpy(zoneinfo_file, DEFAULT_ZONEINFO_FILE, PATH_MAX+1);
+
+#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 +249,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 +278,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 +507,7 @@
tz = getenv("TZ");
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
if (tz == NULL) {
#else
#ifdef __solaris__
@@ -532,19 +546,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
+++ jdk/src/solaris/native/sun/awt/CUPSfuncs.c
@@ -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
+++ jdk/src/solaris/native/sun/awt/VDrawingArea.c
@@ -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
+++ jdk/src/solaris/native/sun/awt/X11Color.c
@@ -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
+++ jdk/src/solaris/native/sun/awt/XDrawingArea.c
@@ -30,7 +30,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
+++ jdk/src/solaris/native/sun/awt/awt_Font.c
@@ -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
+++ jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c
@@ -40,6 +40,7 @@
#include <jni.h>
#include <jni_util.h>
#include <jvm.h>
+#include <jvm_md.h>
#include <jlong.h>
#include <stdlib.h>
@@ -51,6 +52,8 @@
#include <dlfcn.h>
#include "Trace.h"
+#include "jvm_md.h"
+
#ifdef NETSCAPE
#include <signal.h>
extern int awt_init_xt;
@@ -122,7 +125,7 @@
*/
#define MAXFRAMEBUFFERS 16
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
typedef struct {
int screen_number;
short x_org;
@@ -600,19 +603,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);
@@ -648,11 +654,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 */
@@ -661,8 +666,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);
@@ -709,11 +714,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 */
@@ -1571,7 +1576,7 @@
{
jobject point = NULL;
#ifndef HEADLESS /* return NULL in HEADLESS, Linux */
-#ifndef __linux__
+#if !defined(__linux__) && !defined(_ALLBSD_SOURCE)
int x,y;
AWT_LOCK();
@@ -1584,7 +1589,7 @@
DTRACE_PRINTLN("unable to call XineramaSolarisCenterFunc: symbol is null");
}
AWT_FLUSH_UNLOCK();
-#endif /* __linux __ */
+#endif /* __linux __ || _ALLBSD_SOURCE */
#endif /* HEADLESS */
return point;
}
@@ -1649,7 +1654,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
+++ jdk/src/solaris/native/sun/awt/awt_InputMethod.c
@@ -69,7 +69,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,
@@ -83,7 +83,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
@@ -101,14 +101,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 */
@@ -148,7 +148,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
@@ -427,7 +427,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);
@@ -533,7 +533,7 @@
pX11IMData = getX11InputMethodData(env, currentX11InputMethodInstance);
if (pX11IMData == NULL) {
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
return False;
#else
return result;
@@ -541,7 +541,7 @@
}
if ((ic = pX11IMData->current_ic) == (XIC)0){
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
return False;
#else
return result;
@@ -650,7 +650,7 @@
return result;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
static StatusWindow *createStatusWindow(
#ifdef XAWT
Window parent) {
@@ -994,7 +994,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
@@ -1051,7 +1051,7 @@
return FALSE ;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
on_the_spot_styles |= XIMStatusNothing;
/*kinput does not support XIMPreeditCallbacks and XIMStatusArea
@@ -1064,7 +1064,7 @@
break;
}
}
-#else /*! __linux__ */
+#else /*! __linux__ && !_ALLBSD_SOURCE */
#ifdef XAWT
on_the_spot_styles |= XIMStatusNothing;
#else /* !XAWT */
@@ -1087,7 +1087,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;
@@ -1135,7 +1135,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,
@@ -1157,7 +1157,7 @@
XFree((void *)status);
XFree((void *)preedit);
}
-#else /* !__linux__ */
+#else /* !__linux__ && !_ALLBSD_SOURCE */
#ifndef XAWT
if (on_the_spot_styles & XIMStatusArea) {
Widget parent;
@@ -1185,7 +1185,7 @@
}
#endif /* XAWT */
XFree((void *)preedit);
-#endif /* __linux__ */
+#endif /* __linux__ || _ALLBSD_SOURCE */
pX11IMData->ic_passive = XCreateIC(X11im,
XNClientWindow, XtWindow(w),
XNFocusWindow, XtWindow(w),
@@ -1344,7 +1344,7 @@
}
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
static void
StatusStartCallback(XIC ic, XPointer client_data, XPointer call_data)
{
@@ -1412,7 +1412,7 @@
finally:
AWT_UNLOCK();
}
-#endif /*__linux__*/
+#endif /* __linux__ || _ALLBSD_SOURCE */
static void CommitStringCallback(XIC ic, XPointer client_data, XPointer call_data) {
JNIEnv *env = GetJNIEnv();
@@ -1514,14 +1514,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, (XIMProc)OpenXIMCallback, NULL);
if (!registered) {
/* directly call openXIM callback */
#endif
OpenXIMCallback(dpy, NULL, NULL);
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
}
#endif
@@ -1585,13 +1585,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;
@@ -1738,14 +1738,14 @@
setXICFocus(pX11IMData->current_ic, req);
currentX11InputMethodInstance = pX11IMData->x11inputmethod;
currentFocusWindow = XtWindow(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
@@ -1762,7 +1762,7 @@
Java_sun_awt_X11InputMethod_turnoffStatusWindow(JNIEnv *env,
jobject this)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
X11InputMethodData *pX11IMData;
StatusWindow *statusWindow;
@@ -1859,7 +1859,7 @@
X11InputMethodData *pX11IMData;
XVaNestedList status;
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
/*do nothing for linux? */
#else
AWT_LOCK();
@@ -1965,7 +1965,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
+++ jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c
@@ -260,7 +260,11 @@
}
}
+#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
+++ jdk/src/solaris/native/sun/awt/awt_MToolkit.c
@@ -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
+++ jdk/src/solaris/native/sun/awt/awt_Mlib.c
@@ -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
+++ jdk/src/solaris/native/sun/awt/awt_Robot.c
@@ -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
+++ jdk/src/solaris/native/sun/awt/awt_util.h
@@ -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
+++ jdk/src/solaris/native/sun/awt/awt_wm.c
@@ -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
+++ jdk/src/solaris/native/sun/awt/awt_wm.h
@@ -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
+++ jdk/src/solaris/native/sun/awt/extutil.h
@@ -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
+++ jdk/src/solaris/native/sun/awt/fontpath.c
@@ -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 <sizecalc.h>
#include <sun_font_FontManager.h>
#ifndef HEADLESS
@@ -59,10 +60,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.
*/
@@ -112,24 +127,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
@@ -357,7 +388,7 @@
#endif /* !HEADLESS */
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
/* from awt_LoadLibrary.c */
JNIEXPORT jboolean JNICALL AWTIsHeadless();
#endif
@@ -482,8 +513,10 @@
*/
fcdirs = getFontConfigLocations();
-#ifdef __linux__
+#if defined(__linux__)
knowndirs = fullLinuxFontPath;
+#elif defined(_ALLBSD_SOURCE)
+ knowndirs = fullBSDFontPath;
#else /* IF SOLARIS */
knowndirs = fullSolarisFontPath;
#endif
@@ -494,7 +527,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();
@@ -502,7 +536,7 @@
x11dirs = getX11FontPath();
}
AWT_UNLOCK();
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
}
#endif
#endif /* !HEADLESS */
@@ -614,7 +648,7 @@
}
#include <dlfcn.h>
-#ifndef __linux__ /* i.e. is solaris */
+#if !(defined(__linux__) || defined(__APPLE__))
#include <link.h>
#endif
@@ -660,9 +694,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
+++ jdk/src/solaris/native/sun/awt/gtk2_interface.c
@@ -30,9 +30,10 @@
#include <string.h>
#include "gtk2_interface.h"
#include "java_awt_Transparency.h"
+#include "jvm_md.h"
#include "sizecalc.h"
-#define GTK2_LIB "libgtk-x11-2.0.so.0"
+#define GTK2_LIB VERSIONED_JNI_LIB_NAME("gtk-x11-2.0", "0")
#define G_TYPE_INVALID G_TYPE_MAKE_FUNDAMENTAL (0)
#define G_TYPE_NONE G_TYPE_MAKE_FUNDAMENTAL (1)
--- jdk/src/solaris/native/sun/awt/list.c
+++ jdk/src/solaris/native/sun/awt/list.c
@@ -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
+++ jdk/src/solaris/native/sun/awt/robot_common.c
@@ -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
+++ jdk/src/solaris/native/sun/font/X11FontScaler.c
@@ -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
+++ jdk/src/solaris/native/sun/font/X11TextRenderer.c
@@ -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
+++ jdk/src/solaris/native/sun/java2d/j2d_md.h
@@ -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
+++ jdk/src/solaris/native/sun/java2d/loops/mlib_ImageZoom_NN.c
@@ -66,6 +66,10 @@
* MLIB_EDGE_SRC_PADDED
*/
+#ifdef __OpenBSD__
+#include <sys/types.h>
+#endif
+#include <machine/endian.h>
#include <mlib_image.h>
#include <mlib_ImageZoom.h>
@@ -102,7 +106,7 @@
/***************************************************************/
-#ifdef _LITTLE_ENDIAN
+#if (BYTE_ORDER == LITTLE_ENDIAN)
static const mlib_u32 mlib_bit_mask4[16] = {
0x00000000u, 0xFF000000u, 0x00FF0000u, 0xFFFF0000u,
@@ -111,7 +115,7 @@
0x0000FFFFu, 0xFF00FFFFu, 0x00FFFFFFu, 0xFFFFFFFFu
};
-#else /* _LITTLE_ENDIAN */
+#else /* BIG_ENDIAN */
static const mlib_u32 mlib_bit_mask4[16] = {
0x00000000u, 0x000000FFu, 0x0000FF00u, 0x0000FFFFu,
@@ -120,7 +124,7 @@
0xFFFF0000u, 0xFFFF00FFu, 0xFFFFFF00u, 0xFFFFFFFFu
};
-#endif /* _LITTLE_ENDIAN */
+#endif /* LITTLE_ENDIAN */
/***************************************************************/
@@ -344,11 +348,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;
/***************************************************************/
@@ -511,11 +515,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)
@@ -540,30 +544,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
+++ jdk/src/solaris/native/sun/java2d/loops/vis_FuncArray.c
@@ -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
+++ jdk/src/solaris/native/sun/java2d/opengl/OGLFuncs_md.h
@@ -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
+++ jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c
@@ -32,6 +32,7 @@
#include "gdefs.h"
#include "jni_util.h"
+#include "jvm_md.h"
#include "awt_Component.h"
#include "awt_GraphicsEnv.h"
@@ -129,7 +130,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);
}
dgaAvailable = JNI_FALSE;
if (lib != NULL) {
--- jdk/src/solaris/native/sun/jdga/dgalock.c
+++ jdk/src/solaris/native/sun/jdga/dgalock.c
@@ -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
+++ jdk/src/solaris/native/sun/management/FileSystemImpl.c
@@ -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
+++ jdk/src/solaris/native/sun/net/dns/ResolverConfigurationImpl.c
@@ -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
+++ jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c
@@ -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>
@@ -109,8 +110,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
+++ jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c
@@ -35,7 +35,7 @@
#include <string.h>
#include <errno.h>
-#if __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
#include <netinet/in.h>
#endif
@@ -81,7 +81,7 @@
rv = connect(fd, 0, 0);
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
{
int len;
SOCKADDR sa;
@@ -91,17 +91,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
+++ jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c
@@ -72,7 +72,7 @@
m.msg_accrightslen = 0;
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
m.msg_control = NULL;
m.msg_controllen = 0;
#endif
@@ -120,7 +120,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
+++ jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c
@@ -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;
}
@@ -278,6 +307,48 @@
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
}
JNIEXPORT jint JNICALL
@@ -329,6 +400,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/FileDispatcher.c
+++ jdk/src/solaris/native/sun/nio/ch/FileDispatcher.c
@@ -32,8 +32,12 @@
#include <sys/socket.h>
#include <fcntl.h>
#include <sys/uio.h>
+#include <unistd.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 */
--- jdk/src/solaris/native/sun/nio/ch/FileKey.c
+++ jdk/src/solaris/native/sun/nio/ch/FileKey.c
@@ -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/KqueueArrayWrapper.c
+++ jdk/src/solaris/native/sun/nio/ch/KqueueArrayWrapper.c
@@ -0,0 +1,186 @@
+/*
+ * Scratched by davidxu@freebsd.org
+ */
+
+#include "jni.h"
+#include "jni_util.h"
+#include "jvm.h"
+#include "jlong.h"
+
+#include "sun_nio_ch_KqueueArrayWrapper.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/time.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static int
+restartable_kevent(int kqfd, struct kevent *changelist, int nchanges,
+ struct kevent *eventlist, int nevents);
+
+static int
+timeout_kevent(int kqfd, struct kevent *changelist, int nchanges,
+ struct kevent *eventlist, int nevents, int timo);
+
+JNIEXPORT jint JNICALL Java_sun_nio_ch_KqueueArrayWrapper_kqueue
+ (JNIEnv *env, jclass cls)
+{
+ int kqfd = kqueue();
+ if (kqfd < 0) {
+ JNU_ThrowIOExceptionWithLastError(env, "Error creating kqueue");
+ return -1;
+ }
+ return kqfd;
+}
+
+JNIEXPORT void JNICALL Java_sun_nio_ch_KqueueArrayWrapper_register
+ (JNIEnv *env, jclass cls, jint kqfd, jint fd, jshort filter)
+{
+ struct kevent ev;
+ struct timespec ts;
+
+ ev.ident = fd;
+ ev.filter = filter;
+ ev.flags = EV_ADD;
+ ev.fflags = 0;
+ ev.data = 0;
+ ev.udata = NULL;
+ ts.tv_sec = 0;
+ ts.tv_nsec = 0;
+ if (kevent(kqfd, &ev, 1, NULL, 0, &ts) < 0) {
+ JNU_ThrowIOExceptionWithLastError(env, "Error register kqueue event");
+ }
+}
+
+JNIEXPORT jint JNICALL Java_sun_nio_ch_KqueueArrayWrapper_kevent
+ (JNIEnv *env, jclass cls, jint kqfd, jlong changelist_addr, jint nchanges,
+ jlong eventlist_addr, jint nevents, jlong timeout)
+{
+ struct kevent *changelist = (struct kevent *)jlong_to_ptr(changelist_addr);
+ struct kevent *eventlist = (struct kevent *)jlong_to_ptr(eventlist_addr);
+ int result;
+
+ if (timeout < 0) {
+ result = restartable_kevent(kqfd, changelist, nchanges,
+ eventlist, nevents);
+ } else {
+ result = timeout_kevent(kqfd, changelist, nchanges, eventlist,
+ nevents, timeout);
+ }
+
+ if (result < 0) {
+ JNU_ThrowIOExceptionWithLastError(env, "Error polling kevent");
+ return -1;
+ }
+ return result;
+}
+
+static int
+restartable_kevent(int kqfd, struct kevent *changelist, int nchanges,
+ struct kevent *eventlist, int nevents)
+{
+ int result;
+
+ for (;;) {
+ result = kevent(kqfd, changelist, nchanges, eventlist,
+ nevents, NULL);
+ if (result == -1 && errno == EINTR) {
+ continue;
+ } else {
+ return result;
+ }
+ }
+}
+
+static int
+timeout_kevent(int kqfd, struct kevent *changelist, int nchanges,
+ struct kevent *eventlist, int nevents, int timo)
+{
+ struct timeval timeout, now, end;
+ int result;
+
+ timeout.tv_sec = timo / 1000;
+ timeout.tv_usec = (timo % 1000) * 1000;
+ gettimeofday(&now, NULL);
+ timeradd(&now, &timeout, &end);
+
+ for (;;) {
+ struct timespec ts;
+
+ ts.tv_sec = timeout.tv_sec;
+ ts.tv_nsec = timeout.tv_usec * 1000;
+ result = kevent(kqfd, changelist, nchanges, eventlist, nevents,
+ &ts);
+ if (result == -1 && (errno == EINTR)) {
+ gettimeofday(&now, NULL);
+ if (timercmp(&now, &end, >=))
+ return 0;
+ timersub(&end, &now, &timeout);
+ } else {
+ return result;
+ }
+ }
+}
+
+JNIEXPORT jint JNICALL Java_sun_nio_ch_KqueueArrayWrapper_keventSize
+ (JNIEnv *env, jclass cls)
+{
+ return sizeof(struct kevent);
+}
+
+JNIEXPORT void JNICALL Java_sun_nio_ch_KqueueArrayWrapper_interrupt
+ (JNIEnv *env, jclass cls, jint fd)
+{
+ int fakebuf[1];
+
+ fakebuf[0] = 1;
+ if (write(fd, fakebuf, 1) < 0) {
+ JNU_ThrowIOExceptionWithLastError(env,
+ "Write to interrupt fd failed");
+ }
+}
+
+JNIEXPORT void JNICALL Java_sun_nio_ch_KqueueArrayWrapper_putKevent
+ (JNIEnv *env, jclass cls, jlong address, jint index, jint fd, jshort flags, jshort filter)
+{
+ struct kevent *ev = (struct kevent *)jlong_to_ptr(address);
+
+ ev[index].ident = fd;
+ ev[index].flags = flags;
+ ev[index].filter = filter;
+ ev[index].fflags = 0;
+ ev[index].data = 0;
+ ev[index].udata = NULL;
+}
+
+JNIEXPORT jshort JNICALL Java_sun_nio_ch_KqueueArrayWrapper_getKeventFilter
+ (JNIEnv *env, jclass cls, jlong address, jint index)
+{
+ struct kevent *ev = (struct kevent *)jlong_to_ptr(address);
+
+ return ev[index].filter;
+}
+
+JNIEXPORT jshort JNICALL Java_sun_nio_ch_KqueueArrayWrapper_getKeventFlags
+ (JNIEnv *env, jclass cls, jlong address, jint index)
+{
+ struct kevent *ev = (struct kevent *)jlong_to_ptr(address);
+
+ return ev[index].flags;
+}
+
+JNIEXPORT jint JNICALL Java_sun_nio_ch_KqueueArrayWrapper_getKeventIdent
+ (JNIEnv *env, jclass cls, jlong address, jint index)
+{
+ struct kevent *ev = (struct kevent *)jlong_to_ptr(address);
+
+ return (int)ev[index].ident;
+}
+
+#ifdef __cplusplus
+}
+#endif
--- jdk/src/solaris/native/sun/nio/ch/NativeThread.c
+++ jdk/src/solaris/native/sun/nio/ch/NativeThread.c
@@ -33,12 +33,20 @@
#include "nio_util.h"
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__)
#include <pthread.h>
#include <sys/signal.h>
/* Also defined in src/solaris/native/java/net/linux_close.c */
#define INTERRUPT_SIGNAL (__SIGRTMAX - 2)
+#else
+#include <pthread.h>
+#include <signal.h>
+
+/* Also defined in src/solaris/native/java/net/bsd_close.c */
+#define INTERRUPT_SIGNAL SIGIO
+#endif
static void
nullHandler(int sig)
@@ -51,7 +59,7 @@
JNIEXPORT void JNICALL
Java_sun_nio_ch_NativeThread_init(JNIEnv *env, jclass cl)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
/* Install the null handler for INTERRUPT_SIGNAL. This might overwrite the
* handler previously installed by java/net/linux_close.c, but that's okay
@@ -74,7 +82,7 @@
JNIEXPORT jlong JNICALL
Java_sun_nio_ch_NativeThread_current(JNIEnv *env, jclass cl)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
return (long)pthread_self();
#else
return -1;
@@ -84,7 +92,7 @@
JNIEXPORT void JNICALL
Java_sun_nio_ch_NativeThread_signal(JNIEnv *env, jclass cl, jlong thread)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
if (pthread_kill((pthread_t)thread, INTERRUPT_SIGNAL))
JNU_ThrowIOExceptionWithLastError(env, "Thread signal failed");
#endif
--- jdk/src/solaris/native/sun/nio/ch/Net.c
+++ jdk/src/solaris/native/sun/nio/ch/Net.c
@@ -65,17 +65,33 @@
jboolean reuse)
{
int fd;
-
+ int type = (stream ? SOCK_STREAM : SOCK_DGRAM);
#ifdef AF_INET6
- if (ipv6_available())
- fd = socket(AF_INET6, (stream ? SOCK_STREAM : SOCK_DGRAM), 0);
- else
-#endif /* AF_INET6 */
- fd = socket(AF_INET, (stream ? SOCK_STREAM : SOCK_DGRAM), 0);
+ int domain = ipv6_available() ? AF_INET6 : AF_INET;
+#else
+ int domain = AF_INET;
+#endif
+ fd = socket(domain, type, 0);
if (fd < 0) {
return handleSocketError(env, errno);
}
+
+#ifdef AF_INET6
+ /* Disable IPV6_V6ONLY to ensure dual-socket support */
+ if (domain == AF_INET6) {
+ int arg = 0;
+ if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&arg,
+ sizeof(int)) < 0) {
+ JNU_ThrowByNameWithLastError(env,
+ JNU_JAVANETPKG "SocketException",
+ "sun.nio.ch.Net.setIntOption");
+ close(fd);
+ return -1;
+ }
+ }
+#endif
+
if (reuse) {
int arg = 1;
if (NET_SetSockOpt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&arg,
@@ -143,10 +159,33 @@
Java_sun_nio_ch_Net_localPort(JNIEnv *env, jclass clazz, jobject fdo)
{
SOCKADDR sa;
- int sa_len = SOCKADDR_LEN;
+ 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);
}
@@ -155,15 +194,79 @@
Java_sun_nio_ch_Net_localInetAddress(JNIEnv *env, jclass clazz, jobject fdo)
{
SOCKADDR sa;
- int sa_len = SOCKADDR_LEN;
+ socklen_t sa_len = SOCKADDR_LEN;
int port;
if (getsockname(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) {
- handleSocketError(env, errno);
- return NULL;
+#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);
}
+#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 */
+
#ifdef NEEDED
@@ -309,9 +412,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/security/jgss/wrapper/NativeFunc.c
+++ jdk/src/solaris/native/sun/security/jgss/wrapper/NativeFunc.c
@@ -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
+++ jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c
@@ -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
+++ jdk/src/solaris/native/sun/security/pkcs11/wrapper/p11_md.c
@@ -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
+++ jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c
@@ -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
+++ jdk/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c
@@ -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
+++ jdk/src/solaris/native/sun/xawt/XWindow.c
@@ -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
+++ jdk/src/solaris/native/sun/xawt/awt_Desktop.c
@@ -24,6 +24,7 @@
*/
#include <jni.h>
+#include <jvm_md.h>
#include <dlfcn.h>
typedef int gboolean;
@@ -36,7 +37,7 @@
gboolean (*gnome_vfs_init) (void);
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) {
#ifdef INTERNAL_BUILD
fprintf(stderr, "can not load libgnomevfs-2.so\n");
@@ -54,7 +55,7 @@
// 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) {
#ifdef INTERNAL_BUILD
fprintf(stderr, "can not load libgnome-2.so\n");
--- jdk/src/solaris/npt/npt_md.h
+++ jdk/src/solaris/npt/npt_md.h
@@ -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
+++ jdk/src/solaris/transport/socket/socket_md.c
@@ -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;
--- langtools/src/share/classes/com/sun/tools/javah/Util.java
+++ langtools/src/share/classes/com/sun/tools/javah/Util.java
@@ -180,6 +180,14 @@
os = "win32";
} else if (os.indexOf("Linux") >= 0) {
os = "Linux";
+ } else if (os.indexOf("FreeBSD") >= 0) {
+ os = "FreeBSD";
+ } else if (os.indexOf("Darwin") >= 0) {
+ os = "Darwin";
+ } else if (os.indexOf("NetBSD") >= 0) {
+ os = "NetBSD";
+ } else if (os.indexOf("OpenBSD") >= 0) {
+ os = "OpenBSD";
}
String arch = System.getProperty("os.arch");
String resname = "com.sun.tools.javah.resources." + os + "_" + arch;