Mercurial > hg > truffle
comparison src/os/linux/vm/os_linux.cpp @ 2204:63d374c54045
7014918: Improve core/minidump handling in Hotspot
Summary: Added Minidump support on Windows, enabled large page core dumps when coredump_filter is present and writing out path/rlimit for core dumps.
Reviewed-by: poonam, dsamersoff, sla, coleenp
author | ctornqvi |
---|---|
date | Wed, 09 Feb 2011 11:08:10 +0100 |
parents | 9cd8a2c2d584 |
children | 0cd39a385a72 da091bb67459 |
comparison
equal
deleted
inserted
replaced
2203:5197f3d713a1 | 2204:63d374c54045 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
129 | 129 |
130 // for timer info max values which include all bits | 130 // for timer info max values which include all bits |
131 #define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF) | 131 #define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF) |
132 #define SEC_IN_NANOSECS 1000000000LL | 132 #define SEC_IN_NANOSECS 1000000000LL |
133 | 133 |
134 #define LARGEPAGES_BIT (1 << 6) | |
134 //////////////////////////////////////////////////////////////////////////////// | 135 //////////////////////////////////////////////////////////////////////////////// |
135 // global variables | 136 // global variables |
136 julong os::Linux::_physical_memory = 0; | 137 julong os::Linux::_physical_memory = 0; |
137 | 138 |
138 address os::Linux::_initial_thread_stack_bottom = NULL; | 139 address os::Linux::_initial_thread_stack_bottom = NULL; |
2815 | 2816 |
2816 bool os::unguard_memory(char* addr, size_t size) { | 2817 bool os::unguard_memory(char* addr, size_t size) { |
2817 return linux_mprotect(addr, size, PROT_READ|PROT_WRITE); | 2818 return linux_mprotect(addr, size, PROT_READ|PROT_WRITE); |
2818 } | 2819 } |
2819 | 2820 |
2821 /* | |
2822 * Set the coredump_filter bits to include largepages in core dump (bit 6) | |
2823 * | |
2824 * From the coredump_filter documentation: | |
2825 * | |
2826 * - (bit 0) anonymous private memory | |
2827 * - (bit 1) anonymous shared memory | |
2828 * - (bit 2) file-backed private memory | |
2829 * - (bit 3) file-backed shared memory | |
2830 * - (bit 4) ELF header pages in file-backed private memory areas (it is | |
2831 * effective only if the bit 2 is cleared) | |
2832 * - (bit 5) hugetlb private memory | |
2833 * - (bit 6) hugetlb shared memory | |
2834 */ | |
2835 static void set_coredump_filter(void) { | |
2836 FILE *f; | |
2837 long cdm; | |
2838 | |
2839 if ((f = fopen("/proc/self/coredump_filter", "r+")) == NULL) { | |
2840 return; | |
2841 } | |
2842 | |
2843 if (fscanf(f, "%lx", &cdm) != 1) { | |
2844 fclose(f); | |
2845 return; | |
2846 } | |
2847 | |
2848 rewind(f); | |
2849 | |
2850 if ((cdm & LARGEPAGES_BIT) == 0) { | |
2851 cdm |= LARGEPAGES_BIT; | |
2852 fprintf(f, "%#lx", cdm); | |
2853 } | |
2854 | |
2855 fclose(f); | |
2856 } | |
2857 | |
2820 // Large page support | 2858 // Large page support |
2821 | 2859 |
2822 static size_t _large_page_size = 0; | 2860 static size_t _large_page_size = 0; |
2823 | 2861 |
2824 bool os::large_page_init() { | 2862 bool os::large_page_init() { |
2871 if (_large_page_size > default_page_size) { | 2909 if (_large_page_size > default_page_size) { |
2872 _page_sizes[0] = _large_page_size; | 2910 _page_sizes[0] = _large_page_size; |
2873 _page_sizes[1] = default_page_size; | 2911 _page_sizes[1] = default_page_size; |
2874 _page_sizes[2] = 0; | 2912 _page_sizes[2] = 0; |
2875 } | 2913 } |
2914 | |
2915 set_coredump_filter(); | |
2876 | 2916 |
2877 // Large page support is available on 2.6 or newer kernel, some vendors | 2917 // Large page support is available on 2.6 or newer kernel, some vendors |
2878 // (e.g. Redhat) have backported it to their 2.4 based distributions. | 2918 // (e.g. Redhat) have backported it to their 2.4 based distributions. |
2879 // We optimistically assume the support is available. If later it turns out | 2919 // We optimistically assume the support is available. If later it turns out |
2880 // not true, VM will automatically switch to use regular page size. | 2920 // not true, VM will automatically switch to use regular page size. |