openjdk: update to 8u232b09, rename to openjdk8, native bootstrap

This updates OpenJDK 8 to a newer version and brings a bunch of
changes.

Newly, it is bootstrapped with openjdk7-bootstrap, so it does not
need to download binaries. It can also cross-compile and is patched
for musl and other platforms.

We're newly using the aarch64 port repo in order to get aarch64
JIT. For non-aarch64 platforms, the codebase is the same.

The symlink for /usr/lib/jvm/openjdk is also now gone and we're
using a unified java-VERSION-VENDOR naming.

Also general template cleanup.

[ci skip]
This commit is contained in:
q66 2019-01-30 01:23:44 +01:00 committed by Toyam Cox
parent 300894ea84
commit 6783ab9f47
39 changed files with 1974 additions and 469 deletions

View file

@ -1778,12 +1778,12 @@ libslab.so.0 libmate-control-center-1.8.2_1
liblz4.so.1 liblz4-1.8.2_1
libatrilview.so.3 libatril-1.8.0_1
libatrildocument.so.3 libatril-1.8.0_1
libjawt.so openjdk-jre-8u20_2
libawt.so openjdk-jre-8u20_1
libawt_xawt.so openjdk-jre-8u20_1
libjava.so openjdk-jre-8u20_1
libjli.so openjdk-jre-8u20_1
libjvm.so openjdk-jre-8u20_1
libjawt.so openjdk8-jre-8u20_2
libawt.so openjdk8-jre-8u20_1
libawt_xawt.so openjdk8-jre-8u20_1
libjava.so openjdk8-jre-8u20_1
libjli.so openjdk8-jre-8u20_1
libjvm.so openjdk8-jre-8u20_1
libjawt.so openjdk11-11.0.5+10_1
libawt.so openjdk11-11.0.5+10_1
libawt_xawt.so openjdk11-11.0.5+10_1

View file

@ -21,8 +21,8 @@
awk gawk
emacs emacs
java-environment openjdk
java-runtime openjdk-jre
java-environment openjdk8
java-runtime openjdk8-jre
libudev eudev-libudev
nodejs-runtime nodejs
ntp-daemon chrony

1
srcpkgs/openjdk Symbolic link
View file

@ -0,0 +1 @@
openjdk8

View file

@ -1 +1 @@
openjdk
openjdk8

View file

@ -1 +1 @@
openjdk
openjdk8

View file

@ -1 +1 @@
openjdk
openjdk8

View file

@ -1,12 +0,0 @@
--- old/make/linux/makefiles/gcc.make 2014-04-23 22:07:59.838205838 +0100
+++ new/make/linux/makefiles/gcc.make 2014-04-23 22:07:59.754204533 +0100
@@ -266,6 +266,9 @@
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 3), 1)
OPT_CFLAGS/mulnode.o += $(OPT_CFLAGS/NOOPT)
endif
+ ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 9), 1)
+ OPT_CFLAGS/macroAssembler_x86.o += -fno-devirtualize
+ endif
endif
# Flags for generating make dependency flags.

View file

@ -1,214 +0,0 @@
#!/bin/sh
# Script provided by http://www.linuxfromscratch.org/blfs/view/svn/general/openjdk.html#ojdk-certs
# EB 20141217: removed bashisms
# Simple script to extract x509 certificates and create a JRE cacerts file.
get_args()
{
if test -z "${1}" ; then
showhelp
exit 1
fi
while test -n "${1}" ; do
case "${1}" in
-f | --cafile)
check_arg $1 $2
CAFILE="${2}"
shift 2
;;
-d | --cadir)
check_arg $1 $2
CADIR="${2}"
shift 2
;;
-o | --outfile)
check_arg $1 $2
OUTFILE="${2}"
shift 2
;;
-k | --keytool)
check_arg $1 $2
KEYTOOL="${2}"
shift 2
;;
-s | --openssl)
check_arg $1 $2
OPENSSL="${2}"
shift 2
;;
-h | --help)
showhelp
exit 0
;;
*)
showhelp
exit 1
;;
esac
done
}
check_arg()
{
echo "${2}" | grep -v "^-" > /dev/null
if [ -z "$?" -o ! -n "$2" ]; then
echo "Error: $1 requires a valid argument."
exit 1
fi
}
# The date binary is not reliable on 32bit systems for dates after 2038
mydate()
{
local y=$( echo $1 | cut -d" " -f4 )
local M=$( echo $1 | cut -d" " -f1 )
local d=$( echo $1 | cut -d" " -f2 )
local m
if [ ${d} -lt 10 ]; then d="0${d}"; fi
case $M in
Jan) m="01";;
Feb) m="02";;
Mar) m="03";;
Apr) m="04";;
May) m="05";;
Jun) m="06";;
Jul) m="07";;
Aug) m="08";;
Sep) m="09";;
Oct) m="10";;
Nov) m="11";;
Dec) m="12";;
esac
certdate="${y}${m}${d}"
}
showhelp()
{
echo "`basename ${0}` creates a valid cacerts file for use with IcedTea."
echo ""
echo " -f --cafile The path to a file containing PEM"
echo " formated CA certificates. May not be"
echo " used with -d/--cadir."
echo ""
echo " -d --cadir The path to a directory of PEM formatted"
echo " CA certificates. May not be used with"
echo " -f/--cafile."
echo ""
echo " -o --outfile The path to the output file."
echo ""
echo " -k --keytool The path to the java keytool utility."
echo ""
echo " -s --openssl The path to the openssl utility."
echo ""
echo " -h --help Show this help message and exit."
echo ""
echo ""
}
# Initialize empty variables so that the shell does not pollute the script
CAFILE=""
CADIR=""
OUTFILE=""
OPENSSL=""
KEYTOOL=""
certdate=""
date=""
today=$( date +%Y%m%d )
# Process command line arguments
get_args ${@}
# Handle common errors
if test "${CAFILE}x" = "x" -a "${CADIR}x" = "x" ; then
echo "ERROR! You must provide an x509 certificate store!"
echo "\'$(basename ${0}) --help\' for more info."
echo ""
exit 1
fi
if test "${CAFILE}x" != "x" -a "${CADIR}x" != "x" ; then
echo "ERROR! You cannot provide two x509 certificate stores!"
echo "\'$(basename ${0}) --help\' for more info."
echo ""
exit 1
fi
if test "${KEYTOOL}x" = "x" ; then
echo "ERROR! You must provide a valid keytool program!"
echo "\'$(basename ${0}) --help\' for more info."
echo ""
exit 1
fi
if test "${OPENSSL}x" = "x" ; then
echo "ERROR! You must provide a valid path to openssl!"
echo "\'$(basename ${0}) --help\' for more info."
echo ""
exit 1
fi
if test "${OUTFILE}x" = "x" ; then
echo "ERROR! You must provide a valid output file!"
echo "\'$(basename ${0}) --help\' for more info."
echo ""
exit 1
fi
# Get on with the work
# If using a CAFILE, split it into individual files in a temp directory
if test "${CAFILE}x" != "x" ; then
TEMPDIR=`mktemp -d`
CADIR="${TEMPDIR}"
# Get a list of staring lines for each cert
CERTLIST=`grep -n "^-----BEGIN" "${CAFILE}" | cut -d ":" -f 1`
# Get a list of ending lines for each cert
ENDCERTLIST=`grep -n "^-----END" "${CAFILE}" | cut -d ":" -f 1`
# Start a loop
for certbegin in ${CERTLIST} ; do
for certend in ${ENDCERTLIST} ; do
if test "${certend}" -gt "${certbegin}"; then
break
fi
done
sed -n "${certbegin},${certend}p" "${CAFILE}" > "${CADIR}/${certbegin}.pem"
keyhash=`${OPENSSL} x509 -noout -in "${CADIR}/${certbegin}.pem" -hash`
echo "Generated PEM file with hash: ${keyhash}."
done
fi
# Write the output file
for cert in `find "${CADIR}" -type f -name "*.pem" -o -name "*.crt"`
do
# Make sure the certificate date is valid...
date=$( ${OPENSSL} x509 -enddate -in "${cert}" -noout | sed 's/^notAfter=//' )
mydate "${date}"
if test "${certdate}" -lt "${today}" ; then
echo "${cert} expired on ${certdate}! Skipping..."
unset date certdate
continue
fi
unset date certdate
ls "${cert}"
tempfile=`mktemp`
sed -n "/^-----BEGIN/,/^-----END/p" "${cert}" > "${tempfile}"
echo yes | env LC_ALL=C "${KEYTOOL}" -import \
-alias `basename "${cert}"` \
-keystore "${OUTFILE}" \
-storepass 'changeit' \
-file "${tempfile}"
rm "${tempfile}"
done
if test "${TEMPDIR}x" != "x" ; then
rm -rf "${TEMPDIR}"
fi
exit 0

View file

@ -1,230 +0,0 @@
# Template file for 'openjdk'
# TODO: better places for bin and man?
# TODO: make -headless versions
# TODO: config files?
# TODO: find giflib patch for --with-giflib=system
_java_ver=8
_jdk_update=202
_jdk_build=00
_main_ver=${_java_ver}u${_jdk_update}
_openjdk_version="openjdk-1.8.0_${_jdk_update}"
pkgname=openjdk
version="${_java_ver}u${_jdk_update}b${_jdk_build}"
revision=1
_repo_ver="jdk${version/b/-b}"
nocross=yes
wrksrc="jdk8u-jdk8u${_jdk_update}-b${_jdk_build}/"
build_style=gnu-configure
configure_args="
--prefix=${XBPS_DESTDIR}/${pkgname}-${version}/usr/lib
--with-update-version=${_jdk_update}
--with-build-number=b${_jdk_build}
--with-milestone=fcs
--enable-unlimited-crypto
--with-zlib=system
$(vopt_if oracle_bootstrap --with-boot-jdk=/usr/lib/jvm/oracle-jdk \
--with-boot-jdk=/usr/lib/jvm/openjdk)"
make_build_args="DEBUG_BINARIES=true docs all"
hostmakedepends="pkg-config cpio unzip zip ca-certificates libressl"
case "$XBPS_MACHINE" in
arm*) hostmakedepends+=" $(vopt_if oracle_bootstrap oracle-jdk-arm openjdk)";;
*) hostmakedepends+=" $(vopt_if oracle_bootstrap oracle-jdk openjdk)";;
esac
makedepends="libXrender-devel libXtst-devel libXt-devel
libjpeg-turbo-devel cups-devel freetype-devel alsa-lib-devel"
case "$XBPS_TARGET_MACHINE" in
arm*)
makedepends+=" libffi-devel"
configure_args+=" --with-jvm-variants=zero"
esac
depends="openjdk-jre-${version}_${revision}"
provides="java-environment-${version}_1"
short_desc="OpenJDK Java Development Kit"
maintainer="Toyam Cox <Vaelatern@voidlinux.org>"
license="GPL-3"
homepage="http://openjdk.java.net/"
distfiles="
http://hg.openjdk.java.net/jdk8u/jdk8u/archive/${_repo_ver}.tar.gz>jdk8u-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/jdk8u/jdk8u/corba/archive/${_repo_ver}.tar.gz>corba-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/archive/${_repo_ver}.tar.gz>hotspot-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/archive/${_repo_ver}.tar.gz>jdk-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/jdk8u/jdk8u/jaxws/archive/${_repo_ver}.tar.gz>jaxws-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/jdk8u/jdk8u/jaxp/archive/${_repo_ver}.tar.gz>jaxp-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/jdk8u/jdk8u/langtools/archive/${_repo_ver}.tar.gz>langtools-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/jdk8u/jdk8u/nashorn/archive/${_repo_ver}.tar.gz>nashorn-${_repo_ver}.tar.gz"
checksum="ddc0b51b9887066e9a3e574cd22c715a4cd32c4ef919f1df73854102380496ee
a5058d0d43c3b5353fbc107f145edd6fb2051da6b6354f0f0383ade51d53e89a
e1b8304ba959b790b8b403b7b7dc483307ab1f6eb9a0aea6bf6e57e31417202d
65a51abb20297ae857ab2ce6f8482446c91102f7958da71e6af2ad9c0a9c02d9
117a4fa223cc89957429ace91c90ca1fdb8188cc9266c108a05f438d80032d85
779bc970168f5e9f73d5f7b4515ec01573043bbc358eb1002415657b7df716dc
400c923a881ad44d25b2005911ed76177af9585f2507038bece0836561e08659
ff106807a5eccf16ee22d7d729354d309b0819f09c066222776ec34a04dd8dd9"
# Build is still parallel, but don't use -jN.
disable_parallel_build=yes
build_options="oracle_bootstrap"
build_options_default="oracle_bootstrap"
desc_option_oracle_bootstrap="Bootstrap using Oracle JDK"
alternatives="
java:/usr/bin/java:/usr/lib/jvm/openjdk/bin/java
java:/usr/bin/jjs:/usr/lib/jvm/openjdk/bin/jjs
java:/usr/bin/keytool:/usr/lib/jvm/openjdk/bin/keytool
java:/usr/bin/mkcacerts:/usr/lib/jvm/openjdk/bin/mkcacerts
java:/usr/bin/orbd:/usr/lib/jvm/openjdk/bin/orbd
java:/usr/bin/pack200:/usr/lib/jvm/openjdk/bin/pack200
java:/usr/bin/policytool:/usr/lib/jvm/openjdk/bin/policytool
java:/usr/bin/rmid:/usr/lib/jvm/openjdk/bin/rmid
java:/usr/bin/rmiregistry:/usr/lib/jvm/openjdk/bin/rmiregistry
java:/usr/bin/servertool:/usr/lib/jvm/openjdk/bin/servertool
java:/usr/bin/tnameserv:/usr/lib/jvm/openjdk/bin/tnameserv
java:/usr/bin/unpack200:/usr/lib/jvm/openjdk/bin/unpack200
jdk:/usr/bin/appletviewer:/usr/lib/jvm/openjdk/bin/appletviewer
jdk:/usr/bin/extcheck:/usr/lib/jvm/openjdk/bin/extcheck
jdk:/usr/bin/idlj:/usr/lib/jvm/openjdk/bin/idlj
jdk:/usr/bin/jar:/usr/lib/jvm/openjdk/bin/jar
jdk:/usr/bin/jarsigner:/usr/lib/jvm/openjdk/bin/jarsigner
jdk:/usr/bin/java:/usr/lib/jvm/openjdk/bin/java
jdk:/usr/bin/java-rmi.cgi:/usr/lib/jvm/openjdk/bin/java-rmi.cgi
jdk:/usr/bin/javac:/usr/lib/jvm/openjdk/bin/javac
jdk:/usr/bin/javadoc:/usr/lib/jvm/openjdk/bin/javadoc
jdk:/usr/bin/javah:/usr/lib/jvm/openjdk/bin/javah
jdk:/usr/bin/javap:/usr/lib/jvm/openjdk/bin/javap
jdk:/usr/bin/jcmd:/usr/lib/jvm/openjdk/bin/jcmd
jdk:/usr/bin/jconsole:/usr/lib/jvm/openjdk/bin/jconsole
jdk:/usr/bin/jdb:/usr/lib/jvm/openjdk/bin/jdb
jdk:/usr/bin/jdeps:/usr/lib/jvm/openjdk/bin/jdeps
jdk:/usr/bin/jhat:/usr/lib/jvm/openjdk/bin/jhat
jdk:/usr/bin/jinfo:/usr/lib/jvm/openjdk/bin/jinfo
jdk:/usr/bin/jjs:/usr/lib/jvm/openjdk/bin/jjs
jdk:/usr/bin/jmap:/usr/lib/jvm/openjdk/bin/jmap
jdk:/usr/bin/jps:/usr/lib/jvm/openjdk/bin/jps
jdk:/usr/bin/jrunscript:/usr/lib/jvm/openjdk/bin/jrunscript
jdk:/usr/bin/jsadebugd:/usr/lib/jvm/openjdk/bin/jsadebugd
jdk:/usr/bin/jstack:/usr/lib/jvm/openjdk/bin/jstack
jdk:/usr/bin/jstat:/usr/lib/jvm/openjdk/bin/jstat
jdk:/usr/bin/jstatd:/usr/lib/jvm/openjdk/bin/jstatd
jdk:/usr/bin/keytool:/usr/lib/jvm/openjdk/bin/keytool
jdk:/usr/bin/native2ascii:/usr/lib/jvm/openjdk/bin/native2ascii
jdk:/usr/bin/orbd:/usr/lib/jvm/openjdk/bin/orbd
jdk:/usr/bin/pack200:/usr/lib/jvm/openjdk/bin/pack200
jdk:/usr/bin/policytool:/usr/lib/jvm/openjdk/bin/policytool
jdk:/usr/bin/rmic:/usr/lib/jvm/openjdk/bin/rmic
jdk:/usr/bin/rmid:/usr/lib/jvm/openjdk/bin/rmid
jdk:/usr/bin/rmiregistry:/usr/lib/jvm/openjdk/bin/rmiregistry
jdk:/usr/bin/schemagen:/usr/lib/jvm/openjdk/bin/schemagen
jdk:/usr/bin/serialver:/usr/lib/jvm/openjdk/bin/serialver
jdk:/usr/bin/servertool:/usr/lib/jvm/openjdk/bin/servertool
jdk:/usr/bin/tnameserv:/usr/lib/jvm/openjdk/bin/tnameserv
jdk:/usr/bin/unpack200:/usr/lib/jvm/openjdk/bin/unpack200
jdk:/usr/bin/wsgen:/usr/lib/jvm/openjdk/bin/wsgen
jdk:/usr/bin/wsimport:/usr/lib/jvm/openjdk/bin/wsimport
jdk:/usr/bin/xjc:/usr/lib/jvm/openjdk/bin/xjc
"
CFLAGS="-Wno-error=deprecated-declarations"
# Append CFLAGS to set work around code which gcc6 would
# otherwise regard as out-of-specification and allow it
# to produce a working program.
CFLAGS+=" -Wno-error -std=c++98 -fno-delete-null-pointer-checks -fno-lifetime-dse"
CFLAGS+=" -Wno-deprecated-declarations -Wno-stringop-overflow -Wno-return-type"
post_extract() {
cd ${XBPS_BUILDDIR}/jdk-${_repo_ver}
# gcc6 complains about the signed shift left
vsed -i src/share/native/com/sun/java/util/jar/pack/constants.h \
-e's;(-1)<<13;~0u<<13;g'
# wrong "return false;" instead of "return null;"
vsed -i src/share/native/com/sun/java/util/jar/pack/jni.cpp \
-e"295s;false;null;"
cd ${wrksrc}
chmod +x configure
for subrepo in corba hotspot jdk jaxws jaxp langtools nashorn; do
ln -s ../${subrepo}-${_repo_ver} ${subrepo}
done
cd hotspot
# https://bugs.openjdk.java.net/browse/JDK-8041658
patch -p1 < ${FILESDIR}/002_gcc.make-4.9.patch
# patch supported os versions to include 4 and 4.1
vsed -i ${wrksrc}/hotspot/make/linux/Makefile \
-e "/SUPPORTED_OS_VERSION =/s;\(.*\);\1 4% 4.1% 5%;"
}
do_build() {
# -D_FORTIFY_SOURCE=2 doesn't work with CXX_O_FLAG_NONE="-O0"
CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
make ${makejobs} ${make_build_args}
}
post_install() {
rm -rf ${DESTDIR}/usr/lib/bin
vinstall ${FILESDIR}/mkcacerts 755 usr/lib/jvm/$_openjdk_version/jre/bin
vmkdir usr/lib/jvm/$_openjdk_version/jre/lib/security
sh ${FILESDIR}/mkcacerts \
-d "/usr/share/ca-certificates/" \
-s "/usr/bin/openssl" \
-k "${DESTDIR}/usr/lib/jvm/$_openjdk_version/jre/bin/keytool" \
-o "${DESTDIR}/usr/lib/jvm/$_openjdk_version/jre/lib/security/cacerts"
vlicense ASSEMBLY_EXCEPTION
vlicense LICENSE
vlicense THIRD_PARTY_README
}
openjdk-jre_package() {
shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
short_desc="OpenJDK Java Runtime Environment"
provides="java-runtime-${version}_1"
alternatives="
java:/usr/bin/java:/usr/lib/jvm/openjdk/jre/bin/java
java:/usr/bin/jjs:/usr/lib/jvm/openjdk/jre/bin/jjs
java:/usr/bin/keytool:/usr/lib/jvm/openjdk/jre/bin/keytool
java:/usr/bin/mkcacerts:/usr/lib/jvm/openjdk/jre/bin/mkcacerts
java:/usr/bin/orbd:/usr/lib/jvm/openjdk/jre/bin/orbd
java:/usr/bin/pack200:/usr/lib/jvm/openjdk/jre/bin/pack200
java:/usr/bin/policytool:/usr/lib/jvm/openjdk/jre/bin/policytool
java:/usr/bin/rmid:/usr/lib/jvm/openjdk/jre/bin/rmid
java:/usr/bin/rmiregistry:/usr/lib/jvm/openjdk/jre/bin/rmiregistry
java:/usr/bin/servertool:/usr/lib/jvm/openjdk/jre/bin/servertool
java:/usr/bin/tnameserv:/usr/lib/jvm/openjdk/jre/bin/tnameserv
java:/usr/bin/unpack200:/usr/lib/jvm/openjdk/jre/bin/unpack200
"
pkg_install() {
vmove "usr/lib/jvm/$_openjdk_version/jre"
ln -s $_openjdk_version ${PKGDESTDIR}/usr/lib/jvm/openjdk
vmkdir etc/profile.d
cat >>${PKGDESTDIR}/etc/profile.d/10_openjdk.sh <<EOF
export JAVA_HOME=\${JAVA_HOME=/usr/lib/jvm/$_openjdk_version/jre}
EOF
}
}
openjdk-src_package() {
nostrip=yes
noverifyrdeps=yes
noshlibprovides=yes
short_desc+=" -- sources"
pkg_install() {
vmove "usr/lib/jvm/$_openjdk_version/src.zip"
}
}
openjdk-doc_package() {
nostrip=yes
noverifyrdeps=yes
noshlibprovides=yes
short_desc+=" -- documentation"
pkg_install() {
cd ${wrksrc}
vmkdir usr/share/doc
cp -a build/linux-*/docs/* ${PKGDESTDIR}/usr/share/doc
}
}

1
srcpkgs/openjdk8-doc Symbolic link
View file

@ -0,0 +1 @@
openjdk8

1
srcpkgs/openjdk8-jre Symbolic link
View file

@ -0,0 +1 @@
openjdk8

1
srcpkgs/openjdk8-src Symbolic link
View file

@ -0,0 +1 @@
openjdk8

View file

@ -0,0 +1,135 @@
diff --git icedtea/hotspot/src/os/linux/vm/jvm_linux.cpp icedtea/hotspot/src/os/linux/vm/jvm_linux.cpp
index ba84788..c22281f 100644
--- openjdk/hotspot/src/os/linux/vm/jvm_linux.cpp
+++ openjdk/hotspot/src/os/linux/vm/jvm_linux.cpp
@@ -154,7 +154,9 @@ struct siglabel siglabels[] = {
#ifdef SIGSTKFLT
"STKFLT", SIGSTKFLT, /* Stack fault. */
#endif
+#ifdef SIGCLD
"CLD", SIGCLD, /* Same as SIGCHLD (System V). */
+#endif
"CHLD", SIGCHLD, /* Child status has changed (POSIX). */
"CONT", SIGCONT, /* Continue (POSIX). */
"STOP", SIGSTOP, /* Stop, unblockable (POSIX). */
diff --git icedtea/hotspot/src/os/linux/vm/os_linux.cpp icedtea/hotspot/src/os/linux/vm/os_linux.cpp
index 89ba0ff..e84837a 100644
--- openjdk/hotspot/src/os/linux/vm/os_linux.cpp
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
@@ -94,7 +94,6 @@
# include <string.h>
# include <syscall.h>
# include <sys/sysinfo.h>
-# include <gnu/libc-version.h>
# include <sys/ipc.h>
# include <sys/shm.h>
# include <link.h>
@@ -530,6 +529,13 @@ void os::Linux::hotspot_sigmask(Thread* thread) {
// detecting pthread library
void os::Linux::libpthread_init() {
+#if 1
+ // Hard code Alpine Linux supported musl compatible settings
+ os::Linux::set_glibc_version("glibc 2.9");
+ os::Linux::set_libpthread_version("NPTL");
+ os::Linux::set_is_NPTL();
+ os::Linux::set_is_floating_stack();
+#else
// Save glibc and pthread version strings. Note that _CS_GNU_LIBC_VERSION
// and _CS_GNU_LIBPTHREAD_VERSION are supported in glibc >= 2.3.2. Use a
// generic name for earlier versions.
@@ -588,6 +594,7 @@ void os::Linux::libpthread_init() {
if (os::Linux::is_NPTL() || os::Linux::supports_variable_stack_size()) {
os::Linux::set_is_floating_stack();
}
+#endif
}
/////////////////////////////////////////////////////////////////////////////
@@ -2834,6 +2841,11 @@ extern "C" JNIEXPORT void numa_warn(int number, char *where, ...) { }
extern "C" JNIEXPORT void numa_error(char *where) { }
extern "C" JNIEXPORT int fork1() { return fork(); }
+static void *dlvsym(void *handle, const char *name, const char *ver)
+{
+ return dlsym(handle, name);
+}
+
// Handle request to load libnuma symbol version 1.1 (API v1). If it fails
// load symbol from base version instead.
void* os::Linux::libnuma_dlsym(void* handle, const char *name) {
diff --git openjdk/hotspot/src/os/linux/vm/os_linux.inline.hpp openjdk/hotspot/src/os/linux/vm/os_linux.inline.hpp
index 10d56d8..b9b2b77 100644
--- openjdk/hotspot/src/os/linux/vm/os_linux.inline.hpp
+++ openjdk/hotspot/src/os/linux/vm/os_linux.inline.hpp
@@ -33,7 +33,7 @@
#include <unistd.h>
#include <sys/socket.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <netdb.h>
inline void* os::thread_local_storage_at(int index) {
diff --git openjdk/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp openjdk/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
index d2c10e0..20f657f 100644
--- openjdk/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
+++ openjdk/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
@@ -75,7 +75,7 @@
# include <pwd.h>
# include <poll.h>
# include <ucontext.h>
-# include <fpu_control.h>
+# include <linux/types.h> /* provides __u64 */
#ifdef BUILTIN_SIM
#define REG_SP REG_RSP
diff --git openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp
index 38388cb..2505ba8 100644
--- openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp
+++ openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp
@@ -72,7 +72,6 @@
# include <pwd.h>
# include <poll.h>
# include <ucontext.h>
-# include <fpu_control.h>
#ifdef AMD64
#define REG_SP REG_RSP
@@ -544,6 +543,9 @@ JVM_handle_linux_signal(int sig,
return true; // Mute compiler
}
+#define _FPU_GETCW(cw) __asm__ __volatile__ ("fnstcw %0" : "=m" (*&cw))
+#define _FPU_SETCW(cw) __asm__ __volatile__ ("fldcw %0" : : "m" (*&cw))
+
void os::Linux::init_thread_fpu_state(void) {
#ifndef AMD64
// set fpu to 53 bit precision
diff --git openjdk/hotspot/src/os_cpu/linux_x86/vm/threadLS_linux_x86.hpp openjdk/hotspot/src/os_cpu/linux_x86/vm/threadLS_linux_x86.hpp
index f3f2f26..6b50cfa 100644
--- openjdk/hotspot/src/os_cpu/linux_x86/vm/threadLS_linux_x86.hpp
+++ openjdk/hotspot/src/os_cpu/linux_x86/vm/threadLS_linux_x86.hpp
@@ -32,7 +32,9 @@
// map stack pointer to thread pointer - see notes in threadLS_linux_x86.cpp
#define SP_BITLENGTH 32
#define PAGE_SHIFT 12
+ #ifndef PAGE_SIZE
#define PAGE_SIZE (1UL << PAGE_SHIFT)
+ #endif
static Thread* _sp_map[1UL << (SP_BITLENGTH - PAGE_SHIFT)];
public:
diff --git openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp
index efa0b4e..6df2302 100644
--- openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp
+++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp
@@ -235,7 +235,7 @@ inline int g_isnan(double f) { return isnand(f); }
#elif defined(__APPLE__)
inline int g_isnan(double f) { return isnan(f); }
#elif defined(LINUX) || defined(_ALLBSD_SOURCE)
-inline int g_isnan(float f) { return isnanf(f); }
+inline int g_isnan(float f) { return isnan(f); }
inline int g_isnan(double f) { return isnan(f); }
#else
#error "missing platform-specific definition here"

View file

@ -0,0 +1,22 @@
--- openjdk.orig/hotspot/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp
+++ openjdk/hotspot/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp
@@ -80,7 +80,7 @@
# include <pwd.h>
# include <poll.h>
# include <ucontext.h>
-
+# include <asm/ptrace.h>
address os::current_stack_pointer() {
intptr_t* csp;
--- openjdk.orig/hotspot.orig/src/cpu/ppc/vm/macroAssembler_ppc.cpp
+++ openjdk/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp
@@ -46,6 +46,8 @@
#include "gc_implementation/g1/heapRegion.hpp"
#endif
+#include <asm/ptrace.h>
+
#ifdef PRODUCT
#define BLOCK_COMMENT(str) // nothing
#else

View file

@ -0,0 +1,79 @@
--- openjdk.orig/common/autoconf/configure
+++ openjdk/common/autoconf/configure
@@ -103,7 +103,7 @@
}
# Check for local changes
-check_hg_updates
+run_autogen_or_fail
if test -e $conf_custom_script_dir/generated-configure.sh; then
# Test if open configure is newer than custom configure, if so, custom needs to
--- openjdk.orig/common/autoconf/jdk-options.m4
+++ openjdk/common/autoconf/jdk-options.m4
@@ -159,7 +159,7 @@
AC_SUBST(JVM_VARIANT_ZEROSHARK)
AC_SUBST(JVM_VARIANT_CORE)
- INCLUDE_SA=true
+ AC_CHECK_HEADER(thread_db.h,INCLUDE_SA=true,INCLUDE_SA=false)
if test "x$JVM_VARIANT_ZERO" = xtrue ; then
INCLUDE_SA=false
fi
--- openjdk.orig/hotspot/make/linux/makefiles/defs.make
+++ openjdk/hotspot/make/linux/makefiles/defs.make
@@ -305,6 +305,9 @@
# Serviceability Binaries
# No SA Support for PPC, IA64, ARM or zero
+# or if thread_db.h missing (musl)
+
+ifneq ($(wildcard /usr/include/thread_db.h),)
ADD_SA_BINARIES/x86 = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \
$(EXPORT_LIB_DIR)/sa-jdi.jar
ADD_SA_BINARIES/sparc = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \
@@ -322,6 +322,11 @@
endif
endif
endif
+else
+ADD_SA_BINARIES/x86 =
+ADD_SA_BINARIES/sparc =
+ADD_SA_BINARIES/aarch64 =
+endif
ADD_SA_BINARIES/ppc =
ADD_SA_BINARIES/ia64 =
ADD_SA_BINARIES/arm =
--- openjdk.orig/hotspot/make/linux/makefiles/sa.make
+++ openjdk/hotspot/make/linux/makefiles/sa.make
@@ -59,9 +59,11 @@
# if $(AGENT_DIR) does not exist, we don't build SA
# also, we don't build SA on Itanium or zero.
+# check for thread_db.h too (musl does not have it).
all:
- if [ -d $(AGENT_DIR) -a "$(SRCARCH)" != "ia64" \
+ if [ -d $(AGENT_DIR) -a -f /usr/include/thread_db.h \
+ -a "$(SRCARCH)" != "ia64" \
-a "$(SRCARCH)" != "zero" ] ; then \
$(MAKE) -f sa.make $(GENERATED)/sa-jdi.jar; \
fi
--- openjdk.orig/hotspot/make/linux/makefiles/saproc.make
+++ openjdk/hotspot/make/linux/makefiles/saproc.make
@@ -61,12 +61,15 @@
# if $(AGENT_DIR) does not exist, we don't build SA
# also, we don't build SA on Itanium or zero.
+# check for thread_db.h too (musl does not have it).
+ifneq ($(wildcard /usr/include/thread_db.h),)
ifneq ($(wildcard $(AGENT_DIR)),)
ifneq ($(filter-out ia64 zero,$(SRCARCH)),)
BUILDLIBSAPROC = $(LIBSAPROC)
endif
endif
+endif
ifneq ($(ALT_SASRCDIR),)
ALT_SAINCDIR=-I$(ALT_SASRCDIR) -DALT_SASRCDIR

View file

@ -0,0 +1,14 @@
musl needs LD_LIBRARY_PATH set because when .so is opened with dlopen(/abs/path)
it does not qualify for providing symbols for NEEDED dependency.
--- openjdk.orig/jdk/src/solaris/bin/java_md_solinux.c
+++ openjdk/jdk/src/solaris/bin/java_md_solinux.c
@@ -291,6 +291,8 @@
char *dmllp = NULL;
char *p; /* a utility pointer */
+ return JNI_TRUE;
+
#ifdef AIX
/* We always have to set the LIBPATH on AIX because ld doesn't support $ORIGIN. */
return JNI_TRUE;

View file

@ -0,0 +1,105 @@
diff -ru openjdk.orig/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp
--- openjdk.orig/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp 2017-01-25 04:22:03.000000000 +0000
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp 2017-02-06 11:23:47.041165210 +0000
@@ -46,6 +46,8 @@
#include "zip.h"
+#define uchar unsigned char
+
#ifdef NO_ZLIB
inline bool jar::deflate_bytes(bytes& head, bytes& tail) {
diff -ru openjdk.orig/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h
--- openjdk.orig/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h 2017-01-25 04:22:03.000000000 +0000
+++ openjdk/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h 2017-02-06 11:23:47.047832009 +0000
@@ -23,9 +23,7 @@
* questions.
*/
-#define ushort unsigned short
-#define uint unsigned int
-#define uchar unsigned char
+#include <sys/types.h>
struct unpacker;
diff -ru openjdk.orig/jdk/src/share/native/sun/awt/medialib/mlib_types.h openjdk/jdk/src/share/native/sun/awt/medialib/mlib_types.h
--- openjdk.orig/jdk/src/share/native/sun/awt/medialib/mlib_types.h 2017-01-25 04:22:03.000000000 +0000
+++ openjdk/jdk/src/share/native/sun/awt/medialib/mlib_types.h 2017-02-06 11:23:47.047832009 +0000
@@ -27,6 +27,7 @@
#ifndef MLIB_TYPES_H
#define MLIB_TYPES_H
+#include <stddef.h> /* for NULL */
#include <limits.h>
#if defined(_MSC_VER)
#include <float.h> /* for FLT_MAX and DBL_MAX */
diff -ru openjdk.orig/jdk/src/solaris/native/java/net/Inet4AddressImpl.c openjdk/jdk/src/solaris/native/java/net/Inet4AddressImpl.c
--- openjdk.orig/jdk/src/solaris/native/java/net/Inet4AddressImpl.c 2017-01-25 04:22:03.000000000 +0000
+++ openjdk/jdk/src/solaris/native/java/net/Inet4AddressImpl.c 2017-02-06 11:23:47.047832009 +0000
@@ -47,7 +47,7 @@
#include "java_net_Inet4AddressImpl.h"
-#if defined(__GLIBC__) || (defined(__FreeBSD__) && (__FreeBSD_version >= 601104))
+#if defined(__linux__) || (defined(__FreeBSD__) && (__FreeBSD_version >= 601104))
#define HAS_GLIBC_GETHOSTBY_R 1
#endif
diff -ru openjdk.orig/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
--- openjdk.orig/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2017-01-25 04:22:03.000000000 +0000
+++ openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2017-02-06 11:23:47.047832009 +0000
@@ -41,7 +41,6 @@
#endif
#ifdef __linux__
#include <unistd.h>
-#include <sys/sysctl.h>
#include <sys/utsname.h>
#include <netinet/ip.h>
diff -ru openjdk.orig/jdk/src/solaris/native/java/net/PlainSocketImpl.c openjdk/jdk/src/solaris/native/java/net/PlainSocketImpl.c
--- openjdk.orig/jdk/src/solaris/native/java/net/PlainSocketImpl.c 2017-01-25 04:22:03.000000000 +0000
+++ openjdk/jdk/src/solaris/native/java/net/PlainSocketImpl.c 2017-02-06 11:23:47.047832009 +0000
@@ -43,7 +43,6 @@
#endif
#ifdef __linux__
#include <unistd.h>
-#include <sys/sysctl.h>
#endif
#include "jvm.h"
diff -ru openjdk.orig/jdk/src/solaris/native/java/net/linux_close.c openjdk/jdk/src/solaris/native/java/net/linux_close.c
--- openjdk.orig/jdk/src/solaris/native/java/net/linux_close.c 2017-01-25 04:22:03.000000000 +0000
+++ openjdk/jdk/src/solaris/native/java/net/linux_close.c 2017-02-06 11:23:47.047832009 +0000
@@ -56,7 +56,7 @@
/*
* Signal to unblock thread
*/
-static int sigWakeup = (__SIGRTMAX - 2);
+static int sigWakeup;
/*
* The fd table and the number of file descriptors
@@ -95,6 +95,9 @@
/*
* Setup the signal handler
*/
+#ifndef __AIX
+ sigWakeup = SIGRTMAX - 2;
+#endif
sa.sa_handler = sig_wakeup;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
diff -ru openjdk.orig/jdk/src/solaris/native/sun/nio/ch/NativeThread.c openjdk/jdk/src/solaris/native/sun/nio/ch/NativeThread.c
--- openjdk.orig/jdk/src/solaris/native/sun/nio/ch/NativeThread.c 2017-01-25 04:22:03.000000000 +0000
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/NativeThread.c 2017-02-06 11:23:47.051165409 +0000
@@ -36,7 +36,7 @@
#include <pthread.h>
#include <sys/signal.h>
/* Also defined in net/linux_close.c */
- #define INTERRUPT_SIGNAL (__SIGRTMAX - 2)
+ #define INTERRUPT_SIGNAL (SIGRTMAX - 2)
#elif __solaris__
#include <thread.h>
#include <signal.h>

View file

@ -0,0 +1,154 @@
--- openjdk.orig/jdk/src/aix/native/java/net/aix_close.c
+++ openjdk/jdk/src/aix/native/java/net/aix_close.c
@@ -62,7 +62,7 @@
#include <unistd.h>
#include <errno.h>
-#include <sys/poll.h>
+#include <poll.h>
/*
* Stack allocated by thread when doing blocking operation
--- openjdk.orig/jdk/src/aix/native/sun/nio/ch/AixNativeThread.c
+++ openjdk/jdk/src/aix/native/sun/nio/ch/AixNativeThread.c
@@ -32,7 +32,7 @@
#include "sun_nio_ch_NativeThread.h"
#include <pthread.h>
-#include <sys/signal.h>
+#include <signal.h>
/* Also defined in src/aix/native/java/net/aix_close.c */
#define INTERRUPT_SIGNAL (SIGRTMAX - 1)
--- openjdk.orig/jdk/src/aix/native/sun/nio/ch/AixPollPort.c
+++ openjdk/jdk/src/aix/native/sun/nio/ch/AixPollPort.c
@@ -34,7 +34,7 @@
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <sys/pollset.h>
#include <fcntl.h>
#include <stddef.h>
--- openjdk.orig/jdk/src/macosx/javavm/export/jvm_md.h
+++ openjdk/jdk/src/macosx/javavm/export/jvm_md.h
@@ -60,7 +60,7 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
-#include <sys/signal.h>
+#include <signal.h>
/* O Flags */
--- openjdk.orig/jdk/src/solaris/javavm/export/jvm_md.h
+++ openjdk/jdk/src/solaris/javavm/export/jvm_md.h
@@ -65,7 +65,7 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
-#include <sys/signal.h>
+#include <signal.h>
/* O Flags */
--- openjdk.orig/jdk/src/solaris/native/java/net/PlainSocketImpl.c
+++ openjdk/jdk/src/solaris/native/java/net/PlainSocketImpl.c
@@ -28,7 +28,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#if defined(__linux__) && !defined(USE_SELECT)
-#include <sys/poll.h>
+#include <poll.h>
#endif
#include <netinet/tcp.h> /* Defines TCP_NODELAY, needed for 2.6 */
#include <netinet/in.h>
--- openjdk.orig/jdk/src/solaris/native/java/net/bsd_close.c
+++ openjdk/jdk/src/solaris/native/java/net/bsd_close.c
@@ -36,7 +36,7 @@
#include <sys/uio.h>
#include <unistd.h>
#include <errno.h>
-#include <sys/poll.h>
+#include <poll.h>
/*
* Stack allocated by thread when doing blocking operation
--- openjdk.orig/jdk/src/solaris/native/java/net/linux_close.c
+++ openjdk/jdk/src/solaris/native/java/net/linux_close.c
@@ -34,7 +34,7 @@
#include <sys/uio.h>
#include <unistd.h>
#include <errno.h>
-#include <sys/poll.h>
+#include <poll.h>
/*
* Stack allocated by thread when doing blocking operation
--- openjdk.orig/jdk/src/solaris/native/java/net/net_util_md.h
+++ openjdk/jdk/src/solaris/native/java/net/net_util_md.h
@@ -33,7 +33,7 @@
#include <unistd.h>
#ifndef USE_SELECT
-#include <sys/poll.h>
+#include <poll.h>
#endif
int NET_Timeout(int s, long timeout);
--- openjdk.orig/jdk/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c
@@ -28,7 +28,7 @@
#include "jvm.h"
#include "jlong.h"
#include "sun_nio_ch_DevPollArrayWrapper.h"
-#include <sys/poll.h>
+#include <poll.h>
#include <unistd.h>
#include <sys/time.h>
--- openjdk.orig/jdk/src/solaris/native/sun/nio/ch/NativeThread.c
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/NativeThread.c
@@ -34,7 +34,7 @@
#ifdef __linux__
#include <pthread.h>
- #include <sys/signal.h>
+ #include <signal.h>
/* Also defined in net/linux_close.c */
#define INTERRUPT_SIGNAL (SIGRTMAX - 2)
#elif __solaris__
--- openjdk.orig/jdk/src/solaris/native/sun/nio/ch/Net.c
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/Net.c
@@ -23,7 +23,7 @@
* questions.
*/
-#include <sys/poll.h>
+#include <poll.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
--- openjdk.orig/jdk/src/solaris/native/sun/nio/fs/LinuxWatchService.c
+++ openjdk/jdk/src/solaris/native/sun/nio/fs/LinuxWatchService.c
@@ -32,7 +32,7 @@
#include <dlfcn.h>
#include <sys/types.h>
#include <sys/socket.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <sys/inotify.h>
#include "sun_nio_fs_LinuxWatchService.h"
--- openjdk.orig/jdk/src/solaris/transport/socket/socket_md.c
+++ openjdk/jdk/src/solaris/transport/socket/socket_md.c
@@ -37,7 +37,7 @@
#include <thread.h>
#else
#include <pthread.h>
-#include <sys/poll.h>
+#include <poll.h>
#endif
#include "socket_md.h"

View file

@ -0,0 +1,22 @@
# HG changeset patch
# User andrew
# Date 1398287189 -3600
# Wed Apr 23 22:06:29 2014 +0100
# Node ID 6cb711fa264d25f3592471a81a5b865c505a9fd7
# Parent a8b6c290873cc30d96137bd29724638600317f92
8041658: Use of -fdevirtualize on macroAssembler_x86.o (via -O2) with gcc 4.9.0 creates broken VM
Summary: -fno-devirtualize should be passed when compiling this file.
diff -Nru openjdk.orig/hotspot/make/linux/makefiles/gcc.make openjdk/hotspot/make/linux/makefiles/gcc.make
--- openjdk.orig/hotspot/make/linux/makefiles/gcc.make 2017-04-20 14:31:49.000000000 +0100
+++ openjdk/hotspot/make/linux/makefiles/gcc.make 2017-05-10 14:52:39.297377302 +0100
@@ -259,6 +259,9 @@
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 3), 1)
OPT_CFLAGS/mulnode.o += $(OPT_CFLAGS/NOOPT)
endif
+ ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 9), 1)
+ OPT_CFLAGS/macroAssembler_x86.o += -fno-devirtualize
+ endif
endif
# Need extra inlining to collapse all the templated closures into the hot loop

View file

@ -0,0 +1,113 @@
# HG changeset patch
# User martin
# Date 1494116427 -3600
# Sun May 07 01:20:27 2017 +0100
# Node ID 0bd3170be8c729dfaa88e7aa97449b2f36c650a9
# Parent baf64c88538f477d7f5a0cf90b670108ac312375
8043780, PR3368: Use open(O_CLOEXEC) instead of fcntl(FD_CLOEXEC)
Summary: Use open(O_CLOEXEC) where available; fall back to FD_CLOEXEC when necessary
Reviewed-by: rasbold, dholmes
diff --git a/src/os/linux/vm/os_linux.cpp b/src/os/linux/vm/os_linux.cpp
--- openjdk/hotspot/src/os/linux/vm/os_linux.cpp
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
@@ -5282,38 +5282,16 @@
errno = ENAMETOOLONG;
return -1;
}
- int fd;
int o_delete = (oflag & O_DELETE);
oflag = oflag & ~O_DELETE;
- fd = ::open64(path, oflag, mode);
- if (fd == -1) return -1;
-
- //If the open succeeded, the file might still be a directory
- {
- struct stat64 buf64;
- int ret = ::fstat64(fd, &buf64);
- int st_mode = buf64.st_mode;
-
- if (ret != -1) {
- if ((st_mode & S_IFMT) == S_IFDIR) {
- errno = EISDIR;
- ::close(fd);
- return -1;
- }
- } else {
- ::close(fd);
- return -1;
- }
- }
-
- /*
- * All file descriptors that are opened in the JVM and not
- * specifically destined for a subprocess should have the
- * close-on-exec flag set. If we don't set it, then careless 3rd
- * party native code might fork and exec without closing all
- * appropriate file descriptors (e.g. as we do in closeDescriptors in
- * UNIXProcess.c), and this in turn might:
+
+ /* All file descriptors that are opened in the Java process and not
+ * specifically destined for a subprocess should have the close-on-exec
+ * flag set. If we don't set it, then careless 3rd party native code
+ * might fork and exec without closing all appropriate file descriptors
+ * (e.g. as we do in closeDescriptors in UNIXProcess.c), and this in
+ * turn might:
*
* - cause end-of-file to fail to be detected on some file
* descriptors, resulting in mysterious hangs, or
@@ -5329,12 +5307,49 @@
* 4843136: (process) pipe file descriptor from Runtime.exec not being closed
* 6339493: (process) Runtime.exec does not close all file descriptors on Solaris 9
*/
+ // Modern Linux kernels (after 2.6.23 2007) support O_CLOEXEC with open().
+ // O_CLOEXEC is preferable to using FD_CLOEXEC on an open file descriptor
+ // because it saves a system call and removes a small window where the flag
+ // is unset. On ancient Linux kernels the O_CLOEXEC flag will be ignored
+ // and we fall back to using FD_CLOEXEC (see below).
+#ifdef O_CLOEXEC
+ oflag |= O_CLOEXEC;
+#endif
+
+ int fd = ::open64(path, oflag, mode);
+ if (fd == -1) return -1;
+
+ //If the open succeeded, the file might still be a directory
+ {
+ struct stat64 buf64;
+ int ret = ::fstat64(fd, &buf64);
+ int st_mode = buf64.st_mode;
+
+ if (ret != -1) {
+ if ((st_mode & S_IFMT) == S_IFDIR) {
+ errno = EISDIR;
+ ::close(fd);
+ return -1;
+ }
+ } else {
+ ::close(fd);
+ return -1;
+ }
+ }
+
#ifdef FD_CLOEXEC
- {
- int flags = ::fcntl(fd, F_GETFD);
- if (flags != -1)
- ::fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
+ // Validate that the use of the O_CLOEXEC flag on open above worked.
+ // With recent kernels, we will perform this check exactly once.
+ static sig_atomic_t O_CLOEXEC_is_known_to_work = 0;
+ if (!O_CLOEXEC_is_known_to_work) {
+ int flags = ::fcntl(fd, F_GETFD);
+ if (flags != -1) {
+ if ((flags & FD_CLOEXEC) != 0)
+ O_CLOEXEC_is_known_to_work = 1;
+ else
+ ::fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
}
+ }
#endif
if (o_delete != 0) {

View file

@ -0,0 +1,28 @@
# HG changeset patch
# User sgehwolf
# Date 1468778064 -3600
# Sun Jul 17 18:54:24 2016 +0100
# Node ID 6000574e256d84b2bab5cb9f0e2e2fa4ffa587f3
# Parent bb14c5df70880af9e947b5a7b4b258b62d23931a
S8078504, PR3094: Zero fails to build
Reviewed-by: kvn, simonis
diff --git openjdk.orig/hotspot/src/cpu/zero/vm/vm_version_zero.hpp openjdk/hotspot/src/cpu/zero/vm/vm_version_zero.hpp
--- openjdk.orig/hotspot/src/cpu/zero/vm/vm_version_zero.hpp
+++ openjdk/hotspot/src/cpu/zero/vm/vm_version_zero.hpp
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2007 Red Hat, Inc.
+ * Copyright 2015 Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -34,6 +34,7 @@
static const char* cpu_features() {
return "";
}
+ static void initialize();
};
#endif // CPU_ZERO_VM_VM_VERSION_ZERO_HPP

View file

@ -0,0 +1,23 @@
# HG changeset patch
# User vlivanov
# Date 1447818025 0
# Wed Nov 18 03:40:25 2015 +0000
# Node ID cbdd812ea25e27919983c363fd416b492846e426
# Parent 3b05ef40e997e8234f396a55cf238e9b01472f12
8087218, PR2740: Constant fold loads from final instance fields in VM anonymous classes
Reviewed-by: jrose, rbackman
diff -Nru openjdk.orig/hotspot/src/share/vm/ci/ciField.cpp openjdk/hotspot/src/share/vm/ci/ciField.cpp
--- openjdk.orig/hotspot/src/share/vm/ci/ciField.cpp 2017-04-20 14:31:49.000000000 +0100
+++ openjdk/hotspot/src/share/vm/ci/ciField.cpp 2017-05-10 14:55:11.722924914 +0100
@@ -187,6 +187,10 @@
// Even if general trusting is disabled, trust system-built closures in these packages.
if (holder->is_in_package("java/lang/invoke") || holder->is_in_package("sun/invoke"))
return true;
+ // Trust VM anonymous classes. They are private API (sun.misc.Unsafe) and can't be serialized,
+ // so there is no hacking of finals going on with them.
+ if (holder->is_anonymous())
+ return true;
// Trust Atomic*FieldUpdaters: they are very important for performance, and make up one
// more reason not to use Unsafe, if their final fields are trusted. See more in JDK-8140483.
if (holder->name() == ciSymbol::java_util_concurrent_atomic_AtomicIntegerFieldUpdater_Impl() ||

View file

@ -0,0 +1,34 @@
# HG changeset patch
# User simonis
# Date 1466155884 -7200
# Fri Jun 17 11:31:24 2016 +0200
# Node ID 4b40867e627dd9043bc67a4795caa9834ef69478
# Parent 3fc29347b27fdd2075e6ec6d80bb26ab2bf667c1
8158260, PR2991, RH1341258: PPC64: unaligned Unsafe.getInt can lead to the generation of illegal instructions
Summary: Adjust instruction generation. Includes portions of 8026049 for test case.
Reviewed-by: goetz
Contributed-by: gromero@linux.vnet.ibm.com, horii@jp.ibm.com
diff -Nru openjdk.orig/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp openjdk/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp
--- openjdk.orig/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp 2018-03-21 09:00:58.000000000 +0000
+++ openjdk/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp 2018-03-21 09:54:01.579562708 +0000
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2013, Red Hat Inc.
* Copyright (c) 1997, 2012, Oracle and/or its affiliates.
+ * Copyright (c) 2015, Red Hat Inc. All rights reserved.
* All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -296,6 +296,11 @@
UsePopCountInstruction = true;
}
+ // This machine allows unaligned memory accesses
+ if (FLAG_IS_DEFAULT(UseUnalignedAccesses)) {
+ FLAG_SET_DEFAULT(UseUnalignedAccesses, true);
+ }
+
if (FLAG_IS_DEFAULT(UseMontgomeryMultiplyIntrinsic)) {
UseMontgomeryMultiplyIntrinsic = true;
}

View file

@ -0,0 +1,462 @@
# HG changeset patch
# User simonis
# Date 1466155884 -7200
# Fri Jun 17 11:31:24 2016 +0200
# Node ID 4b40867e627dd9043bc67a4795caa9834ef69478
# Parent 3fc29347b27fdd2075e6ec6d80bb26ab2bf667c1
8158260, PR2991, RH1341258: PPC64: unaligned Unsafe.getInt can lead to the generation of illegal instructions
Summary: Adjust instruction generation. Includes portions of 8026049 for test case.
Reviewed-by: goetz
Contributed-by: gromero@linux.vnet.ibm.com, horii@jp.ibm.com
diff -Nru openjdk.orig/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp
--- openjdk.orig/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp 2019-01-16 07:13:59.000000000 +0000
+++ openjdk/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp 2019-01-25 13:46:51.799453897 +0000
@@ -201,6 +201,11 @@
FLAG_SET_DEFAULT(UseSHA512Intrinsics, false);
}
+ // This machine allows unaligned memory accesses
+ if (FLAG_IS_DEFAULT(UseUnalignedAccesses)) {
+ FLAG_SET_DEFAULT(UseUnalignedAccesses, true);
+ }
+
if (FLAG_IS_DEFAULT(UseMontgomeryMultiplyIntrinsic)) {
UseMontgomeryMultiplyIntrinsic = true;
}
diff -Nru openjdk.orig/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp openjdk/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp
--- openjdk.orig/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp 2019-01-16 07:13:59.000000000 +0000
+++ openjdk/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp 2019-01-25 13:46:51.799453897 +0000
@@ -375,6 +375,13 @@
(cache_line_size > ContendedPaddingWidth))
ContendedPaddingWidth = cache_line_size;
+ // This machine does not allow unaligned memory accesses
+ if (UseUnalignedAccesses) {
+ if (!FLAG_IS_DEFAULT(UseUnalignedAccesses))
+ warning("Unaligned memory access is not available on this CPU");
+ FLAG_SET_DEFAULT(UseUnalignedAccesses, false);
+ }
+
#ifndef PRODUCT
if (PrintMiscellaneous && Verbose) {
tty->print_cr("L1 data cache line size: %u", L1_data_cache_line_size());
diff -Nru openjdk.orig/hotspot/src/cpu/x86/vm/vm_version_x86.cpp openjdk/hotspot/src/cpu/x86/vm/vm_version_x86.cpp
--- openjdk.orig/hotspot/src/cpu/x86/vm/vm_version_x86.cpp 2019-01-16 07:13:59.000000000 +0000
+++ openjdk/hotspot/src/cpu/x86/vm/vm_version_x86.cpp 2019-01-25 13:46:51.799453897 +0000
@@ -1033,6 +1033,11 @@
(cache_line_size > ContendedPaddingWidth))
ContendedPaddingWidth = cache_line_size;
+ // This machine allows unaligned memory accesses
+ if (FLAG_IS_DEFAULT(UseUnalignedAccesses)) {
+ FLAG_SET_DEFAULT(UseUnalignedAccesses, true);
+ }
+
#ifndef PRODUCT
if (PrintMiscellaneous && Verbose) {
tty->print_cr("Logical CPUs per core: %u",
diff -Nru openjdk.orig/hotspot/src/cpu/zero/vm/vm_version_zero.cpp openjdk/hotspot/src/cpu/zero/vm/vm_version_zero.cpp
--- openjdk.orig/hotspot/src/cpu/zero/vm/vm_version_zero.cpp 2019-01-16 07:13:59.000000000 +0000
+++ openjdk/hotspot/src/cpu/zero/vm/vm_version_zero.cpp 2019-01-25 13:46:51.799453897 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright 2009 Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -36,4 +36,11 @@
# include "os_bsd.inline.hpp"
#endif
-// This file is intentionally empty
+
+void VM_Version::initialize() {
+ // This machine does not allow unaligned memory accesses
+ if (! FLAG_IS_DEFAULT(UseUnalignedAccesses)) {
+ warning("Unaligned memory access is not available on this CPU");
+ FLAG_SET_DEFAULT(UseUnalignedAccesses, false);
+ }
+}
diff -Nru openjdk.orig/hotspot/src/share/vm/prims/unsafe.cpp openjdk/hotspot/src/share/vm/prims/unsafe.cpp
--- openjdk.orig/hotspot/src/share/vm/prims/unsafe.cpp 2019-01-16 07:13:59.000000000 +0000
+++ openjdk/hotspot/src/share/vm/prims/unsafe.cpp 2019-01-25 13:50:10.160334728 +0000
@@ -385,6 +385,24 @@
#endif // not SUPPORTS_NATIVE_CX8
+UNSAFE_ENTRY(jboolean, Unsafe_isBigEndian0(JNIEnv *env, jobject unsafe))
+ UnsafeWrapper("Unsafe_IsBigEndian0");
+ {
+#ifdef VM_LITTLE_ENDIAN
+ return false;
+#else
+ return true;
+#endif
+ }
+UNSAFE_END
+
+UNSAFE_ENTRY(jint, Unsafe_unalignedAccess0(JNIEnv *env, jobject unsafe))
+ UnsafeWrapper("Unsafe_UnalignedAccess0");
+ {
+ return UseUnalignedAccesses;
+ }
+UNSAFE_END
+
#define DEFINE_GETSETOOP(jboolean, Boolean) \
\
UNSAFE_ENTRY(jboolean, Unsafe_Get##Boolean##140(JNIEnv *env, jobject unsafe, jobject obj, jint offset)) \
@@ -1716,6 +1734,11 @@
{CC "fullFence", CC "()V", FN_PTR(Unsafe_FullFence)},
};
+JNINativeMethod cpu_methods[] = {
+ {CC"isBigEndian0", CC"()Z", FN_PTR(Unsafe_isBigEndian0)},
+ {CC"unalignedAccess0", CC"()Z", FN_PTR(Unsafe_unalignedAccess0)}
+};
+
#undef CC
#undef FN_PTR
@@ -1815,5 +1838,8 @@
// Fence methods
register_natives("1.8 fence methods", env, unsafecls, fence_methods, sizeof(fence_methods)/sizeof(JNINativeMethod));
+
+ // CPU methods
+ register_natives("1.9 CPU methods", env, unsafecls, cpu_methods, sizeof(cpu_methods)/sizeof(JNINativeMethod));
}
JVM_END
diff -Nru openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp openjdk/hotspot/src/share/vm/runtime/globals.hpp
--- openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp 2019-01-16 07:13:59.000000000 +0000
+++ openjdk/hotspot/src/share/vm/runtime/globals.hpp 2019-01-25 13:46:51.803453833 +0000
@@ -4003,6 +4003,9 @@
product(bool, UseLockedTracing, false, \
"Use locked-tracing when doing event-based tracing") \
\
+ diagnostic(bool, UseUnalignedAccesses, false, \
+ "Use unaligned memory accesses in sun.misc.Unsafe") \
+ \
product_pd(bool, PreserveFramePointer, \
"Use the FP register for holding the frame pointer " \
"and not as a general purpose register.")
diff -Nru openjdk.orig/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeUnalignedAccess.java openjdk/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeUnalignedAccess.java
--- openjdk.orig/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeUnalignedAccess.java 1970-01-01 01:00:00.000000000 +0100
+++ openjdk/hotspot/test/compiler/unsafe/JdkInternalMiscUnsafeUnalignedAccess.java 2019-01-25 13:46:51.803453833 +0000
@@ -0,0 +1,315 @@
+/*
+ * Copyright (c) 2016 SAP SE. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8158260
+ * @summary Test unaligned Unsafe accesses
+ * @modules java.base/jdk.internal.misc
+ * @run main/othervm -Diters=20000 -XX:-UseOnStackReplacement -XX:-BackgroundCompilation JdkInternalMiscUnsafeUnalignedAccess
+ * @author volker.simonis@gmail.com
+ */
+
+import java.lang.reflect.Field;
+import java.nio.ByteOrder;
+import sun.misc.Unsafe;
+
+public class JdkInternalMiscUnsafeUnalignedAccess {
+ static final int ITERS = Integer.getInteger("iters", 20_000);
+ private static final boolean BIG_ENDIAN = ByteOrder.nativeOrder().equals(ByteOrder.BIG_ENDIAN);
+ private static final Unsafe UNSAFE;
+ private static final int SIZE = 1024;
+ private static long memory;
+
+ static {
+ try {
+ Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
+ unsafeField.setAccessible(true);
+ UNSAFE = (Unsafe) unsafeField.get(null);
+ }
+ catch (Exception e) {
+ throw new RuntimeException("Unable to get Unsafe instance.", e);
+ }
+ }
+
+ static int getInt_0() {
+ return UNSAFE.getInt(memory + 0);
+ }
+ static int getInt_1() {
+ return UNSAFE.getInt(memory + 1);
+ }
+ static int getInt_4() {
+ return UNSAFE.getInt(memory + 4);
+ }
+ static int getInt_17() {
+ return UNSAFE.getInt(memory + 17);
+ }
+
+ static long getIntAsLong_0() {
+ return UNSAFE.getInt(memory + 0);
+ }
+ static long getIntAsLong_1() {
+ return UNSAFE.getInt(memory + 1);
+ }
+ static long getIntAsLong_4() {
+ return UNSAFE.getInt(memory + 4);
+ }
+ static long getIntAsLong_17() {
+ return UNSAFE.getInt(memory + 17);
+ }
+
+ static long getLong_0() {
+ return UNSAFE.getLong(memory + 0);
+ }
+ static long getLong_1() {
+ return UNSAFE.getLong(memory + 1);
+ }
+ static long getLong_4() {
+ return UNSAFE.getLong(memory + 4);
+ }
+ static long getLong_8() {
+ return UNSAFE.getLong(memory + 8);
+ }
+ static long getLong_17() {
+ return UNSAFE.getLong(memory + 17);
+ }
+
+ static void putInt_0(int i) {
+ UNSAFE.putInt(memory + 0, i);
+ }
+ static void putInt_1(int i) {
+ UNSAFE.putInt(memory + 1, i);
+ }
+ static void putInt_4(int i) {
+ UNSAFE.putInt(memory + 4, i);
+ }
+ static void putInt_17(int i) {
+ UNSAFE.putInt(memory + 17, i);
+ }
+
+ static void putLong_0(long l) {
+ UNSAFE.putLong(memory + 0, l);
+ }
+ static void putLong_1(long l) {
+ UNSAFE.putLong(memory + 1, l);
+ }
+ static void putLong_4(long l) {
+ UNSAFE.putLong(memory + 4, l);
+ }
+ static void putLong_8(long l) {
+ UNSAFE.putLong(memory + 8, l);
+ }
+ static void putLong_17(long l) {
+ UNSAFE.putLong(memory + 17, l);
+ }
+
+ public static void main(String[] args) throws Exception {
+
+ if (!UNSAFE.unalignedAccess()) {
+ System.out.println("Platform is not supporting unaligned access - nothing to test.");
+ return;
+ }
+
+ memory = UNSAFE.allocateMemory(SIZE);
+
+ UNSAFE.putInt(memory + 0, 0x00112233);
+ UNSAFE.putInt(memory + 4, 0x44556677);
+ UNSAFE.putInt(memory + 8, 0x8899aabb);
+ UNSAFE.putInt(memory + 12, 0xccddeeff);
+ UNSAFE.putInt(memory + 16, 0x01234567);
+ UNSAFE.putInt(memory + 20, 0x89abcdef);
+ UNSAFE.putInt(memory + 24, 0x01234567);
+
+ // Unsafe.getInt()
+ int res;
+ for (int i = 0; i < ITERS; i++) {
+ res = getInt_0();
+ if (res != 0x00112233) {
+ throw new Exception(res + " != 0x00112233");
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ res = getInt_1();
+ if (res != (BIG_ENDIAN ? 0x11223344 : 0x77001122)) {
+ throw new Exception(res + " != " + (BIG_ENDIAN ? 0x11223344 : 0x77001122));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ res = getInt_4();
+ if (res != 0x44556677) {
+ throw new Exception(res + " != 0x44556677");
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ res = getInt_17();
+ if (res != (BIG_ENDIAN ? 0x23456789 : 0xef012345)) {
+ throw new Exception(res + " != " + (BIG_ENDIAN ? 0x23456789 : 0xef012345));
+ }
+ }
+
+ // (long)Unsafe.getInt()
+ long lres;
+ for (int i = 0; i < ITERS; i++) {
+ lres = getIntAsLong_0();
+ if (lres != (long)0x00112233) {
+ throw new Exception(lres + " != 0x00112233");
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ lres = getIntAsLong_1();
+ if (lres != (BIG_ENDIAN ? (long)0x11223344 : (long)0x77001122)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? (long)0x11223344 : (long)0x77001122));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ lres = getIntAsLong_4();
+ if (lres != (long)0x44556677) {
+ throw new Exception(lres + " != 0x44556677");
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ lres = getIntAsLong_17();
+ if (lres != (BIG_ENDIAN ? (long)0x23456789 : (long)0xef012345)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? (long)0x23456789 : (long)0xef012345));
+ }
+ }
+
+ // Unsafe.getLong()
+ for (int i = 0; i < ITERS; i++) {
+ lres = getLong_0();
+ if (lres != (BIG_ENDIAN ? 0x0011223344556677L : 0x4455667700112233L)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? 0x0011223344556677L : 0x4455667700112233L));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ lres = getLong_1();
+ if (lres != (BIG_ENDIAN ? 0x1122334455667788L : 0xbb44556677001122L)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? 0x1122334455667788L : 0xbb44556677001122L));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ lres = getLong_4();
+ if (lres != (BIG_ENDIAN ? 0x445566778899aabbL : 0x8899aabb44556677L)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? 0x445566778899aabbL : 0x8899aabb44556677L));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ lres = getLong_8();
+ if (lres != (BIG_ENDIAN ? 0x8899aabbccddeeffL : 0xccddeeff8899aabbL)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? 0x8899aabbccddeeffL : 0xccddeeff8899aabbL));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ lres = getLong_17();
+ if (lres != (BIG_ENDIAN ? 0x23456789abcdef01L : 0x6789abcdef012345L)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? 0x23456789abcdef01L : 0x6789abcdef012345L));
+ }
+ }
+
+ // Unsafe.putInt()
+ for (int i = 0; i < ITERS; i++) {
+ putInt_0(0x00112233);
+ res = getInt_0();
+ if (res != 0x00112233) {
+ throw new Exception(res + " != 0x00112233");
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ putInt_1(BIG_ENDIAN ? 0x11223344 : 0x77001122);
+ res = getInt_1();
+ if (res != (BIG_ENDIAN ? 0x11223344 : 0x77001122)) {
+ throw new Exception(res + " != " + (BIG_ENDIAN ? 0x11223344 : 0x77001122));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ putInt_4(0x44556677);
+ res = getInt_4();
+ if (res != 0x44556677) {
+ throw new Exception(res + " != 0x44556677");
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ putInt_17(BIG_ENDIAN ? 0x23456789 : 0xef012345);
+ res = getInt_17();
+ if (res != (BIG_ENDIAN ? 0x23456789 : 0xef012345)) {
+ throw new Exception(res + " != " + (BIG_ENDIAN ? 0x23456789 : 0xef012345));
+ }
+ }
+
+
+ // Unsafe.putLong()
+ for (int i = 0; i < ITERS; i++) {
+ putLong_0(BIG_ENDIAN ? 0x0011223344556677L : 0x4455667700112233L);
+ lres = getLong_0();
+ if (lres != (BIG_ENDIAN ? 0x0011223344556677L : 0x4455667700112233L)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? 0x0011223344556677L : 0x4455667700112233L));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ putLong_1(BIG_ENDIAN ? 0x1122334455667788L : 0xbb44556677001122L);
+ lres = getLong_1();
+ if (lres != (BIG_ENDIAN ? 0x1122334455667788L : 0xbb44556677001122L)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? 0x1122334455667788L : 0xbb44556677001122L));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ putLong_4(BIG_ENDIAN ? 0x445566778899aabbL : 0x8899aabb44556677L);
+ lres = getLong_4();
+ if (lres != (BIG_ENDIAN ? 0x445566778899aabbL : 0x8899aabb44556677L)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? 0x445566778899aabbL : 0x8899aabb44556677L));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ putLong_8(BIG_ENDIAN ? 0x8899aabbccddeeffL : 0xccddeeff8899aabbL);
+ lres = getLong_8();
+ if (lres != (BIG_ENDIAN ? 0x8899aabbccddeeffL : 0xccddeeff8899aabbL)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? 0x8899aabbccddeeffL : 0xccddeeff8899aabbL));
+ }
+ }
+
+ for (int i = 0; i < ITERS; i++) {
+ putLong_17(BIG_ENDIAN ? 0x23456789abcdef01L : 0x6789abcdef012345L);
+ lres = getLong_17();
+ if (lres != (BIG_ENDIAN ? 0x23456789abcdef01L : 0x6789abcdef012345L)) {
+ throw new Exception(lres + " != " + (BIG_ENDIAN ? 0x23456789abcdef01L : 0x6789abcdef012345L));
+ }
+ }
+ }
+
+}

View file

@ -0,0 +1,32 @@
# HG changeset patch
# User andrew
# Date 1518667645 0
# Thu Feb 15 04:07:25 2018 +0000
# Node ID 1d35411eb7bdf16191e220ffe3b1dc4d5d0c6041
# Parent 999983606f5c61b093c6f6316a7b26c4cd4ca79e
8197981, PR3548: Missing return statement in __sync_val_compare_and_swap_8
Summary: Fix issue discovered by -Wreturn-type on systems without LP64.
Reviewed-by: aph
diff --git openjdk.orig/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp openjdk/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
--- openjdk.orig/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
+++ openjdk/hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
@@ -457,6 +457,7 @@
long long unsigned int oldval,
long long unsigned int newval) {
ShouldNotCallThis();
+ return 0;
}
};
#endif // !_LP64
diff --git openjdk.orig/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
--- openjdk.orig/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
+++ openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
@@ -498,6 +498,7 @@
long long unsigned int oldval,
long long unsigned int newval) {
ShouldNotCallThis();
+ return 0;
}
};
#endif // !_LP64

View file

@ -0,0 +1,19 @@
# HG changeset patch
# User andrew
# Date 1532526839 -3600
# Wed Jul 25 14:53:59 2018 +0100
# Node ID 66087a86ded39c2595dc61223fa03671ff051e33
# Parent 2f2d2af6fa5c44e67e0a9987f56392315a1e4b64
8207057, PR3613: No debug info for assembler files
diff -Nru openjdk.orig/hotspot/make/linux/makefiles/gcc.make openjdk/hotspot/make/linux/makefiles/gcc.make
--- openjdk.orig/hotspot/make/linux/makefiles/gcc.make 2018-12-21 00:55:33.407545727 +0000
+++ openjdk/hotspot/make/linux/makefiles/gcc.make 2018-12-21 01:14:40.357592769 +0000
@@ -339,6 +339,7 @@
# DEBUG_BINARIES uses full -g debug information for all configs
ifeq ($(DEBUG_BINARIES), true)
CFLAGS += -g
+ ASFLAGS += -g
else
DEBUG_CFLAGS += $(DEBUG_CFLAGS/$(BUILDARCH))
ifeq ($(DEBUG_CFLAGS/$(BUILDARCH)),)

View file

@ -0,0 +1,20 @@
# HG changeset patch
# User andrew
# Date 1398352866 -3600
# Thu Apr 24 16:21:06 2014 +0100
# Node ID 2b4f89de39c2c4fd09f927adacb3781454dbee44
# Parent 6cb711fa264d25f3592471a81a5b865c505a9fd7
Extend 8041658 to all files in the HotSpot build.
diff -r 6cb711fa264d -r 2b4f89de39c2 make/linux/makefiles/gcc.make
--- openjdk/hotspot/make/linux/makefiles/gcc.make Wed Apr 23 22:06:29 2014 +0100
+++ openjdk/hotspot/make/linux/makefiles/gcc.make Thu Apr 24 16:21:06 2014 +0100
@@ -267,7 +267,7 @@
OPT_CFLAGS/mulnode.o += $(OPT_CFLAGS/NOOPT)
endif
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 9), 1)
- OPT_CFLAGS/macroAssembler_x86.o += -fno-devirtualize
+ OPT_CFLAGS += -fno-devirtualize
endif
endif

View file

@ -0,0 +1,11 @@
diff -Nru openjdk.orig/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java openjdk/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java
--- openjdk.orig/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java 2010-01-04 16:57:29.000000000 +0000
+++ openjdk/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java 2010-01-04 19:47:57.000000000 +0000
@@ -1142,6 +1142,7 @@
boolean isOverrideRedirect() {
return XWM.getWMID() == XWM.OPENLOOK_WM ||
+ XWM.getWMID() == XWM.METACITY_WM ||
Window.Type.POPUP.equals(getWindowType());
}

View file

@ -0,0 +1,33 @@
# HG changeset patch
# User andrew
# Date 1405461315 -3600
# Tue Jul 15 22:55:15 2014 +0100
# Node ID 967ae4d849eb20b4b63c399bc3f376dfc0f9d2cc
# Parent 84854c983fd81cf1a1598f8c069a2db010abc05c
PR1869: Avoid x86 workaround when running Zero rather than a JIT
Contributed-by: Matthias Klose <doko@ubuntu.com>
diff -Nru openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp 2019-04-11 03:36:49.000000000 +0100
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp 2019-04-19 17:15:35.194017652 +0100
@@ -5139,7 +5139,7 @@
Linux::capture_initial_stack(JavaThread::stack_size_at_create());
-#if defined(IA32)
+#if defined(IA32) && !defined(ZERO)
workaround_expand_exec_shield_cs_limit();
#endif
diff -Nru openjdk.orig/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp
--- openjdk.orig/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp 2019-04-11 03:36:49.000000000 +0100
+++ openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp 2019-04-19 17:15:58.329656663 +0100
@@ -890,7 +890,7 @@
* updates (JDK-8023956).
*/
void os::workaround_expand_exec_shield_cs_limit() {
-#if defined(IA32)
+#if defined(IA32) && !defined(ZERO)
size_t page_size = os::vm_page_size();
/*

View file

@ -0,0 +1,52 @@
# HG changeset patch
# User andrew
# Date 1533744073 -3600
# Wed Aug 08 17:01:13 2018 +0100
# Node ID 0458118b5f190097099f2ea7b025cb2d5aeb0429
# Parent 66087a86ded39c2595dc61223fa03671ff051e33
PR3607: CVE-2018-3639 hw: cpu: speculative store bypass mitigation
diff -Nru openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp 2019-01-31 04:18:03.357394677 +0000
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp 2019-01-31 04:19:59.099570272 +0000
@@ -103,6 +103,8 @@
# include <inttypes.h>
# include <sys/ioctl.h>
+#include <sys/prctl.h>
+
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
#ifndef _GNU_SOURCE
@@ -5001,6 +5003,31 @@
}
}
+/* Per task speculation control */
+#ifndef PR_GET_SPECULATION_CTRL
+#define PR_GET_SPECULATION_CTRL 52
+#endif
+#ifndef PR_SET_SPECULATION_CTRL
+#define PR_SET_SPECULATION_CTRL 53
+#endif
+/* Speculation control variants */
+# undef PR_SPEC_STORE_BYPASS
+# define PR_SPEC_STORE_BYPASS 0
+/* Return and control values for PR_SET/GET_SPECULATION_CTRL */
+# undef PR_SPEC_NOT_AFFECTED
+# undef PR_SPEC_PRCTL
+# undef PR_SPEC_ENABLE
+# undef PR_SPEC_DISABLE
+# define PR_SPEC_NOT_AFFECTED 0
+# define PR_SPEC_PRCTL (1UL << 0)
+# define PR_SPEC_ENABLE (1UL << 1)
+# define PR_SPEC_DISABLE (1UL << 2)
+
+static void set_speculation() __attribute__((constructor));
+static void set_speculation() {
+ prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0);
+}
+
// this is called _before_ most of the global arguments have been parsed
void os::init(void) {
char dummy; /* used to get a guess on initial stack address */

View file

@ -0,0 +1,62 @@
# HG changeset patch
# User andrew
# Date 1555557699 -3600
# Thu Apr 18 04:21:39 2019 +0100
# Node ID 3f9a60eb8ef03dd72438eb923fc9547b4148605d
# Parent 2366ee02c78968ed4d62f77fc88632873cffd183
PR3728: CVE-2018-3639 fix revision to prefer PR_SPEC_DISABLE_NOEXEC to PR_SPEC_DISABLE
diff --git openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp
--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
@@ -5005,26 +5005,43 @@
/* Per task speculation control */
#ifndef PR_GET_SPECULATION_CTRL
-#define PR_GET_SPECULATION_CTRL 52
+# define PR_GET_SPECULATION_CTRL 52
#endif
#ifndef PR_SET_SPECULATION_CTRL
-#define PR_SET_SPECULATION_CTRL 53
+# define PR_SET_SPECULATION_CTRL 53
#endif
/* Speculation control variants */
-# undef PR_SPEC_STORE_BYPASS
+#ifndef PR_SPEC_STORE_BYPASS
# define PR_SPEC_STORE_BYPASS 0
+#endif
/* Return and control values for PR_SET/GET_SPECULATION_CTRL */
-# undef PR_SPEC_NOT_AFFECTED
-# undef PR_SPEC_PRCTL
-# undef PR_SPEC_ENABLE
-# undef PR_SPEC_DISABLE
+
+#ifndef PR_SPEC_NOT_AFFECTED
# define PR_SPEC_NOT_AFFECTED 0
+#endif
+#ifndef PR_SPEC_PRCTL
# define PR_SPEC_PRCTL (1UL << 0)
+#endif
+#ifndef PR_SPEC_ENABLE
# define PR_SPEC_ENABLE (1UL << 1)
+#endif
+#ifndef PR_SPEC_DISABLE
# define PR_SPEC_DISABLE (1UL << 2)
+#endif
+#ifndef PR_SPEC_FORCE_DISABLE
+# define PR_SPEC_FORCE_DISABLE (1UL << 3)
+#endif
+#ifndef PR_SPEC_DISABLE_NOEXEC
+# define PR_SPEC_DISABLE_NOEXEC (1UL << 4)
+#endif
static void set_speculation() __attribute__((constructor));
static void set_speculation() {
+ if ( prctl(PR_SET_SPECULATION_CTRL,
+ PR_SPEC_STORE_BYPASS,
+ PR_SPEC_DISABLE_NOEXEC, 0, 0) == 0 ) {
+ return;
+ }
prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0);
}

View file

@ -0,0 +1,51 @@
# HG changeset patch
# User andrew
# Date 1408489026 -3600
# Tue Aug 19 23:57:06 2014 +0100
# Node ID 22d29c372fc4271930e4169a66818f67e27cf6e8
# Parent c75d6ce2e98b901b31ac84dbbb59667e03beb9d5
Merge jdk8u20-b23
diff -Nru openjdk.orig/hotspot/make/linux/makefiles/gcc.make openjdk/hotspot/make/linux/makefiles/gcc.make
--- openjdk.orig/hotspot/make/linux/makefiles/gcc.make 2019-01-25 15:02:27.660107711 +0000
+++ openjdk/hotspot/make/linux/makefiles/gcc.make 2019-01-25 15:05:30.485236897 +0000
@@ -198,7 +198,9 @@
endif
# Compiler warnings are treated as errors
+ifneq ($(COMPILER_WARNINGS_FATAL),false)
WARNINGS_ARE_ERRORS = -Werror
+endif
ifeq ($(USE_CLANG), true)
# However we need to clean the code up before we can unrestrictedly enable this option with Clang
diff -Nru openjdk.orig/hotspot/make/solaris/makefiles/adlc.make openjdk/hotspot/make/solaris/makefiles/adlc.make
--- openjdk.orig/hotspot/make/solaris/makefiles/adlc.make 2019-01-16 07:13:59.000000000 +0000
+++ openjdk/hotspot/make/solaris/makefiles/adlc.make 2019-01-25 15:06:44.376075821 +0000
@@ -73,8 +73,10 @@
# CFLAGS_WARN holds compiler options to suppress/enable warnings.
# Compiler warnings are treated as errors
-ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
- CFLAGS_WARN = +w -errwarn
+ifneq ($(COMPILER_WARNINGS_FATAL),false)
+ ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
+ CFLAGS_WARN = +w -errwarn
+ endif
endif
# When using compiler version 5.13 (Solaris Studio 12.4), calls to explicitly
# instantiated template functions trigger this warning when +w is active.
diff -Nru openjdk.orig/hotspot/make/solaris/makefiles/gcc.make openjdk/hotspot/make/solaris/makefiles/gcc.make
--- openjdk.orig/hotspot/make/solaris/makefiles/gcc.make 2019-01-16 07:13:59.000000000 +0000
+++ openjdk/hotspot/make/solaris/makefiles/gcc.make 2019-01-25 15:05:30.485236897 +0000
@@ -116,7 +116,9 @@
# Compiler warnings are treated as errors
-WARNINGS_ARE_ERRORS = -Werror
+ifneq ($(COMPILER_WARNINGS_FATAL),false)
+WARNINGS_ARE_ERRORS = -Werror
+endif
# Enable these warnings. See 'info gcc' about details on these options
WARNING_FLAGS = -Wpointer-arith -Wconversion -Wsign-compare -Wundef
CFLAGS_WARN/DEFAULT = $(WARNINGS_ARE_ERRORS) $(WARNING_FLAGS)

View file

@ -0,0 +1,20 @@
--- openjdk.orig/jdk/src/solaris/native/sun/xawt/XToolkit.c
+++ openjdk/jdk/src/solaris/native/sun/xawt/XToolkit.c
@@ -27,7 +27,7 @@
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>
-#ifdef __linux__
+#if defined(__linux__) && defined(__GLIBC__) && ! defined(__UCLIBC__)
#include <execinfo.h>
#endif
@@ -689,7 +689,7 @@
return ret;
}
-#ifdef __linux__
+#if defined(__linux__) && defined(__GLIBC__) && ! defined(__UCLIBC__)
void print_stack(void)
{
void *array[10];

View file

@ -0,0 +1,42 @@
--- openjdk/jdk/src/solaris/native/java/net/net_util_md.c.orig
+++ openjdk/jdk/src/solaris/native/java/net/net_util_md.c
@@ -561,7 +561,7 @@
static struct localinterface *localifs = 0;
static int localifsSize = 0; /* size of array */
-static int nifs = 0; /* number of entries used in array */
+static int nifs = -1; /* number of entries used in array */
/* not thread safe: make sure called once from one thread */
@@ -573,6 +573,10 @@
int index, x1, x2, x3;
unsigned int u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,ua,ub,uc,ud,ue,uf;
+ if (nifs >= 0)
+ return ;
+ nifs = 0;
+
if ((f = fopen("/proc/net/if_inet6", "r")) == NULL) {
return ;
}
@@ -601,7 +605,7 @@
localifs = (struct localinterface *) realloc (
localifs, sizeof (struct localinterface)* (localifsSize+5));
if (localifs == 0) {
- nifs = 0;
+ nifs = -1;
fclose (f);
return;
}
@@ -624,9 +628,7 @@
static int getLocalScopeID (char *addr) {
struct localinterface *lif;
int i;
- if (localifs == 0) {
- initLocalIfs();
- }
+ initLocalIfs();
for (i=0, lif=localifs; i<nifs; i++, lif++) {
if (memcmp (addr, lif->localaddr, 16) == 0) {
return lif->index;

View file

@ -0,0 +1,88 @@
Give a much bigger buffer to getmntent_r.
https://bugs.alpinelinux.org/issues/7093
diff --git a/openjdk/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c b/openjdk/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c
index c8500db..d0b85d6 100644
--- openjdk/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c
+++ openjdk/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c
@@ -33,6 +33,7 @@
#include <dlfcn.h>
#include <errno.h>
#include <mntent.h>
+#include <limits.h>
#include "sun_nio_fs_LinuxNativeDispatcher.h"
@@ -173,8 +174,8 @@ Java_sun_nio_fs_LinuxNativeDispatcher_getmntent(JNIEnv* env, jclass this,
jlong value, jobject entry)
{
struct mntent ent;
- char buf[1024];
- int buflen = sizeof(buf);
+ char *buf = NULL;
+ const size_t buflen = PATH_MAX * 4;
struct mntent* m;
FILE* fp = jlong_to_ptr(value);
jsize len;
@@ -183,10 +184,17 @@ Java_sun_nio_fs_LinuxNativeDispatcher_getmntent(JNIEnv* env, jclass this,
char* dir;
char* fstype;
char* options;
+ jint res = -1;
- m = getmntent_r(fp, &ent, (char*)&buf, buflen);
- if (m == NULL)
+ buf = malloc(buflen);
+ if (buf == NULL) {
+ JNU_ThrowOutOfMemoryError(env, "native heap");
return -1;
+ }
+ m = getmntent_r(fp, &ent, buf, buflen);
+ if (m == NULL)
+ goto out;
+
name = m->mnt_fsname;
dir = m->mnt_dir;
fstype = m->mnt_type;
@@ -195,32 +203,35 @@ Java_sun_nio_fs_LinuxNativeDispatcher_getmntent(JNIEnv* env, jclass this,
len = strlen(name);
bytes = (*env)->NewByteArray(env, len);
if (bytes == NULL)
- return -1;
+ goto out;
(*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)name);
(*env)->SetObjectField(env, entry, entry_name, bytes);
len = strlen(dir);
bytes = (*env)->NewByteArray(env, len);
if (bytes == NULL)
- return -1;
+ goto out;
(*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)dir);
(*env)->SetObjectField(env, entry, entry_dir, bytes);
len = strlen(fstype);
bytes = (*env)->NewByteArray(env, len);
if (bytes == NULL)
- return -1;
+ goto out;
(*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)fstype);
(*env)->SetObjectField(env, entry, entry_fstype, bytes);
len = strlen(options);
bytes = (*env)->NewByteArray(env, len);
if (bytes == NULL)
- return -1;
+ goto out;
(*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)options);
(*env)->SetObjectField(env, entry, entry_options, bytes);
- return 0;
+ res = 0;
+out:
+ free(buf);
+ return res;
}
JNIEXPORT void JNICALL

View file

@ -1,7 +1,7 @@
Use ~0u instead of -1 to shift an unsigned value.
--- a/src/share/vm/code/dependencies.hpp 2016-04-25 18:32:00.000000000 +0200
+++ b/src/share/vm/code/dependencies.hpp 2016-09-13 19:46:22.684595758 +0200
--- openjdk/hotspot/src/share/vm/code/dependencies.hpp
+++ openjdk/hotspot/src/share/vm/code/dependencies.hpp
@@ -166,7 +166,7 @@
LG2_TYPE_LIMIT = 4, // assert(TYPE_LIMIT <= (1<<LG2_TYPE_LIMIT))

View file

@ -0,0 +1,28 @@
By default, OpenJDK 8 passes sysroot flags to native compiler. This is wrong,
as it will then use target include files when calling the native compiler.
Newer versions of OpenJDK have seemingly fixed this, 8 has not.
diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk
index d961cf3..9679f97 100644
--- a/make/common/NativeCompilation.gmk
+++ b/make/common/NativeCompilation.gmk
@@ -383,10 +383,6 @@ define SetupNativeCompilation
$$(error Unknown value for OPTIMIZATION: $$($1_OPTIMIZATION))
endif
- # Add sys root specific cflags last
- $1_EXTRA_CFLAGS += $(SYSROOT_CFLAGS)
- $1_EXTRA_CXXFLAGS += $(SYSROOT_CFLAGS)
-
# Now call add_native_source for each source file we are going to compile.
$$(foreach p,$$($1_SRCS), \
$$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR), \
@@ -432,8 +428,6 @@ define SetupNativeCompilation
$1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE))
endif
- $1_EXTRA_LDFLAGS += $(SYSROOT_LDFLAGS)
-
$1 := $$($1_TARGET)
ifneq (,$$($1_LIBRARY))
# Generating a dynamic library.

308
srcpkgs/openjdk8/template Normal file
View file

@ -0,0 +1,308 @@
# Template file for 'openjdk8'
# TODO: better places for bin and man?
# TODO: make -headless versions
# TODO: config files?
_java_ver=8
_jdk_update=232
_jdk_build=09
_main_ver=${_java_ver}u${_jdk_update}
_final_jdk_home="usr/lib/jvm/java-1.8-openjdk"
pkgname=openjdk8
version="${_java_ver}u${_jdk_update}b${_jdk_build}"
revision=1
# we're using aarch64 port repo to get aarch64 JIT; the repo is
# otherwise the same as the normal one, just with aarch64 port added
_repo_ver="aarch64-shenandoah-jdk${version/b/-b}"
wrksrc="jdk8u-shenandoah-aarch64-shenandoah-jdk8u${_jdk_update}-b${_jdk_build}"
build_style=gnu-configure
configure_args="
--prefix=${XBPS_DESTDIR}/${XBPS_CROSS_TRIPLET}/${pkgname}-${version}/usr/lib
--with-update-version=${_jdk_update}
--with-build-number=b${_jdk_build}
--with-milestone=fcs
--enable-unlimited-crypto
--with-zlib=system
--with-giflib=system
--with-freetype-lib=${XBPS_CROSS_BASE}/usr/lib
--with-freetype-include=${XBPS_CROSS_BASE}/usr/include/freetype2
--with-jtreg=no
--with-jobs=${XBPS_MAKEJOBS}
--with-vendor-name="Void"
--with-vendor-url="https://voidlinux.org/"
--with-vendor-bug-url="https://github.com/void-linux/void-packages/issues"
--with-vendor-vm-bug-url="https://github.com/void-linux/void-packages/issues""
make_build_args="images $(vopt_if docs docs) COMPILER_WARNINGS_FATAL=false"
hostmakedepends="pkg-config automake autoconf cpio unzip zip ca-certificates
zlib-devel make-ca"
makedepends="libXrender-devel libXtst-devel libXt-devel libXrandr-devel
giflib-devel cups-devel freetype-devel alsa-lib-devel fontconfig-devel
zlib-devel"
depends="openjdk8-jre-${version}_${revision}"
short_desc="OpenJDK Java Development Kit (version 8)"
maintainer="Toyam Cox <Vaelatern@voidlinux.org>"
license="GPL-2.0-or-later"
homepage="http://openjdk.java.net/"
distfiles="
http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/archive/${_repo_ver}.tar.gz>jdk8u-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/corba/archive/${_repo_ver}.tar.gz>corba-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/hotspot/archive/${_repo_ver}.tar.gz>hotspot-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/jdk/archive/${_repo_ver}.tar.gz>jdk-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/jaxws/archive/${_repo_ver}.tar.gz>jaxws-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/jaxp/archive/${_repo_ver}.tar.gz>jaxp-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/langtools/archive/${_repo_ver}.tar.gz>langtools-${_repo_ver}.tar.gz
http://hg.openjdk.java.net/aarch64-port/jdk8u-shenandoah/nashorn/archive/${_repo_ver}.tar.gz>nashorn-${_repo_ver}.tar.gz"
checksum="9c08eb72cb3f46e8b03d4c4ef186dccbecb823e4eef3003e61fd9631bab825ec
a8473d48ea87ee4213f24dfbf665bf5259ce31946ba128358666d11415a03c18
90a28984c1ae55ab18b8deab8c3459c47f03aaaac2d0fc50f36012b74007610d
98f75b028a07d0737c4d401ba1fd3ea7ecfbfe7fc914ff4fd218ac9e3ba5995e
3f8f8183c35b5343f10490cbecc477036c4032bda9584ce4e065a1d1ee877d3f
7426e95cde9dc816bd9d3ab44c8eea2a2dc97cb2e9905ec900d56b888e8b7def
376205b35a9d43e38808171b3be9e07c2211613f694c8be60af2e326905caab3
9cd16a9ed8feed26a485f6df296f4900cb6de6a70b50e5c6bb03198623d1773a"
build_options="docs"
desc_option_docs="Build documentation"
# no hotspot JIT for arm32 and ppc32
case "$XBPS_TARGET_MACHINE" in
ppc64*) ;;
arm*|ppc*) _use_zero=yes ;;
esac
# specifically do not enable docs because with zero it takes hours
if [ -n "$_use_zero" ]; then
makedepends+=" libffi-devel"
configure_args+=" --with-jvm-variants=zero"
else
build_options_default+=" docs"
fi
provides="java-environment-${version}_1"
patch_args="-Np1"
if [ -n "$XBPS_DEBUG_PKGS" ]; then
configure_args+=" --with-native-debug-symbols=internal"
fi
if [ ! "$CROSS_BUILD" ]; then
hostmakedepends+=" openjdk7-bootstrap"
configure_args+=" --with-boot-jdk=/usr/lib/jvm/java-1.7-openjdk"
else
hostmakedepends+=" openjdk8"
configure_args+=" --with-boot-jdk=/${_final_jdk_home}"
fi
# enabling ccache segfaults gcc
export CCACHE_DISABLE=1
alternatives="
java:/usr/bin/java:/${_final_jdk_home}/bin/java
java:/usr/bin/jjs:/${_final_jdk_home}/bin/jjs
java:/usr/bin/keytool:/${_final_jdk_home}/bin/keytool
java:/usr/bin/orbd:/${_final_jdk_home}/bin/orbd
java:/usr/bin/pack200:/${_final_jdk_home}/bin/pack200
java:/usr/bin/policytool:/${_final_jdk_home}/bin/policytool
java:/usr/bin/rmid:/${_final_jdk_home}/bin/rmid
java:/usr/bin/rmiregistry:/${_final_jdk_home}/bin/rmiregistry
java:/usr/bin/servertool:/${_final_jdk_home}/bin/servertool
java:/usr/bin/tnameserv:/${_final_jdk_home}/bin/tnameserv
java:/usr/bin/unpack200:/${_final_jdk_home}/bin/unpack200
jdk:/usr/bin/appletviewer:/${_final_jdk_home}/bin/appletviewer
jdk:/usr/bin/extcheck:/${_final_jdk_home}/bin/extcheck
jdk:/usr/bin/idlj:/${_final_jdk_home}/bin/idlj
jdk:/usr/bin/jar:/${_final_jdk_home}/bin/jar
jdk:/usr/bin/jarsigner:/${_final_jdk_home}/bin/jarsigner
jdk:/usr/bin/java:/${_final_jdk_home}/bin/java
jdk:/usr/bin/java-rmi.cgi:/${_final_jdk_home}/bin/java-rmi.cgi
jdk:/usr/bin/javac:/${_final_jdk_home}/bin/javac
jdk:/usr/bin/javadoc:/${_final_jdk_home}/bin/javadoc
jdk:/usr/bin/javah:/${_final_jdk_home}/bin/javah
jdk:/usr/bin/javap:/${_final_jdk_home}/bin/javap
jdk:/usr/bin/jcmd:/${_final_jdk_home}/bin/jcmd
jdk:/usr/bin/jconsole:/${_final_jdk_home}/bin/jconsole
jdk:/usr/bin/jdb:/${_final_jdk_home}/bin/jdb
jdk:/usr/bin/jdeps:/${_final_jdk_home}/bin/jdeps
jdk:/usr/bin/jhat:/${_final_jdk_home}/bin/jhat
jdk:/usr/bin/jinfo:/${_final_jdk_home}/bin/jinfo
jdk:/usr/bin/jjs:/${_final_jdk_home}/bin/jjs
jdk:/usr/bin/jmap:/${_final_jdk_home}/bin/jmap
jdk:/usr/bin/jps:/${_final_jdk_home}/bin/jps
jdk:/usr/bin/jrunscript:/${_final_jdk_home}/bin/jrunscript
jdk:/usr/bin/jsadebugd:/${_final_jdk_home}/bin/jsadebugd
jdk:/usr/bin/jstack:/${_final_jdk_home}/bin/jstack
jdk:/usr/bin/jstat:/${_final_jdk_home}/bin/jstat
jdk:/usr/bin/jstatd:/${_final_jdk_home}/bin/jstatd
jdk:/usr/bin/keytool:/${_final_jdk_home}/bin/keytool
jdk:/usr/bin/native2ascii:/${_final_jdk_home}/bin/native2ascii
jdk:/usr/bin/orbd:/${_final_jdk_home}/bin/orbd
jdk:/usr/bin/pack200:/${_final_jdk_home}/bin/pack200
jdk:/usr/bin/policytool:/${_final_jdk_home}/bin/policytool
jdk:/usr/bin/rmic:/${_final_jdk_home}/bin/rmic
jdk:/usr/bin/rmid:/${_final_jdk_home}/bin/rmid
jdk:/usr/bin/rmiregistry:/${_final_jdk_home}/bin/rmiregistry
jdk:/usr/bin/schemagen:/${_final_jdk_home}/bin/schemagen
jdk:/usr/bin/serialver:/${_final_jdk_home}/bin/serialver
jdk:/usr/bin/servertool:/${_final_jdk_home}/bin/servertool
jdk:/usr/bin/tnameserv:/${_final_jdk_home}/bin/tnameserv
jdk:/usr/bin/unpack200:/${_final_jdk_home}/bin/unpack200
jdk:/usr/bin/wsgen:/${_final_jdk_home}/bin/wsgen
jdk:/usr/bin/wsimport:/${_final_jdk_home}/bin/wsimport
jdk:/usr/bin/xjc:/${_final_jdk_home}/bin/xjc
"
post_extract() {
chmod +x configure
for subrepo in corba hotspot jdk jaxws jaxp langtools nashorn; do
mv ../${subrepo}-${_repo_ver} ${subrepo}
done
# gcc complains about the signed shift left
vsed -i jdk/src/share/native/com/sun/java/util/jar/pack/constants.h \
-e's;(-1)<<13;~0u<<13;g'
# wrong "return false;" instead of "return null;"
vsed -i jdk/src/share/native/com/sun/java/util/jar/pack/jni.cpp \
-e"295s;false;null;"
}
post_patch() {
[ "$XBPS_TARGET_LIBC" != "musl" ] && return 0
for f in ${FILESDIR}/musl_*.patch; do
echo "Applying $f"
patch -sNp1 -i "$f"
done
# add cross prefix for thread_db.h check, fix cross from glibc to musl
sed -i "s,/usr/include/thread_db.h,${XBPS_CROSS_BASE}/usr/include/thread_db.h," \
hotspot/make/linux/makefiles/defs.make hotspot/make/linux/makefiles/sa.make \
hotspot/make/linux/makefiles/saproc.make
}
do_configure() {
CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/}
CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/}
# force ELFv2 for ppc64 just in case
case "$XBPS_TARGET_MACHINE" in
ppc64*)
CFLAGS+=" -DABI_ELFv2"
CXXFLAGS+=" -DABI_ELFv2"
;;
esac
configure_args=${configure_args/--with-libtool-sysroot=\/usr\/[a-z0-9]*-linux-[a-z]*/}
./configure ${configure_args} --with-extra-cflags="$CFLAGS" \
--with-extra-cxxflags="$CXXFLAGS" --with-extra-ldflags="$LDFLAGS"
}
pre_build() {
# only use modified flags as specified in configure
unset CFLAGS CXXFLAGS LDFLAGS
}
do_build() {
# do not set disable_parallel_build in order to be able to read makejobs
make -j1 ${make_build_args} ${make_build_target}
}
post_install() {
# we manage this ourselves
rm -rf ${DESTDIR}/usr/lib/bin
# unify the install prefix
mv ${DESTDIR}/usr/lib/jvm/openjdk-1.8.0_${_jdk_update} \
${DESTDIR}/${_final_jdk_home}
vmkdir ${_final_jdk_home}/lib/security
make-ca -g -f --destdir "${PWD}/ca" -k "${DESTDIR}/${_final_jdk_home}/bin/keytool"
mv ./ca/etc/pki/tls/java/cacerts ${DESTDIR}/${_final_jdk_home}/lib/security/
chmod -R ugo+rw ./ca
rm -Rf ./ca
vlicense ASSEMBLY_EXCEPTION
vlicense LICENSE
vlicense THIRD_PARTY_README
}
openjdk8-jre_package() {
shlib_provides="libawt.so libawt_xawt.so libjava.so libjli.so libjvm.so libjawt.so"
short_desc+=" - runtime components"
provides="java-runtime-${version}_1"
alternatives="
java:/usr/bin/java:/${_final_jdk_home}/jre/bin/java
java:/usr/bin/jjs:/${_final_jdk_home}/jre/bin/jjs
java:/usr/bin/keytool:/${_final_jdk_home}/jre/bin/keytool
java:/usr/bin/orbd:/${_final_jdk_home}/jre/bin/orbd
java:/usr/bin/pack200:/${_final_jdk_home}/jre/bin/pack200
java:/usr/bin/policytool:/${_final_jdk_home}/jre/bin/policytool
java:/usr/bin/rmid:/${_final_jdk_home}/jre/bin/rmid
java:/usr/bin/rmiregistry:/${_final_jdk_home}/jre/bin/rmiregistry
java:/usr/bin/servertool:/${_final_jdk_home}/jre/bin/servertool
java:/usr/bin/tnameserv:/${_final_jdk_home}/jre/bin/tnameserv
java:/usr/bin/unpack200:/${_final_jdk_home}/jre/bin/unpack200
"
pkg_install() {
vmove ${_final_jdk_home}/jre
vmkdir etc/profile.d
cat >>${PKGDESTDIR}/etc/profile.d/10_openjdk8.sh <<EOF
export JAVA_HOME=\${JAVA_HOME=/${_final_jdk_home}/jre}
EOF
}
}
openjdk8-src_package() {
nostrip=yes
noverifyrdeps=yes
noshlibprovides=yes
short_desc+=" - source code"
pkg_install() {
vmove ${_final_jdk_home}/src.zip
}
}
openjdk8-doc_package() {
nostrip=yes
noverifyrdeps=yes
noshlibprovides=yes
short_desc+=" - documentation"
pkg_install() {
cd ${wrksrc}
if [ "$build_option_docs" ]; then
vmkdir usr/share/doc/openjdk8
cp -a build/linux-*/docs/* ${PKGDESTDIR}/usr/share/doc/openjdk8
fi
vmove ${_final_jdk_home}/man/man1
}
}
openjdk_package() {
archs=noarch
build_style=meta
depends="openjdk8>=${version}_${revision}"
short_desc+=" (transitional dummy package)"
}
openjdk-jre_package() {
archs=noarch
build_style=meta
depends="openjdk8-jre>=${version}_${revision}"
short_desc+=" - runtime components (transitional dummy package)"
}
openjdk-src_package() {
archs=noarch
build_style=meta
depends="openjdk8-src>=${version}_${revision}"
short_desc+=" - source code (transitional dummy package)"
}
openjdk-doc_package() {
archs=noarch
build_style=meta
depends="openjdk8-doc>=${version}_${revision}"
short_desc+=" - documentation (transitional dummy package)"
}