133 static void pd_commit_memory_or_exit(char* addr, size_t bytes,
134 bool executable, const char* mesg);
135 static void pd_commit_memory_or_exit(char* addr, size_t size,
136 size_t alignment_hint,
137 bool executable, const char* mesg);
138 static bool pd_uncommit_memory(char* addr, size_t bytes);
139 static bool pd_release_memory(char* addr, size_t bytes);
140
141 static char* pd_map_memory(int fd, const char* file_name, size_t file_offset,
142 char *addr, size_t bytes, bool read_only = false,
143 bool allow_exec = false);
144 static char* pd_remap_memory(int fd, const char* file_name, size_t file_offset,
145 char *addr, size_t bytes, bool read_only,
146 bool allow_exec);
147 static bool pd_unmap_memory(char *addr, size_t bytes);
148 static void pd_free_memory(char *addr, size_t bytes, size_t alignment_hint);
149 static void pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint);
150
151 static size_t page_size_for_region(size_t region_size, size_t min_pages, bool must_be_aligned);
152
153 public:
154 static void init(void); // Called before command line parsing
155 static void init_before_ergo(void); // Called after command line parsing
156 // before VM ergonomics processing.
157 static jint init_2(void); // Called after command line parsing
158 // and VM ergonomics processing
159 static void init_globals(void) { // Called from init_globals() in init.cpp
160 init_globals_ext();
161 }
162
163 // File names are case-insensitive on windows only
164 // Override me as needed
165 static int file_name_strcmp(const char* s1, const char* s2);
166
167 // unset environment variable
168 static bool unsetenv(const char* name);
169
170 static bool have_special_privileges();
171
172 static jlong javaTimeMillis();
573
574 static int get_loaded_modules_info(LoadedModulesCallbackFunc callback, void *param);
575
576 // Return the handle of this process
577 static void* get_default_process_handle();
578
579 // Check for static linked agent library
580 static bool find_builtin_agent(AgentLibrary *agent_lib, const char *syms[],
581 size_t syms_len);
582
583 // Find agent entry point
584 static void *find_agent_function(AgentLibrary *agent_lib, bool check_lib,
585 const char *syms[], size_t syms_len);
586
587 // Print out system information; they are called by fatal error handler.
588 // Output format may be different on different platforms.
589 static void print_os_info(outputStream* st);
590 static void print_os_info_brief(outputStream* st);
591 static void print_cpu_info(outputStream* st, char* buf, size_t buflen);
592 static void pd_print_cpu_info(outputStream* st, char* buf, size_t buflen);
593 static void print_memory_info(outputStream* st);
594 static void print_dll_info(outputStream* st);
595 static void print_environment_variables(outputStream* st, const char** env_list);
596 static void print_context(outputStream* st, void* context);
597 static void print_register_info(outputStream* st, void* context);
598 static void print_siginfo(outputStream* st, void* siginfo);
599 static void print_signal_handlers(outputStream* st, char* buf, size_t buflen);
600 static void print_date_and_time(outputStream* st, char* buf, size_t buflen);
601
602 static void print_location(outputStream* st, intptr_t x, bool verbose = false);
603 static size_t lasterror(char *buf, size_t len);
604 static int get_last_error();
605
606 // Determines whether the calling process is being debugged by a user-mode debugger.
607 static bool is_debugger_attached();
608
609 // wait for a key press if PauseAtExit is set
610 static void wait_for_keypress_at_exit(void);
611
612 // The following two functions are used by fatal error handler to trace
|
133 static void pd_commit_memory_or_exit(char* addr, size_t bytes,
134 bool executable, const char* mesg);
135 static void pd_commit_memory_or_exit(char* addr, size_t size,
136 size_t alignment_hint,
137 bool executable, const char* mesg);
138 static bool pd_uncommit_memory(char* addr, size_t bytes);
139 static bool pd_release_memory(char* addr, size_t bytes);
140
141 static char* pd_map_memory(int fd, const char* file_name, size_t file_offset,
142 char *addr, size_t bytes, bool read_only = false,
143 bool allow_exec = false);
144 static char* pd_remap_memory(int fd, const char* file_name, size_t file_offset,
145 char *addr, size_t bytes, bool read_only,
146 bool allow_exec);
147 static bool pd_unmap_memory(char *addr, size_t bytes);
148 static void pd_free_memory(char *addr, size_t bytes, size_t alignment_hint);
149 static void pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint);
150
151 static size_t page_size_for_region(size_t region_size, size_t min_pages, bool must_be_aligned);
152
153 // Get summary strings for system information in buffer provided
154 static bool get_host_name(char* buf, size_t buflen) PRODUCT_RETURN_(false); // true if available
155 static void get_summary_cpu_info(char* buf, size_t buflen);
156 static void get_summary_os_info(char* buf, size_t buflen);
157
158 public:
159 static void init(void); // Called before command line parsing
160 static void init_before_ergo(void); // Called after command line parsing
161 // before VM ergonomics processing.
162 static jint init_2(void); // Called after command line parsing
163 // and VM ergonomics processing
164 static void init_globals(void) { // Called from init_globals() in init.cpp
165 init_globals_ext();
166 }
167
168 // File names are case-insensitive on windows only
169 // Override me as needed
170 static int file_name_strcmp(const char* s1, const char* s2);
171
172 // unset environment variable
173 static bool unsetenv(const char* name);
174
175 static bool have_special_privileges();
176
177 static jlong javaTimeMillis();
578
579 static int get_loaded_modules_info(LoadedModulesCallbackFunc callback, void *param);
580
581 // Return the handle of this process
582 static void* get_default_process_handle();
583
584 // Check for static linked agent library
585 static bool find_builtin_agent(AgentLibrary *agent_lib, const char *syms[],
586 size_t syms_len);
587
588 // Find agent entry point
589 static void *find_agent_function(AgentLibrary *agent_lib, bool check_lib,
590 const char *syms[], size_t syms_len);
591
592 // Print out system information; they are called by fatal error handler.
593 // Output format may be different on different platforms.
594 static void print_os_info(outputStream* st);
595 static void print_os_info_brief(outputStream* st);
596 static void print_cpu_info(outputStream* st, char* buf, size_t buflen);
597 static void pd_print_cpu_info(outputStream* st, char* buf, size_t buflen);
598 static void print_summary_info(outputStream* st, char* buf, size_t buflen);
599 static void print_memory_info(outputStream* st);
600 static void print_dll_info(outputStream* st);
601 static void print_environment_variables(outputStream* st, const char** env_list);
602 static void print_context(outputStream* st, void* context);
603 static void print_register_info(outputStream* st, void* context);
604 static void print_siginfo(outputStream* st, void* siginfo);
605 static void print_signal_handlers(outputStream* st, char* buf, size_t buflen);
606 static void print_date_and_time(outputStream* st, char* buf, size_t buflen);
607
608 static void print_location(outputStream* st, intptr_t x, bool verbose = false);
609 static size_t lasterror(char *buf, size_t len);
610 static int get_last_error();
611
612 // Determines whether the calling process is being debugged by a user-mode debugger.
613 static bool is_debugger_attached();
614
615 // wait for a key press if PauseAtExit is set
616 static void wait_for_keypress_at_exit(void);
617
618 // The following two functions are used by fatal error handler to trace
|