From: liubo <liubo2009@cn.fujitsu.com>
To: ltp-list@lists.sourceforge.net
Subject: [LTP] [PATCH] syscalls: fix some failure on arch X86_64
Date: Tue, 10 Nov 2009 17:38:30 +0800 [thread overview]
Message-ID: <4AF93496.3030408@cn.fujitsu.com> (raw)
1) rt_sigaction
"sigaction" has the structure:
struct sigaction {
__sighandler_t sa_handler;
unsigned long sa_flags;
#ifdef SA_RESTORER
__sigrestore_t sa_restorer;
#endif
sigset_t sa_mask; /* mask last for extensibility */
};
However, on arch x86_64, if we directly get to call rt_sigaction,
the argument "sa_restorer" will not be fulfilled, and this will lead
to segment fault.
on arch x86_64, if sa_restorer is not set, kernel will lead to segment fault.
In other arch, if sa_restorer is not set, kernel can do the correct work.
To avoid this segment fault, we use glibc function
"int sigaction(...);" instead, which can fulfill the argument "sa_restorer".
2) rt_sigprocmask
This failure contains two aspects,
the first is the segment fault as described in 1),
the second is that testcase uses a unknown signal 33 for test,
and this will lead sigaction cannot bind signal 33 to the action.
So, we attempt to use a known signal instead, such as 34.
This patch fixed these failures.
Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com>
---
.../kernel/syscalls/rt_sigaction/rt_sigaction01.c | 4 ++++
.../syscalls/rt_sigprocmask/rt_sigprocmask01.c | 12 ++++++++----
.../syscalls/rt_sigsuspend/rt_sigsuspend01.c | 4 ++++
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c b/testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c
index 27af970..1522ac4 100644
--- a/testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c
+++ b/testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c
@@ -154,7 +154,11 @@ set_handler(int sig, int sig_to_mask, int mask_flags)
sa.sa_flags = mask_flags;
sigemptyset(&sa.sa_mask);
sigaddset(&sa.sa_mask, sig_to_mask);
+ #ifndef __x86_64__
TEST(syscall(__NR_rt_sigaction,sig, &sa, &oldaction,SIGSETSIZE));
+ #else
+ TEST(sigaction(sig, &sa, &oldaction));
+ #endif
if (TEST_RETURN == 0) {
return 0;
} else {
diff --git a/testcases/kernel/syscalls/rt_sigprocmask/rt_sigprocmask01.c b/testcases/kernel/syscalls/rt_sigprocmask/rt_sigprocmask01.c
index 6398a28..31258e9 100644
--- a/testcases/kernel/syscalls/rt_sigprocmask/rt_sigprocmask01.c
+++ b/testcases/kernel/syscalls/rt_sigprocmask/rt_sigprocmask01.c
@@ -154,7 +154,7 @@ int main(int ac, char **av) {
cleanup();
tst_exit();
}
- TEST(sigaddset(&set, 33));
+ TEST(sigaddset(&set, 34));
if(TEST_RETURN == -1){
tst_resm(TFAIL,"Call to sigaddset() Failed, errno=%d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
cleanup();
@@ -163,7 +163,11 @@ int main(int ac, char **av) {
/* call rt_sigaction() */
act.sa_handler = sig_handler;
- TEST(syscall(__NR_rt_sigaction, 33, &act, &oact, 8));
+ #ifndef __x86_64__
+ TEST(syscall(__NR_rt_sigaction, 34, &act, &oact, 8));
+ #else
+ TEST(sigaction(34, &act, &oact));
+ #endif
if(TEST_RETURN != 0){
tst_resm(TFAIL,"Call to rt_sigaction() Failed, errno=%d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
cleanup();
@@ -178,7 +182,7 @@ int main(int ac, char **av) {
}
else {
- TEST(kill(getpid(), 33));
+ TEST(kill(getpid(), 34));
if(TEST_RETURN != 0){
tst_resm(TFAIL,"Call to kill() Failed, errno=%d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
cleanup();
@@ -198,7 +202,7 @@ int main(int ac, char **av) {
cleanup();
tst_exit();
}
- TEST(sigismember(&oset, 33));
+ TEST(sigismember(&oset, 34));
if(TEST_RETURN == 0 ){
tst_resm(TFAIL,"call sigismember() Failed, errno=%d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
cleanup();
diff --git a/testcases/kernel/syscalls/rt_sigsuspend/rt_sigsuspend01.c b/testcases/kernel/syscalls/rt_sigsuspend/rt_sigsuspend01.c
index 416a7c9..6132622 100644
--- a/testcases/kernel/syscalls/rt_sigsuspend/rt_sigsuspend01.c
+++ b/testcases/kernel/syscalls/rt_sigsuspend/rt_sigsuspend01.c
@@ -142,7 +142,11 @@ int main(int ac, char **av) {
struct sigaction act, oact;
act.sa_handler = sig_handler;
+ #ifndef __x86_64__
TEST(syscall(__NR_rt_sigaction, SIGALRM, &act, &oact, 8));
+ #else
+ TEST(sigaction(SIGALRM, &act, &oact));
+ #endif
if(TEST_RETURN == -1){
tst_resm(TFAIL,"rt_sigaction() Failed, errno=%d : %s",TEST_ERRNO, strerror(TEST_ERRNO));
cleanup();
--
1.6.2.2
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
next reply other threads:[~2009-11-10 9:38 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-10 9:38 liubo [this message]
2009-11-11 1:28 ` [LTP] [PATCH] syscalls: fix some failure on arch X86_64 liubo
2009-11-11 4:14 ` Garrett Cooper
2009-11-11 4:30 ` Wei Yongjun
2009-11-11 5:22 ` liubo
2009-11-11 4:33 ` Mike Frysinger
2009-11-11 5:03 ` Wei Yongjun
2009-11-16 8:13 ` Subrata Modak
2009-11-16 8:53 ` liubo
2009-11-26 11:11 ` Garrett Cooper
2009-11-27 5:33 ` liubo
2009-11-27 6:49 ` Garrett Cooper
2009-11-27 8:50 ` Garrett Cooper
2009-11-27 10:07 ` liubo
2009-11-27 22:18 ` Garrett Cooper
2009-11-29 1:22 ` Wei Yongjun
2009-12-01 0:00 ` Garrett Cooper
2009-12-09 7:29 ` liubo
-- strict thread matches above, loose matches on Subject: below --
2009-12-09 7:34 liubo
2009-12-09 12:14 ` Subrata Modak
2009-12-18 16:03 ` Subrata Modak
2009-12-22 2:51 ` Garrett Cooper
2009-12-22 13:12 ` liubo
2010-02-22 5:21 liubo
2010-02-22 7:56 ` Garrett Cooper
2010-02-22 9:08 ` liubo
2010-02-22 18:05 ` Garrett Cooper
2010-02-23 0:59 ` liubo
2010-02-25 7:26 ` liubo
2010-02-25 10:00 ` Garrett Cooper
2010-02-26 0:35 ` liubo
2010-02-27 4:12 ` Garrett Cooper
2010-02-22 9:20 liubo
2010-02-22 14:45 ` Rishikesh K Rajak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AF93496.3030408@cn.fujitsu.com \
--to=liubo2009@cn.fujitsu.com \
--cc=ltp-list@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox