public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Use enum for call_dummy_location
@ 2022-10-18 16:15 Tom Tromey
  2022-10-18 16:15 ` [PATCH 1/2] Inline initialization of gdbarch members Tom Tromey
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Tom Tromey @ 2022-10-18 16:15 UTC (permalink / raw)
  To: gdb-patches

I wanted to change the gdbarch call_dummy_location to use an enum,
instead of a couple of #defines.  This required a bit of work in
gdbarch.py, and this series is the result.

Tom



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] Inline initialization of gdbarch members
  2022-10-18 16:15 [PATCH 0/2] Use enum for call_dummy_location Tom Tromey
@ 2022-10-18 16:15 ` Tom Tromey
  2022-10-26  9:33   ` Bruno Larsen
  2022-10-18 16:15 ` [PATCH 2/2] Use enum for gdbarch's call_dummy_location Tom Tromey
  2022-10-26 11:25 ` [PATCH 0/2] Use enum for call_dummy_location Luis Machado
  2 siblings, 1 reply; 7+ messages in thread
From: Tom Tromey @ 2022-10-18 16:15 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

This changes gdbarch to use the "predefault" to initialize its members
inline.  This required changing a couple of the Value instantiations
to avoid a use of "gdbarch" during initialization, but on the whole I
think this is better -- it removes a hidden ordering dependency.
---
 gdb/gdbarch-components.py |   8 +-
 gdb/gdbarch.c             | 290 +++++++++++++-------------------------
 gdb/gdbarch.py            |  19 +--
 3 files changed, 111 insertions(+), 206 deletions(-)

diff --git a/gdb/gdbarch-components.py b/gdb/gdbarch-components.py
index 46e7565f293..c997a709cbb 100644
--- a/gdb/gdbarch-components.py
+++ b/gdb/gdbarch-components.py
@@ -151,7 +151,7 @@ Number of bits in a short or unsigned short for the target machine.
     invalid=False,
 )
 
-Value(
+int_bit = Value(
     comment="""
 Number of bits in an int or unsigned int for the target machine.
 """,
@@ -161,7 +161,7 @@ Number of bits in an int or unsigned int for the target machine.
     invalid=False,
 )
 
-Value(
+long_bit = Value(
     comment="""
 Number of bits in a long or unsigned long for the target machine.
 """,
@@ -178,7 +178,7 @@ machine.
 """,
     type="int",
     name="long_long_bit",
-    predefault="2*gdbarch->long_bit",
+    predefault="2*" + long_bit.predefault,
     invalid=False,
 )
 
@@ -314,7 +314,7 @@ ptr_bit is the size of a pointer on the target
 """,
     type="int",
     name="ptr_bit",
-    predefault="gdbarch->int_bit",
+    predefault=int_bit.predefault,
     invalid=False,
 )
 
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
index 559e92dee58..5545cfdad8e 100644
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -52,124 +52,124 @@ struct gdbarch
   unsigned nr_data = 0;
   void **data = nullptr;
 
-  int short_bit = 0;
-  int int_bit = 0;
-  int long_bit = 0;
-  int long_long_bit = 0;
-  int bfloat16_bit = 0;
+  int short_bit = 2*TARGET_CHAR_BIT;
+  int int_bit = 4*TARGET_CHAR_BIT;
+  int long_bit = 4*TARGET_CHAR_BIT;
+  int long_long_bit = 2*4*TARGET_CHAR_BIT;
+  int bfloat16_bit = 2*TARGET_CHAR_BIT;
   const struct floatformat ** bfloat16_format = 0;
-  int half_bit = 0;
+  int half_bit = 2*TARGET_CHAR_BIT;
   const struct floatformat ** half_format = 0;
-  int float_bit = 0;
+  int float_bit = 4*TARGET_CHAR_BIT;
   const struct floatformat ** float_format = 0;
-  int double_bit = 0;
+  int double_bit = 8*TARGET_CHAR_BIT;
   const struct floatformat ** double_format = 0;
-  int long_double_bit = 0;
+  int long_double_bit = 8*TARGET_CHAR_BIT;
   const struct floatformat ** long_double_format = 0;
-  int wchar_bit = 0;
-  int wchar_signed = 0;
-  gdbarch_floatformat_for_type_ftype *floatformat_for_type = nullptr;
-  int ptr_bit = 0;
+  int wchar_bit = 4*TARGET_CHAR_BIT;
+  int wchar_signed = -1;
+  gdbarch_floatformat_for_type_ftype *floatformat_for_type = default_floatformat_for_type;
+  int ptr_bit = 4*TARGET_CHAR_BIT;
   int addr_bit = 0;
   int dwarf2_addr_size = 0;
-  int char_signed = 0;
+  int char_signed = -1;
   gdbarch_read_pc_ftype *read_pc = nullptr;
   gdbarch_write_pc_ftype *write_pc = nullptr;
-  gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer = nullptr;
+  gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer = legacy_virtual_frame_pointer;
   gdbarch_pseudo_register_read_ftype *pseudo_register_read = nullptr;
   gdbarch_pseudo_register_read_value_ftype *pseudo_register_read_value = nullptr;
   gdbarch_pseudo_register_write_ftype *pseudo_register_write = nullptr;
-  int num_regs = 0;
+  int num_regs = -1;
   int num_pseudo_regs = 0;
   gdbarch_ax_pseudo_register_collect_ftype *ax_pseudo_register_collect = nullptr;
   gdbarch_ax_pseudo_register_push_stack_ftype *ax_pseudo_register_push_stack = nullptr;
   gdbarch_report_signal_info_ftype *report_signal_info = nullptr;
-  int sp_regnum = 0;
-  int pc_regnum = 0;
-  int ps_regnum = 0;
-  int fp0_regnum = 0;
-  gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum = nullptr;
-  gdbarch_ecoff_reg_to_regnum_ftype *ecoff_reg_to_regnum = nullptr;
-  gdbarch_sdb_reg_to_regnum_ftype *sdb_reg_to_regnum = nullptr;
-  gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum = nullptr;
-  gdbarch_register_name_ftype *register_name = nullptr;
+  int sp_regnum = -1;
+  int pc_regnum = -1;
+  int ps_regnum = -1;
+  int fp0_regnum = -1;
+  gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum = no_op_reg_to_regnum;
+  gdbarch_ecoff_reg_to_regnum_ftype *ecoff_reg_to_regnum = no_op_reg_to_regnum;
+  gdbarch_sdb_reg_to_regnum_ftype *sdb_reg_to_regnum = no_op_reg_to_regnum;
+  gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum = no_op_reg_to_regnum;
+  gdbarch_register_name_ftype *register_name = 0;
   gdbarch_register_type_ftype *register_type = nullptr;
-  gdbarch_dummy_id_ftype *dummy_id = nullptr;
-  int deprecated_fp_regnum = 0;
+  gdbarch_dummy_id_ftype *dummy_id = default_dummy_id;
+  int deprecated_fp_regnum = -1;
   gdbarch_push_dummy_call_ftype *push_dummy_call = nullptr;
-  int call_dummy_location = 0;
+  int call_dummy_location = AT_ENTRY_POINT;
   gdbarch_push_dummy_code_ftype *push_dummy_code = nullptr;
-  gdbarch_code_of_frame_writable_ftype *code_of_frame_writable = nullptr;
-  gdbarch_print_registers_info_ftype *print_registers_info = nullptr;
-  gdbarch_print_float_info_ftype *print_float_info = nullptr;
+  gdbarch_code_of_frame_writable_ftype *code_of_frame_writable = default_code_of_frame_writable;
+  gdbarch_print_registers_info_ftype *print_registers_info = default_print_registers_info;
+  gdbarch_print_float_info_ftype *print_float_info = default_print_float_info;
   gdbarch_print_vector_info_ftype *print_vector_info = nullptr;
-  gdbarch_register_sim_regno_ftype *register_sim_regno = nullptr;
-  gdbarch_cannot_fetch_register_ftype *cannot_fetch_register = nullptr;
-  gdbarch_cannot_store_register_ftype *cannot_store_register = nullptr;
+  gdbarch_register_sim_regno_ftype *register_sim_regno = legacy_register_sim_regno;
+  gdbarch_cannot_fetch_register_ftype *cannot_fetch_register = cannot_register_not;
+  gdbarch_cannot_store_register_ftype *cannot_store_register = cannot_register_not;
   gdbarch_get_longjmp_target_ftype *get_longjmp_target = nullptr;
   int believe_pcc_promotion = 0;
-  gdbarch_convert_register_p_ftype *convert_register_p = nullptr;
+  gdbarch_convert_register_p_ftype *convert_register_p = generic_convert_register_p;
   gdbarch_register_to_value_ftype *register_to_value = nullptr;
   gdbarch_value_to_register_ftype *value_to_register = nullptr;
-  gdbarch_value_from_register_ftype *value_from_register = nullptr;
-  gdbarch_pointer_to_address_ftype *pointer_to_address = nullptr;
-  gdbarch_address_to_pointer_ftype *address_to_pointer = nullptr;
+  gdbarch_value_from_register_ftype *value_from_register = default_value_from_register;
+  gdbarch_pointer_to_address_ftype *pointer_to_address = unsigned_pointer_to_address;
+  gdbarch_address_to_pointer_ftype *address_to_pointer = unsigned_address_to_pointer;
   gdbarch_integer_to_address_ftype *integer_to_address = nullptr;
   gdbarch_return_value_ftype *return_value = nullptr;
-  gdbarch_return_in_first_hidden_param_p_ftype *return_in_first_hidden_param_p = nullptr;
-  gdbarch_skip_prologue_ftype *skip_prologue = nullptr;
+  gdbarch_return_in_first_hidden_param_p_ftype *return_in_first_hidden_param_p = default_return_in_first_hidden_param_p;
+  gdbarch_skip_prologue_ftype *skip_prologue = 0;
   gdbarch_skip_main_prologue_ftype *skip_main_prologue = nullptr;
   gdbarch_skip_entrypoint_ftype *skip_entrypoint = nullptr;
-  gdbarch_inner_than_ftype *inner_than = nullptr;
-  gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc = nullptr;
-  gdbarch_breakpoint_kind_from_pc_ftype *breakpoint_kind_from_pc = nullptr;
-  gdbarch_sw_breakpoint_from_kind_ftype *sw_breakpoint_from_kind = nullptr;
-  gdbarch_breakpoint_kind_from_current_state_ftype *breakpoint_kind_from_current_state = nullptr;
+  gdbarch_inner_than_ftype *inner_than = 0;
+  gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc = default_breakpoint_from_pc;
+  gdbarch_breakpoint_kind_from_pc_ftype *breakpoint_kind_from_pc = 0;
+  gdbarch_sw_breakpoint_from_kind_ftype *sw_breakpoint_from_kind = NULL;
+  gdbarch_breakpoint_kind_from_current_state_ftype *breakpoint_kind_from_current_state = default_breakpoint_kind_from_current_state;
   gdbarch_adjust_breakpoint_address_ftype *adjust_breakpoint_address = nullptr;
-  gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint = nullptr;
-  gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint = nullptr;
+  gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint = default_memory_insert_breakpoint;
+  gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint = default_memory_remove_breakpoint;
   CORE_ADDR decr_pc_after_break = 0;
   CORE_ADDR deprecated_function_start_offset = 0;
-  gdbarch_remote_register_number_ftype *remote_register_number = nullptr;
+  gdbarch_remote_register_number_ftype *remote_register_number = default_remote_register_number;
   gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address = nullptr;
   gdbarch_get_thread_local_address_ftype *get_thread_local_address = nullptr;
   CORE_ADDR frame_args_skip = 0;
-  gdbarch_unwind_pc_ftype *unwind_pc = nullptr;
-  gdbarch_unwind_sp_ftype *unwind_sp = nullptr;
+  gdbarch_unwind_pc_ftype *unwind_pc = default_unwind_pc;
+  gdbarch_unwind_sp_ftype *unwind_sp = default_unwind_sp;
   gdbarch_frame_num_args_ftype *frame_num_args = nullptr;
   gdbarch_frame_align_ftype *frame_align = nullptr;
-  gdbarch_stabs_argument_has_addr_ftype *stabs_argument_has_addr = nullptr;
+  gdbarch_stabs_argument_has_addr_ftype *stabs_argument_has_addr = default_stabs_argument_has_addr;
   int frame_red_zone_size = 0;
-  gdbarch_convert_from_func_ptr_addr_ftype *convert_from_func_ptr_addr = nullptr;
-  gdbarch_addr_bits_remove_ftype *addr_bits_remove = nullptr;
+  gdbarch_convert_from_func_ptr_addr_ftype *convert_from_func_ptr_addr = convert_from_func_ptr_addr_identity;
+  gdbarch_addr_bits_remove_ftype *addr_bits_remove = core_addr_identity;
   int significant_addr_bit = 0;
-  gdbarch_memtag_to_string_ftype *memtag_to_string = nullptr;
-  gdbarch_tagged_address_p_ftype *tagged_address_p = nullptr;
-  gdbarch_memtag_matches_p_ftype *memtag_matches_p = nullptr;
-  gdbarch_set_memtags_ftype *set_memtags = nullptr;
-  gdbarch_get_memtag_ftype *get_memtag = nullptr;
+  gdbarch_memtag_to_string_ftype *memtag_to_string = default_memtag_to_string;
+  gdbarch_tagged_address_p_ftype *tagged_address_p = default_tagged_address_p;
+  gdbarch_memtag_matches_p_ftype *memtag_matches_p = default_memtag_matches_p;
+  gdbarch_set_memtags_ftype *set_memtags = default_set_memtags;
+  gdbarch_get_memtag_ftype *get_memtag = default_get_memtag;
   CORE_ADDR memtag_granule_size = 0;
   gdbarch_software_single_step_ftype *software_single_step = nullptr;
   gdbarch_single_step_through_delay_ftype *single_step_through_delay = nullptr;
-  gdbarch_print_insn_ftype *print_insn = nullptr;
-  gdbarch_skip_trampoline_code_ftype *skip_trampoline_code = nullptr;
+  gdbarch_print_insn_ftype *print_insn = default_print_insn;
+  gdbarch_skip_trampoline_code_ftype *skip_trampoline_code = generic_skip_trampoline_code;
   const struct target_so_ops * so_ops = 0;
-  gdbarch_skip_solib_resolver_ftype *skip_solib_resolver = nullptr;
-  gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline = nullptr;
-  gdbarch_in_indirect_branch_thunk_ftype *in_indirect_branch_thunk = nullptr;
-  gdbarch_stack_frame_destroyed_p_ftype *stack_frame_destroyed_p = nullptr;
+  gdbarch_skip_solib_resolver_ftype *skip_solib_resolver = generic_skip_solib_resolver;
+  gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline = generic_in_solib_return_trampoline;
+  gdbarch_in_indirect_branch_thunk_ftype *in_indirect_branch_thunk = default_in_indirect_branch_thunk;
+  gdbarch_stack_frame_destroyed_p_ftype *stack_frame_destroyed_p = generic_stack_frame_destroyed_p;
   gdbarch_elf_make_msymbol_special_ftype *elf_make_msymbol_special = nullptr;
-  gdbarch_coff_make_msymbol_special_ftype *coff_make_msymbol_special = nullptr;
-  gdbarch_make_symbol_special_ftype *make_symbol_special = nullptr;
-  gdbarch_adjust_dwarf2_addr_ftype *adjust_dwarf2_addr = nullptr;
-  gdbarch_adjust_dwarf2_line_ftype *adjust_dwarf2_line = nullptr;
+  gdbarch_coff_make_msymbol_special_ftype *coff_make_msymbol_special = default_coff_make_msymbol_special;
+  gdbarch_make_symbol_special_ftype *make_symbol_special = default_make_symbol_special;
+  gdbarch_adjust_dwarf2_addr_ftype *adjust_dwarf2_addr = default_adjust_dwarf2_addr;
+  gdbarch_adjust_dwarf2_line_ftype *adjust_dwarf2_line = default_adjust_dwarf2_line;
   int cannot_step_breakpoint = 0;
   int have_nonsteppable_watchpoint = 0;
   gdbarch_address_class_type_flags_ftype *address_class_type_flags = nullptr;
   gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags_to_name = nullptr;
-  gdbarch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op = nullptr;
+  gdbarch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op = default_execute_dwarf_cfa_vendor_op;
   gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_type_flags = nullptr;
-  gdbarch_register_reggroup_p_ftype *register_reggroup_p = nullptr;
+  gdbarch_register_reggroup_p_ftype *register_reggroup_p = default_register_reggroup_p;
   gdbarch_fetch_pointer_argument_ftype *fetch_pointer_argument = nullptr;
   gdbarch_iterate_over_regset_sections_ftype *iterate_over_regset_sections = nullptr;
   gdbarch_make_corefile_notes_ftype *make_corefile_notes = nullptr;
@@ -185,16 +185,16 @@ struct gdbarch
   const char * gcore_bfd_target = 0;
   int vtable_function_descriptors = 0;
   int vbit_in_delta = 0;
-  gdbarch_skip_permanent_breakpoint_ftype *skip_permanent_breakpoint = nullptr;
+  gdbarch_skip_permanent_breakpoint_ftype *skip_permanent_breakpoint = default_skip_permanent_breakpoint;
   ULONGEST max_insn_length = 0;
   gdbarch_displaced_step_copy_insn_ftype *displaced_step_copy_insn = nullptr;
-  gdbarch_displaced_step_hw_singlestep_ftype *displaced_step_hw_singlestep = nullptr;
-  gdbarch_displaced_step_fixup_ftype *displaced_step_fixup = nullptr;
+  gdbarch_displaced_step_hw_singlestep_ftype *displaced_step_hw_singlestep = default_displaced_step_hw_singlestep;
+  gdbarch_displaced_step_fixup_ftype *displaced_step_fixup = NULL;
   gdbarch_displaced_step_prepare_ftype *displaced_step_prepare = nullptr;
-  gdbarch_displaced_step_finish_ftype *displaced_step_finish = nullptr;
+  gdbarch_displaced_step_finish_ftype *displaced_step_finish = NULL;
   gdbarch_displaced_step_copy_insn_closure_by_addr_ftype *displaced_step_copy_insn_closure_by_addr = nullptr;
   gdbarch_displaced_step_restore_all_in_ptid_ftype *displaced_step_restore_all_in_ptid = nullptr;
-  gdbarch_relocate_instruction_ftype *relocate_instruction = nullptr;
+  gdbarch_relocate_instruction_ftype *relocate_instruction = NULL;
   gdbarch_overlay_update_ftype *overlay_update = nullptr;
   gdbarch_core_read_description_ftype *core_read_description = nullptr;
   int sofun_address_maybe_missing = 0;
@@ -224,36 +224,36 @@ struct gdbarch
   gdbarch_dtrace_disable_probe_ftype *dtrace_disable_probe = nullptr;
   int has_global_solist = 0;
   int has_global_breakpoints = 0;
-  gdbarch_has_shared_address_space_ftype *has_shared_address_space = nullptr;
-  gdbarch_fast_tracepoint_valid_at_ftype *fast_tracepoint_valid_at = nullptr;
-  gdbarch_guess_tracepoint_registers_ftype *guess_tracepoint_registers = nullptr;
-  gdbarch_auto_charset_ftype *auto_charset = nullptr;
-  gdbarch_auto_wide_charset_ftype *auto_wide_charset = nullptr;
+  gdbarch_has_shared_address_space_ftype *has_shared_address_space = default_has_shared_address_space;
+  gdbarch_fast_tracepoint_valid_at_ftype *fast_tracepoint_valid_at = default_fast_tracepoint_valid_at;
+  gdbarch_guess_tracepoint_registers_ftype *guess_tracepoint_registers = default_guess_tracepoint_registers;
+  gdbarch_auto_charset_ftype *auto_charset = default_auto_charset;
+  gdbarch_auto_wide_charset_ftype *auto_wide_charset = default_auto_wide_charset;
   const char * solib_symbols_extension = 0;
   int has_dos_based_file_system = 0;
-  gdbarch_gen_return_address_ftype *gen_return_address = nullptr;
+  gdbarch_gen_return_address_ftype *gen_return_address = default_gen_return_address;
   gdbarch_info_proc_ftype *info_proc = nullptr;
   gdbarch_core_info_proc_ftype *core_info_proc = nullptr;
-  gdbarch_iterate_over_objfiles_in_search_order_ftype *iterate_over_objfiles_in_search_order = nullptr;
-  struct ravenscar_arch_ops * ravenscar_ops = 0;
-  gdbarch_insn_is_call_ftype *insn_is_call = nullptr;
-  gdbarch_insn_is_ret_ftype *insn_is_ret = nullptr;
-  gdbarch_insn_is_jump_ftype *insn_is_jump = nullptr;
-  gdbarch_program_breakpoint_here_p_ftype *program_breakpoint_here_p = nullptr;
+  gdbarch_iterate_over_objfiles_in_search_order_ftype *iterate_over_objfiles_in_search_order = default_iterate_over_objfiles_in_search_order;
+  struct ravenscar_arch_ops * ravenscar_ops = NULL;
+  gdbarch_insn_is_call_ftype *insn_is_call = default_insn_is_call;
+  gdbarch_insn_is_ret_ftype *insn_is_ret = default_insn_is_ret;
+  gdbarch_insn_is_jump_ftype *insn_is_jump = default_insn_is_jump;
+  gdbarch_program_breakpoint_here_p_ftype *program_breakpoint_here_p = default_program_breakpoint_here_p;
   gdbarch_auxv_parse_ftype *auxv_parse = nullptr;
-  gdbarch_print_auxv_entry_ftype *print_auxv_entry = nullptr;
-  gdbarch_vsyscall_range_ftype *vsyscall_range = nullptr;
-  gdbarch_infcall_mmap_ftype *infcall_mmap = nullptr;
-  gdbarch_infcall_munmap_ftype *infcall_munmap = nullptr;
-  gdbarch_gcc_target_options_ftype *gcc_target_options = nullptr;
-  gdbarch_gnu_triplet_regexp_ftype *gnu_triplet_regexp = nullptr;
-  gdbarch_addressable_memory_unit_size_ftype *addressable_memory_unit_size = nullptr;
+  gdbarch_print_auxv_entry_ftype *print_auxv_entry = default_print_auxv_entry;
+  gdbarch_vsyscall_range_ftype *vsyscall_range = default_vsyscall_range;
+  gdbarch_infcall_mmap_ftype *infcall_mmap = default_infcall_mmap;
+  gdbarch_infcall_munmap_ftype *infcall_munmap = default_infcall_munmap;
+  gdbarch_gcc_target_options_ftype *gcc_target_options = default_gcc_target_options;
+  gdbarch_gnu_triplet_regexp_ftype *gnu_triplet_regexp = default_gnu_triplet_regexp;
+  gdbarch_addressable_memory_unit_size_ftype *addressable_memory_unit_size = default_addressable_memory_unit_size;
   const char * disassembler_options_implicit = 0;
   char ** disassembler_options = 0;
   const disasm_options_and_args_t * valid_disassembler_options = 0;
-  gdbarch_type_align_ftype *type_align = nullptr;
-  gdbarch_get_pc_address_flags_ftype *get_pc_address_flags = nullptr;
-  gdbarch_read_core_file_mappings_ftype *read_core_file_mappings = nullptr;
+  gdbarch_type_align_ftype *type_align = default_type_align;
+  gdbarch_get_pc_address_flags_ftype *get_pc_address_flags = default_get_pc_address_flags;
+  gdbarch_read_core_file_mappings_ftype *read_core_file_mappings = default_read_core_file_mappings;
 };
 
 /* Create a new ``struct gdbarch'' based on information provided by
@@ -275,102 +275,6 @@ gdbarch_alloc (const struct gdbarch_info *info,
   gdbarch->osabi = info->osabi;
   gdbarch->target_desc = info->target_desc;
 
-  /* Force the explicit initialization of these.  */
-  gdbarch->short_bit = 2*TARGET_CHAR_BIT;
-  gdbarch->int_bit = 4*TARGET_CHAR_BIT;
-  gdbarch->long_bit = 4*TARGET_CHAR_BIT;
-  gdbarch->long_long_bit = 2*gdbarch->long_bit;
-  gdbarch->bfloat16_bit = 2*TARGET_CHAR_BIT;
-  gdbarch->half_bit = 2*TARGET_CHAR_BIT;
-  gdbarch->float_bit = 4*TARGET_CHAR_BIT;
-  gdbarch->double_bit = 8*TARGET_CHAR_BIT;
-  gdbarch->long_double_bit = 8*TARGET_CHAR_BIT;
-  gdbarch->wchar_bit = 4*TARGET_CHAR_BIT;
-  gdbarch->wchar_signed = -1;
-  gdbarch->floatformat_for_type = default_floatformat_for_type;
-  gdbarch->ptr_bit = gdbarch->int_bit;
-  gdbarch->char_signed = -1;
-  gdbarch->virtual_frame_pointer = legacy_virtual_frame_pointer;
-  gdbarch->num_regs = -1;
-  gdbarch->sp_regnum = -1;
-  gdbarch->pc_regnum = -1;
-  gdbarch->ps_regnum = -1;
-  gdbarch->fp0_regnum = -1;
-  gdbarch->stab_reg_to_regnum = no_op_reg_to_regnum;
-  gdbarch->ecoff_reg_to_regnum = no_op_reg_to_regnum;
-  gdbarch->sdb_reg_to_regnum = no_op_reg_to_regnum;
-  gdbarch->dwarf2_reg_to_regnum = no_op_reg_to_regnum;
-  gdbarch->dummy_id = default_dummy_id;
-  gdbarch->deprecated_fp_regnum = -1;
-  gdbarch->call_dummy_location = AT_ENTRY_POINT;
-  gdbarch->code_of_frame_writable = default_code_of_frame_writable;
-  gdbarch->print_registers_info = default_print_registers_info;
-  gdbarch->print_float_info = default_print_float_info;
-  gdbarch->register_sim_regno = legacy_register_sim_regno;
-  gdbarch->cannot_fetch_register = cannot_register_not;
-  gdbarch->cannot_store_register = cannot_register_not;
-  gdbarch->convert_register_p = generic_convert_register_p;
-  gdbarch->value_from_register = default_value_from_register;
-  gdbarch->pointer_to_address = unsigned_pointer_to_address;
-  gdbarch->address_to_pointer = unsigned_address_to_pointer;
-  gdbarch->return_in_first_hidden_param_p = default_return_in_first_hidden_param_p;
-  gdbarch->breakpoint_from_pc = default_breakpoint_from_pc;
-  gdbarch->sw_breakpoint_from_kind = NULL;
-  gdbarch->breakpoint_kind_from_current_state = default_breakpoint_kind_from_current_state;
-  gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint;
-  gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint;
-  gdbarch->remote_register_number = default_remote_register_number;
-  gdbarch->unwind_pc = default_unwind_pc;
-  gdbarch->unwind_sp = default_unwind_sp;
-  gdbarch->stabs_argument_has_addr = default_stabs_argument_has_addr;
-  gdbarch->convert_from_func_ptr_addr = convert_from_func_ptr_addr_identity;
-  gdbarch->addr_bits_remove = core_addr_identity;
-  gdbarch->memtag_to_string = default_memtag_to_string;
-  gdbarch->tagged_address_p = default_tagged_address_p;
-  gdbarch->memtag_matches_p = default_memtag_matches_p;
-  gdbarch->set_memtags = default_set_memtags;
-  gdbarch->get_memtag = default_get_memtag;
-  gdbarch->print_insn = default_print_insn;
-  gdbarch->skip_trampoline_code = generic_skip_trampoline_code;
-  gdbarch->skip_solib_resolver = generic_skip_solib_resolver;
-  gdbarch->in_solib_return_trampoline = generic_in_solib_return_trampoline;
-  gdbarch->in_indirect_branch_thunk = default_in_indirect_branch_thunk;
-  gdbarch->stack_frame_destroyed_p = generic_stack_frame_destroyed_p;
-  gdbarch->coff_make_msymbol_special = default_coff_make_msymbol_special;
-  gdbarch->make_symbol_special = default_make_symbol_special;
-  gdbarch->adjust_dwarf2_addr = default_adjust_dwarf2_addr;
-  gdbarch->adjust_dwarf2_line = default_adjust_dwarf2_line;
-  gdbarch->execute_dwarf_cfa_vendor_op = default_execute_dwarf_cfa_vendor_op;
-  gdbarch->register_reggroup_p = default_register_reggroup_p;
-  gdbarch->skip_permanent_breakpoint = default_skip_permanent_breakpoint;
-  gdbarch->displaced_step_hw_singlestep = default_displaced_step_hw_singlestep;
-  gdbarch->displaced_step_fixup = NULL;
-  gdbarch->displaced_step_finish = NULL;
-  gdbarch->relocate_instruction = NULL;
-  gdbarch->has_shared_address_space = default_has_shared_address_space;
-  gdbarch->fast_tracepoint_valid_at = default_fast_tracepoint_valid_at;
-  gdbarch->guess_tracepoint_registers = default_guess_tracepoint_registers;
-  gdbarch->auto_charset = default_auto_charset;
-  gdbarch->auto_wide_charset = default_auto_wide_charset;
-  gdbarch->gen_return_address = default_gen_return_address;
-  gdbarch->iterate_over_objfiles_in_search_order = default_iterate_over_objfiles_in_search_order;
-  gdbarch->ravenscar_ops = NULL;
-  gdbarch->insn_is_call = default_insn_is_call;
-  gdbarch->insn_is_ret = default_insn_is_ret;
-  gdbarch->insn_is_jump = default_insn_is_jump;
-  gdbarch->program_breakpoint_here_p = default_program_breakpoint_here_p;
-  gdbarch->print_auxv_entry = default_print_auxv_entry;
-  gdbarch->vsyscall_range = default_vsyscall_range;
-  gdbarch->infcall_mmap = default_infcall_mmap;
-  gdbarch->infcall_munmap = default_infcall_munmap;
-  gdbarch->gcc_target_options = default_gcc_target_options;
-  gdbarch->gnu_triplet_regexp = default_gnu_triplet_regexp;
-  gdbarch->addressable_memory_unit_size = default_addressable_memory_unit_size;
-  gdbarch->type_align = default_type_align;
-  gdbarch->get_pc_address_flags = default_get_pc_address_flags;
-  gdbarch->read_core_file_mappings = default_read_core_file_mappings;
-  /* gdbarch_alloc() */
-
   return gdbarch;
 }
 
diff --git a/gdb/gdbarch.py b/gdb/gdbarch.py
index da848feae84..4424b319d5e 100755
--- a/gdb/gdbarch.py
+++ b/gdb/gdbarch.py
@@ -286,11 +286,18 @@ with open("gdbarch.c", "w") as f:
     print("  void **data = nullptr;", file=f)
     print(file=f)
     for c in filter(not_info, components):
-        if isinstance(c, Value):
-            print(f"  {c.type} {c.name} = 0;", file=f)
+        if isinstance(c, Function):
+            print(f"  gdbarch_{c.name}_ftype *", file=f, end="")
+        else:
+            print(f"  {c.type} ", file=f, end="")
+        print(f"{c.name} = ", file=f, end="")
+        if c.predefault is not None:
+            print(f"{c.predefault};", file=f)
+        elif isinstance(c, Value):
+            print("0;", file=f)
         else:
             assert isinstance(c, Function)
-            print(f"  gdbarch_{c.name}_ftype *{c.name} = nullptr;", file=f)
+            print("nullptr;", file=f)
     print("};", file=f)
     print(file=f)
     #
@@ -312,12 +319,6 @@ with open("gdbarch.c", "w") as f:
     for c in filter(info, components):
         print(f"  gdbarch->{c.name} = info->{c.name};", file=f)
     print(file=f)
-    print("  /* Force the explicit initialization of these.  */", file=f)
-    for c in filter(not_info, components):
-        if c.predefault and c.predefault != "0":
-            print(f"  gdbarch->{c.name} = {c.predefault};", file=f)
-    print("  /* gdbarch_alloc() */", file=f)
-    print(file=f)
     print("  return gdbarch;", file=f)
     print("}", file=f)
     print(file=f)
-- 
2.34.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/2] Use enum for gdbarch's call_dummy_location
  2022-10-18 16:15 [PATCH 0/2] Use enum for call_dummy_location Tom Tromey
  2022-10-18 16:15 ` [PATCH 1/2] Inline initialization of gdbarch members Tom Tromey
@ 2022-10-18 16:15 ` Tom Tromey
  2022-10-26 11:57   ` Bruno Larsen
  2022-10-26 11:25 ` [PATCH 0/2] Use enum for call_dummy_location Luis Machado
  2 siblings, 1 reply; 7+ messages in thread
From: Tom Tromey @ 2022-10-18 16:15 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

This changes gdbarch to use an enum for call_dummy_location, providing
a little more type safety.
---
 gdb/gdbarch-components.py | 2 +-
 gdb/gdbarch-gen.h         | 4 ++--
 gdb/gdbarch.c             | 6 +++---
 gdb/gdbarch.h             | 7 +++++++
 gdb/inferior.h            | 3 ---
 5 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/gdb/gdbarch-components.py b/gdb/gdbarch-components.py
index c997a709cbb..b2c7b784761 100644
--- a/gdb/gdbarch-components.py
+++ b/gdb/gdbarch-components.py
@@ -647,7 +647,7 @@ Method(
 )
 
 Value(
-    type="int",
+    type="enum call_dummy_location_type",
     name="call_dummy_location",
     predefault="AT_ENTRY_POINT",
     invalid=False,
diff --git a/gdb/gdbarch-gen.h b/gdb/gdbarch-gen.h
index 840de585869..e0d7a08ff6a 100644
--- a/gdb/gdbarch-gen.h
+++ b/gdb/gdbarch-gen.h
@@ -331,8 +331,8 @@ typedef CORE_ADDR (gdbarch_push_dummy_call_ftype) (struct gdbarch *gdbarch, stru
 extern CORE_ADDR gdbarch_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, function_call_return_method return_method, CORE_ADDR struct_addr);
 extern void set_gdbarch_push_dummy_call (struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype *push_dummy_call);
 
-extern int gdbarch_call_dummy_location (struct gdbarch *gdbarch);
-extern void set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, int call_dummy_location);
+extern enum call_dummy_location_type gdbarch_call_dummy_location (struct gdbarch *gdbarch);
+extern void set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, enum call_dummy_location_type call_dummy_location);
 
 extern bool gdbarch_push_dummy_code_p (struct gdbarch *gdbarch);
 
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
index 5545cfdad8e..6d6e61006f5 100644
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -97,7 +97,7 @@ struct gdbarch
   gdbarch_dummy_id_ftype *dummy_id = default_dummy_id;
   int deprecated_fp_regnum = -1;
   gdbarch_push_dummy_call_ftype *push_dummy_call = nullptr;
-  int call_dummy_location = AT_ENTRY_POINT;
+  enum call_dummy_location_type call_dummy_location = AT_ENTRY_POINT;
   gdbarch_push_dummy_code_ftype *push_dummy_code = nullptr;
   gdbarch_code_of_frame_writable_ftype *code_of_frame_writable = default_code_of_frame_writable;
   gdbarch_print_registers_info_ftype *print_registers_info = default_print_registers_info;
@@ -2230,7 +2230,7 @@ set_gdbarch_push_dummy_call (struct gdbarch *gdbarch,
   gdbarch->push_dummy_call = push_dummy_call;
 }
 
-int
+enum call_dummy_location_type
 gdbarch_call_dummy_location (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -2242,7 +2242,7 @@ gdbarch_call_dummy_location (struct gdbarch *gdbarch)
 
 void
 set_gdbarch_call_dummy_location (struct gdbarch *gdbarch,
-                                 int call_dummy_location)
+                                 enum call_dummy_location_type call_dummy_location)
 {
   gdbarch->call_dummy_location = call_dummy_location;
 }
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
index 2f1c7399d78..f2ba5f97765 100644
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -149,6 +149,13 @@ using read_core_file_mappings_loop_ftype =
 			   const char *filename,
 			   const bfd_build_id *build_id)>;
 
+/* Possible values for gdbarch_call_dummy_location.  */
+enum call_dummy_location_type
+{
+  ON_STACK,
+  AT_ENTRY_POINT,
+};
+
 #include "gdbarch-gen.h"
 
 /* An internal function that should _only_ be called from gdbarch_tdep.
diff --git a/gdb/inferior.h b/gdb/inferior.h
index 8877be38e36..69525a2e053 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -282,9 +282,6 @@ enum stop_kind
   };
 
 \f
-/* Possible values for gdbarch_call_dummy_location.  */
-#define ON_STACK 1
-#define AT_ENTRY_POINT 4
 
 /* Base class for target-specific inferior data.  */
 
-- 
2.34.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] Inline initialization of gdbarch members
  2022-10-18 16:15 ` [PATCH 1/2] Inline initialization of gdbarch members Tom Tromey
@ 2022-10-26  9:33   ` Bruno Larsen
  2022-10-31 15:03     ` Tom Tromey
  0 siblings, 1 reply; 7+ messages in thread
From: Bruno Larsen @ 2022-10-26  9:33 UTC (permalink / raw)
  To: Tom Tromey, gdb-patches


On 18/10/2022 18:15, Tom Tromey via Gdb-patches wrote:
> This changes gdbarch to use the "predefault" to initialize its members
> inline.  This required changing a couple of the Value instantiations
> to avoid a use of "gdbarch" during initialization, but on the whole I
> think this is better -- it removes a hidden ordering dependency.

Hi Tom,

I don't really understand gdbarch, so sorry if this is an obvious 
question, but why have you only avoided using gdbarch in Value 
instantiations and kept them in Info instantiations? (lines 120 and 141, 
for instance)

Cheers,
Bruno

> ---
>   gdb/gdbarch-components.py |   8 +-
>   gdb/gdbarch.c             | 290 +++++++++++++-------------------------
>   gdb/gdbarch.py            |  19 +--
>   3 files changed, 111 insertions(+), 206 deletions(-)
>
> diff --git a/gdb/gdbarch-components.py b/gdb/gdbarch-components.py
> index 46e7565f293..c997a709cbb 100644
> --- a/gdb/gdbarch-components.py
> +++ b/gdb/gdbarch-components.py
> @@ -151,7 +151,7 @@ Number of bits in a short or unsigned short for the target machine.
>       invalid=False,
>   )
>   
> -Value(
> +int_bit = Value(
>       comment="""
>   Number of bits in an int or unsigned int for the target machine.
>   """,
> @@ -161,7 +161,7 @@ Number of bits in an int or unsigned int for the target machine.
>       invalid=False,
>   )
>   
> -Value(
> +long_bit = Value(
>       comment="""
>   Number of bits in a long or unsigned long for the target machine.
>   """,
> @@ -178,7 +178,7 @@ machine.
>   """,
>       type="int",
>       name="long_long_bit",
> -    predefault="2*gdbarch->long_bit",
> +    predefault="2*" + long_bit.predefault,
>       invalid=False,
>   )
>   
> @@ -314,7 +314,7 @@ ptr_bit is the size of a pointer on the target
>   """,
>       type="int",
>       name="ptr_bit",
> -    predefault="gdbarch->int_bit",
> +    predefault=int_bit.predefault,
>       invalid=False,
>   )
>   
> diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
> index 559e92dee58..5545cfdad8e 100644
> --- a/gdb/gdbarch.c
> +++ b/gdb/gdbarch.c
> @@ -52,124 +52,124 @@ struct gdbarch
>     unsigned nr_data = 0;
>     void **data = nullptr;
>   
> -  int short_bit = 0;
> -  int int_bit = 0;
> -  int long_bit = 0;
> -  int long_long_bit = 0;
> -  int bfloat16_bit = 0;
> +  int short_bit = 2*TARGET_CHAR_BIT;
> +  int int_bit = 4*TARGET_CHAR_BIT;
> +  int long_bit = 4*TARGET_CHAR_BIT;
> +  int long_long_bit = 2*4*TARGET_CHAR_BIT;
> +  int bfloat16_bit = 2*TARGET_CHAR_BIT;
>     const struct floatformat ** bfloat16_format = 0;
> -  int half_bit = 0;
> +  int half_bit = 2*TARGET_CHAR_BIT;
>     const struct floatformat ** half_format = 0;
> -  int float_bit = 0;
> +  int float_bit = 4*TARGET_CHAR_BIT;
>     const struct floatformat ** float_format = 0;
> -  int double_bit = 0;
> +  int double_bit = 8*TARGET_CHAR_BIT;
>     const struct floatformat ** double_format = 0;
> -  int long_double_bit = 0;
> +  int long_double_bit = 8*TARGET_CHAR_BIT;
>     const struct floatformat ** long_double_format = 0;
> -  int wchar_bit = 0;
> -  int wchar_signed = 0;
> -  gdbarch_floatformat_for_type_ftype *floatformat_for_type = nullptr;
> -  int ptr_bit = 0;
> +  int wchar_bit = 4*TARGET_CHAR_BIT;
> +  int wchar_signed = -1;
> +  gdbarch_floatformat_for_type_ftype *floatformat_for_type = default_floatformat_for_type;
> +  int ptr_bit = 4*TARGET_CHAR_BIT;
>     int addr_bit = 0;
>     int dwarf2_addr_size = 0;
> -  int char_signed = 0;
> +  int char_signed = -1;
>     gdbarch_read_pc_ftype *read_pc = nullptr;
>     gdbarch_write_pc_ftype *write_pc = nullptr;
> -  gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer = nullptr;
> +  gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer = legacy_virtual_frame_pointer;
>     gdbarch_pseudo_register_read_ftype *pseudo_register_read = nullptr;
>     gdbarch_pseudo_register_read_value_ftype *pseudo_register_read_value = nullptr;
>     gdbarch_pseudo_register_write_ftype *pseudo_register_write = nullptr;
> -  int num_regs = 0;
> +  int num_regs = -1;
>     int num_pseudo_regs = 0;
>     gdbarch_ax_pseudo_register_collect_ftype *ax_pseudo_register_collect = nullptr;
>     gdbarch_ax_pseudo_register_push_stack_ftype *ax_pseudo_register_push_stack = nullptr;
>     gdbarch_report_signal_info_ftype *report_signal_info = nullptr;
> -  int sp_regnum = 0;
> -  int pc_regnum = 0;
> -  int ps_regnum = 0;
> -  int fp0_regnum = 0;
> -  gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum = nullptr;
> -  gdbarch_ecoff_reg_to_regnum_ftype *ecoff_reg_to_regnum = nullptr;
> -  gdbarch_sdb_reg_to_regnum_ftype *sdb_reg_to_regnum = nullptr;
> -  gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum = nullptr;
> -  gdbarch_register_name_ftype *register_name = nullptr;
> +  int sp_regnum = -1;
> +  int pc_regnum = -1;
> +  int ps_regnum = -1;
> +  int fp0_regnum = -1;
> +  gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum = no_op_reg_to_regnum;
> +  gdbarch_ecoff_reg_to_regnum_ftype *ecoff_reg_to_regnum = no_op_reg_to_regnum;
> +  gdbarch_sdb_reg_to_regnum_ftype *sdb_reg_to_regnum = no_op_reg_to_regnum;
> +  gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum = no_op_reg_to_regnum;
> +  gdbarch_register_name_ftype *register_name = 0;
>     gdbarch_register_type_ftype *register_type = nullptr;
> -  gdbarch_dummy_id_ftype *dummy_id = nullptr;
> -  int deprecated_fp_regnum = 0;
> +  gdbarch_dummy_id_ftype *dummy_id = default_dummy_id;
> +  int deprecated_fp_regnum = -1;
>     gdbarch_push_dummy_call_ftype *push_dummy_call = nullptr;
> -  int call_dummy_location = 0;
> +  int call_dummy_location = AT_ENTRY_POINT;
>     gdbarch_push_dummy_code_ftype *push_dummy_code = nullptr;
> -  gdbarch_code_of_frame_writable_ftype *code_of_frame_writable = nullptr;
> -  gdbarch_print_registers_info_ftype *print_registers_info = nullptr;
> -  gdbarch_print_float_info_ftype *print_float_info = nullptr;
> +  gdbarch_code_of_frame_writable_ftype *code_of_frame_writable = default_code_of_frame_writable;
> +  gdbarch_print_registers_info_ftype *print_registers_info = default_print_registers_info;
> +  gdbarch_print_float_info_ftype *print_float_info = default_print_float_info;
>     gdbarch_print_vector_info_ftype *print_vector_info = nullptr;
> -  gdbarch_register_sim_regno_ftype *register_sim_regno = nullptr;
> -  gdbarch_cannot_fetch_register_ftype *cannot_fetch_register = nullptr;
> -  gdbarch_cannot_store_register_ftype *cannot_store_register = nullptr;
> +  gdbarch_register_sim_regno_ftype *register_sim_regno = legacy_register_sim_regno;
> +  gdbarch_cannot_fetch_register_ftype *cannot_fetch_register = cannot_register_not;
> +  gdbarch_cannot_store_register_ftype *cannot_store_register = cannot_register_not;
>     gdbarch_get_longjmp_target_ftype *get_longjmp_target = nullptr;
>     int believe_pcc_promotion = 0;
> -  gdbarch_convert_register_p_ftype *convert_register_p = nullptr;
> +  gdbarch_convert_register_p_ftype *convert_register_p = generic_convert_register_p;
>     gdbarch_register_to_value_ftype *register_to_value = nullptr;
>     gdbarch_value_to_register_ftype *value_to_register = nullptr;
> -  gdbarch_value_from_register_ftype *value_from_register = nullptr;
> -  gdbarch_pointer_to_address_ftype *pointer_to_address = nullptr;
> -  gdbarch_address_to_pointer_ftype *address_to_pointer = nullptr;
> +  gdbarch_value_from_register_ftype *value_from_register = default_value_from_register;
> +  gdbarch_pointer_to_address_ftype *pointer_to_address = unsigned_pointer_to_address;
> +  gdbarch_address_to_pointer_ftype *address_to_pointer = unsigned_address_to_pointer;
>     gdbarch_integer_to_address_ftype *integer_to_address = nullptr;
>     gdbarch_return_value_ftype *return_value = nullptr;
> -  gdbarch_return_in_first_hidden_param_p_ftype *return_in_first_hidden_param_p = nullptr;
> -  gdbarch_skip_prologue_ftype *skip_prologue = nullptr;
> +  gdbarch_return_in_first_hidden_param_p_ftype *return_in_first_hidden_param_p = default_return_in_first_hidden_param_p;
> +  gdbarch_skip_prologue_ftype *skip_prologue = 0;
>     gdbarch_skip_main_prologue_ftype *skip_main_prologue = nullptr;
>     gdbarch_skip_entrypoint_ftype *skip_entrypoint = nullptr;
> -  gdbarch_inner_than_ftype *inner_than = nullptr;
> -  gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc = nullptr;
> -  gdbarch_breakpoint_kind_from_pc_ftype *breakpoint_kind_from_pc = nullptr;
> -  gdbarch_sw_breakpoint_from_kind_ftype *sw_breakpoint_from_kind = nullptr;
> -  gdbarch_breakpoint_kind_from_current_state_ftype *breakpoint_kind_from_current_state = nullptr;
> +  gdbarch_inner_than_ftype *inner_than = 0;
> +  gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc = default_breakpoint_from_pc;
> +  gdbarch_breakpoint_kind_from_pc_ftype *breakpoint_kind_from_pc = 0;
> +  gdbarch_sw_breakpoint_from_kind_ftype *sw_breakpoint_from_kind = NULL;
> +  gdbarch_breakpoint_kind_from_current_state_ftype *breakpoint_kind_from_current_state = default_breakpoint_kind_from_current_state;
>     gdbarch_adjust_breakpoint_address_ftype *adjust_breakpoint_address = nullptr;
> -  gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint = nullptr;
> -  gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint = nullptr;
> +  gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint = default_memory_insert_breakpoint;
> +  gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint = default_memory_remove_breakpoint;
>     CORE_ADDR decr_pc_after_break = 0;
>     CORE_ADDR deprecated_function_start_offset = 0;
> -  gdbarch_remote_register_number_ftype *remote_register_number = nullptr;
> +  gdbarch_remote_register_number_ftype *remote_register_number = default_remote_register_number;
>     gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address = nullptr;
>     gdbarch_get_thread_local_address_ftype *get_thread_local_address = nullptr;
>     CORE_ADDR frame_args_skip = 0;
> -  gdbarch_unwind_pc_ftype *unwind_pc = nullptr;
> -  gdbarch_unwind_sp_ftype *unwind_sp = nullptr;
> +  gdbarch_unwind_pc_ftype *unwind_pc = default_unwind_pc;
> +  gdbarch_unwind_sp_ftype *unwind_sp = default_unwind_sp;
>     gdbarch_frame_num_args_ftype *frame_num_args = nullptr;
>     gdbarch_frame_align_ftype *frame_align = nullptr;
> -  gdbarch_stabs_argument_has_addr_ftype *stabs_argument_has_addr = nullptr;
> +  gdbarch_stabs_argument_has_addr_ftype *stabs_argument_has_addr = default_stabs_argument_has_addr;
>     int frame_red_zone_size = 0;
> -  gdbarch_convert_from_func_ptr_addr_ftype *convert_from_func_ptr_addr = nullptr;
> -  gdbarch_addr_bits_remove_ftype *addr_bits_remove = nullptr;
> +  gdbarch_convert_from_func_ptr_addr_ftype *convert_from_func_ptr_addr = convert_from_func_ptr_addr_identity;
> +  gdbarch_addr_bits_remove_ftype *addr_bits_remove = core_addr_identity;
>     int significant_addr_bit = 0;
> -  gdbarch_memtag_to_string_ftype *memtag_to_string = nullptr;
> -  gdbarch_tagged_address_p_ftype *tagged_address_p = nullptr;
> -  gdbarch_memtag_matches_p_ftype *memtag_matches_p = nullptr;
> -  gdbarch_set_memtags_ftype *set_memtags = nullptr;
> -  gdbarch_get_memtag_ftype *get_memtag = nullptr;
> +  gdbarch_memtag_to_string_ftype *memtag_to_string = default_memtag_to_string;
> +  gdbarch_tagged_address_p_ftype *tagged_address_p = default_tagged_address_p;
> +  gdbarch_memtag_matches_p_ftype *memtag_matches_p = default_memtag_matches_p;
> +  gdbarch_set_memtags_ftype *set_memtags = default_set_memtags;
> +  gdbarch_get_memtag_ftype *get_memtag = default_get_memtag;
>     CORE_ADDR memtag_granule_size = 0;
>     gdbarch_software_single_step_ftype *software_single_step = nullptr;
>     gdbarch_single_step_through_delay_ftype *single_step_through_delay = nullptr;
> -  gdbarch_print_insn_ftype *print_insn = nullptr;
> -  gdbarch_skip_trampoline_code_ftype *skip_trampoline_code = nullptr;
> +  gdbarch_print_insn_ftype *print_insn = default_print_insn;
> +  gdbarch_skip_trampoline_code_ftype *skip_trampoline_code = generic_skip_trampoline_code;
>     const struct target_so_ops * so_ops = 0;
> -  gdbarch_skip_solib_resolver_ftype *skip_solib_resolver = nullptr;
> -  gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline = nullptr;
> -  gdbarch_in_indirect_branch_thunk_ftype *in_indirect_branch_thunk = nullptr;
> -  gdbarch_stack_frame_destroyed_p_ftype *stack_frame_destroyed_p = nullptr;
> +  gdbarch_skip_solib_resolver_ftype *skip_solib_resolver = generic_skip_solib_resolver;
> +  gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline = generic_in_solib_return_trampoline;
> +  gdbarch_in_indirect_branch_thunk_ftype *in_indirect_branch_thunk = default_in_indirect_branch_thunk;
> +  gdbarch_stack_frame_destroyed_p_ftype *stack_frame_destroyed_p = generic_stack_frame_destroyed_p;
>     gdbarch_elf_make_msymbol_special_ftype *elf_make_msymbol_special = nullptr;
> -  gdbarch_coff_make_msymbol_special_ftype *coff_make_msymbol_special = nullptr;
> -  gdbarch_make_symbol_special_ftype *make_symbol_special = nullptr;
> -  gdbarch_adjust_dwarf2_addr_ftype *adjust_dwarf2_addr = nullptr;
> -  gdbarch_adjust_dwarf2_line_ftype *adjust_dwarf2_line = nullptr;
> +  gdbarch_coff_make_msymbol_special_ftype *coff_make_msymbol_special = default_coff_make_msymbol_special;
> +  gdbarch_make_symbol_special_ftype *make_symbol_special = default_make_symbol_special;
> +  gdbarch_adjust_dwarf2_addr_ftype *adjust_dwarf2_addr = default_adjust_dwarf2_addr;
> +  gdbarch_adjust_dwarf2_line_ftype *adjust_dwarf2_line = default_adjust_dwarf2_line;
>     int cannot_step_breakpoint = 0;
>     int have_nonsteppable_watchpoint = 0;
>     gdbarch_address_class_type_flags_ftype *address_class_type_flags = nullptr;
>     gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags_to_name = nullptr;
> -  gdbarch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op = nullptr;
> +  gdbarch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op = default_execute_dwarf_cfa_vendor_op;
>     gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_type_flags = nullptr;
> -  gdbarch_register_reggroup_p_ftype *register_reggroup_p = nullptr;
> +  gdbarch_register_reggroup_p_ftype *register_reggroup_p = default_register_reggroup_p;
>     gdbarch_fetch_pointer_argument_ftype *fetch_pointer_argument = nullptr;
>     gdbarch_iterate_over_regset_sections_ftype *iterate_over_regset_sections = nullptr;
>     gdbarch_make_corefile_notes_ftype *make_corefile_notes = nullptr;
> @@ -185,16 +185,16 @@ struct gdbarch
>     const char * gcore_bfd_target = 0;
>     int vtable_function_descriptors = 0;
>     int vbit_in_delta = 0;
> -  gdbarch_skip_permanent_breakpoint_ftype *skip_permanent_breakpoint = nullptr;
> +  gdbarch_skip_permanent_breakpoint_ftype *skip_permanent_breakpoint = default_skip_permanent_breakpoint;
>     ULONGEST max_insn_length = 0;
>     gdbarch_displaced_step_copy_insn_ftype *displaced_step_copy_insn = nullptr;
> -  gdbarch_displaced_step_hw_singlestep_ftype *displaced_step_hw_singlestep = nullptr;
> -  gdbarch_displaced_step_fixup_ftype *displaced_step_fixup = nullptr;
> +  gdbarch_displaced_step_hw_singlestep_ftype *displaced_step_hw_singlestep = default_displaced_step_hw_singlestep;
> +  gdbarch_displaced_step_fixup_ftype *displaced_step_fixup = NULL;
>     gdbarch_displaced_step_prepare_ftype *displaced_step_prepare = nullptr;
> -  gdbarch_displaced_step_finish_ftype *displaced_step_finish = nullptr;
> +  gdbarch_displaced_step_finish_ftype *displaced_step_finish = NULL;
>     gdbarch_displaced_step_copy_insn_closure_by_addr_ftype *displaced_step_copy_insn_closure_by_addr = nullptr;
>     gdbarch_displaced_step_restore_all_in_ptid_ftype *displaced_step_restore_all_in_ptid = nullptr;
> -  gdbarch_relocate_instruction_ftype *relocate_instruction = nullptr;
> +  gdbarch_relocate_instruction_ftype *relocate_instruction = NULL;
>     gdbarch_overlay_update_ftype *overlay_update = nullptr;
>     gdbarch_core_read_description_ftype *core_read_description = nullptr;
>     int sofun_address_maybe_missing = 0;
> @@ -224,36 +224,36 @@ struct gdbarch
>     gdbarch_dtrace_disable_probe_ftype *dtrace_disable_probe = nullptr;
>     int has_global_solist = 0;
>     int has_global_breakpoints = 0;
> -  gdbarch_has_shared_address_space_ftype *has_shared_address_space = nullptr;
> -  gdbarch_fast_tracepoint_valid_at_ftype *fast_tracepoint_valid_at = nullptr;
> -  gdbarch_guess_tracepoint_registers_ftype *guess_tracepoint_registers = nullptr;
> -  gdbarch_auto_charset_ftype *auto_charset = nullptr;
> -  gdbarch_auto_wide_charset_ftype *auto_wide_charset = nullptr;
> +  gdbarch_has_shared_address_space_ftype *has_shared_address_space = default_has_shared_address_space;
> +  gdbarch_fast_tracepoint_valid_at_ftype *fast_tracepoint_valid_at = default_fast_tracepoint_valid_at;
> +  gdbarch_guess_tracepoint_registers_ftype *guess_tracepoint_registers = default_guess_tracepoint_registers;
> +  gdbarch_auto_charset_ftype *auto_charset = default_auto_charset;
> +  gdbarch_auto_wide_charset_ftype *auto_wide_charset = default_auto_wide_charset;
>     const char * solib_symbols_extension = 0;
>     int has_dos_based_file_system = 0;
> -  gdbarch_gen_return_address_ftype *gen_return_address = nullptr;
> +  gdbarch_gen_return_address_ftype *gen_return_address = default_gen_return_address;
>     gdbarch_info_proc_ftype *info_proc = nullptr;
>     gdbarch_core_info_proc_ftype *core_info_proc = nullptr;
> -  gdbarch_iterate_over_objfiles_in_search_order_ftype *iterate_over_objfiles_in_search_order = nullptr;
> -  struct ravenscar_arch_ops * ravenscar_ops = 0;
> -  gdbarch_insn_is_call_ftype *insn_is_call = nullptr;
> -  gdbarch_insn_is_ret_ftype *insn_is_ret = nullptr;
> -  gdbarch_insn_is_jump_ftype *insn_is_jump = nullptr;
> -  gdbarch_program_breakpoint_here_p_ftype *program_breakpoint_here_p = nullptr;
> +  gdbarch_iterate_over_objfiles_in_search_order_ftype *iterate_over_objfiles_in_search_order = default_iterate_over_objfiles_in_search_order;
> +  struct ravenscar_arch_ops * ravenscar_ops = NULL;
> +  gdbarch_insn_is_call_ftype *insn_is_call = default_insn_is_call;
> +  gdbarch_insn_is_ret_ftype *insn_is_ret = default_insn_is_ret;
> +  gdbarch_insn_is_jump_ftype *insn_is_jump = default_insn_is_jump;
> +  gdbarch_program_breakpoint_here_p_ftype *program_breakpoint_here_p = default_program_breakpoint_here_p;
>     gdbarch_auxv_parse_ftype *auxv_parse = nullptr;
> -  gdbarch_print_auxv_entry_ftype *print_auxv_entry = nullptr;
> -  gdbarch_vsyscall_range_ftype *vsyscall_range = nullptr;
> -  gdbarch_infcall_mmap_ftype *infcall_mmap = nullptr;
> -  gdbarch_infcall_munmap_ftype *infcall_munmap = nullptr;
> -  gdbarch_gcc_target_options_ftype *gcc_target_options = nullptr;
> -  gdbarch_gnu_triplet_regexp_ftype *gnu_triplet_regexp = nullptr;
> -  gdbarch_addressable_memory_unit_size_ftype *addressable_memory_unit_size = nullptr;
> +  gdbarch_print_auxv_entry_ftype *print_auxv_entry = default_print_auxv_entry;
> +  gdbarch_vsyscall_range_ftype *vsyscall_range = default_vsyscall_range;
> +  gdbarch_infcall_mmap_ftype *infcall_mmap = default_infcall_mmap;
> +  gdbarch_infcall_munmap_ftype *infcall_munmap = default_infcall_munmap;
> +  gdbarch_gcc_target_options_ftype *gcc_target_options = default_gcc_target_options;
> +  gdbarch_gnu_triplet_regexp_ftype *gnu_triplet_regexp = default_gnu_triplet_regexp;
> +  gdbarch_addressable_memory_unit_size_ftype *addressable_memory_unit_size = default_addressable_memory_unit_size;
>     const char * disassembler_options_implicit = 0;
>     char ** disassembler_options = 0;
>     const disasm_options_and_args_t * valid_disassembler_options = 0;
> -  gdbarch_type_align_ftype *type_align = nullptr;
> -  gdbarch_get_pc_address_flags_ftype *get_pc_address_flags = nullptr;
> -  gdbarch_read_core_file_mappings_ftype *read_core_file_mappings = nullptr;
> +  gdbarch_type_align_ftype *type_align = default_type_align;
> +  gdbarch_get_pc_address_flags_ftype *get_pc_address_flags = default_get_pc_address_flags;
> +  gdbarch_read_core_file_mappings_ftype *read_core_file_mappings = default_read_core_file_mappings;
>   };
>   
>   /* Create a new ``struct gdbarch'' based on information provided by
> @@ -275,102 +275,6 @@ gdbarch_alloc (const struct gdbarch_info *info,
>     gdbarch->osabi = info->osabi;
>     gdbarch->target_desc = info->target_desc;
>   
> -  /* Force the explicit initialization of these.  */
> -  gdbarch->short_bit = 2*TARGET_CHAR_BIT;
> -  gdbarch->int_bit = 4*TARGET_CHAR_BIT;
> -  gdbarch->long_bit = 4*TARGET_CHAR_BIT;
> -  gdbarch->long_long_bit = 2*gdbarch->long_bit;
> -  gdbarch->bfloat16_bit = 2*TARGET_CHAR_BIT;
> -  gdbarch->half_bit = 2*TARGET_CHAR_BIT;
> -  gdbarch->float_bit = 4*TARGET_CHAR_BIT;
> -  gdbarch->double_bit = 8*TARGET_CHAR_BIT;
> -  gdbarch->long_double_bit = 8*TARGET_CHAR_BIT;
> -  gdbarch->wchar_bit = 4*TARGET_CHAR_BIT;
> -  gdbarch->wchar_signed = -1;
> -  gdbarch->floatformat_for_type = default_floatformat_for_type;
> -  gdbarch->ptr_bit = gdbarch->int_bit;
> -  gdbarch->char_signed = -1;
> -  gdbarch->virtual_frame_pointer = legacy_virtual_frame_pointer;
> -  gdbarch->num_regs = -1;
> -  gdbarch->sp_regnum = -1;
> -  gdbarch->pc_regnum = -1;
> -  gdbarch->ps_regnum = -1;
> -  gdbarch->fp0_regnum = -1;
> -  gdbarch->stab_reg_to_regnum = no_op_reg_to_regnum;
> -  gdbarch->ecoff_reg_to_regnum = no_op_reg_to_regnum;
> -  gdbarch->sdb_reg_to_regnum = no_op_reg_to_regnum;
> -  gdbarch->dwarf2_reg_to_regnum = no_op_reg_to_regnum;
> -  gdbarch->dummy_id = default_dummy_id;
> -  gdbarch->deprecated_fp_regnum = -1;
> -  gdbarch->call_dummy_location = AT_ENTRY_POINT;
> -  gdbarch->code_of_frame_writable = default_code_of_frame_writable;
> -  gdbarch->print_registers_info = default_print_registers_info;
> -  gdbarch->print_float_info = default_print_float_info;
> -  gdbarch->register_sim_regno = legacy_register_sim_regno;
> -  gdbarch->cannot_fetch_register = cannot_register_not;
> -  gdbarch->cannot_store_register = cannot_register_not;
> -  gdbarch->convert_register_p = generic_convert_register_p;
> -  gdbarch->value_from_register = default_value_from_register;
> -  gdbarch->pointer_to_address = unsigned_pointer_to_address;
> -  gdbarch->address_to_pointer = unsigned_address_to_pointer;
> -  gdbarch->return_in_first_hidden_param_p = default_return_in_first_hidden_param_p;
> -  gdbarch->breakpoint_from_pc = default_breakpoint_from_pc;
> -  gdbarch->sw_breakpoint_from_kind = NULL;
> -  gdbarch->breakpoint_kind_from_current_state = default_breakpoint_kind_from_current_state;
> -  gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint;
> -  gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint;
> -  gdbarch->remote_register_number = default_remote_register_number;
> -  gdbarch->unwind_pc = default_unwind_pc;
> -  gdbarch->unwind_sp = default_unwind_sp;
> -  gdbarch->stabs_argument_has_addr = default_stabs_argument_has_addr;
> -  gdbarch->convert_from_func_ptr_addr = convert_from_func_ptr_addr_identity;
> -  gdbarch->addr_bits_remove = core_addr_identity;
> -  gdbarch->memtag_to_string = default_memtag_to_string;
> -  gdbarch->tagged_address_p = default_tagged_address_p;
> -  gdbarch->memtag_matches_p = default_memtag_matches_p;
> -  gdbarch->set_memtags = default_set_memtags;
> -  gdbarch->get_memtag = default_get_memtag;
> -  gdbarch->print_insn = default_print_insn;
> -  gdbarch->skip_trampoline_code = generic_skip_trampoline_code;
> -  gdbarch->skip_solib_resolver = generic_skip_solib_resolver;
> -  gdbarch->in_solib_return_trampoline = generic_in_solib_return_trampoline;
> -  gdbarch->in_indirect_branch_thunk = default_in_indirect_branch_thunk;
> -  gdbarch->stack_frame_destroyed_p = generic_stack_frame_destroyed_p;
> -  gdbarch->coff_make_msymbol_special = default_coff_make_msymbol_special;
> -  gdbarch->make_symbol_special = default_make_symbol_special;
> -  gdbarch->adjust_dwarf2_addr = default_adjust_dwarf2_addr;
> -  gdbarch->adjust_dwarf2_line = default_adjust_dwarf2_line;
> -  gdbarch->execute_dwarf_cfa_vendor_op = default_execute_dwarf_cfa_vendor_op;
> -  gdbarch->register_reggroup_p = default_register_reggroup_p;
> -  gdbarch->skip_permanent_breakpoint = default_skip_permanent_breakpoint;
> -  gdbarch->displaced_step_hw_singlestep = default_displaced_step_hw_singlestep;
> -  gdbarch->displaced_step_fixup = NULL;
> -  gdbarch->displaced_step_finish = NULL;
> -  gdbarch->relocate_instruction = NULL;
> -  gdbarch->has_shared_address_space = default_has_shared_address_space;
> -  gdbarch->fast_tracepoint_valid_at = default_fast_tracepoint_valid_at;
> -  gdbarch->guess_tracepoint_registers = default_guess_tracepoint_registers;
> -  gdbarch->auto_charset = default_auto_charset;
> -  gdbarch->auto_wide_charset = default_auto_wide_charset;
> -  gdbarch->gen_return_address = default_gen_return_address;
> -  gdbarch->iterate_over_objfiles_in_search_order = default_iterate_over_objfiles_in_search_order;
> -  gdbarch->ravenscar_ops = NULL;
> -  gdbarch->insn_is_call = default_insn_is_call;
> -  gdbarch->insn_is_ret = default_insn_is_ret;
> -  gdbarch->insn_is_jump = default_insn_is_jump;
> -  gdbarch->program_breakpoint_here_p = default_program_breakpoint_here_p;
> -  gdbarch->print_auxv_entry = default_print_auxv_entry;
> -  gdbarch->vsyscall_range = default_vsyscall_range;
> -  gdbarch->infcall_mmap = default_infcall_mmap;
> -  gdbarch->infcall_munmap = default_infcall_munmap;
> -  gdbarch->gcc_target_options = default_gcc_target_options;
> -  gdbarch->gnu_triplet_regexp = default_gnu_triplet_regexp;
> -  gdbarch->addressable_memory_unit_size = default_addressable_memory_unit_size;
> -  gdbarch->type_align = default_type_align;
> -  gdbarch->get_pc_address_flags = default_get_pc_address_flags;
> -  gdbarch->read_core_file_mappings = default_read_core_file_mappings;
> -  /* gdbarch_alloc() */
> -
>     return gdbarch;
>   }
>   
> diff --git a/gdb/gdbarch.py b/gdb/gdbarch.py
> index da848feae84..4424b319d5e 100755
> --- a/gdb/gdbarch.py
> +++ b/gdb/gdbarch.py
> @@ -286,11 +286,18 @@ with open("gdbarch.c", "w") as f:
>       print("  void **data = nullptr;", file=f)
>       print(file=f)
>       for c in filter(not_info, components):
> -        if isinstance(c, Value):
> -            print(f"  {c.type} {c.name} = 0;", file=f)
> +        if isinstance(c, Function):
> +            print(f"  gdbarch_{c.name}_ftype *", file=f, end="")
> +        else:
> +            print(f"  {c.type} ", file=f, end="")
> +        print(f"{c.name} = ", file=f, end="")
> +        if c.predefault is not None:
> +            print(f"{c.predefault};", file=f)
> +        elif isinstance(c, Value):
> +            print("0;", file=f)
>           else:
>               assert isinstance(c, Function)
> -            print(f"  gdbarch_{c.name}_ftype *{c.name} = nullptr;", file=f)
> +            print("nullptr;", file=f)
>       print("};", file=f)
>       print(file=f)
>       #
> @@ -312,12 +319,6 @@ with open("gdbarch.c", "w") as f:
>       for c in filter(info, components):
>           print(f"  gdbarch->{c.name} = info->{c.name};", file=f)
>       print(file=f)
> -    print("  /* Force the explicit initialization of these.  */", file=f)
> -    for c in filter(not_info, components):
> -        if c.predefault and c.predefault != "0":
> -            print(f"  gdbarch->{c.name} = {c.predefault};", file=f)
> -    print("  /* gdbarch_alloc() */", file=f)
> -    print(file=f)
>       print("  return gdbarch;", file=f)
>       print("}", file=f)
>       print(file=f)


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] Use enum for call_dummy_location
  2022-10-18 16:15 [PATCH 0/2] Use enum for call_dummy_location Tom Tromey
  2022-10-18 16:15 ` [PATCH 1/2] Inline initialization of gdbarch members Tom Tromey
  2022-10-18 16:15 ` [PATCH 2/2] Use enum for gdbarch's call_dummy_location Tom Tromey
@ 2022-10-26 11:25 ` Luis Machado
  2 siblings, 0 replies; 7+ messages in thread
From: Luis Machado @ 2022-10-26 11:25 UTC (permalink / raw)
  To: Tom Tromey, gdb-patches

On 10/18/22 17:15, Tom Tromey via Gdb-patches wrote:
> I wanted to change the gdbarch call_dummy_location to use an enum,
> instead of a couple of #defines.  This required a bit of work in
> gdbarch.py, and this series is the result.
> 
> Tom
> 
> 

Both patches LGTM.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] Use enum for gdbarch's call_dummy_location
  2022-10-18 16:15 ` [PATCH 2/2] Use enum for gdbarch's call_dummy_location Tom Tromey
@ 2022-10-26 11:57   ` Bruno Larsen
  0 siblings, 0 replies; 7+ messages in thread
From: Bruno Larsen @ 2022-10-26 11:57 UTC (permalink / raw)
  To: Tom Tromey, gdb-patches


On 18/10/2022 18:15, Tom Tromey via Gdb-patches wrote:
> This changes gdbarch to use an enum for call_dummy_location, providing
> a little more type safety.

No regressions introduced, and the type safety is always welcome!

Reviewed-By: Bruno Larsen <blarsen@redhat.com>

Cheers,
Bruno

> ---
>   gdb/gdbarch-components.py | 2 +-
>   gdb/gdbarch-gen.h         | 4 ++--
>   gdb/gdbarch.c             | 6 +++---
>   gdb/gdbarch.h             | 7 +++++++
>   gdb/inferior.h            | 3 ---
>   5 files changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/gdb/gdbarch-components.py b/gdb/gdbarch-components.py
> index c997a709cbb..b2c7b784761 100644
> --- a/gdb/gdbarch-components.py
> +++ b/gdb/gdbarch-components.py
> @@ -647,7 +647,7 @@ Method(
>   )
>   
>   Value(
> -    type="int",
> +    type="enum call_dummy_location_type",
>       name="call_dummy_location",
>       predefault="AT_ENTRY_POINT",
>       invalid=False,
> diff --git a/gdb/gdbarch-gen.h b/gdb/gdbarch-gen.h
> index 840de585869..e0d7a08ff6a 100644
> --- a/gdb/gdbarch-gen.h
> +++ b/gdb/gdbarch-gen.h
> @@ -331,8 +331,8 @@ typedef CORE_ADDR (gdbarch_push_dummy_call_ftype) (struct gdbarch *gdbarch, stru
>   extern CORE_ADDR gdbarch_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, function_call_return_method return_method, CORE_ADDR struct_addr);
>   extern void set_gdbarch_push_dummy_call (struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype *push_dummy_call);
>   
> -extern int gdbarch_call_dummy_location (struct gdbarch *gdbarch);
> -extern void set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, int call_dummy_location);
> +extern enum call_dummy_location_type gdbarch_call_dummy_location (struct gdbarch *gdbarch);
> +extern void set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, enum call_dummy_location_type call_dummy_location);
>   
>   extern bool gdbarch_push_dummy_code_p (struct gdbarch *gdbarch);
>   
> diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
> index 5545cfdad8e..6d6e61006f5 100644
> --- a/gdb/gdbarch.c
> +++ b/gdb/gdbarch.c
> @@ -97,7 +97,7 @@ struct gdbarch
>     gdbarch_dummy_id_ftype *dummy_id = default_dummy_id;
>     int deprecated_fp_regnum = -1;
>     gdbarch_push_dummy_call_ftype *push_dummy_call = nullptr;
> -  int call_dummy_location = AT_ENTRY_POINT;
> +  enum call_dummy_location_type call_dummy_location = AT_ENTRY_POINT;
>     gdbarch_push_dummy_code_ftype *push_dummy_code = nullptr;
>     gdbarch_code_of_frame_writable_ftype *code_of_frame_writable = default_code_of_frame_writable;
>     gdbarch_print_registers_info_ftype *print_registers_info = default_print_registers_info;
> @@ -2230,7 +2230,7 @@ set_gdbarch_push_dummy_call (struct gdbarch *gdbarch,
>     gdbarch->push_dummy_call = push_dummy_call;
>   }
>   
> -int
> +enum call_dummy_location_type
>   gdbarch_call_dummy_location (struct gdbarch *gdbarch)
>   {
>     gdb_assert (gdbarch != NULL);
> @@ -2242,7 +2242,7 @@ gdbarch_call_dummy_location (struct gdbarch *gdbarch)
>   
>   void
>   set_gdbarch_call_dummy_location (struct gdbarch *gdbarch,
> -                                 int call_dummy_location)
> +                                 enum call_dummy_location_type call_dummy_location)
>   {
>     gdbarch->call_dummy_location = call_dummy_location;
>   }
> diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
> index 2f1c7399d78..f2ba5f97765 100644
> --- a/gdb/gdbarch.h
> +++ b/gdb/gdbarch.h
> @@ -149,6 +149,13 @@ using read_core_file_mappings_loop_ftype =
>   			   const char *filename,
>   			   const bfd_build_id *build_id)>;
>   
> +/* Possible values for gdbarch_call_dummy_location.  */
> +enum call_dummy_location_type
> +{
> +  ON_STACK,
> +  AT_ENTRY_POINT,
> +};
> +
>   #include "gdbarch-gen.h"
>   
>   /* An internal function that should _only_ be called from gdbarch_tdep.
> diff --git a/gdb/inferior.h b/gdb/inferior.h
> index 8877be38e36..69525a2e053 100644
> --- a/gdb/inferior.h
> +++ b/gdb/inferior.h
> @@ -282,9 +282,6 @@ enum stop_kind
>     };
>   
>   \f
> -/* Possible values for gdbarch_call_dummy_location.  */
> -#define ON_STACK 1
> -#define AT_ENTRY_POINT 4
>   
>   /* Base class for target-specific inferior data.  */
>   


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] Inline initialization of gdbarch members
  2022-10-26  9:33   ` Bruno Larsen
@ 2022-10-31 15:03     ` Tom Tromey
  0 siblings, 0 replies; 7+ messages in thread
From: Tom Tromey @ 2022-10-31 15:03 UTC (permalink / raw)
  To: Bruno Larsen; +Cc: Tom Tromey, gdb-patches

>>>>> "Bruno" == Bruno Larsen <blarsen@redhat.com> writes:

Bruno> On 18/10/2022 18:15, Tom Tromey via Gdb-patches wrote:
>> This changes gdbarch to use the "predefault" to initialize its members
>> inline.  This required changing a couple of the Value instantiations
>> to avoid a use of "gdbarch" during initialization, but on the whole I
>> think this is better -- it removes a hidden ordering dependency.

Bruno> I don't really understand gdbarch, so sorry if this is an obvious
Bruno> question, but why have you only avoided using gdbarch in Value 
Bruno> instantiations and kept them in Info instantiations? (lines 120 and
Bruno> 141, for instance)

This patch only needed to touch the 'predefault's, because after the
patch these are used for inline initializers.

The lines you point out here are 'printer' fields.  These are used for
debug output in the individual methods, so it's still fine for these to
refer to the gdbarch local variable.

Tom

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-10-31 15:03 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-18 16:15 [PATCH 0/2] Use enum for call_dummy_location Tom Tromey
2022-10-18 16:15 ` [PATCH 1/2] Inline initialization of gdbarch members Tom Tromey
2022-10-26  9:33   ` Bruno Larsen
2022-10-31 15:03     ` Tom Tromey
2022-10-18 16:15 ` [PATCH 2/2] Use enum for gdbarch's call_dummy_location Tom Tromey
2022-10-26 11:57   ` Bruno Larsen
2022-10-26 11:25 ` [PATCH 0/2] Use enum for call_dummy_location Luis Machado

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).