From: Helge Deller <deller@gmx.de>
To: Sven Schnelle <svens@stackframe.org>, gdb-patches@sourceware.org
Cc: John David Anglin <dave.anglin@bell.net>, binutils@sourceware.org
Subject: Re: [PATCH RESEND] gdb/hppa: guess g packet size
Date: Sat, 1 Nov 2025 14:48:33 +0100 [thread overview]
Message-ID: <7c90e3dd-ea6f-4372-a1da-6ab88cdfbdb6@gmx.de> (raw)
In-Reply-To: <20251101080538.857188-1-svens@stackframe.org>
On 11/1/25 09:05, Sven Schnelle wrote:
> With qemu supporting 64 bit now, add some code to determine the
> register size of a hppa remote target.
>
> Signed-off-by: Sven Schnelle <svens@stackframe.org>
Tested-by: Helge Deller <deller@gmx.de>
Helge
> ---
> gdb/hppa-tdep.c | 46 +++++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 41 insertions(+), 5 deletions(-)
>
> diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
> index 96cb797c023..ca59fc63d1d 100644
> --- a/gdb/hppa-tdep.c
> +++ b/gdb/hppa-tdep.c
> @@ -33,6 +33,8 @@
> #include "trad-frame.h"
> #include "frame-unwind.h"
> #include "frame-base.h"
> +#include "remote.h"
> +#include "target-descriptions.h"
>
> #include "gdbcore.h"
> #include "cli/cli-cmds.h"
> @@ -43,6 +45,14 @@
>
> static bool hppa_debug = false;
>
> +/* Properties (for struct target_desc) describing the g/G packet
> + layout. */
> +#define PROPERTY_GP32 "internal: transfers-32bit-registers"
> +#define PROPERTY_GP64 "internal: transfers-64bit-registers"
> +
> +struct target_desc *hppa_tdesc32;
> +struct target_desc *hppa_tdesc64;
> +
> /* Some local constants. */
> static const int hppa32_num_regs = 128;
> static const int hppa64_num_regs = 96;
> @@ -2978,6 +2988,17 @@ hppa_skip_trampoline_code (const frame_info_ptr &frame, CORE_ADDR pc)
>
> -- chastain 2003-12-18 */
>
> +static void
> +hppa_register_g_packet_guesses (struct gdbarch *gdbarch)
> +{
> + /* If the size matches the set of 32-bit or 64-bit integer registers,
> + assume that's what we've got. */
> + register_remote_g_packet_guess (gdbarch, hppa32_num_regs * 4, hppa_tdesc32);
> + register_remote_g_packet_guess (gdbarch, hppa64_num_regs * 8, hppa_tdesc64);
> +
> + /* Otherwise we don't have a useful guess. */
> +}
> +
> static struct gdbarch *
> hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
> {
> @@ -2991,14 +3012,24 @@ hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
> = gdbarch_alloc (&info, gdbarch_tdep_up (new hppa_gdbarch_tdep));
> hppa_gdbarch_tdep *tdep = gdbarch_tdep<hppa_gdbarch_tdep> (gdbarch);
>
> - /* Determine from the bfd_arch_info structure if we are dealing with
> - a 32 or 64 bits architecture. If the bfd_arch_info is not available,
> - then default to a 32bit machine. */
> - if (info.bfd_arch_info != NULL)
> + /* Determine from the target description if we are dealing with
> + a 32 or 64 bits architecture. If the target description is not
> + available, then check whether bfd_arch_info could be used.
> + Otherwise default to a 32bit machine.
> + */
> + if (info.target_desc != NULL) {
> + if (tdesc_property (info.target_desc, PROPERTY_GP64) != NULL)
> + tdep->bytes_per_address = 8;
> + else if (tdesc_property (info.target_desc, PROPERTY_GP32) != NULL)
> + tdep->bytes_per_address = 4;
> + } else if (info.bfd_arch_info != NULL) {
> tdep->bytes_per_address =
> info.bfd_arch_info->bits_per_address / info.bfd_arch_info->bits_per_byte;
> - else
> + } else {
> tdep->bytes_per_address = 4;
> + }
> +
> + hppa_register_g_packet_guesses (gdbarch);
>
> tdep->find_global_pointer = hppa_find_global_pointer;
>
> @@ -3122,6 +3153,11 @@ hppa_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
> INIT_GDB_FILE (hppa_tdep)
> {
> gdbarch_register (bfd_arch_hppa, hppa_gdbarch_init, hppa_dump_tdep);
> + hppa_tdesc32 = allocate_target_description ().release ();
> + set_tdesc_property (hppa_tdesc32, PROPERTY_GP32, "");
> +
> + hppa_tdesc64 = allocate_target_description ().release ();
> + set_tdesc_property (hppa_tdesc64, PROPERTY_GP64, "");
>
> add_cmd ("unwind", class_maintenance, unwind_command,
> _("Print unwind table entry at given address."),
next prev parent reply other threads:[~2025-11-01 13:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-01 8:05 Sven Schnelle
2025-11-01 13:48 ` Helge Deller [this message]
2025-11-03 21:22 ` Tom Tromey
2025-11-03 21:39 ` Sven Schnelle
2025-11-03 22:59 ` Simon Marchi
2025-11-04 6:31 ` Sven Schnelle
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7c90e3dd-ea6f-4372-a1da-6ab88cdfbdb6@gmx.de \
--to=deller@gmx.de \
--cc=binutils@sourceware.org \
--cc=dave.anglin@bell.net \
--cc=gdb-patches@sourceware.org \
--cc=svens@stackframe.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox