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