Author: theraven
Date: Wed Mar 19 08:26:52 2014
New Revision: 37754
URL: http://svn.gna.org/viewcvs/gnustep?rev=37754&view=rev
Log:
Make sure that we flush the instruction cache when creating a new IMP at run
time.
Modified:
libs/libobjc2/trunk/block_to_imp.c
Modified: libs/libobjc2/trunk/block_to_imp.c
URL:
http://svn.gna.org/viewcvs/gnustep/libs/libobjc2/trunk/block_to_imp.c?rev=37754&r1=37753&r2=37754&view=diff
==============================================================================
--- libs/libobjc2/trunk/block_to_imp.c (original)
+++ libs/libobjc2/trunk/block_to_imp.c Wed Mar 19 08:26:52 2014
@@ -16,6 +16,13 @@
#include "blocks_runtime.h"
#include "lock.h"
#include "visibility.h"
+
+#if __has_builtin(__builtin___clear_cache)
+# define clear_cache __builtin___clear_cache
+#else
+void __clear_cache(void* start, void* end);
+# define clear_cache __clear_cache
+#endif
/* QNX needs a special header for asprintf() */
@@ -122,7 +129,9 @@
out[1] = Block_copy(b);
memcpy(&out[2], start, trampolineSize);
out = buf.x;
- return (IMP)&out[2];
+ char *newIMP = (char*)&out[2];
+ clear_cache(newIMP, newIMP+trampolineSize);
+ return (IMP)newIMP;
}
static void* isBlockIMP(void *anIMP)
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs