Mercurial > hg > truffle
comparison src/share/vm/runtime/os.hpp @ 11198:1e6d5dec4a4e
Merge.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 05 Aug 2013 13:20:06 +0200 |
parents | 6b0fd0964b87 |
children | cefad50507d8 |
comparison
equal
deleted
inserted
replaced
11197:3479ab380552 | 11198:1e6d5dec4a4e |
---|---|
30 #include "runtime/extendedPC.hpp" | 30 #include "runtime/extendedPC.hpp" |
31 #include "runtime/handles.hpp" | 31 #include "runtime/handles.hpp" |
32 #include "utilities/top.hpp" | 32 #include "utilities/top.hpp" |
33 #ifdef TARGET_OS_FAMILY_linux | 33 #ifdef TARGET_OS_FAMILY_linux |
34 # include "jvm_linux.h" | 34 # include "jvm_linux.h" |
35 # include <setjmp.h> | |
35 #endif | 36 #endif |
36 #ifdef TARGET_OS_FAMILY_solaris | 37 #ifdef TARGET_OS_FAMILY_solaris |
37 # include "jvm_solaris.h" | 38 # include "jvm_solaris.h" |
39 # include <setjmp.h> | |
38 #endif | 40 #endif |
39 #ifdef TARGET_OS_FAMILY_windows | 41 #ifdef TARGET_OS_FAMILY_windows |
40 # include "jvm_windows.h" | 42 # include "jvm_windows.h" |
41 #endif | 43 #endif |
42 #ifdef TARGET_OS_FAMILY_bsd | 44 #ifdef TARGET_OS_FAMILY_bsd |
43 # include "jvm_bsd.h" | 45 # include "jvm_bsd.h" |
46 # include <setjmp.h> | |
44 #endif | 47 #endif |
45 | 48 |
46 // os defines the interface to operating system; this includes traditional | 49 // os defines the interface to operating system; this includes traditional |
47 // OS services (time, I/O) as well as other functionality with system- | 50 // OS services (time, I/O) as well as other functionality with system- |
48 // dependent code. | 51 // dependent code. |
76 MaxPriority = 10, // Highest priority, used for WatcherThread | 79 MaxPriority = 10, // Highest priority, used for WatcherThread |
77 // ensures that VMThread doesn't starve profiler | 80 // ensures that VMThread doesn't starve profiler |
78 CriticalPriority = 11 // Critical thread priority | 81 CriticalPriority = 11 // Critical thread priority |
79 }; | 82 }; |
80 | 83 |
84 // Executable parameter flag for os::commit_memory() and | |
85 // os::commit_memory_or_exit(). | |
86 const bool ExecMem = true; | |
87 | |
81 // Typedef for structured exception handling support | 88 // Typedef for structured exception handling support |
82 typedef void (*java_call_t)(JavaValue* value, methodHandle* method, JavaCallArguments* args, Thread* thread); | 89 typedef void (*java_call_t)(JavaValue* value, methodHandle* method, JavaCallArguments* args, Thread* thread); |
83 | 90 |
84 class os: AllStatic { | 91 class os: AllStatic { |
85 public: | 92 public: |
102 static char* pd_reserve_memory(size_t bytes, char* addr = 0, | 109 static char* pd_reserve_memory(size_t bytes, char* addr = 0, |
103 size_t alignment_hint = 0); | 110 size_t alignment_hint = 0); |
104 static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr); | 111 static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr); |
105 static void pd_split_reserved_memory(char *base, size_t size, | 112 static void pd_split_reserved_memory(char *base, size_t size, |
106 size_t split, bool realloc); | 113 size_t split, bool realloc); |
107 static bool pd_commit_memory(char* addr, size_t bytes, bool executable = false); | 114 static bool pd_commit_memory(char* addr, size_t bytes, bool executable); |
108 static bool pd_commit_memory(char* addr, size_t size, size_t alignment_hint, | 115 static bool pd_commit_memory(char* addr, size_t size, size_t alignment_hint, |
109 bool executable = false); | 116 bool executable); |
117 // Same as pd_commit_memory() that either succeeds or calls | |
118 // vm_exit_out_of_memory() with the specified mesg. | |
119 static void pd_commit_memory_or_exit(char* addr, size_t bytes, | |
120 bool executable, const char* mesg); | |
121 static void pd_commit_memory_or_exit(char* addr, size_t size, | |
122 size_t alignment_hint, | |
123 bool executable, const char* mesg); | |
110 static bool pd_uncommit_memory(char* addr, size_t bytes); | 124 static bool pd_uncommit_memory(char* addr, size_t bytes); |
111 static bool pd_release_memory(char* addr, size_t bytes); | 125 static bool pd_release_memory(char* addr, size_t bytes); |
112 | 126 |
113 static char* pd_map_memory(int fd, const char* file_name, size_t file_offset, | 127 static char* pd_map_memory(int fd, const char* file_name, size_t file_offset, |
114 char *addr, size_t bytes, bool read_only = false, | 128 char *addr, size_t bytes, bool read_only = false, |
259 size_t alignment_hint, MEMFLAGS flags); | 273 size_t alignment_hint, MEMFLAGS flags); |
260 static char* reserve_memory_aligned(size_t size, size_t alignment); | 274 static char* reserve_memory_aligned(size_t size, size_t alignment); |
261 static char* attempt_reserve_memory_at(size_t bytes, char* addr); | 275 static char* attempt_reserve_memory_at(size_t bytes, char* addr); |
262 static void split_reserved_memory(char *base, size_t size, | 276 static void split_reserved_memory(char *base, size_t size, |
263 size_t split, bool realloc); | 277 size_t split, bool realloc); |
264 static bool commit_memory(char* addr, size_t bytes, bool executable = false); | 278 static bool commit_memory(char* addr, size_t bytes, bool executable); |
265 static bool commit_memory(char* addr, size_t size, size_t alignment_hint, | 279 static bool commit_memory(char* addr, size_t size, size_t alignment_hint, |
266 bool executable = false); | 280 bool executable); |
281 // Same as commit_memory() that either succeeds or calls | |
282 // vm_exit_out_of_memory() with the specified mesg. | |
283 static void commit_memory_or_exit(char* addr, size_t bytes, | |
284 bool executable, const char* mesg); | |
285 static void commit_memory_or_exit(char* addr, size_t size, | |
286 size_t alignment_hint, | |
287 bool executable, const char* mesg); | |
267 static bool uncommit_memory(char* addr, size_t bytes); | 288 static bool uncommit_memory(char* addr, size_t bytes); |
268 static bool release_memory(char* addr, size_t bytes); | 289 static bool release_memory(char* addr, size_t bytes); |
269 | 290 |
270 enum ProtType { MEM_PROT_NONE, MEM_PROT_READ, MEM_PROT_RW, MEM_PROT_RWX }; | 291 enum ProtType { MEM_PROT_NONE, MEM_PROT_READ, MEM_PROT_RW, MEM_PROT_RWX }; |
271 static bool protect_memory(char* addr, size_t bytes, ProtType prot, | 292 static bool protect_memory(char* addr, size_t bytes, ProtType prot, |
487 static bool dll_build_name(char* buffer, size_t size, | 508 static bool dll_build_name(char* buffer, size_t size, |
488 const char* pathname, const char* fname); | 509 const char* pathname, const char* fname); |
489 | 510 |
490 // Symbol lookup, find nearest function name; basically it implements | 511 // Symbol lookup, find nearest function name; basically it implements |
491 // dladdr() for all platforms. Name of the nearest function is copied | 512 // dladdr() for all platforms. Name of the nearest function is copied |
492 // to buf. Distance from its base address is returned as offset. | 513 // to buf. Distance from its base address is optionally returned as offset. |
493 // If function name is not found, buf[0] is set to '\0' and offset is | 514 // If function name is not found, buf[0] is set to '\0' and offset is |
494 // set to -1. | 515 // set to -1 (if offset is non-NULL). |
495 static bool dll_address_to_function_name(address addr, char* buf, | 516 static bool dll_address_to_function_name(address addr, char* buf, |
496 int buflen, int* offset); | 517 int buflen, int* offset); |
497 | 518 |
498 // Locate DLL/DSO. On success, full path of the library is copied to | 519 // Locate DLL/DSO. On success, full path of the library is copied to |
499 // buf, and offset is set to be the distance between addr and the | 520 // buf, and offset is optionally set to be the distance between addr |
500 // library's base address. On failure, buf[0] is set to '\0' and | 521 // and the library's base address. On failure, buf[0] is set to '\0' |
501 // offset is set to -1. | 522 // and offset is set to -1 (if offset is non-NULL). |
502 static bool dll_address_to_library_name(address addr, char* buf, | 523 static bool dll_address_to_library_name(address addr, char* buf, |
503 int buflen, int* offset); | 524 int buflen, int* offset); |
504 | 525 |
505 // Find out whether the pc is in the static code for jvm.dll/libjvm.so. | 526 // Find out whether the pc is in the static code for jvm.dll/libjvm.so. |
506 static bool address_is_in_vm(address addr); | 527 static bool address_is_in_vm(address addr); |
710 | 731 |
711 // Extensions | 732 // Extensions |
712 #include "runtime/os_ext.hpp" | 733 #include "runtime/os_ext.hpp" |
713 | 734 |
714 public: | 735 public: |
736 class CrashProtectionCallback : public StackObj { | |
737 public: | |
738 virtual void call() = 0; | |
739 }; | |
715 | 740 |
716 // Platform dependent stuff | 741 // Platform dependent stuff |
717 #ifdef TARGET_OS_FAMILY_linux | 742 #ifdef TARGET_OS_FAMILY_linux |
718 # include "os_linux.hpp" | 743 # include "os_linux.hpp" |
719 # include "os_posix.hpp" | 744 # include "os_posix.hpp" |
888 int home_len, | 913 int home_len, |
889 char fileSep, | 914 char fileSep, |
890 char pathSep); | 915 char pathSep); |
891 static bool set_boot_path(char fileSep, char pathSep); | 916 static bool set_boot_path(char fileSep, char pathSep); |
892 static char** split_path(const char* path, int* n); | 917 static char** split_path(const char* path, int* n); |
918 | |
893 }; | 919 }; |
894 | 920 |
895 // Note that "PAUSE" is almost always used with synchronization | 921 // Note that "PAUSE" is almost always used with synchronization |
896 // so arguably we should provide Atomic::SpinPause() instead | 922 // so arguably we should provide Atomic::SpinPause() instead |
897 // of the global SpinPause() with C linkage. | 923 // of the global SpinPause() with C linkage. |
898 // It'd also be eligible for inlining on many platforms. | 924 // It'd also be eligible for inlining on many platforms. |
899 | 925 |
900 extern "C" int SpinPause () ; | 926 extern "C" int SpinPause(); |
901 extern "C" int SafeFetch32 (int * adr, int errValue) ; | |
902 extern "C" intptr_t SafeFetchN (intptr_t * adr, intptr_t errValue) ; | |
903 | 927 |
904 #endif // SHARE_VM_RUNTIME_OS_HPP | 928 #endif // SHARE_VM_RUNTIME_OS_HPP |