Lines Matching full:magic
1 //===- llvm/BinaryFormat/Magic.cpp - File magic identification --*- C++ -*-===//
9 #include "llvm/BinaryFormat/Magic.h"
28 static bool startswith(StringRef Magic, const char (&S)[N]) { in startswith() argument
29 return Magic.starts_with(StringRef(S, N - 1)); in startswith()
32 /// Identify the magic in magic.
33 file_magic llvm::identify_magic(StringRef Magic) { in identify_magic() argument
34 if (Magic.size() < 4) in identify_magic()
36 switch ((unsigned char)Magic[0]) { in identify_magic()
39 if (startswith(Magic, "\0\0\xFF\xFF")) { in identify_magic()
42 if (Magic.size() < MinSize) in identify_magic()
45 const char *Start = Magic.data() + offsetof(COFF::BigObjHeader, UUID); in identify_magic()
53 if (Magic.size() >= sizeof(COFF::WinResMagic) && in identify_magic()
54 memcmp(Magic.data(), COFF::WinResMagic, sizeof(COFF::WinResMagic)) == 0) in identify_magic()
57 if (Magic[1] == 0) in identify_magic()
59 if (startswith(Magic, "\0asm")) in identify_magic()
66 if (startswith(Magic, "\x01\xDF")) in identify_magic()
68 if (startswith(Magic, "\x01\xF7")) in identify_magic()
73 if (startswith(Magic, "\x03\xF0\x00")) in identify_magic()
76 if (startswith(Magic, "\x03\x02\x23\x07")) in identify_magic()
81 if (startswith(Magic, "\x07\x23\x02\x03")) in identify_magic()
86 if (startswith(Magic, "\x10\xFF\x10\xAD")) in identify_magic()
91 if (startswith(Magic, "\xDE\xC0\x17\x0B")) in identify_magic()
95 if (startswith(Magic, "BC\xC0\xDE")) in identify_magic()
99 if (startswith(Magic, "CCOB")) in identify_magic()
101 if (startswith(Magic, "CPCH")) in identify_magic()
105 if (startswith(Magic, "!<arch>\n") || startswith(Magic, "!<thin>\n")) in identify_magic()
109 if (startswith(Magic, "<bigaf>\n")) in identify_magic()
113 if (startswith(Magic, "\177ELF") && Magic.size() >= 18) { in identify_magic()
114 bool Data2MSB = Magic[5] == 2; in identify_magic()
117 if (Magic[high] == 0) { in identify_magic()
118 switch (Magic[low]) { in identify_magic()
137 if (startswith(Magic, "\xCA\xFE\xBA\xBE") || in identify_magic()
138 startswith(Magic, "\xCA\xFE\xBA\xBF")) { in identify_magic()
140 // See the Mach-O section in /usr/share/file/magic for details. in identify_magic()
141 if (Magic.size() >= 8 && Magic[7] < 43) in identify_magic()
146 // The two magic numbers for mach-o are: in identify_magic()
153 if (startswith(Magic, "\xFE\xED\xFA\xCE") || in identify_magic()
154 startswith(Magic, "\xFE\xED\xFA\xCF")) { in identify_magic()
157 if (Magic[3] == char(0xCE)) in identify_magic()
161 if (Magic.size() >= MinSize) in identify_magic()
162 type = Magic[12] << 24 | Magic[13] << 12 | Magic[14] << 8 | Magic[15]; in identify_magic()
163 } else if (startswith(Magic, "\xCE\xFA\xED\xFE") || in identify_magic()
164 startswith(Magic, "\xCF\xFA\xED\xFE")) { in identify_magic()
167 if (Magic[0] == char(0xCE)) in identify_magic()
171 if (Magic.size() >= MinSize) in identify_magic()
172 type = Magic[15] << 24 | Magic[14] << 12 | Magic[13] << 8 | Magic[12]; in identify_magic()
209 if (startswith(Magic, "\x50\xed\x55\xba")) in identify_magic()
215 if (Magic[1] == 0x01) in identify_magic()
221 if (Magic[1] == 0x02) in identify_magic()
227 if (startswith(Magic, "MZ") && Magic.size() >= 0x3c + 4) { in identify_magic()
228 uint32_t off = read32le(Magic.data() + 0x3c); in identify_magic()
230 if (Magic.substr(off).starts_with( in identify_magic()
234 if (Magic.starts_with("Microsoft C/C++ MSF 7.00\r\n")) in identify_magic()
236 if (startswith(Magic, "MDMP")) in identify_magic()
241 if (Magic[1] == char(0x86) || Magic[1] == char(0xaa)) in identify_magic()
246 if (startswith(Magic, "--- !tapi") || startswith(Magic, "---\narchs:")) in identify_magic()
254 if (startswith(Magic, "DXBC")) in identify_magic()
259 if (Magic[1] == char(0xA6)) in identify_magic()
264 if (Magic[1] == char(0xA6)) in identify_magic()
270 if (Magic.size() >= sizeof(OBMagic) && startswith(Magic, OBMagic)) in identify_magic()