From 65541eaf91b49c6eaf25a0610e9c983814f96f1c Mon Sep 17 00:00:00 2001 From: Nikita Smith Date: Sun, 12 Jul 2026 23:13:51 -0700 Subject: [PATCH] LLVM BC magic sniffer --- src/llvm/llvm.c | 21 +++++++++++++++++++++ src/llvm/llvm.h | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/llvm/llvm.c b/src/llvm/llvm.c index f5a0f364..581ebe71 100644 --- a/src/llvm/llvm.c +++ b/src/llvm/llvm.c @@ -22,3 +22,24 @@ llvm_hash_size_from_alg(LLVM_GHashAlg v) } return 0; } + +internal B32 +llvm_is_bitcode(String8 data) +{ + if (data.size < 4) { + return 0; + } + + // raw LLVM bitcode magic + if (data.str[0] == 'B' && data.str[1] == 'C' && data.str[2] == 0xc0 && data.str[3] == 0xde) { + return 1; + } + + // LLVM bitcode wrapper magic + if (data.str[0] == 0xde && data.str[1] == 0xc0 && data.str[2] == 0x17 && data.str[3] == 0x0b) { + return 1; + } + + return 0; +} + diff --git a/src/llvm/llvm.h b/src/llvm/llvm.h index 0ddc399f..34ba614b 100644 --- a/src/llvm/llvm.h +++ b/src/llvm/llvm.h @@ -25,6 +25,6 @@ typedef struct LLVM_GHash internal String8 llvm_string_from_ghash_alg(LLVM_GHashAlg v); internal U64 llvm_hash_size_from_alg(LLVM_GHashAlg v); +internal B32 llvm_is_bitcode(String8 data); #endif // LLVM_H -