[PATCH v2] Implement debugging of WOW64 processes

Simon Marchi simark@simark.ca
Wed Mar 4 18:15:00 GMT 2020


On 2020-03-04 12:12 p.m., Hannes Domani via gdb-patches wrote:
> @@ -1879,6 +2110,21 @@ do_initial_windows_stuff (struct target_ops *ops, DWORD pid, int attaching)
>    clear_proceed_status (0);
>    init_wait_for_inferior ();
>  
> +#ifdef __x86_64__
> +  ignore_first_breakpoint = !attaching && wow64_process;
> +
> +  if (wow64_process)
> +    {
> +      windows_set_context_register_offsets (i386_mappings);
> +      windows_set_segment_register_p (i386_windows_segment_register_p);
> +    }
> +  else
> +    {
> +      windows_set_context_register_offsets (amd64_mappings);
> +      windows_set_segment_register_p (amd64_windows_segment_register_p);
> +    }
> +#endif

The other place where windows_set_context_register_offsets and
windows_set_segment_register_p are called is in _initialize_i386_windows_nat and
_initialize_amd64_windows_nat.  I'm thinking that since we are calling them here,
it's no longer relevant to call them in the _initialize_* functions.  I think it
would be simpler to keep just the calls here.  You could probably do like you do
elsewhere:

#ifdef __x64_64__
  if (!wow64_process)
    {
      windows_set_context_register_offsets (amd64_mappings);
      windows_set_segment_register_p (amd64_windows_segment_register_p);
    }
  else
#else
    {
      windows_set_context_register_offsets (i386_mappings);
      windows_set_segment_register_p (i386_windows_segment_register_p);
    }
#endif

They day somebody will implement multi-inferior support for Windows, the calls
in the _initialize_* functions will have to go anyway, this it will be an inferior
property anyway (I suppose you could debug one WOW64 and one non-WOW64 process at
the same time).

Simon



More information about the Gdb-patches mailing list