annotate src/os_cpu/bsd_zero/vm/thread_bsd_zero.hpp @ 8804:91bf0bdae37b

8008217: CDS: Class data sharing limits the malloc heap on Solaris Summary: In 64bit VM move CDS archive address to 32G on all platforms using new flag SharedBaseAddress. In 32bit VM set CDS archive address to 3Gb on Linux and let other OSs pick the address. Reviewed-by: kvn, dcubed, zgu, hseigel
author coleenp
date Wed, 20 Mar 2013 08:04:54 -0400
parents f08d439fab8c
children e16282db4946
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
1 /*
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
2 * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
3 * Copyright 2007, 2008, 2009, 2010 Red Hat, Inc.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
5 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
6 * This code is free software; you can redistribute it and/or modify it
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
7 * under the terms of the GNU General Public License version 2 only, as
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
8 * published by the Free Software Foundation.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
9 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
10 * This code is distributed in the hope that it will be useful, but WITHOUT
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
13 * version 2 for more details (a copy is included in the LICENSE file that
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
14 * accompanied this code).
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
15 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License version
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
17 * 2 along with this work; if not, write to the Free Software Foundation,
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
19 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
21 * or visit www.oracle.com if you need additional information or have any
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
22 * questions.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
23 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
24 */
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
25
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
26 #ifndef OS_CPU_BSD_ZERO_VM_THREAD_BSD_ZERO_HPP
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
27 #define OS_CPU_BSD_ZERO_VM_THREAD_BSD_ZERO_HPP
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
28
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
29 private:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
30 ZeroStack _zero_stack;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
31 ZeroFrame* _top_zero_frame;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
32
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
33 void pd_initialize() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
34 _top_zero_frame = NULL;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
35 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
36
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
37 public:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
38 ZeroStack *zero_stack() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
39 return &_zero_stack;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
40 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
41
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
42 public:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
43 ZeroFrame *top_zero_frame() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
44 return _top_zero_frame;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
45 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
46 void push_zero_frame(ZeroFrame *frame) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
47 *(ZeroFrame **) frame = _top_zero_frame;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
48 _top_zero_frame = frame;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
49 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
50 void pop_zero_frame() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
51 zero_stack()->set_sp((intptr_t *) _top_zero_frame + 1);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
52 _top_zero_frame = *(ZeroFrame **) _top_zero_frame;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
53 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
54
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
55 public:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
56 static ByteSize zero_stack_offset() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
57 return byte_offset_of(JavaThread, _zero_stack);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
58 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
59 static ByteSize top_zero_frame_offset() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
60 return byte_offset_of(JavaThread, _top_zero_frame);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
61 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
62
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
63 public:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
64 void record_base_of_stack_pointer() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
65 assert(top_zero_frame() == NULL, "junk on stack prior to Java call");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
66 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
67 void set_base_of_stack_pointer(intptr_t* base_sp) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
68 assert(base_sp == NULL, "should be");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
69 assert(top_zero_frame() == NULL, "junk on stack after Java call");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
70 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
71
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
72 public:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
73 void set_last_Java_frame() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
74 set_last_Java_frame(top_zero_frame(), zero_stack()->sp());
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
75 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
76 void reset_last_Java_frame() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
77 frame_anchor()->zap();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
78 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
79 void set_last_Java_frame(ZeroFrame* fp, intptr_t* sp) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
80 frame_anchor()->set(sp, NULL, fp);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
81 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
82
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
83 public:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
84 ZeroFrame* last_Java_fp() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
85 return frame_anchor()->last_Java_fp();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
86 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
87
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
88 private:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
89 frame pd_last_frame() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
90 assert(has_last_Java_frame(), "must have last_Java_sp() when suspended");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
91 return frame(last_Java_fp(), last_Java_sp());
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
92 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
93
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
94 public:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
95 static ByteSize last_Java_fp_offset() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
96 return byte_offset_of(JavaThread, _anchor) +
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
97 JavaFrameAnchor::last_Java_fp_offset();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
98 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
99
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
100 public:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
101 // Check for pending suspend requests and pending asynchronous
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
102 // exceptions. There are separate accessors for these, but
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
103 // _suspend_flags is volatile so using them would be unsafe.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
104 bool has_special_condition_for_native_trans() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
105 return _suspend_flags != 0;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
106 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
107
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
108 public:
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
109 bool pd_get_top_frame_for_signal_handler(frame* fr_addr,
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
110 void* ucontext,
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
111 bool isInJava) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
112 ShouldNotCallThis();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
113 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
114
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
115 // These routines are only used on cpu architectures that
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
116 // have separate register stacks (Itanium).
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
117 static bool register_stack_overflow() { return false; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
118 static void enable_register_stack_guard() {}
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
119 static void disable_register_stack_guard() {}
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
120
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
121 #endif // OS_CPU_BSD_ZERO_VM_THREAD_BSD_ZERO_HPP