Просмотр исходного кода

lwp栈执行代码生成时增加dc操作

shaojinchun 4 лет назад
Родитель
Сommit
94fab96542
2 измененных файлов с 41 добавлено и 6 удалено
  1. 12 2
      components/lwp/arch/aarch64/cortex-a/lwp_gcc.S
  2. 29 4
      components/lwp/arch/arm/cortex-a/lwp_gcc.S

+ 12 - 2
components/lwp/arch/aarch64/cortex-a/lwp_gcc.S

@@ -123,8 +123,15 @@ set_user_context:
     str x1, [x2, #4]
     str x1, [x2, #4]
     ldr x1, [x0, #8]
     ldr x1, [x0, #8]
     str x1, [x2, #8]
     str x1, [x2, #8]
+
+    mov x3, x2
+    dc cvau, x3
+    add x3, x3, #8
+    dc cvau, x3
+    dsb sy
     ic ialluis
     ic ialluis
     dsb sy
     dsb sy
+
     msr sp_el0, x2
     msr sp_el0, x2
     ret
     ret
 /*
 /*
@@ -361,12 +368,15 @@ user_do_signal:
     str w1, [sp]
     str w1, [sp]
     ldr w1, [x0, #4]
     ldr w1, [x0, #4]
     str w1, [sp, #4]
     str w1, [sp, #4]
-    ic ialluis
-    dsb sy
 
 
     mov x9, sp /* lwp_sigreturn */
     mov x9, sp /* lwp_sigreturn */
     mov x0, sp
     mov x0, sp
 
 
+    dc cvau, x0
+    dsb sy
+    ic ialluis
+    dsb sy
+
     msr spsel, #1
     msr spsel, #1
 
 
     mrs x1, elr_el1
     mrs x1, elr_el1

+ 29 - 4
components/lwp/arch/arm/cortex-a/lwp_gcc.S

@@ -56,10 +56,21 @@ set_user_context:
     str r1, [sp, #4]
     str r1, [sp, #4]
     ldr r1, [r0, #8]
     ldr r1, [r0, #8]
     str r1, [sp, #8]
     str r1, [sp, #8]
-    mov lr, sp
-    mov r0, #0
+
+    mov r1, sp
+    mcr p15, 0, r1, c7, c11, 1   ;//dc cmvau
+    add r1, #4
+    mcr p15, 0, r1, c7, c11, 1   ;//dc cmvau
+    add r1, #4
+    mcr p15, 0, r1, c7, c11, 1   ;//dc cmvau
+    dsb
+    isb
     mcr p15, 0, r0, c7, c5, 0   ;//iciallu
     mcr p15, 0, r0, c7, c5, 0   ;//iciallu
     dsb
     dsb
+    isb
+
+    mov lr, sp
+    mov r0, #0
     cps #Mode_SVC
     cps #Mode_SVC
     mov pc, lr
     mov pc, lr
 
 
@@ -201,10 +212,17 @@ lwp_check_debug:
     str r1, [sp]
     str r1, [sp]
     ldr r1, [r0, #4]
     ldr r1, [r0, #4]
     str r1, [sp, #4]
     str r1, [sp, #4]
-    mov r0, #0
+
+    mov r1, sp
+    mcr p15, 0, r1, c7, c11, 1   ;//dc cmvau
+    add r1, #4
+    mcr p15, 0, r1, c7, c11, 1   ;//dc cmvau
+    dsb
+    isb
     mcr p15, 0, r0, c7, c5, 0   ;//iciallu
     mcr p15, 0, r0, c7, c5, 0   ;//iciallu
     dsb
     dsb
     isb
     isb
+
     mov r0, sp /* lwp_debugreturn */
     mov r0, sp /* lwp_debugreturn */
     cps #Mode_SVC
     cps #Mode_SVC
 
 
@@ -257,9 +275,16 @@ user_do_signal:
     str r1, [sp]
     str r1, [sp]
     ldr r1, [r0, #4]
     ldr r1, [r0, #4]
     str r1, [sp, #4]
     str r1, [sp, #4]
-    mov r0, #0
+
+    mov r1, sp
+    mcr p15, 0, r1, c7, c11, 1   ;//dc cmvau
+    add r1, #4
+    mcr p15, 0, r1, c7, c11, 1   ;//dc cmvau
+    dsb
+    isb
     mcr p15, 0, r0, c7, c5, 0   ;//iciallu
     mcr p15, 0, r0, c7, c5, 0   ;//iciallu
     dsb
     dsb
+    isb
 
 
     mov r5, sp  ;//if func is 0
     mov r5, sp  ;//if func is 0
     mov lr, sp
     mov lr, sp