Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
To: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Cc: gdb-patches@sourceware.org,  Markus Metzger <markus.t.metzger@intel.com>
Subject: Re: [PATCH v2 08/47] gdb, intelgt: add disassemble feature for the Intel GT architecture.
Date: Wed, 09 Jul 2025 00:12:46 -0300	[thread overview]
Message-ID: <87bjpuvyz5.fsf@linaro.org> (raw)
In-Reply-To: <20241213-upstream-intelgt-mvp-v2-8-5c4caeb7b33d@intel.com> (Tankut Baris Aktemur's message of "Fri, 13 Dec 2024 16:59:25 +0100")

Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> writes:

> From: Albertano Caruso <albertano.caruso@intel.com>
>
> Disassembly of Intel GT programs is done via the Intel Gen Assembler
> library.  Add this library as an optional dependency.  If the library
> is not found, disassembly is disabled.

There should be information about this optional dependency in the GDB
documentation.

It should be in the "Requirements for Building GDB" section of the
manual, and/or (not sure which) in a new "Intel GPU" section under
"Configuration-Specific Information".

For example, one important piece of information that is missing is a
link to where one can get the Intel Gen Assembler library.

> diff --git a/gdb/intelgt-tdep.c b/gdb/intelgt-tdep.c
> index 57c359bf355c5771db38b8d213f6681a043c2b33..7d0ae38480fe89b145c1c29be0e58c96480e3335 100755
> --- a/gdb/intelgt-tdep.c
> +++ b/gdb/intelgt-tdep.c
> @@ -31,6 +31,10 @@
>  #include "inferior.h"
>  #include "user-regs.h"
>  #include <algorithm>
> +#include "disasm.h"
> +#if defined (HAVE_LIBIGA64)
> +#include "iga/iga.h"
> +#endif /* defined (HAVE_LIBIGA64)  */
>  
>  /* Global debug flag.  */
>  static bool intelgt_debug = false;
> @@ -119,6 +123,11 @@ struct intelgt_gdbarch_tdep : gdbarch_tdep_base
>      gdb_assert (regset_ranges[intelgt::REGSET_GRF].end > 1);
>      return regset_ranges[intelgt::REGSET_GRF].end - 1;
>    }
> +
> +#if defined (HAVE_LIBIGA64)
> +  /* libiga context for disassembly.  */
> +  iga_context_t iga_ctx = nullptr;
> +#endif
>  };
>  
>  /* The 'register_type' gdbarch method.  */
> @@ -511,13 +520,77 @@ 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;
> +}

As I mentioned in my review of patch 6, I think you could put the
definition of get_xe_version inside an #if/#endif such as this one.

> +#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.  */
> +  unsigned int full_length = intelgt::inst_length_full ();
> +  unsigned int compact_length = intelgt::inst_length_compacted ();
> +
> +  std::unique_ptr<bfd_byte[]> insn (new bfd_byte[full_length]);
> +
> +  int status = (*info->read_memory_func) (memaddr, insn.get (),
> +					  compact_length, info);
> +  if (status != 0)
> +    {
> +      /* Aborts disassembling with a memory_error exception.  */
> +      (*info->memory_error_func) (status, memaddr, info);
> +      return -1;
> +    }
> +  if (!intelgt::is_compacted_inst (gdb::make_array_view (insn.get (),
> +							 compact_length)))
> +    {
> +      status = (*info->read_memory_func) (memaddr, insn.get (),
> +					  full_length, info);
> +      if (status != 0)
> +	{
> +	  /* Aborts disassembling with a memory_error exception.  */
> +	  (*info->memory_error_func) (status, memaddr, info);
> +	  return -1;
> +	}
> +    }

If GDB wasn't compiled with libiga64, then the only thing that this
function can do is print an error message and return -1, as is done in
the #else block below.

Therefore, all the code above should be inside the #if below.

> +#if defined (HAVE_LIBIGA64)
> +  char *dbuf;
> +  iga_disassemble_options_t dopts = IGA_DISASSEMBLE_OPTIONS_INIT ();
> +  gdb_disassemble_info *di
> +    = static_cast<gdb_disassemble_info *>(info->application_data);
> +  struct gdbarch *gdbarch = di->arch ();
> +
> +  iga_context_t iga_ctx
> +    = gdbarch_tdep<intelgt_gdbarch_tdep> (gdbarch)->iga_ctx;
> +  iga_status_t iga_status
> +    = iga_context_disassemble_instruction (iga_ctx, &dopts, insn.get (),
> +					   intelgt_disasm_sym_cb,
> +					   info, &dbuf);
> +  if (iga_status != IGA_SUCCESS)
> +    return -1;
> +
> +  (*info->fprintf_func) (info->stream, "%s", dbuf);
> +
> +  if (intelgt::is_compacted_inst (gdb::make_array_view (insn.get (),
> +							full_length)))
> +    return compact_length;
> +  else
> +    return full_length;
> +#else
> +  gdb_printf (_("\nDisassemble feature not available: libiga64 "
> +		"is missing.\n"));

Is the '\n' at the beginning of the message needed?

>    return -1;
> +#endif /* defined (HAVE_LIBIGA64)  */
>  }
>  
>  /* Utility function to look up the pseudo-register number by name.  Exact
> @@ -864,6 +937,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."));
> +	  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;
> +	}
> +      else
> +	{
> +	  iga_version = (iga_gen_t) 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);
> +#endif
> +
>    /* Initialize register info.  */
>    set_gdbarch_num_regs (gdbarch, 0);
>    set_gdbarch_register_name (gdbarch, tdesc_register_name);
> diff --git a/gdb/top.c b/gdb/top.c
> index d750f3305f2eef7c5a30cef7f647537916a80499..c27f7d60254a4d384dfd770ce98eb4f0923dee49 100644
> --- a/gdb/top.c
> +++ b/gdb/top.c
> @@ -1523,6 +1523,16 @@ This GDB was configured as follows:\n\
>  "));
>  #endif
>  
> +#ifdef HAVE_LIBIGA64
> +  gdb_printf (stream, _("\
> +	     --with-libiga64\n\
> +"));

This patch adds a "--with-libiga64-prefix=..." configure option, right?
So this should print "--with-libiga64-prefix=...".

> +#else
> +  gdb_printf (stream, _("\
> +	     --without-libiga64\n\
> +"));
> +#endif

-- 
Thiago

  reply	other threads:[~2025-07-09  3:13 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-13 15:59 [PATCH v2 00/47] A new target to debug Intel GPUs Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 01/47] gdb, intelgt: add intelgt as a basic machine Tankut Baris Aktemur
2024-12-16  7:53   ` Jan Beulich
2024-12-17 18:48     ` Aktemur, Tankut Baris
2024-12-18  7:19       ` Jan Beulich
2024-12-20  9:55         ` Aktemur, Tankut Baris
2025-02-03 17:17           ` Aktemur, Tankut Baris
2025-02-04  7:06             ` Jan Beulich
2024-12-13 15:59 ` [PATCH v2 02/47] bfd: add intelgt target to BFD Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 03/47] ld: add intelgt as a target configuration Tankut Baris Aktemur
2024-12-16  7:43   ` Jan Beulich
2024-12-13 15:59 ` [PATCH v2 04/47] opcodes: add intelgt as a configuration Tankut Baris Aktemur
2024-12-16  7:44   ` Jan Beulich
2024-12-17 18:47     ` Aktemur, Tankut Baris
2024-12-18  7:22       ` Jan Beulich
2024-12-20  9:47         ` Aktemur, Tankut Baris
2025-01-03  4:46           ` Simon Marchi
2025-02-03 17:13             ` Aktemur, Tankut Baris
2025-02-04  7:07               ` Jan Beulich
2024-12-13 15:59 ` [PATCH v2 05/47] gdb, arch, intelgt: add intelgt arch definitions Tankut Baris Aktemur
2025-07-08  3:03   ` Thiago Jung Bauermann
2025-07-21 10:49     ` Aktemur, Tankut Baris
2024-12-13 15:59 ` [PATCH v2 06/47] gdb, intelgt: add the target-dependent definitions for the Intel GT architecture Tankut Baris Aktemur
2025-07-08  2:43   ` Thiago Jung Bauermann
2025-07-18 17:43     ` Aktemur, Tankut Baris
2024-12-13 15:59 ` [PATCH v2 07/47] gdb, gdbserver, gdbsupport: add 'device' tag to XML target description Tankut Baris Aktemur
2024-12-13 16:45   ` Eli Zaretskii
2025-07-08  4:04   ` Thiago Jung Bauermann
2025-07-21 10:49     ` Aktemur, Tankut Baris
2024-12-13 15:59 ` [PATCH v2 08/47] gdb, intelgt: add disassemble feature for the Intel GT architecture Tankut Baris Aktemur
2025-07-09  3:12   ` Thiago Jung Bauermann [this message]
2024-12-13 15:59 ` [PATCH v2 09/47] gdbsupport, filestuff, ze: temporary files Tankut Baris Aktemur
2025-07-14  1:26   ` Thiago Jung Bauermann
2024-12-13 15:59 ` [PATCH v2 10/47] gdb, gdbserver, ze: in-memory libraries Tankut Baris Aktemur
2025-07-14  2:35   ` Thiago Jung Bauermann
2025-07-31  6:09     ` Metzger, Markus T
2025-07-16  4:08   ` Thiago Jung Bauermann
2024-12-13 15:59 ` [PATCH v2 11/47] gdb, gdbserver, rsp, ze: acknowledge libraries Tankut Baris Aktemur
2024-12-13 16:43   ` Eli Zaretskii
2025-07-16  4:20   ` Thiago Jung Bauermann
2025-07-31  6:09     ` Metzger, Markus T
2024-12-13 15:59 ` [PATCH v2 12/47] gdb, solib, ze: solib_bfd_open_from_target_memory Tankut Baris Aktemur
2025-07-18  0:42   ` Thiago Jung Bauermann
2024-12-13 15:59 ` [PATCH v2 13/47] gdb, remote, ze: fix "$Hc-1#09...Packet received: E01" during startup Tankut Baris Aktemur
2025-07-18  0:41   ` Thiago Jung Bauermann
2025-08-01  7:55     ` Metzger, Markus T
2024-12-13 15:59 ` [PATCH v2 14/47] gdb, infrun, ze: allow saving process events Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 15/47] gdb, ze: add TARGET_WAITKIND_UNAVAILABLE Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 16/47] gdb, infrun, ze: handle stopping unavailable threads Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 17/47] gdb, infrun, ze: allow resuming " Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 18/47] gdb, gdbserver, ze: add U stop reply Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 19/47] gdb, gdbserver, ze: add library notification to " Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 20/47] gdbserver, ze: report TARGET_WAITKIND_UNAVAILABLE events Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 21/47] gdb, ze: handle TARGET_WAITKIND_UNAVAILABLE in stop_all_threads Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 22/47] gdb, remote: handle thread unavailability in print_one_stopped_thread Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 23/47] gdb, remote: do 'remote_add_inferior' in 'remote_notice_new_inferior' earlier Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 24/47] gdb, remote: handle a generic process PID in remote_notice_new_inferior Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 25/47] gdb, remote: handle a generic process PID in process_stop_reply Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 26/47] gdb: use the pid from inferior in setup_inferior Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 27/47] gdb: revise the pid_to_exec_file target op Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 28/47] gdb: load solibs if the target does not have the notion of an exec file Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 29/47] gdbserver: import AC_LIB_HAVE_LINKFLAGS macro into the autoconf script Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 30/47] gdbserver: add a pointer to the owner thread in regcache Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 31/47] gdbserver: dump 'xx...x' in collect_register_as_string for unavailable register Tankut Baris Aktemur
2024-12-23 11:38   ` Aktemur, Tankut Baris
2024-12-23 13:47     ` Luis Machado
2024-12-13 15:59 ` [PATCH v2 32/47] gdbserver: wait for stopped threads in queue_stop_reply_callback Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 33/47] gdbserver: adjust pid after the target attaches Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 34/47] gdb: do not create a thread after a process event Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 35/47] gdb, ze: on a whole process stop, mark all threads as not_resumed Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 36/47] gdb, dwarf, ze: add DW_OP_INTEL_regval_bits Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 37/47] gdbserver: allow configuring for a heterogeneous target Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 38/47] gdbserver, ze, intelgt: introduce ze-low and intel-ze-low targets Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 39/47] testsuite, sycl: add SYCL support Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 40/47] testsuite, sycl: add test for backtracing inside a kernel Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 41/47] testsuite, sycl: add test for 'info locals' and 'info args' Tankut Baris Aktemur
2024-12-13 15:59 ` [PATCH v2 42/47] testsuite, sycl: add tests for stepping and accessing data elements Tankut Baris Aktemur
2024-12-13 16:00 ` [PATCH v2 43/47] testsuite, sycl: add test for 1-D and 2-D parallel_for kernels Tankut Baris Aktemur
2024-12-13 16:00 ` [PATCH v2 44/47] testsuite, sycl: add test for scheduler-locking Tankut Baris Aktemur
2024-12-13 16:00 ` [PATCH v2 45/47] testsuite, arch, intelgt: add a disassembly test Tankut Baris Aktemur
2024-12-13 16:00 ` [PATCH v2 46/47] testsuite, arch, intelgt: add intelgt-program-bp.exp Tankut Baris Aktemur
2024-12-13 16:00 ` [PATCH v2 47/47] testsuite, sycl: test canceling a stepping flow Tankut Baris Aktemur
2025-02-07 10:18 ` [PATCH v2 00/47] A new target to debug Intel GPUs Aktemur, Tankut Baris
2025-05-08  7:40   ` Aktemur, Tankut Baris
2025-05-26  8:03     ` Aktemur, Tankut Baris
2025-06-17 12:22       ` Aktemur, Tankut Baris
2025-07-03 12:55   ` 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=87bjpuvyz5.fsf@linaro.org \
    --to=thiago.bauermann@linaro.org \
    --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