From: Subrata <sub...@us...> - 2009-04-16 06:52:54
|
Update of /cvsroot/ltp/ltp/testcases/kernel/syscalls/fork In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv14569/ltp/testcases/kernel/syscalls/fork Modified Files: fork05.c Log Message: Rohit verma <roh...@gm...> wrote: There is a change in compilation mechanism in LTP from Feb 09 distribution.The previous Make mechanism did not provide any optimization while compiling the fork05 test program and the test used to Pass . However the newer Makefile uses optimization level 2 while compiling, if this file is executed the test case fails. CAI Qian <ca...@cc...> replied: This is definitely a case. I can reproduce it on Fedora 10, so I have created a bug of it, and copied the author Ulrich Drepper, https://bugzilla.redhat.com/show_bug.cgi?id=495296. Ulrich Drepper has pointed out in the above bug report that this failure was due to incorrect test code. The test code isn't correct. The compiler cannot look inside the asm statements in main() and see that they are really necessary. Based on the information given the compiler can drop some of them. Change all asms in main from asm(...) to asm volatile(...), and the code works fine. With the following patch, it works fine with and without compilation optimization. Signed-off-by: CAI Qian <ca...@cc...>. Index: fork05.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/syscalls/fork/fork05.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** fork05.c 23 Mar 2009 13:35:41 -0000 1.8 --- fork05.c 16 Apr 2009 06:52:49 -0000 1.9 *************** *** 175,195 **** modify_ldt(1, &ldt0, sizeof(ldt0)); ! asm("movw %w0, %%fs": :"q"(7)); ! asm("movl %%fs:0, %0":"=r"(lo)); ! tst_resm(TINFO, "a = %d", lo); ! asm("pushl %%fs; popl %0":"=q"(lo)); ! tst_resm(TINFO, "%%fs = %#06hx", lo); ! asm("movl %0, %%fs:0": :"r"(99)); ! pid = fork(); if (pid == 0) { ! asm("pushl %%fs; popl %0":"=q"(lo)); tst_resm(TINFO, "%%fs = %#06hx", lo); ! asm("movl %%fs:0, %0":"=r"(lo)); tst_resm(TINFO, "a = %d", lo); --- 175,195 ---- modify_ldt(1, &ldt0, sizeof(ldt0)); ! asm volatile ("movw %w0, %%fs" : : "q" (7)); ! asm volatile ("movl %%fs:0, %0" : "=r" (lo)); ! tst_resm(TINFO, "a = %d", lo); ! asm volatile ("pushl %%fs; popl %0" : "=q" (lo)); ! tst_resm(TINFO, "%%fs = %#06hx", lo); ! asm volatile ("movl %0, %%fs:0" : : "r" (99)); ! pid = fork(); if (pid == 0) { ! asm volatile ("pushl %%fs; popl %0" : "=q" (lo)); tst_resm(TINFO, "%%fs = %#06hx", lo); ! asm volatile ("movl %%fs:0, %0" : "=r" (lo)); tst_resm(TINFO, "a = %d", lo); |