Mercurial > hg > graal-compiler
view src/share/vm/utilities/decoder.hpp @ 2149:7e37af9d69ef
7011379: G1: overly long concurrent marking cycles
Summary: This changeset introduces filtering of SATB buffers at the point when they are about to be enqueued. If this filtering clears enough entries on each buffer, the buffer can then be re-used and not enqueued. This cuts down the number of SATB buffers that need to be processed by the concurrent marking threads.
Reviewed-by: johnc, ysr
author | tonyp |
---|---|
date | Wed, 19 Jan 2011 09:35:17 -0500 |
parents | 2d4762ec74af |
children | f08d439fab8c |
line wrap: on
line source
/* * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. * */ #ifndef __DECODER_HPP #define __DECODER_HPP #include "memory/allocation.hpp" #ifdef _WINDOWS #include <windows.h> #include <imagehlp.h> // functions needed for decoding symbols typedef DWORD (WINAPI *pfn_SymSetOptions)(DWORD); typedef BOOL (WINAPI *pfn_SymInitialize)(HANDLE, PCTSTR, BOOL); typedef BOOL (WINAPI *pfn_SymGetSymFromAddr64)(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64); typedef DWORD (WINAPI *pfn_UndecorateSymbolName)(const char*, char*, DWORD, DWORD); #else class ElfFile; #endif // _WINDOWS class Decoder: public StackObj { public: // status code for decoding native C frame enum decoder_status { no_error, // successfully decoded frames out_of_memory, // out of memory file_invalid, // invalid elf file file_not_found, // could not found symbol file (on windows), such as jvm.pdb or jvm.map helper_not_found, // could not load dbghelp.dll (Windows only) helper_func_error, // decoding functions not found (Windows only) helper_init_error, // SymInitialize failed (Windows only) symbol_not_found // could not find the symbol }; public: Decoder() { initialize(); }; ~Decoder() { uninitialize(); }; static bool can_decode_C_frame_in_vm(); static void initialize(); static void uninitialize(); #ifdef _WINDOWS static decoder_status decode(address addr, char *buf, int buflen, int *offset); #else static decoder_status decode(address addr, const char* filepath, char *buf, int buflen, int *offset); #endif static bool demangle(const char* symbol, char *buf, int buflen); static decoder_status get_status() { return _decoder_status; }; #ifndef _WINDOWS private: static ElfFile* get_elf_file(const char* filepath); #endif // _WINDOWS private: static decoder_status _decoder_status; static bool _initialized; #ifdef _WINDOWS static HMODULE _dbghelp_handle; static bool _can_decode_in_vm; static pfn_SymGetSymFromAddr64 _pfnSymGetSymFromAddr64; static pfn_UndecorateSymbolName _pfnUndecorateSymbolName; #else static ElfFile* _opened_elf_files; #endif // _WINDOWS }; #endif // __DECODER_HPP