This repository has been archived by the owner on Jul 1, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 179
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tests: add instrumentation tests for PIE exec & shared libs
Summary: This commit adds dummy tests for checking instrumentation support for PIE executables and shared libraries. Vasily Leonenko, Advanced Software Technology Lab, Huawei
- Loading branch information
Vasily Leonenko
committed
Jul 7, 2021
1 parent
21a40ae
commit 4627ce0
Showing
2 changed files
with
108 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/* Checks that BOLT correctly handles instrumentation of executables built | ||
* with PIE with further optimization. | ||
*/ | ||
#include <stdio.h> | ||
|
||
int foo(int x) { return x + 1; } | ||
|
||
int fib(int x) { | ||
if (x < 2) | ||
return x; | ||
return fib(x - 1) + fib(x - 2); | ||
} | ||
|
||
int bar(int x) { return x - 1; } | ||
|
||
int main(int argc, char **argv) { | ||
printf("fib(%d) = %d\n", argc, fib(argc)); | ||
return 0; | ||
} | ||
|
||
/* | ||
REQUIRES: system-linux | ||
RUN: %host_cc %cflags %s -o %t.exe -Wl,-q -pie -fpie | ||
RUN: llvm-bolt %t.exe -instrument -instrumentation-file=%t.fdata \ | ||
RUN: -o %t.instrumented | ||
# Instrumented program needs to finish returning zero | ||
RUN: %t.instrumented 1 2 3 | FileCheck %s -check-prefix=CHECK-OUTPUT | ||
# Test that the instrumented data makes sense | ||
RUN: llvm-bolt %t.exe -o %t.bolted -data %t.fdata \ | ||
RUN: -reorder-blocks=cache+ -reorder-functions=hfsort+ | ||
RUN: %t.bolted 1 2 3 | FileCheck %s -check-prefix=CHECK-OUTPUT | ||
CHECK-OUTPUT: fib(4) = 3 | ||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* Checks that BOLT correctly handles instrumentation shared libraries | ||
* with further optimization. | ||
*/ | ||
#include <dlfcn.h> | ||
#include <stdio.h> | ||
|
||
#ifdef LIB | ||
int foo(int x) { return x + 1; } | ||
|
||
int fib(int x) { | ||
if (x < 2) | ||
return x; | ||
return fib(x - 1) + fib(x - 2); | ||
} | ||
|
||
int bar(int x) { return x - 1; } | ||
#endif | ||
|
||
#ifndef LIB | ||
int main(int argc, char **argv) { | ||
int (*fib_func)(int); | ||
char *libname; | ||
void *hndl; | ||
int val; | ||
if (argc < 2) | ||
return -1; | ||
/* | ||
* Expected library name as input to switch | ||
* between original and instrumented file | ||
*/ | ||
libname = argv[1]; | ||
hndl = dlopen(libname, RTLD_LAZY); | ||
if (!hndl) { | ||
printf("library load failed\n"); | ||
return -1; | ||
} | ||
fib_func = dlsym(hndl, "fib"); | ||
if (!fib_func) { | ||
printf("fib_func load failed\n"); | ||
return -1; | ||
} | ||
val = fib_func(argc); | ||
dlclose(hndl); | ||
printf("fib(%d) = %d\n", argc, val); | ||
return 0; | ||
} | ||
#endif | ||
|
||
/* | ||
REQUIRES: system-linux | ||
RUN: %host_cc %cflags %s -o %t.so -Wl,-q -fpie -fPIC -shared -DLIB | ||
RUN: %host_cc %cflags %s -o %t.exe -Wl,-q -ldl | ||
RUN: llvm-bolt %t.so -instrument -instrumentation-file=%t.so.fdata \ | ||
RUN: -o %t.so.instrumented | ||
# Program with instrumented shared library needs to finish returning zero | ||
RUN: %t.exe %t.so.instrumented 1 2 | FileCheck %s -check-prefix=CHECK-OUTPUT | ||
RUN: test -f %t.so.fdata | ||
# Test that the instrumented data makes sense | ||
RUN: llvm-bolt %t.so -o %t.so.bolted -data %t.so.fdata \ | ||
RUN: -reorder-blocks=cache+ -reorder-functions=hfsort+ | ||
RUN: %t.exe %t.so.bolted 1 2 | FileCheck %s -check-prefix=CHECK-OUTPUT | ||
CHECK-OUTPUT: fib(4) = 3 | ||
*/ |