linux-mips
[Top] [All Lists]

Re: Question about signal syscalls !

To: Franck Bui-Huu <vagabon.xyz@gmail.com>
Subject: Re: Question about signal syscalls !
From: David Daney <ddaney@avtrex.com>
Date: Thu, 01 Feb 2007 09:01:50 -0800
Cc: Ralf Baechle <ralf@linux-mips.org>, linux-mips <linux-mips@linux-mips.org>
In-reply-to: <cda58cb80702010654w74527a34k4ed229b499b8f9b2@mail.gmail.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <cda58cb80702010243y4a36026i6945f2a5cd3791d0@mail.gmail.com> <20070201135734.GB12728@linux-mips.org> <cda58cb80702010654w74527a34k4ed229b499b8f9b2@mail.gmail.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Thunderbird 1.5.0.9 (X11/20061219)
Franck Bui-Huu wrote:
Hi Ralf,

On 2/1/07, Ralf Baechle <ralf@linux-mips.org> wrote:
The values of those registers need to be preserved so they can later be
copied into the signal frame.


Let's take for example sys_sigreturn(). In my understanding this
syscall is used automatically when the signal handler returns. At this
time, I don't see the point to save the static registers since they
have been already saved by setup_sigcontext().

Actually I don't see why they need to be saved/restored at all...

Let's say that process P1 sends a signal X to process P2 which has a
handler defined for signal X and assume that the static registers are
not saved at all.

Signal X is received by P2. The signal handler is now executed in user
mode. At this point what are the values of the static registers ? I
would say they have the same values (let's call this state S) when P2
got interrupted. Once the signal handler returns into the kernel mode
by executing 'syscall __NR_sigreturn' instructions, static registers
still have state S and this state is normally preserved during
sys_sigreturn syscall execution. So when resuming the normal execution
of P2, the static registers have the correct values.

What am I missing ?

I don't think *any* registers *need* to be saved on sys_sigreturn(). The values in sigcontext on the user stack associated with the system call are all used instead of the actual register values.

David Daney

<Prev in Thread] Current Thread [Next in Thread>