Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ddc4f093 authored by Christopher Ferris's avatar Christopher Ferris
Browse files

Fix the ucontext for mips/x86.

Remove the mips ucontext definition, there is no need for it any more.

Fix the mips/x86 ucontext copy code to copy the entire uc_mcontext data
across.

Fix a potential memory leak too.

Change-Id: I4272022da5281ed881e2d59a3e19e7f33c01aceb
parent 491ecd0b
Loading
Loading
Loading
Loading
+4 −15
Original line number Diff line number Diff line
@@ -40,17 +40,11 @@
    struct sigcontext uc_mcontext;
    uint32_t uc_sigmask;
  } ucontext_t;
#elif defined(__mips__)
  typedef struct ucontext {
    uint32_t sp;
    uint32_t ra;
    uint32_t pc;
  } ucontext_t;
#elif defined(__i386__)
  #include <asm/sigcontext.h>
  #include <asm/ucontext.h>
  typedef struct ucontext ucontext_t;
#else
#elif !defined(__mips__)
  #error Unsupported architecture.
#endif

@@ -93,6 +87,7 @@ bool UnwindCurrent::UnwindFromContext(size_t num_ignore_frames, bool resolve) {
  int ret = unw_init_local(cursor, &context_);
  if (ret < 0) {
    BACK_LOGW("unw_init_local failed %d", ret);
    delete cursor;
    return false;
  }

@@ -172,14 +167,8 @@ void UnwindCurrent::ExtractContext(void* sigcontext) {
  context->regs[13] = uc->uc_mcontext.arm_sp;
  context->regs[14] = uc->uc_mcontext.arm_lr;
  context->regs[15] = uc->uc_mcontext.arm_pc;
#elif defined(__mips__)
  context->uc_mcontext.sp = uc->sp;
  context->uc_mcontext.pc = uc->pc;
  context->uc_mcontext.ra = uc->ra;
#elif defined(__i386__)
  context->uc_mcontext.gregs[REG_EBP] = uc->uc_mcontext.gregs[REG_EBP];
  context->uc_mcontext.gregs[REG_ESP] = uc->uc_mcontext.gregs[REG_ESP];
  context->uc_mcontext.gregs[REG_EIP] = uc->uc_mcontext.gregs[REG_EIP];
#elif defined(__mips__) || defined(__i386__)
  context->uc_mcontext = uc->uc_mcontext;
#endif
}