#include <exec/memory.h>
#include <proto/exec.h>

#define ALIAS(a,b) asm(".stabs \"_" #a "\",11,0,0,0\n.stabs \"_" #b "\",1,0,0,0")

#if 1 /* own memory allocation */

void *__builtin_new(ULONG size)
{
  ULONG *a;

  size = (size+3*sizeof(ULONG)-1)&~(2*sizeof(ULONG)-1);
  if (a=(ULONG*)AllocMem(size,MEMF_CLEAR))
    *a++=size;
  return (void *)a;
}

void __builtin_delete(void *mem)
{
  ULONG size;

  if (mem)
  {
    size=(ULONG)*(--((ULONG *)mem)); FreeMem(mem,size);
  }
}

#else /* use system functions */

void *__builtin_new(unsigned long size)
{
  return malloc(size);
}

void __builtin_delete(void *mem)
{
  free(mem);
};

#endif

ALIAS(_main,main);
ALIAS(exit,_exit);
