Home | History | Annotate | Line # | Download | only in arch
      1 /* Target description related code for GNU/Linux x86 (i386 and x86-64).
      2 
      3    Copyright (C) 2024 Free Software Foundation, Inc.
      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
      9    the Free Software Foundation; either version 3 of the License, or
     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
     18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19 
     20 #ifndef GDB_ARCH_X86_LINUX_TDESC_FEATURES_H
     21 #define GDB_ARCH_X86_LINUX_TDESC_FEATURES_H
     22 
     23 #include "gdbsupport/x86-xstate.h"
     24 #include "gdbsupport/gdb_assert.h"
     25 
     26 /* Return a mask of X86_STATE_* feature flags.  The returned mask indicates
     27    the set of features which are checked for when creating the target
     28    description for each of amd64, x32, and i386.  */
     29 
     30 extern uint64_t x86_linux_amd64_xcr0_feature_mask ();
     31 extern uint64_t x86_linux_x32_xcr0_feature_mask ();
     32 extern uint64_t x86_linux_i386_xcr0_feature_mask ();
     33 
     34 #ifdef GDBSERVER
     35 
     36 /* Convert an xcr0 value into an integer.  The integer will be passed from
     37    gdbserver to the in-process-agent where it will then be passed through
     38    x86_linux_tdesc_idx_to_xcr0 to get back the original xcr0 value.  */
     39 
     40 extern int x86_linux_xcr0_to_tdesc_idx (uint64_t xcr0);
     41 
     42 #endif /* GDBSERVER */
     43 
     44 #ifdef IN_PROCESS_AGENT
     45 
     46 /* Return the maximum possible number of target descriptions for each of
     47    amd64, x32, and i386.  These are used by the in-process-agent to
     48    generate every possible target description.  */
     49 
     50 extern int x86_linux_amd64_tdesc_count ();
     51 extern int x86_linux_x32_tdesc_count ();
     52 extern int x86_linux_i386_tdesc_count ();
     53 
     54 /* Convert an index number (as returned from x86_linux_xcr0_to_tdesc_idx)
     55    into an xcr0 value which can then be used to create a target
     56    description.  */
     57 
     58 extern uint64_t x86_linux_tdesc_idx_to_xcr0 (int idx);
     59 
     60 #endif /* IN_PROCESS_AGENT */
     61 
     62 #endif /* GDB_ARCH_X86_LINUX_TDESC_FEATURES_H */
     63