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