hotspot/src/share/vm/compiler/abstractCompiler.hpp
author coleenp
Mon, 14 Jan 2013 11:01:39 -0500
changeset 15194 a35093d73168
parent 13963 e5b53c306fb5
child 15207 86fd7c602ddf
permissions -rw-r--r--
8006005: Fix constant pool index validation and alignment trap for method parameter reflection Summary: This patch addresses an alignment trap due to the storage format of method parameters data in constMethod. It also adds code to validate constant pool indexes for method parameters data. Reviewed-by: jrose, dholmes Contributed-by: eric.mccorkle@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
13963
e5b53c306fb5 7197424: update copyright year to match last edit in jdk8 hotspot repository
mikael
parents: 13195
diff changeset
     2
 * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6187
diff changeset
    25
#ifndef SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6187
diff changeset
    26
#define SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6187
diff changeset
    27
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6187
diff changeset
    28
#include "ci/compilerInterface.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6187
diff changeset
    29
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
typedef void (*initializer)(void);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 7397
diff changeset
    32
class AbstractCompiler : public CHeapObj<mtCompiler> {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
  bool _is_initialized; // Mark whether compiler object is initialized
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
 protected:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
  // Used for tracking global state of compiler runtime initialization
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
  enum { uninitialized, initializing, initialized };
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
  // This method will call the initialization method "f" once (per compiler class/subclass)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
  // and do so without holding any locks
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
  void initialize_runtimes(initializer f, volatile int* state);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
  AbstractCompiler() : _is_initialized(false)    {}
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
  // Name of this compiler
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
  virtual const char* name() = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
  // Missing feature tests
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
  virtual bool supports_native()                 { return true; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
  virtual bool supports_osr   ()                 { return true; }
6187
4fa7845f7c14 6976186: integrate Shark HotSpot changes
twisti
parents: 5547
diff changeset
    53
#if defined(TIERED) || ( !defined(COMPILER1) && !defined(COMPILER2) && !defined(SHARK))
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
  virtual bool is_c1   ()                        { return false; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
  virtual bool is_c2   ()                        { return false; }
6187
4fa7845f7c14 6976186: integrate Shark HotSpot changes
twisti
parents: 5547
diff changeset
    56
  virtual bool is_shark()                        { return false; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
#else
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
#ifdef COMPILER1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
  bool is_c1   ()                                { return true; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
  bool is_c2   ()                                { return false; }
6187
4fa7845f7c14 6976186: integrate Shark HotSpot changes
twisti
parents: 5547
diff changeset
    61
  bool is_shark()                                { return false; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
#endif // COMPILER1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
#ifdef COMPILER2
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
  bool is_c1   ()                                { return false; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
  bool is_c2   ()                                { return true; }
6187
4fa7845f7c14 6976186: integrate Shark HotSpot changes
twisti
parents: 5547
diff changeset
    66
  bool is_shark()                                { return false; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
#endif // COMPILER2
6187
4fa7845f7c14 6976186: integrate Shark HotSpot changes
twisti
parents: 5547
diff changeset
    68
#ifdef SHARK
4fa7845f7c14 6976186: integrate Shark HotSpot changes
twisti
parents: 5547
diff changeset
    69
  bool is_c1   ()                                { return false; }
4fa7845f7c14 6976186: integrate Shark HotSpot changes
twisti
parents: 5547
diff changeset
    70
  bool is_c2   ()                                { return false; }
4fa7845f7c14 6976186: integrate Shark HotSpot changes
twisti
parents: 5547
diff changeset
    71
  bool is_shark()                                { return true; }
4fa7845f7c14 6976186: integrate Shark HotSpot changes
twisti
parents: 5547
diff changeset
    72
#endif // SHARK
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
#endif // TIERED
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
  // Customization
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
  virtual bool needs_stubs            ()         = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
  void mark_initialized()                        { _is_initialized = true; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
  bool is_initialized()                          { return _is_initialized; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
  virtual void initialize()                      = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
  // Compilation entry point for methods
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
  virtual void compile_method(ciEnv* env,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
                              ciMethod* target,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
                              int entry_bci) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
    ShouldNotReachHere();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
  // Print compilation timers and statistics
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
  virtual void print_timers() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
    ShouldNotReachHere();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6187
diff changeset
    96
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6187
diff changeset
    97
#endif // SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP