Do not push 'cpsr' register on Darwin/arm
authorIvan Maidanski <ivmai@mail.ru>
Fri, 2 Feb 2018 17:37:30 +0000 (20:37 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 2 Feb 2018 17:37:30 +0000 (20:37 +0300)
ARM cpsr stands for Control Program State Register.
It cannot contain a pointer.

* darwin_stop_world.c [ARM32] (GC_stack_range_for): Ignore cpsr
register; update comment.

darwin_stop_world.c

index 1eab1f1..3a8441e 100644 (file)
@@ -292,9 +292,8 @@ STATIC ptr_t GC_stack_range_for(ptr_t *phi, thread_act_t thread, GC_thread p,
         for (; j <= 12; j++)
           GC_push_one(state.THREAD_FLD(r[j]));
       }
-      /* "pc" and "sp" are skipped */
+      /* "cpsr", "pc" and "sp" are skipped */
       GC_push_one(state.THREAD_FLD(lr));
-      GC_push_one(state.THREAD_FLD(cpsr));
 
 #   elif defined(AARCH64)
       lo = (void *)state.THREAD_FLD(sp);