1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 14 * Use is subject to license terms. 15 */ 16 17 /* 18 * Copyright 2021 Oxide Computer Company 19 */ 20 21 #ifndef _CORE_SHSTRTAB_H 22 #define _CORE_SHSTRTAB_H 23 24 /* 25 * This header contains common definitions that are used to generate a 26 * shstrtab_t for core files. This is used by libproc and the kernel to generate 27 * core files in a similar way. 28 */ 29 30 #include <sys/list.h> 31 #include <sys/stdint.h> 32 #include <sys/elf.h> 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 typedef enum { 39 STR_NONE, 40 STR_CTF, 41 STR_SYMTAB, 42 STR_DYNSYM, 43 STR_STRTAB, 44 STR_DYNSTR, 45 STR_SHSTRTAB, 46 STR_NUM 47 } shstrtype_t; 48 49 extern const char *shstrtab_data[STR_NUM]; 50 51 typedef struct shstrtab_ent { 52 list_node_t sste_link; 53 char *sste_name; 54 size_t sste_len; 55 uint32_t sste_offset; 56 } shstrtab_ent_t; 57 58 typedef struct shstrtab { 59 list_t sst_names; 60 uint32_t sst_len; 61 } shstrtab_t; 62 63 extern boolean_t shstrtab_init(shstrtab_t *s); 64 extern boolean_t shstrtab_ndx(shstrtab_t *, const char *, Elf32_Word *); 65 extern void shstrtab_fini(shstrtab_t *); 66 extern size_t shstrtab_size(const shstrtab_t *); 67 extern void shstrtab_dump(shstrtab_t *, void *); 68 69 #ifdef __cplusplus 70 } 71 #endif 72 73 #endif /* _CORE_SHSTRTAB_H */ 74