annotate src/os_cpu/linux_sparc/vm/thread_linux_sparc.cpp @ 4837:eff609af17d7

7127706: G1: re-enable survivors during the initial-mark pause Summary: Re-enable survivors during the initial-mark pause. Afterwards, the concurrent marking threads have to scan them and mark everything reachable from them. The next GC will have to wait for the survivors to be scanned. Reviewed-by: brutisso, johnc
author tonyp
date Wed, 25 Jan 2012 12:58:23 -0500
parents f95d63e2154a
children f34d701e952e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
133
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
1 /*
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
2 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
133
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
4 *
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
7 * published by the Free Software Foundation.
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
8 *
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
13 * accompanied this code).
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
14 *
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 196
diff changeset
21 * questions.
133
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
22 *
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
23 */
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
26 #include "runtime/frame.inline.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
27 #include "thread_linux.inline.hpp"
133
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
28
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
29 // For Forte Analyzer AsyncGetCallTrace profiling support - thread is
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
30 // currently interrupted by SIGPROF
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
31 bool JavaThread::pd_get_top_frame_for_signal_handler(frame* fr_addr,
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
32 void* ucontext,
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
33 bool isInJava) {
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
34 assert(Thread::current() == this, "caller must be current thread");
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
35 assert(this->is_Java_thread(), "must be JavaThread");
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
36
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
37 JavaThread* jt = (JavaThread *)this;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
38
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
39 if (!isInJava) {
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
40 // make_walkable flushes register windows and grabs last_Java_pc
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
41 // which can not be done if the ucontext sp matches last_Java_sp
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
42 // stack walking utilities assume last_Java_pc set if marked flushed
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
43 jt->frame_anchor()->make_walkable(jt);
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
44 }
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
45
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
46 // If we have a walkable last_Java_frame, then we should use it
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
47 // even if isInJava == true. It should be more reliable than
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
48 // ucontext info.
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
49 if (jt->has_last_Java_frame() && jt->frame_anchor()->walkable()) {
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
50 *fr_addr = jt->pd_last_frame();
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
51 return true;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
52 }
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
53
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
54 ucontext_t* uc = (ucontext_t*) ucontext;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
55
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
56 // At this point, we don't have a walkable last_Java_frame, so
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
57 // we try to glean some information out of the ucontext.
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
58 intptr_t* ret_sp;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
59 ExtendedPC addr =
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
60 os::fetch_frame_from_context(uc, &ret_sp,
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
61 NULL /* ret_fp only used on X86 */);
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
62 if (addr.pc() == NULL || ret_sp == NULL) {
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
63 // ucontext wasn't useful
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
64 return false;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
65 }
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
66
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
67 // we were running Java code when SIGPROF came in
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
68 if (isInJava) {
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
69 // If we have a last_Java_sp, then the SIGPROF signal caught us
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
70 // right when we were transitioning from _thread_in_Java to a new
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
71 // JavaThreadState. We use last_Java_sp instead of the sp from
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
72 // the ucontext since it should be more reliable.
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
73 if (jt->has_last_Java_frame()) {
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
74 ret_sp = jt->last_Java_sp();
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
75 }
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
76 // Implied else: we don't have a last_Java_sp so we use what we
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
77 // got from the ucontext.
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
78
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
79 frame ret_frame(ret_sp, frame::unpatchable, addr.pc());
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
80 if (!ret_frame.safe_for_sender(jt)) {
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
81 // nothing else to try if the frame isn't good
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
82 return false;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
83 }
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
84 *fr_addr = ret_frame;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
85 return true;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
86 }
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
87
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
88 // At this point, we know we weren't running Java code. We might
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
89 // have a last_Java_sp, but we don't have a walkable frame.
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
90 // However, we might still be able to construct something useful
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
91 // if the thread was running native code.
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
92 if (jt->has_last_Java_frame()) {
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
93 assert(!jt->frame_anchor()->walkable(), "case covered above");
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
94
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
95 if (jt->thread_state() == _thread_in_native) {
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
96 frame ret_frame(jt->last_Java_sp(), frame::unpatchable, addr.pc());
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
97 if (!ret_frame.safe_for_sender(jt)) {
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
98 // nothing else to try if the frame isn't good
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
99 return false;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
100 }
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
101 *fr_addr = ret_frame;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
102 return true;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
103 }
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
104 }
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
105
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
106 // nothing else to try
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
107 return false;
435e64505015 6693457: Open-source hotspot linux-sparc support
phh
parents:
diff changeset
108 }
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
109
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
110 void JavaThread::cache_global_variables() { }
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
111