diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 68b22aca6..6f6d863d0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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 diff --git a/components/espcoredump/espcoredump.py b/components/espcoredump/espcoredump.py index 321941fd1..7f024eb5f 100755 --- a/components/espcoredump/espcoredump.py +++ b/components/espcoredump/espcoredump.py @@ -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 index 000000000..bf369290c --- /dev/null +++ b/components/espcoredump/test/coredump.b64 @@ -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 index 000000000..4056fdb0f --- /dev/null +++ b/components/espcoredump/test/expected_output @@ -0,0 +1,540 @@ +espcoredump.py v0.2-dev +=============================================================== +==================== ESP32 CORE DUMP START ==================== + +================== CURRENT THREAD REGISTERS =================== +pc 0x400d216d 0x400d216d +lbeg 0x400014fd 1073747197 +lend 0x4000150d 1073747213 +lcount 0xffffffff 4294967295 +sar 0x0 0 +ps 0x60420 394272 +threadptr +br +scompare1 +acclo +acchi +m0 +m1 +m2 +m3 +expstate +f64r_lo +f64r_hi +f64s +fcr +fsr +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=, xListWasEmpty=) at /home/dragon/esp/esp-idf/components/freertos/timers.c:588 + 5 process 4 0x4008559e in vTaskDelay (xTicksToDelay=) at /home/dragon/esp/esp-idf/components/freertos/tasks.c:1491 + 4 process 3 0x4008559e in vTaskDelay (xTicksToDelay=) 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
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 index 000000000..747033240 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 index 000000000..6b7da2612 --- /dev/null +++ b/components/espcoredump/test/test_espcoredump.py @@ -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 index 000000000..8a8499ce4 --- /dev/null +++ b/components/espcoredump/test/test_espcoredump.sh @@ -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; } + diff --git a/tools/ci/executable-list.txt b/tools/ci/executable-list.txt index fbb00ae8d..24e22f4b2 100644 --- a/tools/ci/executable-list.txt +++ b/tools/ci/executable-list.txt @@ -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