view ports/hotspot/src/share/vm/shark/sharkMemoryManager.hpp @ 1743:8228a1d1008b

2009-03-06 Gary Benson <gbenson@redhat.com> * ports/hotspot/src/share/vm/shark/sharkBuilder.hpp (SharkBuilder::SharkBuilder): New argument. (SharkBuilder::_compiler): New field. (SharkBuilder::_module): Removed field. (SharkBuilder::_module_provider): Likewise. (SharkBuilder::_execution_engine): Likewise. (SharkBuilder::module): Rewritten. (SharkBuilder::execution_engine): Likewise. (SharkBuilder::MyJITMemoryManager): Moved to sharkMemoryManager.hpp. (SharkBuilder::sharkEntry): Likewise. * ports/hotspot/src/share/vm/shark/sharkBuilder.cpp (SharkBuilder::SharkBuilder): New argument. (SharkBuilder::MyJITMemoryManager::endFunctionBody) Moved to sharkMemoryManager.cpp. (SharkBuilder::sharkEntry): Likewise. * ports/hotspot/src/share/vm/shark/sharkCompiler.hpp (SharkCompiler::_module): New field. (SharkCompiler::_execution_engine): Likewise. (SharkCompiler::module): New method. (SharkCompiler::execution_engine): Likewise. (SharkCompiler::compile): Likewise. * ports/hotspot/src/share/vm/shark/sharkCompiler.hpp (SharkCompiler::SharkCompiler): Initialize new fields. (SharkCompiler::compile): New method. * ports/hotspot/src/share/vm/shark/sharkEntry.hpp (SharkEntry::_code_start): Removed field. (SharkEntry::code_start): Rewritten. (SharkEntry::set_bounds): Replaced with... (SharkEntry::set_code_limit): New method. (SharkEntry::llvm_function_offset): Removed method. * ports/hotspot/src/share/vm/shark/sharkFunction.hpp (SharkFunction::SharkFunction): Changed arguments. (SharkFunction::_builder): Removed field. (SharkFunction::_compiler): New field. (SharkFunction::compiler): New method. (SharkFunction::builder): Rewritten. * ports/hotspot/src/share/vm/shark/sharkFunction.hpp (SharkFunction::initialize): Updated for new interfaces. * ports/hotspot/src/share/vm/shark/sharkMemoryManager.hpp: New file. * ports/hotspot/src/share/vm/shark/sharkMemoryManager.cpp: Likewise. * ports/hotspot/src/share/vm/includeDB_shark: Updated.
author Gary Benson <gbenson@redhat.com>
date Fri, 06 Mar 2009 09:47:04 -0500
parents
children
line wrap: on
line source

/*
 * Copyright 1999-2007 Sun Microsystems, Inc.  All Rights Reserved.
 * Copyright 2009 Red Hat, Inc.
 * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 *
 */

// SharkMemoryManager wraps the LLVM JIT Memory Manager.  We could use
// this to run our own memory allocation policies, but for now all we
// use it for is figuring out where the resulting native code ended up.

class SharkMemoryManager : public llvm::JITMemoryManager {
 public:
  SharkMemoryManager()
    : _mm(llvm::JITMemoryManager::CreateDefaultMemManager()) {}

 private:
  llvm::JITMemoryManager* _mm;

 private:
  llvm::JITMemoryManager* mm() const
  {
    return _mm;
  }

 private:
  std::map<const llvm::Function*, SharkEntry*> _entry_map;

 public:
  void set_entry_for_function(const llvm::Function* function, SharkEntry* entry)
  {
    _entry_map[function] = entry;
  }
  SharkEntry* get_entry_for_function(const llvm::Function* function)
  {
    return _entry_map[function];
  }

 public:
  void AllocateGOT();
  unsigned char* getGOTBase() const;
  unsigned char* allocateStub(const llvm::GlobalValue* F,
                              unsigned StubSize,
                              unsigned Alignment);
  unsigned char* startFunctionBody(const llvm::Function* F,
                                   uintptr_t& ActualSize);
  void endFunctionBody(const llvm::Function* F,
                       unsigned char* FunctionStart,
                       unsigned char* FunctionEnd);
  unsigned char* startExceptionTable(const llvm::Function* F,
                                     uintptr_t& ActualSize);
  void endExceptionTable(const llvm::Function* F,
                         unsigned char* TableStart,
                         unsigned char* TableEnd,
                         unsigned char* FrameRegister);
  void setMemoryWritable();
  void setMemoryExecutable();
  void deallocateMemForFunction(const llvm::Function* F);
};