]> granicus.if.org Git - strace/commitdiff
tests: robustify strace -k tests against link-time optimizer
authorDmitry V. Levin <ldv@altlinux.org>
Tue, 9 Jul 2019 19:27:58 +0000 (19:27 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 9 Jul 2019 19:27:58 +0000 (19:27 +0000)
Some distributions enable by default a link-time optimizer that
mangles stack_fcall sample executables in a way that renders them
unusable for test purposes.

Robustify tests to defeat link-time optimizer.

* tests/stack-fcall.h (f0, f1, f2, f3): Add second parameter.
* tests/stack-fcall.c (main): Pass main as the second parameter to f0.
* tests/stack-fcall-0.c (f0): Add second parameter f, pass the xor of it
and f0 to f1.
* tests/stack-fcall-1.c (f1): Add second parameter f, pass the xor of it
and f1 to f2.
* tests/stack-fcall-2.c (f2): Add second parameter f, pass the xor of it
and f2 to f3.
* tests/stack-fcall-3.c: Include <asm/unistd.h>.
(f3): Add second parameter f, invoke __NR_gettid syscall with the xor
of f and f3 as its argument.

tests/stack-fcall-0.c
tests/stack-fcall-1.c
tests/stack-fcall-2.c
tests/stack-fcall-3.c
tests/stack-fcall.c
tests/stack-fcall.h

index 8a26a79cb36c161e27813527618763180ffbdad7..e334df1cd789938e9db48ad48d51371479c09761 100644 (file)
@@ -7,7 +7,7 @@
 
 #include "stack-fcall.h"
 
-int f0(int i)
+int f0(int i, unsigned long f)
 {
-       return f1(i) - i;
+       return f1(i, f ^ (unsigned long) (void *) f0) - i;
 }
index b5cd89b38ac1b62de7dc17aefa2c1460c2f1928b..96888ef082b7f2c8b8d958f12336e0a7dcf54212 100644 (file)
@@ -7,7 +7,7 @@
 
 #include "stack-fcall.h"
 
-int f1(int i)
+int f1(int i, unsigned long f)
 {
-       return f2(i) + i;
+       return f2(i, f ^ (unsigned long) (void *) f1) + i;
 }
index 16beee5888f7301a6f74c49267b12725db1260a4..9386f4ab5763da7e5ec0b4076337d2ab3ec791e3 100644 (file)
@@ -7,7 +7,7 @@
 
 #include "stack-fcall.h"
 
-int f2(int i)
+int f2(int i, unsigned long f)
 {
-       return f3(i) - i;
+       return f3(i, f ^ (unsigned long) (void *) f2) - i;
 }
index 538b6565ae5aa623adf4f802b2b23d2cfd560c11..d027e326363936a50c782dbfdd16b16583d9e59b 100644 (file)
@@ -7,11 +7,13 @@
 
 #include <signal.h>
 #include <unistd.h>
+#include <asm/unistd.h>
 
 #include "stack-fcall.h"
 
-int f3(int i)
+int f3(int i, unsigned long f)
 {
+       syscall(__NR_gettid, f ^ (unsigned long) (void *) f3);
        switch (i) {
        case 1:
                return kill(getpid(), SIGURG);
index cf4000e56f5aa6bb77f3d4f0fe72779aed01e73e..bc970b24749a66b548ab55c415334579cfa3f757 100644 (file)
@@ -9,7 +9,7 @@
 
 int main(void)
 {
-       f0(0);
-       f0(1);
+       f0(0, (unsigned long) (void *) main);
+       f0(1, (unsigned long) (void *) main);
        return 0;
 }
index cca0f94f255d0c6f96be54a46c77a94683d6f40a..881fca28f78bd5757e6f4184199e66df2e62344d 100644 (file)
@@ -14,7 +14,7 @@
 
 #endif
 
-int f0(int i);
-int f1(int i);
-int f2(int i);
-int f3(int i);
+int f0(int i, unsigned long);
+int f1(int i, unsigned long);
+int f2(int i, unsigned long);
+int f3(int i, unsigned long);