view mem.c @ 103:a71544cd01ea

Don't pre-emptively translate code at interrupt vectors as some PD ROMs have these pointing at junk. Need some kind of heuristic for detecting garbage if I'm going to translate them ahead of time by default.
author Mike Pavone <pavone@retrodev.com>
date Thu, 27 Dec 2012 22:48:54 -0800
parents 3e7bfde7606e
children 140af5509ce7
line wrap: on
line source

#include <sys/mman.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include "mem.h"

/*
void * alloc_code(size_t *size)
{
	*size += PAGE_SIZE - (*size & (PAGE_SIZE - 1));
	return mmap(NULL, *size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
}
*/

/*
void * alloc_code(size_t *size)
{
	char * ret = malloc(*size);
	char * base = (char *)(((intptr_t)ret) & (~(PAGE_SIZE-1)));
	mprotect(base, (ret + *size) - base, PROT_EXEC | PROT_READ | PROT_WRITE);
	return ret;
}
*/

void * alloc_code(size_t *size)
{
	*size += PAGE_SIZE - (*size & (PAGE_SIZE - 1));
	void * ret = sbrk(*size);
	if (ret == ((void *)-1)) {
		return NULL;
	}
	mprotect(ret, *size, PROT_EXEC | PROT_READ | PROT_WRITE);
	return ret;
}