Browse Source

gdb: Consolidate 32bit-pkeys.xml and 64bit-pkeys.xml

1. Since 32bit-pkeys.xml and 64bit-pkeys.xml are identical, consolidate
them into a single keys.xml.
2. Enable PKU for x32 to fix:

$ gdbserver :123456 x32-program
...
.../gdbserver/regcache.cc:255: A problem internal to GDBserver has been detected
.
Unknown register pkru requested

on Tiger Lake.
binutils-2_39-branch
H.J. Lu 5 years ago
parent
commit
0653f01479
  1. 6
      gdb/amd64-linux-tdep.c
  2. 6
      gdb/arch/amd64.c
  3. 4
      gdb/arch/i386.c
  4. 3
      gdb/features/Makefile
  5. 14
      gdb/features/i386/64bit-pkeys.c
  6. 13
      gdb/features/i386/64bit-pkeys.xml
  7. 4
      gdb/features/i386/pkeys.c
  8. 0
      gdb/features/i386/pkeys.xml

6
gdb/amd64-linux-tdep.c

@ -1578,14 +1578,16 @@ amd64_linux_read_description (uint64_t xcr0_features_bit, bool is_x32)
{
static target_desc *amd64_linux_tdescs \
[2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/] = {};
static target_desc *x32_linux_tdescs[2/*AVX*/][2/*AVX512*/] = {};
static target_desc *x32_linux_tdescs \
[2/*AVX*/][2/*AVX512*/][2/*PKRU*/] = {};
target_desc **tdesc;
if (is_x32)
{
tdesc = &x32_linux_tdescs[(xcr0_features_bit & X86_XSTATE_AVX) ? 1 : 0 ]
[(xcr0_features_bit & X86_XSTATE_AVX512) ? 1 : 0];
[(xcr0_features_bit & X86_XSTATE_AVX512) ? 1 : 0]
[(xcr0_features_bit & X86_XSTATE_PKRU) ? 1 : 0];
}
else
{

6
gdb/arch/amd64.c

@ -25,9 +25,9 @@
#include "../features/i386/64bit-core.c"
#include "../features/i386/64bit-linux.c"
#include "../features/i386/64bit-mpx.c"
#include "../features/i386/64bit-pkeys.c"
#include "../features/i386/64bit-segments.c"
#include "../features/i386/64bit-sse.c"
#include "../features/i386/pkeys.c"
#include "../features/i386/x32-core.c"
@ -72,8 +72,8 @@ amd64_create_target_description (uint64_t xcr0, bool is_x32, bool is_linux,
if (xcr0 & X86_XSTATE_AVX512)
regnum = create_feature_i386_64bit_avx512 (tdesc.get (), regnum);
if ((xcr0 & X86_XSTATE_PKRU) && !is_x32)
regnum = create_feature_i386_64bit_pkeys (tdesc.get (), regnum);
if (xcr0 & X86_XSTATE_PKRU)
regnum = create_feature_i386_pkeys (tdesc.get (), regnum);
return tdesc.release ();
}

4
gdb/arch/i386.c

@ -27,8 +27,8 @@
#include "../features/i386/32bit-avx.c"
#include "../features/i386/32bit-avx512.c"
#include "../features/i386/32bit-mpx.c"
#include "../features/i386/32bit-pkeys.c"
#include "../features/i386/32bit-segments.c"
#include "../features/i386/pkeys.c"
/* Create i386 target descriptions according to XCR0. */
@ -67,7 +67,7 @@ i386_create_target_description (uint64_t xcr0, bool is_linux, bool segments)
regnum = create_feature_i386_32bit_avx512 (tdesc.get (), regnum);
if (xcr0 & X86_XSTATE_PKRU)
regnum = create_feature_i386_32bit_pkeys (tdesc.get (), regnum);
regnum = create_feature_i386_pkeys (tdesc.get (), regnum);
return tdesc.release ();
}

3
gdb/features/Makefile

@ -216,7 +216,6 @@ FEATURE_XMLFILES = aarch64-core.xml \
i386/32bit-avx.xml \
i386/32bit-mpx.xml \
i386/32bit-avx512.xml \
i386/32bit-pkeys.xml \
i386/32bit-segments.xml \
i386/64bit-avx512.xml \
i386/64bit-core.xml \
@ -224,8 +223,8 @@ FEATURE_XMLFILES = aarch64-core.xml \
i386/64bit-segments.xml \
i386/64bit-avx.xml \
i386/64bit-linux.xml \
i386/64bit-pkeys.xml \
i386/64bit-sse.xml \
i386/pkeys.xml \
i386/x32-core.xml \
loongarch/base32.xml \
loongarch/base64.xml \

14
gdb/features/i386/64bit-pkeys.c

@ -1,14 +0,0 @@
/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
Original: 64bit-pkeys.xml */
#include "gdbsupport/tdesc.h"
static int
create_feature_i386_64bit_pkeys (struct target_desc *result, long regnum)
{
struct tdesc_feature *feature;
feature = tdesc_create_feature (result, "org.gnu.gdb.i386.pkeys");
tdesc_create_reg (feature, "pkru", regnum++, 1, NULL, 32, "uint32");
return regnum;
}

13
gdb/features/i386/64bit-pkeys.xml

@ -1,13 +0,0 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2016-2022 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. -->
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
<feature name="org.gnu.gdb.i386.pkeys">
<reg name="pkru" bitsize="32" type="uint32"/>
</feature>

4
gdb/features/i386/32bit-pkeys.c → gdb/features/i386/pkeys.c

@ -1,10 +1,10 @@
/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
Original: 32bit-pkeys.xml */
Original: pkeys.xml */
#include "gdbsupport/tdesc.h"
static int
create_feature_i386_32bit_pkeys (struct target_desc *result, long regnum)
create_feature_i386_pkeys (struct target_desc *result, long regnum)
{
struct tdesc_feature *feature;

0
gdb/features/i386/32bit-pkeys.xml → gdb/features/i386/pkeys.xml

Loading…
Cancel
Save