hurd: Drop REG_GSFS and REG_ESDS from x86_64's ucontext

These are useless on x86_64, and __NGREG was actually wrong with them.
This commit is contained in:
Samuel Thibault 2023-09-28 00:07:18 +02:00
parent 964d15a007
commit 29d4591b07
4 changed files with 8 additions and 16 deletions

View File

@ -79,8 +79,8 @@ static void fill_ucontext (ucontext_t *uc, const struct sigcontext *sc)
/* Registers. */ /* Registers. */
#ifdef __x86_64__ #ifdef __x86_64__
memcpy (&uc->uc_mcontext.gregs[REG_GSFS], &sc->sc_gs, memcpy (&uc->uc_mcontext.gregs[REG_R8], &sc->sc_r8,
(REG_ERR - REG_GSFS) * sizeof (long)); (REG_ERR - REG_R8) * sizeof (long));
#else #else
memcpy (&uc->uc_mcontext.gregs[REG_GS], &sc->sc_gs, memcpy (&uc->uc_mcontext.gregs[REG_GS], &sc->sc_gs,
(REG_TRAPNO - REG_GS) * sizeof (int)); (REG_TRAPNO - REG_GS) * sizeof (int));

View File

@ -59,13 +59,7 @@ struct sigcontext
} }
trampoline.c knows this, so it must be changed if this changes. */ trampoline.c knows this, so it must be changed if this changes. */
#define sc_i386_thread_state sc_gs /* Beginning of correspondence. */ #define sc_i386_thread_state sc_r8 /* Beginning of correspondence. */
/* Segment registers. */
int sc_gs;
int sc_fs;
int sc_es;
int sc_ds;
long sc_r8; long sc_r8;
long sc_r9; long sc_r9;
long sc_r10; long sc_r10;

View File

@ -34,12 +34,13 @@
#define PC rip #define PC rip
#define SP ursp #define SP ursp
#define SYSRETURN rax #define SYSRETURN rax
#define MACHINE_THREAD_STATE_FIX_NEW(ts) do { \
asm ("mov %%cs, %w0" : "=q" ((ts)->cs)); \
} while(0)
#else #else
#define PC eip #define PC eip
#define SP uesp #define SP uesp
#define SYSRETURN eax #define SYSRETURN eax
#endif
#define MACHINE_THREAD_STATE_FIX_NEW(ts) do { \ #define MACHINE_THREAD_STATE_FIX_NEW(ts) do { \
asm ("mov %%cs, %w0" : "=q" ((ts)->cs)); \ asm ("mov %%cs, %w0" : "=q" ((ts)->cs)); \
asm ("mov %%ds, %w0" : "=q" ((ts)->ds)); \ asm ("mov %%ds, %w0" : "=q" ((ts)->ds)); \
@ -47,6 +48,7 @@
asm ("mov %%fs, %w0" : "=q" ((ts)->fs)); \ asm ("mov %%fs, %w0" : "=q" ((ts)->fs)); \
asm ("mov %%gs, %w0" : "=q" ((ts)->gs)); \ asm ("mov %%gs, %w0" : "=q" ((ts)->gs)); \
} while(0) } while(0)
#endif
struct machine_thread_all_state struct machine_thread_all_state
{ {

View File

@ -47,11 +47,7 @@ typedef greg_t gregset_t[__NGREG];
/* Number of each register in the `gregset_t' array. */ /* Number of each register in the `gregset_t' array. */
enum enum
{ {
REG_GSFS = 0, /* Actually int gs, fs. */ REG_R8 = 0,
# define REG_GSFS REG_GSFS
REG_ESDS, /* Actually int es, ds. */
# define REG_ESDS REG_ESDS
REG_R8,
# define REG_R8 REG_R8 # define REG_R8 REG_R8
REG_R9, REG_R9,
# define REG_R9 REG_R9 # define REG_R9 REG_R9