hotspot/src/os/windows/vm/decoder_windows.hpp
author zgu
Wed, 09 Jan 2013 14:46:55 -0500
changeset 15186 1a255c84cf6a
parent 13963 e5b53c306fb5
child 19952 bc974e92f881
permissions -rw-r--r--
7152671: RFE: Windows decoder should add some std dirs to the symbol search path Summary: Added JRE/JDK bin directories to decoder's symbol search path Reviewed-by: dcubed, sla
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11483
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
     1
/*
13963
e5b53c306fb5 7197424: update copyright year to match last edit in jdk8 hotspot repository
mikael
parents: 13340
diff changeset
     2
 * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
11483
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
     4
 *
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
     7
 * published by the Free Software Foundation.
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
     8
 *
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    13
 * accompanied this code).
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    14
 *
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    18
 *
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    21
 * questions.
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    22
 *
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    23
 */
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    24
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    25
#ifndef OS_WINDOWS_VM_DECODER_WINDOWS_HPP
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    26
#define OS_WINDOWS_VM_DECIDER_WINDOWS_HPP
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    27
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    28
#include <windows.h>
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    29
#include <imagehlp.h>
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    30
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    31
#include "utilities/decoder.hpp"
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    32
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    33
// functions needed for decoding symbols
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    34
typedef DWORD (WINAPI *pfn_SymSetOptions)(DWORD);
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    35
typedef BOOL  (WINAPI *pfn_SymInitialize)(HANDLE, PCTSTR, BOOL);
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    36
typedef BOOL  (WINAPI *pfn_SymGetSymFromAddr64)(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64);
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    37
typedef DWORD (WINAPI *pfn_UndecorateSymbolName)(const char*, char*, DWORD, DWORD);
15186
1a255c84cf6a 7152671: RFE: Windows decoder should add some std dirs to the symbol search path
zgu
parents: 13963
diff changeset
    38
typedef BOOL  (WINAPI *pfn_SymSetSearchPath)(HANDLE, PCTSTR);
1a255c84cf6a 7152671: RFE: Windows decoder should add some std dirs to the symbol search path
zgu
parents: 13963
diff changeset
    39
typedef BOOL  (WINAPI *pfn_SymGetSearchPath)(HANDLE, PTSTR, int);
11483
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    40
11761
bf460b379a6a 7141259: Native stack is missing in hs_err
zgu
parents: 11483
diff changeset
    41
class WindowsDecoder : public AbstractDecoder {
11483
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    42
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    43
public:
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    44
  WindowsDecoder();
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    45
  ~WindowsDecoder() { uninitialize(); };
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    46
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    47
  bool can_decode_C_frame_in_vm() const;
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    48
  bool demangle(const char* symbol, char *buf, int buflen);
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    49
  bool decode(address addr, char *buf, int buflen, int* offset, const char* modulepath = NULL);
13340
40c424a6ff53 7186778: MachO decoder implementation for MacOSX
zgu
parents: 11761
diff changeset
    50
  bool decode(address addr, char *buf, int buflen, int* offset, const void* base) {
40c424a6ff53 7186778: MachO decoder implementation for MacOSX
zgu
parents: 11761
diff changeset
    51
    ShouldNotReachHere();
40c424a6ff53 7186778: MachO decoder implementation for MacOSX
zgu
parents: 11761
diff changeset
    52
    return false;
40c424a6ff53 7186778: MachO decoder implementation for MacOSX
zgu
parents: 11761
diff changeset
    53
  }
11483
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    54
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    55
private:
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    56
  void initialize();
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    57
  void uninitialize();
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    58
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    59
private:
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    60
  HMODULE                   _dbghelp_handle;
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    61
  bool                      _can_decode_in_vm;
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    62
  pfn_SymGetSymFromAddr64   _pfnSymGetSymFromAddr64;
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    63
  pfn_UndecorateSymbolName  _pfnUndecorateSymbolName;
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    64
};
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    65
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    66
#endif // OS_WINDOWS_VM_DECODER_WINDOWS_HPP
4d3f4bca0019 7071311: Decoder enhancement
zgu
parents:
diff changeset
    67