xref: /illumos-gate/usr/src/common/core/core_shstrtab.h (revision 8e458de0baeb1fee50643403223bc7e909a48464)
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