Unbreak on arm. Use arm_sync_icache(2) instead of __clear_cache.

This commit is contained in:
jca 2017-01-01 09:29:09 +00:00
parent 41bfda032e
commit 5ba7ddb564
2 changed files with 35 additions and 2 deletions

View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.30 2016/03/20 16:12:24 naddy Exp $
# $OpenBSD: Makefile,v 1.31 2017/01/01 09:29:09 jca Exp $
# old version that does not get updates; should be rm'd at some point
PORTROACH= ignore:1
@ -53,8 +53,11 @@ CONFIGURE_ARGS = --with-pthreads \
--enable-ctypes \
--enable-threadsafe
.if ${MACHINE_ARCH} == "arm"
MD_LIBS += -larm
.endif
CONFIGURE_ENV += SO_VERSION="${SO_VERSION}" \
LIBS=-lncurses \
LIBS="-lncurses ${MD_LIBS}" \
MOZILLA_VERSION="${MOZILLA_VERSION}" \
CPPFLAGS=-DJS_C_STRINGS_ARE_UTF8

View File

@ -0,0 +1,30 @@
$OpenBSD: patch-nanojit_CodeAlloc_cpp,v 1.1 2017/01/01 09:29:09 jca Exp $
--- js/src/nanojit/CodeAlloc.cpp.orig Tue Mar 6 15:45:30 2012
+++ js/src/nanojit/CodeAlloc.cpp Fri Dec 30 02:57:57 2016
@@ -242,9 +242,13 @@ namespace nanojit
}
#if defined(AVMPLUS_UNIX) && defined(NANOJIT_ARM)
+#if defined(AVMPLUS_LINUX)
#include <asm/unistd.h>
extern "C" void __clear_cache(char *BEG, char *END);
+#elif defined(__OpenBSD__)
+#include <machine/sysarch.h>
#endif
+#endif
#ifdef AVMPLUS_SPARC
#ifdef __linux__
@@ -318,6 +322,12 @@ extern "C" void sync_instruction_memory(caddr_t v, u_
cacheflush((int)b->start(), (int)b->start()+b->size(), 0);
}
}
+ #elif defined(NANOJIT_ARM) && defined(__OpenBSD__)
+ void CodeAlloc::flushICache(CodeList* &blocks) {
+ for (CodeList *b = blocks; b != 0; b = b->next) {
+ arm_sync_icache((u_int)b->start(), (int)b->size());
+ }
+ }
#else
// fixme: __clear_cache is a libgcc feature, test for libgcc or gcc
void CodeAlloc::flushICache(CodeList* &blocks) {