Index: kernel/generic/src/mm/backend_elf.c
===================================================================
--- kernel/generic/src/mm/backend_elf.c	(revision b22304b650952abb7d44e9230f737b0fa3126c9d)
+++ kernel/generic/src/mm/backend_elf.c	(revision 36e8686222539ee64225807a6ff4153aaead898f)
@@ -49,4 +49,5 @@
 #include <macros.h>
 #include <arch.h>
+#include <arch/barrier.h>
 
 #ifdef CONFIG_VIRT_IDX_DCACHE
@@ -68,10 +69,11 @@
  * The address space area and page tables must be already locked.
  *
- * @param area Pointer to the address space area.
- * @param addr Faulting virtual address.
- * @param access Access mode that caused the fault (i.e. read/write/exec).
- *
- * @return AS_PF_FAULT on failure (i.e. page fault) or AS_PF_OK on success (i.e.
- *     serviced).
+ * @param area		Pointer to the address space area.
+ * @param addr		Faulting virtual address.
+ * @param access	Access mode that caused the fault (i.e.
+ * 			read/write/exec).
+ *
+ * @return		AS_PF_FAULT on failure (i.e. page fault) or AS_PF_OK
+ * 			on success (i.e. serviced).
  */
 int elf_page_fault(as_area_t *area, uintptr_t addr, pf_access_t access)
@@ -151,4 +153,6 @@
 			memcpy((void *) PA2KA(frame),
 			    (void *) (base + i * FRAME_SIZE), FRAME_SIZE);
+			if (entry->p_flags & PF_X)
+				smc_coherence_block(PA2KA(frame), FRAME_SIZE);
 			dirty = true;
 		} else {
@@ -188,6 +192,10 @@
 		    (void *) (base + i * FRAME_SIZE + pad_lo),
 		    FRAME_SIZE - pad_lo - pad_hi);
+		if (entry->p_flags & PF_X)
+			smc_coherence_block(PA2KA(frame) + pad_lo, FRAME_SIZE -
+			    pad_lo - pad_hi);
 		memsetb((void *) PA2KA(frame), pad_lo, 0);
-		memsetb((void *) (PA2KA(frame) + FRAME_SIZE - pad_hi), pad_hi, 0);
+		memsetb((void *) (PA2KA(frame) + FRAME_SIZE - pad_hi), pad_hi,
+		    0);
 		dirty = true;
 	}
@@ -213,7 +221,8 @@
  * The address space area and page tables must be already locked.
  *
- * @param area Pointer to the address space area.
- * @param page Page that is mapped to frame. Must be aligned to PAGE_SIZE.
- * @param frame Frame to be released.
+ * @param area		Pointer to the address space area.
+ * @param page		Page that is mapped to frame. Must be aligned to
+ * 			PAGE_SIZE.
+ * @param frame		Frame to be released.
  *
  */
@@ -258,5 +267,5 @@
  * The address space and address space area must be locked prior to the call.
  *
- * @param area Address space area.
+ * @param area		Address space area.
  */
 void elf_share(as_area_t *area)
