aboutsummaryrefslogtreecommitdiff
path: root/gdb/nat/x86-linux-tdesc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/nat/x86-linux-tdesc.c')
-rw-r--r--gdb/nat/x86-linux-tdesc.c124
1 files changed, 0 insertions, 124 deletions
diff --git a/gdb/nat/x86-linux-tdesc.c b/gdb/nat/x86-linux-tdesc.c
deleted file mode 100644
index be7014d..0000000
--- a/gdb/nat/x86-linux-tdesc.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Target description related code for GNU/Linux x86 (i386 and x86-64).
-
- Copyright (C) 2024 Free Software Foundation, Inc.
-
- This file is part of GDB.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-#include "gdbsupport/common-defs.h"
-#include "nat/x86-linux-tdesc.h"
-#ifdef __x86_64__
-#include "arch/amd64.h"
-#endif
-#include "arch/i386.h"
-
-#include "gdbsupport/common-defs.h"
-#include "nat/x86-linux.h"
-#include "nat/x86-linux-dregs.h"
-#include "nat/gdb_ptrace.h"
-#include "nat/x86-xstate.h"
-#include "nat/x86-linux-tdesc.h"
-
-#include <cstdint>
-#include <cstdlib>
-#include <linux/uio.h>
-#include <elf.h>
-#include <sys/user.h>
-#include <sys/user.h>
-
-/* See nat/x86-linux-tdesc.h. */
-
-const target_desc *
-x86_linux_tdesc_for_tid (int tid, enum tribool *have_ptrace_getregset,
- gdb::function_view<void (uint64_t)> xcr0_init_cb,
- const char *error_msg, uint64_t *xcr0_storage)
-{
-#ifdef __x86_64__
-
- x86_linux_arch_size arch_size = x86_linux_ptrace_get_arch_size (tid);
- bool is_64bit = arch_size.is_64bit ();
- bool is_x32 = arch_size.is_x32 ();
-
- if (sizeof (void *) == 4 && is_64bit && !is_x32)
- error ("%s", error_msg);
-
-#elif HAVE_PTRACE_GETFPXREGS
- if (have_ptrace_getfpxregs == -1)
- {
- elf_fpxregset_t fpxregs;
-
- if (ptrace (PTRACE_GETFPXREGS, tid, 0, (int) &fpxregs) < 0)
- {
- have_ptrace_getfpxregs = 0;
- *have_ptrace_getregset = TRIBOOL_FALSE;
- return i386_linux_read_description (X86_XSTATE_X87_MASK);
- }
- }
-#endif
-
- if (*have_ptrace_getregset == TRIBOOL_UNKNOWN)
- {
- uint64_t xstateregs[(X86_XSTATE_SSE_SIZE / sizeof (uint64_t))];
- struct iovec iov;
-
- iov.iov_base = xstateregs;
- iov.iov_len = sizeof (xstateregs);
-
- /* Check if PTRACE_GETREGSET works. */
- if (ptrace (PTRACE_GETREGSET, tid,
- (unsigned int) NT_X86_XSTATE, &iov) < 0)
- {
- *have_ptrace_getregset = TRIBOOL_FALSE;
- *xcr0_storage = 0;
- }
- else
- {
- *have_ptrace_getregset = TRIBOOL_TRUE;
-
- /* Get XCR0 from XSAVE extended state. */
- *xcr0_storage = xstateregs[(I386_LINUX_XSAVE_XCR0_OFFSET
- / sizeof (uint64_t))];
-
-#ifdef __x86_64__
- /* No MPX on x32. */
- if (is_64bit && is_x32)
- *xcr0_storage &= ~X86_XSTATE_MPX;
-#endif /* __x86_64__ */
-
- xcr0_init_cb (*xcr0_storage);
- }
- }
-
- /* Check the native XCR0 only if PTRACE_GETREGSET is available. If
- PTRACE_GETREGSET is not available then set xcr0_features_bits to
- zero so that the "no-features" descriptions are returned by the
- switches below. */
- uint64_t xcr0_features_bits;
- if (*have_ptrace_getregset == TRIBOOL_TRUE)
- xcr0_features_bits = *xcr0_storage & X86_XSTATE_ALL_MASK;
- else
- xcr0_features_bits = 0;
-
-#ifdef __x86_64__
- if (is_64bit)
- {
- return amd64_linux_read_description (xcr0_features_bits, is_x32);
- }
- else
-#endif
- return i386_linux_read_description (xcr0_features_bits);
-
- gdb_assert_not_reached ("failed to return tdesc");
-}