#include "plat.h"
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>

void *malloc_aligned(size_t size)
{
	void *mem = malloc(size + 8 + sizeof(void *) * 2);
	void **aligned_ptr = (void **)((uintptr_t)(mem + 8 + sizeof(void *)) & ~7);
	aligned_ptr[-1] = mem;
	aligned_ptr[-2] = (void *)size;
	return aligned_ptr;
}

void *realloc_aligned(void *addr, size_t size)
{
	void *mem = malloc(size + 8 + sizeof(void *) * 2);
	void **aligned_ptr = (void **)((uintptr_t)(mem + 8 + sizeof(void *)) & ~7);
	aligned_ptr[-1] = mem;

	memcpy(aligned_ptr, addr, (uintptr_t)aligned_ptr[-2]);

	return aligned_ptr;
}

void free_aligned(void *addr)
{
	void **ptr = (void **)addr;
	free(ptr[-1]);
}

void *link(dasm_State **Dst)
{
	size_t size;
	void *buf;

	dasm_link(Dst, &size);
	buf = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1,
	           0);
	dasm_encode(Dst, buf);

	mprotect(buf, size, PROT_READ | PROT_EXEC);
	return buf;
}
