Re: Bug#754214: openjdk-7: FTBFS on kfreebsd-*
Control: tags -1 + patch
Hi Matthias,
Here are updated kfreebsd patches for openjdk-7. This fixes the build
for me on kfreebsd-amd64, and I did some very basic testing of javac and
the runtime.
Thanks,
Regards,
--
Steven Chamberlain
steven@pyro.eu.org
Description: Initial GNU/kFreeBSD support for openjdk-7 (JDK part)
- Alter build system to consider GNU/kFreeBSD like linux
since this port is libc based.
openjdk/jdk/make/common/shared/Platform.gmk
- ENODATA is undefined :
openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileStore.java
openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxDosFileAttributeView.java
- sendfile implementation :
openjdk/jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c
(from bsd-port)
- BSD network stack usage :
openjdk/jdk/src/solaris/native/java/net/*
(from bsd-port)
- Don't build sctp protocol
openjdk/jdk/make/com/sun/nio/Makefile
- Don't build jsoundalsa
openjdk/jdk/make/javax/sound/Makefile
- Disable epoll feature and so LinuxWatchService
openjdk/jdk/make/java/nio/Makefile
Author: Damien Raude-Morvan <drazzib@debian.org>
Author: Guido Günther <agx@sigxcpu.org>
Author: Steven Chamberlain <steven@pyro.eu.org>
Last-Update: 2014-07-08
Forwarded: no
--- openjdk/jdk/src/solaris/bin/ergo_i586.c.orig
+++ openjdk/jdk/src/solaris/bin/ergo_i586.c
@@ -106,7 +106,7 @@
#endif /* __solaris__ */
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/*
* A utility method for asking the CPU about itself.
--- openjdk/jdk/src/solaris/bin/jexec.c.orig
+++ openjdk/jdk/src/solaris/bin/jexec.c
@@ -76,7 +76,7 @@
#include <string.h>
#include <limits.h>
#include <errno.h>
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
# include <sys/types.h>
# include <sys/stat.h>
# include <fcntl.h>
@@ -89,7 +89,7 @@
static const char * BAD_EXEC_MSG = "jexec failed";
static const char * CRAZY_EXEC_MSG = "missing args";
static const char * MISSING_JAVA_MSG = "can't locate java";
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
static const char * BAD_PATHNAME_MSG = "invalid path";
static const char * BAD_FILE_MSG = "invalid file";
static const char * BAD_MAGIC_MSG = "invalid file (bad magic number)";
@@ -98,7 +98,7 @@
/* Define a constant that represents the number of directories to pop off the
* current location to find the java binary */
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
static const int RELATIVE_DEPTH = 2;
#else /* Solaris */
static const int RELATIVE_DEPTH = 3;
@@ -111,7 +111,7 @@
static const char * JAR_FLAG = "-jar";
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/* largest possible size for a local file header */
static const size_t CHUNK_SIZE = 65535;
@@ -123,7 +123,7 @@
int main(int argc, const char * argv[]);
void errorExit(int error, const char * message);
int getJavaPath(const char * path, char * buf, int depth);
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
const char * isJar(const char * path);
#endif
@@ -172,7 +172,7 @@
nargv = (const char **) malloc((argc + 2) * (sizeof (const char *)));
nargv[nargc++] = java;
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/* The "-jar" flag is already in the original args list on Solaris,
* so it only needs to be added on Linux. */
nargv[nargc++] = JAR_FLAG;
@@ -182,7 +182,7 @@
const char * jarfile = argv[argi++];
const char * message = NULL;
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/* On Linux we also need to make sure argv[1] is really a JAR
* file (this will also resolve any symlinks, which helps). */
char jarPath[PATH_MAX + 1];
@@ -291,7 +291,7 @@
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/*
* Check if the given file is a JAR file.
*
--- openjdk/jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c.orig
+++ openjdk/jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c
@@ -216,7 +216,7 @@
JVM_Close(fd);
return (jlong) psinfo.pr_size * 1024;
-#elif defined(__linux__)
+#elif defined(__linux__) || defined(__FreeBSD_kernel__)
FILE *fp;
unsigned long vsize = 0;
--- openjdk/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
@@ -26,7 +26,7 @@
/**
* fstatat in glibc requires _ATFILE_SOURCE to be defined.
*/
-#if defined(__linux__)
+#if defined(__linux__) || defined(__GLIBC__)
#define _ATFILE_SOURCE
#endif
@@ -49,7 +49,7 @@
#include <strings.h>
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
#include <string.h>
#endif
--- openjdk/jdk/src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/fs/GnomeFileTypeDetector.c
@@ -35,7 +35,7 @@
#include <strings.h>
#endif
-#if defined(__linux__)
+#if defined(__linux__) || defined(__GLIBC__)
#include <string.h>
#endif
--- openjdk/jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c
@@ -39,7 +39,7 @@
#if defined(__linux__) || defined(__solaris__)
#include <sys/sendfile.h>
-#elif defined(_ALLBSD_SOURCE)
+#elif defined(_ALLBSD_SOURCE) || defined(__FreeBSD_kernel__)
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/uio.h>
@@ -213,6 +213,31 @@
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;
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ off_t numBytes;
+ int result;
+
+ numBytes = count;
+
+ result = sendfile(srcFD, dstFD, position, count, NULL, &numBytes, 0);
+
+ if (numBytes > 0)
+ return numBytes;
if (result == -1) {
if (errno == EAGAIN)
--- openjdk/jdk/src/solaris/native/sun/nio/ch/Sctp.h.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/Sctp.h
@@ -319,8 +319,36 @@
typedef int sctp_bindx_func(int sd, struct sockaddr *addrs, int addrcnt, int flags);
typedef int sctp_peeloff_func(int sock, sctp_assoc_t id);
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-#endif /* __linux__ */
+#include <stdint.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <bsd/sys/cdefs.h>
+#include <netinet/sctp.h>
+#include <netinet/sctp_peeloff.h>
+#include <netinet/sctp_uio.h>
+#include "jni.h"
+
+#define nio_sctp_getladdrs sctp_getladdrs
+#define nio_sctp_freeladdrs sctp_freeladdrs
+#define nio_sctp_getpaddrs sctp_getpaddrs
+#define nio_sctp_freepaddrs sctp_freepaddrs
+#define nio_sctp_bindx sctp_bindx
+#define nio_sctp_peeloff sctp_peeloff
+
+#endif /* __FreeBSD_kernel__ || __FreeBSD_kernel__ */
+
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+
+#define nio_sctp_getladdrs sctp_getladdrs
+#define nio_sctp_freeladdrs sctp_freeladdrs
+#define nio_sctp_getpaddrs sctp_getpaddrs
+#define nio_sctp_freepaddrs sctp_freepaddrs
+#define nio_sctp_bindx sctp_bindx
+#define nio_sctp_peeloff sctp_peeloff
+
+#else
sctp_getladdrs_func* nio_sctp_getladdrs;
sctp_freeladdrs_func* nio_sctp_freeladdrs;
@@ -329,6 +357,8 @@
sctp_bindx_func* nio_sctp_bindx;
sctp_peeloff_func* nio_sctp_peeloff;
+#endif
+
jboolean loadSocketExtensionFuncs(JNIEnv* env);
#endif /* !SUN_NIO_CH_SCTP_H */
--- openjdk/jdk/src/solaris/native/sun/nio/ch/SctpChannelImpl.c.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/SctpChannelImpl.c
@@ -440,7 +440,7 @@
} else if (errno == EINTR) {
return IOS_INTERRUPTED;
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
} else if (errno == ENOTCONN) {
/* ENOTCONN when EOF reached */
rv = 0;
--- openjdk/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c
@@ -35,7 +35,7 @@
#include <string.h>
#include <errno.h>
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
#include <netinet/in.h>
#endif
@@ -81,7 +81,7 @@
rv = connect(fd, 0, 0);
#endif
-#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(_AIX)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(_AIX) || defined(__GLIBC__)
{
int len;
SOCKADDR sa;
--- openjdk/jdk/src/solaris/native/sun/nio/ch/Net.c.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/Net.c
@@ -251,7 +251,7 @@
return -1;
}
}
-#if defined(__linux__) && defined(AF_INET6)
+#if ( defined(__linux__) || defined(__GLIBC__) ) && defined(AF_INET6)
/* By default, Linux uses the route default */
if (domain == AF_INET6 && type == SOCK_DGRAM) {
int arg = 1;
--- openjdk/jdk/src/solaris/native/sun/nio/ch/NativeThread.c.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/NativeThread.c
@@ -33,7 +33,7 @@
#include "nio_util.h"
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
#include <pthread.h>
#include <sys/signal.h>
@@ -51,7 +51,7 @@
JNIEXPORT void JNICALL
Java_sun_nio_ch_NativeThread_init(JNIEnv *env, jclass cl)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/* 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 +74,7 @@
JNIEXPORT jlong JNICALL
Java_sun_nio_ch_NativeThread_current(JNIEnv *env, jclass cl)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
return (long)pthread_self();
#else
return -1;
@@ -84,7 +84,7 @@
JNIEXPORT void JNICALL
Java_sun_nio_ch_NativeThread_signal(JNIEnv *env, jclass cl, jlong thread)
{
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
if (pthread_kill((pthread_t)thread, INTERRUPT_SIGNAL))
JNU_ThrowIOExceptionWithLastError(env, "Thread signal failed");
#endif
--- openjdk/jdk/src/solaris/native/sun/nio/ch/SocketChannelImpl.c.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/SocketChannelImpl.c
@@ -31,7 +31,7 @@
#include <string.h>
#include <poll.h>
-#if __linux__
+#if defined(__linux__) || defined(__GLIBC__)
#include <netinet/in.h>
#endif
--- openjdk/jdk/src/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/ServerSocketChannelImpl.c
@@ -28,7 +28,7 @@
#include <sys/types.h>
#include <sys/socket.h>
-#if __linux__
+#if defined(__linux__) || defined(__GLIBC__)
#include <netinet/in.h>
#endif
--- openjdk/jdk/src/solaris/native/sun/nio/ch/SctpNet.c.orig
+++ openjdk/jdk/src/solaris/native/sun/nio/ch/SctpNet.c
@@ -58,6 +58,7 @@
*/
jboolean loadSocketExtensionFuncs
(JNIEnv* env) {
+#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__)
if (dlopen(nativeSctpLib, RTLD_GLOBAL | RTLD_LAZY) == NULL) {
JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
dlerror());
@@ -105,6 +106,7 @@
dlerror());
return JNI_FALSE;
}
+#endif /* __FreeBSD__ */
funcsLoaded = JNI_TRUE;
return JNI_TRUE;
--- openjdk/jdk/src/solaris/native/sun/awt/awt_util.h.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/awt_util.h
@@ -198,7 +198,7 @@
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
typedef struct _XmImRefRec {
Cardinal num_refs; /* Number of referencing widgets. */
Cardinal max_refs; /* Maximum length of refs array. */
--- openjdk/jdk/src/solaris/native/sun/awt/awt_util.c.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/awt_util.c
@@ -603,7 +603,7 @@
return answer;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
#define MAXARGS 10
@@ -674,7 +674,7 @@
return w;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
static XRectangle geometryRect;
XVaNestedList awt_util_getXICStatusAreaList(Widget w)
{
--- openjdk/jdk/src/solaris/native/sun/awt/multi_font.c.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/multi_font.c
@@ -348,7 +348,7 @@
return JNI_TRUE;
}
#ifndef XAWT
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
XmString
unicodeXmStringCreate(char* text, char* tag, int len) {
XmString ret_val;
@@ -433,7 +433,7 @@
char *offsetStringData;
offsetStringData = stringData + (4 * sizeof(char));
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
len = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3];
/* Motif XmStringCreate() API requests "text must be a NULL-terminated
string" and its implementation uses "strlen()" to calculate the length
--- openjdk/jdk/src/solaris/native/sun/awt/extutil.h.orig
+++ openjdk/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 $ */
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
#ifndef _EXTUTIL_H_
#define _EXTUTIL_H_
--- openjdk/jdk/src/solaris/native/sun/awt/VDrawingArea.c.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/VDrawingArea.c
@@ -33,7 +33,7 @@
#include <stdio.h>
#include <stdlib.h>
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/* XXX: Shouldn't be necessary. */
#include "awt_p.h"
#endif /* __linux__ */
--- openjdk/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c
@@ -123,7 +123,8 @@
*/
#define MAXFRAMEBUFFERS 16
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
+
typedef struct {
int screen_number;
short x_org;
@@ -439,7 +440,7 @@
RTLD_LAZY | RTLD_GLOBAL);
}
-#ifndef __linux__ /* SOLARIS */
+#if ! defined(__linux__) && ! defined(__GLIBC__) /* SOLARIS */
if (xrenderLibHandle == NULL) {
xrenderLibHandle = dlopen("/usr/sfw/lib/libXrender.so.1",
RTLD_LAZY | RTLD_GLOBAL);
@@ -652,7 +653,8 @@
#endif /* HEADLESS */
#ifndef HEADLESS
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
+
static void xinerama_init_linux()
{
void* libHandle = NULL;
@@ -703,7 +705,7 @@
}
}
#endif
-#if !defined(__linux__) && !defined(MACOSX) /* Solaris */
+#if !defined(__linux__) && !defined(MACOSX) && !defined(__GLIBC__) /* Solaris */
static void xinerama_init_solaris()
{
void* libHandle = NULL;
@@ -763,11 +765,11 @@
}
DTRACE_PRINTLN("Xinerama extension is available");
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
xinerama_init_linux();
#else /* Solaris */
xinerama_init_solaris();
-#endif /* __linux__ || MACOSX */
+#endif /* __linux__ || MACOSX || __GLIBC__ */
}
#endif /* HEADLESS */
@@ -1644,7 +1646,7 @@
{
jobject point = NULL;
#ifndef HEADLESS /* return NULL in HEADLESS, Linux */
-#if !defined(__linux__) && !defined(MACOSX)
+#if !defined(__linux__) && !defined(MACOSX) && !defined(__GLIBC__)
int x,y;
AWT_LOCK();
--- openjdk/jdk/src/solaris/native/sun/awt/awt_Font.c.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/awt_Font.c
@@ -334,7 +334,7 @@
if (strcmp(style, "regular") == 0) {
altstyle = "roman";
}
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
if (!strcmp(family, "lucidasans")) {
family = "lucida";
}
--- openjdk/jdk/src/solaris/native/sun/awt/awt_InputMethod.c.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/awt_InputMethod.c
@@ -67,7 +67,7 @@
XIMPreeditDrawCallbackStruct *);
static void PreeditCaretCallback(XIC, XPointer,
XIMPreeditCaretCallbackStruct *);
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
static void StatusStartCallback(XIC, XPointer, XPointer);
static void StatusDoneCallback(XIC, XPointer, XPointer);
static void StatusDrawCallback(XIC, XPointer,
@@ -81,7 +81,7 @@
#define PreeditDoneIndex 1
#define PreeditDrawIndex 2
#define PreeditCaretIndex 3
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
#define StatusStartIndex 4
#define StatusDoneIndex 5
#define StatusDrawIndex 6
@@ -99,14 +99,14 @@
(XIMProc)PreeditDoneCallback,
(XIMProc)PreeditDrawCallback,
(XIMProc)PreeditCaretCallback,
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
(XIMProc)StatusStartCallback,
(XIMProc)StatusDoneCallback,
(XIMProc)StatusDrawCallback,
#endif
};
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
#define MAX_STATUS_LEN 100
typedef struct {
Window w; /*status window id */
@@ -146,7 +146,7 @@
#endif /* XAWT */
jobject x11inputmethod; /* global ref to X11InputMethod instance */
/* associated with the XIC */
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
StatusWindow *statusWindow; /* our own status window */
#else
#ifndef XAWT
@@ -425,7 +425,7 @@
static void
freeX11InputMethodData(JNIEnv *env, X11InputMethodData *pX11IMData)
{
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
if (pX11IMData->statusWindow != NULL){
StatusWindow *sw = pX11IMData->statusWindow;
XFreeGC(awt_display, sw->lightGC);
@@ -531,7 +531,7 @@
pX11IMData = getX11InputMethodData(env, currentX11InputMethodInstance);
if (pX11IMData == NULL) {
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
return False;
#else
return result;
@@ -539,7 +539,7 @@
}
if ((ic = pX11IMData->current_ic) == (XIC)0){
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
return False;
#else
return result;
@@ -648,7 +648,7 @@
return result;
}
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
static StatusWindow *createStatusWindow(
#ifdef XAWT
Window parent) {
@@ -993,7 +993,7 @@
}
}
}
-#endif /* __linux__ || MACOSX */
+#endif /* __linux__ || MACOSX || __GLIBC__ */
/*
* Creates two XICs, one for active clients and the other for passive
* clients. All information on those XICs are stored in the
@@ -1050,7 +1050,7 @@
return FALSE ;
}
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
on_the_spot_styles |= XIMStatusNothing;
/*kinput does not support XIMPreeditCallbacks and XIMStatusArea
@@ -1063,7 +1063,7 @@
break;
}
}
-#else /*! __linux__ && !MACOSX */
+#else /*! __linux__ && !MACOSX && !__GLIBC__ */
#ifdef XAWT
on_the_spot_styles |= XIMStatusNothing;
#else /* !XAWT */
@@ -1086,7 +1086,7 @@
on_the_spot_styles |= XIMStatusNothing;
#endif /* XAWT */
-#endif /* __linux__ || MACOSX */
+#endif /* __linux__ || MACOSX || __GLIBC__ */
for (i = 0; i < im_styles->count_styles; i++) {
active_styles |= im_styles->supported_styles[i] & on_the_spot_styles;
@@ -1134,7 +1134,7 @@
NULL);
if (preedit == (XVaNestedList)NULL)
goto err;
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
/*always try XIMStatusCallbacks for active client...*/
{
status = (XVaNestedList)XVaCreateNestedList(0,
@@ -1156,7 +1156,7 @@
XFree((void *)status);
XFree((void *)preedit);
}
-#else /* !__linux__ && !MACOSX */
+#else /* !__linux__ && !MACOSX && !__GLIBC__ */
#ifndef XAWT
if (on_the_spot_styles & XIMStatusArea) {
Widget parent;
@@ -1184,7 +1184,7 @@
}
#endif /* XAWT */
XFree((void *)preedit);
-#endif /* __linux__ || MACOSX */
+#endif /* __linux__ || MACOSX || __GLIBC__ */
pX11IMData->ic_passive = XCreateIC(X11im,
XNClientWindow, w,
XNFocusWindow, w,
@@ -1343,7 +1343,7 @@
}
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
static void
StatusStartCallback(XIC ic, XPointer client_data, XPointer call_data)
{
@@ -1411,7 +1411,7 @@
finally:
AWT_UNLOCK();
}
-#endif /* __linux__ || MACOSX */
+#endif /* __linux__ || MACOSX || __GLIBC__ */
static void CommitStringCallback(XIC ic, XPointer client_data, XPointer call_data) {
JNIEnv *env = GetJNIEnv();
@@ -1517,14 +1517,14 @@
/* Use IMInstantiate call back only on Linux, as there is a bug in Solaris
(4768335)
*/
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
registered = XRegisterIMInstantiateCallback(dpy, NULL, NULL,
NULL, (XIDProc)OpenXIMCallback, NULL);
if (!registered) {
/* directly call openXIM callback */
#endif
OpenXIMCallback(dpy, NULL, NULL);
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
}
#endif
@@ -1588,13 +1588,13 @@
#endif /* XAWT */
globalRef = (*env)->NewGlobalRef(env, this);
pX11IMData->x11inputmethod = globalRef;
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
pX11IMData->statusWindow = NULL;
-#else /* !__linux__ && !MACOSX */
+#else /* !__linux__ && !MACOSX && !__GLIBC__ */
#ifndef XAWT
pX11IMData->statusWidget = (Widget) NULL;
#endif /* XAWT */
-#endif /* __linux__ || MACOSX */
+#endif /* __linux__ || MACOSX || __GLIBC__ */
pX11IMData->lookup_buf = 0;
pX11IMData->lookup_buf_len = 0;
@@ -1741,14 +1741,14 @@
setXICFocus(pX11IMData->current_ic, req);
currentX11InputMethodInstance = pX11IMData->x11inputmethod;
currentFocusWindow = w;
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
if (active && pX11IMData->statusWindow && pX11IMData->statusWindow->on)
onoffStatusWindow(pX11IMData, w, True);
#endif
} else {
currentX11InputMethodInstance = NULL;
currentFocusWindow = 0;
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
onoffStatusWindow(pX11IMData, 0, False);
if (pX11IMData->current_ic != NULL)
#endif
@@ -1765,7 +1765,7 @@
Java_sun_awt_X11InputMethod_turnoffStatusWindow(JNIEnv *env,
jobject this)
{
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
X11InputMethodData *pX11IMData;
StatusWindow *statusWindow;
@@ -1862,7 +1862,7 @@
X11InputMethodData *pX11IMData;
XVaNestedList status;
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
/*do nothing for linux? */
#else
AWT_LOCK();
@@ -1968,7 +1968,7 @@
JNIEXPORT void JNICALL Java_sun_awt_X11_XInputMethod_adjustStatusWindow
(JNIEnv *env, jobject this, jlong window)
{
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
AWT_LOCK();
adjustStatusWindow(window);
AWT_UNLOCK();
--- openjdk/jdk/src/solaris/native/sun/awt/awt_MToolkit.c.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/awt_MToolkit.c
@@ -63,7 +63,7 @@
extern JavaVM *jvm;
#ifndef HEADLESS
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
extern void statusWindowEventHandler(XEvent event);
Boolean awt_dnd_process_event(XEvent* event);
#endif
@@ -1643,7 +1643,7 @@
*/
Widget widget=XtWindowToWidget(awt_display, xev.xany.window);
eventNumber++;
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
statusWindowEventHandler(xev);
#endif
xembed_eventHandler(&xev);
--- openjdk/jdk/src/solaris/native/sun/awt/awt_xembed_server.c.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/awt_xembed_server.c
@@ -35,7 +35,7 @@
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <Xm/MwmUtil.h>
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
#include <execinfo.h>
#endif
#include <stdio.h>
@@ -835,7 +835,7 @@
AWT_UNLOCK();
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
void
print_stack (void)
{
--- openjdk/jdk/src/solaris/native/sun/awt/fontpath.c.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/fontpath.c
@@ -23,7 +23,7 @@
* questions.
*/
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
#include <string.h>
#endif /* __linux__ */
#include <stdio.h>
@@ -52,7 +52,7 @@
#define AWT_UNLOCK()
#endif /* !HEADLESS */
-#if defined(__linux__) && !defined(MAP_FAILED)
+#if !defined(MAP_FAILED)
#define MAP_FAILED ((caddr_t)-1)
#endif
@@ -132,9 +132,9 @@
PACKAGE_PATH "/share/fonts/Type1",
NULL, /* terminates the list */
};
-#elif defined( __linux__)
+#elif defined( __linux__) || defined(__GLIBC__)
/* All the known interesting locations we have discovered on
- * various flavors of Linux
+ * various flavors of GNU/Linux
*/
static char *fullLinuxFontPath[] = {
"/usr/X11R6/lib/X11/fonts/TrueType", /* RH 7.1+ */
@@ -396,7 +396,7 @@
#endif /* !HEADLESS */
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
/* from awt_LoadLibrary.c */
JNIEXPORT jboolean JNICALL AWTIsHeadless();
#endif
@@ -521,7 +521,7 @@
*/
fcdirs = getFontConfigLocations();
-#if defined(__linux__)
+#if defined(__linux__) || defined(__GLIBC__)
knowndirs = fullLinuxFontPath;
#elif defined(MACOSX)
knowndirs = full_MACOSX_X11FontPath;
@@ -537,7 +537,7 @@
* be initialised.
*/
#ifndef HEADLESS
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
/* There's no headless build on linux ... */
if (!AWTIsHeadless()) { /* .. so need to call a function to check */
#endif
@@ -553,7 +553,7 @@
x11dirs = getX11FontPath();
}
AWT_UNLOCK();
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
}
#endif
#endif /* !HEADLESS */
--- openjdk/jdk/src/solaris/native/sun/awt/awt_Robot.c.orig
+++ openjdk/jdk/src/solaris/native/sun/awt/awt_Robot.c
@@ -46,7 +46,7 @@
#include "wsutils.h"
#include "list.h"
#include "multiVis.h"
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
#include <sys/socket.h>
#endif
--- openjdk/jdk/src/solaris/native/sun/java2d/j2d_md.h.orig
+++ openjdk/jdk/src/solaris/native/sun/java2d/j2d_md.h
@@ -30,7 +30,8 @@
/*
* Linux and MACOSX's version of <sys/types.h> does not define intptr_t
*/
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
+
#include <stdint.h>
#endif /* __linux__ || MACOSX */
--- openjdk/jdk/src/solaris/native/sun/java2d/loops/vis_FuncArray.c.orig
+++ openjdk/jdk/src/solaris/native/sun/java2d/loops/vis_FuncArray.c
@@ -804,7 +804,7 @@
static int initialized;
static int usevis = JNI_TRUE;
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
# define ULTRA_CHIP "sparc64"
#else
# define ULTRA_CHIP "sun4u"
--- openjdk/jdk/src/solaris/native/sun/net/dns/ResolverConfigurationImpl.c.orig
+++ openjdk/jdk/src/solaris/native/sun/net/dns/ResolverConfigurationImpl.c
@@ -33,7 +33,7 @@
#include <strings.h>
#endif
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
#include <string.h>
#endif
--- openjdk/jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c.orig
+++ openjdk/jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c
@@ -29,7 +29,7 @@
#include "jlong.h"
#include "sun_net_spi_DefaultProxySelector.h"
#include <stdio.h>
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
#include <string.h>
#else
#include <strings.h>
--- openjdk/jdk/src/solaris/native/sun/xawt/XToolkit.c.orig
+++ 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__)
#include <execinfo.h>
#endif
@@ -785,7 +785,7 @@
return ret;
}
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
void print_stack(void)
{
void *array[10];
--- openjdk/jdk/src/solaris/native/java/nio/MappedByteBuffer.c.orig
+++ openjdk/jdk/src/solaris/native/java/nio/MappedByteBuffer.c
@@ -40,7 +40,7 @@
int result = 0;
int i = 0;
void *a = (void *) jlong_to_ptr(address);
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
unsigned char *vec = (unsigned char *)malloc(numPages * sizeof(char));
#else
char *vec = (char *)malloc(numPages * sizeof(char));
--- openjdk/jdk/src/solaris/native/java/util/TimeZone_md.c.orig
+++ openjdk/jdk/src/solaris/native/java/util/TimeZone_md.c
@@ -49,7 +49,7 @@
#define fileclose fclose
#endif
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
static const char *ETC_TIMEZONE_FILE = "/etc/timezone";
@@ -125,7 +125,7 @@
return NULL;
}
-#if defined(AIX) || defined(__linux__) || defined(MACOSX) || (defined(__solaris__) \
+#if defined(AIX) || defined(__linux__) || defined(__GLIBC__) || defined(MACOSX) || (defined(__solaris__) \
&& (defined(_POSIX_PTHREAD_SEMANTICS) || defined(_LP64)))
while (readdir_r(dirp, entry, &dp) == 0 && dp != NULL) {
#else
@@ -214,7 +214,7 @@
return tz;
}
-#if defined(__linux__) || defined(MACOSX)
+#if defined(__linux__) || defined(MACOSX) || defined(__GLIBC__)
/*
* Performs Linux specific mapping and returns a zone ID
@@ -230,7 +230,7 @@
char *buf;
size_t size;
-#ifdef __linux__
+#ifdef __linux__ || defined(__GLIBC__)
/*
* Try reading the /etc/timezone file for Debian distros. There's
* no spec of the file format available. This parsing assumes that
@@ -705,7 +705,7 @@
tz = getenv("TZ");
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
if (tz == NULL) {
#else
#if defined (__solaris__) || defined(AIX)
@@ -731,7 +731,7 @@
#endif
if (tz != NULL) {
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/*
* Ignore "posix/" prefix.
*/
--- openjdk/jdk/src/solaris/native/java/io/io_util_md.c.orig
+++ openjdk/jdk/src/solaris/native/java/io/io_util_md.c
@@ -68,7 +68,7 @@
WITH_PLATFORM_STRING(env, path, ps) {
FD fd;
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
/* Remove trailing slashes, since the kernel won't */
char *p = (char *)ps + strlen(ps) - 1;
while ((p > ps) && (*p == '/'))
--- openjdk/jdk/src/solaris/native/java/lang/locale_str.h.orig
+++ openjdk/jdk/src/solaris/native/java/lang/locale_str.h
@@ -48,7 +48,7 @@
"gl", "gl_ES",
"he", "iw_IL",
"hr", "hr_HR",
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
"hs", "en_US", // used on Linux, not clear what it stands for
#endif
"hu", "hu_HU",
@@ -78,14 +78,14 @@
"sv", "sv_SE",
"th", "th_TH",
"tr", "tr_TR",
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
"ua", "en_US", // used on Linux, not clear what it stands for
#endif
"uk", "uk_UA",
"vi", "vi_VN",
"wa", "wa_BE",
"zh", "zh_CN",
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
"bokmal", "nb_NO",
"bokm\xE5l", "nb_NO",
"catalan", "ca_ES",
@@ -146,13 +146,13 @@
"POSIX", "en",
"cz", "cs",
"he", "iw",
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
"hs", "en", // used on Linux, not clear what it stands for
#endif
"id", "in",
"sh", "sr", // sh is deprecated
"su", "fi",
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
"ua", "en", // used on Linux, not clear what it stands for
"catalan", "ca",
"croatian", "hr",
@@ -195,7 +195,7 @@
* Linux/Solaris script string to Java script name mapping table.
*/
static char *script_names[] = {
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
"cyrillic", "Cyrl",
"devanagari", "Deva",
"iqtelif", "Latn",
@@ -208,7 +208,7 @@
* Linux/Solaris country string to ISO3166 string mapping table.
*/
static char *country_names[] = {
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
"RN", "US", // used on Linux, not clear what it stands for
#endif
"YU", "CS", // YU has been removed from ISO 3166
--- openjdk/jdk/src/solaris/native/java/lang/UNIXProcess_md.c.orig
+++ openjdk/jdk/src/solaris/native/java/lang/UNIXProcess_md.c
@@ -400,7 +400,7 @@
#ifdef START_CHILD_USE_CLONE
static pid_t
cloneChild(ChildStuff *c) {
-#ifdef __linux__
+#ifdef __linux__ || defined(__GLIBC__)
#define START_CHILD_CLONE_STACK_SIZE (64 * 1024)
/*
* See clone(2).
--- openjdk/jdk/src/solaris/native/java/lang/java_props_md.c.orig
+++ openjdk/jdk/src/solaris/native/java/lang/java_props_md.c
@@ -23,7 +23,7 @@
* questions.
*/
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
#include <stdio.h>
#include <ctype.h>
#endif
@@ -57,7 +57,7 @@
#include "java_props.h"
#if !defined(_ALLBSD_SOURCE)
-#ifdef __linux__
+#ifdef __linux__ || defined(__GLIBC__)
#ifndef CODESET
#define CODESET _NL_CTYPE_CODESET_NAME
#endif
@@ -151,7 +151,7 @@
lc = setlocale(cat, NULL);
#endif
-#ifndef __linux__
+#if !defined(__linux__) && !defined(__GLIBC__)
if (lc == NULL) {
return 0;
}
@@ -293,7 +293,7 @@
* in order to use optimizations. */
*std_encoding = (*p != '\0') ? p : "ISO8859-1";
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/*
* Remap the encoding string to a different value for japanese
* locales on linux so that customized converters are used instead
@@ -536,7 +536,7 @@
sprops.unicode_encoding = "UnicodeBig";
#endif
#else /* !_ALLBSD_SOURCE */
-#ifdef __linux__
+#ifdef __linux__ || defined(__GLIBC__)
#if __BYTE_ORDER == __LITTLE_ENDIAN
sprops.unicode_encoding = "UnicodeLittle";
#else
--- openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c.orig
+++ openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
@@ -33,7 +33,7 @@
#ifdef __solaris__
#include <fcntl.h>
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
#include <unistd.h>
#include <sys/utsname.h>
#include <netinet/ip.h>
@@ -335,7 +335,7 @@
/* The fdObj'fd */
jint fd;
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
SOCKADDR addr;
int len;
#endif
@@ -345,7 +345,7 @@
}
fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
#ifdef __linux__
if (isOldKernel) {
int t = 1;
@@ -356,14 +356,21 @@
#ifdef AF_INET6
if (ipv6_available()) {
struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)&addr;
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ 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;
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
him4->sin_family = AF_UNSPEC;
+#else
len = sizeof(struct sockaddr_in);
+#endif
}
JVM_Connect(fd, (struct sockaddr *)&addr, len);
--- openjdk/jdk/src/solaris/native/java/net/Inet6AddressImpl.c.orig
+++ openjdk/jdk/src/solaris/native/java/net/Inet6AddressImpl.c
@@ -73,7 +73,7 @@
} else {
// ensure null-terminated
hostname[NI_MAXHOST] = '\0';
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
/* On Linux/FreeBSD gethostname() says "host.domain.sun.com". On
* Solaris gethostname() says "host", so extra work is needed.
*/
@@ -670,7 +670,7 @@
case ENETUNREACH: /* Network Unreachable */
case EAFNOSUPPORT: /* Address Family not supported */
case EADDRNOTAVAIL: /* address is not available on the remote machine */
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
case EINVAL:
case EHOSTUNREACH:
/*
--- openjdk/jdk/src/solaris/native/java/net/Inet4AddressImpl.c.orig
+++ openjdk/jdk/src/solaris/native/java/net/Inet4AddressImpl.c
@@ -333,7 +333,7 @@
/* Something went wrong, maybe networking is not setup? */
strcpy(hostname, "localhost");
} else {
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/* On Linux gethostname() says "host.domain.sun.com". On
* Solaris gethostname() says "host", so extra work is needed.
*/
@@ -874,7 +874,7 @@
* EHOSTUNREACH which is not an error, but the answer to our question.
*/
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
case EINVAL:
case EHOSTUNREACH:
/*
--- openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c.orig
+++ openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c
@@ -63,17 +63,17 @@
#define _PATH_PROCNET_IFINET6 "/proc/net/if_inet6"
#endif
-#if defined(_ALLBSD_SOURCE)
+#if defined(_ALLBSD_SOURCE) || defined(__FreeBSD_kernel__)
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/sockio.h>
-#if defined(__APPLE__)
+#if defined(__APPLE__) || defined(__FreeBSD_kernel__)
#include <net/ethernet.h>
#include <net/if_var.h>
#include <net/if_dl.h>
#include <netinet/in_var.h>
-#include <ifaddrs.h>
#endif
+#include <ifaddrs.h>
#endif
#include "jvm.h"
@@ -1029,7 +1029,7 @@
/** Linux, AIX **/
-#if !defined(__solaris__)
+#if !defined(__solaris__) && !defined(__FreeBSD_kernel__)
/* Open socket for further ioct calls, try v4 socket first and
* if it falls return v6 socket
*/
@@ -1755,7 +1755,11 @@
* try the old way.
*/
memset(&lif, 0, sizeof(lif));
+#if defined(__FreeBSD_kernel__)
+ strcpy(lif.lifr_name, ifname);
+#else
strlcpy(lif.lifr_name, ifname, sizeof(lif.lifr_name));
+#endif
if (ioctl(sock, SIOCGLIFHWADDR, &lif) != -1) {
struct sockaddr_dl *sp;
@@ -1841,7 +1845,7 @@
/** BSD **/
-#ifdef _ALLBSD_SOURCE
+#if defined(_ALLBSD_SOURCE) || defined(__FreeBSD_kernel__)
/* Open socket for further ioct calls, try v4 socket first and
* if it falls return v6 socket
*/
@@ -1970,7 +1974,11 @@
continue;
memset(&ifr6, 0, sizeof(ifr6));
+#if defined(__FreeBSD_kernel__)
+ strcpy(ifr6.ifr_name, ifa->ifa_name);
+#else
strlcpy(ifr6.ifr_name, ifa->ifa_name, sizeof(ifr6.ifr_name));
+#endif
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) {
--- openjdk/jdk/src/solaris/native/java/net/net_util_md.c.orig
+++ openjdk/jdk/src/solaris/native/java/net/net_util_md.c
@@ -56,6 +56,11 @@
#include <net/route.h>
#include <sys/utsname.h>
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#endif
+
#ifndef IPV6_FLOWINFO_SEND
#define IPV6_FLOWINFO_SEND 33
#endif
--- openjdk/jdk/src/solaris/native/java/net/PlainSocketImpl.c.orig
+++ openjdk/jdk/src/solaris/native/java/net/PlainSocketImpl.c
@@ -32,7 +32,7 @@
#endif
#include <netinet/tcp.h> /* Defines TCP_NODELAY, needed for 2.6 */
#include <netinet/in.h>
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
#include <netinet/ip.h>
#endif
#include <netdb.h>
@@ -41,7 +41,7 @@
#ifdef __solaris__
#include <fcntl.h>
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
#include <unistd.h>
#endif
@@ -467,7 +467,7 @@
/* report the appropriate exception */
if (connect_rv < 0) {
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
/*
* Linux/GNU distribution setup /etc/hosts so that
* InetAddress.getLocalHost gets back the loopback address
--- openjdk/jdk/src/solaris/native/java/net/net_util_md.h.orig
+++ openjdk/jdk/src/solaris/native/java/net/net_util_md.h
@@ -46,7 +46,7 @@
close subroutine does not return until the select call returns.
...
*/
-#if defined(__linux__) || defined(MACOSX) || defined (_AIX)
+#if defined(__linux__) || defined(MACOSX) || defined (_AIX) || defined(__GLIBC__)
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,
@@ -159,7 +159,7 @@
/************************************************************************
* Utilities
*/
-#ifdef __linux__
+#if defined(__linux__)
extern int kernelIsV22();
extern int kernelIsV24();
#endif
--- openjdk/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java.orig
+++ openjdk/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java
@@ -295,7 +295,7 @@
super.setOsNameAndVersion();
- if (!osName.equals("Linux")) {
+ if (!(osName.equals("Linux") || osName.equals("GNU/kFreeBSD"))) {
return;
}
try {
--- openjdk/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java.orig
+++ openjdk/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java
@@ -170,6 +170,7 @@
static boolean isBSD() {
return (osname.equals("Linux") ||
+ osname.equals("GNU/kFreeBSD") ||
osname.contains("OS X"));
}
--- openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileStore.java.orig
+++ openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileStore.java
@@ -101,9 +101,7 @@
LinuxNativeDispatcher.fgetxattr(fd, "user.java".getBytes(), 0L, 0);
return true;
} catch (UnixException e) {
- // attribute does not exist
- if (e.errno() == UnixConstants.ENODATA)
- return true;
+ return false;
} finally {
UnixNativeDispatcher.close(fd);
}
--- openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxDosFileAttributeView.java.orig
+++ openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxDosFileAttributeView.java
@@ -238,9 +238,6 @@
}
throw new UnixException("Value of " + DOS_XATTR_NAME + " attribute is invalid");
} catch (UnixException x) {
- // default value when attribute does not exist
- if (x.errno() == ENODATA)
- return 0;
throw x;
} finally {
buffer.release();
--- openjdk/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java.orig
+++ openjdk/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java
@@ -66,7 +66,7 @@
.doPrivileged(new GetPropertyAction("os.name"));
if (osname.equals("SunOS"))
return createProvider("sun.nio.fs.SolarisFileSystemProvider");
- if (osname.equals("Linux"))
+ if (osname.equals("Linux") || osname.equals("GNU/kFreeBSD"))
return createProvider("sun.nio.fs.LinuxFileSystemProvider");
if (osname.equals("Darwin") || osname.contains("OS X"))
return createProvider("sun.nio.fs.MacOSXFileSystemProvider");
--- openjdk/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java.orig
+++ openjdk/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java
@@ -48,7 +48,7 @@
.doPrivileged(new GetPropertyAction("os.name"));
if (osname.equals("SunOS"))
return new SolarisAsynchronousChannelProvider();
- if (osname.equals("Linux"))
+ if (osname.equals("Linux") || osname.equals("GNU/kFreeBSD"))
return new LinuxAsynchronousChannelProvider();
if (osname.contains("OS X"))
return new BsdAsynchronousChannelProvider();
--- openjdk/jdk/src/solaris/classes/sun/awt/X11/XScrollbarPeer.java.orig
+++ openjdk/jdk/src/solaris/classes/sun/awt/X11/XScrollbarPeer.java
@@ -74,7 +74,7 @@
* Currently uses hardcoded values
*/
private int getDefaultDimension() {
- if (System.getProperty("os.name").equals("Linux")) {
+ if (System.getProperty("os.name").equals("Linux") || System.getProperty("os.name").equals("GNU/kFreeBSD")) {
return DEFAULT_WIDTH_LINUX;
} else {
return DEFAULT_WIDTH_SOLARIS;
--- openjdk/jdk/src/share/native/java/lang/fdlibm/include/jfdlibm.h.orig
+++ openjdk/jdk/src/share/native/java/lang/fdlibm/include/jfdlibm.h
@@ -61,7 +61,7 @@
#define log1p jlog1p
#define expm1 jexpm1
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
#define __ieee754_sqrt __j__ieee754_sqrt
#define __ieee754_acos __j__ieee754_acos
#define __ieee754_acosh __j__ieee754_acosh
--- openjdk/jdk/src/share/classes/sun/font/FontUtilities.java.orig
+++ openjdk/jdk/src/share/classes/sun/font/FontUtilities.java
@@ -76,7 +76,7 @@
String osName = System.getProperty("os.name", "unknownOS");
isSolaris = osName.startsWith("SunOS");
- isLinux = osName.startsWith("Linux");
+ isLinux = osName.startsWith("Linux") || osName.equals("GNU/kFreeBSD");
isMacOSX = osName.contains("OS X"); // TODO: MacOSX
--- openjdk/jdk/src/share/classes/sun/print/PSPrinterJob.java.orig
+++ openjdk/jdk/src/share/classes/sun/print/PSPrinterJob.java
@@ -1568,7 +1568,9 @@
}
String osname = System.getProperty("os.name");
- if (osname.equals("Linux") || osname.contains("OS X")) {
+ if (osname.equals("Linux") ||
+ osname.equals("GNU/kFreeBSD") ||
+ osname.contains("OS X")) {
execCmd = new String[ncomps];
execCmd[n++] = "/usr/bin/lpr";
if ((pFlags & PRINTER) != 0) {
--- openjdk/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java.orig
+++ openjdk/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java
@@ -1298,6 +1298,7 @@
String osName = AccessController.doPrivileged(
new GetPropertyAction("os.name"));
if ("SunOS".equals(osName) || "Linux".equals(osName)
+ || "GNU/kFreeBSD".equals(osName)
|| osName.contains("OS X") || osName.contains("AIX")) {
charset("x-COMPOUND_TEXT", "COMPOUND_TEXT",
new String[] {
--- openjdk/jdk/src/share/classes/sun/security/jgss/GSSManagerImpl.java.orig
+++ openjdk/jdk/src/share/classes/sun/security/jgss/GSSManagerImpl.java
@@ -48,6 +48,7 @@
public Boolean run() {
String osname = System.getProperty("os.name");
if (osname.startsWith("SunOS") ||
+ osname.startsWith("GNU/kFreeBSD") ||
osname.startsWith("Linux")) {
return new Boolean(System.getProperty
(USE_NATIVE_PROP));
--- openjdk/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java.orig
+++ openjdk/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java
@@ -413,6 +413,7 @@
if (osname != null) {
if (osname.startsWith("SunOS") ||
+ osname.startsWith("GNU/kFreeBSD") ||
(osname.startsWith("Linux"))) {
try {
// Load the native code if necessary
--- openjdk/jdk/src/share/classes/java/awt/GraphicsEnvironment.java.orig
+++ openjdk/jdk/src/share/classes/java/awt/GraphicsEnvironment.java
@@ -178,6 +178,7 @@
} else {
headless = defaultHeadless =
Boolean.valueOf(("Linux".equals(osName) ||
+ "GNU/kFreeBSD".equals(osName) ||
"SunOS".equals(osName) ||
"FreeBSD".equals(osName) ||
"NetBSD".equals(osName) ||
--- openjdk/jdk/make/com/sun/nio/Makefile.orig
+++ openjdk/jdk/make/com/sun/nio/Makefile
@@ -38,7 +38,7 @@
all build clean clobber::
- $(SUBDIRS-loop)
+# $(SUBDIRS-loop)
clean clobber::
- $(RM) -r $(CLASSDESTDIR)/com/sun/nio
+# $(RM) -r $(CLASSDESTDIR)/com/sun/nio
--- openjdk/jdk/make/java/nio/Makefile.orig
+++ openjdk/jdk/make/java/nio/Makefile
@@ -94,6 +94,70 @@
else
+ifeq ($(SYSTEM_UNAME),GNU/kFreeBSD)
+
+FILES_java += \
+ sun/nio/ch/AbstractPollSelectorImpl.java \
+ sun/nio/ch/DevPollArrayWrapper.java \
+ sun/nio/ch/DevPollSelectorImpl.java \
+ sun/nio/ch/DevPollSelectorProvider.java \
+ sun/nio/ch/InheritedChannel.java \
+ sun/nio/ch/LinuxAsynchronousChannelProvider.java \
+ sun/nio/ch/PollSelectorProvider.java \
+ sun/nio/ch/PollSelectorImpl.java \
+ sun/nio/ch/Port.java \
+ sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \
+ sun/nio/ch/SolarisAsynchronousChannelProvider.java \
+ sun/nio/ch/SolarisEventPort.java \
+ sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \
+ sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \
+ \
+ sun/nio/fs/GnomeFileTypeDetector.java \
+ sun/nio/fs/LinuxDosFileAttributeView.java \
+ sun/nio/fs/LinuxFileStore.java \
+ sun/nio/fs/LinuxFileSystem.java \
+ sun/nio/fs/LinuxFileSystemProvider.java \
+ sun/nio/fs/LinuxUserDefinedFileAttributeView.java \
+ sun/nio/fs/LinuxNativeDispatcher.java \
+ sun/nio/fs/PollingWatchService.java \
+ sun/nio/fs/SolarisNativeDispatcher.java \
+ sun/nio/fs/SolarisWatchService.java \
+ sun/nio/fs/UnixChannelFactory.java \
+ sun/nio/fs/UnixCopyFile.java \
+ sun/nio/fs/UnixDirectoryStream.java \
+ sun/nio/fs/UnixException.java \
+ sun/nio/fs/UnixFileAttributeViews.java \
+ sun/nio/fs/UnixFileAttributes.java \
+ sun/nio/fs/UnixFileKey.java \
+ sun/nio/fs/UnixFileModeAttribute.java \
+ sun/nio/fs/UnixFileStore.java \
+ sun/nio/fs/UnixFileStoreAttributes.java \
+ sun/nio/fs/UnixFileSystem.java \
+ sun/nio/fs/UnixFileSystemProvider.java \
+ sun/nio/fs/UnixMountEntry.java \
+ sun/nio/fs/UnixNativeDispatcher.java \
+ sun/nio/fs/UnixPath.java \
+ sun/nio/fs/UnixSecureDirectoryStream.java \
+ sun/nio/fs/UnixUriUtils.java \
+ sun/nio/fs/UnixUserPrincipals.java
+
+FILES_export += \
+ sun/nio/ch/DevPollArrayWrapper.java \
+ sun/nio/ch/InheritedChannel.java \
+ sun/nio/ch/NativeThread.java \
+ sun/nio/ch/SolarisEventPort.java \
+ sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \
+ sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \
+ \
+ sun/nio/fs/GnomeFileTypeDetector.java \
+ sun/nio/fs/LinuxNativeDispatcher.java \
+ sun/nio/fs/SolarisNativeDispatcher.java \
+ sun/nio/fs/SolarisWatchService.java \
+ sun/nio/fs/UnixCopyFile.java \
+ sun/nio/fs/UnixNativeDispatcher.java
+
+else
+
FILES_java += \
sun/nio/ch/AbstractPollSelectorImpl.java \
sun/nio/ch/DevPollArrayWrapper.java \
@@ -164,6 +228,8 @@
sun/nio/fs/UnixCopyFile.java \
sun/nio/fs/UnixNativeDispatcher.java
+endif # kFreeBSD
+
FILES_gen += \
sun/nio/fs/UnixConstants.java
@@ -172,7 +238,7 @@
syscalls_fp.c
endif
-endif
+endif # else
ifeq ($(PLATFORM), solaris)
@@ -221,6 +287,22 @@
ifeq ($(PLATFORM), linux)
+ifeq ($(SYSTEM_UNAME),GNU/kFreeBSD)
+
+FILES_c += \
+ InheritedChannel.c \
+ NativeThread.c \
+ PollArrayWrapper.c \
+ UnixAsynchronousServerSocketChannelImpl.c \
+ UnixAsynchronousSocketChannelImpl.c \
+ \
+ GnomeFileTypeDetector.c \
+ LinuxNativeDispatcher.c \
+ UnixCopyFile.c \
+ UnixNativeDispatcher.c
+
+else
+
FILES_c += \
EPoll.c \
EPollArrayWrapper.c \
@@ -345,6 +427,7 @@
endif # PLATFORM = aix
+endif # kFreeBSD
ifeq ($(PLATFORM), macosx)
FILES_java += \
--- openjdk/jdk/make/common/shared/Sanity.gmk.orig
+++ openjdk/jdk/make/common/shared/Sanity.gmk
@@ -114,12 +114,14 @@
elif [ -f /etc/lsb-release ] ; then \
$(EGREP) DISTRIB_RELEASE /etc/lsb-release | $(SED) -e 's@.*DISTRIB_RELEASE=\(.*\)@\1@'; \
fi)
+ifneq ($(SYSTEM_UNAME),GNU/kFreeBSD)
ALSA_INCLUDE=/usr/include/alsa/version.h
ALSA_LIBRARY=/usr/lib/libasound.so
_ALSA_VERSION := $(shell $(EGREP) SND_LIB_VERSION_STR $(ALSA_INCLUDE) | \
$(SED) -e 's@.*"\(.*\)".*@\1@' )
ALSA_VERSION := $(call GetVersion,$(_ALSA_VERSION))
endif
+endif
ifeq ($(PLATFORM), macosx)
# What kind of system we are using
--- openjdk/jdk/make/common/shared/Defs-versions.gmk.orig
+++ openjdk/jdk/make/common/shared/Defs-versions.gmk
@@ -158,7 +158,9 @@
REQUIRED_OS_VERSION = 2.6
REQUIRED_OS_VARIANT_NAME = Fedora
REQUIRED_OS_VARIANT_VERSION = 9
- REQUIRED_ALSA_VERSION = 0.9.1
+ifneq ($(SYSTEM_UNAME),GNU/kFreeBSD)
+ REQUIRED_ALSA_VERSION = 0.9.1
+endif
REQUIRED_COMPILER_NAME = GCC4
REQUIRED_COMPILER_VERSION = GCC4
REQUIRED_GCC_VER = 2.95
--- openjdk/jdk/make/common/shared/Platform.gmk.orig
+++ openjdk/jdk/make/common/shared/Platform.gmk
@@ -162,7 +162,7 @@
# Platform settings specific to Linux
-ifeq ($(SYSTEM_UNAME), Linux)
+ifneq (,$(filter Linux GNU/kFreeBSD, $(SYSTEM_UNAME)))
PLATFORM = linux
# Arch and OS name/version
ifdef CROSS_COMPILE_ARCH
--- openjdk/jdk/make/common/shared/Sanity-Settings.gmk.orig
+++ openjdk/jdk/make/common/shared/Sanity-Settings.gmk
@@ -186,8 +186,10 @@
endif
ifeq ($(PLATFORM),linux)
ifdef REQUIRED_ALSA_VERSION
+ ifneq ($(SYSTEM_UNAME),GNU/kFreeBSD)
ALL_SETTINGS+=$(call addRequiredSetting,ALSA_VERSION)
endif
+ endif
endif
ALL_SETTINGS+=$(call addRequiredVersionSetting,OS_VERSION)
ALL_SETTINGS+=$(call addOptionalSetting,OS_VARIANT_NAME)
--- openjdk/jdk/make/javax/sound/Makefile.orig
+++ openjdk/jdk/make/javax/sound/Makefile
@@ -105,10 +105,12 @@
endif # PLATFORM win32
ifeq ($(PLATFORM), linux)
+ifneq ($(SYSTEM_UNAME),GNU/kFreeBSD)
# ALSA handles directaudio, ports, and MIDI
SUBDIRS += jsoundalsa
EXTRA_SOUND_JNI_LIBS += jsoundalsa
#MXSPP_ADD = $(PLATFORM)-$(ARCH)/
+endif # kFreeBSD
endif # PLATFORM linux
ifeq ($(PLATFORM), macosx)
--- openjdk/jdk/src/solaris/native/sun/net/portconfig.c.orig
+++ openjdk/jdk/src/solaris/native/sun/net/portconfig.c
@@ -28,7 +28,7 @@
#include <unistd.h>
#include <errno.h>
-#if defined(_ALLBSD_SOURCE)
+#if defined(_ALLBSD_SOURCE) || defined (__FreeBSD_kernel__)
#include <sys/sysctl.h>
#endif
@@ -66,7 +66,7 @@
range->higher = net_getParam("/dev/tcp", "tcp_largest_anon_port");
return 0;
}
-#elif defined(_ALLBSD_SOURCE)
+#elif defined(_ALLBSD_SOURCE) || defined (__FreeBSD_kernel__)
{
int ret;
size_t size = sizeof(range->lower);
--- openjdk/jdk/src/solaris/classes/sun/net/PortConfig.java.orig
+++ openjdk/jdk/src/solaris/classes/sun/net/PortConfig.java
@@ -55,6 +55,9 @@
} else if (os.contains("OS X")) {
defaultLower = 49152;
defaultUpper = 65535;
+ } else if (os.contains("FreeBSD")) {
+ defaultLower = 10000;
+ defaultUpper = 65535;
} else {
throw new InternalError(
"sun.net.PortConfig: unknown OS");
Description:
- Add iddef TIOCINQ = FIONREAD
jamvm/src/classlib/openjdk/jvm.c
- Update configure for kfreebsd-amd64
jamvm/jamvm/configure.ac
Author: Damien Raude-Morvan <drazzib@debian.org>
Last-Update: 2011-08-05
Forwarded: no
--- jamvm/jamvm/configure.ac.orig
+++ jamvm/jamvm/configure.ac
@@ -39,6 +39,7 @@
i386-*-freebsd*) host_os=bsd libdl_needed=no ;;
i386-*-solaris*) host_cpu=x86 host_os=solaris ;;
x86_64-*-linux*) host_os=linux ;;
+x86_64-*-kfreebsd*) host_os=linux ;;
hppa*-*-linux*) host_cpu=parisc host_os=linux ;;
mips*-*-linux*) host_cpu=mips host_os=linux ;;
x86_64-*-openbsd*) host_os=bsd libdl_needed=no ;;
--- jamvm/jamvm/src/classlib/openjdk/jvm.c.orig
+++ jamvm/jamvm/src/classlib/openjdk/jvm.c
@@ -64,6 +64,10 @@
#define have_monotonic_clock FALSE
#endif
+#ifndef TIOCINQ
+#define TIOCINQ FIONREAD
+#endif
+
static Class *cloneable_class, *constant_pool_class;
static Class *exception_class, *runtime_excp_class;
--- openjdk/hotspot/src/os/posix/launcher/java_md.c.orig
+++ openjdk/hotspot/src/os/posix/launcher/java_md.c
@@ -41,7 +41,7 @@
#include "version_comp.h"
#endif
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
#include <pthread.h>
#else
#include <thread.h>
@@ -107,7 +107,7 @@
* A collection of useful strings. One should think of these as #define
* entries, but actual strings can be more efficient (with many compilers).
*/
-#ifdef __linux__
+#if defined(__linux__) || defined(__GLIBC__)
static const char *system_dir = "/usr/java";
static const char *user_dir = "/java";
#else /* Solaris */
@@ -444,7 +444,7 @@
runpath = getenv(LD_LIBRARY_PATH);
#endif /* __sun */
-#if defined(__linux__)
+#if defined(__linux__) || defined(__GLIBC__)
/*
* On linux, if a binary is running as sgid or suid, glibc sets
* LD_LIBRARY_PATH to the empty string for security purposes. (In
@@ -834,7 +834,7 @@
jboolean
GetApplicationHome(char *buf, jint bufsize)
{
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
char *execname = GetExecname();
if (execname) {
strncpy(buf, execname, bufsize-1);
@@ -1003,7 +1003,7 @@
}
}
}
-#elif defined(__linux__)
+#elif defined(__linux__) || defined(__GLIBC__)
{
const char* self = "/proc/self/exe";
char buf[PATH_MAX+1];
@@ -1898,7 +1898,7 @@
int
ContinueInNewThread(int (JNICALL *continuation)(void *), jlong stack_size, void * args) {
int rslt;
-#if defined(__linux__) || defined(AIX) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(AIX) || defined(_ALLBSD_SOURCE) || defined(__GLIBC__)
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
--- openjdk/hotspot/src/os/linux/vm/decoder_linux.cpp.orig
+++ openjdk/hotspot/src/os/linux/vm/decoder_linux.cpp
@@ -22,6 +22,7 @@
*
*/
+#include "utilities/globalDefinitions.hpp"
#include "prims/jvm.h"
#include "utilities/decoder_elf.hpp"
--- openjdk/hotspot/src/os/linux/vm/attachListener_linux.cpp.orig
+++ openjdk/hotspot/src/os/linux/vm/attachListener_linux.cpp
@@ -39,6 +39,10 @@
#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *)0)->sun_path)
#endif
+#if defined(__FreeBSD_kernel__)
+#include <sys/ucred.h>
+#endif
+
// The attach mechanism on Linux uses a UNIX domain socket. An attach listener
// thread is created at startup or is created on-demand via a signal from
// the client tool. The attach listener creates a socket and binds it to a file
@@ -337,9 +341,15 @@
// get the credentials of the peer and check the effective uid/guid
// - check with jeff on this.
+#if defined(LOCAL_PEERCRED) /* GNU/kFreeBSD */
+ struct xucred cred_info;
+ socklen_t optlen = sizeof(cred_info);
+ if (::getsockopt(s, SOL_SOCKET, LOCAL_PEERCRED, (void*)&cred_info, &optlen) == -1) {
+#else
struct ucred cred_info;
socklen_t optlen = sizeof(cred_info);
if (::getsockopt(s, SOL_SOCKET, SO_PEERCRED, (void*)&cred_info, &optlen) == -1) {
+#endif
int res;
RESTARTABLE(::close(s), res);
continue;
@@ -347,7 +357,11 @@
uid_t euid = geteuid();
gid_t egid = getegid();
+#if defined(LOCAL_PEERCRED) /* GNU/kFreeBSD */
+ if (cred_info.cr_uid != euid || cred_info.cr_gid != egid) {
+#else
if (cred_info.uid != euid || cred_info.gid != egid) {
+#endif
int res;
RESTARTABLE(::close(s), res);
continue;
--- openjdk/hotspot/src/os/linux/vm/jvm_linux.cpp.orig
+++ openjdk/hotspot/src/os/linux/vm/jvm_linux.cpp
@@ -169,7 +169,9 @@
"WINCH", SIGWINCH, /* Window size change (4.3 BSD, Sun). */
"POLL", SIGPOLL, /* Pollable event occurred (System V). */
"IO", SIGIO, /* I/O now possible (4.2 BSD). */
+#ifdef SIGPWR
"PWR", SIGPWR, /* Power failure restart (System V). */
+#endif
#ifdef SIGSYS
"SYS", SIGSYS /* Bad system call. Only on some Linuxen! */
#endif
--- openjdk/hotspot/src/os/linux/vm/os_linux.cpp.orig
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
@@ -22,6 +22,7 @@
*
*/
+#include "utilities/globalDefinitions.hpp"
// no precompiled headers
#include "classfile/classLoader.hpp"
#include "classfile/systemDictionary.hpp"
@@ -110,8 +111,16 @@
# include <semaphore.h>
# include <fcntl.h>
# include <string.h>
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+# include <sys/param.h>
+# include <sys/sysctl.h>
+#ifndef ETIME
+# define ETIME ETIMEDOUT
+#endif
+#else
# include <syscall.h>
# include <sys/sysinfo.h>
+#endif
# include <gnu/libc-version.h>
# include <sys/ipc.h>
# include <sys/shm.h>
@@ -220,11 +229,22 @@
}
julong os::Linux::available_memory() {
+#ifndef __FreeBSD_kernel__
// values in struct sysinfo are "unsigned long"
struct sysinfo si;
sysinfo(&si);
return (julong)si.freeram * si.mem_unit;
+#else
+ int mib[2] = {CTL_HW, HW_USERMEM}, mem;
+ size_t len;
+ len = sizeof(mem);
+ if (sysctl(mib, 2, &mem, &len, NULL, 0) == 0) {
+ return (julong) mem;
+ } else {
+ return 0;
+ }
+#endif
}
julong os::physical_memory() {
@@ -2299,18 +2319,22 @@
st->print("Memory:");
st->print(" %dk page", os::vm_page_size()>>10);
+#ifndef __FreeBSD_kernel__
// values in struct sysinfo are "unsigned long"
struct sysinfo si;
sysinfo(&si);
+#endif
st->print(", physical " UINT64_FORMAT "k",
os::physical_memory() >> 10);
st->print("(" UINT64_FORMAT "k free)",
os::available_memory() >> 10);
+#ifndef __FreeBSD_kernel__
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();
}
@@ -6122,6 +6146,7 @@
int os::fork_and_exec(char* cmd) {
const char * argv[4] = {"sh", "-c", cmd, NULL};
+#ifdef __linux__
// fork() in LinuxThreads/NPTL is not async-safe. It needs to run
// pthread_atfork handlers and reset pthread library. All we need is a
// separate process to execve. Make a direct syscall to fork process.
@@ -6130,6 +6155,9 @@
pid_t pid = NOT_IA64(NOT_AARCH64(syscall(SYS_fork);))
IA64_ONLY(fork();)
AARCH64_ONLY(vfork();)
+#else
+ pid_t pid = fork();
+#endif
if (pid < 0) {
// fork failed
@@ -6138,6 +6166,7 @@
} else if (pid == 0) {
// child process
+#ifdef __linux__
// execve() in LinuxThreads will call pthread_kill_other_threads_np()
// first to kill every thread on the thread list. Because this list is
// not reset by fork() (see notes above), execve() will instead kill
@@ -6147,6 +6176,9 @@
// above.
NOT_IA64(syscall(SYS_execve, "/bin/sh", argv, environ);)
IA64_ONLY(execve("/bin/sh", (char* const*)argv, environ);)
+#else
+ execve("/bin/sh", (char* const*)argv, environ);
+#endif
// execve failed
_exit(-1);
--- openjdk/hotspot/src/os/linux/vm/osThread_linux.cpp.orig
+++ openjdk/hotspot/src/os/linux/vm/osThread_linux.cpp
@@ -22,6 +22,7 @@
*
*/
+#include "utilities/globalDefinitions.hpp"
// no precompiled headers
#include "runtime/atomic.hpp"
#include "runtime/handles.inline.hpp"
--- openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp.orig
+++ openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp
@@ -22,6 +22,7 @@
*
*/
+#include "utilities/globalDefinitions.hpp"
// no precompiled headers
#include "assembler_x86.inline.hpp"
#include "classfile/classLoader.hpp"
@@ -75,6 +76,7 @@
# include <ucontext.h>
# include <fpu_control.h>
+#ifdef __linux__
#ifdef AMD64
#define REG_SP REG_RSP
#define REG_PC REG_RIP
@@ -88,6 +90,54 @@
#define SPELL_REG_SP "esp"
#define SPELL_REG_FP "ebp"
#endif // AMD64
+#endif
+
+#if defined(__FreeBSD_kernel__)
+#define context_trapno uc_mcontext.mc_trapno
+#ifdef AMD64
+#define SPELL_REG_SP "rsp"
+#define SPELL_REG_FP "rbp"
+#define context_sp uc_mcontext.mc_rsp
+#define context_pc uc_mcontext.mc_rip
+#define context_fp uc_mcontext.mc_rbp
+#define context_rip uc_mcontext.mc_rip
+#define context_rsp uc_mcontext.mc_rsp
+#define context_rbp uc_mcontext.mc_rbp
+#define context_flags uc_mcontext.mc_flags
+#define context_err uc_mcontext.mc_err
+#define context_rax uc_mcontext.mc_rax
+#define context_rbx uc_mcontext.mc_rbx
+#define context_rcx uc_mcontext.mc_rcx
+#define context_rdx uc_mcontext.mc_rdx
+#define context_rsi uc_mcontext.mc_rsi
+#define context_rdi uc_mcontext.mc_rdi
+#define context_r8 uc_mcontext.mc_r8
+#define context_r9 uc_mcontext.mc_r9
+#define context_r10 uc_mcontext.mc_r10
+#define context_r11 uc_mcontext.mc_r11
+#define context_r12 uc_mcontext.mc_r12
+#define context_r13 uc_mcontext.mc_r13
+#define context_r14 uc_mcontext.mc_r14
+#define context_r15 uc_mcontext.mc_r15
+#else
+#define SPELL_REG_SP "esp"
+#define SPELL_REG_FP "ebp"
+#define context_sp uc_mcontext.mc_esp
+#define context_pc uc_mcontext.mc_eip
+#define context_fp uc_mcontext.mc_ebp
+#define context_eip uc_mcontext.mc_eip
+#define context_esp uc_mcontext.mc_esp
+#define context_eax uc_mcontext.mc_eax
+#define context_ebx uc_mcontext.mc_ebx
+#define context_ecx uc_mcontext.mc_ecx
+#define context_edx uc_mcontext.mc_edx
+#define context_ebp uc_mcontext.mc_ebp
+#define context_esi uc_mcontext.mc_esi
+#define context_edi uc_mcontext.mc_edi
+#define context_eflags uc_mcontext.mc_eflags
+#define context_trapno uc_mcontext.mc_trapno
+#endif // AMD64
+#endif
address os::current_stack_pointer() {
#ifdef SPARC_WORKS
@@ -113,15 +163,27 @@
}
address os::Linux::ucontext_get_pc(ucontext_t * uc) {
+#if defined(__FreeBSD_kernel__)
+ return (address)uc->context_pc;
+#else
return (address)uc->uc_mcontext.gregs[REG_PC];
+#endif
}
intptr_t* os::Linux::ucontext_get_sp(ucontext_t * uc) {
+#if defined(__FreeBSD_kernel__)
+ return (intptr_t*)uc->context_sp;
+#else
return (intptr_t*)uc->uc_mcontext.gregs[REG_SP];
+#endif
}
intptr_t* os::Linux::ucontext_get_fp(ucontext_t * uc) {
+#if defined(__FreeBSD_kernel__)
+ return (intptr_t*)uc->context_fp;
+#else
return (intptr_t*)uc->uc_mcontext.gregs[REG_FP];
+#endif
}
// For Forte Analyzer AsyncGetCallTrace profiling support - thread
@@ -277,12 +339,20 @@
pc = (address) os::Linux::ucontext_get_pc(uc);
if (pc == (address) Fetch32PFI) {
+#if defined(__FreeBSD_kernel__)
+ uc->context_pc = intptr_t(Fetch32Resume) ;
+#else
uc->uc_mcontext.gregs[REG_PC] = intptr_t(Fetch32Resume) ;
+#endif
return 1 ;
}
#ifdef AMD64
if (pc == (address) FetchNPFI) {
+#if defined(__FreeBSD_kernel__)
+ uc->context_pc = intptr_t (FetchNResume) ;
+#else
uc->uc_mcontext.gregs[REG_PC] = intptr_t (FetchNResume) ;
+#endif
return 1 ;
}
#endif // AMD64
@@ -433,7 +503,11 @@
// Furthermore, a false-positive should be harmless.
if (UnguardOnExecutionViolation > 0 &&
(sig == SIGSEGV || sig == SIGBUS) &&
+#if defined(__FreeBSD_kernel__)
+ uc->context_trapno == trap_page_fault) {
+#else
uc->uc_mcontext.gregs[REG_TRAPNO] == trap_page_fault) {
+#endif
int page_size = os::vm_page_size();
address addr = (address) info->si_addr;
address pc = os::Linux::ucontext_get_pc(uc);
@@ -503,7 +577,11 @@
// save all thread context in case we need to restore it
if (thread != NULL) thread->set_saved_exception_pc(pc);
+#if defined(__FreeBSD_kernel__)
+ uc->context_pc = (intptr_t)stub;
+#else
uc->uc_mcontext.gregs[REG_PC] = (greg_t)stub;
+#endif
return true;
}
@@ -755,6 +833,7 @@
ucontext_t *uc = (ucontext_t*)context;
st->print_cr("Registers:");
+#ifdef __linux__
#ifdef AMD64
st->print( "RAX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RAX]);
st->print(", RBX=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_RBX]);
@@ -797,6 +876,48 @@
st->print(", EFLAGS=" INTPTR_FORMAT, uc->uc_mcontext.gregs[REG_EFL]);
st->print(", CR2=" INTPTR_FORMAT, uc->uc_mcontext.cr2);
#endif // AMD64
+#elif defined(__FreeBSD_kernel__)
+#ifdef AMD64
+ st->print( "RAX=" INTPTR_FORMAT, uc->context_rax);
+ st->print(", RBX=" INTPTR_FORMAT, uc->context_rbx);
+ st->print(", RCX=" INTPTR_FORMAT, uc->context_rcx);
+ st->print(", RDX=" INTPTR_FORMAT, uc->context_rdx);
+ st->cr();
+ st->print( "RSP=" INTPTR_FORMAT, uc->context_rsp);
+ st->print(", RBP=" INTPTR_FORMAT, uc->context_rbp);
+ st->print(", RSI=" INTPTR_FORMAT, uc->context_rsi);
+ st->print(", RDI=" INTPTR_FORMAT, uc->context_rdi);
+ st->cr();
+ st->print( "R8 =" INTPTR_FORMAT, uc->context_r8);
+ st->print(", R9 =" INTPTR_FORMAT, uc->context_r9);
+ st->print(", R10=" INTPTR_FORMAT, uc->context_r10);
+ st->print(", R11=" INTPTR_FORMAT, uc->context_r11);
+ st->cr();
+ st->print( "R12=" INTPTR_FORMAT, uc->context_r12);
+ st->print(", R13=" INTPTR_FORMAT, uc->context_r13);
+ st->print(", R14=" INTPTR_FORMAT, uc->context_r14);
+ st->print(", R15=" INTPTR_FORMAT, uc->context_r15);
+ st->cr();
+ st->print( "RIP=" INTPTR_FORMAT, uc->context_rip);
+ st->print(", EFLAGS=" INTPTR_FORMAT, uc->context_flags);
+ st->print(", ERR=" INTPTR_FORMAT, uc->context_err);
+ st->cr();
+ st->print(" TRAPNO=" INTPTR_FORMAT, uc->context_trapno);
+#else
+ st->print( "EAX=" INTPTR_FORMAT, uc->context_eax);
+ st->print(", EBX=" INTPTR_FORMAT, uc->context_ebx);
+ st->print(", ECX=" INTPTR_FORMAT, uc->context_ecx);
+ st->print(", EDX=" INTPTR_FORMAT, uc->context_edx);
+ st->cr();
+ st->print( "ESP=" INTPTR_FORMAT, uc->context_esp);
+ st->print(", EBP=" INTPTR_FORMAT, uc->context_ebp);
+ st->print(", ESI=" INTPTR_FORMAT, uc->context_esi);
+ st->print(", EDI=" INTPTR_FORMAT, uc->context_edi);
+ st->cr();
+ st->print( "EIP=" INTPTR_FORMAT, uc->context_eip);
+ st->print(", EFLAGS=" INTPTR_FORMAT, uc->context_eflags);
+#endif // AMD64
+#endif
st->cr();
st->cr();
@@ -827,6 +948,7 @@
// this is only for the "general purpose" registers
+#ifdef __linux__
#ifdef AMD64
st->print("RAX="); print_location(st, uc->uc_mcontext.gregs[REG_RAX]);
st->print("RBX="); print_location(st, uc->uc_mcontext.gregs[REG_RBX]);
@@ -854,6 +976,35 @@
st->print("ESI="); print_location(st, uc->uc_mcontext.gregs[REG_ESI]);
st->print("EDI="); print_location(st, uc->uc_mcontext.gregs[REG_EDI]);
#endif // AMD64
+#elif defined(__FreeBSD_kernel__)
+#ifdef AMD64
+ st->print("RAX="); print_location(st, uc->context_rax);
+ st->print("RBX="); print_location(st, uc->context_rbx);
+ st->print("RCX="); print_location(st, uc->context_rcx);
+ st->print("RDX="); print_location(st, uc->context_rdx);
+ st->print("RSP="); print_location(st, uc->context_rsp);
+ st->print("RBP="); print_location(st, uc->context_rbp);
+ st->print("RSI="); print_location(st, uc->context_rsi);
+ st->print("RDI="); print_location(st, uc->context_rdi);
+ st->print("R8 ="); print_location(st, uc->context_r8);
+ st->print("R9 ="); print_location(st, uc->context_r9);
+ st->print("R10="); print_location(st, uc->context_r10);
+ st->print("R11="); print_location(st, uc->context_r11);
+ st->print("R12="); print_location(st, uc->context_r12);
+ st->print("R13="); print_location(st, uc->context_r13);
+ st->print("R14="); print_location(st, uc->context_r14);
+ st->print("R15="); print_location(st, uc->context_r15);
+#else
+ st->print("EAX="); print_location(st, uc->context_eax);
+ st->print("EBX="); print_location(st, uc->context_ebx);
+ st->print("ECX="); print_location(st, uc->context_ecx);
+ st->print("EDX="); print_location(st, uc->context_edx);
+ st->print("ESP="); print_location(st, uc->context_esp);
+ st->print("EBP="); print_location(st, uc->context_ebp);
+ st->print("ESI="); print_location(st, uc->context_esi);
+ st->print("EDI="); print_location(st, uc->context_edi);
+#endif // AMD64
+#endif
st->cr();
}
--- openjdk/hotspot/src/share/vm/memory/allocation.hpp.orig
+++ openjdk/hotspot/src/share/vm/memory/allocation.hpp
@@ -25,8 +25,8 @@
#ifndef SHARE_VM_MEMORY_ALLOCATION_HPP
#define SHARE_VM_MEMORY_ALLOCATION_HPP
-#include "runtime/globals.hpp"
#include "utilities/globalDefinitions.hpp"
+#include "runtime/globals.hpp"
#ifdef COMPILER1
#include "c1/c1_globals.hpp"
#endif
--- openjdk/hotspot/src/share/vm/ci/ciObject.hpp.orig
+++ openjdk/hotspot/src/share/vm/ci/ciObject.hpp
@@ -25,6 +25,7 @@
#ifndef SHARE_VM_CI_CIOBJECT_HPP
#define SHARE_VM_CI_CIOBJECT_HPP
+#include "utilities/globalDefinitions.hpp"
#include "ci/ciClassList.hpp"
#include "memory/allocation.hpp"
#include "runtime/handles.hpp"
--- openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp.orig
+++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp
@@ -22,6 +22,7 @@
*
*/
+#include "utilities/globalDefinitions.hpp"
// no precompiled headers
#include "classfile/vmSymbols.hpp"
#include "gc_interface/collectedHeap.hpp"
--- openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp.orig
+++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp
@@ -76,7 +76,7 @@
# include <sys/procfs.h>
# endif
-#if defined(LINUX) || defined(_ALLBSD_SOURCE)
+#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(__FreeBSD_kernel__)
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS
#endif // __STDC_LIMIT_MACROS
--- openjdk/hotspot/make/defs.make.orig
+++ openjdk/hotspot/make/defs.make
@@ -152,9 +152,6 @@
# Windows should have OS predefined
ifeq ($(OS),)
OS := $(shell uname -s)
- ifneq ($(findstring BSD,$(OS)),)
- OS=bsd
- endif
ifeq ($(OS), Darwin)
OS=bsd
endif
@@ -180,6 +177,10 @@
OSNAME=linux
endif
+ifeq ($(OS), GNU/kFreeBSD)
+ OSNAME=linux
+endif
+
# Determinations of default make arguments and platform specific settings
MAKE_ARGS=
--- openjdk/hotspot/make/linux/Makefile.orig
+++ openjdk/hotspot/make/linux/Makefile
@@ -238,6 +238,9 @@
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3%
OS_VERSION := $(shell uname -r)
EMPTY_IF_NOT_SUPPORTED = $(filter $(SUPPORTED_OS_VERSION),$(OS_VERSION))
+ifeq ($(shell uname -s), GNU/kFreeBSD)
+EMPTY_IF_NOT_SUPPORTED = supported
+endif
check_os_version:
ifeq ($(DISABLE_HOTSPOT_OS_VERSION_CHECK)$(EMPTY_IF_NOT_SUPPORTED),)
--- openjdk/hotspot/make/linux/makefiles/defs.make.orig
+++ openjdk/hotspot/make/linux/makefiles/defs.make
@@ -91,7 +91,7 @@
endif
# i686
-ifeq ($(ARCH), i686)
+ifneq (,$(filter i686 i386, $(ARCH)))
ARCH_DATA_MODEL = 32
PLATFORM = linux-i586
VM_PLATFORM = linux_i486
--- openjdk/hotspot/agent/src/os/linux/ps_core.c.orig
+++ openjdk/hotspot/agent/src/os/linux/ps_core.c
@@ -539,11 +539,16 @@
return false;
// copy regs
+#if defined(__FreeBSD_kernel__)
+ memcpy(&newthr->regs, &prstat->pr_reg, sizeof(struct user_regs_struct));
+#else
memcpy(&newthr->regs, prstat->pr_reg, sizeof(struct user_regs_struct));
+#endif
if (is_debug()) {
print_debug("integer regset\n");
#ifdef i386
+#ifdef __linux__
// print the regset
print_debug("\teax = 0x%x\n", newthr->regs.eax);
print_debug("\tebx = 0x%x\n", newthr->regs.ebx);
@@ -554,9 +559,21 @@
print_debug("\tesi = 0x%x\n", newthr->regs.esi);
print_debug("\tedi = 0x%x\n", newthr->regs.edi);
print_debug("\teip = 0x%x\n", newthr->regs.eip);
+#elif defined(__FreeBSD_kernel__)
+ print_debug("\teax = 0x%x\n", newthr->regs.r_eax);
+ print_debug("\tebx = 0x%x\n", newthr->regs.r_ebx);
+ print_debug("\tecx = 0x%x\n", newthr->regs.r_ecx);
+ print_debug("\tedx = 0x%x\n", newthr->regs.r_edx);
+ print_debug("\tesp = 0x%x\n", newthr->regs.r_esp);
+ print_debug("\tebp = 0x%x\n", newthr->regs.r_ebp);
+ print_debug("\tesi = 0x%x\n", newthr->regs.r_esi);
+ print_debug("\tedi = 0x%x\n", newthr->regs.r_edi);
+ print_debug("\teip = 0x%x\n", newthr->regs.r_eip);
+#endif
#endif
#if defined(amd64) || defined(x86_64)
+#ifdef __linux__
// print the regset
print_debug("\tr15 = 0x%lx\n", newthr->regs.r15);
print_debug("\tr14 = 0x%lx\n", newthr->regs.r14);
@@ -585,6 +602,27 @@
print_debug("\tes = 0x%lx\n", newthr->regs.es);
print_debug("\tfs = 0x%lx\n", newthr->regs.fs);
print_debug("\tgs = 0x%lx\n", newthr->regs.gs);
+#elif defined(__FreeBSD_kernel__)
+ print_debug("\tr15 = 0x%lx\n", newthr->regs.r_r15);
+ print_debug("\tr14 = 0x%lx\n", newthr->regs.r_r14);
+ print_debug("\tr13 = 0x%lx\n", newthr->regs.r_r13);
+ print_debug("\tr12 = 0x%lx\n", newthr->regs.r_r12);
+ print_debug("\trbp = 0x%lx\n", newthr->regs.r_rbp);
+ print_debug("\trbx = 0x%lx\n", newthr->regs.r_rbx);
+ print_debug("\tr11 = 0x%lx\n", newthr->regs.r_r11);
+ print_debug("\tr10 = 0x%lx\n", newthr->regs.r_r10);
+ print_debug("\tr9 = 0x%lx\n", newthr->regs.r_r9);
+ print_debug("\tr8 = 0x%lx\n", newthr->regs.r_r8);
+ print_debug("\trax = 0x%lx\n", newthr->regs.r_rax);
+ print_debug("\trcx = 0x%lx\n", newthr->regs.r_rcx);
+ print_debug("\trdx = 0x%lx\n", newthr->regs.r_rdx);
+ print_debug("\trsi = 0x%lx\n", newthr->regs.r_rsi);
+ print_debug("\trdi = 0x%lx\n", newthr->regs.r_rdi);
+ print_debug("\trip = 0x%lx\n", newthr->regs.r_rip);
+ print_debug("\tcs = 0x%lx\n", newthr->regs.r_cs);
+ print_debug("\trsp = 0x%lx\n", newthr->regs.r_rsp);
+ print_debug("\tss = 0x%lx\n", newthr->regs.r_ss);
+#endif
#endif
}
--- openjdk/hotspot/agent/src/os/linux/ps_proc.c.orig
+++ openjdk/hotspot/agent/src/os/linux/ps_proc.c
@@ -38,6 +38,22 @@
#define __WALL 0x40000000 // Copied from /usr/include/linux/wait.h
#endif
+#ifndef PTRACE_PEEKDATA
+#define PTRACE_PEEKDATA PT_READ_D
+#endif
+
+#ifndef PTRACE_ATTACH
+#define PTRACE_ATTACH PT_ATTACH
+#endif
+
+#ifndef PTRACE_DETACH
+#define PTRACE_DETACH PT_DETACH
+#endif
+
+#ifndef PTRACE_CONT
+#define PTRACE_CONT PT_CONTINUE
+#endif
+
// This file has the libproc implementation specific to live process
// For core files, refer to ps_core.c
@@ -55,7 +71,11 @@
// before calling process_read_data.
static bool process_read_data(struct ps_prochandle* ph, uintptr_t addr, char *buf, size_t size) {
+#if defined(__FreeBSD_kernel__)
+ int rslt;
+#else
long rslt;
+#endif
size_t i, words;
uintptr_t end_addr = addr + size;
uintptr_t aligned_addr = align(addr, sizeof(long));
@@ -63,36 +83,62 @@
if (aligned_addr != addr) {
char *ptr = (char *)&rslt;
errno = 0;
+#if defined(__FreeBSD_kernel__)
+ rslt = ptrace(PTRACE_PEEKDATA, ph->pid, (caddr_t) aligned_addr, 0);
+#else
rslt = ptrace(PTRACE_PEEKDATA, ph->pid, aligned_addr, 0);
+#endif
if (errno) {
print_debug("ptrace(PTRACE_PEEKDATA, ..) failed for %d bytes @ %lx\n", size, addr);
return false;
}
for (; aligned_addr != addr; aligned_addr++, ptr++);
+#if defined(__FreeBSD_kernel__)
+ for (; ((intptr_t)aligned_addr % sizeof(int)) && aligned_addr < end_addr;
+#else
for (; ((intptr_t)aligned_addr % sizeof(long)) && aligned_addr < end_addr;
+#endif
aligned_addr++)
*(buf++) = *(ptr++);
}
+#if defined(__FreeBSD_kernel__)
+ words = (end_addr - aligned_addr) / sizeof(int);
+#else
words = (end_addr - aligned_addr) / sizeof(long);
+#endif
// assert((intptr_t)aligned_addr % sizeof(long) == 0);
for (i = 0; i < words; i++) {
errno = 0;
+#if defined(__FreeBSD_kernel__)
+ rslt = ptrace(PTRACE_PEEKDATA, ph->pid, (caddr_t) aligned_addr, 0);
+#else
rslt = ptrace(PTRACE_PEEKDATA, ph->pid, aligned_addr, 0);
+#endif
if (errno) {
print_debug("ptrace(PTRACE_PEEKDATA, ..) failed for %d bytes @ %lx\n", size, addr);
return false;
}
+#if defined(__FreeBSD_kernel__)
+ *(int *)buf = rslt;
+ buf += sizeof(int);
+ aligned_addr += sizeof(int);
+#else
*(long *)buf = rslt;
buf += sizeof(long);
aligned_addr += sizeof(long);
+#endif
}
if (aligned_addr != end_addr) {
char *ptr = (char *)&rslt;
errno = 0;
+#if defined(__FreeBSD_kernel__)
+ rslt = ptrace(PTRACE_PEEKDATA, ph->pid, (caddr_t) aligned_addr, 0);
+#else
rslt = ptrace(PTRACE_PEEKDATA, ph->pid, aligned_addr, 0);
+#endif
if (errno) {
print_debug("ptrace(PTRACE_PEEKDATA, ..) failed for %d bytes @ %lx\n", size, addr);
return false;
@@ -131,7 +177,11 @@
#endif
#ifdef PTRACE_GETREGS_REQ
+#if defined(__FreeBSD_kernel__)
+ if (ptrace_getregs(PTRACE_GETREGS_REQ, pid, (caddr_t) user, 0) < 0) {
+#else
if (ptrace_getregs(PTRACE_GETREGS_REQ, pid, user, NULL) < 0) {
+#endif
print_debug("ptrace(PTRACE_GETREGS, ...) failed for lwp %d\n", pid);
return false;
}
@@ -203,7 +253,11 @@
// attach to a process/thread specified by "pid"
static bool ptrace_attach(pid_t pid) {
+#if defined(__FreeBSD_kernel__)
+ if (ptrace(PTRACE_ATTACH, pid, NULL, 0) < 0) {
+#else
if (ptrace(PTRACE_ATTACH, pid, NULL, NULL) < 0) {
+#endif
print_debug("ptrace(PTRACE_ATTACH, ..) failed for %d\n", pid);
return false;
} else {
@@ -339,7 +393,11 @@
// detach a given pid
static bool ptrace_detach(pid_t pid) {
+#if defined(__FreeBSD_kernel__)
+ if (pid && ptrace(PTRACE_DETACH, pid, NULL, 0) < 0) {
+#else
if (pid && ptrace(PTRACE_DETACH, pid, NULL, NULL) < 0) {
+#endif
print_debug("ptrace(PTRACE_DETACH, ..) failed for %d\n", pid);
return false;
} else {
--- openjdk/hotspot/agent/src/os/linux/libproc.h.orig
+++ openjdk/hotspot/agent/src/os/linux/libproc.h
@@ -28,6 +28,10 @@
#include <jni.h>
#include <unistd.h>
#include <stdint.h>
+#if defined(__FreeBSD_kernel__)
+#include <sys/types.h>
+#include <machine/reg.h>
+#endif
#include "proc_service.h"
#if defined(arm) || defined(ppc)
@@ -117,6 +121,10 @@
#define user_regs_struct pt_regs
#endif
+#if defined(__FreeBSD_kernel__)
+#define user_regs_struct reg
+#endif
+
// This C bool type must be int for compatibility with Linux calls and
// it would be a mistake to equivalence it to C++ bool on many platforms
--- openjdk/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c.orig
+++ openjdk/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c
@@ -317,7 +317,7 @@
#ifdef i386
#define REG_INDEX(reg) sun_jvm_hotspot_debugger_x86_X86ThreadContext_##reg
-
+#ifdef __linux__
regs[REG_INDEX(GS)] = (uintptr_t) gregs.xgs;
regs[REG_INDEX(FS)] = (uintptr_t) gregs.xfs;
regs[REG_INDEX(ES)] = (uintptr_t) gregs.xes;
@@ -333,7 +333,23 @@
regs[REG_INDEX(PC)] = (uintptr_t) gregs.eip;
regs[REG_INDEX(CS)] = (uintptr_t) gregs.xcs;
regs[REG_INDEX(SS)] = (uintptr_t) gregs.xss;
-
+#elif defined(__FreeBSD_kernel__)
+ regs[REG_INDEX(GS)] = (uintptr_t) gregs.r_gs;
+ regs[REG_INDEX(FS)] = (uintptr_t) gregs.r_fs;
+ regs[REG_INDEX(ES)] = (uintptr_t) gregs.r_es;
+ regs[REG_INDEX(DS)] = (uintptr_t) gregs.r_ds;
+ regs[REG_INDEX(EDI)] = (uintptr_t) gregs.r_edi;
+ regs[REG_INDEX(ESI)] = (uintptr_t) gregs.r_esi;
+ regs[REG_INDEX(FP)] = (uintptr_t) gregs.r_ebp;
+ regs[REG_INDEX(SP)] = (uintptr_t) gregs.r_isp;
+ regs[REG_INDEX(EBX)] = (uintptr_t) gregs.r_ebx;
+ regs[REG_INDEX(EDX)] = (uintptr_t) gregs.r_edx;
+ regs[REG_INDEX(ECX)] = (uintptr_t) gregs.r_ecx;
+ regs[REG_INDEX(EAX)] = (uintptr_t) gregs.r_eax;
+ regs[REG_INDEX(PC)] = (uintptr_t) gregs.r_eip;
+ regs[REG_INDEX(CS)] = (uintptr_t) gregs.r_cs;
+ regs[REG_INDEX(SS)] = (uintptr_t) gregs.r_ss;
+#endif
#endif /* i386 */
#if ia64
@@ -345,7 +361,7 @@
#ifdef amd64
#define REG_INDEX(reg) sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_##reg
-
+#ifdef __linux__
regs[REG_INDEX(R15)] = gregs.r15;
regs[REG_INDEX(R14)] = gregs.r14;
regs[REG_INDEX(R13)] = gregs.r13;
@@ -371,7 +387,27 @@
regs[REG_INDEX(ES)] = gregs.es;
regs[REG_INDEX(FS)] = gregs.fs;
regs[REG_INDEX(GS)] = gregs.gs;
-
+#elif defined(__FreeBSD_kernel__)
+ regs[REG_INDEX(R15)] = gregs.r_r15;
+ regs[REG_INDEX(R14)] = gregs.r_r14;
+ regs[REG_INDEX(R13)] = gregs.r_r13;
+ regs[REG_INDEX(R12)] = gregs.r_r12;
+ regs[REG_INDEX(RBP)] = gregs.r_rbp;
+ regs[REG_INDEX(RBX)] = gregs.r_rbx;
+ regs[REG_INDEX(R11)] = gregs.r_r11;
+ regs[REG_INDEX(R10)] = gregs.r_r10;
+ regs[REG_INDEX(R9)] = gregs.r_r9;
+ regs[REG_INDEX(R8)] = gregs.r_r8;
+ regs[REG_INDEX(RAX)] = gregs.r_rax;
+ regs[REG_INDEX(RCX)] = gregs.r_rcx;
+ regs[REG_INDEX(RDX)] = gregs.r_rdx;
+ regs[REG_INDEX(RSI)] = gregs.r_rsi;
+ regs[REG_INDEX(RDI)] = gregs.r_rdi;
+ regs[REG_INDEX(RIP)] = gregs.r_rip;
+ regs[REG_INDEX(CS)] = gregs.r_cs;
+ regs[REG_INDEX(RSP)] = gregs.r_rsp;
+ regs[REG_INDEX(SS)] = gregs.r_ss;
+#endif
#endif /* amd64 */
#if defined(sparc) || defined(sparcv9)
Description: Initial GNU/kFreeBSD support for openjdk-7 (Corba part)
- Alter build system to consider GNU/kFreeBSD like linux
since this port is libc based.
openjdk/corba/make/common/shared/Platform.gmk
Author: Damien Raude-Morvan <drazzib@debian.org>
Last-Update: 2011-06-28
Forwarded: no
--- openjdk/corba/make/common/shared/Platform.gmk.orig
+++ openjdk/corba/make/common/shared/Platform.gmk
@@ -147,7 +147,7 @@
endif
# Platform settings specific to Linux
-ifeq ($(SYSTEM_UNAME), Linux)
+ifneq (,$(filter Linux GNU/kFreeBSD, $(SYSTEM_UNAME)))
PLATFORM = linux
OS_NAME = linux
OS_VERSION := $(shell uname -r)
Reply to: