]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - bfd/hosts/x86-64linux.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / bfd / hosts / x86-64linux.h
index 4ffc3f26ad3f959fd492a28739706fb26e1c7619..f828bcfc53922ab8acdebbf7a6de2422602a73c8 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (C) 2006, 2011
-   Free Software Foundation, Inc.
+/* Copyright (C) 2006-2021 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
 
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
 /* This is somewhat modelled after the file of the same name on SVR4
    systems.  It provides a definition of the core file format for ELF
@@ -40,6 +39,9 @@ typedef unsigned int uint32_t;
 typedef unsigned long long int uint64_t;
 #endif
 
+/* Unsigned 64-bit integer aligned to 8 bytes.  */
+typedef uint64_t __attribute__ ((__aligned__ (8))) a8_uint64_t;
+
 #undef HAVE_PRPSINFO32_T
 #define HAVE_PRPSINFO32_T
 #undef HAVE_PRPSINFO32_T_PR_PID
@@ -71,40 +73,40 @@ struct user_regs32_struct
   int32_t xss;
 };
 
-struct user_regsx32_struct
+struct user_regs64_struct
 {
-  uint64_t r15;
-  uint64_t r14;
-  uint64_t r13;
-  uint64_t r12;
-  uint64_t rbp;
-  uint64_t rbx;
-  uint64_t r11;
-  uint64_t r10;
-  uint64_t r9;
-  uint64_t r8;
-  uint64_t rax;
-  uint64_t rcx;
-  uint64_t rdx;
-  uint64_t rsi;
-  uint64_t rdi;
-  uint64_t orig_rax;
-  uint64_t rip;
-  uint64_t cs;
-  uint64_t eflags;
-  uint64_t rsp;
-  uint64_t ss;
-  uint64_t fs_base;
-  uint64_t gs_base;
-  uint64_t ds;
-  uint64_t es;
-  uint64_t fs;
-  uint64_t gs;
+  a8_uint64_t r15;
+  a8_uint64_t r14;
+  a8_uint64_t r13;
+  a8_uint64_t r12;
+  a8_uint64_t rbp;
+  a8_uint64_t rbx;
+  a8_uint64_t r11;
+  a8_uint64_t r10;
+  a8_uint64_t r9;
+  a8_uint64_t r8;
+  a8_uint64_t rax;
+  a8_uint64_t rcx;
+  a8_uint64_t rdx;
+  a8_uint64_t rsi;
+  a8_uint64_t rdi;
+  a8_uint64_t orig_rax;
+  a8_uint64_t rip;
+  a8_uint64_t cs;
+  a8_uint64_t eflags;
+  a8_uint64_t rsp;
+  a8_uint64_t ss;
+  a8_uint64_t fs_base;
+  a8_uint64_t gs_base;
+  a8_uint64_t ds;
+  a8_uint64_t es;
+  a8_uint64_t fs;
+  a8_uint64_t gs;
 };
 
 /* Type for a general-purpose register.  */
 typedef uint32_t elf_greg32_t;
-typedef uint64_t elf_gregx32_t;
+typedef a8_uint64_t elf_greg64_t;
 
 /* And the whole bunch of them.  We could have used `struct
    user_regs_struct' directly in the typedef, but tradition says that
@@ -112,8 +114,8 @@ typedef uint64_t elf_gregx32_t;
    semantics, so leave it that way.  */
 #define ELF_NGREG32 (sizeof (struct user_regs32_struct) / sizeof(elf_greg32_t))
 typedef elf_greg32_t elf_gregset32_t[ELF_NGREG32];
-#define ELF_NGREGX32 (sizeof (struct user_regsx32_struct) / sizeof(elf_gregx32_t))
-typedef elf_gregx32_t elf_gregsetx32_t[ELF_NGREGX32];
+#define ELF_NGREG64 (sizeof (struct user_regs64_struct) / sizeof(elf_greg64_t))
+typedef elf_greg64_t elf_gregset64_t[ELF_NGREG64];
 
 /* Definitions to generate Intel SVR4-like core files.  These mostly
    have the same names as the SVR4 types with "elf_" tacked on the
@@ -128,6 +130,12 @@ struct prstatus32_timeval
     int tv_usec;
   };
 
+struct prstatus64_timeval
+  {
+    a8_uint64_t tv_sec;
+    a8_uint64_t tv_usec;
+  };
+
 struct elf_prstatus32
   {
     struct elf_siginfo pr_info;                /* Info associated with signal.  */
@@ -160,7 +168,25 @@ struct elf_prstatusx32
     struct prstatus32_timeval pr_stime;                /* System time.  */
     struct prstatus32_timeval pr_cutime;       /* Cumulative user time.  */
     struct prstatus32_timeval pr_cstime;       /* Cumulative system time.  */
-    elf_gregsetx32_t pr_reg;           /* GP registers.  */
+    elf_gregset64_t pr_reg;            /* GP registers.  */
+    int pr_fpvalid;                    /* True if math copro being used.  */
+  };
+
+struct elf_prstatus64
+  {
+    struct elf_siginfo pr_info;        /* Info associated with signal.  */
+    short int pr_cursig;               /* Current signal.  */
+    a8_uint64_t pr_sigpend;            /* Set of pending signals.  */
+    a8_uint64_t pr_sighold;            /* Set of held signals.  */
+    pid_t pr_pid;
+    pid_t pr_ppid;
+    pid_t pr_pgrp;
+    pid_t pr_sid;
+    struct prstatus64_timeval pr_utime;                /* User time.  */
+    struct prstatus64_timeval pr_stime;                /* System time.  */
+    struct prstatus64_timeval pr_cutime;       /* Cumulative user time.  */
+    struct prstatus64_timeval pr_cstime;       /* Cumulative system time.  */
+    elf_gregset64_t pr_reg;            /* GP registers.  */
     int pr_fpvalid;                    /* True if math copro being used.  */
   };
 
@@ -179,6 +205,20 @@ struct elf_prpsinfo32
     char pr_psargs[ELF_PRARGSZ];       /* Initial part of arg list.  */
   };
 
+struct elf_prpsinfo64
+  {
+    char pr_state;                     /* Numeric process state.  */
+    char pr_sname;                     /* Char for pr_state.  */
+    char pr_zomb;                      /* Zombie.  */
+    char pr_nice;                      /* Nice val.  */
+    a8_uint64_t pr_flag;               /* Flags.  */
+    unsigned int pr_uid;
+    unsigned int pr_gid;
+    int pr_pid, pr_ppid, pr_pgrp, pr_sid;
+    /* Lots missing */
+    char pr_fname[16];                 /* Filename of executable.  */
+    char pr_psargs[ELF_PRARGSZ];       /* Initial part of arg list.  */
+  };
 
 /* The rest of this file provides the types for emulation of the
    Solaris <proc_service.h> interfaces that should be implemented by
@@ -187,4 +227,6 @@ struct elf_prpsinfo32
 /* Process status and info.  In the end we do provide typedefs for them.  */
 typedef struct elf_prstatus32 prstatus32_t;
 typedef struct elf_prstatusx32 prstatusx32_t;
+typedef struct elf_prstatus64 prstatus64_t;
 typedef struct elf_prpsinfo32 prpsinfo32_t;
+typedef struct elf_prpsinfo64 prpsinfo64_t;