From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 4XdZCKyMnmrErTMAWB0awg (envelope-from ) for ; Mon, 07 Sep 2026 06:06:36 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=BEAQu31O; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id D3A5F1E09E; Mon, 07 Sep 2026 06:06:35 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 3DFB81E091 for ; Mon, 07 Sep 2026 06:06:33 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AEEA44C91762 for ; Mon, 7 Sep 2026 10:06:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AEEA44C91762 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=BEAQu31O Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 3437F4C3188C for ; Mon, 7 Sep 2026 10:05:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3437F4C3188C Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 3437F4C3188C Authentication-Results: sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788775550; cv=none; b=ELJzTJIbshYRNO5ZqCkLC2FALy9Tx9jS9Gz/QRiGJIX03QDjdXHqxGdx4d8bH2cJlT+ijqEdRkiW8/BGTKB31Mhcz37JZZjymbwv0je4Ac0f/O0O93O5pfQ+17JdzlsJL8qAYLeKO/EhxFtY4h2+ct7dvQxYp9HthivxkGD4Kx8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788775550; c=relaxed/simple; bh=F+vYOUOzdIFxr+Z+xQye/qo6dZSYSp2Y02+5JxsoWgs=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=iHeqxQBb4ZHZD3Yh4CxeD7rm93++/E+JmCvBGnS2aVc2eoyW2jwRnIdW2XIo7xNbCGKMEoHmqzP/cGM/QrjfKvXhWYDTVqcmpsFDv54hf8q1kcu3DA66nOfmXkGdtK/pOs6EH5/UEQjwKpkazzKc2wJL89BuTDvMzg9wE6JQZI8= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=BEAQu31O DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3437F4C3188C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788775549; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=3/p9SVQ2TglLLaFW+rTUdaR0N2pOBAe4KGQ+FwkYfsU=; b=BEAQu31ONfRnOJahpzPR1DeLwcJpJTWoBwxITWj1Dsto9MD8wJweMvibO6yRL9Cj66E6T0 uGTB9xGr1efPF/QOmAUNQAZ+3SviWFYIjmHDuQql+/j+lb+fOpblxO7I9WVPj6AnGvz1Y/ vEN8hkixZrWtJFtLqSR3xfKtKeEH9kA= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-478-vshmE_KJOb-1r7Gg4hd6Rg-1; Mon, 07 Sep 2026 06:05:47 -0400 X-MC-Unique: vshmE_KJOb-1r7Gg4hd6Rg-1 X-Mimecast-MFC-AGG-ID: vshmE_KJOb-1r7Gg4hd6Rg_1788775546 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4994aebe932so42606055e9.3 for ; Mon, 07 Sep 2026 03:05:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788775546; x=1789380346; h=content-type:mime-version:message-id:date:references:in-reply-to :subject:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3/p9SVQ2TglLLaFW+rTUdaR0N2pOBAe4KGQ+FwkYfsU=; b=N5vkgUm7qPiQKh76UuL7l8dnOLCxPKVKmSy6o5C2zaaRotyRmjhV8QVA28ZlWo3fTg mt+sQWEQWpAB1/V28igc47RWJJYajA7s3Iqs1b/bGD5/yl12d42qDQLJwxAnz1rUjVqY MRllj7Tfmyn7YnRr1hqv2hF+NgqPSV8VR+z+YXWnTSXmm7iTVT65dAgEhAo+/A1TNAim VYShE/G+3WnTJJtZL5c+6AWexWeICZHOOyLU6ITjfia0rjqYdq1MUuaeWB3mMKBsVkQk QUuKpx537p29y7uq2RKN9u0jQIKZKzsC5ebf0UfLdrd2LBeV+AlYVMLIZy9hkwDFhxIq 4z+Q== X-Forwarded-Encrypted: i=1; AKwUvByVCYBP7EV/485sNO1K7wubeYxW6dPIQoKgtKEN++wOFuGDIxIjfqP+u8byIErsdjAaJyzFx0dc5mGgMg==@sourceware.org X-Gm-Message-State: AFuF++mHgkjLWOn/LjdLnL16JEx7gKAgysKzbPYsZgEJRdegUEyQx5iK dLqTRNhFE7kJp5neTwmh3Id92rQVlrYhGhw4idNAhNYpYzTVGvm17eSj0+ixJ0cziCHxhXZi2yp IU2HRUlKloY70YHMJ5DthcxUoT2sLwDWiIaxTaeoJ9BOqYtUrpAAi964vojiBuvNWEQrMgt4= X-Gm-Gg: AYBFou21ViuYrOnPbMwu0snLuaiPuEJ8XO04wchI241momTXeFZKwb5qz/YjQXJkz1f qQKoxjO/ZOrdLV0WC/wDw8okFxsi1tW0Jnv5X77jcMutDytuQxu26pqJZEiPEvycju7ORc7GQUl uY8eVYydrKnZ7YYMpm62jJiOhVDcnbqeNKGjUqTzduauHwERhOxIECmWliHCVOaK1AcGHDN6kns U0jTYIIDHc//kgAzHsgxzJfKOp+WnmV1ium8NTpY/6/Wj2rkLUCH5YYWPQrRdgsFy7lPP6NXzSR 0FBtcZxwocUOmO1Iv3TMiDZwMi442hRdO9ZDAMYihGp1v9fFF7Rs8Q0nGBCTZiMYx3EmTAkbcpM ZmaEO/rN+eDmFxzGuXfD6eYnaAsU= X-Received: by 2002:a05:600c:4e94:b0:498:943:ccc0 with SMTP id 5b1f17b1804b1-49cf81e368emr363472075e9.6.1788775545023; Mon, 07 Sep 2026 03:05:45 -0700 (PDT) X-Received: by 2002:a05:600c:4e94:b0:498:943:ccc0 with SMTP id 5b1f17b1804b1-49cf81e368emr363469955e9.6.1788775543928; Mon, 07 Sep 2026 03:05:43 -0700 (PDT) Received: from localhost (128.223.159.143.dyn.plus.net. [143.159.223.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cee6024a8sm397447695e9.6.2026.09.07.03.05.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 03:05:43 -0700 (PDT) From: Andrew Burgess To: Christina Joos , gdb-patches@sourceware.org Subject: Re: [PATCH 1/2] gdb: Enable OS generated corefiles on systems with Intel AMX support. In-Reply-To: <20260904100648.1705702-2-christina.joos@intel.com> References: <20260904100648.1705702-1-christina.joos@intel.com> <20260904100648.1705702-2-christina.joos@intel.com> Date: Mon, 07 Sep 2026 11:05:42 +0100 Message-ID: <87tso1qsuh.fsf@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: uytmjj8zSdJgml35cjox6uDJ8E5C95M-gnFHbix1gn8_1788775546 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org Thanks for addressing this issue. I have some style issues, and one deeper though about the test, see below. Christina Joos writes: > This patch addresses the issue described in > https://sourceware.org/bugzilla/show_bug.cgi?id=34561. Bugs should be linked using a line at the end of the commit message (see gdb/MAINTAINERS) like: Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=34561 Given the link always gets added at the end like this, in the commit message body you can just write: This patch addresses the issue described in PR gdb/34561. On systems with Intel AMX support the .... etc ... anyone who wants a direct link to the bug can find it in the 'Bug: ' line at the end of the commit message. > > On Systems with Intel AMX support the xsave size is 11008. This xsave lower case 's' on 'Systems' please. > size is not handled by gdb/i387-tdep.c:i387_guess_xsave_layout and is > causing problems for corefiles generated by the linux kernel. > > ~~~ > $ gdb > GNU gdb (GDB) 19.0.50.20260814-git > Copyright (C) 2026 Free Software Foundation, Inc. > [...] > (gdb) core core_main_SEGV > [New LWP 2162880 (id 1)] > [...] > Core was generated by `./main'. > Program terminated with signal SIGSEGV, Segmentation fault. > 4 *pointer = 3; > (gdb) p $ymm0 > $1 = void > ~~~ > > We should be able to print the register $ymm0 (or any other register > belonging to a feature higher than SSE). > > For a live debug session we can print it: > ~~~ > Reading symbols from main... > (gdb) start > Temporary breakpoint 1 at 0x1131: file main.c, line 3. > Starting program: /tmp/main > [Thread debugging using libthread_db enabled] > Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". > > Temporary breakpoint 1, main () at main.c:3 > 3 int *pointer = 0; > (gdb) p $ymm0 > $1 = {v16_bfloat16 = {0, 2.342e-38, 0 }, v16_half = {0, 1.5199e-05, 0 }, v8_float = { > 2.34180515e-38, 0, 0, 0, 0, 0, 0, 0}, v4_double = {8.256666972292243e-317, 0, 0, 0}, v32_int8 = {0, 0, -1, > 0 }, v16_int16 = {0, 255, 0 }, v8_int32 = {16711680, 0, 0, 0, 0, 0, 0, 0}, v4_int64 = { > 16711680, 0, 0, 0}, v2_int128 = {16711680, 0}} > [...] > ~~~ > > Note, that this is not reproducible for corefiles generated by the gcore Drop the comma after 'Note'. > command, since in such corefiles the GDB target description is > available and gdb/i387-tdep.c:i387_fallback_xsave_layout configures > the xsave_layout based on xcr0 derived from the target description. > > This patch fixes this issue by handling the new xsave size in > i387_guess_xsave_layout. It is necessary even though GDB does not > support AMX yet, since we still pass the full xsave_size (11008) > extracted from the corefile to i387_guess_xsave_layout. > The patch does not fix i387_fallback_xsave_layout to configure the new xsave > size. Configuring sizeof_xsave to 2696 is fine at this point, since > truncating to 2696 drops only the parts GDB doesn't model yet. > > As a quick solution for the upcoming release and CPUs supporting > Intel AMX this patch should be sufficient. > > Testing: > > I noticed that we don't have tests for corefiles for the features AVX, > AVX512 and PKRU in the GDB testsuite. So this commit adds corefile tests > for AVX, AVX512 and PKRU registers. > > It further fixes the tests gdb.base/coredump-filter.exp and > gdb.arch/i386-tls-regs.exp on systems with Intel AMX support. > With my patch the warning > "warning: Unexpected size of section `.reg-xstate/1373786' in core file.^M" > disappears and the tests are passing again. Can you clean up the ^M artefact please. Also, as you're touching the commit message anyway, I think this would be better written as: As a result of this patch, the warning: warning: Unexpected size of section `.reg-xstate/1373786' in core file. which was causing failure in gdb.base/coredump-filter.exp and gdb.arch/i386-tls-regs.exp on AMX systems disappears, these tests now pass. > --- > gdb/i387-tdep.c | 9 +++- > gdb/testsuite/gdb.arch/i386-avx.c | 6 +++ > gdb/testsuite/gdb.arch/i386-avx.exp | 61 ++++++++++++++++++++++---- > gdb/testsuite/gdb.arch/i386-avx512.c | 6 +++ > gdb/testsuite/gdb.arch/i386-avx512.exp | 56 +++++++++++++++++++++++ > gdb/testsuite/gdb.arch/i386-pkru.c | 6 +++ > gdb/testsuite/gdb.arch/i386-pkru.exp | 39 ++++++++++++++++ > 7 files changed, 173 insertions(+), 10 deletions(-) > > diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c > index f22a5e02bbb..19429536537 100644 > --- a/gdb/i387-tdep.c > +++ b/gdb/i387-tdep.c > @@ -918,9 +918,14 @@ bool > i387_guess_xsave_layout (uint64_t xcr0, size_t xsave_size, > x86_xsave_layout &layout) > { > - if (HAS_PKRU (xcr0) && xsave_size == 2696) > + if (HAS_PKRU (xcr0) && (xsave_size == 2696 || xsave_size == 11008)) > { > - /* Intel CPUs supporting PKRU. */ > + /* Intel CPUs supporting PKRU. > + Note that in this case 2 possible xsave_sizes have to be handled, The 'Note' here is not really needed. The comment is by definition a note. Also, variables should be capitalised, or avoid using the variable name maybe, like: In this case two possible XSAVE_SIZE values have to be handled. As GDB does not yet support Intel AMX and CPUs that support this feature will have a different XSAVE_SIZE (11008). If we don't handle this size then we will not be able to handle any xsave registers from OS generated core files on AMX systems. > + since GDB does not support Intel AMX yet and CPUs that support > + this feature still have a different xsave size (xsave_size == 11008). > + Otherwise, we are not able to read xsave registers in OS generated > + corefiles. */ > layout.avx_offset = 576; > layout.k_offset = 1088; > layout.zmm_h_offset = 1152; > diff --git a/gdb/testsuite/gdb.arch/i386-avx.c b/gdb/testsuite/gdb.arch/i386-avx.c > index b6cd89e5bea..7edcabcec8c 100644 > --- a/gdb/testsuite/gdb.arch/i386-avx.c > +++ b/gdb/testsuite/gdb.arch/i386-avx.c > @@ -18,11 +18,14 @@ > along with this program. If not, see . */ > > #include > +#include > #include "nat/x86-cpuid.h" > > /* Align sufficient to be able to use vmovaps. */ > #define ALIGN 32 > > +volatile int should_dump_core_p = 1; > + > typedef struct { > _Alignas (ALIGN) float f[8]; > } v8sf_t; > @@ -87,6 +90,9 @@ main (int argc, char **argv) > > asm ("nop"); /* first breakpoint here */ > > + if (should_dump_core_p) /* Crash for OS corefile. */ > + abort (); We should still follow GDB/GNU style as much as possible in tests, which means avoiding trailing comments. Please move the comment above the `if` line. The exception in tests is when we use a comment to tag a line on which we wish to place a breakpoint, e.g. the 'first breakpoint here' line above. I also wonder if using `abort()` here is the right approach. You want to check the register values in the generated core file, not just C level variables. Making a function call runs the risk that the callee might touch some or all of these registers. I guess it's unlikely for something as simple as abort(), but I wonder maybe, if that's what's causing the problem your second patch is addressing? Maybe it would be better to trigger the core file by reading from address zero? We have a testsuite proc `is_address_zero_readable` which can be used to gate such a test. I think it might be worth testing this on the problematic machines you mention in the second patch to see if this fixes the issue. > + > asm ( > "vmovaps %%ymm0, 0(%0)\n\t" > "vmovaps %%ymm1, 32(%0)\n\t" > diff --git a/gdb/testsuite/gdb.arch/i386-avx.exp b/gdb/testsuite/gdb.arch/i386-avx.exp > index 1a786ee8a51..1740045427a 100644 > --- a/gdb/testsuite/gdb.arch/i386-avx.exp > +++ b/gdb/testsuite/gdb.arch/i386-avx.exp > @@ -42,12 +42,26 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \ > return > } > > +# Check reading registers after the first breakpoint for ymm int8 and > +# float types. > +proc test_regs_first_bp {} { > + for { set r 0 } { $r < $::nr_regs } { incr r } { > + gdb_test "print \$ymm$r.v8_float" \ > + ".. = \\{$r, $r.125, $r.25, $r.375, $r.5, $r.625, $r.75, $r.875\\}.*" \ > + "check float contents of %ymm$r" > + gdb_test "print \$ymm$r.v32_int8" \ > + ".. = \\{(-?${::decimal}, ){31}-?${::decimal}\\}.*" \ > + "check int8 contents of %ymm$r" > + } > +} > clean_restart ${::testfile} Add a blank line before the clean_restart line please. > > if {![runto_main]} { > return > } > > +gdb_test_no_output "set should_dump_core_p=0" > + > gdb_test "break [gdb_get_line_number "first breakpoint here"]" \ > "Breakpoint .* at .*i386-avx.c.*" \ > "set first breakpoint in main" > @@ -59,14 +73,7 @@ if {[is_amd64_regs_target]} { > set nr_regs 8 > } > > -for { set r 0 } { $r < $nr_regs } { incr r } { > - gdb_test "print \$ymm$r.v8_float" \ > - ".. = \\{$r, $r.125, $r.25, $r.375, $r.5, $r.625, $r.75, $r.875\\}.*" \ > - "check float contents of %ymm$r" > - gdb_test "print \$ymm$r.v32_int8" \ > - ".. = \\{(-?${::decimal}, ){31}-?${::decimal}\\}.*" \ > - "check int8 contents of %ymm$r" > -} > +test_regs_first_bp > > for { set r 0 } { $r < $nr_regs } { incr r } { > gdb_test "set var \$ymm$r.v8_float\[0\] = $r + 10" "" "set %ymm$r" > @@ -100,9 +107,47 @@ with_test_prefix "force-disable xml descriptions" { > return > } > > + gdb_test_no_output "set should_dump_core_p=0" > + > # With qXfer:features:read disabled, we won't know anything > # about YMM registers. > gdb_test "print \$ymm0" " = void" > gdb_test "print \$xmm0" "v4_float.*" > } > } > + > +# Restart gdb, load the corefile generated by gcore or the OS > +# and check reading registers from the corefile. > +proc test_corefile {core_filename} { > + clean_restart $::testfile > + > + gdb_test "core $core_filename" "Core was generated by .*" \ > + "load corefile" > + > + test_regs_first_bp > +} > + > +with_test_prefix "OS generated corefile" { > + set corefile [core_find $binfile] > + if { $corefile eq "" } { > + unsupported "unable to generate core file" > + } else { > + test_corefile $corefile > + } > +} > + > +with_test_prefix "gcore corefile" { > + clean_restart ${::testfile} > + if { ![runto_main] } { > + return > + } > + > + set line [gdb_get_line_number "first breakpoint here"] > + gdb_breakpoint $line > + gdb_continue_to_breakpoint "first breakpoint here" ".*$srcfile:$line.*" > + > + set gcorefile $binfile.gcore > + if { [gdb_gcore_cmd $gcorefile "save a corefile"] } { > + test_corefile $gcorefile > + } > +} > diff --git a/gdb/testsuite/gdb.arch/i386-avx512.c b/gdb/testsuite/gdb.arch/i386-avx512.c > index b1e023ce4d4..d935fab50bc 100644 > --- a/gdb/testsuite/gdb.arch/i386-avx512.c > +++ b/gdb/testsuite/gdb.arch/i386-avx512.c > @@ -17,8 +17,11 @@ > You should have received a copy of the GNU General Public License > along with this program. If not, see . */ > > +#include > #include "x86-cpuid.h" > > +volatile int should_dump_core_p = 1; > + > typedef struct > { > double f[8]; > @@ -233,6 +236,9 @@ main (int argc, char **argv) > move_zmm_data_to_reg (); > asm ("nop"); /* third breakpoint here */ > > + if (should_dump_core_p) /* Crash for OS corefile. */ > + abort (); Trailing comment again. > + > /* Test script incremented values, > move back to array and check values. */ > move_zmm_data_to_memory (); > diff --git a/gdb/testsuite/gdb.arch/i386-avx512.exp b/gdb/testsuite/gdb.arch/i386-avx512.exp > index c79563366dc..6984c2280e9 100644 > --- a/gdb/testsuite/gdb.arch/i386-avx512.exp > +++ b/gdb/testsuite/gdb.arch/i386-avx512.exp > @@ -35,6 +35,8 @@ if {![runto_main]} { > return > } > > +gdb_test_no_output "set should_dump_core_p=0" > + > set supports_avx512 0 > > set test "probe AVX512 support" > @@ -181,3 +183,57 @@ gdb_test "print \$zmm0.v16_int32" "= {-1, -1, -1, -1, 0 }" > if { $nr_regs >= 16 } { > gdb_test "print \$zmm16.v16_int32" "= {-1 }" > } > + > +# Test reading k and zmm registers and for double and int16 types. > +proc test_regs_corefile {} { > + for { set r 1 } { $r < 8 } { incr r } { > + gdb_test "print/x \$k$r" \ > + ".. = 0x[format %x $r]2[format %x $r]1" \ > + "check contents of %k$r" > + } > + > + for { set r 0 } { $r < $::nr_regs } { incr r } { > + gdb_test "print \$zmm$r.v8_double" \ > + ".. = \\{$r, $r.125, $r.25, $r.375, $r.5, $r.625, $r.75, $r.875\\}.*" \ > + "check double contents of %zmm$r" > + gdb_test "print \$zmm$r.v32_int16" \ > + ".. = \\{(-?${::decimal}, ){31}-?${::decimal}\\}.*" \ > + "check int16 contents of %zmm$r" > + } > +} > + > +# Restart gdb, load the corefile generated by gcore or the OS > +# and check reading registers from the corefile. > +proc test_corefile {core_filename} { > + clean_restart $::testfile > + > + gdb_test "core $core_filename" "Core was generated by .*" \ > + "load corefile" > + > + test_regs_corefile > +} > + > +with_test_prefix "OS generated corefile" { > + set corefile [core_find $binfile] > + if { $corefile eq "" } { > + unsupported "unable to generate core file" > + } else { > + test_corefile $corefile > + } > +} > + > +with_test_prefix "gcore corefile" { > + clean_restart ${::testfile} > + if { ![runto_main] } { > + return > + } > + > + set line [gdb_get_line_number "third breakpoint here"] > + gdb_breakpoint $line > + gdb_continue_to_breakpoint "third breakpoint here" ".*$srcfile:$line.*" > + > + set gcorefile $binfile.gcore > + if { [gdb_gcore_cmd $gcorefile "save a corefile"] } { > + test_corefile $gcorefile > + } > +} > diff --git a/gdb/testsuite/gdb.arch/i386-pkru.c b/gdb/testsuite/gdb.arch/i386-pkru.c > index 9561d1e923a..e316ca90bba 100644 > --- a/gdb/testsuite/gdb.arch/i386-pkru.c > +++ b/gdb/testsuite/gdb.arch/i386-pkru.c > @@ -18,12 +18,15 @@ > along with this program. If not, see . */ > > #include > +#include > #include "x86-cpuid.h" > > #ifndef NOINLINE > #define NOINLINE __attribute__ ((noinline)) > #endif > > +volatile int should_dump_core_p = 1; > + > unsigned int have_pkru (void) NOINLINE; > > static inline unsigned long > @@ -83,6 +86,9 @@ main (int argc, char **argv) > wrpkru (wr_value); > asm ("nop\n\t"); /* break here 1. */ > > + if (should_dump_core_p) /* Crash for OS corefile. */ > + abort (); Trailing comment again. Thanks, Andrew