Просмотр исходного кода

Merge branch 'bugfix/xtensa_extra_info_register_values_v4.1' into 'release/v4.1'

espcoredump.py: Parse EPS and EPC register values using register index (v4.1)

See merge request espressif/esp-idf!14566
Roland Dobai 4 лет назад
Родитель
Сommit
b962a91ad4
1 измененных файлов с 23 добавлено и 26 удалено
  1. 23 26
      components/espcoredump/espcoredump.py

+ 23 - 26
components/espcoredump/espcoredump.py

@@ -328,19 +328,19 @@ class ESPCoreDumpElfFile(esptool.ELFFile):
     # extra regs IDs used in EXTRA_INFO note
     REG_EXCCAUSE_IDX    = 0
     REG_EXCVADDR_IDX    = 1
-    REG_EPS2_IDX        = 2
-    REG_EPS3_IDX        = 3
-    REG_EPS4_IDX        = 4
-    REG_EPS5_IDX        = 5
-    REG_EPS6_IDX        = 6
-    REG_EPS7_IDX        = 7
-    REG_EPC1_IDX        = 8
-    REG_EPC2_IDX        = 9
-    REG_EPC3_IDX        = 10
-    REG_EPC4_IDX        = 11
-    REG_EPC5_IDX        = 12
-    REG_EPC6_IDX        = 13
-    REG_EPC7_IDX        = 14
+    REG_EPC1_IDX        = 177
+    REG_EPC2_IDX        = 178
+    REG_EPC3_IDX        = 179
+    REG_EPC4_IDX        = 180
+    REG_EPC5_IDX        = 181
+    REG_EPC6_IDX        = 182
+    REG_EPC7_IDX        = 183
+    REG_EPS2_IDX        = 194
+    REG_EPS3_IDX        = 195
+    REG_EPS4_IDX        = 196
+    REG_EPS5_IDX        = 197
+    REG_EPS6_IDX        = 198
+    REG_EPS7_IDX        = 199
     # ELF file type
     ET_NONE             = 0x0  # No file type
     ET_REL              = 0x1  # Relocatable file
@@ -1596,19 +1596,16 @@ def info_corefile(args):
             exccause_str = ("Invalid EXCCAUSE code", "Invalid EXCAUSE description or not found.")
         print("exccause       0x%x (%s)" % (exccause, exccause_str[0]))
         print("excvaddr       0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EXCVADDR_IDX + 1])
-        print("epc1           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPC1_IDX + 1])
-        print("epc2           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPC2_IDX + 1])
-        print("epc3           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPC3_IDX + 1])
-        print("epc4           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPC4_IDX + 1])
-        print("epc5           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPC5_IDX + 1])
-        print("epc6           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPC6_IDX + 1])
-        print("epc7           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPC7_IDX + 1])
-        print("eps2           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPS2_IDX + 1])
-        print("eps3           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPS3_IDX + 1])
-        print("eps4           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPS4_IDX + 1])
-        print("eps5           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPS5_IDX + 1])
-        print("eps6           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPS6_IDX + 1])
-        print("eps7           0x%x" % extra_info[1 + 2 * ESPCoreDumpElfFile.REG_EPS7_IDX + 1])
+
+        # skip crashed_task_tcb, exccause, and excvaddr
+        for i in range(5, len(extra_info), 2):
+            if (extra_info[i] >= ESPCoreDumpElfFile.REG_EPC1_IDX and extra_info[i] <= ESPCoreDumpElfFile.REG_EPC7_IDX):
+                print('epc%d           0x%x' % ((extra_info[i] - ESPCoreDumpElfFile.REG_EPC1_IDX + 1), extra_info[i + 1]))
+
+        # skip crashed_task_tcb, exccause, and excvaddr
+        for i in range(5, len(extra_info), 2):
+            if (extra_info[i] >= ESPCoreDumpElfFile.REG_EPS2_IDX and extra_info[i] <= ESPCoreDumpElfFile.REG_EPS7_IDX):
+                print('eps%d           0x%x' % ((extra_info[i] - ESPCoreDumpElfFile.REG_EPS2_IDX + 2), extra_info[i + 1]))
     else:
         print("Exception registers have not been found!")
     p = gdbmi_getinfo(p, handlers, "info registers")