From: Nicholas Nethercote Date: Sun, 14 Aug 2005 04:12:40 +0000 (+0000) Subject: Partially evaluate m_stacks.c to simplify and shrink it a bit. X-Git-Tag: svn/VALGRIND_3_1_0~616 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af9076526380a691486dc0f77cf2f40e0c0eebb7;p=thirdparty%2Fvalgrind.git Partially evaluate m_stacks.c to simplify and shrink it a bit. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4402 --- diff --git a/coregrind/m_stacks.c b/coregrind/m_stacks.c index 6bda9bbba9..506aa192cd 100644 --- a/coregrind/m_stacks.c +++ b/coregrind/m_stacks.c @@ -95,52 +95,19 @@ static UWord next_id; /* Next id we hand out to a newly registered stack */ * stack pointer falls outside the range of the current stack, we search * the stacks list above for a matching stack. */ -static Addr current_stack_start; -static Addr current_stack_end; -static UWord current_stack_id; - -/* Search for a particular stack by id number. */ -static Bool find_stack_by_id(UWord id, Addr *start, Addr *end) -{ - Stack *i = stacks; - while(i) { - if(i->id == id) { - *start = i->start; - *end = i->end; - return True; - } - i = i->next; - } - return False; -} +static Stack current_stack; /* Find what stack an address falls into. */ -static Bool find_stack_by_addr(Addr sp, Addr *start, Addr *end, UWord *id) +static Stack* find_stack_by_addr(Addr sp) { Stack *i = stacks; - while(i) { - if(sp >= i->start && sp <= i->end) { - *start = i->start; - *end = i->end; - *id = i->id; - return True; + while (i) { + if (sp >= i->start && sp <= i->end) { + return i; } i = i->next; } - return False; -} - -/* Change over to a new stack. */ -static Bool set_current_stack(UWord id) -{ - Addr start, end; - if (find_stack_by_id(id, &start, &end)) { - current_stack_id = id; - current_stack_start = start; - current_stack_end = end; - return True; - } - return False; + return NULL; } /* @@ -164,8 +131,8 @@ UWord VG_(register_stack)(Addr start, Addr end) i->next = stacks; stacks = i; - if(i->id == 0) { - set_current_stack(i->id); + if (i->id == 0) { + current_stack = *i; } return i->id; @@ -180,7 +147,7 @@ void VG_(deregister_stack)(UWord id) Stack *i = stacks; Stack *prev = NULL; - if(current_stack_id == id) { + if (current_stack.id == id) { return; } @@ -208,12 +175,12 @@ void VG_(change_stack)(UWord id, Addr start, Addr end) { Stack *i = stacks; - if (id == current_stack_id) { - current_stack_start = start; - current_stack_end = end; + if (id == current_stack.id) { + current_stack.start = start; + current_stack.end = end; } - while(i) { + while (i) { if (i->id == id) { i->start = start; i->end = end; @@ -234,14 +201,12 @@ void VG_(unknown_SP_update)( Addr old_SP, Addr new_SP ) Word delta = (Word)new_SP - (Word)old_SP; /* Check if the stack pointer is still in the same stack as before. */ - if (new_SP < current_stack_start || new_SP > current_stack_end) { - Addr start, end; - UWord new_id; - Bool found = find_stack_by_addr(new_SP, &start, &end, &new_id); - if (found && new_id != current_stack_id) { + if (new_SP < current_stack.start || new_SP > current_stack.end) { + Stack* new_stack = find_stack_by_addr(new_SP); + if (new_stack && new_stack->id != current_stack.id) { /* The stack pointer is now in another stack. Update the current stack information and return without doing anything else. */ - set_current_stack(new_id); + current_stack = *new_stack; return; } }