[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [UNIKRAFT PATCH v2 2/2] plat/kvm: Change the default directory for the profiling files
Call the __gcov_exit() function in a conditional way (using ifdef guard) in the function ukplat_terminate(). Thus, the profiling files (*.gcda) are generated within the Unikraft filesystem. Use 9pfs to transfer the *.gcda files from Unikraft to the host system. Set GCOV_PREFIX and GCOV_PREFIX_STRIP. GCOV_PREFIX is a runtime environment variable that determines the root directory where the gcov output files (*.gcda) are written. GCOV_PREFIX_STRIP=X is also a runtime variable and has the effect of stripping X elements from the path found in the object files. Thus, the default path in which the *.gcda files were generated was changed with the help of the two environment variables. Now the files are saved to the path given exclusively by the GCOV_PREFIX environment variable, GCOV_PREFIX_STRIP being large enough to skip the entire default path. Signed-off-by: Alice Suiu <alicesuiu17@xxxxxxxxx> --- plat/kvm/shutdown.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/plat/kvm/shutdown.c b/plat/kvm/shutdown.c index cce26b7..ad0cd18 100644 --- a/plat/kvm/shutdown.c +++ b/plat/kvm/shutdown.c @@ -27,11 +27,46 @@ #include <uk/print.h> #include <uk/plat/bootstrap.h> +#if CONFIG_OPTIMIZE_PGO_GENERATE +#include <sys/stat.h> +#include <sys/types.h> +#include <dirent.h> + +#define GCOV_GENERATED_DIR "/gcov_profiling" +#define GCOV_PREFIX_STRIP_LENGTH "100" + +void set_path_gcov_files() +{ + const char *gcov_prefix; + const char *gcov_strip; + + gcov_prefix = getenv("GCOV_PREFIX"); + if (!gcov_prefix) + setenv("GCOV_PREFIX", GCOV_GENERATED_DIR, 1); + + gcov_strip = getenv("GCOV_PREFIX_STRIP"); + if (!gcov_strip) + setenv("GCOV_PREFIX_STRIP", GCOV_PREFIX_STRIP_LENGTH, 1); + + DIR* dir = opendir(GCOV_GENERATED_DIR); + if (dir) + closedir(dir); + else if (ENOENT == errno) + mkdir(GCOV_GENERATED_DIR, 0777); +} +#endif + static void cpu_halt(void) __noreturn; /* TODO: implement CPU reset */ void ukplat_terminate(enum ukplat_gstate request __unused) { + +#if CONFIG_OPTIMIZE_PGO_GENERATE + set_path_gcov_files(); + __gcov_exit(); +#endif + uk_pr_info("Unikraft halted\n"); /* Try to make system off */ -- 2.17.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |