make libacc run with execute stack protections enabled.

libacc was allocating memory using malloc for executable pages.
When running on a system where the stack and heap are not
executable, using malloc for executable pages will result in
a segfault.

This change modifies libacc to allow the code to run, even
if the system is running with executable stack and heap disabled.

Change-Id: Ia74e3d83750c09b7eefd865ff059db920093040d
This commit is contained in:
Nick Kralevich 2010-04-23 09:53:09 -07:00
parent 33680b106d
commit 093ba25991
1 changed files with 4 additions and 5 deletions

View File

@ -23,10 +23,7 @@
#include <cutils/hashmap.h>
#if defined(__i386__)
#include <sys/mman.h>
#endif
#if defined(__arm__)
#define DEFAULT_ARM_CODEGEN
@ -230,7 +227,7 @@ class Compiler : public ErrorSink {
void release() {
if (pProgramBase != 0) {
free(pProgramBase);
munmap(pProgramBase, mSize);
pProgramBase = 0;
}
}
@ -263,7 +260,9 @@ class Compiler : public ErrorSink {
virtual void init(int size) {
release();
mSize = size;
pProgramBase = (char*) calloc(1, size);
pProgramBase = (char*) mmap(NULL, size,
PROT_EXEC | PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
ind = pProgramBase;
}