This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] userspace mcontext_t doesn't match what kernel returns


On Sun, Sep 15, 2002 at 03:16:13PM -0400, Daniel Jacobowitz wrote:

> > I choose to fix the kernel instead which will keep as closer to the MIPS
> > ABI and also prevent having to recompile zillions of user apps.  Below my
> > working version of <asm/ucontext.h>.
> 
> What are the gregset_t/fpregset_t types in your working tree?  There
> aren't any definitions of them in the only copy of the MIPS code that I
> have here, and they've had various bad definitions in glibc until
> recently.  They also recently changed...

By the time I sent my previous mail I didn't yet have any.  Below the
changes I've made to libc but the kernel changes are identical.

> [Although I think your kernel change is the right way to go, here. 
> Just being cautious.]

I'm not yet finished.  The libc definitions for gregset_t and fpregset_t
are not what they're expected to be (coincidentally I got a related bug
report just a few days ago, so that issue is also itching a bit ...) and
I'd like to change them to as below.

This is a binary incompatible change but since so far just one person has
complained about the non-matching definitions of struct ucontext, it seems
there are very few users of the affected data type?

/* Type for general register.  */
typedef unsigned long int greg_t;

/* Number of general registers.  */
#define NGREG	36

typedef greg_t gregset_t[NGREG];

/* Container for all FPU registers.  */
typedef struct fpregset {
	union {
		double		fp_dregs[16];
		float		fp_fregs[32];
		unsigned int	fp_regs[32];
	} fp_r;
	unsigned int	fp_csr;
	unsigned int	fp_pad;
} fpregset_t;

/* Context to describe whole processor state.  */
typedef struct
  {
    gregset_t gregs;
    fpregset_t fpregs;
  } mcontext_t;

/* Userlevel context.  */
typedef struct ucontext
  {
    unsigned long int uc_flags;
    struct ucontext *uc_link;
    stack_t uc_stack;
    mcontext_t uc_mcontext;
    __sigset_t uc_sigmask;
  } ucontext_t;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]