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.
This commit is contained in:
H.J. Lu 2022-02-24 07:34:01 -08:00
parent 5a0c4a06eb
commit 0653f01479
8 changed files with 12 additions and 38 deletions

View File

@ -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
{

View File

@ -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 ();
}

View File

@ -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 ();
}

View File

@ -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 \

View File

@ -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;
}

View File

@ -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>

View File

@ -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;