blob: 8df91333beaa15edc0ceb9a625b9d073a9230659 [file] [log] [blame]
//===- BareBonePoolAllocator.cpp: -----------------------------------------===//
//
// The SAFECode Compiler
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Barebone allcator is a simple wrapper around the pool allocation APIs,
// which is equivalent of pool allocation.
//
//===----------------------------------------------------------------------===//
#include "PoolAllocator.h"
#include <cassert>
namespace llvm {
class BarebonePoolAllocator {
public:
typedef PoolTy PoolT;
static void * poolalloc(PoolTy *Pool, unsigned NumBytes) {
void * ret = __barebone_poolalloc(Pool, NumBytes);
return ret;
}
static void * pool_alloca(PoolTy * Pool, unsigned int NumBytes) {
assert (0 && "Should be deprecated\n");
void * ret = __barebone_pool_alloca(Pool, NumBytes);
return ret;
}
static void poolinit(PoolTy *Pool, unsigned NodeSize) {
__barebone_poolinit(Pool, NodeSize);
}
static void pooldestroy(PoolTy *Pool) {
__barebone_pooldestroy(Pool);
}
static void pool_init_runtime() {
::pool_init_runtime(0, 0, 1);
}
static void poolfree(PoolTy *Pool, void *Node) {
__barebone_poolfree(Pool, Node);
}
};
}
using namespace llvm;
extern "C" {
void __sc_barebone_pool_init_runtime(unsigned, unsigned, unsigned) {
BarebonePoolAllocator::pool_init_runtime();
}
void __sc_barebone_poolinit(PoolTy *Pool, unsigned NodeSize) {
BarebonePoolAllocator::poolinit(Pool, NodeSize);
}
void __sc_barebone_pooldestroy(PoolTy *Pool) {
BarebonePoolAllocator::pooldestroy(Pool);
}
void * __sc_barebone_poolalloc(PoolTy *Pool, unsigned NumBytes) {
return BarebonePoolAllocator::poolalloc(Pool, NumBytes);
}
void __sc_barebone_poolfree(PoolTy *Pool, void *Node) {
BarebonePoolAllocator::poolfree(Pool, Node);
}
void * __sc_barebone_poolrealloc(PoolTy *Pool, void *Node, unsigned NumBytes) {
return PoolAllocatorFacade<BarebonePoolAllocator>::realloc(Pool, Node, NumBytes);
}
void * __sc_barebone_poolcalloc(PoolTy *Pool, unsigned Number, unsigned NumBytes) {
return PoolAllocatorFacade<BarebonePoolAllocator>::calloc(Pool, Number, NumBytes);
}
void * __sc_barebone_poolstrdup(PoolTy *Pool, char *Node) {
return PoolAllocatorFacade<BarebonePoolAllocator>::strdup(Pool, Node);
}
void __sc_no_op_poolcheck(PoolTy *, void *) {}
void __sc_no_op_poolcheckalign (PoolTy *, void *, unsigned Offset) {}
void * __sc_no_op_boundscheck (PoolTy * , void * , void * dest) { return dest; }
void __sc_no_op_poolregister(PoolTy *, void *, unsigned) {}
void __sc_no_op_poolunregister(PoolTy *, void*) {}
void * __sc_no_op_exactcheck(int, int, void * dest) { return dest; }
void * __sc_no_op_exactcheck2 (signed char *, signed char * dest, unsigned ) { return dest; }
}