[llvm-commits] CVS: llvm/lib/System/Path.cpp

Reid Spencer reid at x10sys.com
Tue Apr 3 23:30:43 PDT 2007



Changes in directory llvm/lib/System:

Path.cpp updated: 1.21 -> 1.22
---
Log message:

For PR1302: http://llvm.org/PR1302 :
Implement recognition of COFF, ELF and Mach-O object/shared lib files.


---
Diffs of the changes:  (+38 -9)

 Path.cpp |   47 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 38 insertions(+), 9 deletions(-)


Index: llvm/lib/System/Path.cpp
diff -u llvm/lib/System/Path.cpp:1.21 llvm/lib/System/Path.cpp:1.22
--- llvm/lib/System/Path.cpp:1.21	Wed Jul 26 11:55:39 2006
+++ llvm/lib/System/Path.cpp	Wed Apr  4 01:30:26 2007
@@ -44,25 +44,54 @@
   assert(length >=4 && "Invalid magic number length");
   switch (magic[0]) {
     case 'l':
-      if (magic[1] == 'l' && magic[2] == 'v') {
+      if (magic[1] == 'l' && magic[2] == 'v')
         if (magic[3] == 'c')
-          return CompressedBytecodeFileType;
+          return CompressedBytecode_FileType;
         else if (magic[3] == 'm')
-          return BytecodeFileType;
-      }
+          return Bytecode_FileType;
       break;
-
     case '!':
-      if (length >= 8) {
+      if (length >= 8)
         if (memcmp(magic,"!<arch>\n",8) == 0)
-          return ArchiveFileType;
-      }
+          return Archive_FileType;
+      break;
+      
+    case '\177':
+      if (magic[1] == 'E' && magic[2] == 'L' && magic[3] == 'F')
+        return ELF_FileType;
+      break;
+
+    case 0xCE:
+    case 0xCF:
+      // This is complicated by an overlap with Java class files. 
+      // See the Mach-O section in /usr/share/file/magic for details.
+      if (magic[1] == char(0xFA) && magic[2] == char(0xED) && 
+          magic[3] == char(0xFE))
+        if (length >= 15)
+          if (magic[15] == 1 || magic[15] == 3 || magic[15] == 6 || 
+              magic[15] == 9)
+            return Mach_O_FileType;
+      break;
+
+    case 0xF0: // PowerPC Windows
+    case 0x83: // Alpha 32-bit
+    case 0x84: // Alpha 64-bit
+    case 0x66: // MPS R4000 Windows
+    case 0x50: // mc68K
+    case 0x4c: // 80386 Windows
+      if (magic[1] == 0x01)
+        return COFF_FileType;
+
+    case 0x90: // PA-RISC Windows
+    case 0x68: // mc68K Windows
+      if (magic[1] == 0x02)
+        return COFF_FileType;
       break;
 
     default:
       break;
   }
-  return UnknownFileType;
+  return Unknown_FileType;
 }
 
 bool






More information about the llvm-commits mailing list