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

Reply via email to