diff --git a/src/asahi/lib/decode.c b/src/asahi/lib/decode.c index ac6aa479c88..e1b991840b8 100644 --- a/src/asahi/lib/decode.c +++ b/src/asahi/lib/decode.c @@ -14,8 +14,8 @@ #include #include +#include "util/u_hexdump.h" #include "decode.h" -#include "hexdump.h" #ifdef __APPLE__ #include "agx_iokit.h" #endif @@ -282,7 +282,7 @@ agxdecode_stateful(uint64_t va, const char *label, decode_cmd decoder, /* If we fail to decode, default to a hexdump (don't hang) */ if (count == 0) { - hexdump(agxdecode_dump_stream, map, 8, false); + u_hexdump(agxdecode_dump_stream, map, 8, false); count = 8; } @@ -389,7 +389,7 @@ agxdecode_usc(const uint8_t *map, UNUSED uint64_t *link, UNUSED bool verbose, DUMP_UNPACKED(USC_UNIFORM, temp, "Uniform\n"); uint8_t *raw = agxdecode_fetch_gpu_mem(temp.buffer, 2 * temp.size_halfs); - hexdump(agxdecode_dump_stream, raw, 2 * temp.size_halfs, false); + u_hexdump(agxdecode_dump_stream, raw, 2 * temp.size_halfs, false); return AGX_USC_UNIFORM_LENGTH; } @@ -401,7 +401,7 @@ agxdecode_usc(const uint8_t *map, UNUSED uint64_t *link, UNUSED bool verbose, default: fprintf(agxdecode_dump_stream, "Unknown USC control type: %u\n", type); - hexdump(agxdecode_dump_stream, map, 8, false); + u_hexdump(agxdecode_dump_stream, map, 8, false); return 8; } @@ -450,7 +450,7 @@ agxdecode_record(uint64_t va, size_t size, bool verbose) if (frag.cf_bindings) { uint8_t *cf = agxdecode_fetch_gpu_mem(frag.cf_bindings, 128); - hexdump(agxdecode_dump_stream, cf, 128, false); + u_hexdump(agxdecode_dump_stream, cf, 128, false); DUMP_CL(CF_BINDING_HEADER, cf, "Coefficient binding header:"); cf += AGX_CF_BINDING_HEADER_LENGTH; @@ -538,7 +538,7 @@ agxdecode_cdm(const uint8_t *map, uint64_t *link, bool verbose, default: fprintf(agxdecode_dump_stream, "Unknown CDM block type: %u\n", block_type); - hexdump(agxdecode_dump_stream, map, 8, false); + u_hexdump(agxdecode_dump_stream, map, 8, false); return 8; } } @@ -653,7 +653,7 @@ agxdecode_vdm(const uint8_t *map, uint64_t *link, bool verbose, default: fprintf(agxdecode_dump_stream, "Unknown VDM block type: %u\n", block_type); - hexdump(agxdecode_dump_stream, map, 8, false); + u_hexdump(agxdecode_dump_stream, map, 8, false); return 8; } } @@ -764,8 +764,8 @@ agxdecode_dump_mappings(unsigned map_handle) agx_alloc_types[mmap_array[i].type], mmap_array[i].ptr.gpu, mmap_array[i].handle); - hexdump(agxdecode_dump_stream, mmap_array[i].ptr.cpu, mmap_array[i].size, - false); + u_hexdump(agxdecode_dump_stream, mmap_array[i].ptr.cpu, + mmap_array[i].size, false); fprintf(agxdecode_dump_stream, "\n"); } } diff --git a/src/asahi/lib/hexdump.h b/src/asahi/lib/hexdump.h deleted file mode 100644 index bb74ff6563e..00000000000 --- a/src/asahi/lib/hexdump.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2021 Alyssa Rosenzweig - * SPDX-License-Identifier: MIT - */ - -#ifndef __HEXDUMP_H -#define __HEXDUMP_H - -#include - -static void -hexdump(FILE *fp, const uint8_t *hex, size_t cnt, bool with_strings) -{ - for (unsigned i = 0; i < cnt; ++i) { - if ((i & 0xF) == 0) - fprintf(fp, "%06X ", i); - - uint8_t v = hex[i]; - - if (v == 0 && (i & 0xF) == 0) { - /* Check if we're starting an aligned run of zeroes */ - unsigned zero_count = 0; - - for (unsigned j = i; j < cnt; ++j) { - if (hex[j] == 0) - zero_count++; - else - break; - } - - if (zero_count >= 32) { - fprintf(fp, "*\n"); - i += (zero_count & ~0xF) - 1; - continue; - } - } - - fprintf(fp, "%02X ", hex[i]); - if ((i & 0xF) == 0xF && with_strings) { - fprintf(fp, " | "); - for (unsigned j = i & ~0xF; j <= i; ++j) { - uint8_t c = hex[j]; - fputc((c < 32 || c > 128) ? '.' : c, fp); - } - } - - if ((i & 0xF) == 0xF) - fprintf(fp, "\n"); - } - - fprintf(fp, "\n"); -} - -#endif diff --git a/src/asahi/lib/wrap.c b/src/asahi/lib/wrap.c index 3ef58857261..741d0be451a 100644 --- a/src/asahi/lib/wrap.c +++ b/src/asahi/lib/wrap.c @@ -13,10 +13,10 @@ #include #include "util/compiler.h" +#include "util/u_hexdump.h" #include "agx_iokit.h" #include "decode.h" #include "dyld_interpose.h" -#include "hexdump.h" #include "util.h" /* @@ -137,7 +137,7 @@ wrap_Method(mach_port_t connection, uint32_t selector, const uint64_t *input, if (inputStructCnt) { printf(", struct:\n"); - hexdump(stdout, inputStruct, inputStructCnt, true); + u_hexdump(stdout, inputStruct, inputStructCnt, true); } else { printf("\n"); } @@ -241,12 +241,12 @@ wrap_Method(mach_port_t connection, uint32_t selector, const uint64_t *input, if (outputStructCntP) { printf(" struct\n"); - hexdump(stdout, outputStruct, *outputStructCntP, true); + u_hexdump(stdout, outputStruct, *outputStructCntP, true); if (selector == 2) { /* Dump linked buffer as well */ void **o = outputStruct; - hexdump(stdout, *o, 64, true); + u_hexdump(stdout, *o, 64, true); } } @@ -279,7 +279,7 @@ wrap_AsyncMethod(mach_port_t connection, uint32_t selector, if (inputStructCnt) { printf(", struct:\n"); - hexdump(stdout, inputStruct, inputStructCnt, true); + u_hexdump(stdout, inputStruct, inputStructCnt, true); } else { printf("\n"); } @@ -307,12 +307,12 @@ wrap_AsyncMethod(mach_port_t connection, uint32_t selector, if (outputStructCntP) { printf(" struct\n"); - hexdump(stdout, outputStruct, *outputStructCntP, true); + u_hexdump(stdout, outputStruct, *outputStructCntP, true); if (selector == 2) { /* Dump linked buffer as well */ void **o = outputStruct; - hexdump(stdout, *o, 64, true); + u_hexdump(stdout, *o, 64, true); } }