| /* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. |
| Licensed under the Apache 2.0 License. */ |
| |
| #ifndef __KREMLIN_DEBUG_H |
| #define __KREMLIN_DEBUG_H |
| |
| #include <inttypes.h> |
| |
| #include "kremlin/internal/target.h" |
| |
| /******************************************************************************/ |
| /* Debugging helpers - intended only for KreMLin developers */ |
| /******************************************************************************/ |
| |
| /* In support of "-wasm -d force-c": we might need this function to be |
| * forward-declared, because the dependency on WasmSupport appears very late, |
| * after SimplifyWasm, and sadly, after the topological order has been done. */ |
| void WasmSupport_check_buffer_size(uint32_t s); |
| |
| /* A series of GCC atrocities to trace function calls (kremlin's [-d c-calls] |
| * option). Useful when trying to debug, say, Wasm, to compare traces. */ |
| /* clang-format off */ |
| #ifdef __GNUC__ |
| #define KRML_FORMAT(X) _Generic((X), \ |
| uint8_t : "0x%08" PRIx8, \ |
| uint16_t: "0x%08" PRIx16, \ |
| uint32_t: "0x%08" PRIx32, \ |
| uint64_t: "0x%08" PRIx64, \ |
| int8_t : "0x%08" PRIx8, \ |
| int16_t : "0x%08" PRIx16, \ |
| int32_t : "0x%08" PRIx32, \ |
| int64_t : "0x%08" PRIx64, \ |
| default : "%s") |
| |
| #define KRML_FORMAT_ARG(X) _Generic((X), \ |
| uint8_t : X, \ |
| uint16_t: X, \ |
| uint32_t: X, \ |
| uint64_t: X, \ |
| int8_t : X, \ |
| int16_t : X, \ |
| int32_t : X, \ |
| int64_t : X, \ |
| default : "unknown") |
| /* clang-format on */ |
| |
| # define KRML_DEBUG_RETURN(X) \ |
| ({ \ |
| __auto_type _ret = (X); \ |
| KRML_HOST_PRINTF("returning: "); \ |
| KRML_HOST_PRINTF(KRML_FORMAT(_ret), KRML_FORMAT_ARG(_ret)); \ |
| KRML_HOST_PRINTF(" \n"); \ |
| _ret; \ |
| }) |
| #endif |
| |
| #endif |