Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simark@simark.ca>
To: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>,
	gdb-patches@sourceware.org,
	Markus Metzger <markus.t.metzger@intel.com>
Subject: Re: [PATCH v3 08/44] gdb, intelgt: add disassemble feature for the Intel GT architecture.
Date: Thu, 11 Dec 2025 14:37:29 -0500	[thread overview]
Message-ID: <d56d7331-713c-406a-ace9-0a9532c361a4@simark.ca> (raw)
In-Reply-To: <20250801-upstream-intelgt-mvp-v3-8-59ce0f87075b@intel.com>

> diff --git a/gdb/configure.ac b/gdb/configure.ac
> index 226e27e4fe54a9d3ac06e8be4439dd5dce8eb975..0507f03043c61385181b667d0e7117d4b2547d6d 100644
> --- a/gdb/configure.ac
> +++ b/gdb/configure.ac
> @@ -1351,6 +1351,58 @@ fi
>  AC_SUBST(SRCHIGH_LIBS)
>  AC_SUBST(SRCHIGH_CFLAGS)
>  
> +# Check for Intel(R) Graphics Technology assembler library
> +intelgt_target=false
> +
> +for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
> +do
> +  if test "$targ_alias" = "all"; then
> +    intelgt_target=true
> +  else
> +    case "$targ_alias" in
> +      intelgt-*)
> +        intelgt_target=true
> +        ;;
> +    esac
> +  fi
> +done
> +
> +case "${target}" in
> +  intelgt-*)
> +    intelgt_target=true
> +    ;;
> +esac

Do you really need this last "case"?  I would think that the main target
would be included in the loop above (as $target_alias).

> +
> +if test "${intelgt_target}" != true; then
> +  HAVE_LIBIGA64=no
> +else
> +  AC_ARG_WITH(libiga64,
> +    AS_HELP_STRING([--with-libiga64], [include IntelGT disassembly support (auto/yes/no)]),
> +    [], [with_libiga64=auto])

Not an autoconf expert, but I think it makes more sense (and is clearer)
to put the AC_ARG_WITH at the top-level.  The --with-libiga64 flag will
always be there, it's not like it will be predicated by $intelgt_target.

> @@ -544,13 +553,75 @@ intelgt_sw_breakpoint_from_kind (gdbarch *gdbarch, int kind, int *size)
>    return nullptr;
>  }
>  
> +#if defined (HAVE_LIBIGA64)
> +/* Map CORE_ADDR to symbol names for jump labels in an IGA disassembly.  */
> +
> +static const char *
> +intelgt_disasm_sym_cb (int addr, void *ctx)
> +{
> +  disassemble_info *info = (disassemble_info *) ctx;
> +  symbol *sym = find_pc_function (addr + (uintptr_t) info->private_data);
> +  return sym ? sym->linkage_name () : nullptr;
> +}
> +#endif /* defined (HAVE_LIBIGA64)  */
> +
>  /* Print one instruction from MEMADDR on INFO->STREAM.  */
>  
>  static int
>  intelgt_print_insn (bfd_vma memaddr, struct disassemble_info *info)
>  {
> -  /* Disassembler is to be added in a later patch.  */
> +#if !defined (HAVE_LIBIGA64)
> +  gdb_printf (_("\nDisassemble feature not available: libiga64 "
> +		"is missing.\n"));
>    return -1;
> +#else
> +  std::unique_ptr<bfd_byte[]> insn (new bfd_byte[intelgt::MAX_INST_LENGTH]);

Can this be statically allocated?

  bfd_byte insn[intelgt::MAX_INST_LENGTH];

> +
> +  int status = (*info->read_memory_func) (memaddr, insn.get (),
> +					  intelgt::COMPACT_INST_LENGTH, info);
> +  if (status != 0)
> +    {
> +      /* Aborts disassembling with a memory_error exception.  */
> +      (*info->memory_error_func) (status, memaddr, info);
> +      return -1;
> +    }
> +
> +  uint32_t device_id = get_device_id (current_inferior ());
> +  gdb::array_view<bfd_byte> insn_view
> +    = gdb::make_array_view (insn.get (), intelgt::COMPACT_INST_LENGTH);
> +  unsigned int length = intelgt::inst_length (insn_view, device_id);
> +
> +  if (length == intelgt::MAX_INST_LENGTH)
> +    {
> +      status = (*info->read_memory_func) (memaddr, insn.get (),
> +					  intelgt::MAX_INST_LENGTH, info);
> +      if (status != 0)
> +	{
> +	  /* Aborts disassembling with a memory_error exception.  */
> +	  (*info->memory_error_func) (status, memaddr, info);
> +	  return -1;
> +	}
> +    }
> +
> +  char *dbuf;
> +  iga_disassemble_options_t dopts = IGA_DISASSEMBLE_OPTIONS_INIT ();
> +  gdb_disassemble_info *di
> +    = static_cast<gdb_disassemble_info *>(info->application_data);

Space before paren.

> @@ -771,6 +842,46 @@ intelgt_gdbarch_init (gdbarch_info info, gdbarch_list *arches)
>    intelgt_gdbarch_tdep *data
>      = gdbarch_tdep<intelgt_gdbarch_tdep> (gdbarch);
>  
> +#if defined (HAVE_LIBIGA64)
> +  iga_gen_t iga_version = IGA_GEN_INVALID;
> +
> +  if (tdesc != nullptr)
> +    {
> +      const tdesc_device *device_info = tdesc_device_info (tdesc);
> +      if (!(device_info->vendor_id.has_value ()
> +	    && device_info->target_id.has_value ()))
> +	{
> +	  warning (_("Device vendor id and target id not found."));

Perhaps say "... not found in target description."?  Trying to think
about a clueless user seeing this message without much context.

> +	  gdbarch_free (gdbarch);
> +	  return nullptr;
> +	}
> +
> +      uint32_t vendor_id = *device_info->vendor_id;
> +      uint32_t device_id = *device_info->target_id;
> +      if (vendor_id != 0x8086)
> +	{
> +	  warning (_("Device not recognized: vendor id=0x%04x,"
> +		     " device id=0x%04x"), vendor_id, device_id);
> +	  gdbarch_free (gdbarch);
> +	  return nullptr;

I don't think these two gdbarch_free are needed, that is managed by
gdbarch_u.

> +	}
> +      else

I would remove this "else" (just de-indent the code below).

> +	{
> +	  iga_version = (iga_gen_t) intelgt::get_xe_version (device_id);
> +	  if (iga_version == IGA_GEN_INVALID)
> +	    warning (_("Intel GT device id is unrecognized: ID 0x%04x"),
> +		     device_id);
> +	}
> +    }
> +
> +  /* Take the best guess in case IGA_VERSION is still invalid.  */
> +  if (iga_version == IGA_GEN_INVALID)
> +    iga_version = IGA_XE_HPC;
> +
> +  const iga_context_options_t options = IGA_CONTEXT_OPTIONS_INIT (iga_version);
> +  iga_context_create (&options, &data->iga_ctx);

Should probably check the return value of iga_context_create.

Simon

  reply	other threads:[~2025-12-11 19:37 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-01  9:37 [PATCH v3 00/44] A new target to debug Intel GPUs Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 01/44] gdb, intelgt: add intelgt as a basic machine Tankut Baris Aktemur
2025-12-09 20:44   ` Simon Marchi
2025-12-19 11:13     ` Aktemur, Tankut Baris
2025-08-01  9:37 ` [PATCH v3 02/44] bfd: add intelgt target to BFD Tankut Baris Aktemur
2025-08-01 12:20   ` Jan Beulich
2025-08-08  5:03     ` Metzger, Markus T
2025-12-09 21:05   ` Simon Marchi
2025-12-19 12:46     ` Aktemur, Tankut Baris
2025-08-01  9:37 ` [PATCH v3 03/44] ld: add intelgt as a target configuration Tankut Baris Aktemur
2025-08-01 12:06   ` Jan Beulich
2025-08-08  5:03     ` Metzger, Markus T
2025-08-01  9:37 ` [PATCH v3 04/44] opcodes: add intelgt as a configuration Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 05/44] gdb, gdbserver, gdbsupport: add 'device' tag to XML target description Tankut Baris Aktemur
2025-12-09 21:27   ` Simon Marchi
2025-12-15 21:03     ` Simon Marchi
2025-12-18 15:04       ` Aktemur, Tankut Baris
2026-01-09 19:12         ` Aktemur, Tankut Baris
2026-01-09 19:34           ` Simon Marchi
2025-08-01  9:37 ` [PATCH v3 06/44] gdb, arch, intelgt: add intelgt arch definitions Tankut Baris Aktemur
2025-12-09 21:48   ` Simon Marchi
2025-12-16 15:47     ` Metzger, Markus T
2025-08-01  9:37 ` [PATCH v3 07/44] gdb, intelgt: add the target-dependent definitions for the Intel GT architecture Tankut Baris Aktemur
2025-12-11 18:53   ` Simon Marchi
2025-12-19 16:01     ` Aktemur, Tankut Baris
2025-08-01  9:37 ` [PATCH v3 08/44] gdb, intelgt: add disassemble feature " Tankut Baris Aktemur
2025-12-11 19:37   ` Simon Marchi [this message]
2025-12-23 11:03     ` Aktemur, Tankut Baris
2025-08-01  9:37 ` [PATCH v3 09/44] gdb, gdbserver, ze: in-memory libraries Tankut Baris Aktemur
2025-12-12  4:13   ` Simon Marchi
2025-12-12 11:20     ` Metzger, Markus T
2025-12-12 19:34       ` Simon Marchi
2025-12-15 13:07         ` Metzger, Markus T
2025-12-15 21:25           ` Simon Marchi
2025-08-01  9:37 ` [PATCH v3 10/44] gdb, gdbserver, rsp, ze: acknowledge libraries Tankut Baris Aktemur
2025-12-12  4:41   ` Simon Marchi
2025-12-12 14:28     ` Metzger, Markus T
2025-08-01  9:37 ` [PATCH v3 11/44] gdb, solib, ze: update target_solib_ops::bfd_open_from_target_memory Tankut Baris Aktemur
2025-12-12  4:43   ` Simon Marchi
2025-12-12 14:33     ` Metzger, Markus T
2025-08-01  9:37 ` [PATCH v3 12/44] gdb, infrun, ze: allow saving process events Tankut Baris Aktemur
2025-12-12  4:57   ` Simon Marchi
2025-12-15 13:13     ` Metzger, Markus T
2025-12-16 21:10       ` Simon Marchi
2025-12-17  9:30         ` Metzger, Markus T
2025-12-17 20:44           ` Simon Marchi
2025-12-18  7:20             ` Metzger, Markus T
2025-08-01  9:37 ` [PATCH v3 13/44] gdb, ze: add TARGET_WAITKIND_UNAVAILABLE Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 14/44] gdb, infrun, ze: handle stopping unavailable threads Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 15/44] gdb, infrun, ze: allow resuming " Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 16/44] gdb, gdbserver, ze: add U stop reply Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 17/44] gdb, gdbserver, ze: add library notification to " Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 18/44] gdbserver, ze: report TARGET_WAITKIND_UNAVAILABLE events Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 19/44] gdb, ze: handle TARGET_WAITKIND_UNAVAILABLE in stop_all_threads Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 20/44] gdb, remote: handle thread unavailability in print_one_stopped_thread Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 21/44] gdb, remote: do 'remote_add_inferior' in 'remote_notice_new_inferior' earlier Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 22/44] gdb, remote: handle a generic process PID in remote_notice_new_inferior Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 23/44] gdb, remote: handle a generic process PID in process_stop_reply Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 24/44] gdb: use the pid from inferior in setup_inferior Tankut Baris Aktemur
2025-12-12 19:51   ` Simon Marchi
2025-12-13 12:40     ` Aktemur, Tankut Baris
2025-08-01  9:37 ` [PATCH v3 25/44] gdb: revise the pid_to_exec_file target op Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 26/44] gdb: load solibs if the target does not have the notion of an exec file Tankut Baris Aktemur
2025-12-12 20:30   ` Simon Marchi
2026-01-09 19:10     ` Aktemur, Tankut Baris
2025-08-01  9:37 ` [PATCH v3 27/44] gdbserver: import AC_LIB_HAVE_LINKFLAGS macro into the autoconf script Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 28/44] gdbserver: add a pointer to the owner thread in regcache Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 29/44] gdbserver: wait for stopped threads in queue_stop_reply_callback Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 30/44] gdbserver: adjust pid after the target attaches Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 31/44] gdb: do not create a thread after a process event Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 32/44] gdb, ze: on a whole process stop, mark all threads as not_resumed Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 33/44] gdb, dwarf, ze: add DW_OP_INTEL_regval_bits Tankut Baris Aktemur
2025-08-01 12:02   ` Jan Beulich
2025-08-01 12:31     ` Metzger, Markus T
2025-08-01 12:50       ` Jan Beulich
2025-08-08  5:25         ` Metzger, Markus T
2025-08-01  9:37 ` [PATCH v3 34/44] gdbserver: allow configuring for a heterogeneous target Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 35/44] gdbserver, ze, intelgt: introduce ze-low and intel-ze-low targets Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 36/44] testsuite, sycl: add SYCL support Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 37/44] testsuite, sycl: add test for backtracing inside a kernel Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 38/44] testsuite, sycl: add test for 'info locals' and 'info args' Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 39/44] testsuite, sycl: add tests for stepping and accessing data elements Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 40/44] testsuite, sycl: add test for 1-D and 2-D parallel_for kernels Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 41/44] testsuite, sycl: add test for scheduler-locking Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 42/44] testsuite, arch, intelgt: add a disassembly test Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 43/44] testsuite, arch, intelgt: add intelgt-program-bp.exp Tankut Baris Aktemur
2025-08-01  9:37 ` [PATCH v3 44/44] testsuite, sycl: test canceling a stepping flow Tankut Baris Aktemur
2025-09-17 12:43 ` [PATCH v3 00/44] A new target to debug Intel GPUs Aktemur, Tankut Baris
2025-10-14  6:34   ` Aktemur, Tankut Baris
2025-12-08 11:32 ` Aktemur, Tankut Baris
2025-12-09 21:30 ` Simon Marchi
2025-12-19 12:52   ` Aktemur, Tankut Baris

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=d56d7331-713c-406a-ace9-0a9532c361a4@simark.ca \
    --to=simark@simark.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=markus.t.metzger@intel.com \
    --cc=tankut.baris.aktemur@intel.com \
    /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