@@ -67,17 +67,29 @@ typedef MEMFAULT_PACKED_STRUCT MfltTraceReasonBlock {
67
67
68
68
#define MEMFAULT_MACHINE_TYPE_SUBTYPE_OFFSET 16
69
69
70
+ //! ESP32
70
71
#define MEMFAULT_MACHINE_TYPE_XTENSA 94
71
72
73
+ //! ESP8266
72
74
#define MEMFAULT_MACHINE_TYPE_XTENSA_LX106 \
73
75
((1 << MEMFAULT_MACHINE_TYPE_SUBTYPE_OFFSET) | MEMFAULT_MACHINE_TYPE_XTENSA)
74
76
75
- typedef enum MfltCoredumpMachineType {
77
+ //! ESP32-S2
78
+ #define MEMFAULT_MACHINE_TYPE_XTENSA_LX7 \
79
+ ((2 << MEMFAULT_MACHINE_TYPE_SUBTYPE_OFFSET) | MEMFAULT_MACHINE_TYPE_XTENSA)
80
+
81
+ //! ESP32-S3
82
+ #define MEMFAULT_MACHINE_TYPE_XTENSA_LX7_DUAL \
83
+ ((3 << MEMFAULT_MACHINE_TYPE_SUBTYPE_OFFSET) | MEMFAULT_MACHINE_TYPE_XTENSA)
84
+
85
+ typedef enum MfltCoredumpMachineType {
76
86
kMfltCoredumpMachineType_None = 0 ,
77
87
kMfltCoredumpMachineType_ARM = 40 ,
78
88
kMfltCoredumpMachineType_Aarch64 = 183 ,
79
89
kMfltCoredumpMachineType_Xtensa = MEMFAULT_MACHINE_TYPE_XTENSA ,
80
- kMfltCoredumpMachineType_XtensaLx106 = MEMFAULT_MACHINE_TYPE_XTENSA_LX106
90
+ kMfltCoredumpMachineType_XtensaLx106 = MEMFAULT_MACHINE_TYPE_XTENSA_LX106 ,
91
+ kMfltCoredumpMachineType_XtensaLx7 = MEMFAULT_MACHINE_TYPE_XTENSA_LX7 ,
92
+ kMfltCoredumpMachineType_XtensaLx7Dual = MEMFAULT_MACHINE_TYPE_XTENSA_LX7_DUAL ,
81
93
} eMfltCoredumpMachineType ;
82
94
83
95
typedef MEMFAULT_PACKED_STRUCT MfltMachineTypeBlock {
@@ -220,23 +232,30 @@ static eMfltCoredumpBlockType prv_region_type_to_storage_type(eMfltCoredumpRegio
220
232
}
221
233
222
234
static eMfltCoredumpMachineType prv_get_machine_type (void ) {
235
+ return
223
236
#if defined(MEMFAULT_UNITTEST )
224
- return kMfltCoredumpMachineType_None ;
237
+ kMfltCoredumpMachineType_None
238
+ #elif MEMFAULT_COMPILER_ARM
239
+ kMfltCoredumpMachineType_ARM
240
+ #elif defined(__aarch64__ )
241
+ kMfltCoredumpMachineType_Aarch64
242
+ #elif defined(__XTENSA__ ) && defined(__XTENSA_WINDOWED_ABI__ ) && defined(__XTENSA_SOFT_FLOAT__ )
243
+ // ESP32-S2 has this unique compiler-defined symbol
244
+ kMfltCoredumpMachineType_XtensaLx7
245
+ #elif defined(__XTENSA__ ) && defined(__XTENSA_WINDOWED_ABI__ ) && defined(CONFIG_IDF_TARGET_ESP32S3 )
246
+ // rely on Kconfig provided flag for ESP32-S3; compiler defined symbols are identical to ESP32.
247
+ // ❯ diff -duw <(xtensa-esp32-elf-gcc -dM -E - < /dev/null) <(xtensa-esp32s3-elf-gcc -dM -E - < /dev/null)
248
+ kMfltCoredumpMachineType_XtensaLx7Dual
249
+ #elif defined(__XTENSA__ ) && defined(__XTENSA_WINDOWED_ABI__ )
250
+ // default xtensa windowed target is vanilla ESP32
251
+ kMfltCoredumpMachineType_Xtensa
252
+ #elif defined(__XTENSA__ )
253
+ // finally, ESP8266
254
+ kMfltCoredumpMachineType_XtensaLx106
225
255
#else
226
- # if MEMFAULT_COMPILER_ARM
227
- return kMfltCoredumpMachineType_ARM ;
228
- # elif defined(__aarch64__ )
229
- return kMfltCoredumpMachineType_Aarch64 ;
230
- # elif defined(__XTENSA__ )
231
- # if defined(__XTENSA_WINDOWED_ABI__ )
232
- return kMfltCoredumpMachineType_Xtensa ;
233
- # else
234
- return kMfltCoredumpMachineType_XtensaLx106 ;
235
- # endif
236
- # else
237
- # error "Coredumps are not supported for target architecture"
238
- # endif
256
+ #error "Coredumps are not supported for target architecture"
239
257
#endif
258
+ ;
240
259
}
241
260
242
261
static bool prv_write_device_info_blocks (sMfltCoredumpWriteCtx * ctx ) {
0 commit comments