From patchwork Sat Feb 1 18:43:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ruslan Kabatsayev X-Patchwork-Id: 37641 Received: (qmail 127529 invoked by alias); 1 Feb 2020 18:43:44 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 127521 invoked by uid 89); 1 Feb 2020 18:43:44 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.6 required=5.0 tests=BAYES_00, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=Currently, ia32 X-HELO: mail-lf1-f65.google.com Received: from mail-lf1-f65.google.com (HELO mail-lf1-f65.google.com) (209.85.167.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 01 Feb 2020 18:43:42 +0000 Received: by mail-lf1-f65.google.com with SMTP id r14so7037481lfm.5 for ; Sat, 01 Feb 2020 10:43:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=48fmVCNCteMLnq6PBWBInHdVwX3/OHyj9/fOwQxdClc=; b=jBx1CvANQVwFmwNgZ4zqVXvznhbfOblE58ojEDvq9UKjDflIPJDy5IRoxErAAMk+d9 +AUsXqCQNfSCMlNEaSzDVF51TZQ5l6C0JQJp8d8nPx/RkdtpZxkSQ75LmCIM313VLIgl vZ9qFwjoqwc1/7CLK+PHAT6/gOPF0krC696JMFhCI6ci59O5WFRVEmZkasVLGNdpOTz6 N6SsHb5uD325dABaas/W/vfmVNVk58XiI4kJYoStUm1pa7TAB0cJ1zL6vfK9K41p+S69 NCidIpCFGFq0uvL9i0xE4nvjqFSRwYwT600+jTT8DoksDL+b8SO5v5b18kwtJhlfK6Bx AVoA== Return-Path: Received: from localhost.localdomain ([146.120.66.91]) by smtp.gmail.com with ESMTPSA id h7sm6491913lfj.29.2020.02.01.10.43.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 01 Feb 2020 10:43:38 -0800 (PST) From: Ruslan Kabatsayev To: gdb-patches@sourceware.org Cc: Ruslan Kabatsayev Subject: [PATCH] Fix sizes and types of x86 segment and x87 registers Date: Sat, 1 Feb 2020 21:43:18 +0300 Message-Id: <20200201184318.25049-1-b7.10110111@gmail.com> X-IsSubscribed: yes Segment registers are actually 16-bit, and their upper bit doesn't have the meaning of sign. Currently GDB instead thinks they are signed 32-bit, which makes various debugger front-ends (e.g. QtCreator) display them in unnatural format like 00000023. Similar consideration applies to various x87 non-data registers. In addition, fioff and fooff on IA32 are conceptually pointers, so the command like "p $fioff" should show them as such, not as decimal integers. On x86-64 fioff and fooff are not as straightforward, being only the lower parts of the 48-bit offsets, upper part of which is in fiseg and foseg, respectively, so this easy type assignment can't be done. This patch fixes types and sizes of these 16-bit registers to unsigned 16-bit, and makes types of fioff and fooff on IA32 respectively code_ptr and data_ptr (on x86_64 both are made uint32). gdb/ChangeLog: 2020-02-01 Ruslan Kabatsayev * features/i386/32bit-core.xml: Fix segment and x87 register sizes and types. * features/i386/64bit-core.xml: Ditto. * features/i386/32bit-core.c: Regenerate. * features/i386/64bit-core.c: Regenerate. --- gdb/features/i386/32bit-core.c | 28 ++++++++++++++-------------- gdb/features/i386/32bit-core.xml | 28 ++++++++++++++-------------- gdb/features/i386/64bit-core.c | 28 ++++++++++++++-------------- gdb/features/i386/64bit-core.xml | 28 ++++++++++++++-------------- 4 files changed, 56 insertions(+), 56 deletions(-) diff --git a/gdb/features/i386/32bit-core.c b/gdb/features/i386/32bit-core.c index 8f9fbad717b..b1b5d5ad673 100644 --- a/gdb/features/i386/32bit-core.c +++ b/gdb/features/i386/32bit-core.c @@ -39,12 +39,12 @@ create_feature_i386_32bit_core (struct target_desc *result, long regnum) tdesc_create_reg (feature, "edi", regnum++, 1, NULL, 32, "int32"); tdesc_create_reg (feature, "eip", regnum++, 1, NULL, 32, "code_ptr"); tdesc_create_reg (feature, "eflags", regnum++, 1, NULL, 32, "i386_eflags"); - tdesc_create_reg (feature, "cs", regnum++, 1, NULL, 32, "int32"); - tdesc_create_reg (feature, "ss", regnum++, 1, NULL, 32, "int32"); - tdesc_create_reg (feature, "ds", regnum++, 1, NULL, 32, "int32"); - tdesc_create_reg (feature, "es", regnum++, 1, NULL, 32, "int32"); - tdesc_create_reg (feature, "fs", regnum++, 1, NULL, 32, "int32"); - tdesc_create_reg (feature, "gs", regnum++, 1, NULL, 32, "int32"); + tdesc_create_reg (feature, "cs", regnum++, 1, NULL, 16, "uint16"); + tdesc_create_reg (feature, "ss", regnum++, 1, NULL, 16, "uint16"); + tdesc_create_reg (feature, "ds", regnum++, 1, NULL, 16, "uint16"); + tdesc_create_reg (feature, "es", regnum++, 1, NULL, 16, "uint16"); + tdesc_create_reg (feature, "fs", regnum++, 1, NULL, 16, "uint16"); + tdesc_create_reg (feature, "gs", regnum++, 1, NULL, 16, "uint16"); tdesc_create_reg (feature, "st0", regnum++, 1, NULL, 80, "i387_ext"); tdesc_create_reg (feature, "st1", regnum++, 1, NULL, 80, "i387_ext"); tdesc_create_reg (feature, "st2", regnum++, 1, NULL, 80, "i387_ext"); @@ -53,13 +53,13 @@ create_feature_i386_32bit_core (struct target_desc *result, long regnum) tdesc_create_reg (feature, "st5", regnum++, 1, NULL, 80, "i387_ext"); tdesc_create_reg (feature, "st6", regnum++, 1, NULL, 80, "i387_ext"); tdesc_create_reg (feature, "st7", regnum++, 1, NULL, 80, "i387_ext"); - tdesc_create_reg (feature, "fctrl", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "fstat", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "ftag", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "fiseg", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "fioff", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "foseg", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "fooff", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "fop", regnum++, 1, "float", 32, "int"); + tdesc_create_reg (feature, "fctrl", regnum++, 1, "float", 16, "uint16"); + tdesc_create_reg (feature, "fstat", regnum++, 1, "float", 16, "uint16"); + tdesc_create_reg (feature, "ftag", regnum++, 1, "float", 16, "uint16"); + tdesc_create_reg (feature, "fiseg", regnum++, 1, "float", 16, "uint16"); + tdesc_create_reg (feature, "fioff", regnum++, 1, "float", 32, "code_ptr"); + tdesc_create_reg (feature, "foseg", regnum++, 1, "float", 16, "uint16"); + tdesc_create_reg (feature, "fooff", regnum++, 1, "float", 32, "data_ptr"); + tdesc_create_reg (feature, "fop", regnum++, 1, "float", 16, "uint16"); return regnum; } diff --git a/gdb/features/i386/32bit-core.xml b/gdb/features/i386/32bit-core.xml index 0958032a805..70e5a1d6c66 100644 --- a/gdb/features/i386/32bit-core.xml +++ b/gdb/features/i386/32bit-core.xml @@ -38,12 +38,12 @@ - - - - - - + + + + + + @@ -54,12 +54,12 @@ - - - - - - - - + + + + + + + + diff --git a/gdb/features/i386/64bit-core.c b/gdb/features/i386/64bit-core.c index 2418fe54e80..9945ce361d6 100644 --- a/gdb/features/i386/64bit-core.c +++ b/gdb/features/i386/64bit-core.c @@ -47,12 +47,12 @@ create_feature_i386_64bit_core (struct target_desc *result, long regnum) tdesc_create_reg (feature, "r15", regnum++, 1, NULL, 64, "int64"); tdesc_create_reg (feature, "rip", regnum++, 1, NULL, 64, "code_ptr"); tdesc_create_reg (feature, "eflags", regnum++, 1, NULL, 32, "i386_eflags"); - tdesc_create_reg (feature, "cs", regnum++, 1, NULL, 32, "int32"); - tdesc_create_reg (feature, "ss", regnum++, 1, NULL, 32, "int32"); - tdesc_create_reg (feature, "ds", regnum++, 1, NULL, 32, "int32"); - tdesc_create_reg (feature, "es", regnum++, 1, NULL, 32, "int32"); - tdesc_create_reg (feature, "fs", regnum++, 1, NULL, 32, "int32"); - tdesc_create_reg (feature, "gs", regnum++, 1, NULL, 32, "int32"); + tdesc_create_reg (feature, "cs", regnum++, 1, NULL, 16, "uint32"); + tdesc_create_reg (feature, "ss", regnum++, 1, NULL, 16, "uint32"); + tdesc_create_reg (feature, "ds", regnum++, 1, NULL, 16, "uint32"); + tdesc_create_reg (feature, "es", regnum++, 1, NULL, 16, "uint32"); + tdesc_create_reg (feature, "fs", regnum++, 1, NULL, 16, "uint32"); + tdesc_create_reg (feature, "gs", regnum++, 1, NULL, 16, "uint32"); tdesc_create_reg (feature, "st0", regnum++, 1, NULL, 80, "i387_ext"); tdesc_create_reg (feature, "st1", regnum++, 1, NULL, 80, "i387_ext"); tdesc_create_reg (feature, "st2", regnum++, 1, NULL, 80, "i387_ext"); @@ -61,13 +61,13 @@ create_feature_i386_64bit_core (struct target_desc *result, long regnum) tdesc_create_reg (feature, "st5", regnum++, 1, NULL, 80, "i387_ext"); tdesc_create_reg (feature, "st6", regnum++, 1, NULL, 80, "i387_ext"); tdesc_create_reg (feature, "st7", regnum++, 1, NULL, 80, "i387_ext"); - tdesc_create_reg (feature, "fctrl", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "fstat", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "ftag", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "fiseg", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "fioff", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "foseg", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "fooff", regnum++, 1, "float", 32, "int"); - tdesc_create_reg (feature, "fop", regnum++, 1, "float", 32, "int"); + tdesc_create_reg (feature, "fctrl", regnum++, 1, "float", 16, "uint16"); + tdesc_create_reg (feature, "fstat", regnum++, 1, "float", 16, "uint16"); + tdesc_create_reg (feature, "ftag", regnum++, 1, "float", 16, "uint16"); + tdesc_create_reg (feature, "fiseg", regnum++, 1, "float", 16, "uint16"); + tdesc_create_reg (feature, "fioff", regnum++, 1, "float", 32, "uint32"); + tdesc_create_reg (feature, "foseg", regnum++, 1, "float", 16, "uint16"); + tdesc_create_reg (feature, "fooff", regnum++, 1, "float", 32, "uint32"); + tdesc_create_reg (feature, "fop", regnum++, 1, "float", 16, "uint16"); return regnum; } diff --git a/gdb/features/i386/64bit-core.xml b/gdb/features/i386/64bit-core.xml index 47a631323dd..4e674367730 100644 --- a/gdb/features/i386/64bit-core.xml +++ b/gdb/features/i386/64bit-core.xml @@ -46,12 +46,12 @@ - - - - - - + + + + + + @@ -62,12 +62,12 @@ - - - - - - - - + + + + + + + +