On Sun, Jan 5, 2014 at 12:08 PM, Jan Hubicka <hubi...@ucw.cz> wrote: >> 2014-01-03 Rong Xu <x...@google.com> >> >> * gcc/gcov-io.c (gcov_var): Move from gcov-io.h. >> (gcov_position): Ditto. >> (gcov_is_error): Ditto. >> (gcov_rewrite): Ditto. >> * gcc/gcov-io.h: Refactor. Move gcov_var to gcov-io.h, and libgcov >> only part to libgcc/libgcov.h. >> * libgcc/libgcov-driver.c: Use libgcov.h. >> (buffer_fn_data): Use xmalloc instead of malloc. >> (gcov_exit_merge_gcda): Ditto. >> * libgcc/libgcov-driver-system.c (allocate_filename_struct): Ditto. >> * libgcc/libgcov.h: New common header files for libgcov-*.h. >> * libgcc/libgcov-interface.c: Use libgcov.h >> * libgcc/libgcov-merge.c: Ditto. >> * libgcc/libgcov-profiler.c: Ditto. >> * libgcc/Makefile.in: Add dependence to libgcov.h > > OK, with the licence changes and... >> >> Index: gcc/gcov-io.c >> =================================================================== >> --- gcc/gcov-io.c (revision 206100) >> +++ gcc/gcov-io.c (working copy) >> @@ -36,6 +36,61 @@ static const gcov_unsigned_t *gcov_read_words (uns >> static void gcov_allocate (unsigned); >> #endif >> >> +/* Optimum number of gcov_unsigned_t's read from or written to disk. */ >> +#define GCOV_BLOCK_SIZE (1 << 10) >> + >> +GCOV_LINKAGE struct gcov_var >> +{ >> + FILE *file; >> + gcov_position_t start; /* Position of first byte of block */ >> + unsigned offset; /* Read/write position within the block. */ >> + unsigned length; /* Read limit in the block. */ >> + unsigned overread; /* Number of words overread. */ >> + int error; /* < 0 overflow, > 0 disk error. */ >> + int mode; /* < 0 writing, > 0 reading */ >> +#if IN_LIBGCOV >> + /* Holds one block plus 4 bytes, thus all coverage reads & writes >> + fit within this buffer and we always can transfer GCOV_BLOCK_SIZE >> + to and from the disk. libgcov never backtracks and only writes 4 >> + or 8 byte objects. */ >> + gcov_unsigned_t buffer[GCOV_BLOCK_SIZE + 1]; >> +#else >> + int endian; /* Swap endianness. */ >> + /* Holds a variable length block, as the compiler can write >> + strings and needs to backtrack. */ >> + size_t alloc; >> + gcov_unsigned_t *buffer; >> +#endif >> +} gcov_var; >> + >> +/* Save the current position in the gcov file. */ >> +static inline gcov_position_t >> +gcov_position (void) >> +{ >> + gcc_assert (gcov_var.mode > 0); >> + return gcov_var.start + gcov_var.offset; >> +} >> + >> +/* Return nonzero if the error flag is set. */ >> +static inline int >> +gcov_is_error (void) >> +{ >> + return gcov_var.file ? gcov_var.error : 1; >> +} >> + >> +#if IN_LIBGCOV >> +/* Move to beginning of file and initialize for writing. */ >> +GCOV_LINKAGE inline void >> +gcov_rewrite (void) >> +{ >> + gcc_assert (gcov_var.mode > 0); > > I would turn those two asserts into checking asserts so they do not > bloat the runtime lib.
Ok, but note that there are a number of other gcc_assert already in gcov-io.c (these were the only 2 in gcov-io.h, now moved here). Should I go ahead and change all of them in gcov-io.c? Thanks, Teresa > > Thanks, > Honza -- Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413