This is the mail archive of the 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: Proposed change to ppc32 ucontext_t

Paul Mackerras <> writes:

> Since we made the change to the ucontext_t on ppc32 to expand it to
> include space for all of the registers, I have received some bug
> reports about the change having broken source compatibility.  In
> particular some programs were using ucp->uc_mcontext.regs to get at
> the register values in a SIGSEGV handler.

Many programs built with GCC can do this.  The code looks like:

    else if (*(unsigned int *) (pc_+0) == 0x38006666                    \
             || *(unsigned int *) (pc_+0) == 0x380000AC)                \
      {                                                                 \
        struct rt_sigframe {                                            \
          char gap[SIGNAL_FRAMESIZE];                                   \
          unsigned long _unused[2];                                     \
          struct siginfo *pinfo;                                        \
          void *puc;                                                    \
          struct siginfo info;                                          \
          struct kernel_old_ucontext uc;                                \
        } *rt_ = (CONTEXT)->cfa;                                        \
        sc_ = &rt_->uc.uc_mcontext;                                     \
      }                                                                 \
    new_cfa_ = sc_->regs->gpr[STACK_POINTER_REGNUM];                    \
[more uses of sc_->regs]

This code will be used in applications that throw exceptions from
signal handlers, most notably anything using the gcj runtime.  You can
find it in the GCC source tree in gcc/config/rs6000/linux.h.

- Geoffrey Keating <>

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