When mesa uses sse the current allocator was just using malloc, meaning
that the memory was not set to executable. This caused some horrible segfaults that due to lack of hardware i've been unable to track down for months. Conveniently, there was already a memory allocator that uses mmap to create executable memory, #ifdef linux. Make it usable for us too. Problem solved! Thanks for todd@ for helping me debug, and deraadt@ for noticing the allocator. Makes SiS work with dri, probaby solves a bunch of other people too. ok matthieu@ (who has sent this upstream).
This commit is contained in:
parent
27ae5db2a9
commit
ce0d22a55d
4
dist/Mesa/src/mesa/main/execmem.c
vendored
4
dist/Mesa/src/mesa/main/execmem.c
vendored
@ -36,7 +36,7 @@
|
||||
|
||||
|
||||
|
||||
#if defined(__linux__)
|
||||
#if defined(__linux__) || defined(__OpenBSD__)
|
||||
|
||||
/*
|
||||
* Allocate a large block of memory which can hold code then dole it out
|
||||
@ -64,7 +64,7 @@ init_heap(void)
|
||||
if (!exec_mem)
|
||||
exec_mem = (unsigned char *) mmap(0, EXEC_HEAP_SIZE,
|
||||
PROT_EXEC | PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
MAP_PRIVATE | MAP_ANON, -1, 0);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user