[Cc: linux-m68k] On Fri, 10 Mar 2023, I wrote:
> root@panmac:~# gdb --core core.0 > GNU gdb (Debian 13.1-2) 13.1 > Copyright (C) 2023 Free Software Foundation, Inc. > License GPLv3+: GNU GPL version 3 or later > <http://gnu.org/licenses/gpl.html> > This is free software: you are free to change and redistribute it. > There is NO WARRANTY, to the extent permitted by law. > Type "show copying" and "show warranty" for details. > This GDB was configured as "m68k-linux-gnu". > Type "show configuration" for configuration details. > For bug reporting instructions, please see: > <https://www.gnu.org/software/gdb/bugs/>. > Find the GDB manual and other documentation resources online at: > <http://www.gnu.org/software/gdb/documentation/>. > > For help, type "help". > Type "apropos word" to search for commands related to "word". > "/root/core.0": Core file format not supported > (gdb) quit I was able to run gdb under gdb to get a few hints. Here's the error message: if (!m_core_gdbarch || !gdbarch_iterate_over_regset_sections_p (m_core_gdbarch)) error (_("\"%s\": Core file format not supported"), bfd_get_filename (core_bfd)); And the reason for the message: bool gdbarch_iterate_over_regset_sections_p (struct gdbarch *gdbarch) { gdb_assert (gdbarch != NULL); return gdbarch->iterate_over_regset_sections != NULL; } So gdbarch->iterate_over_regset_sections == NULL somehow: (gdb) print *m_core_gdbarch $3 = {initialized_p = true, obstack = {<obstack> = {chunk_size = 4064, chunk = 0x8092bf80, object_base = 0x8092bfb8 "", next_free = 0x8092bfb8 "", chunk_limit = 0x8092cf60 "", temp = { i = 853591194, p = 0x32e0c49a}, alignment_mask = 1, chunkfun = { plain = 0x800791d8 <xmalloc(size_t)>, extra = 0x800791d8 <xmalloc(size_t)>}, freefun = { plain = 0x8007b5d2 <xfree<void>(void*)>, extra = 0x8007b5d2 <xfree<void>(void*)>}, extra_arg = 0x3300c49a, use_extra_arg = 0, maybe_empty_object = 0, alloc_failed = 0}, <No data fields>}, registry_fields = { m_fields = std::vector of length 23, capacity 23 = {0x0, 0x0, 0x0, 0x0, 0x8090b608, 0x8090b5f8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, bfd_arch_info = 0x80795aae <bfd_m68k_arch>, byte_order = BFD_ENDIAN_BIG, byte_order_for_code = BFD_ENDIAN_BIG, osabi = GDB_OSABI_SVR4, target_desc = 0x0, tdep = 0x808e7fb0, dump_tdep = 0x8028c242 <m68k_dump_tdep(gdbarch*, ui_file*)>, nr_data = 0, data = 0x0, short_bit = 16, int_bit = 32, long_bit = 32, long_long_bit = 64, bfloat16_bit = 16, bfloat16_format = 0x807b545a <floatformats_bfloat16>, half_bit = 16, half_format = 0x807b54ba <floatformats_ieee_half>, float_bit = 32, float_format = 0x807b54b2 <floatformats_ieee_single>, double_bit = 64, double_format = 0x807b54aa <floatformats_ieee_double>, long_double_bit = 96, long_double_format = 0x807b548a <floatformats_m68881_ext>, wchar_bit = 32, wchar_signed = 1, floatformat_for_type = 0x8007d812 <default_floatformat_for_type(gdbarch*, char const*, int)>, ptr_bit = 32, addr_bit = 32, dwarf2_addr_size = 4, char_signed = 1, read_pc = 0x0, write_pc = 0x0, virtual_frame_pointer = 0x8007f5c2 <legacy_virtual_frame_pointer(gdbarch*, unsigned long long, int*, long long*)>, pseudo_register_read = 0x0, pseudo_register_read_value = 0x0, pseudo_register_write = 0x0, num_regs = 29, num_pseudo_regs = 0, ax_pseudo_register_collect = 0x0, ax_pseudo_register_push_stack = 0x0, report_signal_info = 0x0, sp_regnum = 15, pc_regnum = 17, ps_regnum = 16, fp0_regnum = 18, stab_reg_to_regnum = 0x8007b4ba <no_op_reg_to_regnum(gdbarch*, int)>, ecoff_reg_to_regnum = 0x8007b4ba <no_op_reg_to_regnum(gdbarch*, int)>, sdb_reg_to_regnum = 0x8007b4ba <no_op_reg_to_regnum(gdbarch*, int)>, dwarf2_reg_to_regnum = 0x8028c298 <m68k_dwarf_reg_to_regnum(gdbarch*, int)>, register_name = 0x8028c248 <m68k_register_name(gdbarch*, int)>, register_type = 0x8028ca62 <m68k_register_type(gdbarch*, int)>, dummy_id = 0x8028e526 <m68k_dummy_id(gdbarch*, frame_info_ptr)>, deprecated_fp_regnum = -1, push_dummy_call = 0x8028c838 <m68k_push_dummy_call(gdbarch*, value*, regcache*, CORE_ADDR, int, value**, CORE_ADDR, function_call_return_method, CORE_ADDR)>, call_dummy_location = AT_ENTRY_POINT, push_dummy_code = 0x0, code_of_frame_writable = 0x8007b4a2 <default_code_of_frame_writable(gdbarch*, frame_info_ptr)>, print_registers_info = 0x8022edfc <default_print_registers_info(gdbarch*, ui_file*, frame_info_ptr, int, int)>, print_float_info = 0x8022f840 <default_print_float_info(gdbarch*, ui_file*, frame_info_ptr, char const*)>, print_vector_info = 0x0, register_sim_regno = 0x8007f228 <legacy_register_sim_regno(gdbarch*, int)>, cannot_fetch_register = 0x8007b4dc <cannot_register_not(gdbarch*, int)>, cannot_store_register = 0x8007b4dc <cannot_register_not(gdbarch*, int)>, get_longjmp_target = 0x0, believe_pcc_promotion = 1, convert_register_p = 0x8028cd58 <m68k_convert_register_p(gdbarch*, int, type*)>, register_to_value = 0x8028e926 <m68k_register_to_value(frame_info_ptr, int, type*, gdb_byte*, int*, int*)>, value_to_register = 0x8028e700 <m68k_value_to_register(frame_info_ptr, int, type*, gdb_byte const*)>, value_from_register = 0x801f5370 <default_value_from_register(gdbarch*, type*, int, frame_id)>, pointer_to_address = 0x801f5092 <unsigned_pointer_to_address(gdbarch*, type*, unsigned char const*)>, address_to_pointer = 0x801f50ee <unsigned_address_to_pointer(gdbarch*, type*, unsigned char*, unsigned long long)>, integer_to_address = 0x0, return_value = 0x8028c04a <m68k_svr4_return_value(gdbarch*, value*, type*, regcache*, gdb_byte*, gdb_byte const*)>, get_return_buf_addr = 0x8007b50e <default_get_return_buf_addr(type*, frame_info_ptr)>, return_in_first_hidden_param_p = 0x8028bc3c <m68k_return_in_first_hidden_param_p(gdbarch*, type*)>, skip_prologue = 0x8028c7e2 <m68k_skip_prologue(gdbarch*, CORE_ADDR)>, skip_main_prologue = 0x0, skip_entrypoint = 0x0, inner_than = 0x8007b984 <core_addr_lessthan(unsigned long long, unsigned long long)>, breakpoint_from_pc = 0x80081c1c <default_breakpoint_from_pc(gdbarch*, unsigned long long*, int*)>, breakpoint_kind_from_pc = 0x8028bc56 <bp_manipulation<2, &m68k_break_insn>::kind_from_pc(gdbarch*, CORE_ADDR*)>, sw_breakpoint_from_kind = 0x8028bc5a <bp_manipulation<2, &m68k_break_insn>::bp_from_kind(gdbarch*, int, int*)>, breakpoint_kind_from_current_state = 0x80081b28 <default_breakpoint_kind_from_current_state(gdbarch*, regcache*, unsigned long long*)>, adjust_breakpoint_address = 0x0, memory_insert_breakpoint = 0x802a5ba4 <default_memory_insert_breakpoint(gdbarch*, bp_target_info*)>, memory_remove_breakpoint = 0x802a5c34 <default_memory_remove_breakpoint(gdbarch*, bp_target_info*)>, decr_pc_after_break = 0, deprecated_function_start_offset = 0, remote_register_number = 0x8007b770 <default_remote_register_number(gdbarch*, int)>, fetch_tls_load_module_address = 0x0, get_thread_local_address = 0x0, frame_args_skip = 8, unwind_pc = 0x8028e442 <m68k_unwind_pc(gdbarch*, frame_info_ptr)>, unwind_sp = 0x801fa23c <default_unwind_sp(gdbarch*, frame_info_ptr)>, frame_num_args = 0x0, frame_align = 0x8028bc30 <m68k_frame_align(gdbarch*, CORE_ADDR)>, stabs_argument_has_addr = 0x8007b4e4 <default_stabs_argument_has_addr(gdbarch*, type*)>, frame_red_zone_size = 0, convert_from_func_ptr_addr = 0x8007b4b0 <convert_from_func_ptr_addr_identity(gdbarch*, unsigned long long, target_ops*)>, addr_bits_remove = 0x8007b4a6 <core_addr_identity(gdbarch*, unsigned long long)>, remove_non_address_bits = 0x8007b756 <default_remove_non_address_bits(gdbarch*, unsigned long long)>, memtag_to_string = 0x8007b514 <default_memtag_to_string[abi:cxx11](gdbarch*, value*)>, tagged_address_p = 0x8007b47c <default_tagged_address_p(gdbarch*, value*)>, memtag_matches_p = 0x8007b480 <default_memtag_matches_p(gdbarch*, value*)>, set_memtags = 0x8007b484 <default_set_memtags(gdbarch*, value*, unsigned int, std::vector<unsigned char, gdb::default_init_allocator<unsigned char, std::allocator<unsigned char> > > const&, memtag_type)>, get_memtag = 0x8007b488 <default_get_memtag(gdbarch*, value*, memtag_type)>, memtag_granule_size = 0, software_single_step = 0x0, single_step_through_delay = 0x0, print_insn = 0x8007b696 <default_print_insn(unsigned long, disassemble_info*)>, skip_trampoline_code = 0x8007b48e <generic_skip_trampoline_code(frame_info_ptr, unsigned long long)>, so_ops = 0x80791610 <solib_target_so_ops>, skip_solib_resolver = 0x8007b494 <generic_skip_solib_resolver(gdbarch*, unsigned long long)>, in_solib_return_trampoline = 0x8007b49a <generic_in_solib_return_trampoline(gdbarch*, unsigned long long, char const*)>, in_indirect_branch_thunk = 0x8007b502 <default_in_indirect_branch_thunk(gdbarch*, unsigned long long)>, stack_frame_destroyed_p = 0x8007b49e <generic_stack_frame_destroyed_p(gdbarch*, unsigned long long)>, elf_make_msymbol_special = 0x0, coff_make_msymbol_special = 0x8007b4c0 <default_coff_make_msymbol_special(int, minimal_symbol*)>, make_symbol_special = 0x8007b4c2 <default_make_symbol_special(symbol*, objfile*)>, adjust_dwarf2_addr = 0x8007b4c4 <default_adjust_dwarf2_addr(unsigned long long)>, adjust_dwarf2_line = 0x8007b4ce <default_adjust_dwarf2_line(unsigned long long, int)>, cannot_step_breakpoint = 0, have_nonsteppable_watchpoint = 0, address_class_type_flags = 0x0, address_class_type_flags_to_name = 0x0, execute_dwarf_cfa_vendor_op = 0x8007b4d8 <default_execute_dwarf_cfa_vendor_op(gdbarch*, unsigned char, dwarf2_frame_state*)>, address_class_name_to_type_flags = 0x0, register_reggroup_p = 0x80351864 <default_register_reggroup_p(gdbarch*, int, reggroup const*)>, fetch_pointer_argument = 0x0, iterate_over_regset_sections = 0x0, make_corefile_notes = 0x0, find_memory_regions = 0x0, create_memtag_section = 0x0, fill_memtag_section = 0x0, decode_memtag_section = 0x0, core_xfer_shared_libraries = 0x0, core_xfer_shared_libraries_aix = 0x0, core_pid_to_str = 0x0, core_thread_name = 0x0, core_xfer_siginfo = 0x0, gcore_bfd_target = 0x0, vtable_function_descriptors = 0, vbit_in_delta = 0, skip_permanent_breakpoint = 0x80081932 <default_skip_permanent_breakpoint(regcache*)>, max_insn_length = 0, displaced_step_copy_insn = 0x0, displaced_step_hw_singlestep = 0x80083572 <default_displaced_step_hw_singlestep(gdbarch*)>, displaced_step_fixup = 0x0, displaced_step_prepare = 0x0, displaced_step_finish = 0x0, displaced_step_copy_insn_closure_by_addr = 0x0, displaced_step_restore_all_in_ptid = 0x0, relocate_instruction = 0x0, overlay_update = 0x0, core_read_description = 0x0, sofun_address_maybe_missing = 0, process_record = 0x0, process_record_signal = 0x0, gdb_signal_from_target = 0x0, gdb_signal_to_target = 0x0, get_siginfo_type = 0x0, record_special_symbol = 0x0, get_syscall_number = 0x0, xml_syscall_file = 0x0, syscalls_info = 0x0, stap_integer_prefixes = 0x0, stap_integer_suffixes = 0x0, stap_register_prefixes = 0x0, stap_register_suffixes = 0x0, stap_register_indirection_prefixes = 0x0, stap_register_indirection_suffixes = 0x0, stap_gdb_register_prefix = 0x0, stap_gdb_register_suffix = 0x0, stap_is_single_operand = 0x0, stap_parse_special_token = 0x0, stap_adjust_register = 0x0, dtrace_parse_probe_argument = 0x0, dtrace_probe_is_enabled = 0x0, dtrace_enable_probe = 0x0, dtrace_disable_probe = 0x0, has_global_solist = 0, has_global_breakpoints = 0, has_shared_address_space = 0x8007b4e8 <default_has_shared_address_space(gdbarch*)>, fast_tracepoint_valid_at = 0x8007b4ec <default_fast_tracepoint_valid_at(gdbarch*, unsigned long long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)>, guess_tracepoint_registers = 0x8007eb92 <default_guess_tracepoint_registers(gdbarch*, regcache*, unsigned long long)>, auto_charset = 0x800f3e5a <default_auto_charset()>, auto_wide_charset = 0x800f3e74 <default_auto_wide_charset()>, solib_symbols_extension = 0x0, has_dos_based_file_system = 0, gen_return_address = 0x8007b534 <default_gen_return_address(gdbarch*, agent_expr*, axs_value*, unsigned long long)>, info_proc = 0x0, core_info_proc = 0x0, iterate_over_objfiles_in_search_order = 0x802d77dc <default_iterate_over_objfiles_in_search_order(gdbarch*, gdb::function_view<bool (objfile*)>, objfile*)>, ravenscar_ops = 0x0, insn_is_call = 0x8007b760 <default_insn_is_call(gdbarch*, unsigned long long)>, insn_is_ret = 0x8007b764 <default_insn_is_ret(gdbarch*, unsigned long long)>, insn_is_jump = 0x8007b768 <default_insn_is_jump(gdbarch*, unsigned long long)>, program_breakpoint_here_p = 0x800819a2 <default_program_breakpoint_here_p(gdbarch*, unsigned long long)>, auxv_parse = 0x0, print_auxv_entry = 0x80096fda <default_print_auxv_entry(gdbarch*, ui_file*, unsigned long long, unsigned long long)>, vsyscall_range = 0x8007b76c <default_vsyscall_range(gdbarch*, mem_range*)>, infcall_mmap = 0x8007b554 <default_infcall_mmap(unsigned long long, unsigned int)>, infcall_munmap = 0x8007b500 <default_infcall_munmap(unsigned long long, unsigned long long)>, gcc_target_options = 0x8007dbbe <default_gcc_target_options[abi:cxx11](gdbarch*)>, gnu_triplet_regexp = 0x8007ce2e <default_gnu_triplet_regexp(gdbarch*)>, addressable_memory_unit_size = 0x8007ce42 <default_addressable_memory_unit_size(gdbarch*)>, disassembler_options_implicit = 0x0, disassembler_options = 0x0, valid_disassembler_options = 0x0, type_align = 0x8007b506 <default_type_align(gdbarch*, type*)>, get_pc_address_flags = 0x8007b776 <default_get_pc_address_flags[abi:cxx11](frame_info_ptr, unsigned long long)>, read_core_file_mappings = 0x8007b50c <default_read_core_file_mappings(gdbarch*, bfd*, gdb::function_view<void (unsigned long long)>, gdb::function_view<void (int, unsigned long long, unsigned long long, unsigned long long, char const*, bfd_build_id const*)>)>} (gdb) (gdb) But it should get initialized in m68k_linux_init_abi()... https://sources.debian.org/src/gdb/13.1-2/gdb/m68k-linux-tdep.c/?hl=385#L385 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); /* Core file support. */ set_gdbarch_iterate_over_regset_sections (gdbarch, m68k_linux_iterate_over_regset_sections); Yet somehow iterate_over_regset_sections ends up NULL. I could not see why that happened so I built the current upstream snapshot (at the time), gdb-14.0.50.20230316. That took a few attempts and a couple of days of building, but it has the same problem: # /opt/gdb-14.0.50.20230316/bin/gdb GNU gdb (GDB) 14.0.50.20230316-git Copyright (C) 2023 Free Software Foundation, Inc. ... (gdb) core ~/core.0 "/root/core.0": Core file format not supported (gdb) I guess the next step will be a formal bug report.