From: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v2] syscalls/signal06: fix test for regression with earlier version of gcc and kernel
Date: Thu, 9 Feb 2017 17:00:52 +0800 [thread overview]
Message-ID: <589C2FC4.4080502@cn.fujitsu.com> (raw)
In-Reply-To: <1479284063-12968-1-git-send-email-fenggw-fnst@cn.fujitsu.com>
Hi!
Ping, thanks!
Best Regards,
Guangwen Feng
On 11/16/2016 04:14 PM, Guangwen Feng wrote:
> 1. Currently, following code is incorrect on some releases with
> earlier version of gcc(tested on RHEL5.11GA):
>
> while (D == d && loop < LOOPS) {
>
> Because the argument in function test(double d) is used via (%rsp),
> but here we actually need a xmm register to trigger the fpu bug.
> So use global value instead to make sure to take use of xmm.
>
> 2. Although this regression test is designed to trigger SIGSEGV
> intentionally, on some releases with old kernel(tested on RHEL5.11GA),
> this will still lead to segmentation fault that terminate the program
> and break the test even though compiling with -O2. So slightly adjust
> the weight of the codes in child thread to depress SIGSEGV trigger's
> chance while increase LOOPS to ensure reproducible.
>
> Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
> ---
> testcases/kernel/syscalls/signal/signal06.c | 29 +++++++++++++++++------------
> 1 file changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/signal/signal06.c b/testcases/kernel/syscalls/signal/signal06.c
> index 75ef733..1f1b31c 100644
> --- a/testcases/kernel/syscalls/signal/signal06.c
> +++ b/testcases/kernel/syscalls/signal/signal06.c
> @@ -31,8 +31,8 @@
> * Date: Tue Sep 2 19:57:17 2014 +0200
> *
> * commit 66463db4fc5605d51c7bb81d009d5bf30a783a2c
> - * Author: Oleg Nesterov <oleg@redhat.com>
> - * Date: Tue Sep 2 19:57:13 2014 +0200
> + * Author: Oleg Nesterov <oleg@redhat.com>
> + * Date: Tue Sep 2 19:57:13 2014 +0200
> *
> * Reproduce:
> * Test-case (needs -O2).
> @@ -55,20 +55,21 @@ int TST_TOTAL = 5;
>
> #if __x86_64__
>
> -#define LOOPS 10000
> +#define LOOPS 30000
> +#define VALUE 123.456
>
> volatile double D;
> volatile int FLAGE;
>
> char altstack[4096 * 10] __attribute__((aligned(4096)));
>
> -void test(double d)
> +void test(void)
> {
> int loop = 0;
> int pid = getpid();
>
> - D = d;
> - while (D == d && loop < LOOPS) {
> + D = VALUE;
> + while (D == VALUE && loop < LOOPS) {
> /* sys_tkill(pid, SIGHUP); asm to avoid save/reload
> * fp regs around c call */
> asm ("" : : "a"(__NR_tkill), "D"(pid), "S"(SIGHUP));
> @@ -94,12 +95,16 @@ void sigh(int sig LTP_ATTRIBUTE_UNUSED)
>
> void *tfunc(void *arg LTP_ATTRIBUTE_UNUSED)
> {
> - for (; ;) {
> - TEST(mprotect(altstack, sizeof(altstack), PROT_READ));
> - if (TEST_RETURN == -1)
> - tst_brkm(TBROK | TTERRNO, NULL, "mprotect failed");
> + int i;
> +
> + for (i = -1; ; i *= -1) {
> + if (i == -1) {
> + TEST(mprotect(altstack, sizeof(altstack), PROT_READ));
> + if (TEST_RETURN == -1)
> + tst_brkm(TBROK | TTERRNO, NULL, "mprotect failed");
> + }
>
> - TEST(mprotect(altstack, sizeof(altstack), PROT_READ|PROT_WRITE));
> + TEST(mprotect(altstack, sizeof(altstack), PROT_READ | PROT_WRITE));
> if (TEST_RETURN == -1)
> tst_brkm(TBROK | TTERRNO, NULL, "mprotect failed");
>
> @@ -148,7 +153,7 @@ int main(int ac, char **av)
> tst_brkm(TBROK | TRERRNO, NULL,
> "pthread_create failed");
>
> - test(123.456);
> + test();
>
> TEST(pthread_join(pt, NULL));
> if (TEST_RETURN)
>
next prev parent reply other threads:[~2017-02-09 9:00 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-05 6:58 [LTP] [PATCH] syscalls/signal06: fix test for regression with earlier version of gcc and kernel Guangwen Feng
2016-08-08 8:44 ` Li Wang
2016-08-16 3:08 ` Guangwen Feng
2016-09-20 9:59 ` Guangwen Feng
2016-10-05 13:43 ` Cyril Hrubis
2016-10-06 10:31 ` Guangwen Feng
2016-10-06 11:15 ` Cyril Hrubis
2016-10-10 7:05 ` Guangwen Feng
2016-10-10 13:15 ` Cyril Hrubis
2016-10-11 7:17 ` Guangwen Feng
2016-11-16 8:14 ` [LTP] [PATCH v2] " Guangwen Feng
2017-02-09 9:00 ` Guangwen Feng [this message]
2017-02-09 16:19 ` Cyril Hrubis
2017-02-13 3:38 ` Guangwen Feng
2017-02-13 9:12 ` Cyril Hrubis
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=589C2FC4.4080502@cn.fujitsu.com \
--to=fenggw-fnst@cn.fujitsu.com \
--cc=ltp@lists.linux.it \
/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