| Index: bfd/hosts/x86-64linux.h
|
| diff --git a/bfd/hosts/x86-64linux.h b/bfd/hosts/x86-64linux.h
|
| index 4ffc3f26ad3f959fd492a28739706fb26e1c7619..78be09afa0c40af74f3485eb1118fbd3504e0438 100644
|
| --- a/bfd/hosts/x86-64linux.h
|
| +++ b/bfd/hosts/x86-64linux.h
|
| @@ -1,4 +1,4 @@
|
| -/* Copyright (C) 2006, 2011
|
| +/* Copyright (C) 2006, 2011, 2012
|
| Free Software Foundation, Inc.
|
| This file is part of the GNU C Library.
|
|
|
| @@ -40,6 +40,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 +74,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 +115,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 +131,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 +169,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 +206,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 +228,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;
|
|
|