/** @file Copyright (c) 2020, PMheart. All rights reserved. SPDX-License-Identifier: BSD-3-Clause **/ #include #include #include #ifdef COVERAGE_TEST #if defined(__clang__) void __wrap_llvm_gcda_emit_arcs (uint32_t num_counters, uint64_t *counters) { uint32_t i; uint64_t *old_ctrs = NULL; old_ctrs = malloc (num_counters * sizeof (uint64_t)); if (old_ctrs == NULL) { return; } memcpy (old_ctrs, counters, num_counters * sizeof (uint64_t)); __real_llvm_gcda_emit_arcs (num_counters, counters); for (i = 0; i < num_counters; ++i) { if ((old_ctrs[i] == counters[i]) && (counters[i] > 0)) { fprintf(stdout, "CoverageHit\n"); } } free (old_ctrs); } #elif defined (__GNUC__) void __gcov_merge_add (gcov_type *counters, unsigned n_counters) { gcov_type prev; for (; n_counters; counters++, n_counters--) { prev = __gcov_read_counter (); if (prev == 0 && *counters > 0) { fprintf (stdout, "CoverageHit\n"); } *counters += prev; } } #endif #endif UINT8 * UserReadFile ( IN CONST CHAR8 *FileName, OUT UINT32 *Size ) { FILE *FilePtr; INT64 FileSize; UINT8 *Buffer; ASSERT (FileName != NULL); ASSERT (Size != NULL); FilePtr = fopen (FileName, "rb"); if (FilePtr == NULL) { return NULL; } fseek (FilePtr, 0, SEEK_END); FileSize = ftell (FilePtr); fseek (FilePtr, 0, SEEK_SET); Buffer = AllocatePool (FileSize + 1); if (Buffer == NULL || (FileSize > 0 && fread (Buffer, FileSize, 1, FilePtr) != 1)) { abort (); } fclose (FilePtr); Buffer[FileSize] = 0; *Size = FileSize; return Buffer; } VOID UserWriteFile ( IN CONST CHAR8 *FileName, IN VOID *Data, IN UINT32 Size ) { FILE *FilePtr; FilePtr = fopen (FileName, "wb"); if (FilePtr == NULL) { abort (); } if (fwrite (Data, Size, 1, FilePtr) != 1) { abort (); } fclose (FilePtr); }