[binutils-gdb] gdb: better gdbarch init values

Simon Marchi via Gdb-cvs <[email protected]>
Newsgroups gmane.comp.gdb.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=fe54c560972f8b6de476ce36f2999a1296e5b618

commit fe54c560972f8b6de476ce36f2999a1296e5b618
Author: Simon Marchi <[email protected]>
Date:   Fri Feb 27 15:05:28 2026 -0500

    gdb: better gdbarch init values
    
    Change the initial values of the gdbarch structure fields to be
    nullptr, false or 0, depending on their types (instead of just 0).
    
    Define an `init_value()` method in the Value and Function classes to
    provide the appropriate initial value for the component.  Use it at a
    few places in gdbarch.py.
    
    Change-Id: I700ca49b08a062e4d745531620c4913a733ca3e8
    Approved-By: Tom Tromey <[email protected]>

Diff:
---
 gdb/gdbarch-gen.c    | 156 +++++++++++++++++++++++++--------------------------
 gdb/gdbarch.py       |  18 ++----
 gdb/gdbarch_types.py |  24 ++++++--
 3 files changed, 101 insertions(+), 97 deletions(-)

diff --git a/gdb/gdbarch-gen.c b/gdb/gdbarch-gen.c
index 4f9cc637a5a..f8b2530fffb 100644
--- a/gdb/gdbarch-gen.c
+++ b/gdb/gdbarch-gen.c
@@ -181,9 +181,9 @@ struct gdbarch
   gdbarch_core_thread_name_ftype *core_thread_name = nullptr;
   gdbarch_core_xfer_siginfo_ftype *core_xfer_siginfo = nullptr;
   gdbarch_core_read_x86_xsave_layout_ftype *core_read_x86_xsave_layout = nullptr;
-  const char * gcore_bfd_target = 0;
+  const char * gcore_bfd_target = nullptr;
   bool vtable_function_descriptors = false;
-  bool vbit_in_delta = 0;
+  bool vbit_in_delta = false;
   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 = default_displaced_step_hw_singlestep;
@@ -203,16 +203,16 @@ struct gdbarch
   gdbarch_get_siginfo_type_ftype *get_siginfo_type = nullptr;
   gdbarch_record_special_symbol_ftype *record_special_symbol = nullptr;
   gdbarch_get_syscall_number_ftype *get_syscall_number = nullptr;
-  const char * xml_syscall_file = 0;
-  struct syscalls_info * syscalls_info = 0;
-  const char *const * stap_integer_prefixes = 0;
-  const char *const * stap_integer_suffixes = 0;
-  const char *const * stap_register_prefixes = 0;
-  const char *const * stap_register_suffixes = 0;
-  const char *const * stap_register_indirection_prefixes = 0;
-  const char *const * stap_register_indirection_suffixes = 0;
-  const char * stap_gdb_register_prefix = 0;
-  const char * stap_gdb_register_suffix = 0;
+  const char * xml_syscall_file = nullptr;
+  struct syscalls_info * syscalls_info = nullptr;
+  const char *const * stap_integer_prefixes = nullptr;
+  const char *const * stap_integer_suffixes = nullptr;
+  const char *const * stap_register_prefixes = nullptr;
+  const char *const * stap_register_suffixes = nullptr;
+  const char *const * stap_register_indirection_prefixes = nullptr;
+  const char *const * stap_register_indirection_suffixes = nullptr;
+  const char * stap_gdb_register_prefix = nullptr;
+  const char * stap_gdb_register_suffix = nullptr;
   gdbarch_stap_is_single_operand_ftype *stap_is_single_operand = nullptr;
   gdbarch_stap_parse_special_token_ftype *stap_parse_special_token = nullptr;
   gdbarch_stap_adjust_register_ftype *stap_adjust_register = nullptr;
@@ -243,9 +243,9 @@ struct gdbarch
   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;
-  std::string * disassembler_options = 0;
-  const disasm_options_and_args_t * valid_disassembler_options = 0;
+  const char * disassembler_options_implicit = nullptr;
+  std::string * disassembler_options = nullptr;
+  const disasm_options_and_args_t * valid_disassembler_options = 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;
@@ -335,9 +335,9 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of ps_regnum, invalid_p == 0.  */
   /* Skip verify of fp0_regnum, invalid_p == 0.  */
   /* Skip verify of dwarf2_reg_to_regnum, invalid_p == 0.  */
-  if (gdbarch->register_name == 0)
+  if (gdbarch->register_name == nullptr)
     log.puts ("\n\tregister_name");
-  if (gdbarch->register_type == 0)
+  if (gdbarch->register_type == nullptr)
     log.puts ("\n\tregister_type");
   /* Skip verify of dummy_id, invalid_p == 0.  */
   /* Skip verify of deprecated_fp_regnum, invalid_p == 0.  */
@@ -366,14 +366,14 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of dwarf2_omit_typedef_p, invalid_p == 0.  */
   /* Skip verify of update_call_site_pc, invalid_p == 0.  */
   /* Skip verify of return_in_first_hidden_param_p, invalid_p == 0.  */
-  if (gdbarch->skip_prologue == 0)
+  if (gdbarch->skip_prologue == nullptr)
     log.puts ("\n\tskip_prologue");
   /* Skip verify of skip_main_prologue, has predicate.  */
   /* Skip verify of skip_entrypoint, has predicate.  */
-  if (gdbarch->inner_than == 0)
+  if (gdbarch->inner_than == nullptr)
     log.puts ("\n\tinner_than");
   /* Skip verify of breakpoint_from_pc, invalid_p == 0.  */
-  if (gdbarch->breakpoint_kind_from_pc == 0)
+  if (gdbarch->breakpoint_kind_from_pc == nullptr)
     log.puts ("\n\tbreakpoint_kind_from_pc");
   /* Skip verify of sw_breakpoint_from_kind, invalid_p == 0.  */
   /* Skip verify of breakpoint_kind_from_current_state, invalid_p == 0.  */
@@ -1752,7 +1752,7 @@ bool
 gdbarch_read_pc_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->read_pc != NULL;
+  return gdbarch->read_pc != nullptr;
 }
 
 CORE_ADDR
@@ -1776,7 +1776,7 @@ bool
 gdbarch_write_pc_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->write_pc != NULL;
+  return gdbarch->write_pc != nullptr;
 }
 
 void
@@ -1817,7 +1817,7 @@ bool
 gdbarch_pseudo_register_read_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->pseudo_register_read != NULL;
+  return gdbarch->pseudo_register_read != nullptr;
 }
 
 enum register_status
@@ -1841,7 +1841,7 @@ bool
 gdbarch_pseudo_register_read_value_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->pseudo_register_read_value != NULL;
+  return gdbarch->pseudo_register_read_value != nullptr;
 }
 
 struct value *
@@ -1865,7 +1865,7 @@ bool
 gdbarch_pseudo_register_write_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->pseudo_register_write != NULL;
+  return gdbarch->pseudo_register_write != nullptr;
 }
 
 void
@@ -1941,7 +1941,7 @@ bool
 gdbarch_ax_pseudo_register_collect_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->ax_pseudo_register_collect != NULL;
+  return gdbarch->ax_pseudo_register_collect != nullptr;
 }
 
 void
@@ -1965,7 +1965,7 @@ bool
 gdbarch_ax_pseudo_register_push_stack_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->ax_pseudo_register_push_stack != NULL;
+  return gdbarch->ax_pseudo_register_push_stack != nullptr;
 }
 
 bool
@@ -1989,7 +1989,7 @@ bool
 gdbarch_report_signal_info_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->report_signal_info != NULL;
+  return gdbarch->report_signal_info != nullptr;
 }
 
 void
@@ -2170,7 +2170,7 @@ bool
 gdbarch_push_dummy_call_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->push_dummy_call != NULL;
+  return gdbarch->push_dummy_call != nullptr;
 }
 
 CORE_ADDR
@@ -2211,7 +2211,7 @@ bool
 gdbarch_push_dummy_code_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->push_dummy_code != NULL;
+  return gdbarch->push_dummy_code != nullptr;
 }
 
 CORE_ADDR
@@ -2337,7 +2337,7 @@ bool
 gdbarch_get_longjmp_target_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->get_longjmp_target != NULL;
+  return gdbarch->get_longjmp_target != nullptr;
 }
 
 bool
@@ -2480,7 +2480,7 @@ bool
 gdbarch_integer_to_address_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->integer_to_address != NULL;
+  return gdbarch->integer_to_address != nullptr;
 }
 
 CORE_ADDR
@@ -2613,7 +2613,7 @@ bool
 gdbarch_skip_main_prologue_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->skip_main_prologue != NULL;
+  return gdbarch->skip_main_prologue != nullptr;
 }
 
 CORE_ADDR
@@ -2637,7 +2637,7 @@ bool
 gdbarch_skip_entrypoint_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->skip_entrypoint != NULL;
+  return gdbarch->skip_entrypoint != nullptr;
 }
 
 CORE_ADDR
@@ -2746,7 +2746,7 @@ bool
 gdbarch_adjust_breakpoint_address_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->adjust_breakpoint_address != NULL;
+  return gdbarch->adjust_breakpoint_address != nullptr;
 }
 
 CORE_ADDR
@@ -2855,7 +2855,7 @@ bool
 gdbarch_fetch_tls_load_module_address_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->fetch_tls_load_module_address != NULL;
+  return gdbarch->fetch_tls_load_module_address != nullptr;
 }
 
 CORE_ADDR
@@ -2879,7 +2879,7 @@ bool
 gdbarch_get_thread_local_address_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->get_thread_local_address != NULL;
+  return gdbarch->get_thread_local_address != nullptr;
 }
 
 CORE_ADDR
@@ -2954,7 +2954,7 @@ bool
 gdbarch_frame_num_args_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->frame_num_args != NULL;
+  return gdbarch->frame_num_args != nullptr;
 }
 
 int
@@ -2978,7 +2978,7 @@ bool
 gdbarch_frame_align_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->frame_align != NULL;
+  return gdbarch->frame_align != nullptr;
 }
 
 CORE_ADDR
@@ -3206,7 +3206,7 @@ bool
 gdbarch_get_next_pcs_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->get_next_pcs != NULL;
+  return gdbarch->get_next_pcs != nullptr;
 }
 
 std::vector<CORE_ADDR>
@@ -3230,7 +3230,7 @@ bool
 gdbarch_single_step_through_delay_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->single_step_through_delay != NULL;
+  return gdbarch->single_step_through_delay != nullptr;
 }
 
 bool
@@ -3373,7 +3373,7 @@ bool
 gdbarch_elf_make_msymbol_special_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->elf_make_msymbol_special != NULL;
+  return gdbarch->elf_make_msymbol_special != nullptr;
 }
 
 void
@@ -3499,7 +3499,7 @@ bool
 gdbarch_address_class_type_flags_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->address_class_type_flags != NULL;
+  return gdbarch->address_class_type_flags != nullptr;
 }
 
 type_instance_flags
@@ -3523,7 +3523,7 @@ bool
 gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->address_class_type_flags_to_name != NULL;
+  return gdbarch->address_class_type_flags_to_name != nullptr;
 }
 
 const char *
@@ -3564,7 +3564,7 @@ bool
 gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->address_class_name_to_type_flags != NULL;
+  return gdbarch->address_class_name_to_type_flags != nullptr;
 }
 
 bool
@@ -3622,7 +3622,7 @@ bool
 gdbarch_iterate_over_regset_sections_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->iterate_over_regset_sections != NULL;
+  return gdbarch->iterate_over_regset_sections != nullptr;
 }
 
 void
@@ -3646,7 +3646,7 @@ bool
 gdbarch_make_corefile_notes_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->make_corefile_notes != NULL;
+  return gdbarch->make_corefile_notes != nullptr;
 }
 
 gdb::unique_xmalloc_ptr<char>
@@ -3670,7 +3670,7 @@ bool
 gdbarch_find_memory_regions_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->find_memory_regions != NULL;
+  return gdbarch->find_memory_regions != nullptr;
 }
 
 bool
@@ -3728,7 +3728,7 @@ bool
 gdbarch_decode_memtag_section_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->decode_memtag_section != NULL;
+  return gdbarch->decode_memtag_section != nullptr;
 }
 
 gdb::byte_vector
@@ -3752,7 +3752,7 @@ bool
 gdbarch_core_xfer_shared_libraries_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->core_xfer_shared_libraries != NULL;
+  return gdbarch->core_xfer_shared_libraries != nullptr;
 }
 
 ULONGEST
@@ -3776,7 +3776,7 @@ bool
 gdbarch_core_xfer_shared_libraries_aix_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->core_xfer_shared_libraries_aix != NULL;
+  return gdbarch->core_xfer_shared_libraries_aix != nullptr;
 }
 
 ULONGEST
@@ -3800,7 +3800,7 @@ bool
 gdbarch_core_pid_to_str_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->core_pid_to_str != NULL;
+  return gdbarch->core_pid_to_str != nullptr;
 }
 
 std::string
@@ -3824,7 +3824,7 @@ bool
 gdbarch_core_thread_name_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->core_thread_name != NULL;
+  return gdbarch->core_thread_name != nullptr;
 }
 
 const char *
@@ -3848,7 +3848,7 @@ bool
 gdbarch_core_xfer_siginfo_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->core_xfer_siginfo != NULL;
+  return gdbarch->core_xfer_siginfo != nullptr;
 }
 
 LONGEST
@@ -3872,7 +3872,7 @@ bool
 gdbarch_core_read_x86_xsave_layout_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->core_read_x86_xsave_layout != NULL;
+  return gdbarch->core_read_x86_xsave_layout != nullptr;
 }
 
 bool
@@ -3896,7 +3896,7 @@ bool
 gdbarch_gcore_bfd_target_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->gcore_bfd_target != NULL;
+  return gdbarch->gcore_bfd_target != nullptr;
 }
 
 const char *
@@ -4031,7 +4031,7 @@ bool
 gdbarch_displaced_step_prepare_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->displaced_step_prepare != NULL;
+  return gdbarch->displaced_step_prepare != nullptr;
 }
 
 displaced_step_prepare_status
@@ -4072,7 +4072,7 @@ bool
 gdbarch_displaced_step_copy_insn_closure_by_addr_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->displaced_step_copy_insn_closure_by_addr != NULL;
+  return gdbarch->displaced_step_copy_insn_closure_by_addr != nullptr;
 }
 
 const displaced_step_copy_insn_closure *
@@ -4148,7 +4148,7 @@ bool
 gdbarch_overlay_update_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->overlay_update != NULL;
+  return gdbarch->overlay_update != nullptr;
 }
 
 void
@@ -4172,7 +4172,7 @@ bool
 gdbarch_core_read_description_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->core_read_description != NULL;
+  return gdbarch->core_read_description != nullptr;
 }
 
 const struct target_desc *
@@ -4196,7 +4196,7 @@ bool
 gdbarch_process_record_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->process_record != NULL;
+  return gdbarch->process_record != nullptr;
 }
 
 int
@@ -4220,7 +4220,7 @@ bool
 gdbarch_process_record_signal_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->process_record_signal != NULL;
+  return gdbarch->process_record_signal != nullptr;
 }
 
 int
@@ -4244,7 +4244,7 @@ bool
 gdbarch_gdb_signal_from_target_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->gdb_signal_from_target != NULL;
+  return gdbarch->gdb_signal_from_target != nullptr;
 }
 
 enum gdb_signal
@@ -4268,7 +4268,7 @@ bool
 gdbarch_gdb_signal_to_target_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->gdb_signal_to_target != NULL;
+  return gdbarch->gdb_signal_to_target != nullptr;
 }
 
 int
@@ -4292,7 +4292,7 @@ bool
 gdbarch_get_siginfo_type_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->get_siginfo_type != NULL;
+  return gdbarch->get_siginfo_type != nullptr;
 }
 
 struct type *
@@ -4316,7 +4316,7 @@ bool
 gdbarch_record_special_symbol_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->record_special_symbol != NULL;
+  return gdbarch->record_special_symbol != nullptr;
 }
 
 void
@@ -4340,7 +4340,7 @@ bool
 gdbarch_get_syscall_number_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->get_syscall_number != NULL;
+  return gdbarch->get_syscall_number != nullptr;
 }
 
 LONGEST
@@ -4534,7 +4534,7 @@ bool
 gdbarch_stap_is_single_operand_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->stap_is_single_operand != NULL;
+  return gdbarch->stap_is_single_operand != nullptr;
 }
 
 bool
@@ -4558,7 +4558,7 @@ bool
 gdbarch_stap_parse_special_token_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->stap_parse_special_token != NULL;
+  return gdbarch->stap_parse_special_token != nullptr;
 }
 
 expr::operation_up
@@ -4582,7 +4582,7 @@ bool
 gdbarch_stap_adjust_register_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->stap_adjust_register != NULL;
+  return gdbarch->stap_adjust_register != nullptr;
 }
 
 std::string
@@ -4606,7 +4606,7 @@ bool
 gdbarch_dtrace_parse_probe_argument_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->dtrace_parse_probe_argument != NULL;
+  return gdbarch->dtrace_parse_probe_argument != nullptr;
 }
 
 expr::operation_up
@@ -4630,7 +4630,7 @@ bool
 gdbarch_dtrace_probe_is_enabled_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->dtrace_probe_is_enabled != NULL;
+  return gdbarch->dtrace_probe_is_enabled != nullptr;
 }
 
 bool
@@ -4654,7 +4654,7 @@ bool
 gdbarch_dtrace_enable_probe_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->dtrace_enable_probe != NULL;
+  return gdbarch->dtrace_enable_probe != nullptr;
 }
 
 void
@@ -4678,7 +4678,7 @@ bool
 gdbarch_dtrace_disable_probe_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->dtrace_disable_probe != NULL;
+  return gdbarch->dtrace_disable_probe != nullptr;
 }
 
 void
@@ -4838,7 +4838,7 @@ bool
 gdbarch_info_proc_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->info_proc != NULL;
+  return gdbarch->info_proc != nullptr;
 }
 
 void
@@ -4862,7 +4862,7 @@ bool
 gdbarch_core_info_proc_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->core_info_proc != NULL;
+  return gdbarch->core_info_proc != nullptr;
 }
 
 void
@@ -4971,7 +4971,7 @@ bool
 gdbarch_auxv_parse_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->auxv_parse != NULL;
+  return gdbarch->auxv_parse != nullptr;
 }
 
 int
@@ -5250,7 +5250,7 @@ bool
 gdbarch_shadow_stack_push_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  return gdbarch->shadow_stack_push != NULL;
+  return gdbarch->shadow_stack_push != nullptr;
 }
 
 void
diff --git a/gdb/gdbarch.py b/gdb/gdbarch.py
index 5e27e8f25b4..db5e957d6bc 100755
--- a/gdb/gdbarch.py
+++ b/gdb/gdbarch.py
@@ -151,14 +151,7 @@ with open("gdbarch-gen.c", "w") as f:
             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("nullptr;", file=f)
+        print(f"{c.name} = {c.init_value()};", file=f)
     print("};", file=f)
     print(file=f)
     #
@@ -209,8 +202,7 @@ with open("gdbarch-gen.c", "w") as f:
         # change field's value to the postdefault if its current value
         # is not different to the initial value of the field.
         if c.postdefault is not None:
-            init_value = c.predefault or "0"
-            print(f"  if (gdbarch->{c.name} == {init_value})", file=f)
+            print(f"  if (gdbarch->{c.name} == {c.init_value()})", file=f)
             print(f"    gdbarch->{c.name} = {c.postdefault};", file=f)
 
         # Now validate the value.
@@ -229,8 +221,7 @@ with open("gdbarch-gen.c", "w") as f:
                     f"component {c.name} has postdefault and invalid set to True"
                 )
             else:
-                init_value = c.predefault or "0"
-                print(f"  if (gdbarch->{c.name} == {init_value})", file=f)
+                print(f"  if (gdbarch->{c.name} == {c.init_value()})", file=f)
                 print(f"""    log.puts ("\\n\\t{c.name}");""", file=f)
         else:
             print(f"  /* Skip verify of {c.name}, invalid_p == 0.  */", file=f)
@@ -357,9 +348,8 @@ with open("gdbarch-gen.c", "w") as f:
                 print("  /* Check predicate was used.  */", file=f)
                 print(f"  gdb_assert (gdbarch_{c.name}_p (gdbarch));", file=f)
             elif c.invalid or c.postdefault is not None:
-                init_value = c.predefault or "0"
                 print("  /* Check variable changed from its initial value.  */", file=f)
-                print(f"  gdb_assert (gdbarch->{c.name} != {init_value});", file=f)
+                print(f"  gdb_assert (gdbarch->{c.name} != {c.init_value()});", file=f)
             else:
                 print(f"  /* Skip verify of {c.name}, invalid_p == 0.  */", file=f)
             print("  if (gdbarch_debug >= 2)", file=f)
diff --git a/gdb/gdbarch_types.py b/gdb/gdbarch_types.py
index f2a40e1444c..d38c0248500 100644
--- a/gdb/gdbarch_types.py
+++ b/gdb/gdbarch_types.py
@@ -76,11 +76,7 @@ class Component:
 
     def get_predicate(self):
         "Return the expression used for validity checking."
-        if self.predefault:
-            predicate = f"gdbarch->{self.name} != {self.predefault}"
-        else:
-            predicate = f"gdbarch->{self.name} != NULL"
-        return predicate
+        return f"gdbarch->{self.name} != {self.init_value()}"
 
 
 class Info(Component):
@@ -115,6 +111,18 @@ class Value(Component):
             unused=unused,
         )
 
+    def init_value(self):
+        if self.predefault is not None:
+            return self.predefault
+
+        if self.type == "bool":
+            return "false"
+
+        if self.type.endswith("*"):
+            return "nullptr"
+
+        return "0"
+
 
 class Function(Component):
     "A Function component is a function pointer member."
@@ -171,6 +179,12 @@ class Function(Component):
         "Return the actual parameters to forward, as a string."
         return ", ".join([p[1] for p in self.params])
 
+    def init_value(self):
+        if self.predefault is not None:
+            return self.predefault
+
+        return "nullptr"
+
 
 class Method(Function):
     "A Method is like a Function but passes the gdbarch through."
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.