18d511e2aSJeff Roberson /*- 24d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3c4e20cadSPedro F. Giffuni * 48d511e2aSJeff Roberson * Copyright (c) 2005 Antoine Brodin 58d511e2aSJeff Roberson * All rights reserved. 68d511e2aSJeff Roberson * 78d511e2aSJeff Roberson * Redistribution and use in source and binary forms, with or without 88d511e2aSJeff Roberson * modification, are permitted provided that the following conditions 98d511e2aSJeff Roberson * are met: 108d511e2aSJeff Roberson * 1. Redistributions of source code must retain the above copyright 118d511e2aSJeff Roberson * notice, this list of conditions and the following disclaimer. 128d511e2aSJeff Roberson * 2. Redistributions in binary form must reproduce the above copyright 138d511e2aSJeff Roberson * notice, this list of conditions and the following disclaimer in the 148d511e2aSJeff Roberson * documentation and/or other materials provided with the distribution. 158d511e2aSJeff Roberson * 168d511e2aSJeff Roberson * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 178d511e2aSJeff Roberson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 188d511e2aSJeff Roberson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 198d511e2aSJeff Roberson * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 208d511e2aSJeff Roberson * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 218d511e2aSJeff Roberson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 228d511e2aSJeff Roberson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 238d511e2aSJeff Roberson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 248d511e2aSJeff Roberson * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 258d511e2aSJeff Roberson * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 268d511e2aSJeff Roberson * SUCH DAMAGE. 278d511e2aSJeff Roberson */ 288d511e2aSJeff Roberson 298d511e2aSJeff Roberson #ifndef _SYS_STACK_H_ 308d511e2aSJeff Roberson #define _SYS_STACK_H_ 318d511e2aSJeff Roberson 32047dd67eSAttilio Rao #include <sys/_stack.h> 338d511e2aSJeff Roberson 34dd902d01SGleb Smirnoff #ifdef _SYS_MALLOC_H_ 35dd902d01SGleb Smirnoff MALLOC_DECLARE(M_STACK); 36dd902d01SGleb Smirnoff #endif 37dd902d01SGleb Smirnoff 388d511e2aSJeff Roberson struct sbuf; 398d511e2aSJeff Roberson 40cd1c083dSPawel Biernacki enum stack_sbuf_fmt { 41cd1c083dSPawel Biernacki STACK_SBUF_FMT_NONE = 0, 42cd1c083dSPawel Biernacki STACK_SBUF_FMT_LONG = 1, 43cd1c083dSPawel Biernacki STACK_SBUF_FMT_COMPACT = 2, 44cd1c083dSPawel Biernacki }; 45cd1c083dSPawel Biernacki 468d511e2aSJeff Roberson /* MI Routines. */ 47f38c0c46SMark Johnston struct stack *stack_create(int); 488d511e2aSJeff Roberson void stack_destroy(struct stack *); 498d511e2aSJeff Roberson int stack_put(struct stack *, vm_offset_t); 50a2035830SPawel Jakub Dawidek void stack_copy(const struct stack *, struct stack *); 518d511e2aSJeff Roberson void stack_zero(struct stack *); 52a2035830SPawel Jakub Dawidek void stack_print(const struct stack *); 53a2035830SPawel Jakub Dawidek void stack_print_ddb(const struct stack *); 54a2035830SPawel Jakub Dawidek void stack_print_short(const struct stack *); 55a2035830SPawel Jakub Dawidek void stack_print_short_ddb(const struct stack *); 56a2035830SPawel Jakub Dawidek void stack_sbuf_print(struct sbuf *, const struct stack *); 57a2035830SPawel Jakub Dawidek void stack_sbuf_print_ddb(struct sbuf *, const struct stack *); 58d158fa4aSConrad Meyer int stack_sbuf_print_flags(struct sbuf *, const struct stack *, 59cd1c083dSPawel Biernacki int, enum stack_sbuf_fmt); 608d511e2aSJeff Roberson #ifdef KTR 61a2035830SPawel Jakub Dawidek void stack_ktr(u_int, const char *, int, const struct stack *, 6254533f66SConrad Meyer u_int); 6354533f66SConrad Meyer #define CTRSTACK(m, st, depth) do { \ 648d511e2aSJeff Roberson if (KTR_COMPILE & (m)) \ 6554533f66SConrad Meyer stack_ktr((m), __FILE__, __LINE__, st, depth); \ 668d511e2aSJeff Roberson } while (0) 678d511e2aSJeff Roberson #else 6854533f66SConrad Meyer #define CTRSTACK(m, st, depth) 698d511e2aSJeff Roberson #endif 708d511e2aSJeff Roberson 71610141ceSMark Johnston /* MD Routines. */ 723c90d1eaSRobert Watson struct thread; 738d511e2aSJeff Roberson void stack_save(struct stack *); 741c29da02SMark Johnston int stack_save_td(struct stack *, struct thread *); 758d511e2aSJeff Roberson 768d511e2aSJeff Roberson #endif 77