18d511e2aSJeff Roberson /*- 2c4e20cadSPedro F. Giffuni * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 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 * $FreeBSD$ 298d511e2aSJeff Roberson */ 308d511e2aSJeff Roberson 318d511e2aSJeff Roberson #ifndef _SYS_STACK_H_ 328d511e2aSJeff Roberson #define _SYS_STACK_H_ 338d511e2aSJeff Roberson 34047dd67eSAttilio Rao #include <sys/_stack.h> 358d511e2aSJeff Roberson 368d511e2aSJeff Roberson struct sbuf; 378d511e2aSJeff Roberson 388d511e2aSJeff Roberson /* MI Routines. */ 39f38c0c46SMark Johnston struct stack *stack_create(int); 408d511e2aSJeff Roberson void stack_destroy(struct stack *); 418d511e2aSJeff Roberson int stack_put(struct stack *, vm_offset_t); 42a2035830SPawel Jakub Dawidek void stack_copy(const struct stack *, struct stack *); 438d511e2aSJeff Roberson void stack_zero(struct stack *); 44a2035830SPawel Jakub Dawidek void stack_print(const struct stack *); 45a2035830SPawel Jakub Dawidek void stack_print_ddb(const struct stack *); 46a2035830SPawel Jakub Dawidek void stack_print_short(const struct stack *); 47a2035830SPawel Jakub Dawidek void stack_print_short_ddb(const struct stack *); 48a2035830SPawel Jakub Dawidek void stack_sbuf_print(struct sbuf *, const struct stack *); 49a2035830SPawel Jakub Dawidek void stack_sbuf_print_ddb(struct sbuf *, const struct stack *); 508d511e2aSJeff Roberson #ifdef KTR 51a2035830SPawel Jakub Dawidek void stack_ktr(u_int, const char *, int, const struct stack *, 52a2035830SPawel Jakub Dawidek 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 61610141ceSMark Johnston /* MD Routines. */ 623c90d1eaSRobert Watson struct thread; 638d511e2aSJeff Roberson void stack_save(struct stack *); 643c90d1eaSRobert Watson void stack_save_td(struct stack *, struct thread *); 65610141ceSMark Johnston int stack_save_td_running(struct stack *, struct thread *); 668d511e2aSJeff Roberson 678d511e2aSJeff Roberson #endif 68