Blame view

3rdparty/jdk1.8.0_171/include/jvmticmlr.h 3.69 KB
a86c63ca   Hu Chunming   提交三方库文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  /*
   * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
   * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   *
   */
  
  /*
   * This header file defines the data structures sent by the VM
   * through the JVMTI CompiledMethodLoad callback function via the
   * "void * compile_info" parameter. The memory pointed to by the
   * compile_info parameter may not be referenced after returning from
   * the CompiledMethodLoad callback. These are VM implementation
   * specific data structures that may evolve in future releases. A
   * JVMTI agent should interpret a non-NULL compile_info as a pointer
   * to a region of memory containing a list of records. In a typical
   * usage scenario, a JVMTI agent would cast each record to a
   * jvmtiCompiledMethodLoadRecordHeader, a struct that represents
   * arbitrary information. This struct contains a kind field to indicate
   * the kind of information being passed, and a pointer to the next
   * record. If the kind field indicates inlining information, then the
   * agent would cast the record to a jvmtiCompiledMethodLoadInlineRecord.
   * This record contains an array of PCStackInfo structs, which indicate
   * for every pc address what are the methods on the invocation stack.
   * The "methods" and "bcis" fields in each PCStackInfo struct specify a
   * 1-1 mapping between these inlined methods and their bytecode indices.
   * This can be used to derive the proper source lines of the inlined
   * methods.
   */
  
  #ifndef _JVMTI_CMLR_H_
  #define _JVMTI_CMLR_H_
  
  enum {
      JVMTI_CMLR_MAJOR_VERSION_1 = 0x00000001,
      JVMTI_CMLR_MINOR_VERSION_0 = 0x00000000,
  
      JVMTI_CMLR_MAJOR_VERSION   = 0x00000001,
      JVMTI_CMLR_MINOR_VERSION   = 0x00000000
  
      /*
       * This comment is for the "JDK import from HotSpot" sanity check:
       * version: 1.0.0
       */
  };
  
  typedef enum {
      JVMTI_CMLR_DUMMY       = 1,
      JVMTI_CMLR_INLINE_INFO = 2
  } jvmtiCMLRKind;
  
  /*
   * Record that represents arbitrary information passed through JVMTI
   * CompiledMethodLoadEvent void pointer.
   */
  typedef struct _jvmtiCompiledMethodLoadRecordHeader {
    jvmtiCMLRKind kind;     /* id for the kind of info passed in the record */
    jint majorinfoversion;  /* major and minor info version values. Init'ed */
    jint minorinfoversion;  /* to current version value in jvmtiExport.cpp. */
  
    struct _jvmtiCompiledMethodLoadRecordHeader* next;
  } jvmtiCompiledMethodLoadRecordHeader;
  
  /*
   * Record that gives information about the methods on the compile-time
   * stack at a specific pc address of a compiled method. Each element in
   * the methods array maps to same element in the bcis array.
   */
  typedef struct _PCStackInfo {
    void* pc;             /* the pc address for this compiled method */
    jint numstackframes;  /* number of methods on the stack */
    jmethodID* methods;   /* array of numstackframes method ids */
    jint* bcis;           /* array of numstackframes bytecode indices */
  } PCStackInfo;
  
  /*
   * Record that contains inlining information for each pc address of
   * an nmethod.
   */
  typedef struct _jvmtiCompiledMethodLoadInlineRecord {
    jvmtiCompiledMethodLoadRecordHeader header;  /* common header for casting */
    jint numpcs;          /* number of pc descriptors in this nmethod */
    PCStackInfo* pcinfo;  /* array of numpcs pc descriptors */
  } jvmtiCompiledMethodLoadInlineRecord;
  
  /*
   * Dummy record used to test that we can pass records with different
   * information through the void pointer provided that they can be cast
   * to a jvmtiCompiledMethodLoadRecordHeader.
   */
  
  typedef struct _jvmtiCompiledMethodLoadDummyRecord {
    jvmtiCompiledMethodLoadRecordHeader header;  /* common header for casting */
    char message[50];
  } jvmtiCompiledMethodLoadDummyRecord;
  
  #endif