|
From: <sv...@va...> - 2006-01-03 04:10:22
|
Author: sewardj
Date: 2006-01-03 04:10:13 +0000 (Tue, 03 Jan 2006)
New Revision: 5485
Log:
Signal-related syscall support.
Modified:
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2006-01-03 04:09:27 U=
TC (rev 5484)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2006-01-03 04:10:13 U=
TC (rev 5485)
@@ -422,7 +422,7 @@
//zz DECL_TEMPLATE(ppc64_linux, sys_ipc);
DECL_TEMPLATE(ppc64_linux, sys_clone);
//zz DECL_TEMPLATE(ppc64_linux, sys_sigreturn);
-//zz DECL_TEMPLATE(ppc64_linux, sys_rt_sigreturn);
+DECL_TEMPLATE(ppc64_linux, sys_rt_sigreturn);
//zz DECL_TEMPLATE(ppc64_linux, sys_sigaction);
=20
PRE(sys_socketcall)
@@ -1051,42 +1051,42 @@
//zz /* Check to see if some any signals arose as a result of this. *=
/
//zz *flags |=3D SfPollAfter;
//zz }
-//zz=20
-//zz PRE(sys_rt_sigreturn)
-//zz {
-//zz ThreadState* tst;
-//zz PRINT("rt_sigreturn ( )");
-//zz=20
-//zz vg_assert(VG_(is_valid_tid)(tid));
-//zz vg_assert(tid >=3D 1 && tid < VG_N_THREADS);
-//zz vg_assert(VG_(is_running_thread)(tid));
-//zz=20
-//zz ///* Adjust esp to point to start of frame; skip back up over ha=
ndler
-//zz // ret addr */
-//zz tst =3D VG_(get_ThreadState)(tid);
-//zz //tst->arch.vex.guest_ESP -=3D sizeof(Addr);
-//zz // Should we do something equivalent on ppc64? Who knows.
-//zz=20
-//zz ///* This is only so that the EIP is (might be) useful to report=
if
-//zz // something goes wrong in the sigreturn */
-//zz //ML_(fixup_guest_state_to_restart_syscall)(&tst->arch);
-//zz // Should we do something equivalent on ppc64? Who knows.
-//zz=20
-//zz VG_(sigframe_destroy)(tid, True);
-//zz=20
-//zz /* See comments above in PRE(sys_sigreturn) about this. */
-//zz SET_STATUS_from_SysRes_NO_SANITY_CHECK(
-//zz VG_(mk_SysRes_ppc64_linux)(=20
-//zz tst->arch.vex.guest_GPR3,
-//zz /* get CR0.SO */
-//zz (LibVEX_GuestPPC32_get_CR( &tst->arch.vex ) >> 28) & 1
-//zz )
-//zz );
-//zz=20
-//zz /* Check to see if some any signals arose as a result of this. *=
/
-//zz *flags |=3D SfPollAfter;
-//zz }
-//zz=20
+
+PRE(sys_rt_sigreturn)
+{
+ ThreadState* tst;
+ PRINT("rt_sigreturn ( )");
+
+ vg_assert(VG_(is_valid_tid)(tid));
+ vg_assert(tid >=3D 1 && tid < VG_N_THREADS);
+ vg_assert(VG_(is_running_thread)(tid));
+
+ ///* Adjust esp to point to start of frame; skip back up over handler
+ // ret addr */
+ tst =3D VG_(get_ThreadState)(tid);
+ //tst->arch.vex.guest_ESP -=3D sizeof(Addr);
+ // Should we do something equivalent on ppc64? Who knows.
+
+ ///* This is only so that the EIP is (might be) useful to report if
+ // something goes wrong in the sigreturn */
+ //ML_(fixup_guest_state_to_restart_syscall)(&tst->arch);
+ // Should we do something equivalent on ppc64? Who knows.
+
+ VG_(sigframe_destroy)(tid, True);
+
+ /* See comments above in PRE(sys_sigreturn) about this. */
+ SET_STATUS_from_SysRes_NO_SANITY_CHECK(
+ VG_(mk_SysRes_ppc64_linux)(=20
+ tst->arch.vex.guest_GPR3,
+ /* get CR0.SO */
+ (LibVEX_GuestPPC64_get_CR( &tst->arch.vex ) >> 28) & 1
+ )
+ );
+
+ /* Check to see if some any signals arose as a result of this. */
+ *flags |=3D SfPollAfter;
+}
+
//zz /* Convert from non-RT to RT sigset_t's */
//zz static=20
//zz void convert_sigset_to_rt(const vki_old_sigset_t *oldset, vki_sigse=
t_t *set)
@@ -1188,7 +1188,7 @@
=20
GENX_(__NR_unlink, sys_unlink), // 10
GENX_(__NR_execve, sys_execve), // 11
-// _____(__NR_chdir, sys_chdir), // 12
+ GENX_(__NR_chdir, sys_chdir), // 12
// _____(__NR_time, sys_time), // 13
// _____(__NR_mknod, sys_mknod), // 14
=20
@@ -1380,7 +1380,7 @@
=20
// _____(__NR_getresgid, sys_getresgid), // 170
// _____(__NR_prctl, sys_prctl), // 171
-// _____(__NR_rt_sigreturn, sys_rt_sigreturn), // 172
+ PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 172
LINXY(__NR_rt_sigaction, sys_rt_sigaction), // 173
LINXY(__NR_rt_sigprocmask, sys_rt_sigprocmask), // 174
=20
@@ -1400,7 +1400,7 @@
// _____(__NR_sendfile, sys_sendfile), // 186
// _____(__NR_getpmsg, sys_getpmsg), // 187
// _____(__NR_putpmsg, sys_putpmsg), // 188
-// _____(__NR_vfork, sys_vfork), // 189
+ GENX_(__NR_vfork, sys_fork), // 189 treat a=
s fork
=20
GENXY(__NR_ugetrlimit, sys_getrlimit), // 190
// _____(__NR_readahead, sys_readahead), // 191
|