[openfirmware] [commit] r3577 - forth/wrapper
repository service
svn at openfirmware.info
Fri Mar 1 10:00:58 CET 2013
Author: wmb
Date: Fri Mar 1 10:00:57 2013
New Revision: 3577
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3577
Log:
ARM - fixed wrapper to avoid Segmentation Violations when compiled
for the SYSV ABI, which disallows self-modifying code by default.
The solution is to call mprotect(..., PROT_READ | PROT_WRITE | PROT_EXEC);
Modified:
forth/wrapper/wrapper.c
Modified: forth/wrapper/wrapper.c
==============================================================================
--- forth/wrapper/wrapper.c Wed Feb 27 10:16:19 2013 (r3576)
+++ forth/wrapper/wrapper.c Fri Mar 1 10:00:57 2013 (r3577)
@@ -56,6 +56,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <sys/mman.h>
/*
* The following #includes and externs fix GCC warnings when compiled with
@@ -1011,7 +1012,12 @@
# endif
# endif
+#if defined(__linux__) && defined(ARM)
+ /* This is a hack to make sure loadaddr is page-aligned for mprotect() in s_flushcache() */
+ loadaddr = (char *)sbrk(memsize);
+#else
loadaddr = (char *)m_alloc(memsize);
+#endif
if ((loadaddr == (char *) -1) || (loadaddr == (char *) 0)) {
error("forth: Can't get memory","");
exit(1);
@@ -2195,6 +2201,7 @@
return 0L;
#endif
#if defined(__linux__) && defined(ARM)
+ mprotect(adr, len, PROT_READ | PROT_WRITE | PROT_EXEC);
__clear_cache(adr, adr+len);
return 0L;
#endif
More information about the openfirmware
mailing list