1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
$NetBSD: patch-aa,v 1.1 2015/02/08 08:41:25 tnn Exp $
--- hotspot/src/os/bsd/vm/os_bsd.cpp.orig 2015-02-02 15:32:37.000000000 +0000
+++ hotspot/src/os/bsd/vm/os_bsd.cpp
@@ -112,8 +112,11 @@
# include <vm/vm_param.h>
#endif
-#if defined(__FreeBSD__) || defined(__NetBSD__)
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
# include <elf.h>
+#if !defined(EM_ALPHA)
+#define EM_ALPHA 0x9026
+#endif
#endif
#ifdef __APPLE__
@@ -282,6 +285,7 @@ void os::Bsd::initialize_system_info() {
size_t len;
int cpu_val;
julong mem_val;
+ struct rlimit limits;
/* get processors count via hw.ncpus sysctl */
mib[0] = CTL_HW;
@@ -302,6 +306,8 @@ void os::Bsd::initialize_system_info() {
#if defined (HW_MEMSIZE) // Apple
mib[1] = HW_MEMSIZE;
+#elif defined(HW_PHYSMEM64) // NetBSD
+ mib[1] = HW_PHYSMEM64;
#elif defined(HW_PHYSMEM) // Most of BSD
mib[1] = HW_PHYSMEM;
#elif defined(HW_REALMEM) // Old FreeBSD
@@ -318,14 +324,11 @@ void os::Bsd::initialize_system_info() {
_physical_memory = 256*1024*1024; // fallback (XXXBSD?)
}
-#ifdef __OpenBSD__
- {
- // limit _physical_memory memory view on OpenBSD since
- // datasize rlimit restricts us anyway.
- struct rlimit limits;
- getrlimit(RLIMIT_DATA, &limits);
- _physical_memory = MIN2(_physical_memory, (julong)limits.rlim_cur);
- }
+ getrlimit(RLIMIT_DATA, &limits);
+ _physical_memory = MIN2(_physical_memory, (julong)limits.rlim_cur);
+#if defined(RLIMIT_AS)
+ getrlimit(RLIMIT_AS, &limits);
+ _physical_memory = MIN2(_physical_memory, (julong)limits.rlim_cur);
#endif
}
@@ -377,7 +380,7 @@ void os::init_system_properties_values()
// ...
// 7: The default directories, normally /lib and /usr/lib.
#ifndef DEFAULT_LIBPATH
-#define DEFAULT_LIBPATH "/lib:/usr/lib"
+#define DEFAULT_LIBPATH "@PREFIX@/lib/jni:@PREFIX@/lib:/lib:/usr/lib"
#endif
// Base path of extensions installed on the system.
@@ -1236,7 +1239,7 @@ pid_t os::Bsd::gettid() {
guarantee(retval != 0, "just checking");
return retval;
-#elif __FreeBSD__
+#elif defined(__FreeBSD__)
#if __FreeBSD_version > 900030
return ::pthread_getthreadid_np();
#else
@@ -1244,9 +1247,9 @@ pid_t os::Bsd::gettid() {
thr_self(&tid);
return (pid_t)tid;
#endif
-#elif __OpenBSD__
+#elif defined(__OpenBSD__)
retval = syscall(SYS_getthrid);
-#elif __NetBSD__
+#elif defined(_NetBSD__)
retval = (pid_t) syscall(SYS__lwp_self);
#endif
@@ -1561,7 +1564,9 @@ void * os::dll_load(const char *filename
{EM_PPC, EM_PPC, ELFCLASS32, ELFDATA2MSB, (char*)"Power PC 32"},
{EM_PPC64, EM_PPC64, ELFCLASS64, ELFDATA2MSB, (char*)"Power PC 64"},
{EM_ARM, EM_ARM, ELFCLASS32, ELFDATA2LSB, (char*)"ARM"},
+#if 0
{EM_S390, EM_S390, ELFCLASSNONE, ELFDATA2MSB, (char*)"IBM System/390"},
+#endif
{EM_ALPHA, EM_ALPHA, ELFCLASS64, ELFDATA2LSB, (char*)"Alpha"},
{EM_MIPS_RS3_LE, EM_MIPS_RS3_LE, ELFCLASS32, ELFDATA2LSB, (char*)"MIPSel"},
{EM_MIPS, EM_MIPS, ELFCLASS32, ELFDATA2MSB, (char*)"MIPS"},
@@ -2092,6 +2097,33 @@ bool Semaphore::timedwait(unsigned int s
#else
+#if defined(__NetBSD__) && (__NetBSD_Version__ < 699000400)
+static inline int sem_timedwait(sem_t *sem, struct timespec *ts) {
+ struct timespec onems = { 0, 1000000 };
+ struct timespec total = { 0, 0 };
+ struct timespec unslept;
+ struct timespec elapsed;
+ struct timespec tmp;
+
+ while (timespeccmp(ts, &total, >)) {
+ if (sem_trywait(sem) == 0)
+ return 0;
+
+ if (errno != EAGAIN)
+ return -1;
+
+ (void)nanosleep(&onems, &unslept);
+
+ timespecsub(&onems, &unslept, &elapsed);
+ timespecadd(&total, &elapsed, &tmp);
+ total.tv_sec = tmp.tv_sec;
+ total.tv_nsec = tmp.tv_nsec;
+ }
+ errno = ETIMEDOUT;
+ return -1;
+}
+#endif /* __NetBSD__ */
+
bool Semaphore::trywait() {
return sem_trywait(&_semaphore) == 0;
}
@@ -2843,7 +2875,7 @@ OSReturn os::set_native_priority(Thread*
#ifdef __OpenBSD__
// OpenBSD pthread_setprio starves low priority threads
return OS_OK;
-#elif defined(__FreeBSD__)
+#elif defined(__FreeBSD__) || defined(__DragonFly__)
int ret = pthread_setprio(thread->osthread()->pthread_id(), newpri);
return (ret == 0) ? OS_OK : OS_ERR;
#elif defined(__APPLE__) || defined(__NetBSD__)
@@ -2872,7 +2904,7 @@ OSReturn os::get_native_priority(const T
}
errno = 0;
-#if defined(__OpenBSD__) || defined(__FreeBSD__)
+#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
*priority_ptr = pthread_getprio(thread->osthread()->pthread_id());
#elif defined(__APPLE__) || defined(__NetBSD__)
int policy;
|