From: "Aktemur, Tankut Baris" <tankut.baris.aktemur@intel.com>
To: Simon Marchi <simark@simark.ca>,
"gdb-patches@sourceware.org" <gdb-patches@sourceware.org>,
"Metzger, Markus T" <markus.t.metzger@intel.com>
Subject: RE: [PATCH v3 07/44] gdb, intelgt: add the target-dependent definitions for the Intel GT architecture
Date: Fri, 19 Dec 2025 16:01:16 +0000 [thread overview]
Message-ID: <DM4PR11MB7303D4358255928887671B26C4A9A@DM4PR11MB7303.namprd11.prod.outlook.com> (raw)
In-Reply-To: <77802a4e-b72e-47fd-bb63-c084bf162331@simark.ca>
On Thursday, December 11, 2025 7:54 PM, Simon Marchi wrote:
> On 2025-08-01 05:37, Tankut Baris Aktemur wrote:
> > Introduce gdb/intelgt-tdep.c for the Intel GT target. The target is
> > defined in a future patch as a gdbserver low target implementation.
> >
> > Unlike, for example, X86-64, IntelGT does not have a dedicated
> > breakpoint instruction. Instead, it has a breakpoint bit in each
> > instruction. Hence, any instruction can be used as a breakpoint
> > instruction.
> >
> > It further supports ignoring breakpoints for stepping over or resuming
> > from a breakpoint. This only works, of course, if we use breakpoint
> > bits inside the original instruction rather than replacing it with a
> > fixed breakpoint instruction.
> >
> > Add gdbarch methods for inserting and removing memory breakpoints by
> > setting and clearing those breakpoint bits.
> >
> > We define one pseudo-register, $framedesc, that provides a type alias
> > for the frame descriptor register in GRF, representing it as a struct.
> >
> > The value of the $pc register is the $ip register, which is provided
> > in $cr0.2, offset by $isabase.
> >
> > A translation function to map the device_id to a gen_version is
> > provided. This will be useful in various places, in particular to
> > generate the correct disassembly.
> >
> > Co-authored-by: Markus Metzger <markus.t.metzger@intel.com>
> > Co-authored-by: Natalia Saiapova <natalia.saiapova@intel.com>
> > Co-authored-by: Mihails Strasuns <mihails.strasuns@intel.com>
> > Co-authored-by: Mohamed Bouhaouel <mohamed.bouhaouel@intel.com>
>
> Only minor comments noted below.
>
> Approved-By: Simon Marchi <simon.marchi@efficios.com>
Thank you. Below I reply to some of your comments. Those that I omitted
have been addressed in the local branch. They will be included in the
next revision.
> > diff --git a/gdb/intelgt-tdep.c b/gdb/intelgt-tdep.c
...
> > +/* Read part of REGNUM at OFFSET into BUFFER. The length of data to
> > + read is SIZE. Consider using this helper function when reading
> > + subregisters of CR0, SR0, and R0. */
> > +
> > +static void
> > +intelgt_read_register_part (readable_regcache *regcache, int regnum,
> > + size_t offset,
> > + gdb::array_view<gdb_byte> buffer,
> > + const char *error_message)
> > +{
> > + if (regnum == -1)
> > + error (_("%s Unexpected reg num '-1'."), error_message);
>
> This should probably be an assert.
>
> > +
> > + gdbarch *arch = regcache->arch ();
> > + const char *regname = gdbarch_register_name (arch, regnum);
> > + int regsize = register_size (arch, regnum);
> > +
> > + if (offset + buffer.size () > regsize)
> > + error (_("%s %s[%zu:%zu] is outside the range of %s[%d:0]."),
> > + error_message, regname, (offset + buffer.size () - 1), offset,
> > + regname, (regsize - 1));
>
> I also wonder about this check, does it protect against bad user input,
> or a bug elsewhere in GDB?
Regarding this check and the check above:
Register sets are obtained from the debug API, which specifies the number
and the size of register sets. The errors here and above protect against
debug library bugs, in case it reports incomplete register sets or incorrect
information about the number/size of regs. So, we're checking against
input obtained from outside GDB.
> > +
> > + register_status reg_status
> > + = regcache->cooked_read_part (regnum, offset, buffer);
> > +
> > + if (reg_status == REG_UNAVAILABLE)
> > + throw_error (NOT_AVAILABLE_ERROR,
> > + _("%s Register %s (%d) is not available."),
> > + error_message, regname, regnum);
> > +
> > + if (reg_status == REG_UNKNOWN)
> > + error (_("%s Register %s (%d) is unknown."), error_message,
> > + regname, regnum);
>
> Does this REG_UNKNOWN case happen in real life? I always thought that
> REG_UNKNOWN was the initial state of registers in the regcache, and that
> after filling a regcache (a call to target_ops::fetch_registers), then
> all registers would become either REG_VALID or REG_UNAVAILABLE. I
> presumed that if a register was left in the REG_UNKNOWN, it would be a
> target bug.
I don't think this case ever happened in real life. We included the check
for completeness' sake.
...
> > +/* The 'unwind_pc' gdbarch method. */
> > +
> > +static CORE_ADDR
> > +intelgt_unwind_pc (gdbarch *gdbarch, const frame_info_ptr
> &next_frame)
> > +{
> > + /* Use ip register here, as IGC uses 32bit values (pc is 64bit).
> */
> > + int ip_regnum = intelgt_pseudo_register_num (gdbarch, "ip");
> > + CORE_ADDR prev_ip = frame_unwind_register_unsigned (next_frame,
> > + ip_regnum);
> > + intelgt_debug_printf ("prev_ip: %s", paddress (gdbarch, prev_ip));
> > +
> > + /* Program counter is $ip + $isabase. Read directly from the
> > + regcache instead of unwinding, as the frame unwind info may
> > + simply be unavailable. The isabase register does not change
> > + during kernel execution, so this must be safe. */
> > + regcache *regcache = get_thread_regcache (inferior_thread ());
> > + CORE_ADDR isabase = intelgt_get_isabase (regcache);
>
> Why do you not want to read isabase from NEXT_FRAME, because it's
> slower? I'm asking because this use of inferior_thread slightly annoys
> me.
`isabase` is a virtual register. Compiler does not emit unwind information
for it. However, GDB is able to cope with that. The register would be
eventually read from regcache. We can replace this part with
frame_unwind_register_unsigned to get rid of `inferior_thread ()`.
...
> > +/* The memory_remove_breakpoint gdbarch method. */
> > +
> > +static int
> > +intelgt_memory_remove_breakpoint (gdbarch *gdbarch, struct
> bp_target_info *bp)
> > +{
> > + intelgt_debug_printf ("req ip: %s, placed ip: %s",
> > + paddress (gdbarch, bp->reqstd_address),
> > + paddress (gdbarch, bp->placed_address));
> > +
> > + /* Warn if we're inserting a permanent breakpoint. */
>
> inserting -> removing?
Here, we are inserting the original contents of the instruction
and raising a warning if it had a permanent breakpoint. I agree,
however, that saying "inserting" in this function sounds confusing.
I thought about rephrasing the comment, but both the original comment
and my rewording would be repeating what the code is actually doing.
So, I removed the comment.
-Baris
Intel Deutschland GmbH
Registered Address: Dornacher Straße 1, 85622 Feldkirchen, Germany
Tel: +49 89 991 430, www.intel.de
Managing Directors: Harry Demas, Jeffrey Schneiderman, Yin Chong Sorrell
Chairperson of the Supervisory Board: Nicole Lau
Registered Seat: Munich
Commercial Register: Amtsgericht München HRB 186928
next prev parent reply other threads:[~2025-12-19 16:02 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 [this message]
2025-08-01 9:37 ` [PATCH v3 08/44] gdb, intelgt: add disassemble feature " Tankut Baris Aktemur
2025-12-11 19:37 ` Simon Marchi
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=DM4PR11MB7303D4358255928887671B26C4A9A@DM4PR11MB7303.namprd11.prod.outlook.com \
--to=tankut.baris.aktemur@intel.com \
--cc=gdb-patches@sourceware.org \
--cc=markus.t.metzger@intel.com \
--cc=simark@simark.ca \
/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