18d511e2aSJeff Roberson /*- 28d511e2aSJeff Roberson * Copyright (c) 2005 Antoine Brodin 38d511e2aSJeff Roberson * All rights reserved. 48d511e2aSJeff Roberson * 58d511e2aSJeff Roberson * Redistribution and use in source and binary forms, with or without 68d511e2aSJeff Roberson * modification, are permitted provided that the following conditions 78d511e2aSJeff Roberson * are met: 88d511e2aSJeff Roberson * 1. Redistributions of source code must retain the above copyright 98d511e2aSJeff Roberson * notice, this list of conditions and the following disclaimer. 108d511e2aSJeff Roberson * 2. Redistributions in binary form must reproduce the above copyright 118d511e2aSJeff Roberson * notice, this list of conditions and the following disclaimer in the 128d511e2aSJeff Roberson * documentation and/or other materials provided with the distribution. 138d511e2aSJeff Roberson * 148d511e2aSJeff Roberson * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 158d511e2aSJeff Roberson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 168d511e2aSJeff Roberson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 178d511e2aSJeff Roberson * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 188d511e2aSJeff Roberson * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 198d511e2aSJeff Roberson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 208d511e2aSJeff Roberson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 218d511e2aSJeff Roberson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 228d511e2aSJeff Roberson * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 238d511e2aSJeff Roberson * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 248d511e2aSJeff Roberson * SUCH DAMAGE. 258d511e2aSJeff Roberson * 268d511e2aSJeff Roberson * $FreeBSD$ 278d511e2aSJeff Roberson */ 288d511e2aSJeff Roberson 298d511e2aSJeff Roberson #ifndef _SYS_STACK_H_ 308d511e2aSJeff Roberson #define _SYS_STACK_H_ 318d511e2aSJeff Roberson 328d511e2aSJeff Roberson #define STACK_MAX 18 /* Don't change, stack_ktr relies on this. */ 338d511e2aSJeff Roberson 348d511e2aSJeff Roberson struct sbuf; 358d511e2aSJeff Roberson 368d511e2aSJeff Roberson struct stack { 378d511e2aSJeff Roberson int depth; 388d511e2aSJeff Roberson vm_offset_t pcs[STACK_MAX]; 398d511e2aSJeff Roberson }; 408d511e2aSJeff Roberson 418d511e2aSJeff Roberson /* MI Routines. */ 428d511e2aSJeff Roberson struct stack *stack_create(void); 438d511e2aSJeff Roberson void stack_destroy(struct stack *); 448d511e2aSJeff Roberson int stack_put(struct stack *, vm_offset_t); 458d511e2aSJeff Roberson void stack_copy(struct stack *, struct stack *); 468d511e2aSJeff Roberson void stack_zero(struct stack *); 478d511e2aSJeff Roberson void stack_print(struct stack *); 489ccca7d1SRobert Watson void stack_print_ddb(struct stack *); 498d511e2aSJeff Roberson void stack_sbuf_print(struct sbuf *, struct stack *); 509ccca7d1SRobert Watson void stack_sbuf_print_ddb(struct sbuf *, struct stack *); 518d511e2aSJeff Roberson #ifdef KTR 52e37a4994SPawel Jakub Dawidek void stack_ktr(u_int, const char *, int, struct stack *, u_int, int); 53e37a4994SPawel Jakub Dawidek #define CTRSTACK(m, st, depth, cheap) do { \ 548d511e2aSJeff Roberson if (KTR_COMPILE & (m)) \ 55e37a4994SPawel Jakub Dawidek stack_ktr((m), __FILE__, __LINE__, st, depth, cheap); \ 568d511e2aSJeff Roberson } while(0) 578d511e2aSJeff Roberson #else 58e37a4994SPawel Jakub Dawidek #define CTRSTACK(m, st, depth, cheap) 598d511e2aSJeff Roberson #endif 608d511e2aSJeff Roberson 618d511e2aSJeff Roberson /* MD Routine. */ 623c90d1eaSRobert Watson struct thread; 638d511e2aSJeff Roberson void stack_save(struct stack *); 643c90d1eaSRobert Watson void stack_save_td(struct stack *, struct thread *); 658d511e2aSJeff Roberson 668d511e2aSJeff Roberson #endif 67