From 9d056ff64bf887e2c3479fe515bf7c95cb39e5b6 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Sun, 11 Aug 2019 22:28:38 +0200 Subject: Rework exec chain Originally the structure of the executed cmd was {measure cmd} {allocator cmd prefix} {cmd} with the parent environment except LD_PRELOAD was modified for the whole command chain. Unfortunatly perf causes segfaults with some allocators and measuring allocators cmd prefixes doesnt seem fair. So the new cmd chain looks like: {allocator cmd prefix} {measure cmd} run_cmd {cmd} without touching the environment in python. run_cmd sets LD_PRELOAD to the value it received in argv[1] and executes argv[2] with the rest of argv. This does also measure code not part of the actual benchmark but in a equal manner and not only for some allocators. --- src/run_cmd.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/run_cmd.c (limited to 'src/run_cmd.c') diff --git a/src/run_cmd.c b/src/run_cmd.c new file mode 100644 index 0000000..aa15964 --- /dev/null +++ b/src/run_cmd.c @@ -0,0 +1,18 @@ +#define _GNU_SOURCE +#include +#include +#include + +int main(int argc, char* argv[]) { + if (argc < 3) { + printf("Usage: %s [cmd args]\n"); + printf("\tset LD_PRELOAD to ld_preload and call execvp [cmd args]\n"); + return 1; + } + + // Overwrite LD_PRELOAD. + setenv("LD_PRELOAD", argv[1], 1); + + // Run cmd. + execvp(argv[2], &argv[2]); +} -- cgit v1.2.3