Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Nov 2003 01:25:19 -0800 (PST)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/ia64/ia64 machdep.c syscall.S
Message-ID:  <200311110925.hAB9PJK5021905@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
marcel      2003/11/11 01:25:19 PST

  FreeBSD src repository

  Modified files:
    sys/ia64/ia64        machdep.c syscall.S 
  Log:
  Fix a nasty bug that got exposed when the sendsig() and sigreturn()
  functions switched to using {g|s}et_mcontext(). The problem is that
  sigreturn(), being a syscall, can be given an async. context (i.e.
  one corresponding to an interrupt or trap). When this happens, we
  try to return to user mode via epc_syscall_return with a trapframe
  that can only be used to return to user mode via exception_restore.
  
  To fix this, we check the frame's flags immediately prior to
  epc_syscall_return and branch to exception_restore for non-syscall
  frames. Modify the assertion in set_mcontext() to check that if
  there's a mismatch, it's because of sigreturn().
  
  Revision  Changes    Path
  1.167     +10 -1     src/sys/ia64/ia64/machdep.c
  1.11      +16 -3     src/sys/ia64/ia64/syscall.S



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200311110925.hAB9PJK5021905>