@@ -67,17 +67,29 @@ typedef MEMFAULT_PACKED_STRUCT MfltTraceReasonBlock {
6767
6868#define MEMFAULT_MACHINE_TYPE_SUBTYPE_OFFSET 16
6969
70+ //! ESP32
7071#define MEMFAULT_MACHINE_TYPE_XTENSA 94
7172
73+ //! ESP8266
7274#define MEMFAULT_MACHINE_TYPE_XTENSA_LX106 \
7375 ((1 << MEMFAULT_MACHINE_TYPE_SUBTYPE_OFFSET) | MEMFAULT_MACHINE_TYPE_XTENSA)
7476
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 {
7686 kMfltCoredumpMachineType_None = 0 ,
7787 kMfltCoredumpMachineType_ARM = 40 ,
7888 kMfltCoredumpMachineType_Aarch64 = 183 ,
7989 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 ,
8193} eMfltCoredumpMachineType ;
8294
8395typedef MEMFAULT_PACKED_STRUCT MfltMachineTypeBlock {
@@ -220,23 +232,30 @@ static eMfltCoredumpBlockType prv_region_type_to_storage_type(eMfltCoredumpRegio
220232}
221233
222234static eMfltCoredumpMachineType prv_get_machine_type (void ) {
235+ return
223236#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
225255#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"
239257#endif
258+ ;
240259}
241260
242261static bool prv_write_device_info_blocks (sMfltCoredumpWriteCtx * ctx ) {
0 commit comments