From: Hannes Domani <ssbssa@yahoo.de>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [PATCH v2 07/11] Move x86 selector code into x86-windows-nat.c
Date: Sat, 17 Jan 2026 14:36:18 +0100 [thread overview]
Message-ID: <20260117134052.2660009-7-ssbssa@yahoo.de> (raw)
In-Reply-To: <20260117134052.2660009-1-ssbssa@yahoo.de>
Approved-By: Tom Tromey <tom@tromey.com>
---
No changes in v2
---
gdb/windows-nat.c | 125 -----------------------------------------
gdb/x86-windows-nat.c | 127 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 127 insertions(+), 125 deletions(-)
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 926b85d479b..f9d07336cca 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -685,127 +685,6 @@ windows_per_inferior::handle_output_debug_string
return retval;
}
-static int
-display_selector (HANDLE thread, DWORD sel)
-{
- LDT_ENTRY info;
- BOOL ret = windows_process->with_context (nullptr, [&] (auto *context)
- {
- return get_thread_selector_entry (context, thread, sel, &info);
- });
- if (ret)
- {
- int base, limit;
- gdb_printf ("0x%03x: ", (unsigned) sel);
- if (!info.HighWord.Bits.Pres)
- {
- gdb_puts ("Segment not present\n");
- return 0;
- }
- base = (info.HighWord.Bits.BaseHi << 24) +
- (info.HighWord.Bits.BaseMid << 16)
- + info.BaseLow;
- limit = (info.HighWord.Bits.LimitHi << 16) + info.LimitLow;
- if (info.HighWord.Bits.Granularity)
- limit = (limit << 12) | 0xfff;
- gdb_printf ("base=0x%08x limit=0x%08x", base, limit);
- if (info.HighWord.Bits.Default_Big)
- gdb_puts(" 32-bit ");
- else
- gdb_puts(" 16-bit ");
- switch ((info.HighWord.Bits.Type & 0xf) >> 1)
- {
- case 0:
- gdb_puts ("Data (Read-Only, Exp-up");
- break;
- case 1:
- gdb_puts ("Data (Read/Write, Exp-up");
- break;
- case 2:
- gdb_puts ("Unused segment (");
- break;
- case 3:
- gdb_puts ("Data (Read/Write, Exp-down");
- break;
- case 4:
- gdb_puts ("Code (Exec-Only, N.Conf");
- break;
- case 5:
- gdb_puts ("Code (Exec/Read, N.Conf");
- break;
- case 6:
- gdb_puts ("Code (Exec-Only, Conf");
- break;
- case 7:
- gdb_puts ("Code (Exec/Read, Conf");
- break;
- default:
- gdb_printf ("Unknown type 0x%lx",
- (unsigned long) info.HighWord.Bits.Type);
- }
- if ((info.HighWord.Bits.Type & 0x1) == 0)
- gdb_puts(", N.Acc");
- gdb_puts (")\n");
- if ((info.HighWord.Bits.Type & 0x10) == 0)
- gdb_puts("System selector ");
- gdb_printf ("Privilege level = %ld. ",
- (unsigned long) info.HighWord.Bits.Dpl);
- if (info.HighWord.Bits.Granularity)
- gdb_puts ("Page granular.\n");
- else
- gdb_puts ("Byte granular.\n");
- return 1;
- }
- else
- {
- DWORD err = GetLastError ();
- if (err == ERROR_NOT_SUPPORTED)
- gdb_printf ("Function not supported\n");
- else
- gdb_printf ("Invalid selector 0x%x.\n", (unsigned) sel);
- return 0;
- }
-}
-
-static void
-display_selectors (const char * args, int from_tty)
-{
- if (inferior_ptid == null_ptid)
- {
- gdb_puts ("Impossible to display selectors now.\n");
- return;
- }
-
- windows_thread_info *current_windows_thread
- = windows_process->thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT);
-
- if (!args)
- {
- windows_process->with_context (current_windows_thread, [&] (auto *context)
- {
- gdb_puts ("Selector $cs\n");
- display_selector (current_windows_thread->h, context->SegCs);
- gdb_puts ("Selector $ds\n");
- display_selector (current_windows_thread->h, context->SegDs);
- gdb_puts ("Selector $es\n");
- display_selector (current_windows_thread->h, context->SegEs);
- gdb_puts ("Selector $ss\n");
- display_selector (current_windows_thread->h, context->SegSs);
- gdb_puts ("Selector $fs\n");
- display_selector (current_windows_thread->h, context->SegFs);
- gdb_puts ("Selector $gs\n");
- display_selector (current_windows_thread->h, context->SegGs);
- });
- }
- else
- {
- int sel;
- sel = parse_and_eval_long (args);
- gdb_printf ("Selector \"%s\"\n",args);
- display_selector (current_windows_thread->h, sel);
- }
-}
-
/* See nat/windows-nat.h. */
bool
@@ -2727,10 +2606,6 @@ Show whether to display kernel exceptions in child process."), NULL,
init_w32_command_list ();
- add_cmd ("selector", class_info, display_selectors,
- _("Display selectors infos."),
- &info_w32_cmdlist);
-
if (!initialize_loadable ())
{
/* This will probably fail on Windows 9x/Me. Let the user know
diff --git a/gdb/x86-windows-nat.c b/gdb/x86-windows-nat.c
index 96dd61b39fb..7538c360bfe 100644
--- a/gdb/x86-windows-nat.c
+++ b/gdb/x86-windows-nat.c
@@ -17,9 +17,11 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
+#include "windows-tdep.h"
#include "windows-nat.h"
#include "regcache.h"
#include "gdbarch.h"
+#include "inferior.h"
#include "x86-nat.h"
@@ -346,6 +348,127 @@ cygwin_get_dr7 (void)
return (unsigned long) x86_windows_process.dr[7];
}
+static int
+display_selector (HANDLE thread, DWORD sel)
+{
+ LDT_ENTRY info;
+ BOOL ret = windows_process->with_context (nullptr, [&] (auto *context)
+ {
+ return get_thread_selector_entry (context, thread, sel, &info);
+ });
+ if (ret)
+ {
+ int base, limit;
+ gdb_printf ("0x%03x: ", (unsigned) sel);
+ if (!info.HighWord.Bits.Pres)
+ {
+ gdb_puts ("Segment not present\n");
+ return 0;
+ }
+ base = (info.HighWord.Bits.BaseHi << 24) +
+ (info.HighWord.Bits.BaseMid << 16)
+ + info.BaseLow;
+ limit = (info.HighWord.Bits.LimitHi << 16) + info.LimitLow;
+ if (info.HighWord.Bits.Granularity)
+ limit = (limit << 12) | 0xfff;
+ gdb_printf ("base=0x%08x limit=0x%08x", base, limit);
+ if (info.HighWord.Bits.Default_Big)
+ gdb_puts(" 32-bit ");
+ else
+ gdb_puts(" 16-bit ");
+ switch ((info.HighWord.Bits.Type & 0xf) >> 1)
+ {
+ case 0:
+ gdb_puts ("Data (Read-Only, Exp-up");
+ break;
+ case 1:
+ gdb_puts ("Data (Read/Write, Exp-up");
+ break;
+ case 2:
+ gdb_puts ("Unused segment (");
+ break;
+ case 3:
+ gdb_puts ("Data (Read/Write, Exp-down");
+ break;
+ case 4:
+ gdb_puts ("Code (Exec-Only, N.Conf");
+ break;
+ case 5:
+ gdb_puts ("Code (Exec/Read, N.Conf");
+ break;
+ case 6:
+ gdb_puts ("Code (Exec-Only, Conf");
+ break;
+ case 7:
+ gdb_puts ("Code (Exec/Read, Conf");
+ break;
+ default:
+ gdb_printf ("Unknown type 0x%lx",
+ (unsigned long) info.HighWord.Bits.Type);
+ }
+ if ((info.HighWord.Bits.Type & 0x1) == 0)
+ gdb_puts(", N.Acc");
+ gdb_puts (")\n");
+ if ((info.HighWord.Bits.Type & 0x10) == 0)
+ gdb_puts("System selector ");
+ gdb_printf ("Privilege level = %ld. ",
+ (unsigned long) info.HighWord.Bits.Dpl);
+ if (info.HighWord.Bits.Granularity)
+ gdb_puts ("Page granular.\n");
+ else
+ gdb_puts ("Byte granular.\n");
+ return 1;
+ }
+ else
+ {
+ DWORD err = GetLastError ();
+ if (err == ERROR_NOT_SUPPORTED)
+ gdb_printf ("Function not supported\n");
+ else
+ gdb_printf ("Invalid selector 0x%x.\n", (unsigned) sel);
+ return 0;
+ }
+}
+
+static void
+display_selectors (const char * args, int from_tty)
+{
+ if (inferior_ptid == null_ptid)
+ {
+ gdb_puts ("Impossible to display selectors now.\n");
+ return;
+ }
+
+ windows_thread_info *current_windows_thread
+ = windows_process->thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT);
+
+ if (!args)
+ {
+ windows_process->with_context (current_windows_thread, [&] (auto *context)
+ {
+ gdb_puts ("Selector $cs\n");
+ display_selector (current_windows_thread->h, context->SegCs);
+ gdb_puts ("Selector $ds\n");
+ display_selector (current_windows_thread->h, context->SegDs);
+ gdb_puts ("Selector $es\n");
+ display_selector (current_windows_thread->h, context->SegEs);
+ gdb_puts ("Selector $ss\n");
+ display_selector (current_windows_thread->h, context->SegSs);
+ gdb_puts ("Selector $fs\n");
+ display_selector (current_windows_thread->h, context->SegFs);
+ gdb_puts ("Selector $gs\n");
+ display_selector (current_windows_thread->h, context->SegGs);
+ });
+ }
+ else
+ {
+ int sel;
+ sel = parse_and_eval_long (args);
+ gdb_printf ("Selector \"%s\"\n",args);
+ display_selector (current_windows_thread->h, sel);
+ }
+}
+
INIT_GDB_FILE (x86_windows_nat)
{
x86_dr_low.set_control = cygwin_set_dr7;
@@ -363,4 +486,8 @@ INIT_GDB_FILE (x86_windows_nat)
add_inf_child_target (new x86_windows_nat_target);
windows_process = &x86_windows_process;
+
+ add_cmd ("selector", class_info, display_selectors,
+ _("Display selectors infos."),
+ &info_w32_cmdlist);
}
--
2.52.0
next prev parent reply other threads:[~2026-01-17 13:42 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20260117134052.2660009-1-ssbssa.ref@yahoo.de>
2026-01-17 13:36 ` [PATCH v2 01/11] Remove duplicate code from windows_nat_target::resume Hannes Domani
2026-01-17 13:36 ` [PATCH v2 02/11] Simplify windows_nat_target::resume Hannes Domani
2026-01-19 13:55 ` Schimpe, Christina
2026-01-21 15:42 ` Tom Tromey
2026-01-23 19:11 ` Hannes Domani
2026-01-17 13:36 ` [PATCH v2 03/11] Move struct declarations into windows-nat.h Hannes Domani
2026-01-17 13:36 ` [PATCH v2 04/11] Create x86-windows-nat.c Hannes Domani
2026-01-21 15:38 ` Tom Tromey
2026-01-17 13:36 ` [PATCH v2 05/11] Move x86 debug registers and related code into x86-windows-nat.c Hannes Domani
2026-01-19 12:49 ` Schimpe, Christina
2026-01-20 15:49 ` Hannes Domani
2026-01-21 8:06 ` Schimpe, Christina
2026-01-23 13:17 ` [PATCH v3] " Hannes Domani
2026-01-23 18:50 ` Tom Tromey
2026-01-23 19:20 ` Hannes Domani
2026-01-23 19:56 ` Tom Tromey
2026-01-17 13:36 ` [PATCH v2 06/11] Move x86 register " Hannes Domani
2026-01-19 12:50 ` Schimpe, Christina
2026-01-17 13:36 ` Hannes Domani [this message]
2026-01-19 13:56 ` [PATCH v2 07/11] Move x86 selector " Schimpe, Christina
2026-01-17 13:36 ` [PATCH v2 08/11] Move software breakpoint recognition " Hannes Domani
2026-01-19 12:51 ` Schimpe, Christina
2026-01-21 15:43 ` Tom Tromey
2026-01-23 19:12 ` Hannes Domani
2026-01-17 13:36 ` [PATCH v2 09/11] Move auto_wide_charset gdbarch method to windows-tdep Hannes Domani
2026-01-17 13:36 ` [PATCH v2 10/11] Move setting size of long " Hannes Domani
2026-01-21 15:47 ` Tom Tromey
2026-01-17 13:54 ` [PATCH v2 04/11] Create x86-windows-nat.c Hannes Domani
2026-01-17 14:01 ` Hannes Domani
2026-01-17 14:14 ` Hannes Domani
2026-01-17 15:04 ` Simon Marchi
2026-01-17 15:15 ` Hannes Domani
2026-01-17 13:54 ` [PATCH v2 05/11] Move x86 debug registers and related code into x86-windows-nat.c Hannes Domani
2026-01-17 13:54 ` [PATCH v2 06/11] Move x86 register " Hannes Domani
2026-01-21 16:08 ` Tom Tromey
2026-01-17 13:54 ` [PATCH v2 09/11] Move auto_wide_charset gdbarch method to windows-tdep Hannes Domani
2026-01-21 15:48 ` Tom Tromey
2026-01-23 19:13 ` Hannes Domani
2026-01-17 13:54 ` [PATCH v2 10/11] Move setting size of long " Hannes Domani
2026-01-21 15:59 ` Tom Tromey
2026-01-17 13:54 ` [PATCH v2 11/11] Add aarch64-windows support Hannes Domani
2026-01-17 16:04 ` Eli Zaretskii
2026-01-21 16:18 ` Tom Tromey
2026-01-23 19:14 ` Hannes Domani
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=20260117134052.2660009-7-ssbssa@yahoo.de \
--to=ssbssa@yahoo.de \
--cc=gdb-patches@sourceware.org \
--cc=tom@tromey.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