Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
2ba82e0c
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2ba82e0c
编写于
10月 29, 2012
作者:
M
minqi
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
ef589409
2c52fe14
变更
7
展开全部
隐藏空白更改
内联
并排
Showing
7 changed file
with
14 addition
and
1617 deletion
+14
-1617
src/os/bsd/vm/attachListener_bsd.cpp
src/os/bsd/vm/attachListener_bsd.cpp
+0
-12
src/os/bsd/vm/osThread_bsd.hpp
src/os/bsd/vm/osThread_bsd.hpp
+0
-6
src/os/bsd/vm/os_bsd.cpp
src/os/bsd/vm/os_bsd.cpp
+10
-1293
src/os/bsd/vm/os_bsd.hpp
src/os/bsd/vm/os_bsd.hpp
+0
-84
src/os_cpu/bsd_x86/vm/bytes_bsd_x86.inline.hpp
src/os_cpu/bsd_x86/vm/bytes_bsd_x86.inline.hpp
+0
-4
src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp
src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp
+2
-125
src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
+2
-93
未找到文件。
src/os/bsd/vm/attachListener_bsd.cpp
浏览文件 @
2ba82e0c
...
@@ -342,7 +342,6 @@ BsdAttachOperation* BsdAttachListener::dequeue() {
...
@@ -342,7 +342,6 @@ BsdAttachOperation* BsdAttachListener::dequeue() {
// get the credentials of the peer and check the effective uid/guid
// get the credentials of the peer and check the effective uid/guid
// - check with jeff on this.
// - check with jeff on this.
#ifdef _ALLBSD_SOURCE
uid_t
puid
;
uid_t
puid
;
gid_t
pgid
;
gid_t
pgid
;
if
(
::
getpeereid
(
s
,
&
puid
,
&
pgid
)
!=
0
)
{
if
(
::
getpeereid
(
s
,
&
puid
,
&
pgid
)
!=
0
)
{
...
@@ -350,17 +349,6 @@ BsdAttachOperation* BsdAttachListener::dequeue() {
...
@@ -350,17 +349,6 @@ BsdAttachOperation* BsdAttachListener::dequeue() {
RESTARTABLE
(
::
close
(
s
),
res
);
RESTARTABLE
(
::
close
(
s
),
res
);
continue
;
continue
;
}
}
#else
struct
ucred
cred_info
;
socklen_t
optlen
=
sizeof
(
cred_info
);
if
(
::
getsockopt
(
s
,
SOL_SOCKET
,
SO_PEERCRED
,
(
void
*
)
&
cred_info
,
&
optlen
)
==
-
1
)
{
int
res
;
RESTARTABLE
(
::
close
(
s
),
res
);
continue
;
}
uid_t
puid
=
cred_info
.
uid
;
gid_t
pgid
=
cred_info
.
gid
;
#endif
uid_t
euid
=
geteuid
();
uid_t
euid
=
geteuid
();
gid_t
egid
=
getegid
();
gid_t
egid
=
getegid
();
...
...
src/os/bsd/vm/osThread_bsd.hpp
浏览文件 @
2ba82e0c
...
@@ -39,18 +39,12 @@
...
@@ -39,18 +39,12 @@
private
:
private
:
#ifdef _ALLBSD_SOURCE
#ifdef __APPLE__
#ifdef __APPLE__
typedef
thread_t
thread_id_t
;
typedef
thread_t
thread_id_t
;
#else
#else
typedef
pthread_t
thread_id_t
;
typedef
pthread_t
thread_id_t
;
#endif
#endif
#else
typedef
pid_t
thread_id_t
;
#endif
// _pthread_id is the pthread id, which is used by library calls
// _pthread_id is the pthread id, which is used by library calls
// (e.g. pthread_kill).
// (e.g. pthread_kill).
pthread_t
_pthread_id
;
pthread_t
_pthread_id
;
...
...
src/os/bsd/vm/os_bsd.cpp
浏览文件 @
2ba82e0c
此差异已折叠。
点击以展开。
src/os/bsd/vm/os_bsd.hpp
浏览文件 @
2ba82e0c
...
@@ -56,19 +56,6 @@ class Bsd {
...
@@ -56,19 +56,6 @@ class Bsd {
static
int
sigflags
[
MAXSIGNUM
];
static
int
sigflags
[
MAXSIGNUM
];
static
int
(
*
_clock_gettime
)(
clockid_t
,
struct
timespec
*
);
static
int
(
*
_clock_gettime
)(
clockid_t
,
struct
timespec
*
);
#ifndef _ALLBSD_SOURCE
static
int
(
*
_pthread_getcpuclockid
)(
pthread_t
,
clockid_t
*
);
static
address
_initial_thread_stack_bottom
;
static
uintptr_t
_initial_thread_stack_size
;
static
const
char
*
_glibc_version
;
static
const
char
*
_libpthread_version
;
static
bool
_is_floating_stack
;
static
bool
_is_NPTL
;
static
bool
_supports_fast_thread_cpu_time
;
#endif
static
GrowableArray
<
int
>*
_cpu_to_node
;
static
GrowableArray
<
int
>*
_cpu_to_node
;
...
@@ -76,28 +63,14 @@ class Bsd {
...
@@ -76,28 +63,14 @@ class Bsd {
static
julong
_physical_memory
;
static
julong
_physical_memory
;
static
pthread_t
_main_thread
;
static
pthread_t
_main_thread
;
#ifndef _ALLBSD_SOURCE
static
Mutex
*
_createThread_lock
;
#endif
static
int
_page_size
;
static
int
_page_size
;
static
julong
available_memory
();
static
julong
available_memory
();
static
julong
physical_memory
()
{
return
_physical_memory
;
}
static
julong
physical_memory
()
{
return
_physical_memory
;
}
static
void
initialize_system_info
();
static
void
initialize_system_info
();
#ifndef _ALLBSD_SOURCE
static
void
set_glibc_version
(
const
char
*
s
)
{
_glibc_version
=
s
;
}
static
void
set_libpthread_version
(
const
char
*
s
)
{
_libpthread_version
=
s
;
}
#endif
static
bool
supports_variable_stack_size
();
static
bool
supports_variable_stack_size
();
#ifndef _ALLBSD_SOURCE
static
void
set_is_NPTL
()
{
_is_NPTL
=
true
;
}
static
void
set_is_BsdThreads
()
{
_is_NPTL
=
false
;
}
static
void
set_is_floating_stack
()
{
_is_floating_stack
=
true
;
}
#endif
static
void
rebuild_cpu_to_node_map
();
static
void
rebuild_cpu_to_node_map
();
static
GrowableArray
<
int
>*
cpu_to_node
()
{
return
_cpu_to_node
;
}
static
GrowableArray
<
int
>*
cpu_to_node
()
{
return
_cpu_to_node
;
}
...
@@ -106,25 +79,10 @@ class Bsd {
...
@@ -106,25 +79,10 @@ class Bsd {
public:
public:
static
void
init_thread_fpu_state
();
static
void
init_thread_fpu_state
();
#ifndef _ALLBSD_SOURCE
static
int
get_fpu_control_word
();
static
void
set_fpu_control_word
(
int
fpu_control
);
#endif
static
pthread_t
main_thread
(
void
)
{
return
_main_thread
;
}
static
pthread_t
main_thread
(
void
)
{
return
_main_thread
;
}
#ifndef _ALLBSD_SOURCE
// returns kernel thread id (similar to LWP id on Solaris), which can be
// used to access /proc
static
pid_t
gettid
();
static
void
set_createThread_lock
(
Mutex
*
lk
)
{
_createThread_lock
=
lk
;
}
static
Mutex
*
createThread_lock
(
void
)
{
return
_createThread_lock
;
}
#endif
static
void
hotspot_sigmask
(
Thread
*
thread
);
static
void
hotspot_sigmask
(
Thread
*
thread
);
#ifndef _ALLBSD_SOURCE
static
address
initial_thread_stack_bottom
(
void
)
{
return
_initial_thread_stack_bottom
;
}
static
uintptr_t
initial_thread_stack_size
(
void
)
{
return
_initial_thread_stack_size
;
}
#endif
static
bool
is_initial_thread
(
void
);
static
bool
is_initial_thread
(
void
);
static
int
page_size
(
void
)
{
return
_page_size
;
}
static
int
page_size
(
void
)
{
return
_page_size
;
}
...
@@ -161,23 +119,6 @@ class Bsd {
...
@@ -161,23 +119,6 @@ class Bsd {
static
struct
sigaction
*
get_chained_signal_action
(
int
sig
);
static
struct
sigaction
*
get_chained_signal_action
(
int
sig
);
static
bool
chained_handler
(
int
sig
,
siginfo_t
*
siginfo
,
void
*
context
);
static
bool
chained_handler
(
int
sig
,
siginfo_t
*
siginfo
,
void
*
context
);
#ifndef _ALLBSD_SOURCE
// GNU libc and libpthread version strings
static
const
char
*
glibc_version
()
{
return
_glibc_version
;
}
static
const
char
*
libpthread_version
()
{
return
_libpthread_version
;
}
// NPTL or BsdThreads?
static
bool
is_BsdThreads
()
{
return
!
_is_NPTL
;
}
static
bool
is_NPTL
()
{
return
_is_NPTL
;
}
// NPTL is always floating stack. BsdThreads could be using floating
// stack or fixed stack.
static
bool
is_floating_stack
()
{
return
_is_floating_stack
;
}
static
void
libpthread_init
();
static
bool
libnuma_init
();
static
void
*
libnuma_dlsym
(
void
*
handle
,
const
char
*
name
);
#endif
// Minimum stack size a thread can be created with (allowing
// Minimum stack size a thread can be created with (allowing
// the VM to completely create the thread and enter user code)
// the VM to completely create the thread and enter user code)
static
size_t
min_stack_allowed
;
static
size_t
min_stack_allowed
;
...
@@ -186,22 +127,9 @@ class Bsd {
...
@@ -186,22 +127,9 @@ class Bsd {
static
size_t
default_stack_size
(
os
::
ThreadType
thr_type
);
static
size_t
default_stack_size
(
os
::
ThreadType
thr_type
);
static
size_t
default_guard_size
(
os
::
ThreadType
thr_type
);
static
size_t
default_guard_size
(
os
::
ThreadType
thr_type
);
#ifndef _ALLBSD_SOURCE
static
void
capture_initial_stack
(
size_t
max_size
);
// Stack overflow handling
static
bool
manually_expand_stack
(
JavaThread
*
t
,
address
addr
);
static
int
max_register_window_saves_before_flushing
();
#endif
// Real-time clock functions
// Real-time clock functions
static
void
clock_init
(
void
);
static
void
clock_init
(
void
);
#ifndef _ALLBSD_SOURCE
// fast POSIX clocks support
static
void
fast_thread_clock_init
(
void
);
#endif
static
inline
bool
supports_monotonic_clock
()
{
static
inline
bool
supports_monotonic_clock
()
{
return
_clock_gettime
!=
NULL
;
return
_clock_gettime
!=
NULL
;
}
}
...
@@ -210,18 +138,6 @@ class Bsd {
...
@@ -210,18 +138,6 @@ class Bsd {
return
_clock_gettime
?
_clock_gettime
(
clock_id
,
tp
)
:
-
1
;
return
_clock_gettime
?
_clock_gettime
(
clock_id
,
tp
)
:
-
1
;
}
}
#ifndef _ALLBSD_SOURCE
static
int
pthread_getcpuclockid
(
pthread_t
tid
,
clockid_t
*
clock_id
)
{
return
_pthread_getcpuclockid
?
_pthread_getcpuclockid
(
tid
,
clock_id
)
:
-
1
;
}
static
bool
supports_fast_thread_cpu_time
()
{
return
_supports_fast_thread_cpu_time
;
}
static
jlong
fast_thread_cpu_time
(
clockid_t
clockid
);
#endif
// Stack repair handling
// Stack repair handling
// none present
// none present
...
...
src/os_cpu/bsd_x86/vm/bytes_bsd_x86.inline.hpp
浏览文件 @
2ba82e0c
...
@@ -25,10 +25,6 @@
...
@@ -25,10 +25,6 @@
#ifndef OS_CPU_BSD_X86_VM_BYTES_BSD_X86_INLINE_HPP
#ifndef OS_CPU_BSD_X86_VM_BYTES_BSD_X86_INLINE_HPP
#define OS_CPU_BSD_X86_VM_BYTES_BSD_X86_INLINE_HPP
#define OS_CPU_BSD_X86_VM_BYTES_BSD_X86_INLINE_HPP
#ifndef _ALLBSD_SOURCE
#include <byteswap.h>
#endif
#ifdef __APPLE__
#ifdef __APPLE__
#include <libkern/OSByteOrder.h>
#include <libkern/OSByteOrder.h>
#endif
#endif
...
...
src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp
浏览文件 @
2ba82e0c
...
@@ -76,7 +76,7 @@
...
@@ -76,7 +76,7 @@
# include <ucontext.h>
# include <ucontext.h>
#endif
#endif
#if
defined(_ALLBSD_SOURCE) &&
!defined(__APPLE__) && !defined(__NetBSD__)
#if !defined(__APPLE__) && !defined(__NetBSD__)
# include <pthread_np.h>
# include <pthread_np.h>
#endif
#endif
...
@@ -489,23 +489,6 @@ JVM_handle_bsd_signal(int sig,
...
@@ -489,23 +489,6 @@ JVM_handle_bsd_signal(int sig,
// to handle_unexpected_exception way down below.
// to handle_unexpected_exception way down below.
thread
->
disable_stack_red_zone
();
thread
->
disable_stack_red_zone
();
tty
->
print_raw_cr
(
"An irrecoverable stack overflow has occurred."
);
tty
->
print_raw_cr
(
"An irrecoverable stack overflow has occurred."
);
#ifndef _ALLBSD_SOURCE
}
else
{
// Accessing stack address below sp may cause SEGV if current
// thread has MAP_GROWSDOWN stack. This should only happen when
// current thread was created by user code with MAP_GROWSDOWN flag
// and then attached to VM. See notes in os_bsd.cpp.
if
(
thread
->
osthread
()
->
expanding_stack
()
==
0
)
{
thread
->
osthread
()
->
set_expanding_stack
();
if
(
os
::
Bsd
::
manually_expand_stack
(
thread
,
addr
))
{
thread
->
osthread
()
->
clear_expanding_stack
();
return
1
;
}
thread
->
osthread
()
->
clear_expanding_stack
();
}
else
{
fatal
(
"recursive segv. expanding stack."
);
}
#endif
}
}
}
}
}
}
...
@@ -744,61 +727,21 @@ JVM_handle_bsd_signal(int sig,
...
@@ -744,61 +727,21 @@ JVM_handle_bsd_signal(int sig,
ShouldNotReachHere
();
ShouldNotReachHere
();
}
}
#ifdef _ALLBSD_SOURCE
// From solaris_i486.s ported to bsd_i486.s
// From solaris_i486.s ported to bsd_i486.s
extern
"C"
void
fixcw
();
extern
"C"
void
fixcw
();
#endif
void
os
::
Bsd
::
init_thread_fpu_state
(
void
)
{
void
os
::
Bsd
::
init_thread_fpu_state
(
void
)
{
#ifndef AMD64
#ifndef AMD64
# ifdef _ALLBSD_SOURCE
// Set fpu to 53 bit precision. This happens too early to use a stub.
// Set fpu to 53 bit precision. This happens too early to use a stub.
fixcw
();
fixcw
();
# else
// set fpu to 53 bit precision
set_fpu_control_word
(
0x27f
);
# endif
#endif // !AMD64
#endif // !AMD64
}
}
#ifndef _ALLBSD_SOURCE
int
os
::
Bsd
::
get_fpu_control_word
(
void
)
{
#ifdef AMD64
return
0
;
#else
int
fpu_control
;
_FPU_GETCW
(
fpu_control
);
return
fpu_control
&
0xffff
;
#endif // AMD64
}
void
os
::
Bsd
::
set_fpu_control_word
(
int
fpu_control
)
{
#ifndef AMD64
_FPU_SETCW
(
fpu_control
);
#endif // !AMD64
}
#endif
// Check that the bsd kernel version is 2.4 or higher since earlier
// Check that the bsd kernel version is 2.4 or higher since earlier
// versions do not support SSE without patches.
// versions do not support SSE without patches.
bool
os
::
supports_sse
()
{
bool
os
::
supports_sse
()
{
#if defined(AMD64) || defined(_ALLBSD_SOURCE)
return
true
;
return
true
;
#else
struct
utsname
uts
;
if
(
uname
(
&
uts
)
!=
0
)
return
false
;
// uname fails?
char
*
minor_string
;
int
major
=
strtol
(
uts
.
release
,
&
minor_string
,
10
);
int
minor
=
strtol
(
minor_string
+
1
,
NULL
,
10
);
bool
result
=
(
major
>
2
||
(
major
==
2
&&
minor
>=
4
));
#ifndef PRODUCT
if
(
PrintMiscellaneous
&&
Verbose
)
{
tty
->
print
(
"OS version is %d.%d, which %s support SSE/SSE2
\n
"
,
major
,
minor
,
result
?
"DOES"
:
"does NOT"
);
}
#endif
return
result
;
#endif // AMD64
}
}
bool
os
::
is_allocatable
(
size_t
bytes
)
{
bool
os
::
is_allocatable
(
size_t
bytes
)
{
...
@@ -836,46 +779,7 @@ size_t os::Bsd::min_stack_allowed = (48 DEBUG_ONLY(+4))*K;
...
@@ -836,46 +779,7 @@ size_t os::Bsd::min_stack_allowed = (48 DEBUG_ONLY(+4))*K;
#define GET_GS() ({int gs; __asm__ volatile("movw %%gs, %w0":"=q"(gs)); gs&0xffff;})
#define GET_GS() ({int gs; __asm__ volatile("movw %%gs, %w0":"=q"(gs)); gs&0xffff;})
#endif
#endif
#ifdef _ALLBSD_SOURCE
bool
os
::
Bsd
::
supports_variable_stack_size
()
{
return
true
;
}
bool
os
::
Bsd
::
supports_variable_stack_size
()
{
return
true
;
}
#else
// Test if pthread library can support variable thread stack size. BsdThreads
// in fixed stack mode allocates 2M fixed slot for each thread. BsdThreads
// in floating stack mode and NPTL support variable stack size.
bool
os
::
Bsd
::
supports_variable_stack_size
()
{
if
(
os
::
Bsd
::
is_NPTL
())
{
// NPTL, yes
return
true
;
}
else
{
// Note: We can't control default stack size when creating a thread.
// If we use non-default stack size (pthread_attr_setstacksize), both
// floating stack and non-floating stack BsdThreads will return the
// same value. This makes it impossible to implement this function by
// detecting thread stack size directly.
//
// An alternative approach is to check %gs. Fixed-stack BsdThreads
// do not use %gs, so its value is 0. Floating-stack BsdThreads use
// %gs (either as LDT selector or GDT selector, depending on kernel)
// to access thread specific data.
//
// Note that %gs is a reserved glibc register since early 2001, so
// applications are not allowed to change its value (Ulrich Drepper from
// Redhat confirmed that all known offenders have been modified to use
// either %fs or TSD). In the worst case scenario, when VM is embedded in
// a native application that plays with %gs, we might see non-zero %gs
// even BsdThreads is running in fixed stack mode. As the result, we'll
// return true and skip _thread_safety_check(), so we may not be able to
// detect stack-heap collisions. But otherwise it's harmless.
//
#ifdef __GNUC__
return
(
GET_GS
()
!=
0
);
#else
return
false
;
#endif
}
}
#endif
#endif // AMD64
#endif // AMD64
// return default stack size for thr_type
// return default stack size for thr_type
...
@@ -943,7 +847,7 @@ static void current_stack_region(address * bottom, size_t * size) {
...
@@ -943,7 +847,7 @@ static void current_stack_region(address * bottom, size_t * size) {
*
bottom
=
(
address
)((
char
*
)
ss
.
ss_sp
-
ss
.
ss_size
);
*
bottom
=
(
address
)((
char
*
)
ss
.
ss_sp
-
ss
.
ss_size
);
*
size
=
ss
.
ss_size
;
*
size
=
ss
.
ss_size
;
#el
if defined(_ALLBSD_SOURCE)
#el
se
pthread_attr_t
attr
;
pthread_attr_t
attr
;
int
rslt
=
pthread_attr_init
(
&
attr
);
int
rslt
=
pthread_attr_init
(
&
attr
);
...
@@ -963,33 +867,6 @@ static void current_stack_region(address * bottom, size_t * size) {
...
@@ -963,33 +867,6 @@ static void current_stack_region(address * bottom, size_t * size) {
}
}
pthread_attr_destroy
(
&
attr
);
pthread_attr_destroy
(
&
attr
);
#else
if
(
os
::
Bsd
::
is_initial_thread
())
{
// initial thread needs special handling because pthread_getattr_np()
// may return bogus value.
*
bottom
=
os
::
Bsd
::
initial_thread_stack_bottom
();
*
size
=
os
::
Bsd
::
initial_thread_stack_size
();
}
else
{
pthread_attr_t
attr
;
int
rslt
=
pthread_getattr_np
(
pthread_self
(),
&
attr
);
// JVM needs to know exact stack location, abort if it fails
if
(
rslt
!=
0
)
{
if
(
rslt
==
ENOMEM
)
{
vm_exit_out_of_memory
(
0
,
"pthread_getattr_np"
);
}
else
{
fatal
(
err_msg
(
"pthread_getattr_np failed with errno = %d"
,
rslt
));
}
}
if
(
pthread_attr_getstack
(
&
attr
,
(
void
**
)
bottom
,
size
)
!=
0
)
{
fatal
(
"Can not locate current stack attributes!"
);
}
pthread_attr_destroy
(
&
attr
);
}
#endif
#endif
assert
(
os
::
current_stack_pointer
()
>=
*
bottom
&&
assert
(
os
::
current_stack_pointer
()
>=
*
bottom
&&
os
::
current_stack_pointer
()
<
*
bottom
+
*
size
,
"just checking"
);
os
::
current_stack_pointer
()
<
*
bottom
+
*
size
,
"just checking"
);
...
...
src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp
浏览文件 @
2ba82e0c
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
*
*
*/
*/
#if
defined(_ALLBSD_SOURCE) &&
!defined(__APPLE__) && !defined(__NetBSD__)
#if !defined(__APPLE__) && !defined(__NetBSD__)
#include <pthread.h>
#include <pthread.h>
# include <pthread_np.h>
/* For pthread_attr_get_np */
# include <pthread_np.h>
/* For pthread_attr_get_np */
#endif
#endif
...
@@ -178,26 +178,6 @@ JVM_handle_bsd_signal(int sig,
...
@@ -178,26 +178,6 @@ JVM_handle_bsd_signal(int sig,
thread
->
disable_stack_red_zone
();
thread
->
disable_stack_red_zone
();
ShouldNotCallThis
();
ShouldNotCallThis
();
}
}
#ifndef _ALLBSD_SOURCE
else
{
// Accessing stack address below sp may cause SEGV if
// current thread has MAP_GROWSDOWN stack. This should
// only happen when current thread was created by user
// code with MAP_GROWSDOWN flag and then attached to VM.
// See notes in os_bsd.cpp.
if
(
thread
->
osthread
()
->
expanding_stack
()
==
0
)
{
thread
->
osthread
()
->
set_expanding_stack
();
if
(
os
::
Bsd
::
manually_expand_stack
(
thread
,
addr
))
{
thread
->
osthread
()
->
clear_expanding_stack
();
return
true
;
}
thread
->
osthread
()
->
clear_expanding_stack
();
}
else
{
fatal
(
"recursive segv. expanding stack."
);
}
}
#endif
}
}
}
}
...
@@ -266,16 +246,6 @@ void os::Bsd::init_thread_fpu_state(void) {
...
@@ -266,16 +246,6 @@ void os::Bsd::init_thread_fpu_state(void) {
// Nothing to do
// Nothing to do
}
}
#ifndef _ALLBSD_SOURCE
int
os
::
Bsd
::
get_fpu_control_word
()
{
ShouldNotCallThis
();
}
void
os
::
Bsd
::
set_fpu_control_word
(
int
fpu
)
{
ShouldNotCallThis
();
}
#endif
bool
os
::
is_allocatable
(
size_t
bytes
)
{
bool
os
::
is_allocatable
(
size_t
bytes
)
{
#ifdef _LP64
#ifdef _LP64
return
true
;
return
true
;
...
@@ -339,7 +309,7 @@ static void current_stack_region(address *bottom, size_t *size) {
...
@@ -339,7 +309,7 @@ static void current_stack_region(address *bottom, size_t *size) {
stack_top
=
(
address
)
ss
.
ss_sp
;
stack_top
=
(
address
)
ss
.
ss_sp
;
stack_bytes
=
ss
.
ss_size
;
stack_bytes
=
ss
.
ss_size
;
stack_bottom
=
stack_top
-
stack_bytes
;
stack_bottom
=
stack_top
-
stack_bytes
;
#el
if defined(_ALLBSD_SOURCE)
#el
se
pthread_attr_t
attr
;
pthread_attr_t
attr
;
int
rslt
=
pthread_attr_init
(
&
attr
);
int
rslt
=
pthread_attr_init
(
&
attr
);
...
@@ -362,67 +332,6 @@ static void current_stack_region(address *bottom, size_t *size) {
...
@@ -362,67 +332,6 @@ static void current_stack_region(address *bottom, size_t *size) {
pthread_attr_destroy
(
&
attr
);
pthread_attr_destroy
(
&
attr
);
stack_top
=
stack_bottom
+
stack_bytes
;
stack_top
=
stack_bottom
+
stack_bytes
;
#else
/* Linux */
pthread_attr_t
attr
;
int
res
=
pthread_getattr_np
(
pthread_self
(),
&
attr
);
if
(
res
!=
0
)
{
if
(
res
==
ENOMEM
)
{
vm_exit_out_of_memory
(
0
,
"pthread_getattr_np"
);
}
else
{
fatal
(
err_msg
(
"pthread_getattr_np failed with errno = "
INT32_FORMAT
,
res
));
}
}
res
=
pthread_attr_getstack
(
&
attr
,
(
void
**
)
&
stack_bottom
,
&
stack_bytes
);
if
(
res
!=
0
)
{
fatal
(
err_msg
(
"pthread_attr_getstack failed with errno = "
INT32_FORMAT
,
res
));
}
stack_top
=
stack_bottom
+
stack_bytes
;
// The block of memory returned by pthread_attr_getstack() includes
// guard pages where present. We need to trim these off.
size_t
page_bytes
=
os
::
Bsd
::
page_size
();
assert
(((
intptr_t
)
stack_bottom
&
(
page_bytes
-
1
))
==
0
,
"unaligned stack"
);
size_t
guard_bytes
;
res
=
pthread_attr_getguardsize
(
&
attr
,
&
guard_bytes
);
if
(
res
!=
0
)
{
fatal
(
err_msg
(
"pthread_attr_getguardsize failed with errno = "
INT32_FORMAT
,
res
));
}
int
guard_pages
=
align_size_up
(
guard_bytes
,
page_bytes
)
/
page_bytes
;
assert
(
guard_bytes
==
guard_pages
*
page_bytes
,
"unaligned guard"
);
#ifdef IA64
// IA64 has two stacks sharing the same area of memory, a normal
// stack growing downwards and a register stack growing upwards.
// Guard pages, if present, are in the centre. This code splits
// the stack in two even without guard pages, though in theory
// there's nothing to stop us allocating more to the normal stack
// or more to the register stack if one or the other were found
// to grow faster.
int
total_pages
=
align_size_down
(
stack_bytes
,
page_bytes
)
/
page_bytes
;
stack_bottom
+=
(
total_pages
-
guard_pages
)
/
2
*
page_bytes
;
#endif // IA64
stack_bottom
+=
guard_bytes
;
pthread_attr_destroy
(
&
attr
);
// The initial thread has a growable stack, and the size reported
// by pthread_attr_getstack is the maximum size it could possibly
// be given what currently mapped. This can be huge, so we cap it.
if
(
os
::
Bsd
::
is_initial_thread
())
{
stack_bytes
=
stack_top
-
stack_bottom
;
if
(
stack_bytes
>
JavaThread
::
stack_size_at_create
())
stack_bytes
=
JavaThread
::
stack_size_at_create
();
stack_bottom
=
stack_top
-
stack_bytes
;
}
#endif
#endif
assert
(
os
::
current_stack_pointer
()
>=
stack_bottom
,
"should do"
);
assert
(
os
::
current_stack_pointer
()
>=
stack_bottom
,
"should do"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录