1 /*
2  * Copyright (c) 2024 Meta Platforms
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef ZEPHYR_INCLUDE_DEBUG_SYMTAB_H_
8 #define ZEPHYR_INCLUDE_DEBUG_SYMTAB_H_
9 
10 #include <stdint.h>
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 /**
17  * @defgroup symtab_apis Symbol Table API
18  * @ingroup os_services
19  * @{
20  */
21 
22 /**
23  * @cond INTERNAL_HIDDEN
24  */
25 
26 struct z_symtab_entry {
27 	const uint32_t offset;
28 	const char *const name;
29 };
30 
31 /**
32  * INTERNAL_HIDDEN @endcond
33  */
34 
35 struct symtab_info {
36 	/* Absolute address of the first symbol */
37 	const uintptr_t first_addr;
38 	/* Number of symbol entries */
39 	const uint32_t length;
40 	/* Symbol entries */
41 	const struct z_symtab_entry *const entries;
42 };
43 
44 /**
45  * @brief Get the pointer to the symbol table.
46  *
47  * @return Pointer to the symbol table.
48  */
49 const struct symtab_info *const symtab_get(void);
50 
51 /**
52  * @brief Find the symbol name with a binary search
53  *
54  * @param[in] addr Address of the symbol to find
55  * @param[out] offset Offset of the symbol from the nearest symbol. If the symbol can't be found,
56  * this will be 0.
57  *
58  * @return Name of the nearest symbol if found, otherwise "?" is returned.
59  */
60 const char *const symtab_find_symbol_name(uintptr_t addr, uint32_t *offset);
61 
62 /**
63  * @}
64  */
65 
66 #ifdef __cplusplus
67 }
68 #endif
69 
70 #endif /* ZEPHYR_INCLUDE_DEBUG_SYMTAB_H_ */
71