knight/shared/KeCodeAllocator.h
author David Anderson <dvander@alliedmods.net>
Sun Oct 26 23:50:54 2008 -0500 (2008-10-26)
changeset 2377 6ee3bbd6fbdf
parent 2226 d10b38524be3
child 3980 dc7dfcd855dc
permissions -rw-r--r--
Fixed leaking relocation table memory in JIT.
dvander@2226
     1
#ifndef _INCLUDE_KNIGHT_KE_CODE_ALLOCATOR_H_
dvander@2226
     2
#define _INCLUDE_KNIGHT_KE_CODE_ALLOCATOR_H_
dvander@2226
     3
dvander@2226
     4
#include <KeLinking.h>
dvander@2226
     5
#include <KeStdTypes.h>
dvander@2226
     6
dvander@2226
     7
namespace Knight
dvander@2226
     8
{
dvander@2226
     9
	class KeCodeCache;
dvander@2226
    10
dvander@2226
    11
	/**
dvander@2226
    12
	 * @brief Creates a new code cache/allocator.
dvander@2226
    13
	 *
dvander@2226
    14
	 * @return				New code cache allocator.
dvander@2226
    15
	 */
dvander@2226
    16
	extern KeCodeCache *KE_CreateCodeCache();
dvander@2226
    17
dvander@2226
    18
	/**
dvander@2226
    19
	 * @brief Destroys a code cache allocator.
dvander@2226
    20
	 *
dvander@2226
    21
	 * @param cache			Code cache object.
dvander@2226
    22
	 */
dvander@2226
    23
	extern void KE_DestroyCodeCache(KeCodeCache *cache);
dvander@2226
    24
dvander@2226
    25
	/**
dvander@2226
    26
	 * @brief Allocates code memory that is readable, writable, 
dvander@2226
    27
	 * and executable.
dvander@2226
    28
	 *
dvander@2226
    29
	 * The address returned wlil be aligned, minimally, on a 16-byte 
dvander@2226
    30
	 * boundary.
dvander@2226
    31
	 *
dvander@2226
    32
	 * @param cache			Code cache object.
dvander@2226
    33
	 * @param size			Amount of memory needed.
dvander@2226
    34
	 * @return				Address pointing to the memory.
dvander@2226
    35
	 */
dvander@2226
    36
	extern void *KE_AllocCode(KeCodeCache *cache, size_t size);
dvander@2226
    37
dvander@2226
    38
	/**
dvander@2226
    39
	 * @brief Frees code memory.
dvander@2226
    40
	 *
dvander@2226
    41
	 * @param cache			Code cache object.
dvander@2226
    42
	 * @param code			Address of code memory.
dvander@2226
    43
	 */
dvander@2226
    44
	extern void KE_FreeCode(KeCodeCache *cache, void *code);
dvander@2226
    45
}
dvander@2226
    46
dvander@2226
    47
#endif //_INCLUDE_KNIGHT_KE_CODE_ALLOCATOR_H_