1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-05 19:35:52 +03:00

C-SKY: remove user_regs definition

C-SKY GDB dose not use this file for ptrace and coredump.  ptrace can use
pt_regs definition from linux kernel directly.  The old definition only
got 34 regs instead of 38 regs from linux kernel, which will corrupted
the memory after ptrace PTRACE_GETREGSET call.

	* sysdeps/unix/sysv/linux/csky/sys/procfs.h: Use linux definition
	directly.
	* sysdeps/unix/sysv/linux/csky/sys/user.h: Remove user_regs
	definition.
This commit is contained in:
Mao Han
2019-03-11 09:48:51 +08:00
parent 6229c9bff7
commit 827e30f3a3
3 changed files with 19 additions and 46 deletions

View File

@@ -1,3 +1,10 @@
2019-03-11 Mao Han <han_mao@c-sky.com>
* sysdeps/unix/sysv/linux/csky/sys/procfs.h: Use linux definition
directly.
* sysdeps/unix/sysv/linux/csky/sys/user.h: Remove user_regs
definition.
2019-03-11 Mao Han <han_mao@c-sky.com> 2019-03-11 Mao Han <han_mao@c-sky.com>
* sysdeps/unix/sysv/linux/csky/register-dump.h: Adjust offset change. * sysdeps/unix/sysv/linux/csky/register-dump.h: Adjust offset change.

View File

@@ -20,15 +20,18 @@
# error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead." # error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead."
#endif #endif
#include <asm/ptrace.h>
/* Type for a general-purpose register. */ /* Type for a general-purpose register. */
typedef unsigned long elf_greg_t; typedef unsigned long elf_greg_t;
/* Type for a floating-point registers. */
typedef unsigned long elf_fpreg_t;
/* And the whole bunch of them. We could have used `struct /* In gdb/bfd elf32-csky.c, csky_elf_grok_prstatus() use fixed size of
user_regs' directly in the typedef, but tradition says that elf_prstatus. It's 148 for abiv1 and 220 for abiv2, the size is enough
the register set is an array, which does have some peculiar for coredump and no need full sizeof (struct pt_regs). */
semantics, so leave it that way. */ #define ELF_NGREG ((sizeof (struct pt_regs) / sizeof (elf_greg_t)) - 2)
#define ELF_NGREG (sizeof (struct user_regs) / sizeof (elf_greg_t))
typedef elf_greg_t elf_gregset_t[ELF_NGREG]; typedef elf_greg_t elf_gregset_t[ELF_NGREG];
/* Register set for the floating-point registers. */ #define ELF_NFPREG (sizeof (struct user_fp) / sizeof (elf_fpreg_t))
typedef struct user_fpregs elf_fpregset_t; typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];

View File

@@ -1,4 +1,5 @@
/* ptrace register data format definitions. C-SKY version. /* This file is not used by C-SKY GDB. ptrace can use pt_regs definition
from linux kernel directly.
Copyright (C) 2018-2019 Free Software Foundation, Inc. Copyright (C) 2018-2019 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
@@ -19,42 +20,4 @@
#ifndef _SYS_USER_H #ifndef _SYS_USER_H
#define _SYS_USER_H 1 #define _SYS_USER_H 1
struct user_fpregs {
unsigned long fsr; /* FPU status reg. */
unsigned long fesr; /* FPU exception status reg. */
unsigned long fp[32]; /* FPU general regs. */
};
struct user_regs {
unsigned long int uregs[34]; /* CSKY V2 has 32 general rgister. */
};
/* When the kernel dumps core, it starts by dumping the user struct -
this will be used by gdb to figure out where the data and stack segments
are within the file, and what virtual addresses to use. */
struct user{
/* We start with the registers, to mimic the way that "memory" is returned
from the ptrace(3,...) function. */
struct user_regs regs; /* The registers are actually stored. */
int u_fpvalid; /* True if math co-processor being used. */
/* The rest of this junk is to help gdb figure out what goes where. */
unsigned long int u_tsize; /* Text segment size (pages). */
unsigned long int u_dsize; /* Data segment size (pages). */
unsigned long int u_ssize; /* Stack segment size (pages). */
unsigned long start_code; /* Starting virtual address of text. */
unsigned long start_stack; /* Starting virtual address of stack area.
This is actually the bottom of the stack
the top of the stack is always found in
the esp register. */
long int signal; /* Signal that caused the core dump. */
int reserved; /* No longer used. */
struct user_regs * u_ar0; /* Used by gdb to help find the values
for the registers. */
unsigned long magic; /* To uniquely identify a core file. */
char u_comm[32]; /* User command that was responsible. */
struct user_fpregs u_fp;
struct user_fpregs* u_fpstate; /* Math Co-processor pointer. */
};
#endif /* _SYS_USER_H */ #endif /* _SYS_USER_H */