]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Partially evaluate m_stacks.c to simplify and shrink it a bit.
authorNicholas Nethercote <njn@valgrind.org>
Sun, 14 Aug 2005 04:12:40 +0000 (04:12 +0000)
committerNicholas Nethercote <njn@valgrind.org>
Sun, 14 Aug 2005 04:12:40 +0000 (04:12 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4402

coregrind/m_stacks.c

index 6bda9bbba9af82cd5b77ff7a987dfb5db964c3b6..506aa192cda452e941dd73b1a490d4ddab208545 100644 (file)
@@ -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;
       }
    }