]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/i386-linux-tdep.h
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdb / i386-linux-tdep.h
CommitLineData
0542c381
AC
1/* Target-dependent code for GNU/Linux x86.
2
1d506c26 3 Copyright (C) 2002-2024 Free Software Foundation, Inc.
8201327c
MK
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
8201327c
MK
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
8201327c
MK
19
20#ifndef I386_LINUX_TDEP_H
21#define I386_LINUX_TDEP_H
22
b42405a1
JB
23#include "gdbsupport/x86-xstate.h"
24
8201327c
MK
25/* The Linux kernel pretends there is an additional "orig_eax"
26 register. Since GDB needs access to that register to be able to
27 properly restart system calls when necessary (see
28 i386-linux-tdep.c) we need our own versions of a number of
29 functions that deal with GDB's register cache. */
30
31/* Register number for the "orig_eax" pseudo-register. If this
32 pseudo-register contains a value >= 0 it is interpreted as the
33 system call number that the kernel is supposed to restart. */
51547df6 34#define I386_LINUX_ORIG_EAX_REGNUM (I386_PKRU_REGNUM + 1)
8201327c 35
60fac5b8
MK
36/* Total number of registers for GNU/Linux. */
37#define I386_LINUX_NUM_REGS (I386_LINUX_ORIG_EAX_REGNUM + 1)
38
b42405a1
JB
39/* Read the XSAVE extended state xcr0 value from the ABFD core file.
40 If it appears to be valid, return it and fill LAYOUT with values
41 inferred from that value.
42
43 Otherwise, return 0 to indicate no state was found and leave LAYOUT
44 untouched. */
45extern uint64_t i386_linux_core_read_xsave_info (bfd *abfd,
46 x86_xsave_layout &layout);
47
48/* Implement the core_read_x86_xsave_layout gdbarch method. */
49extern bool i386_linux_core_read_x86_xsave_layout (struct gdbarch *gdbarch,
50 x86_xsave_layout &layout);
c131fcee 51
012b3a21
WT
52/* Handle and display information related to the MPX bound violation
53 to the user. */
77bdfeb2
JB
54extern void i386_linux_report_signal_info (struct gdbarch *gdbarch,
55 struct ui_out *uiout,
56 enum gdb_signal siggnal);
012b3a21 57
35b4818d
YQ
58/* Return the target description according to XCR0. */
59extern const struct target_desc *i386_linux_read_description (uint64_t xcr0);
c131fcee
L
60
61/* Format of XSAVE extended state is:
24b21115 62 struct
c131fcee
L
63 {
64 fxsave_bytes[0..463]
65 sw_usable_bytes[464..511]
66 xstate_hdr_bytes[512..575]
b42405a1 67 extended state regions (AVX, MPX, AVX512, PKRU, etc.)
c131fcee
L
68 };
69
70 Same memory layout will be used for the coredump NT_X86_XSTATE
71 representing the XSAVE extended state registers.
72
73 The first 8 bytes of the sw_usable_bytes[464..467] is the OS enabled
74 extended state mask, which is the same as the extended control register
75 0 (the XFEATURE_ENABLED_MASK register), XCR0. We can use this mask
76 together with the mask saved in the xstate_hdr_bytes to determine what
77 states the processor/OS supports and what state, used or initialized,
78 the process/thread is in. */
79#define I386_LINUX_XSAVE_XCR0_OFFSET 464
90884b2b 80
be0d2954
L
81extern int i386_linux_gregset_reg_offset[];
82
190b495d
WT
83/* Return x86 siginfo type. */
84extern struct type *x86_linux_get_siginfo_type (struct gdbarch *gdbarch);
85
8201327c 86#endif /* i386-linux-tdep.h */