1 // Copyright 2017 Espressif Systems (Shanghai) PTE LTD
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 #ifndef ESP_DBG_STUBS_H_
15 #define ESP_DBG_STUBS_H_
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 #include "esp_err.h"
22 
23 /**
24  * Debug stubs entries IDs
25  */
26 typedef enum {
27     ESP_DBG_STUB_MAGIC_NUM,
28     ESP_DBG_STUB_TABLE_SIZE,
29     ESP_DBG_STUB_CONTROL_DATA,   ///< stubs descriptor entry
30     ESP_DBG_STUB_ENTRY_FIRST,
31     ESP_DBG_STUB_ENTRY_GCOV	///< GCOV entry
32         = ESP_DBG_STUB_ENTRY_FIRST,
33     ESP_DBG_STUB_ENTRY_CAPABILITIES,
34     ESP_DBG_STUB_ENTRY_MAX
35 } esp_dbg_stub_id_t;
36 
37 #define ESP_DBG_STUB_MAGIC_NUM_VAL      0xFEEDBEEF
38 #define ESP_DBG_STUB_CAP_GCOV_TASK      (1 << 0)
39 
40 /**
41  * @brief  Initializes debug stubs.
42  *
43  * @note   Must be called after esp_apptrace_init() if app tracing is enabled.
44  */
45 void esp_dbg_stubs_init(void);
46 
47 /**
48  * @brief  Initializes application tracing module.
49  *
50  * @note   Should be called before any esp_apptrace_xxx call.
51  *
52  * @param id 	Stub ID.
53  * @param entry Stub entry. Usually it is stub entry function address,
54  *              but can be any value meaningfull for OpenOCD command/code
55  *              such as capabilities
56  * @return ESP_OK on success, otherwise see esp_err_t
57  */
58 esp_err_t esp_dbg_stub_entry_set(esp_dbg_stub_id_t id, uint32_t entry);
59 
60 /**
61  * @brief   Retrives the corresponding stub entry
62  *
63  * @param id 	Stub ID.
64  * @param entry Stub entry. Usually it is stub entry function address,
65  *              but can be any value meaningfull for OpenOCD command/code
66  *              such as capabilities
67  *
68  * @return ESP_OK on success, otherwise see esp_err_t
69  */
70 esp_err_t esp_dbg_stub_entry_get(esp_dbg_stub_id_t id, uint32_t *entry);
71 
72 #ifdef __cplusplus
73 }
74 #endif
75 
76 #endif //ESP_DBG_STUBS_H_
77