Re: [PATCH v6 00/15] Handle variable XSAVE layouts

Keith Seitz via Gdb-patches
2023-07-25T17:17:35Z

Hi,

On 7/14/23 08:51, John Baldwin wrote:
> Changes since V5:
>
> - A few fixes not tied to the new layout handling have been merged to
> master.
>
> - Reworded the comment describing i386_*_core_read_xsave_info in patches
> 6 and 8.
>

I am sorry I am late to the review here, but I've been testing Sapphire
Rapids this past week (and its expanded register save area), and thought
I would dig into this a bit, testing it on random x86 systems in our (internal)
test farm.

The (unsurprising) good news is that on RHEL9, this series does not adversely
affect regression testing results on ppc64le, aarch64, or s390x. It also
greatly improves results on Sapphire Rapids CPUs (at least on the native
unix target).

However, I've run into some pretty consistent problems which I have not yet begun to
investigate (likely all the same bug).

With either a Raptor Lake CPU ("13th Gen Intel(R) Core(TM) i7-13700") or Sapphire
Rapids ("Intel(R) Xeon(R) Gold 5418Y"), I can get gdb to consistently segfault in
memcpy in several tests using gdbserver w/-m32:

$ make check RUNTESTFLAGS="--target_board native-gdbserver/-m32" TESTS=gdb.base/auxv.exp
[snip]
=== gdb Summary ===

# of expected passes 6
# of unexpected failures 1
# of unresolved testcases 5
# of unsupported tests 3

From gdb.log:

(gdb) PASS: gdb.base/auxv.exp: info auxv on live process
gcore /root/test-fsf-master/gdb/build-x86_64-redhat-linux-gnu/gdb/testsuite/outputs/gdb.base/auxv/auxv.gcore

Fatal signal: Segmentation fault
----- Backtrace -----
0x55ef54b9acda gdb_internal_backtrace_1
../../gdb/bt-utils.c:122
0x55ef54b9acda _Z22gdb_internal_backtracev
../../gdb/bt-utils.c:168
0x55ef54b9acda _Z22gdb_internal_backtracev
../../gdb/bt-utils.c:154
0x55ef54cc086e handle_fatal_signal
../../gdb/event-top.c:889
0x55ef54cc0a78 handle_sigsegv
../../gdb/event-top.c:962
0x7fd237654dcf ???
0x55ef54d4e9bf memcpy
/usr/include/bits/string_fortified.h:29
0x55ef54d4e9bf _Z18i387_collect_xsavePK8regcacheiPvi
../../gdb/i387-tdep.c:1543
0x55ef54d062c8 gcore_elf_collect_regset_section_cb
../../gdb/gcore-elf.c:85
0x55ef54d057ac gcore_elf_collect_thread_registers
../../gdb/gcore-elf.c:121
0x55ef54d057ac _Z37gcore_elf_build_thread_register_notesP7gdbarchP11thread_info10gdb_signalP3bfdPSt10unique_ptrIcN3gdb13xfree_deleterIcEEEPi
../../gdb/gcore-elf.c:135
0x55ef54db378f linux_corefile_thread
../../gdb/linux-tdep.c:1846
0x55ef54db3aec linux_make_corefile_notes
../../gdb/linux-tdep.c:2102
0x55ef54d06777 _Z27gdbarch_make_corefile_notesP7gdbarchP3bfdPi
../../gdb/gdbarch.c:3743
0x55ef54d06777 write_gcore_file_1
../../gdb/gcore.c:82
0x55ef54d070f7 _Z16write_gcore_fileP3bfd
../../gdb/gcore.c:119
0x55ef54d070f7 gcore_command
../../gdb/gcore.c:157
0x55ef54be0fe4 _Z8cmd_funcP16cmd_list_elementPKci
../../gdb/cli/cli-decode.c:2735
0x55ef54fca4b0 _Z15execute_commandPKci
../../gdb/top.c:574
0x55ef54cc91b7 _Z15command_handlerPKc
../../gdb/event-top.c:552
0x55ef54cc9263 _Z20command_line_handlerOSt10unique_ptrIcN3gdb13xfree_deleterIcEEE
../../gdb/event-top.c:788
0x55ef54cc048c gdb_rl_callback_handler
../../gdb/event-top.c:259
0x7fd2384c65bd ???
0x55ef54cc6a1a gdb_rl_callback_read_char_wrapper_noexcept
../../gdb/event-top.c:195
0x55ef54cc6c03 gdb_rl_callback_read_char_wrapper
../../gdb/event-top.c:234
0x55ef54fedc6f stdin_event_handler
../../gdb/ui.c:155
0x55ef551c5f2d gdb_wait_for_event
../gdbsupport/../../gdbsupport/event-loop.cc:694
0x55ef551c5f2d gdb_wait_for_event
../gdbsupport/../../gdbsupport/event-loop.cc:585
0x55ef5522c227 _Z16gdb_do_one_eventi.constprop.0
../gdbsupport/../../gdbsupport/event-loop.cc:264
0x55ef54dc8634 start_event_loop
../../gdb/main.c:412
0x55ef54dc8634 captured_command_loop
../../gdb/main.c:476
0x55ef54aaee2c captured_main
../../gdb/main.c:1320
0x55ef54aaee2c _Z8gdb_mainP18captured_main_args
../../gdb/main.c:1339
0x55ef54aaee2c main
../../gdb/gdb.c:32
---------------------
A fatal error internal to GDB has been detected, further
debugging is not possible. GDB will now terminate.

This is a bug, please report it. For instructions, see:
<https://www.gnu.org/software/gdb/bugs/>.

ERROR: GDB process no longer exists

A complete list of affected tests:

gdb.base/auxv.exp
gdb.base/coredump-filter.exp
gdb.base/corefile2.exp
gdb.base/gcore-tls-pie.exp
gdb.base/gcore.exp
gdb.base/info-proc.exp
gdb.base/patch.exp
gdb.base/print-symbol-loading.exp
gdb.base/siginfo-obj.exp
gdb.base/siginfo-thread.exp
gdb.base/solib-search.exp
gdb.base/vdso-warning.exp
gdb.btrace/gcore.exp
gdb.python/py-strfns.exp
gdb.reverse/break-precsave.exp
gdb.reverse/consecutive-precsave.exp
gdb.reverse/finish-precsave.exp
gdb.reverse/i386-precsave.exp
gdb.reverse/machinestate-precsave.exp
gdb.reverse/sigall-precsave.exp
gdb.reverse/solib-precsave.exp
gdb.reverse/step-precsave.exp
gdb.reverse/until-precsave.exp
gdb.threads/tls-core.exp same

The unix/-m32 target does not exhibit these problems. Just the
gdbserver targets (native-gdbserver, native-extended-gdbserver).

On my personal machine, a Comet Lake, all of these tests work/pass.

Keith