amd64-linux: expose system register FS_BASE and GS_BASE for Linux.
authorWalfred Tedeschi <walfred.tedeschi@intel.com>
Fri, 27 Jan 2017 14:19:14 +0000 (15:19 +0100)
committerWalfred Tedeschi <walfred.tedeschi@intel.com>
Fri, 27 Jan 2017 14:20:14 +0000 (15:20 +0100)
commit2735833d5fb220983d09770087b573fed5bf93cd
tree210904b66d8b1bca39f01637c08c0d3f7ec2eda0
parent8884e97e78f337bccb50df7682333db4e7ee1542
amd64-linux: expose system register FS_BASE and GS_BASE for Linux.

This patch allows examination of the registers FS_BASE and GS_BASE
for Linux Systems running on 64bit. Tests for simple read and write
of the new registers is also added with this patch.

2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>
    Richard Henderson  <rth@redhat.com>

gdb/ChangeLog:

* amd64-linux-nat.c (PTRACE_ARCH_PRCTL): New define.
(amd64_linux_fetch_inferior_registers): Add case to fetch FS_BASE
GS_BASE for older kernels.
(amd64_linux_store_inferior_registers): Add case to store FS_BASE
GS_BASE for older kernels.
* amd64-linux-tdep.c (amd64_linux_gregset_reg_offset): Add FS_BASE
and GS_BASE to the offset table.
(amd64_linux_register_reggroup_p): Add FS_BASE and GS_BASE to the
system register group.
* amd64-nat.c (amd64_native_gregset_reg_offset): Implements case
for older kernels.
* amd64-tdep.c (amd64_init_abi): Add segment registers for the
amd64 ABI.
* amd64-tdep.h (amd64_regnum): Add AMD64_FSBASE_REGNUM and
AMD64_GSBASE_REGNUM.
(AMD64_NUM_REGS): Set to AMD64_GSBASE_REGNUM + 1.
* features/Makefile (amd64-linux.dat, amd64-avx-linux.dat)
(amd64-mpx-linux.dat, amd64-avx512-linux.dat, x32-linux.dat)
(x32-avx-linux.dat, x32-avx512-linux.dat): Add
i386/64bit-segments.xml in those rules.
* features/i386/64bit-segments.xml: New file.
* features/i386/amd64-avx-mpx-linux.xml: Add 64bit-segments.xml.
* features/i386/amd64-avx-linux.xml: Add 64bit-segments.xml.
* features/i386/amd64-avx512-linux.xml: Add 64bit-segments.xml.
* features/i386/amd64-mpx-linux.xml: Add 64bit-segments.xml.
* features/i386/x32-avx512-linux.xml: Add 64bit-segments.xml.
* features/i386/x32-avx-linux.xml: Add 64bit-segments.xml.
* features/i386/amd64-linux.xml: Add 64bit-segments.xml.
* features/i386/amd64-avx-linux.c: Regenerated.
* features/i386/amd64-avx-mpx-linux.c: Regenerated.
* features/i386/amd64-avx-mpx.c: Regenerated.
* features/i386/amd64-avx512-linux.c: Regenerated.
* features/i386/amd64-linux.c: Regenerated.
* features/i386/amd64-mpx-linux.c: Regenerated.
* features/i386/i386-avx-mpx-linux.c: Regenerated.
* features/i386/i386-avx-mpx.c: Regenerated.
* features/i386/x32-avx-linux.c: Regenerated.
* features/i386/x32-avx512-linux.c: Regenerated.
* regformats/i386/amd64-avx-linux.dat: Regenerated.
* regformats/i386/amd64-avx-mpx-linux.dat: Regenerated.
* regformats/i386/amd64-avx512-linux.dat: Regenerated.
* regformats/i386/amd64-linux.dat: Regenerated.
* regformats/i386/amd64-mpx-linux.dat: Regenerated.
* regformats/i386/x32-avx-linux.dat: Regenerated.
* regformats/i386/x32-avx512-linux.dat: Regenerated.
* regformats/i386/x32-linux.dat: Regenerated.

gdb/doc/ChangeLog:

* gdb.texinfo (i386 Features): Add system segment registers
as feature.

gdb/gdbserver/ChangeLog:

* linux-x86-low.c (x86_64_regmap): Add fs_base and gs_base
to the register table.
(x86_fill_gregset): Add support for old kernels for the
fs_base and gs_base system registers.
(x86_store_gregset): Likewise.
* configure.srv (srv_i386_64bit_xmlfiles): Add 64bit-segments.xml.

gdb/testsuite/ChangeLog:

* gdb.arch/amd64-gs_base.c: New file.
* gdb.arch/amd64-gs_base.exp: New file.

Change-Id: I2e0eeb93058a2320d4d3b045082643cfe4aff963
Signed-off-by: Walfred Tedeschi <walfred.tedeschi@intel.com>
39 files changed:
gdb/ChangeLog
gdb/amd64-linux-nat.c
gdb/amd64-linux-tdep.c
gdb/amd64-nat.c
gdb/amd64-tdep.c
gdb/amd64-tdep.h
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/features/Makefile
gdb/features/i386/64bit-segments.xml [new file with mode: 0644]
gdb/features/i386/amd64-avx-linux.c
gdb/features/i386/amd64-avx-linux.xml
gdb/features/i386/amd64-avx-mpx-linux.c
gdb/features/i386/amd64-avx-mpx-linux.xml
gdb/features/i386/amd64-avx512-linux.c
gdb/features/i386/amd64-avx512-linux.xml
gdb/features/i386/amd64-linux.c
gdb/features/i386/amd64-linux.xml
gdb/features/i386/amd64-mpx-linux.c
gdb/features/i386/amd64-mpx-linux.xml
gdb/features/i386/x32-avx-linux.c
gdb/features/i386/x32-avx-linux.xml
gdb/features/i386/x32-avx512-linux.c
gdb/features/i386/x32-avx512-linux.xml
gdb/features/i386/x32-linux.c
gdb/features/i386/x32-linux.xml
gdb/gdbserver/configure.srv
gdb/gdbserver/linux-x86-low.c
gdb/regformats/i386/amd64-avx-linux.dat
gdb/regformats/i386/amd64-avx-mpx-linux.dat
gdb/regformats/i386/amd64-avx512-linux.dat
gdb/regformats/i386/amd64-linux.dat
gdb/regformats/i386/amd64-mpx-linux.dat
gdb/regformats/i386/x32-avx-linux.dat
gdb/regformats/i386/x32-avx512-linux.dat
gdb/regformats/i386/x32-linux.dat
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/amd64-gs_base.c [new file with mode: 0644]
gdb/testsuite/gdb.arch/amd64-gs_base.exp [new file with mode: 0644]