18b8e2e8fSDmitry Chagin /*- 28b8e2e8fSDmitry Chagin * SPDX-License-Identifier: BSD-3-Clause 38b8e2e8fSDmitry Chagin * 48b8e2e8fSDmitry Chagin * Copyright (c) 1988, 1993 58b8e2e8fSDmitry Chagin * The Regents of the University of California. All rights reserved. 68b8e2e8fSDmitry Chagin * 78b8e2e8fSDmitry Chagin * Redistribution and use in source and binary forms, with or without 88b8e2e8fSDmitry Chagin * modification, are permitted provided that the following conditions 98b8e2e8fSDmitry Chagin * are met: 108b8e2e8fSDmitry Chagin * 1. Redistributions of source code must retain the above copyright 118b8e2e8fSDmitry Chagin * notice, this list of conditions and the following disclaimer. 128b8e2e8fSDmitry Chagin * 2. Redistributions in binary form must reproduce the above copyright 138b8e2e8fSDmitry Chagin * notice, this list of conditions and the following disclaimer in the 148b8e2e8fSDmitry Chagin * documentation and/or other materials provided with the distribution. 158b8e2e8fSDmitry Chagin * 3. Neither the name of the University nor the names of its contributors 168b8e2e8fSDmitry Chagin * may be used to endorse or promote products derived from this software 178b8e2e8fSDmitry Chagin * without specific prior written permission. 188b8e2e8fSDmitry Chagin * 198b8e2e8fSDmitry Chagin * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 208b8e2e8fSDmitry Chagin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 218b8e2e8fSDmitry Chagin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 228b8e2e8fSDmitry Chagin * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 238b8e2e8fSDmitry Chagin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 248b8e2e8fSDmitry Chagin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 258b8e2e8fSDmitry Chagin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 268b8e2e8fSDmitry Chagin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 278b8e2e8fSDmitry Chagin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 288b8e2e8fSDmitry Chagin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 298b8e2e8fSDmitry Chagin * SUCH DAMAGE. 308b8e2e8fSDmitry Chagin */ 318b8e2e8fSDmitry Chagin 328b8e2e8fSDmitry Chagin #ifndef __KDUMP_H__ 338b8e2e8fSDmitry Chagin #define __KDUMP_H__ 348b8e2e8fSDmitry Chagin 358b8e2e8fSDmitry Chagin extern bool decimal, fancy, resolv; 368b8e2e8fSDmitry Chagin 37*c2c9ac88SDmitry Chagin #define _print_number64(first,i,n,c,d) do { \ 388b8e2e8fSDmitry Chagin uint64_t __v; \ 398b8e2e8fSDmitry Chagin \ 408b8e2e8fSDmitry Chagin if (quad_align && (((ptrdiff_t)((i) - (first))) & 1) == 1) { \ 418b8e2e8fSDmitry Chagin (i)++; \ 428b8e2e8fSDmitry Chagin (n)--; \ 438b8e2e8fSDmitry Chagin } \ 448b8e2e8fSDmitry Chagin if (quad_slots == 2) \ 458b8e2e8fSDmitry Chagin __v = (uint64_t)(uint32_t)(i)[0] | \ 468b8e2e8fSDmitry Chagin ((uint64_t)(uint32_t)(i)[1]) << 32; \ 478b8e2e8fSDmitry Chagin else \ 488b8e2e8fSDmitry Chagin __v = (uint64_t)*(i); \ 49*c2c9ac88SDmitry Chagin if (d) \ 508b8e2e8fSDmitry Chagin printf("%c%jd", (c), (intmax_t)__v); \ 518b8e2e8fSDmitry Chagin else \ 528b8e2e8fSDmitry Chagin printf("%c%#jx", (c), (uintmax_t)__v); \ 538b8e2e8fSDmitry Chagin (i) += quad_slots; \ 548b8e2e8fSDmitry Chagin (n) -= quad_slots; \ 558b8e2e8fSDmitry Chagin (c) = ','; \ 568b8e2e8fSDmitry Chagin } while (0) 578b8e2e8fSDmitry Chagin 58*c2c9ac88SDmitry Chagin #define _print_number(i,n,c,d) do { \ 59*c2c9ac88SDmitry Chagin if (d) \ 608b8e2e8fSDmitry Chagin printf("%c%jd", c, (intmax_t)*i); \ 618b8e2e8fSDmitry Chagin else \ 628b8e2e8fSDmitry Chagin printf("%c%#jx", c, (uintmax_t)(u_register_t)*i); \ 638b8e2e8fSDmitry Chagin i++; \ 648b8e2e8fSDmitry Chagin n--; \ 658b8e2e8fSDmitry Chagin c = ','; \ 668b8e2e8fSDmitry Chagin } while (0) 678b8e2e8fSDmitry Chagin 68*c2c9ac88SDmitry Chagin #define print_number(i,n,c) _print_number(i,n,c,decimal) 69*c2c9ac88SDmitry Chagin #define print_decimal_number(i,n,c) _print_number(i,n,c,true) 70*c2c9ac88SDmitry Chagin #define print_number64(first,i,n,c) _print_number64(first,i,n,c,decimal) 71*c2c9ac88SDmitry Chagin #define print_decimal_number64(first,i,n,c) _print_number64(first,i,n,c,true) 72*c2c9ac88SDmitry Chagin 73ed2f123aSDmitry Chagin void decode_filemode(int value); 748b8e2e8fSDmitry Chagin void print_integer_arg(const char *(*decoder)(int), int value); 758b8e2e8fSDmitry Chagin void print_integer_arg_valid(const char *(*decoder)(int), int value); 768b8e2e8fSDmitry Chagin void print_mask_arg(bool (*decoder)(FILE *, int, int *), int value); 778b8e2e8fSDmitry Chagin void print_mask_arg0(bool (*decoder)(FILE *, int, int *), int value); 788b8e2e8fSDmitry Chagin void print_mask_arg32(bool (*decoder)(FILE *, uint32_t, uint32_t *), 798b8e2e8fSDmitry Chagin uint32_t value); 808b8e2e8fSDmitry Chagin void print_mask_argul(bool (*decoder)(FILE *, u_long, u_long *), 818b8e2e8fSDmitry Chagin u_long value); 828b8e2e8fSDmitry Chagin bool print_mask_arg_part(bool (*decoder)(FILE *, int, int *), 838b8e2e8fSDmitry Chagin int value, int *rem); 848b8e2e8fSDmitry Chagin 858a0f6d8cSDmitry Chagin #ifdef SYSDECODE_HAVE_LINUX 863606a213SDmitry Chagin bool ktrstruct_linux(const char *name, const char *data, size_t datalen); 878a0f6d8cSDmitry Chagin void ktrsyscall_linux(struct ktr_syscall *ktr, register_t **resip, 888a0f6d8cSDmitry Chagin int *resnarg, char *resc); 898a0f6d8cSDmitry Chagin #ifdef __amd64__ 908a0f6d8cSDmitry Chagin void ktrsyscall_linux32(struct ktr_syscall *ktr, register_t **resip, 918a0f6d8cSDmitry Chagin int *resnarg, char *resc); 928a0f6d8cSDmitry Chagin #endif 938a0f6d8cSDmitry Chagin #endif /* SYSDECODE_HAVE_LINUX */ 948a0f6d8cSDmitry Chagin 958b8e2e8fSDmitry Chagin #endif /* !__KDUMP_H__ */ 96