[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[UNIKRAFT PATCH 3/3] plat/kvm, build: Change the default directory in which *.gcda files are generated.



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>
---
 Makefile.uk         |  6 +-----
 plat/kvm/shutdown.c | 34 +++++++++++++++++++++-------------
 2 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/Makefile.uk b/Makefile.uk
index e201785..510769a 100644
--- a/Makefile.uk
+++ b/Makefile.uk
@@ -40,11 +40,7 @@ LDFLAGS-$(CONFIG_OPTIMIZE_LTO)            += $(COMPFLAGS) 
$(COMPFLAGS-y) $(ARCHF
 LDFLAGS-$(CONFIG_OPTIMIZE_PGO_GENERATE)            += $(COMPFLAGS) 
$(COMPFLAGS-y) $(ARCHFLAGS) $(ARCHFLAGS-y) -fprofile-generate
 
 # PGO - profile-use phase
-LDFLAGS-$(CONFIG_OPTIMIZE_PGO_USE)            += $(COMPFLAGS) $(COMPFLAGS-y) 
$(ARCHFLAGS) $(ARCHFLAGS-y) -O3 -fprofile-use=main.gcda
-
-# ASAN
-COMPFLAGS-$(CONFIG_OPTIMIZE_ASAN)          += -fsanitize=address
-LDFLAGS-$(CONFIG_OPTIMIZE_ASAN)            += $(COMPFLAGS) $(COMPFLAGS-y) 
$(ARCHFLAGS) $(ARCHFLAGS-y) -fsanitize=address
+LDFLAGS-$(CONFIG_OPTIMIZE_PGO_USE)            += $(COMPFLAGS) $(COMPFLAGS-y) 
$(ARCHFLAGS) $(ARCHFLAGS-y) -fprofile-use
 
 DBGFLAGS-$(CONFIG_DEBUG_SYMBOLS_LVL0)     += -g0
 DBGFLAGS-$(CONFIG_DEBUG_SYMBOLS_LVL1)     += -g1
diff --git a/plat/kvm/shutdown.c b/plat/kvm/shutdown.c
index 9ca909f..ad0cd18 100644
--- a/plat/kvm/shutdown.c
+++ b/plat/kvm/shutdown.c
@@ -30,22 +30,30 @@
 #if CONFIG_OPTIMIZE_PGO_GENERATE
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <dirent.h>
 
-#define GCOV_GENERATE_FILE     
"/home/alice/Documents/Diploma/Comp-opt/apps/helloworld/build/apphelloworld/main.gcda"
+#define GCOV_GENERATED_DIR     "/gcov_profiling"
+#define GCOV_PREFIX_STRIP_LENGTH       "100"
 
-void create_hierarchy()
+void set_path_gcov_files()
 {
-       mkdir("/home", 0777);
-       mkdir("/home/alice", 0777);
-       mkdir("/home/alice/Documents", 0777);
-       mkdir("/home/alice/Documents/Diploma", 0777);
-       mkdir("/home/alice/Documents/Diploma/Comp-opt", 0777);
-       mkdir("/home/alice/Documents/Diploma/Comp-opt/apps", 0777);
-       mkdir("/home/alice/Documents/Diploma/Comp-opt/apps/helloworld", 0777);
-       mkdir("/home/alice/Documents/Diploma/Comp-opt/apps/helloworld/build", 
0777);
-       
mkdir("/home/alice/Documents/Diploma/Comp-opt/apps/helloworld/build/apphelloworld",
 0777);
-}
+       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;
@@ -55,7 +63,7 @@ void ukplat_terminate(enum ukplat_gstate request __unused)
 {
 
 #if CONFIG_OPTIMIZE_PGO_GENERATE
-       create_hierarchy();
+       set_path_gcov_files();
        __gcov_exit();
 #endif
 
-- 
2.17.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.