]> granicus.if.org Git - esp-idf/commitdiff
espcoredump: Add tests and Python3 support
authorRoland Dobai <dobai.roland@gmail.com>
Mon, 3 Sep 2018 11:48:32 +0000 (13:48 +0200)
committerRoland Dobai <dobai.roland@gmail.com>
Tue, 11 Sep 2018 06:53:06 +0000 (08:53 +0200)
.gitlab-ci.yml
components/espcoredump/espcoredump.py
components/espcoredump/test/coredump.b64 [new file with mode: 0644]
components/espcoredump/test/expected_output [new file with mode: 0644]
components/espcoredump/test/test.elf [new file with mode: 0644]
components/espcoredump/test/test_espcoredump.py [new file with mode: 0755]
components/espcoredump/test/test_espcoredump.sh [new file with mode: 0755]
tools/ci/executable-list.txt

index 68b22aca693bfdfc005af8edd1ad51082777678d..6f6d863d0809371f1ffec04ee6ffc80b6a5f0f15 100644 (file)
@@ -446,6 +446,18 @@ test_esp_err_to_name_on_host:
     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.4.8 ./gen_esp_err_to_name.py
     - git diff --exit-code -- ../components/esp32/esp_err_to_name.c || (echo 'Differences found between running under Python 2 and 3.'; exit 1)
 
+test_espcoredump:
+  <<: *host_test_template
+  artifacts:
+    when: always
+    paths:
+      - components/espcoredump/test/.coverage
+      - components/espcoredump/test/output
+    expire_in: 1 week
+  script:
+    - cd components/espcoredump/test/
+    - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./test_espcoredump.sh
+
 push_to_github:
   stage: deploy
   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
index 321941fd1c455ecc10b7f0c73d1208519400736a..7f024eb5f0e37f4370ff5e43b5eae8bb20eaafeb 100755 (executable)
@@ -2,6 +2,19 @@
 #
 # ESP32 core dump Utility
 
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+try:
+    from builtins import zip
+    from builtins import str
+    from builtins import range
+    from past.utils import old_div
+    from builtins import object
+except ImportError:
+    print('Import has failed probably because of the missing "future" package. Please install all the packages for '
+          'interpreter {} from the $IDF_PATH/requirements.txt file.'.format(sys.executable))
+    sys.exit(1)
 import sys
 import os
 import argparse
@@ -19,7 +32,7 @@ if idf_path:
 try:
     import esptool
 except ImportError:
-    print "Esptool is not found! Set proper $IDF_PATH in environment."
+    print("Esptool is not found! Set proper $IDF_PATH in environment.")
     sys.exit(2)
 
 __version__ = "0.2-dev"
@@ -103,7 +116,7 @@ class Elf32FileHeader(BinStruct):
         super(Elf32FileHeader, self).__init__(buf)
         if buf is None:
             # Fill in sane ELF header for LSB32
-            self.e_ident = "\x7fELF\1\1\1\0\0\0\0\0\0\0\0\0"
+            self.e_ident = b"\x7fELF\1\1\1\0\0\0\0\0\0\0\0\0"
             self.e_version = ESPCoreDumpElfFile.EV_CURRENT
             self.e_ehsize = self.sizeof()
 
@@ -292,7 +305,7 @@ class ESPCoreDumpElfFile(esptool.ELFFile):
         except struct.error as e:
             raise ESPCoreDumpError("Failed to read a valid ELF header from %s: %s" % (self.name, e))
 
-        if ident[0] != '\x7f' or ident[1:4] != 'ELF':
+        if bytearray([ident[0]]) != b'\x7f' or ident[1:4] != b'ELF':
             raise ESPCoreDumpError("%s has invalid ELF magic header" % self.name)
         if machine != self.EM_XTENSA:
             raise ESPCoreDumpError("%s does not appear to be an Xtensa ELF file. e_machine=%04x" % (self.name, machine))
@@ -314,7 +327,7 @@ class ESPCoreDumpElfFile(esptool.ELFFile):
         if len(section_header) == 0:
             raise ESPCoreDumpError("No section header found at offset %04x in ELF file." % section_header_offs)
         if len(section_header) % LEN_SEC_HEADER != 0:
-            print 'WARNING: Unexpected ELF section header length %04x is not mod-%02x' % (len(section_header),LEN_SEC_HEADER)
+            print('WARNING: Unexpected ELF section header length %04x is not mod-%02x' % (len(section_header),LEN_SEC_HEADER))
 
         # walk through the section header and extract all sections
         section_header_offsets = range(0, len(section_header), LEN_SEC_HEADER)
@@ -330,7 +343,7 @@ class ESPCoreDumpElfFile(esptool.ELFFile):
             raise ESPCoreDumpError("ELF file has no STRTAB section at shstrndx %d" % shstrndx)
         _,sec_type,_,_,sec_size,sec_offs = read_section_header(shstrndx * LEN_SEC_HEADER)
         if sec_type != esptool.ELFFile.SEC_TYPE_STRTAB:
-            print 'WARNING: ELF file has incorrect STRTAB section type 0x%02x' % sec_type
+            print('WARNING: ELF file has incorrect STRTAB section type 0x%02x' % sec_type)
         f.seek(sec_offs)
         string_table = f.read(sec_size)
 
@@ -338,7 +351,7 @@ class ESPCoreDumpElfFile(esptool.ELFFile):
         # string table section, and actual data for each section from the ELF file itself
         def lookup_string(offs):
             raw = string_table[offs:]
-            return raw[:raw.index('\x00')]
+            return raw[:raw.index(b'\x00')]
 
         def read_data(offs,size):
             f.seek(offs)
@@ -357,7 +370,7 @@ class ESPCoreDumpElfFile(esptool.ELFFile):
         if len(seg_table) == 0:
             raise ESPCoreDumpError("No program header table found at offset %04x in ELF file." % seg_table_offs)
         if len(seg_table) % LEN_SEG_HEADER != 0:
-            print 'WARNING: Unexpected ELF program header table length %04x is not mod-%02x' % (len(seg_table),LEN_SEG_HEADER)
+            print('WARNING: Unexpected ELF program header table length %04x is not mod-%02x' % (len(seg_table),LEN_SEG_HEADER))
 
         # walk through the program segment table and extract all segments
         seg_table_offs = range(0, len(seg_table), LEN_SEG_HEADER)
@@ -551,7 +564,7 @@ class ESPCoreDumpLoader(object):
             os.remove(fname)
         except OSError as e:
             if e.errno != errno.ENOENT:
-                print "Warning failed to remove temp file '%s' (%d)!" % (fname, e.errno)
+                print("Warning failed to remove temp file '%s' (%d)!" % (fname, e.errno))
 
     def cleanup(self):
         """Cleans up loader resources
@@ -569,7 +582,7 @@ class ESPCoreDumpLoader(object):
         tot_len,task_num,tcbsz = struct.unpack_from(self.ESP32_COREDUMP_HDR_FMT, data)
         tcbsz_aligned = tcbsz
         if tcbsz_aligned % 4:
-            tcbsz_aligned = 4*(tcbsz_aligned/4 + 1)
+            tcbsz_aligned = 4*(old_div(tcbsz_aligned,4) + 1)
         core_off += self.ESP32_COREDUMP_HDR_SZ
         core_elf = ESPCoreDumpElfFile()
         notes = b''
@@ -585,7 +598,7 @@ class ESPCoreDumpLoader(object):
     
             stack_len_aligned = stack_len
             if stack_len_aligned % 4:
-                stack_len_aligned = 4*(stack_len_aligned/4 + 1)
+                stack_len_aligned = 4*(old_div(stack_len_aligned,4) + 1)
                 
             core_off += self.ESP32_COREDUMP_TSK_HDR_SZ
             data = self.read_data(core_off, tcbsz_aligned)
@@ -602,7 +615,7 @@ class ESPCoreDumpLoader(object):
             try:
                 task_regs = self._get_registers_from_stack(data, stack_end > stack_top)
             except Exception as e:
-                print e
+                print(e)
                 return None
             prstatus = XtensaPrStatus()
             prstatus.pr_cursig = 0 # TODO: set sig only for current/failed task
@@ -659,7 +672,7 @@ class ESPCoreDumpFileLoader(ESPCoreDumpLoader):
                     line = fb64.readline()
                     if len(line) == 0:
                         break
-                    data = base64.standard_b64decode(line.rstrip('\r\n'))
+                    data = base64.standard_b64decode(line.rstrip(b'\r\n'))
                     fcore.write(data)
                 fcore.close()
                 fcore = open(self.fcore_name, 'rb')
@@ -717,18 +730,18 @@ class ESPCoreDumpFlashLoader(ESPCoreDumpLoader):
             tool_args[-1] = self.fcore_name
             # read core dump length
             et_out = subprocess.check_output(tool_args)
-            print et_out
+            print(et_out.decode('utf-8'))
             f = os.fdopen(fhnd, 'rb')
             self.dump_sz = self._read_core_dump_length(f)
             # read core dump
             tool_args[-2] = str(self. dump_sz)
             et_out = subprocess.check_output(tool_args)
-            print et_out
+            print(et_out.decode('utf-8'))
         except subprocess.CalledProcessError as e: 
-            print "esptool script execution failed with err %d" % e.returncode
-            print "Command ran: '%s'" % e.cmd
-            print "Command out:"
-            print e.output
+            print("esptool script execution failed with err %d" % e.returncode)
+            print("Command ran: '%s'" % e.cmd)
+            print("Command out:")
+            print(e.output)
             if self.fcore_name:
                 self.remove_tmp_file(self.fcore_name)
             raise e
@@ -773,7 +786,7 @@ class GDBMIOutRecordHandler(object):
         """Base method to execute GDB/MI output record handler function
         """
         if self.verbose:
-            print "%s.execute: [[%s]]" % (self.__class__.__name__, ln)
+            print("%s.execute: [[%s]]" % (self.__class__.__name__, ln))
 
 
 class GDBMIOutStreamHandler(GDBMIOutRecordHandler):
@@ -823,7 +836,7 @@ class GDBMIResultHandler(GDBMIOutRecordHandler):
                 if self.result_str.startswith(','):
                     self.result_str = self.result_str[1:]
                 else:
-                    print "Invalid result format: '%s'" % ln
+                    print("Invalid result format: '%s'" % ln)
             else:
                 self.result_str = ''
             return True
@@ -843,7 +856,7 @@ class GDBMIResultHandler(GDBMIOutRecordHandler):
             return
         if self._parse_rc(ln, self.RC_EXIT):
             return
-        print "Unknown GDB/MI result: '%s'" % ln
+        print("Unknown GDB/MI result: '%s'" % ln)
 
 
 class GDBMIStreamConsoleHandler(GDBMIOutStreamHandler):
@@ -873,7 +886,7 @@ def dbg_corefile(args):
         loader = ESPCoreDumpFlashLoader(args.off, port=args.port)
         core_fname = loader.create_corefile(args.save_core, rom_elf=rom_elf)
         if not core_fname:
-            print "Failed to create corefile!"
+            print("Failed to create corefile!")
             loader.cleanup()
             return
     else:
@@ -882,7 +895,7 @@ def dbg_corefile(args):
             loader = ESPCoreDumpFileLoader(core_fname, args.core_format == 'b64')
             core_fname = loader.create_corefile(args.save_core, rom_elf=rom_elf)
             if not core_fname:
-                print "Failed to create corefile!"
+                print("Failed to create corefile!")
                 loader.cleanup()
                 return
 
@@ -902,7 +915,7 @@ def dbg_corefile(args):
         if not args.core and not args.save_core:
             loader.remove_tmp_file(core_fname)
         loader.cleanup()
-    print 'Done!'
+    print('Done!')
 
 
 def info_corefile(args):
@@ -915,7 +928,7 @@ def info_corefile(args):
     
     def gdbmi_read2prompt(f, out_handlers=None):
         while True:
-            ln = f.readline().rstrip(' \r\n')
+            ln = f.readline().decode('utf-8').rstrip(' \r\n')
             if ln == '(gdb)':
                 break
             elif len(ln) == 0:
@@ -948,15 +961,15 @@ def info_corefile(args):
     def gdbmi_getinfo(p, handlers, gdb_cmd):
         for t in handlers:
             handlers[t].result_class = None
-        p.stdin.write("-interpreter-exec console \"%s\"\n" % gdb_cmd)
+        p.stdin.write(bytearray("-interpreter-exec console \"%s\"\n" % gdb_cmd, encoding='utf-8'))
         gdbmi_read2prompt(p.stdout, handlers)
         if not handlers[GDBMIResultHandler.TAG].result_class or handlers[GDBMIResultHandler.TAG].result_class == GDBMIResultHandler.RC_EXIT:
-            print "GDB exited (%s / %s)!" % (handlers[GDBMIResultHandler.TAG].result_class, handlers[GDBMIResultHandler.TAG].result_str)
+            print("GDB exited (%s / %s)!" % (handlers[GDBMIResultHandler.TAG].result_class, handlers[GDBMIResultHandler.TAG].result_str))
             p.wait()
-            print "Problem occured! GDB exited, restart it."
+            print("Problem occured! GDB exited, restart it.")
             p = gdbmi_start(handlers, [])
         elif handlers[GDBMIResultHandler.TAG].result_class != GDBMIResultHandler.RC_DONE:
-            print "GDB/MI command failed (%s / %s)!" % (handlers[GDBMIResultHandler.TAG].result_class, handlers[GDBMIResultHandler.TAG].result_str)
+            print("GDB/MI command failed (%s / %s)!" % (handlers[GDBMIResultHandler.TAG].result_class, handlers[GDBMIResultHandler.TAG].result_str))
         return p
 
     loader = None
@@ -965,7 +978,7 @@ def info_corefile(args):
         loader = ESPCoreDumpFlashLoader(args.off, port=args.port)
         core_fname = loader.create_corefile(args.save_core, rom_elf=rom_elf)
         if not core_fname:
-            print "Failed to create corefile!"
+            print("Failed to create corefile!")
             loader.cleanup()
             return
     else:
@@ -974,7 +987,7 @@ def info_corefile(args):
             loader = ESPCoreDumpFileLoader(core_fname, args.core_format == 'b64')
             core_fname = loader.create_corefile(args.save_core, rom_elf=rom_elf)
             if not core_fname:
-                print "Failed to create corefile!"
+                print("Failed to create corefile!")
                 loader.cleanup()
                 return
 
@@ -1028,43 +1041,43 @@ def info_corefile(args):
     handlers[GDBMIStreamConsoleHandler.TAG] = GDBMIStreamConsoleHandler(None, verbose=False)
     p = gdbmi_start(handlers, [rom_sym_cmd])
 
-    print "==============================================================="
-    print "==================== ESP32 CORE DUMP START ===================="
+    print("===============================================================")
+    print("==================== ESP32 CORE DUMP START ====================")
 
     handlers[GDBMIResultHandler.TAG].result_class = None
     handlers[GDBMIStreamConsoleHandler.TAG].func = gdbmi_console_stream_handler
-    print "\n================== CURRENT THREAD REGISTERS ==================="
+    print("\n================== CURRENT THREAD REGISTERS ===================")
     p = gdbmi_getinfo(p, handlers, "info registers")
-    print "\n==================== CURRENT THREAD STACK ====================="
+    print("\n==================== CURRENT THREAD STACK =====================")
     p = gdbmi_getinfo(p, handlers, "bt")
-    print "\n======================== THREADS INFO ========================="
+    print("\n======================== THREADS INFO =========================")
     p = gdbmi_getinfo(p, handlers, "info threads")
-    print "\n======================= ALL MEMORY REGIONS ========================"
-    print "Name   Address   Size   Attrs"
+    print("\n======================= ALL MEMORY REGIONS ========================")
+    print("Name   Address   Size   Attrs")
     for ms in merged_segs:
-        print "%s 0x%x 0x%x %s" % (ms[0], ms[1], ms[2], ms[3])
+        print("%s 0x%x 0x%x %s" % (ms[0], ms[1], ms[2], ms[3]))
     for cs in core_segs:
         # core dump exec segments are from ROM, other are belong to tasks (TCB or stack)
         if cs.flags & ESPCoreDumpSegment.PF_X:
             seg_name = 'rom.text'
         else:
             seg_name = 'tasks.data'
-        print ".coredump.%s 0x%x 0x%x %s" % (seg_name, cs.addr, len(cs.data), cs.attr_str())
+        print(".coredump.%s 0x%x 0x%x %s" % (seg_name, cs.addr, len(cs.data), cs.attr_str()))
     if args.print_mem:
-        print "\n====================== CORE DUMP MEMORY CONTENTS ========================"
+        print("\n====================== CORE DUMP MEMORY CONTENTS ========================")
         for cs in core_elf.program_segments:
             # core dump exec segments are from ROM, other are belong to tasks (TCB or stack)
             if cs.flags & ESPCoreDumpSegment.PF_X:
                 seg_name = 'rom.text'
             else:
                 seg_name = 'tasks.data'
-            print ".coredump.%s 0x%x 0x%x %s" % (seg_name, cs.addr, len(cs.data), cs.attr_str())
-            p = gdbmi_getinfo(p, handlers, "x/%dx 0x%x" % (len(cs.data)/4, cs.addr))
+            print(".coredump.%s 0x%x 0x%x %s" % (seg_name, cs.addr, len(cs.data), cs.attr_str()))
+            p = gdbmi_getinfo(p, handlers, "x/%dx 0x%x" % (old_div(len(cs.data),4), cs.addr))
 
-    print "\n===================== ESP32 CORE DUMP END ====================="
-    print "==============================================================="
+    print("\n===================== ESP32 CORE DUMP END =====================")
+    print("===============================================================")
 
-    p.stdin.write('q\n')
+    p.stdin.write(b'q\n')
     p.wait()
     p.stdin.close()
     p.stdout.close()
@@ -1073,7 +1086,7 @@ def info_corefile(args):
         if not args.core and not args.save_core:
             loader.remove_tmp_file(core_fname)
         loader.cleanup()
-    print 'Done!'
+    print('Done!')
         
 
 def main():
@@ -1123,12 +1136,12 @@ def main():
     parser_info_coredump.add_argument('prog', help='Path to program\'s ELF binary', type=str)
 
     # internal sanity check - every operation matches a module function of the same name
-    for operation in subparsers.choices.keys():
+    for operation in subparsers.choices:
         assert operation in globals(), "%s should be a module function" % operation
 
     args = parser.parse_args()
 
-    print 'espcoredump.py v%s' % __version__
+    print('espcoredump.py v%s' % __version__)
 
     operation_func = globals()[args.operation]
     operation_func(args)
@@ -1138,5 +1151,5 @@ if __name__ == '__main__':
     try:
         main()
     except ESPCoreDumpError as e:
-        print '\nA fatal error occurred: %s' % e
+        print('\nA fatal error occurred: %s' % e)
         sys.exit(2)
diff --git a/components/espcoredump/test/coredump.b64 b/components/espcoredump/test/coredump.b64
new file mode 100644 (file)
index 0000000..bf36929
--- /dev/null
@@ -0,0 +1,158 @@
+lBoAAAkAAABkAQAA
+BD77PwB7+z/QfPs/
+cHv7P3B8+z9tAAAAPC37Pzwt+z8EPvs/NC37PxIAAAClpaWlpaWlpQQ++z8AAAAA
+BwAAANR0+z91bmFsaWduZWRfcHRyX3QAAQAAANB8+z8AAAAAIAgGAAcAAAAAAAAA
+AAAAAAAAAAAAAAAAjOj6P/To+j9c6fo/AAAAAAAAAAABAAAAAAAAAHg8QD8AAAAA
+SB0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAA=
+aDtAP20hDUAwBAYASCENgMB7+z8CAAAANjxAPwB8+z/06Po/AAAAAAAAAAAFAAAA
+rf///yAAAABsPvs/AQAAAIAAAAABAAAAAAAAAAAAAAAdAAAABQAAAP0UAEANFQBA
+/////wEAAACAAAAAfCEIQIwP+z8AAAAAAAAAAAAAAAD//z+zAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAEAAACAAAAAAQAAAAAAAABIIQ2A8Hv7PwEAAAD06Po/
+pycNgPB7+z8KAAAA9Oj6PwB8+z/06Po/AAAAAAAAAACQIQ2AIHz7PwoAAAABAAAA
+kztAPx4AAAA1PEA/AQAAACMABgABAAAAIQAGAKA6+z8AAAAAUHz7PwAAAAAAAAAA
+AwAAAFB8+z8AAAAAAAAAAGwQ+z8EPvs/AAAAAAAAAAAAAAAAcHz7PwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8+z8AAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+/Fb7P5BV+z/0Vvs/
+kFX7P5BW+z/ZclwZcFz7P7As+z/8Vvs/qCz7PxkAAADVIwJJEo189/xW+z8AAAAA
+AAAAAPhS+z9JRExFMAAweiWIEpHwtvYAAAAAAPRW+z8AAAAAIAIGAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAjOj6P/To+j9c6fo/AAAAAAAAAAABAAAAAAAAAHg8QD8AAAAA
+SB0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAA8448=
+2CEIQIZKDkAwAgYAuFcIgFBW+z8IAAAAAAAAAAEAAABoXPs/AAAAAAEAAACsK/s/
+kCv7PwAAAAABAAAAAAAAAAEAAAAhAAYAIwgGAAAAAADcSwiAEFb7PwAAAAAAAAAA
+AAAAANEjCEABAAAA6GQIQAHp+j8AAAAAAAAAAAAAAAD//z+zAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAIQAGACMIBgAAAAAAcFb7PwAAAAAAAAAA
+AQAAAGhc+z8AAAAAAQAAAAAAAACQVvs/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnFb7PwAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAA=
+aFz7PwBb+z9gXPs/
+AFv7PwBc+z9TsePnsCz7PwRX+z9oXPs/qCz7PxkAAACoWji9Rc4eO2hc+z8AAAAA
+AAAAAGRY+z9JRExFMQBwjmCRXQvnOuwAAQAAAGBc+z8AAAAAIA4GAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAjOj6P/To+j9c6fo/AAAAAAAAAAABAAAAAAAAAHg8QD8AAAAA
+SB0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAACbsV8=
+2CEIQIZKDkAwDgYAuFcIgMBb+z8IAAAAAQAAAAAAAAD8Vvs/AAAAAAEAAADMK/s/
+kCv7PwAAAAABAACAAAAAAAEAAAAhAAYAAAAAAAAAAAAgAAYAAQAAAAAAAAAAAAAA
+AAAAANEjCEABAAAA6GQIQBzv+j8AAAAAAAAAAAAAAAD//z+zAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAIQAGAAAAAAAAAAAA4Fv7PwAAAAAAAAAA
+AAAAAPxW+z8AAAAAAQAAAAAAAAAAXPs/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFz7PwAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAA==
+nDz7P2Bz+z/MdPs/
+YHP7P2B0+z/RAAAAnCz7P3Q/+z+cPPs/lCz7PxQAAAAkbPs/JGz7P5w8+z8AAAAA
+BQAAANBs+z9iYWRfcHRyX3Rhc2sApaUA////f8x0+z8AAAAAIQAGAAUAAAAAAAAA
+AAAAAAAAAAAAAAAAjOj6P/To+j9c6fo/AAAAAAAAAAABAAAAAAAAAHg8QD8AAAAA
+SB0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAClpaU=
+2CEIQJ5VCEAwAgYAEyENgCB0+z/RAAAAAAAAAGwQ+z+cPPs/AAAAAAAAAACeVQiA
+AHT7PwAAAADRAAAAIwAGAAEAAAAhAAYAcFv7PwAAAACkJw2A4HP7P/0UAEANFQBA
++f///9EjCEABAAAA6GQIQHwH+z8AAAAAAAAAAAAAAAD//z+zAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAACMABgABAAAAIQAGAHBb+z8AAAAAQHT7PwAAAAAAAAAA
+bBD7P5w8+z8AAAAAAAAAAAAAAABgdPs/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbHT7PwAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+bD/7P3CD+z/UhPs/
+cIP7P3CE+z/RAAAApDz7P5ws+z9sP/s/lCz7Pw8AAAC4PPs/JGz7P2w/+z8AAAAA
+CgAAANh8+z9mYWlsZWRfYXNzZXJ0X3QAAAAAANSE+z8AAAAAIQAGAAoAAAAAAAAA
+AAAAAAAAAAAAAAAAjOj6P/To+j9c6fo/AAAAAAAAAAABAAAAAAAAAHg8QD8AAAAA
+SB0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAA=
+2CEIQJ5VCEAwAgYAoyANgDCE+z/RAAAAAAAAAGwQ+z9sP/s/AAAAAAAAAACeVQiA
+EIT7PwAAAADRAAAAIwAGAAEAAAAhAAYAAAAAAAAAAACkJw2A8IP7P/0UAEANFQBA
++P///9EjCEABAAAA6GQIQIwX+z8AAAAAAAAAAAAAAAD//z+zAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAACMABgABAAAAIQAGAAAAAAAAAAAAUIT7PwAAAAAAAAAA
+bBD7P2w/+z8AAAAAAAAAAAAAAABwhPs/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfIT7PwAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAA=
+yGb7P0Bl+z/AZvs/
+QGX7P2Bm+z8AAAAAiCz7P4gs+z/IZvs/gCz7PxgAAAD8Xfs//F37P8hm+z/0Xfs/
+AQAAAMRe+z9UbXIgU3ZjAFUPn9OBr6IAAAAAAMBm+z8AAAAAIQAGAAEAAAAAAAAA
+AAAAAAAAAAAAAAAAjOj6P/To+j9c6fo/AAAAAAAAAAABAAAAAAAAAHg8QD8AAAAA
+SB0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAADm+Zc=
+2CEIQJxiCEAwCAYAj2MIgABm+z+oLvs/AAAAAAEAAAAMUfs/AAAAAAEAAACcYgiA
+4GX7PwAAAAAALPs/GF77PwAAAAAAAAAAAAAAAAAAAAClpaWlpaWlpQAAAAAAAAAA
+AAAAANEjCEAAAAAA6GQIQHz5+j8AAAAAAAAAAAAAAAD//z+zAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGb7PwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAHz5+j8AAAAAAAAAAAAAAAAAAAAAYGb7PwAAAAAAAAAA
+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAABsZvs/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+iPr6PwD5+j+A+vo/
+APn6PyD6+j/akPlfPDv7P6D9+j+I+vo/JCz7PwMAAABc6vo/XOr6P4j6+j9U6vo/
+FgAAAITq+j9lc3BfdGltZXIAH+HpXvQAAAAAAID6+j8AAAAAIQAGABYAAAAAAAAA
+AAAAAAAAAAAAAAAAjOj6P/To+j9c6fo/AAAAAAAAAAABAAAAAAAAAHg8QD8AAAAA
+SB0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAACISzU=
+2CEIQK1GCEAwAAYA+xQNgMD5+j8w6vo/AAAAAHjq+j8AAAAAAQAAAAEAAACtRgiA
+oPn6PwAAAACcLvs/nC77PwEAAAAhAAYAAAAAAAAAAAClpaWlpaWlpQAAAAAAAAAA
+AAAAANEjCEABAAAA6GQIQDyN+j8AAAAAAAAAAAAAAAD//z+zAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr6PwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAACD6+j8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAs+vo/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+NDv7P4A5+z8sO/s/
+gDn7P8A6+z/APAiILCz7P5D6+j80O/s/JCz7PwEAAAAs//o/LP/6PzQ7+z8k//o/
+GAAAADA3+z9pcGMxAMP571b2wMSsI4QAAQAAACw7+z8AAAAAIQAGABgAAAAAAAAA
+AAAAAAAAAAAAAAAAjOj6P/To+j9c6fo/AAAAAAAAAAABAAAAAAAAAHg8QD8AAAAA
+SB0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAADZjgQ=
+2CEIQEoRCEAwAAYArUYIgEA6+z8BAAAAnC77P6Au+z+QfP4/AAAAACMHBgBKEQiA
+IDr7P+AA8D8BAAAALBD7PwEAAAAgAAYAIwAGAAAAAABAOvs/AQAAAAAAAAAAAAAA
+AAAAANEjCEABAAAA6GQIQNzN+j8AAAAAAAAAAAAAAAD//z+zAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAP//P7MAAAAAAAAAAAAAAACzEQiAYDr7PwD/+j8AAAAA
+AQAAAAEAAAAgAAYAIwAGAAAAAACgOvs/AQAAAPgvCEAAAAAACQAAAAAAAAAjBwYA
+/////6A6+z8BAAAA+C8IQEj/+j8AAAAAAQAAAAAAAAAAAAAAwDr7PwAAAAAAAAAA
+AQAAAAAAAAAAAAAAAAAAACwPCICAff4/KAAAACgAAAAAAAAAAAAAAMw6+z8AAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+mP36P6A1+z8oN/s/
+oDX7P8A2+z9UgfpzkPr6Pyws+z+Y/fo/JCz7PwEAAABw/fo/cP36P5j9+j9o/fo/
+GAAAACwz+z9pcGMwAIY9HgrUf/61qBQAAAAAACg3+z8AAAAAIQAGABgAAAAAAAAA
+AAAAAAAAAAAAAAAAjOj6P/To+j9c6fo/AAAAAAAAAAABAAAAAAAAAHg8QD8AAAAA
+SB0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAADEsn4=
+2CEIQK1GCEAwAAYAsxEIgGA2+z9E/fo/AAAAAIz9+j8AAAAAAQAAAAEAAACtRgiA
+QDb7PwAAAACcLvs/nC77P/A6/j8AAAAAAgAAAAAAAAClpaWlpaWlpQAAAAAAAAAA
+AAAAANEjCEDwOv4/6GQIQNzJ+j8AAAAAAAAAAAAAAAD//z+zAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoDb7PwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAMA2+z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqDgiAoDv+Pwws+z/kLvs/
+AAAAAAAAAADMNvs/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAA=
diff --git a/components/espcoredump/test/expected_output b/components/espcoredump/test/expected_output
new file mode 100644 (file)
index 0000000..4056fdb
--- /dev/null
@@ -0,0 +1,540 @@
+espcoredump.py v0.2-dev
+===============================================================
+==================== ESP32 CORE DUMP START ====================
+
+================== CURRENT THREAD REGISTERS ===================
+pc             0x400d216d      0x400d216d <recur_func+77>
+lbeg           0x400014fd      1073747197
+lend           0x4000150d      1073747213
+lcount         0xffffffff      4294967295
+sar            0x0     0
+ps             0x60420 394272
+threadptr      <unavailable>
+br             <unavailable>
+scompare1      <unavailable>
+acclo          <unavailable>
+acchi          <unavailable>
+m0             <unavailable>
+m1             <unavailable>
+m2             <unavailable>
+m3             <unavailable>
+expstate       <unavailable>
+f64r_lo        <unavailable>
+f64r_hi        <unavailable>
+f64s           <unavailable>
+fcr            <unavailable>
+fsr            <unavailable>
+a0             0x400d2148      1074602312
+a1             0x3ffb7bc0      1073445824
+a2             0x2     2
+a3             0x3f403c36      1061174326
+a4             0x3ffb7c00      1073445888
+a5             0x3ffae8f4      1073408244
+a6             0x0     0
+a7             0x0     0
+a8             0x5     5
+a9             0xffffffad      -83
+a10            0x20    32
+a11            0x3ffb3e6c      1073430124
+a12            0x1     1
+a13            0x80    128
+a14            0x1     1
+a15            0x0     0
+
+==================== CURRENT THREAD STACK =====================
+#0  0x400d216d in recur_func () at /home/dragon/esp/esp-idf/examples/get-started/hello_world/main/hello_world_main.c:70
+#1  0x400d2148 in recur_func () at /home/dragon/esp/esp-idf/examples/get-started/hello_world/main/hello_world_main.c:63
+#2  0x400d2148 in recur_func () at /home/dragon/esp/esp-idf/examples/get-started/hello_world/main/hello_world_main.c:63
+#3  0x400d2190 in unaligned_ptr_task (pvParameter=0x0) at /home/dragon/esp/esp-idf/examples/get-started/hello_world/main/hello_world_main.c:80
+
+======================== THREADS INFO =========================
+  Id   Target Id         Frame 
+  9    process 8         0x400846ad in xQueueGenericReceive (xQueue=0x3ffafd44, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /home/dragon/esp/esp-idf/components/freertos/queue.c:1591
+  8    process 7         0x4008114a in esp_crosscore_int_send_yield (core_id=1) at /home/dragon/esp/esp-idf/components/esp32/crosscore_int.c:112
+  7    process 6         0x400846ad in xQueueGenericReceive (xQueue=0x3ffaea30, pvBuffer=0x0, xTicksToWait=4294967295, xJustPeeking=0) at /home/dragon/esp/esp-idf/components/freertos/queue.c:1591
+  6    process 5         0x4008629c in prvProcessTimerOrBlockTask (xNextExpireTime=<optimized out>, xListWasEmpty=<optimized out>) at /home/dragon/esp/esp-idf/components/freertos/timers.c:588
+  5    process 4         0x4008559e in vTaskDelay (xTicksToDelay=<optimized out>) at /home/dragon/esp/esp-idf/components/freertos/tasks.c:1491
+  4    process 3         0x4008559e in vTaskDelay (xTicksToDelay=<optimized out>) at /home/dragon/esp/esp-idf/components/freertos/tasks.c:1491
+  3    process 2         0x400e4a86 in esp_vApplicationWaitiHook () at /home/dragon/esp/esp-idf/components/esp32/freertos_hooks.c:66
+  2    process 1         0x400e4a86 in esp_vApplicationWaitiHook () at /home/dragon/esp/esp-idf/components/esp32/freertos_hooks.c:66
+* 1    <main task>       0x400d216d in recur_func () at /home/dragon/esp/esp-idf/examples/get-started/hello_world/main/hello_world_main.c:70
+
+======================= ALL MEMORY REGIONS ========================
+Name   Address   Size   Attrs
+.rtc.text 0x400c0000 0x0 RW  
+.rtc_noinit 0x50000000 0x0 RW  
+.iram0.vectors 0x40080000 0x400 R XA
+.iram0.text 0x40080400 0x93f8 RWXA
+.dram0.data 0x3ffb0000 0x2288 RW A
+.noinit 0x3ffb2288 0x0 RW  
+.flash.rodata 0x3f400020 0x6cd4 RW A
+.flash.text 0x400d0018 0x14cb4 R XA
+.coredump.tasks.data 0x3ffb3e04 0x164 RW 
+.coredump.tasks.data 0x3ffb7b00 0x1d0 RW 
+.coredump.tasks.data 0x3ffb56fc 0x164 RW 
+.coredump.tasks.data 0x3ffb5590 0x164 RW 
+.coredump.tasks.data 0x3ffb5c68 0x164 RW 
+.coredump.tasks.data 0x3ffb5b00 0x160 RW 
+.coredump.tasks.data 0x3ffb3c9c 0x164 RW 
+.coredump.tasks.data 0x3ffb7360 0x16c RW 
+.coredump.tasks.data 0x3ffb3f6c 0x164 RW 
+.coredump.tasks.data 0x3ffb8370 0x164 RW 
+.coredump.tasks.data 0x3ffb66c8 0x164 RW 
+.coredump.tasks.data 0x3ffb6540 0x180 RW 
+.coredump.tasks.data 0x3ffafa88 0x164 RW 
+.coredump.tasks.data 0x3ffaf900 0x180 RW 
+.coredump.tasks.data 0x3ffb3b34 0x164 RW 
+.coredump.tasks.data 0x3ffb3980 0x1ac RW 
+.coredump.tasks.data 0x3ffafd98 0x164 RW 
+.coredump.tasks.data 0x3ffb35a0 0x188 RW 
+
+====================== CORE DUMP MEMORY CONTENTS ========================
+.coredump.tasks.data 0x3ffb3e04 0x164 RW 
+0x3ffb3e04:    0x3ffb7b70      0x3ffb7c70      0x0000006d      0x3ffb2d3c
+0x3ffb3e14:    0x3ffb2d3c      0x3ffb3e04      0x3ffb2d34      0x00000012
+0x3ffb3e24:    0xa5a5a5a5      0xa5a5a5a5      0x3ffb3e04      0x00000000
+0x3ffb3e34:    0x00000007      0x3ffb74d4      0x6c616e75      0x656e6769
+0x3ffb3e44:    0x74705f64      0x00745f72      0x00000001      0x3ffb7cd0
+0x3ffb3e54:    0x00000000      0x00060820      0x00000007      0x00000000
+0x3ffb3e64:    0x00000000      0x00000000      0x00000000      0x3ffae88c
+0x3ffb3e74:    0x3ffae8f4      0x3ffae95c      0x00000000      0x00000000
+0x3ffb3e84:    0x00000001      0x00000000      0x3f403c78      0x00000000
+0x3ffb3e94:    0x40001d48      0x00000000      0x00000000      0x00000000
+0x3ffb3ea4:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3eb4:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3ec4:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3ed4:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3ee4:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3ef4:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3f04:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3f14:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3f24:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3f34:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3f44:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3f54:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3f64:    0x00000000
+.coredump.tasks.data 0x3ffb7b00 0x1d0 RW 
+0x3ffb7b00:    0x3f403b68      0x400d216d      0x00060430      0x800d2148
+0x3ffb7b10:    0x3ffb7bc0      0x00000002      0x3f403c36      0x3ffb7c00
+0x3ffb7b20:    0x3ffae8f4      0x00000000      0x00000000      0x00000005
+0x3ffb7b30:    0xffffffad      0x00000020      0x3ffb3e6c      0x00000001
+0x3ffb7b40:    0x00000080      0x00000001      0x00000000      0x00000000
+0x3ffb7b50:    0x0000001d      0x00000005      0x400014fd      0x4000150d
+0x3ffb7b60:    0xffffffff      0x00000001      0x00000080      0x4008217c
+0x3ffb7b70:    0x3ffb0f8c      0x00000000      0x00000000      0x00000000
+0x3ffb7b80:    0xb33fffff      0x00000000      0x00000000      0x00000000
+0x3ffb7b90:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7ba0:    0x00000001      0x00000080      0x00000001      0x00000000
+0x3ffb7bb0:    0x800d2148      0x3ffb7bf0      0x00000001      0x3ffae8f4
+0x3ffb7bc0:    0x800d27a7      0x3ffb7bf0      0x0000000a      0x3ffae8f4
+0x3ffb7bd0:    0x3ffb7c00      0x3ffae8f4      0x00000000      0x00000000
+0x3ffb7be0:    0x800d2190      0x3ffb7c20      0x0000000a      0x00000001
+0x3ffb7bf0:    0x3f403b93      0x0000001e      0x3f403c35      0x00000001
+0x3ffb7c00:    0x00060023      0x00000001      0x00060021      0x3ffb3aa0
+0x3ffb7c10:    0x00000000      0x3ffb7c50      0x00000000      0x00000000
+0x3ffb7c20:    0x00000003      0x3ffb7c50      0x00000000      0x00000000
+0x3ffb7c30:    0x3ffb106c      0x3ffb3e04      0x00000000      0x00000000
+0x3ffb7c40:    0x00000000      0x3ffb7c70      0x00000000      0x00000000
+0x3ffb7c50:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7c60:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7c70:    0x00000000      0x00000000      0x3ffb7c7c      0x00000000
+0x3ffb7c80:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7c90:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7ca0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7cb0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7cc0:    0x00000000      0x00000000      0x00000000      0x00000000
+.coredump.tasks.data 0x3ffb56fc 0x164 RW 
+0x3ffb56fc:    0x3ffb5590      0x3ffb5690      0x195c72d9      0x3ffb5c70
+0x3ffb570c:    0x3ffb2cb0      0x3ffb56fc      0x3ffb2ca8      0x00000019
+0x3ffb571c:    0x490223d5      0xf77c8d12      0x3ffb56fc      0x00000000
+0x3ffb572c:    0x00000000      0x3ffb52f8      0x454c4449      0x7a300030
+0x3ffb573c:    0x91128825      0x00f6b6f0      0x00000000      0x3ffb56f4
+0x3ffb574c:    0x00000000      0x00060220      0x00000000      0x00000000
+0x3ffb575c:    0x00000000      0x00000000      0x00000000      0x3ffae88c
+0x3ffb576c:    0x3ffae8f4      0x3ffae95c      0x00000000      0x00000000
+0x3ffb577c:    0x00000001      0x00000000      0x3f403c78      0x00000000
+0x3ffb578c:    0x40001d48      0x00000000      0x00000000      0x00000000
+0x3ffb579c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb57ac:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb57bc:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb57cc:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb57dc:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb57ec:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb57fc:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb580c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb581c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb582c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb583c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb584c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb585c:    0x8fe33c00
+.coredump.tasks.data 0x3ffb5590 0x164 RW 
+0x3ffb5590:    0x400821d8      0x400e4a86      0x00060230      0x800857b8
+0x3ffb55a0:    0x3ffb5650      0x00000008      0x00000000      0x00000001
+0x3ffb55b0:    0x3ffb5c68      0x00000000      0x00000001      0x3ffb2bac
+0x3ffb55c0:    0x3ffb2b90      0x00000000      0x00000001      0x00000000
+0x3ffb55d0:    0x00000001      0x00060021      0x00060823      0x00000000
+0x3ffb55e0:    0x80084bdc      0x3ffb5610      0x00000000      0x00000000
+0x3ffb55f0:    0x00000000      0x400823d1      0x00000001      0x400864e8
+0x3ffb5600:    0x3ffae901      0x00000000      0x00000000      0x00000000
+0x3ffb5610:    0xb33fffff      0x00000000      0x00000000      0x00000000
+0x3ffb5620:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5630:    0x00000000      0x00000001      0x00060021      0x00060823
+0x3ffb5640:    0x00000000      0x3ffb5670      0x00000000      0x00000000
+0x3ffb5650:    0x00000001      0x3ffb5c68      0x00000000      0x00000001
+0x3ffb5660:    0x00000000      0x3ffb5690      0x00000000      0x00000000
+0x3ffb5670:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5680:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5690:    0x00000000      0x00000000      0x3ffb569c      0x00000000
+0x3ffb56a0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb56b0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb56c0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb56d0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb56e0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb56f0:    0x00000000
+.coredump.tasks.data 0x3ffb5c68 0x164 RW 
+0x3ffb5c68:    0x3ffb5b00      0x3ffb5c00      0xe7e3b153      0x3ffb2cb0
+0x3ffb5c78:    0x3ffb5704      0x3ffb5c68      0x3ffb2ca8      0x00000019
+0x3ffb5c88:    0xbd385aa8      0x3b1ece45      0x3ffb5c68      0x00000000
+0x3ffb5c98:    0x00000000      0x3ffb5864      0x454c4449      0x8e700031
+0x3ffb5ca8:    0x0b5d9160      0x00ec3ae7      0x00000001      0x3ffb5c60
+0x3ffb5cb8:    0x00000000      0x00060e20      0x00000000      0x00000000
+0x3ffb5cc8:    0x00000000      0x00000000      0x00000000      0x3ffae88c
+0x3ffb5cd8:    0x3ffae8f4      0x3ffae95c      0x00000000      0x00000000
+0x3ffb5ce8:    0x00000001      0x00000000      0x3f403c78      0x00000000
+0x3ffb5cf8:    0x40001d48      0x00000000      0x00000000      0x00000000
+0x3ffb5d08:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5d18:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5d28:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5d38:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5d48:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5d58:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5d68:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5d78:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5d88:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5d98:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5da8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5db8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5dc8:    0x5fb19b00
+.coredump.tasks.data 0x3ffb5b00 0x160 RW 
+0x3ffb5b00:    0x400821d8      0x400e4a86      0x00060e30      0x800857b8
+0x3ffb5b10:    0x3ffb5bc0      0x00000008      0x00000001      0x00000000
+0x3ffb5b20:    0x3ffb56fc      0x00000000      0x00000001      0x3ffb2bcc
+0x3ffb5b30:    0x3ffb2b90      0x00000000      0x80000001      0x00000000
+0x3ffb5b40:    0x00000001      0x00060021      0x00000000      0x00000000
+0x3ffb5b50:    0x00060020      0x00000001      0x00000000      0x00000000
+0x3ffb5b60:    0x00000000      0x400823d1      0x00000001      0x400864e8
+0x3ffb5b70:    0x3ffaef1c      0x00000000      0x00000000      0x00000000
+0x3ffb5b80:    0xb33fffff      0x00000000      0x00000000      0x00000000
+0x3ffb5b90:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5ba0:    0x00000000      0x00000001      0x00060021      0x00000000
+0x3ffb5bb0:    0x00000000      0x3ffb5be0      0x00000000      0x00000000
+0x3ffb5bc0:    0x00000000      0x3ffb56fc      0x00000000      0x00000001
+0x3ffb5bd0:    0x00000000      0x3ffb5c00      0x00000000      0x00000000
+0x3ffb5be0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5bf0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5c00:    0x00000000      0x00000000      0x3ffb5c0c      0x00000000
+0x3ffb5c10:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5c20:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5c30:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5c40:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb5c50:    0x00000000      0x00000000      0x00000000      0x00000000
+.coredump.tasks.data 0x3ffb3c9c 0x164 RW 
+0x3ffb3c9c:    0x3ffb7360      0x3ffb7460      0x000000d1      0x3ffb2c9c
+0x3ffb3cac:    0x3ffb3f74      0x3ffb3c9c      0x3ffb2c94      0x00000014
+0x3ffb3cbc:    0x3ffb6c24      0x3ffb6c24      0x3ffb3c9c      0x00000000
+0x3ffb3ccc:    0x00000005      0x3ffb6cd0      0x5f646162      0x5f727470
+0x3ffb3cdc:    0x6b736174      0x00a5a500      0x7fffffff      0x3ffb74cc
+0x3ffb3cec:    0x00000000      0x00060021      0x00000005      0x00000000
+0x3ffb3cfc:    0x00000000      0x00000000      0x00000000      0x3ffae88c
+0x3ffb3d0c:    0x3ffae8f4      0x3ffae95c      0x00000000      0x00000000
+0x3ffb3d1c:    0x00000001      0x00000000      0x3f403c78      0x00000000
+0x3ffb3d2c:    0x40001d48      0x00000000      0x00000000      0x00000000
+0x3ffb3d3c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3d4c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3d5c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3d6c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3d7c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3d8c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3d9c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3dac:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3dbc:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3dcc:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3ddc:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3dec:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3dfc:    0xa5a5a500
+.coredump.tasks.data 0x3ffb7360 0x16c RW 
+0x3ffb7360:    0x400821d8      0x4008559e      0x00060230      0x800d2113
+0x3ffb7370:    0x3ffb7420      0x000000d1      0x00000000      0x3ffb106c
+0x3ffb7380:    0x3ffb3c9c      0x00000000      0x00000000      0x8008559e
+0x3ffb7390:    0x3ffb7400      0x00000000      0x000000d1      0x00060023
+0x3ffb73a0:    0x00000001      0x00060021      0x3ffb5b70      0x00000000
+0x3ffb73b0:    0x800d27a4      0x3ffb73e0      0x400014fd      0x4000150d
+0x3ffb73c0:    0xfffffff9      0x400823d1      0x00000001      0x400864e8
+0x3ffb73d0:    0x3ffb077c      0x00000000      0x00000000      0x00000000
+0x3ffb73e0:    0xb33fffff      0x00000000      0x00000000      0x00000000
+0x3ffb73f0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7400:    0x00060023      0x00000001      0x00060021      0x3ffb5b70
+0x3ffb7410:    0x00000000      0x3ffb7440      0x00000000      0x00000000
+0x3ffb7420:    0x3ffb106c      0x3ffb3c9c      0x00000000      0x00000000
+0x3ffb7430:    0x00000000      0x3ffb7460      0x00000000      0x00000000
+0x3ffb7440:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7450:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7460:    0x00000000      0x00000000      0x3ffb746c      0x00000000
+0x3ffb7470:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7480:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb7490:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb74a0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb74b0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb74c0:    0x00000000      0x00000000      0x00000000
+.coredump.tasks.data 0x3ffb3f6c 0x164 RW 
+0x3ffb3f6c:    0x3ffb8370      0x3ffb8470      0x000000d1      0x3ffb3ca4
+0x3ffb3f7c:    0x3ffb2c9c      0x3ffb3f6c      0x3ffb2c94      0x0000000f
+0x3ffb3f8c:    0x3ffb3cb8      0x3ffb6c24      0x3ffb3f6c      0x00000000
+0x3ffb3f9c:    0x0000000a      0x3ffb7cd8      0x6c696166      0x615f6465
+0x3ffb3fac:    0x72657373      0x00745f74      0x00000000      0x3ffb84d4
+0x3ffb3fbc:    0x00000000      0x00060021      0x0000000a      0x00000000
+0x3ffb3fcc:    0x00000000      0x00000000      0x00000000      0x3ffae88c
+0x3ffb3fdc:    0x3ffae8f4      0x3ffae95c      0x00000000      0x00000000
+0x3ffb3fec:    0x00000001      0x00000000      0x3f403c78      0x00000000
+0x3ffb3ffc:    0x40001d48      0x00000000      0x00000000      0x00000000
+0x3ffb400c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb401c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb402c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb403c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb404c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb405c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb406c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb407c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb408c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb409c:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb40ac:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb40bc:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb40cc:    0x00000000
+.coredump.tasks.data 0x3ffb8370 0x164 RW 
+0x3ffb8370:    0x400821d8      0x4008559e      0x00060230      0x800d20a3
+0x3ffb8380:    0x3ffb8430      0x000000d1      0x00000000      0x3ffb106c
+0x3ffb8390:    0x3ffb3f6c      0x00000000      0x00000000      0x8008559e
+0x3ffb83a0:    0x3ffb8410      0x00000000      0x000000d1      0x00060023
+0x3ffb83b0:    0x00000001      0x00060021      0x00000000      0x00000000
+0x3ffb83c0:    0x800d27a4      0x3ffb83f0      0x400014fd      0x4000150d
+0x3ffb83d0:    0xfffffff8      0x400823d1      0x00000001      0x400864e8
+0x3ffb83e0:    0x3ffb178c      0x00000000      0x00000000      0x00000000
+0x3ffb83f0:    0xb33fffff      0x00000000      0x00000000      0x00000000
+0x3ffb8400:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb8410:    0x00060023      0x00000001      0x00060021      0x00000000
+0x3ffb8420:    0x00000000      0x3ffb8450      0x00000000      0x00000000
+0x3ffb8430:    0x3ffb106c      0x3ffb3f6c      0x00000000      0x00000000
+0x3ffb8440:    0x00000000      0x3ffb8470      0x00000000      0x00000000
+0x3ffb8450:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb8460:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb8470:    0x00000000      0x00000000      0x3ffb847c      0x00000000
+0x3ffb8480:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb8490:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb84a0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb84b0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb84c0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb84d0:    0x00000000
+.coredump.tasks.data 0x3ffb66c8 0x164 RW 
+0x3ffb66c8:    0x3ffb6540      0x3ffb6660      0x00000000      0x3ffb2c88
+0x3ffb66d8:    0x3ffb2c88      0x3ffb66c8      0x3ffb2c80      0x00000018
+0x3ffb66e8:    0x3ffb5dfc      0x3ffb5dfc      0x3ffb66c8      0x3ffb5df4
+0x3ffb66f8:    0x00000001      0x3ffb5ec4      0x20726d54      0x00637653
+0x3ffb6708:    0xd39f0f55      0x00a2af81      0x00000000      0x3ffb66c0
+0x3ffb6718:    0x00000000      0x00060021      0x00000001      0x00000000
+0x3ffb6728:    0x00000000      0x00000000      0x00000000      0x3ffae88c
+0x3ffb6738:    0x3ffae8f4      0x3ffae95c      0x00000000      0x00000000
+0x3ffb6748:    0x00000001      0x00000000      0x3f403c78      0x00000000
+0x3ffb6758:    0x40001d48      0x00000000      0x00000000      0x00000000
+0x3ffb6768:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6778:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6788:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6798:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb67a8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb67b8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb67c8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb67d8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb67e8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb67f8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6808:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6818:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6828:    0x97f9e600
+.coredump.tasks.data 0x3ffb6540 0x180 RW 
+0x3ffb6540:    0x400821d8      0x4008629c      0x00060830      0x8008638f
+0x3ffb6550:    0x3ffb6600      0x3ffb2ea8      0x00000000      0x00000001
+0x3ffb6560:    0x3ffb510c      0x00000000      0x00000001      0x8008629c
+0x3ffb6570:    0x3ffb65e0      0x00000000      0x3ffb2c00      0x3ffb5e18
+0x3ffb6580:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6590:    0xa5a5a5a5      0xa5a5a5a5      0x00000000      0x00000000
+0x3ffb65a0:    0x00000000      0x400823d1      0x00000000      0x400864e8
+0x3ffb65b0:    0x3ffaf97c      0x00000000      0x00000000      0x00000000
+0x3ffb65c0:    0xb33fffff      0x00000000      0x00000000      0x00000000
+0x3ffb65d0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb65e0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb65f0:    0x00000000      0x3ffb6630      0x00000000      0x00000000
+0x3ffb6600:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6610:    0x3ffaf97c      0x00000000      0x00000000      0x00000000
+0x3ffb6620:    0x00000000      0x3ffb6660      0x00000000      0x00000000
+0x3ffb6630:    0x00000001      0x00000000      0x00000000      0x00000000
+0x3ffb6640:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6650:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6660:    0x00000000      0x00000000      0x3ffb666c      0x00000000
+0x3ffb6670:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6680:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb6690:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb66a0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb66b0:    0x00000000      0x00000000      0x00000000      0x00000000
+.coredump.tasks.data 0x3ffafa88 0x164 RW 
+0x3ffafa88:    0x3ffaf900      0x3ffafa20      0x5ff990da      0x3ffb3b3c
+0x3ffafa98:    0x3ffafda0      0x3ffafa88      0x3ffb2c24      0x00000003
+0x3ffafaa8:    0x3ffaea5c      0x3ffaea5c      0x3ffafa88      0x3ffaea54
+0x3ffafab8:    0x00000016      0x3ffaea84      0x5f707365      0x656d6974
+0x3ffafac8:    0xe11f0072      0x00f45ee9      0x00000000      0x3ffafa80
+0x3ffafad8:    0x00000000      0x00060021      0x00000016      0x00000000
+0x3ffafae8:    0x00000000      0x00000000      0x00000000      0x3ffae88c
+0x3ffafaf8:    0x3ffae8f4      0x3ffae95c      0x00000000      0x00000000
+0x3ffafb08:    0x00000001      0x00000000      0x3f403c78      0x00000000
+0x3ffafb18:    0x40001d48      0x00000000      0x00000000      0x00000000
+0x3ffafb28:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafb38:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafb48:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafb58:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafb68:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafb78:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafb88:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafb98:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafba8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafbb8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafbc8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafbd8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafbe8:    0x354b8800
+.coredump.tasks.data 0x3ffaf900 0x180 RW 
+0x3ffaf900:    0x400821d8      0x400846ad      0x00060030      0x800d14fb
+0x3ffaf910:    0x3ffaf9c0      0x3ffaea30      0x00000000      0x3ffaea78
+0x3ffaf920:    0x00000000      0x00000001      0x00000001      0x800846ad
+0x3ffaf930:    0x3ffaf9a0      0x00000000      0x3ffb2e9c      0x3ffb2e9c
+0x3ffaf940:    0x00000001      0x00060021      0x00000000      0x00000000
+0x3ffaf950:    0xa5a5a5a5      0xa5a5a5a5      0x00000000      0x00000000
+0x3ffaf960:    0x00000000      0x400823d1      0x00000001      0x400864e8
+0x3ffaf970:    0x3ffa8d3c      0x00000000      0x00000000      0x00000000
+0x3ffaf980:    0xb33fffff      0x00000000      0x00000000      0x00000000
+0x3ffaf990:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffaf9a0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffaf9b0:    0x00000000      0x3ffafa00      0x00000000      0x00000000
+0x3ffaf9c0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffaf9d0:    0xffffffff      0x00000000      0x00000000      0x00000000
+0x3ffaf9e0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffaf9f0:    0x00000000      0x3ffafa20      0x00000000      0x00000000
+0x3ffafa00:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafa10:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafa20:    0x00000000      0x00000000      0x3ffafa2c      0x00000000
+0x3ffafa30:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafa40:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafa50:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafa60:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafa70:    0x00000000      0x00000000      0x00000000      0x00000000
+.coredump.tasks.data 0x3ffb3b34 0x164 RW 
+0x3ffb3b34:    0x3ffb3980      0x3ffb3ac0      0x88083cc0      0x3ffb2c2c
+0x3ffb3b44:    0x3ffafa90      0x3ffb3b34      0x3ffb2c24      0x00000001
+0x3ffb3b54:    0x3ffaff2c      0x3ffaff2c      0x3ffb3b34      0x3ffaff24
+0x3ffb3b64:    0x00000018      0x3ffb3730      0x31637069      0xeff9c300
+0x3ffb3b74:    0xc4c0f656      0x008423ac      0x00000001      0x3ffb3b2c
+0x3ffb3b84:    0x00000000      0x00060021      0x00000018      0x00000000
+0x3ffb3b94:    0x00000000      0x00000000      0x00000000      0x3ffae88c
+0x3ffb3ba4:    0x3ffae8f4      0x3ffae95c      0x00000000      0x00000000
+0x3ffb3bb4:    0x00000001      0x00000000      0x3f403c78      0x00000000
+0x3ffb3bc4:    0x40001d48      0x00000000      0x00000000      0x00000000
+0x3ffb3bd4:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3be4:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3bf4:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3c04:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3c14:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3c24:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3c34:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3c44:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3c54:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3c64:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3c74:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3c84:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3c94:    0x048ed900
+.coredump.tasks.data 0x3ffb3980 0x1ac RW 
+0x3ffb3980:    0x400821d8      0x4008114a      0x00060030      0x800846ad
+0x3ffb3990:    0x3ffb3a40      0x00000001      0x3ffb2e9c      0x3ffb2ea0
+0x3ffb39a0:    0x3ffe7c90      0x00000000      0x00060723      0x8008114a
+0x3ffb39b0:    0x3ffb3a20      0x3ff000e0      0x00000001      0x3ffb102c
+0x3ffb39c0:    0x00000001      0x00060020      0x00060023      0x00000000
+0x3ffb39d0:    0x3ffb3a40      0x00000001      0x00000000      0x00000000
+0x3ffb39e0:    0x00000000      0x400823d1      0x00000001      0x400864e8
+0x3ffb39f0:    0x3ffacddc      0x00000000      0x00000000      0x00000000
+0x3ffb3a00:    0xb33fffff      0x00000000      0x00000000      0x00000000
+0x3ffb3a10:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3a20:    0xb33fffff      0x00000000      0x00000000      0x00000000
+0x3ffb3a30:    0x800811b3      0x3ffb3a60      0x3ffaff00      0x00000000
+0x3ffb3a40:    0x00000001      0x00000001      0x00060020      0x00060023
+0x3ffb3a50:    0x00000000      0x3ffb3aa0      0x00000001      0x40082ff8
+0x3ffb3a60:    0x00000000      0x00000009      0x00000000      0x00060723
+0x3ffb3a70:    0xffffffff      0x3ffb3aa0      0x00000001      0x40082ff8
+0x3ffb3a80:    0x3ffaff48      0x00000000      0x00000001      0x00000000
+0x3ffb3a90:    0x00000000      0x3ffb3ac0      0x00000000      0x00000000
+0x3ffb3aa0:    0x00000001      0x00000000      0x00000000      0x00000000
+0x3ffb3ab0:    0x80080f2c      0x3ffe7d80      0x00000028      0x00000028
+0x3ffb3ac0:    0x00000000      0x00000000      0x3ffb3acc      0x00000000
+0x3ffb3ad0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3ae0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3af0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3b00:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3b10:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3b20:    0x00000000      0x00000000      0x00000000
+.coredump.tasks.data 0x3ffafd98 0x164 RW 
+0x3ffafd98:    0x3ffb35a0      0x3ffb36c0      0x73fa8154      0x3ffafa90
+0x3ffafda8:    0x3ffb2c2c      0x3ffafd98      0x3ffb2c24      0x00000001
+0x3ffafdb8:    0x3ffafd70      0x3ffafd70      0x3ffafd98      0x3ffafd68
+0x3ffafdc8:    0x00000018      0x3ffb332c      0x30637069      0x1e3d8600
+0x3ffafdd8:    0xfe7fd40a      0x0014a8b5      0x00000000      0x3ffb3728
+0x3ffafde8:    0x00000000      0x00060021      0x00000018      0x00000000
+0x3ffafdf8:    0x00000000      0x00000000      0x00000000      0x3ffae88c
+0x3ffafe08:    0x3ffae8f4      0x3ffae95c      0x00000000      0x00000000
+0x3ffafe18:    0x00000001      0x00000000      0x3f403c78      0x00000000
+0x3ffafe28:    0x40001d48      0x00000000      0x00000000      0x00000000
+0x3ffafe38:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafe48:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafe58:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafe68:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafe78:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafe88:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafe98:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafea8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafeb8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafec8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafed8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafee8:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffafef8:    0x7eb2c400
+.coredump.tasks.data 0x3ffb35a0 0x188 RW 
+0x3ffb35a0:    0x400821d8      0x400846ad      0x00060030      0x800811b3
+0x3ffb35b0:    0x3ffb3660      0x3ffafd44      0x00000000      0x3ffafd8c
+0x3ffb35c0:    0x00000000      0x00000001      0x00000001      0x800846ad
+0x3ffb35d0:    0x3ffb3640      0x00000000      0x3ffb2e9c      0x3ffb2e9c
+0x3ffb35e0:    0x3ffe3af0      0x00000000      0x00000002      0x00000000
+0x3ffb35f0:    0xa5a5a5a5      0xa5a5a5a5      0x00000000      0x00000000
+0x3ffb3600:    0x00000000      0x400823d1      0x3ffe3af0      0x400864e8
+0x3ffb3610:    0x3ffac9dc      0x00000000      0x00000000      0x00000000
+0x3ffb3620:    0xb33fffff      0x00000000      0x00000000      0x00000000
+0x3ffb3630:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3640:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3650:    0x00000000      0x3ffb36a0      0x00000000      0x00000000
+0x3ffb3660:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3670:    0xffffffff      0x00000000      0x00000000      0x00000000
+0x3ffb3680:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3690:    0x00000000      0x3ffb36c0      0x00000000      0x00000000
+0x3ffb36a0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb36b0:    0x80080eaa      0x3ffe3ba0      0x3ffb2c0c      0x3ffb2ee4
+0x3ffb36c0:    0x00000000      0x00000000      0x3ffb36cc      0x00000000
+0x3ffb36d0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb36e0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb36f0:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3700:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3710:    0x00000000      0x00000000      0x00000000      0x00000000
+0x3ffb3720:    0x00000000      0x00000000
+
+===================== ESP32 CORE DUMP END =====================
+===============================================================
+Done!
diff --git a/components/espcoredump/test/test.elf b/components/espcoredump/test/test.elf
new file mode 100644 (file)
index 0000000..7470332
Binary files /dev/null and b/components/espcoredump/test/test.elf differ
diff --git a/components/espcoredump/test/test_espcoredump.py b/components/espcoredump/test/test_espcoredump.py
new file mode 100755 (executable)
index 0000000..6b7da26
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+#
+# Copyright 2018 Espressif Systems (Shanghai) PTE LTD
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import sys
+import os
+import unittest
+
+idf_path = os.getenv('IDF_PATH')
+if idf_path:
+    sys.path.insert(0, os.path.join(idf_path, 'components', 'espcoredump'))
+import espcoredump
+
+class TestESPCoreDumpFileLoader(unittest.TestCase):
+    def setUp(self):
+        self.tmp_file = 'tmp'
+        self.dloader = espcoredump.ESPCoreDumpFileLoader(path='coredump.b64', b64=True)
+        self.assertIsInstance(self.dloader, espcoredump.ESPCoreDumpFileLoader)
+
+    def tearDown(self):
+        self.dloader.cleanup()
+
+    def testESPCoreDumpFileLoaderWithoutB64(self):
+        t = espcoredump.ESPCoreDumpFileLoader(path='coredump.b64', b64=False)
+        self.assertIsInstance(t, espcoredump.ESPCoreDumpFileLoader) # invoke for coverage of open()
+        t.cleanup()
+
+    def test_cannot_remove_dir(self):
+        self.dloader.remove_tmp_file(fname='.') # silent failure (but covers exception inside)
+
+    def test_create_corefile(self):
+        self.assertEqual(self.dloader.create_corefile(core_fname=self.tmp_file, off=0, rom_elf=None), self.tmp_file)
+
+if __name__ == '__main__':
+    # The purpose of these tests is to increase the code coverage at places which are sensitive to issues related to
+    # Python 2&3 compatibility.
+    # The espcoredump is not suited for through unit testting. There lot of nested functions, interactive
+    # communication with the developement board and GDB, ...
+    unittest.main()
diff --git a/components/espcoredump/test/test_espcoredump.sh b/components/espcoredump/test/test_espcoredump.sh
new file mode 100755 (executable)
index 0000000..8a8499c
--- /dev/null
@@ -0,0 +1,10 @@
+#! /bin/bash
+
+{ coverage debug sys \
+    && coverage erase \
+    && coverage run -a --source=espcoredump ../espcoredump.py info_corefile -m -t b64 -c coredump.b64 test.elf &> output \
+    && diff expected_output output \
+    && coverage run -a --source=espcoredump ./test_espcoredump.py \
+    && coverage report \
+; } || { echo 'The test for espcoredump has failed!'; exit 1; }
+
index fbb00ae8dedd10b8bf3543675b7b8ff0a98b96ae..24e22f4b2ac730014d7bc240db12c0f22b4b3611 100644 (file)
@@ -64,4 +64,5 @@ tools/test_idf_size/test.sh
 tools/check_python_dependencies.py
 docs/gen-dxd.py
 tools/ci/multirun_with_pyenv.sh
-
+components/espcoredump/test/test_espcoredump.py
+components/espcoredump/test/test_espcoredump.sh