annotate src/os/posix/vm/os_posix.hpp @ 20338:8d5f66b42c53

8055525: Bigapp weblogic+medrec fails to startup after JDK-8038423 Summary: If large pages are enabled and configured in Linux, the VM always pre-commits the entire space. The VM fails verification of the commit of the initial heap because some internal data structure marked all memory pages of the heap as committed during initialization. This makes the code think that we attempted a double-commit during first allocation of the heap. Remove the initial marking of memory pages of the heap to committed. Reviewed-by: mgerdin
author tschatzl
date Wed, 20 Aug 2014 14:34:40 +0200
parents a9becfeecd1b
children 4ca6dc0799b6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6080
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
1 /*
17467
55fb97c4c58d 8029233: Update copyright year to match last edit in jdk8 hotspot repository for 2013
mikael
parents: 11151
diff changeset
2 * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
6080
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
4 *
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
7 * published by the Free Software Foundation.
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
8 *
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
13 * accompanied this code).
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
14 *
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
18 *
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
21 * questions.
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
22 *
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
23 */
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
24
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
25 #ifndef OS_POSIX_VM_OS_POSIX_HPP
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
26 #define OS_POSIX_VM_OS_POSIX_HPP
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
27 class Posix {
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
28 friend class os;
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
29
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
30 protected:
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
31 static void print_distro_info(outputStream* st);
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
32 static void print_rlimit_info(outputStream* st);
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
33 static void print_uname_info(outputStream* st);
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
34 static void print_libversion_info(outputStream* st);
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
35 static void print_load_average(outputStream* st);
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
36
14410
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
37 public:
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
38
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
39 // Returns true if signal is valid.
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
40 static bool is_valid_signal(int sig);
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
41
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
42 // Helper function, returns a string (e.g. "SIGILL") for a signal.
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
43 // Returned string is a constant. For unknown signals "UNKNOWN" is returned.
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
44 static const char* get_signal_name(int sig, char* out, size_t outlen);
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
45
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
46 // Returns one-line short description of a signal set in a user provided buffer.
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
47 static const char* describe_signal_set_short(const sigset_t* set, char* buffer, size_t size);
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
48
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
49 // Prints a short one-line description of a signal set.
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
50 static void print_signal_set_short(outputStream* st, const sigset_t* set);
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
51
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
52 // Writes a one-line description of a combination of sigaction.sa_flags
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
53 // into a user provided buffer. Returns that buffer.
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
54 static const char* describe_sa_flags(int flags, char* buffer, size_t size);
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
55
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
56 // Prints a one-line description of a combination of sigaction.sa_flags.
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
57 static void print_sa_flags(outputStream* st, int flags);
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
58
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
59 // A POSIX conform, platform-independend siginfo print routine.
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
60 static void print_siginfo_brief(outputStream* os, const siginfo_t* si);
6080
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
61
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
62 };
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
63
11151
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
64 /*
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
65 * Crash protection for the watcher thread. Wrap the callback
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
66 * with a sigsetjmp and in case of a SIGSEGV/SIGBUS we siglongjmp
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
67 * back.
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
68 * To be able to use this - don't take locks, don't rely on destructors,
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
69 * don't make OS library calls, don't allocate memory, don't print,
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
70 * don't call code that could leave the heap / memory in an inconsistent state,
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
71 * or anything else where we are not in control if we suddenly jump out.
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
72 */
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
73 class WatcherThreadCrashProtection : public StackObj {
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
74 public:
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
75 WatcherThreadCrashProtection();
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
76 bool call(os::CrashProtectionCallback& cb);
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
77
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
78 static void check_crash_protection(int signal, Thread* thread);
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
79 private:
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
80 void restore();
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
81 sigjmp_buf _jmpbuf;
5e3b6f79d280 8020701: Avoid crashes in WatcherThread
rbackman
parents: 6842
diff changeset
82 };
6080
7432b9db36ff 7165755: OS Information much longer on linux than other platforms
nloodin
parents:
diff changeset
83
14410
f42f2e2a1518 8020775: PPC64 (part 12): posix signal printing
goetz
parents: 11151
diff changeset
84 #endif // OS_POSIX_VM_OS_POSIX_HPP