From: a_tobler Date: Mon, 29 Jan 2007 21:10:56 +0000 (+0000) Subject: 2007-01-29 Andreas Tobler X-Git-Tag: gc7_0alpha9~13 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=57e4914c3e8a5e7708e38de8e055043c5ce710ac;p=gc 2007-01-29 Andreas Tobler * darwin_stop_world.c: Clean up and reformat code. --- diff --git a/ChangeLog b/ChangeLog index 24d8ea87..fced1e2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-01-29 Andreas Tobler + + * darwin_stop_world.c: Clean up and reformat code. + 2007-01-28 Andreas Tobler * darwin_stop_world.c (GC_push_all_stacks): Fix compiler warnings. diff --git a/darwin_stop_world.c b/darwin_stop_world.c index 3fbf6bba..a2f09264 100644 --- a/darwin_stop_world.c +++ b/darwin_stop_world.c @@ -10,7 +10,7 @@ be allocated, is called the red zone. This area as shown in Figure 3-2 may be used for any purpose as long as a new stack frame does not need to be added to the stack." - + Page 50: "If a leaf procedure's red zone usage would exceed 224 bytes, then it must set up a stack frame just like routines that call other routines." */ @@ -22,7 +22,6 @@ # endif #endif - typedef struct StackFrame { unsigned long savedSP; unsigned long savedCR; @@ -31,9 +30,10 @@ typedef struct StackFrame { unsigned long savedRTOC; } StackFrame; -unsigned long FindTopOfStack(unsigned long stack_start) { +unsigned long FindTopOfStack(unsigned long stack_start) +{ StackFrame *frame; - + if (stack_start == 0) { # ifdef POWERPC # if CPP_WORDSZ == 32 @@ -50,27 +50,31 @@ unsigned long FindTopOfStack(unsigned long stack_start) { /* GC_printf("FindTopOfStack start at sp = %p\n", frame); */ # endif do { - if (frame->savedSP == 0) break; - /* if there are no more stack frames, stop */ + if (frame->savedSP == 0) + break; + /* if there are no more stack frames, stop */ frame = (StackFrame*)frame->savedSP; /* we do these next two checks after going to the next frame because the LR for the first stack frame in the loop is not set up on purpose, so we shouldn't check it. */ - if ((frame->savedLR & ~3) == 0) break; /* if the next LR is bogus, stop */ - if ((~(frame->savedLR) & ~3) == 0) break; /* ditto */ - } while (1); + if ((frame->savedLR & ~3) == 0) + break; /* if the next LR is bogus, stop */ + if ((~(frame->savedLR) & ~3) == 0) + break; /* ditto */ + } while (1); # ifdef DEBUG_THREADS /* GC_printf("FindTopOfStack finish at sp = %p\n", frame); */ # endif return (unsigned long)frame; -} +} #ifdef DARWIN_DONT_PARSE_STACK -void GC_push_all_stacks() { +void GC_push_all_stacks() +{ int i; kern_return_t r; GC_thread p; @@ -80,43 +84,40 @@ void GC_push_all_stacks() { /* MACHINE_THREAD_STATE_COUNT doesn't seem to be defined everywhere. */ /* Hence we use our own version. */ mach_msg_type_number_t thread_state_count = GC_MACH_THREAD_STATE_COUNT; - + me = pthread_self(); - if (!GC_thr_initialized) GC_thr_init(); - - for(i=0;inext) { - if(p -> flags & FINISHED) continue; - if(pthread_equal(p->id,me)) { + if (!GC_thr_initialized) + GC_thr_init(); + + for(i = 0; i < THREAD_TABLE_SZ; i++) { + for(p = GC_threads[i]; p != 0; p = p->next) { + if(p->flags & FINISHED) continue; + if(pthread_equal(p->id, me)) { lo = GC_approx_sp(); } else { /* Get the thread state (registers, etc) */ - r = thread_get_state( - p->stop_info.mach_thread, - GC_MACH_THREAD_STATE, - (natural_t*)&state, - &thread_state_count); + r = thread_get_state(p->stop_info.mach_thread, GC_MACH_THREAD_STATE, + (natural_t*)&state, &thread_state_count); # ifdef DEBUG_THREADS - GC_printf("thread_get_state return value = %d\n", r); + GC_printf("thread_get_state return value = %d\n", r); # endif - if(r != KERN_SUCCESS) ABORT("thread_get_state failed"); - + if(r != KERN_SUCCESS) + ABORT("thread_get_state failed"); + # if defined(I386) lo = (void*)state . THREAD_FLD (esp); - - GC_push_one(state . THREAD_FLD (eax)); - GC_push_one(state . THREAD_FLD (ebx)); - GC_push_one(state . THREAD_FLD (ecx)); - GC_push_one(state . THREAD_FLD (edx)); - GC_push_one(state . THREAD_FLD (edi)); - GC_push_one(state . THREAD_FLD (esi)); + GC_push_one(state . THREAD_FLD (eax)); + GC_push_one(state . THREAD_FLD (ebx)); + GC_push_one(state . THREAD_FLD (ecx)); + GC_push_one(state . THREAD_FLD (edx)); + GC_push_one(state . THREAD_FLD (edi)); + GC_push_one(state . THREAD_FLD (esi)); GC_push_one(state . THREAD_FLD (ebp)); # elif defined(X86_64) lo = (void*)state . THREAD_FLD (rsp); - GC_push_one(state . THREAD_FLD (rax)); GC_push_one(state . THREAD_FLD (rbx)); GC_push_one(state . THREAD_FLD (rcx)); @@ -141,37 +142,37 @@ void GC_push_all_stacks() { # elif defined(POWERPC) lo = (void*)(state . THREAD_FLD (r1) - PPC_RED_ZONE_SIZE); - - GC_push_one(state . THREAD_FLD (r0)); - GC_push_one(state . THREAD_FLD (r2)); - GC_push_one(state . THREAD_FLD (r3)); - GC_push_one(state . THREAD_FLD (r4)); - GC_push_one(state . THREAD_FLD (r5)); - GC_push_one(state . THREAD_FLD (r6)); - GC_push_one(state . THREAD_FLD (r7)); - GC_push_one(state . THREAD_FLD (r8)); - GC_push_one(state . THREAD_FLD (r9)); - GC_push_one(state . THREAD_FLD (r10)); - GC_push_one(state . THREAD_FLD (r11)); - GC_push_one(state . THREAD_FLD (r12)); - GC_push_one(state . THREAD_FLD (r13)); - GC_push_one(state . THREAD_FLD (r14)); - GC_push_one(state . THREAD_FLD (r15)); - GC_push_one(state . THREAD_FLD (r16)); - GC_push_one(state . THREAD_FLD (r17)); - GC_push_one(state . THREAD_FLD (r18)); - GC_push_one(state . THREAD_FLD (r19)); - GC_push_one(state . THREAD_FLD (r20)); - GC_push_one(state . THREAD_FLD (r21)); - GC_push_one(state . THREAD_FLD (r22)); - GC_push_one(state . THREAD_FLD (r23)); - GC_push_one(state . THREAD_FLD (r24)); - GC_push_one(state . THREAD_FLD (r25)); - GC_push_one(state . THREAD_FLD (r26)); - GC_push_one(state . THREAD_FLD (r27)); - GC_push_one(state . THREAD_FLD (r28)); - GC_push_one(state . THREAD_FLD (r29)); - GC_push_one(state . THREAD_FLD (r30)); + + GC_push_one(state . THREAD_FLD (r0)); + GC_push_one(state . THREAD_FLD (r2)); + GC_push_one(state . THREAD_FLD (r3)); + GC_push_one(state . THREAD_FLD (r4)); + GC_push_one(state . THREAD_FLD (r5)); + GC_push_one(state . THREAD_FLD (r6)); + GC_push_one(state . THREAD_FLD (r7)); + GC_push_one(state . THREAD_FLD (r8)); + GC_push_one(state . THREAD_FLD (r9)); + GC_push_one(state . THREAD_FLD (r10)); + GC_push_one(state . THREAD_FLD (r11)); + GC_push_one(state . THREAD_FLD (r12)); + GC_push_one(state . THREAD_FLD (r13)); + GC_push_one(state . THREAD_FLD (r14)); + GC_push_one(state . THREAD_FLD (r15)); + GC_push_one(state . THREAD_FLD (r16)); + GC_push_one(state . THREAD_FLD (r17)); + GC_push_one(state . THREAD_FLD (r18)); + GC_push_one(state . THREAD_FLD (r19)); + GC_push_one(state . THREAD_FLD (r20)); + GC_push_one(state . THREAD_FLD (r21)); + GC_push_one(state . THREAD_FLD (r22)); + GC_push_one(state . THREAD_FLD (r23)); + GC_push_one(state . THREAD_FLD (r24)); + GC_push_one(state . THREAD_FLD (r25)); + GC_push_one(state . THREAD_FLD (r26)); + GC_push_one(state . THREAD_FLD (r27)); + GC_push_one(state . THREAD_FLD (r28)); + GC_push_one(state . THREAD_FLD (r29)); + GC_push_one(state . THREAD_FLD (r30)); GC_push_one(state . THREAD_FLD (r31)); # else # error FIXME for non-x86 || ppc architectures @@ -183,115 +184,119 @@ void GC_push_all_stacks() { hi = p->stack_end; # if DEBUG_THREADS GC_printf("Darwin: Stack for thread 0x%lx = [%lx,%lx)\n", - (unsigned long) p -> id, - (unsigned long) lo, - (unsigned long) hi - ); + (unsigned long) p -> id, (unsigned long) lo, + (unsigned long) hi); # endif - GC_push_all_stack(lo,hi); + GC_push_all_stack(lo, hi); } /* for(p=GC_threads[i]...) */ } /* for(i=0;i