diff --git a/repos/base/mk/generic.mk b/repos/base/mk/generic.mk index 0531c08d58..31d2e67115 100644 --- a/repos/base/mk/generic.mk +++ b/repos/base/mk/generic.mk @@ -55,10 +55,6 @@ endif %.o: %.cc $(MSG_COMP)$@ $(VERBOSE)$(CXX) $(CXX_DEF) $(CC_CXX_OPT) $(INCLUDES) -c $< -o $@ -ifeq ($(COVERAGE),yes) - $(VERBOSE)mkdir -p $(INSTALL_DIR)/gcov_data/$(TARGET)/$(dir $@) - $(VERBOSE)ln -sf $(CURDIR)/$(@:.o=.gcno) $(INSTALL_DIR)/gcov_data/$(TARGET)/$(@:.o=.gcno) -endif %.o: %.cpp $(MSG_COMP)$@ diff --git a/repos/base/mk/prg.mk b/repos/base/mk/prg.mk index 58f57c759c..6636d7f99d 100644 --- a/repos/base/mk/prg.mk +++ b/repos/base/mk/prg.mk @@ -224,6 +224,10 @@ $(TARGET).stripped: $(TARGET) $(INSTALL_DIR)/$(TARGET): $(TARGET).stripped $(VERBOSE)ln -sf $(CURDIR)/$< $@ +ifeq ($(COVERAGE),yes) + $(VERBOSE)mkdir -p $(INSTALL_DIR)/gcov_data/$(TARGET) + $(VERBOSE)ln -sf $(CURDIR)/*.gcno $(INSTALL_DIR)/gcov_data/$(TARGET)/ +endif ifneq ($(DEBUG_DIR),) $(DEBUG_DIR)/$(TARGET): $(TARGET) diff --git a/repos/libports/lib/mk/gcov-libcommon.mk b/repos/libports/lib/mk/gcov-libcommon.mk index 0826458ed8..024a638e67 100644 --- a/repos/libports/lib/mk/gcov-libcommon.mk +++ b/repos/libports/lib/mk/gcov-libcommon.mk @@ -10,14 +10,16 @@ SRC_CC = diagnostic.cc \ hash-table.cc \ input.cc \ intl.cc \ + json.cc \ memory-block.cc \ pretty-print.cc \ + sort.cc \ vec.cc \ version.cc CC_OPT += -DIN_GCC -CC_OPT_version += -DBASEVER="\"6.3.0\"" \ +CC_OPT_version += -DBASEVER="\"10.3.0\"" \ -DDATESTAMP="\"\"" \ -DREVISION="\"\"" \ -DDEVPHASE="\"\"" \ diff --git a/repos/libports/lib/mk/gcov-libcpp.mk b/repos/libports/lib/mk/gcov-libcpp.mk index 25a2e13339..7f4ca5f900 100644 --- a/repos/libports/lib/mk/gcov-libcpp.mk +++ b/repos/libports/lib/mk/gcov-libcpp.mk @@ -2,9 +2,11 @@ GCOV_PORT_DIR := $(call select_from_ports,gcov) GCOV_DIR := $(GCOV_PORT_DIR)/src/gcov -SRC_CC = line-map.cc +SRC_CC = charset.cc \ + errors.cc \ + line-map.cc -LIBS += libc +LIBS += libc stdcxx INC_DIR += $(GCOV_DIR)/include \ $(GCOV_DIR)/libcpp/include diff --git a/repos/libports/lib/mk/gcov-libiberty.mk b/repos/libports/lib/mk/gcov-libiberty.mk index 654056f394..a092ec38d4 100644 --- a/repos/libports/lib/mk/gcov-libiberty.mk +++ b/repos/libports/lib/mk/gcov-libiberty.mk @@ -10,6 +10,7 @@ SRC_C = argv.c \ filename_cmp.c \ fopen_unlocked.c \ hashtab.c \ + hex.c \ lbasename.c \ md5.c \ obstack.c \ @@ -20,6 +21,7 @@ SRC_C = argv.c \ xexit.c \ xmalloc.c \ xmemdup.c \ + xasprintf.c \ xstrdup.c \ xstrerror.c \ xstrndup.c \ diff --git a/repos/libports/lib/mk/libgcov.mk b/repos/libports/lib/mk/libgcov.mk index 13ca536bb2..d3baae3696 100644 --- a/repos/libports/lib/mk/libgcov.mk +++ b/repos/libports/lib/mk/libgcov.mk @@ -16,7 +16,8 @@ LIBGCOV_MERGE = _gcov_merge_add \ _gcov_merge_delta \ _gcov_merge_ior \ _gcov_merge_time_profile \ - _gcov_merge_icall_topn + _gcov_merge_icall_topn \ + _gcov_merge_topn LIBGCOV_PROFILER = _gcov_interval_profiler \ _gcov_pow2_profiler \ diff --git a/repos/libports/ports/gcov.hash b/repos/libports/ports/gcov.hash index 8175b94c79..440e004711 100644 --- a/repos/libports/ports/gcov.hash +++ b/repos/libports/ports/gcov.hash @@ -1 +1 @@ -a6f8522b8cd63162a9aeef8b5509138c3724af6e +3da457023a91c4f0f272ab61fffdaf6e69eb173f diff --git a/repos/libports/ports/gcov.port b/repos/libports/ports/gcov.port index 975f83ed5e..19c06f58ef 100644 --- a/repos/libports/ports/gcov.port +++ b/repos/libports/ports/gcov.port @@ -1,27 +1,32 @@ LICENSE := GPLv2 -VERSION := 8.3.0 +VERSION := 10.3.0 DOWNLOADS := gcov.archive generated.git URL(gcov) := ftp://ftp.fu-berlin.de/gnu/gcc/gcc-$(VERSION)/gcc-$(VERSION).tar.xz -SHA(gcov) := 64baadfe6cc0f4947a84cb12d7f0dfaf45bb58b7e92461639596c21e02d97d2c +SHA(gcov) := 64f404c1a650f27fc33da242e1f2df54952e3963a49e06e73f6940f3223ac344 DIR(gcov) := src/gcov SIG(gcov) := ${URL(gcov)} KEY(gcov) := GNU URL(generated) := https://github.com/cproc/genode-generated.git -REV(generated) := 745e78b2ea6abd4a9c601de2cc40702bcb6c636a +REV(generated) := de10bc1a61aed36a0c8ed923bbeb2777d1e3b844 DIR(generated) := include -TAR_OPT(gcov) := gcc-$(VERSION)/gcc/color-macros.h \ +TAR_OPT(gcov) := gcc-$(VERSION)/gcc/align.h \ + gcc-$(VERSION)/gcc/color-macros.h \ gcc-$(VERSION)/gcc/coretypes.h \ gcc-$(VERSION)/gcc/defaults.h \ gcc-$(VERSION)/gcc/diagnostic.c \ gcc-$(VERSION)/gcc/diagnostic-color.c \ gcc-$(VERSION)/gcc/diagnostic-color.h \ gcc-$(VERSION)/gcc/diagnostic-core.h \ + gcc-$(VERSION)/gcc/diagnostic-event-id.h \ + gcc-$(VERSION)/gcc/diagnostic-metadata.h \ + gcc-$(VERSION)/gcc/diagnostic-path.h \ + gcc-$(VERSION)/gcc/diagnostic-show-locus.c \ + gcc-$(VERSION)/gcc/diagnostic-url.h \ gcc-$(VERSION)/gcc/diagnostic.def \ gcc-$(VERSION)/gcc/diagnostic.h \ - gcc-$(VERSION)/gcc/diagnostic-show-locus.c \ gcc-$(VERSION)/gcc/double-int.h \ gcc-$(VERSION)/gcc/dumpfile.h \ gcc-$(VERSION)/gcc/edit-context.h \ @@ -48,20 +53,25 @@ TAR_OPT(gcov) := gcc-$(VERSION)/gcc/color-macros.h \ gcc-$(VERSION)/gcc/intl.c \ gcc-$(VERSION)/gcc/intl.h \ gcc-$(VERSION)/gcc/is-a.h \ + gcc-$(VERSION)/gcc/json.cc \ + gcc-$(VERSION)/gcc/json.h \ gcc-$(VERSION)/gcc/machmode.h \ gcc-$(VERSION)/gcc/memory-block.cc \ gcc-$(VERSION)/gcc/memory-block.h \ gcc-$(VERSION)/gcc/mem-stats.h \ gcc-$(VERSION)/gcc/mem-stats-traits.h \ gcc-$(VERSION)/gcc/mode-classes.def \ + gcc-$(VERSION)/gcc/opts.h \ gcc-$(VERSION)/gcc/poly-int.h \ gcc-$(VERSION)/gcc/poly-int-types.h \ gcc-$(VERSION)/gcc/pretty-print.c \ gcc-$(VERSION)/gcc/pretty-print.h \ + gcc-$(VERSION)/gcc/profile-count.h \ gcc-$(VERSION)/gcc/real.h \ gcc-$(VERSION)/gcc/selftest.h \ gcc-$(VERSION)/gcc/selftest-diagnostic.h \ gcc-$(VERSION)/gcc/signop.h \ + gcc-$(VERSION)/gcc/sort.cc \ gcc-$(VERSION)/gcc/statistics.h \ gcc-$(VERSION)/gcc/system.h \ gcc-$(VERSION)/gcc/tsystem.h \ @@ -71,6 +81,7 @@ TAR_OPT(gcov) := gcc-$(VERSION)/gcc/color-macros.h \ gcc-$(VERSION)/gcc/version.c \ gcc-$(VERSION)/gcc/version.h \ gcc-$(VERSION)/gcc/wide-int.h \ + gcc-$(VERSION)/gcc/wide-int-bitmask.h \ gcc-$(VERSION)/gcc/wide-int-print.h \ gcc-$(VERSION)/gcc/config/dbxelf.h \ gcc-$(VERSION)/gcc/config/elfos.h \ @@ -103,10 +114,12 @@ TAR_OPT(gcov) := gcc-$(VERSION)/gcc/color-macros.h \ gcc-$(VERSION)/include/obstack.h \ gcc-$(VERSION)/include/safe-ctype.h \ gcc-$(VERSION)/include/splay-tree.h \ + gcc-$(VERSION)/libcpp/charset.c \ + gcc-$(VERSION)/libcpp/errors.c \ gcc-$(VERSION)/libcpp/internal.h \ gcc-$(VERSION)/libcpp/line-map.c \ gcc-$(VERSION)/libcpp/system.h \ - gcc-$(VERSION)/libcpp/include/cpp-id-data.h \ + gcc-$(VERSION)/libcpp/ucnid.h \ gcc-$(VERSION)/libcpp/include/cpplib.h \ gcc-$(VERSION)/libcpp/include/line-map.h \ gcc-$(VERSION)/libcpp/include/symtab.h \ @@ -126,6 +139,7 @@ TAR_OPT(gcov) := gcc-$(VERSION)/gcc/color-macros.h \ gcc-$(VERSION)/libiberty/filename_cmp.c \ gcc-$(VERSION)/libiberty/fopen_unlocked.c \ gcc-$(VERSION)/libiberty/hashtab.c \ + gcc-$(VERSION)/libiberty/hex.c \ gcc-$(VERSION)/libiberty/lbasename.c \ gcc-$(VERSION)/libiberty/md5.c \ gcc-$(VERSION)/libiberty/obstack.c \ @@ -134,6 +148,7 @@ TAR_OPT(gcov) := gcc-$(VERSION)/gcc/color-macros.h \ gcc-$(VERSION)/libiberty/splay-tree.c \ gcc-$(VERSION)/libiberty/vprintf-support.c \ gcc-$(VERSION)/libiberty/vprintf-support.h \ + gcc-$(VERSION)/libiberty/xasprintf.c \ gcc-$(VERSION)/libiberty/xexit.c \ gcc-$(VERSION)/libiberty/xmalloc.c \ gcc-$(VERSION)/libiberty/xmemdup.c \ @@ -166,4 +181,6 @@ symlinks: $(DOWNLOADS) $(VERBOSE)ln -s pretty-print.c ${DIR(gcov)}/gcc/pretty-print.cc $(VERBOSE)ln -s vec.c ${DIR(gcov)}/gcc/vec.cc $(VERBOSE)ln -s version.c ${DIR(gcov)}/gcc/version.cc + $(VERBOSE)ln -s charset.c ${DIR(gcov)}/libcpp/charset.cc + $(VERBOSE)ln -s errors.c ${DIR(gcov)}/libcpp/errors.cc $(VERBOSE)ln -s line-map.c ${DIR(gcov)}/libcpp/line-map.cc diff --git a/repos/libports/recipes/pkg/gcov/archives b/repos/libports/recipes/pkg/gcov/archives index 8061c01d7f..904aebf64a 100644 --- a/repos/libports/recipes/pkg/gcov/archives +++ b/repos/libports/recipes/pkg/gcov/archives @@ -5,3 +5,4 @@ _/src/libc _/src/posix _/src/stdcxx _/src/vfs +_/src/zlib diff --git a/repos/libports/recipes/pkg/gcov/runtime b/repos/libports/recipes/pkg/gcov/runtime index 378eec3ffc..05aa7f7095 100644 --- a/repos/libports/recipes/pkg/gcov/runtime +++ b/repos/libports/recipes/pkg/gcov/runtime @@ -16,6 +16,7 @@ + diff --git a/repos/libports/recipes/src/gcov/used_apis b/repos/libports/recipes/src/gcov/used_apis index 3181c2bd82..d1d7799d1d 100644 --- a/repos/libports/recipes/src/gcov/used_apis +++ b/repos/libports/recipes/src/gcov/used_apis @@ -3,3 +3,4 @@ gmp libc posix stdcxx +zlib diff --git a/repos/libports/src/app/gcov/patches/backtrace.patch b/repos/libports/src/app/gcov/patches/backtrace.patch index 3565cdb370..a16ff3878a 100644 --- a/repos/libports/src/app/gcov/patches/backtrace.patch +++ b/repos/libports/src/app/gcov/patches/backtrace.patch @@ -9,7 +9,7 @@ From: Christian Prochaska 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/gcc/diagnostic-show-locus.c b/gcc/diagnostic-show-locus.c -index 9c567bd..c307120 100644 +index 4618b4edb..6b15b0740 100644 --- a/gcc/diagnostic-show-locus.c +++ b/gcc/diagnostic-show-locus.c @@ -24,7 +24,9 @@ along with GCC; see the file COPYING3. If not see @@ -23,7 +23,7 @@ index 9c567bd..c307120 100644 #include "diagnostic-color.h" #include "gcc-rich-location.h" diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c -index c61e0c4..fea960f 100644 +index ed52bc03d..a5d949d14 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -28,7 +28,9 @@ along with GCC; see the file COPYING3. If not see @@ -35,8 +35,8 @@ index c61e0c4..fea960f 100644 +#endif #include "diagnostic.h" #include "diagnostic-color.h" - #include "edit-context.h" -@@ -376,7 +378,7 @@ static const char * const bt_stop[] = + #include "diagnostic-url.h" +@@ -438,7 +440,7 @@ static const char * const bt_stop[] = }; /* A callback function passed to the backtrace_full function. */ @@ -45,7 +45,7 @@ index c61e0c4..fea960f 100644 static int bt_callback (void *data, uintptr_t pc, const char *filename, int lineno, const char *function) -@@ -456,7 +458,7 @@ bt_err_callback (void *data ATTRIBUTE_UNUSED, const char *msg, int errnum) +@@ -518,7 +520,7 @@ bt_err_callback (void *data ATTRIBUTE_UNUSED, const char *msg, int errnum) fprintf (stderr, "%s%s%s\n", msg, errnum == 0 ? "" : ": ", errnum == 0 ? "" : xstrerror (errnum)); } @@ -54,7 +54,7 @@ index c61e0c4..fea960f 100644 /* Check if we've met the maximum error limit, and if so fatally exit with a message. CONTEXT is the context to check, and FLUSH indicates whether a diagnostic_finish call is needed. */ -@@ -511,14 +513,17 @@ diagnostic_action_after_output (diagnostic_context *context, +@@ -573,14 +575,17 @@ diagnostic_action_after_output (diagnostic_context *context, case DK_ICE: case DK_ICE_NOBT: { diff --git a/repos/libports/src/app/gcov/patches/charset.patch b/repos/libports/src/app/gcov/patches/charset.patch new file mode 100644 index 0000000000..289e4940ee --- /dev/null +++ b/repos/libports/src/app/gcov/patches/charset.patch @@ -0,0 +1,32 @@ +charset.patch + +From: Christian Prochaska + + +--- + libcpp/charset.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/libcpp/charset.c b/libcpp/charset.c +index d9281c5fb..e10cbc218 100644 +--- a/libcpp/charset.c ++++ b/libcpp/charset.c +@@ -2350,9 +2350,10 @@ cpp_display_column_to_byte_column (const char *data, int data_length, + are not highly optimized, but for the present purpose of outputting + diagnostics, they are sufficient. */ + +-#include "generated_cpp_wcwidth.h" ++//#include "generated_cpp_wcwidth.h" + int cpp_wcwidth (cppchar_t c) + { ++#if 0 + if (__builtin_expect (c <= wcwidth_range_ends[0], true)) + return wcwidth_widths[0]; + +@@ -2376,5 +2377,6 @@ int cpp_wcwidth (cppchar_t c) + + if (__builtin_expect (begin != end, true)) + return wcwidth_widths[begin]; ++#endif + return 1; + } diff --git a/repos/libports/src/app/gcov/patches/gcov.patch b/repos/libports/src/app/gcov/patches/gcov.patch index d6c973ca51..135ef781f4 100644 --- a/repos/libports/src/app/gcov/patches/gcov.patch +++ b/repos/libports/src/app/gcov/patches/gcov.patch @@ -4,15 +4,15 @@ From: Christian Prochaska --- - gcc/gcov.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- - 1 file changed, 132 insertions(+), 7 deletions(-) + gcc/gcov.c | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 136 insertions(+), 9 deletions(-) diff --git a/gcc/gcov.c b/gcc/gcov.c -index c7c52ce..e039ef0 100644 +index a291bac3e..813c7e19b 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c -@@ -47,6 +47,8 @@ along with Gcov; see the file COPYING3. If not see - +@@ -50,6 +50,8 @@ along with Gcov; see the file COPYING3. If not see + #include #include +#include @@ -20,7 +20,7 @@ index c7c52ce..e039ef0 100644 #include "md5.h" using namespace std; -@@ -55,6 +57,7 @@ using namespace std; +@@ -58,6 +60,7 @@ using namespace std; #include "gcov-io.h" #include "gcov-io.c" @@ -28,7 +28,7 @@ index c7c52ce..e039ef0 100644 /* The gcno file is generated by -ftest-coverage option. The gcda file is generated by a program compiled with -fprofile-arcs. Their formats are documented in gcov-io.h. */ -@@ -436,6 +439,11 @@ static unsigned bbg_supports_has_unexecuted_blocks; +@@ -507,6 +510,11 @@ static const char *bbg_cwd; static char *da_file_name; @@ -40,7 +40,7 @@ index c7c52ce..e039ef0 100644 /* Data file is missing. */ static int no_data_file; -@@ -504,6 +512,16 @@ static int flag_human_readable_numbers = 0; +@@ -579,6 +587,16 @@ static int flag_human_readable_numbers = 0; static int flag_function_summary = 0; @@ -57,7 +57,7 @@ index c7c52ce..e039ef0 100644 /* Object directory file prefix. This is the directory/file where the graph and data files are looked for, if nonzero. */ -@@ -750,6 +768,43 @@ get_cycles_count (line_info &linfo, bool handle_negative_cycles = true) +@@ -826,6 +844,43 @@ get_cycles_count (line_info &linfo) return count; } @@ -101,7 +101,7 @@ index c7c52ce..e039ef0 100644 int main (int argc, char **argv) { -@@ -775,13 +830,25 @@ main (int argc, char **argv) +@@ -851,13 +906,25 @@ main (int argc, char **argv) expandargv (&argc, &argv); argno = process_args (argc, argv); @@ -128,7 +128,7 @@ index c7c52ce..e039ef0 100644 for (; argno != argc; argno++) { -@@ -833,7 +900,8 @@ print_usage (int error_p) +@@ -911,7 +978,8 @@ print_usage (int error_p) fnotice (file, " -u, --unconditional-branches Show unconditional branch counts too\n"); fnotice (file, " -v, --version Print version number, then exit\n"); fnotice (file, " -w, --verbose Print verbose informations\n"); @@ -138,24 +138,24 @@ index c7c52ce..e039ef0 100644 fnotice (file, "\nFor bug reporting instructions, please see:\n%s.\n", bug_report_url); exit (status); -@@ -877,6 +945,7 @@ static const struct option options[] = - { "display-progress", no_argument, NULL, 'd' }, +@@ -957,6 +1025,7 @@ static const struct option options[] = { "hash-filenames", no_argument, NULL, 'x' }, { "use-colors", no_argument, NULL, 'k' }, + { "use-hotness-colors", no_argument, NULL, 'q' }, + { "genode-autopilot", no_argument, NULL, 'g' }, { 0, 0, 0, 0 } }; -@@ -887,7 +956,7 @@ process_args (int argc, char **argv) +@@ -967,7 +1036,7 @@ process_args (int argc, char **argv) { int opt; -- const char *opts = "abcdfhijklmno:prs:uvwx"; -+ const char *opts = "abcdfghijklmno:prs:uvwx"; +- const char *opts = "abcdfhijklmno:pqrs:tuvwx"; ++ const char *opts = "abcdfghijklmno:pqrs:tuvwx"; while ((opt = getopt_long (argc, argv, opts, options, NULL)) != -1) { switch (opt) -@@ -904,6 +973,9 @@ process_args (int argc, char **argv) +@@ -984,6 +1053,9 @@ process_args (int argc, char **argv) case 'f': flag_function_summary = 1; break; @@ -165,7 +165,7 @@ index c7c52ce..e039ef0 100644 case 'h': print_usage (false); /* print_usage will exit. */ -@@ -1234,11 +1306,43 @@ process_all_functions (void) +@@ -1363,11 +1435,43 @@ process_all_functions (void) static void output_gcov_file (const char *file_name, source_info *src) { @@ -210,7 +210,7 @@ index c7c52ce..e039ef0 100644 if (gcov_file) { fnotice (stdout, "Creating '%s'\n", gcov_file_name); -@@ -1246,7 +1350,8 @@ output_gcov_file (const char *file_name, source_info *src) +@@ -1375,7 +1479,8 @@ output_gcov_file (const char *file_name, source_info *src) if (ferror (gcov_file)) fnotice (stderr, "Error writing output file '%s'\n", gcov_file_name); @@ -220,8 +220,28 @@ index c7c52ce..e039ef0 100644 } else fnotice (stderr, "Could not open output file '%s'\n", gcov_file_name); -@@ -1329,7 +1434,10 @@ generate_results (const char *file_name) - function_summary (&src->coverage, "File"); +@@ -1422,7 +1527,8 @@ generate_results (const char *file_name) + file_name = canonicalize_name (file_name); + } + +- gcov_intermediate_filename = get_gcov_intermediate_filename (file_name); ++ if (file_name) ++ gcov_intermediate_filename = get_gcov_intermediate_filename (file_name); + + json::object *root = new json::object (); + root->set ("format_version", new json::string ("1")); +@@ -1430,7 +1536,8 @@ generate_results (const char *file_name) + + if (bbg_cwd != NULL) + root->set ("current_working_directory", new json::string (bbg_cwd)); +- root->set ("data_file", new json::string (file_name)); ++ if (file_name) ++ root->set ("data_file", new json::string (file_name)); + + json::array *json_files = new json::array (); + root->set ("files", json_files); +@@ -1459,7 +1566,10 @@ generate_results (const char *file_name) + file_summary (&src->coverage); total_lines += src->coverage.lines; total_executed += src->coverage.lines_executed; - if (flag_gcov_file) @@ -230,9 +250,9 @@ index c7c52ce..e039ef0 100644 + !(flag_genode_autopilot && + (src->coverage.lines_executed == src->coverage.lines))) { - if (flag_intermediate_format) - /* Output the intermediate format without requiring source -@@ -1384,7 +1492,8 @@ create_file_names (const char *file_name) + if (flag_json_format) + output_json_intermediate_file (json_files, src); +@@ -1547,7 +1657,8 @@ create_file_names (const char *file_name) /* Free previous file names. */ free (bbg_file_name); free (da_file_name); @@ -242,7 +262,7 @@ index c7c52ce..e039ef0 100644 bbg_file_time = 0; bbg_stamp = 0; -@@ -1430,6 +1539,10 @@ create_file_names (const char *file_name) +@@ -1593,6 +1704,10 @@ create_file_names (const char *file_name) strcpy (da_file_name, name); strcpy (da_file_name + length, GCOV_DATA_SUFFIX); @@ -253,7 +273,7 @@ index c7c52ce..e039ef0 100644 free (name); return; } -@@ -1486,6 +1599,18 @@ find_source (const char *file_name) +@@ -1649,6 +1764,18 @@ find_source (const char *file_name) #endif && IS_DIR_SEPARATOR (src->coverage.name[source_length])) src->coverage.name += source_length + 1; diff --git a/repos/libports/src/app/gcov/patches/i386.patch b/repos/libports/src/app/gcov/patches/i386.patch new file mode 100644 index 0000000000..da4a510aaa --- /dev/null +++ b/repos/libports/src/app/gcov/patches/i386.patch @@ -0,0 +1,43 @@ +i386.patch + +From: Christian Prochaska + + +--- + gcc/config/i386/i386.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h +index 4ff8b5e65..96409d759 100644 +--- a/gcc/config/i386/i386.h ++++ b/gcc/config/i386/i386.h +@@ -2482,6 +2482,7 @@ const wide_int_bitmask PTA_TREMONT = PTA_GOLDMONT_PLUS | PTA_CLWB + const wide_int_bitmask PTA_KNM = PTA_KNL | PTA_AVX5124VNNIW + | PTA_AVX5124FMAPS | PTA_AVX512VPOPCNTDQ; + ++#if 0 + #ifndef GENERATOR_FILE + + #include "insn-attr-common.h" +@@ -2499,6 +2500,7 @@ extern const pta processor_alias_table[]; + extern int const pta_size; + #endif + ++#endif + #endif + + extern enum processor_type ix86_tune; +@@ -2955,11 +2957,13 @@ extern void debug_dispatch_window (int); + + #define TARGET_SUPPORTS_WIDE_INT 1 + ++#if 0 + #if !defined(GENERATOR_FILE) && !defined(IN_LIBGCC2) + extern enum attr_cpu ix86_schedule; + + #define NUM_X86_64_MS_CLOBBERED_REGS 12 + #endif ++#endif + + /* + Local variables: diff --git a/repos/libports/src/app/gcov/target.mk b/repos/libports/src/app/gcov/target.mk index 3d35c68f77..18d5eb9331 100644 --- a/repos/libports/src/app/gcov/target.mk +++ b/repos/libports/src/app/gcov/target.mk @@ -28,7 +28,7 @@ ifeq ($(filter-out $(SPECS),x86_64),) INC_DIR += $(GCOV_PORT_DIR)/include/x86_64/gcc endif -LIBS += libc posix gmp stdcxx gcov-libcommon gcov-libcpp gcov-libiberty +LIBS += libc posix gmp stdcxx zlib gcov-libcommon gcov-libcpp gcov-libiberty vpath %.cc $(GCOV_DIR)/gcc diff --git a/repos/libports/src/lib/gcov/libc/libc.cc b/repos/libports/src/lib/gcov/libc/libc.cc index 3bd82b49b2..558d117e09 100644 --- a/repos/libports/src/lib/gcov/libc/libc.cc +++ b/repos/libports/src/lib/gcov/libc/libc.cc @@ -75,6 +75,13 @@ extern "C" int atoi(const char *nptr) } +extern "C" void exit(int status) +{ + gcov_env->env.parent().exit(status); + Genode::sleep_forever(); +} + + extern "C" int fclose(FILE *stream) { gcov_env->fs.close(*(gcov_env->file_handle)); @@ -246,6 +253,12 @@ extern "C" char *getenv(const char *name) } +extern "C" int getpid() +{ + return 1; +} + + extern "C" void *malloc(size_t size) { void *res = nullptr; @@ -254,6 +267,53 @@ extern "C" void *malloc(size_t size) } +extern "C" int sprintf(char *str, const char *format, ...) +{ + using namespace Genode; + + va_list list; + va_start(list, format); + + String_console sc {str, 1024 }; + sc.vprintf(format, list); + + va_end(list); + return sc.len(); +} + + +extern "C" char *strcat(char *dest, const char *src) +{ + while (*dest != '\0') + dest++; + + while (*src != '\0') { + *dest = *src; + src++; + dest++; + } + + *dest = '\0'; + + return dest; +} + + +extern "C" char *strchr(const char *s, int c) +{ + while (*s != '\0') { + if (*s == c) + return (char*)s; + s++; + } + + if (c == '\0') + return (char*)s; + + return nullptr; +} + + extern "C" char *strcpy(char *dest, const char *src) { Genode::copy_cstring(dest, src, Genode::strlen(src) + 1); @@ -275,7 +335,7 @@ extern "C" int vfprintf(FILE *stream, const char *format, va_list list) using namespace Genode; - char buf[128] { }; + char buf[1024] { }; String_console sc { buf, sizeof(buf) }; sc.vprintf(format, list); log(Cstring(buf)); diff --git a/repos/libports/src/lib/gcov/libc/stdio.h b/repos/libports/src/lib/gcov/libc/stdio.h index 3e19e961b6..5311ed6e81 100644 --- a/repos/libports/src/lib/gcov/libc/stdio.h +++ b/repos/libports/src/lib/gcov/libc/stdio.h @@ -32,6 +32,7 @@ int fseek(FILE *stream, long offset, int whence); long ftell(FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); void setbuf(FILE *stream, char *buf); +int sprintf(char *str, const char *format, ...); int vfprintf(FILE *stream, const char *format, va_list ap); #endif diff --git a/repos/libports/src/lib/gcov/libc/stdlib.h b/repos/libports/src/lib/gcov/libc/stdlib.h index 838cba1e9e..8c049fd18e 100644 --- a/repos/libports/src/lib/gcov/libc/stdlib.h +++ b/repos/libports/src/lib/gcov/libc/stdlib.h @@ -18,6 +18,7 @@ void abort(void); void atexit(void (*func)(void)); int atoi(const char *nptr); +void exit(int status); void free(void *ptr); char *getenv(const char *name); void *malloc(size_t size); diff --git a/repos/libports/src/lib/gcov/libc/string.h b/repos/libports/src/lib/gcov/libc/string.h index 4a23b37c8e..0686608ec0 100644 --- a/repos/libports/src/lib/gcov/libc/string.h +++ b/repos/libports/src/lib/gcov/libc/string.h @@ -17,6 +17,8 @@ void *memcpy(void *dest, const void *src, size_t n); void *memset(void *s, int c, size_t n); +char *strcat(char *dest, const char *src); +char *strchr(const char *s, int c); char *strcpy(char *dest, const char *src); size_t strlen(const char *s); diff --git a/repos/libports/src/lib/gcov/libc/unistd.h b/repos/libports/src/lib/gcov/libc/unistd.h index fb73ac9a12..5e8aa46b5b 100644 --- a/repos/libports/src/lib/gcov/libc/unistd.h +++ b/repos/libports/src/lib/gcov/libc/unistd.h @@ -17,4 +17,6 @@ #define F_OK 0 +int getpid(); + #endif diff --git a/repos/libports/src/lib/gcov/patches/libgcov.patch b/repos/libports/src/lib/gcov/patches/libgcov.patch index 28409a85b6..109b1b0da1 100644 --- a/repos/libports/src/lib/gcov/patches/libgcov.patch +++ b/repos/libports/src/lib/gcov/patches/libgcov.patch @@ -8,7 +8,7 @@ From: Christian Prochaska 1 file changed, 6 insertions(+) diff --git a/gcc/tsystem.h b/gcc/tsystem.h -index 969b105..529dfe3 100644 +index 7be251313..dd85a677e 100644 --- a/gcc/tsystem.h +++ b/gcc/tsystem.h @@ -90,7 +90,9 @@ extern void *memset (void *, int, size_t); diff --git a/repos/libports/src/lib/gcov/patches/setbuf.patch b/repos/libports/src/lib/gcov/patches/setbuf.patch index cb495a555b..3da34e8595 100644 --- a/repos/libports/src/lib/gcov/patches/setbuf.patch +++ b/repos/libports/src/lib/gcov/patches/setbuf.patch @@ -8,7 +8,7 @@ From: Christian Prochaska 1 file changed, 2 insertions(+) diff --git a/gcc/gcov-io.c b/gcc/gcov-io.c -index 3fe1e61..c4cc246 100644 +index ac60f9baf..f35fcca1f 100644 --- a/gcc/gcov-io.c +++ b/gcc/gcov-io.c @@ -192,7 +192,9 @@ gcov_open (const char *name, int mode)