alpha-linux-user: Fix sigaction

Unconditional bswap replaced by __get_user/__put_user.

Signed-off-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
Richard Henderson 2013-01-04 16:39:32 -08:00 committed by Blue Swirl
parent 658f2dc970
commit d2565875ec
2 changed files with 9 additions and 15 deletions

View File

@ -607,28 +607,22 @@ int do_sigaction(int sig, const struct target_sigaction *act,
sig, act, oact);
#endif
if (oact) {
oact->_sa_handler = tswapal(k->_sa_handler);
#if defined(TARGET_MIPS) || defined (TARGET_ALPHA)
oact->sa_flags = bswap32(k->sa_flags);
#else
oact->sa_flags = tswapal(k->sa_flags);
#endif
__put_user(k->_sa_handler, &oact->_sa_handler);
__put_user(k->sa_flags, &oact->sa_flags);
#if !defined(TARGET_MIPS)
oact->sa_restorer = tswapal(k->sa_restorer);
__put_user(k->sa_restorer, &oact->sa_restorer);
#endif
/* Not swapped. */
oact->sa_mask = k->sa_mask;
}
if (act) {
/* FIXME: This is not threadsafe. */
k->_sa_handler = tswapal(act->_sa_handler);
#if defined(TARGET_MIPS) || defined (TARGET_ALPHA)
k->sa_flags = bswap32(act->sa_flags);
#else
k->sa_flags = tswapal(act->sa_flags);
#endif
__get_user(k->_sa_handler, &act->_sa_handler);
__get_user(k->sa_flags, &act->sa_flags);
#if !defined(TARGET_MIPS)
k->sa_restorer = tswapal(act->sa_restorer);
__get_user(k->sa_restorer, &act->sa_restorer);
#endif
/* To be swapped in target_to_host_sigset. */
k->sa_mask = act->sa_mask;
/* we update the host linux signal state */

View File

@ -544,7 +544,7 @@ int do_sigaction(int sig, const struct target_sigaction *act,
struct target_old_sigaction {
abi_ulong _sa_handler;
abi_ulong sa_mask;
abi_ulong sa_flags;
int32_t sa_flags;
};
struct target_rt_sigaction {