- Improve the INKERNEL macro such that it can no longer give false positives.

This fixes the stack(9) functionality.

Submitted by:	Antoine Brodin <antoine.brodin@laposte.net>
This commit is contained in:
Jeff Roberson 2005-12-23 21:33:55 +00:00
parent 49bdcff518
commit 660002d398
2 changed files with 11 additions and 2 deletions

View File

@ -180,7 +180,7 @@ db_ss(struct db_variable *vp, db_expr_t *valuep, int op)
* Stack trace.
*/
#define INKERNEL(va) (((va) >= DMAP_MIN_ADDRESS && (va) < DMAP_MAX_ADDRESS) \
|| (va) >= KERNBASE)
|| ((va) >= KERNBASE && (va) < VM_MAX_KERNEL_ADDRESS))
struct amd64_frame {
struct amd64_frame *f_frame;
@ -515,6 +515,10 @@ stack_save(struct stack *st)
break;
if (stack_put(st, callpc) == -1)
break;
if (frame->f_frame <= frame ||
(vm_offset_t)frame->f_frame >=
(vm_offset_t)rbp + KSTACK_PAGES * PAGE_SIZE)
break;
frame = frame->f_frame;
}
}

View File

@ -168,7 +168,8 @@ db_ss(struct db_variable *vp, db_expr_t *valuep, int op)
/*
* Stack trace.
*/
#define INKERNEL(va) (((vm_offset_t)(va)) >= USRSTACK)
#define INKERNEL(va) (((vm_offset_t)(va)) >= USRSTACK && \
((vm_offset_t)(va)) < VM_MAX_KERNEL_ADDRESS)
struct i386_frame {
struct i386_frame *f_frame;
@ -525,6 +526,10 @@ stack_save(struct stack *st)
break;
if (stack_put(st, callpc) == -1)
break;
if (frame->f_frame <= frame ||
(vm_offset_t)frame->f_frame >=
(vm_offset_t)ebp + KSTACK_PAGES * PAGE_SIZE)
break;
frame = frame->f_frame;
}
}