Split stack-fcall.c into several compilation units so that intermediate
function calls would not be optimized out by compiler.
* tests/stack-fcall.c: Move intermediate functions to ...
* tests/stack-fcall-*.c: ... new files.
* tests/Makefile.am (stack_fcall_SOURCES): Add stack-fcall-*.c.
uio
uio_CFLAGS = $(AM_CFLAGS) -D_FILE_OFFSET_BITS=64
+stack_fcall_SOURCES = stack-fcall.c \
+ stack-fcall-0.c stack-fcall-1.c stack-fcall-2.c stack-fcall-3.c
TESTS = \
ptrace_setoptions.test \
--- /dev/null
+int f1(int i);
+
+int f0(int i)
+{
+ return f1(i) - i;
+}
--- /dev/null
+int f2(int i);
+
+int f1(int i)
+{
+ return f2(i) + i;
+}
--- /dev/null
+int f3(int i);
+
+int f2(int i)
+{
+ return f3(i) - i;
+}
--- /dev/null
+#include <unistd.h>
+
+int f3(int i)
+{
+ return getpid() + i;
+}
-#include <unistd.h>
-#include <sys/types.h>
-
-/* Use "volatile" to avoid compiler optimization. */
-
-int f3(int i)
-{
- static pid_t (* volatile g)(void) = getpid;
- return g() + i;
-}
-
-int f2(volatile int i)
-{
- static int (* volatile g)(int) = f3;
- return g(i) - i;
-}
-
-int f1(volatile int i)
-{
- static int (* volatile g)(int) = f2;
- return g(i) + i;
-}
-
-int f0(volatile int i)
-{
- static int (* volatile g)(int) = f1;
- return g(i) - i;
-}
+int f0(int i);
int main(int argc, char** argv)
{
- static int (* volatile g)(int) = f0;
- g(argc);
+ f0(argc);
return 0;
}