OSDN Git Service

Fixed a bug in the code to create a dwarf file and directory table entires when
authorKevin Enderby <enderby@apple.com>
Tue, 1 Nov 2011 23:39:05 +0000 (23:39 +0000)
committerKevin Enderby <enderby@apple.com>
Tue, 1 Nov 2011 23:39:05 +0000 (23:39 +0000)
it is separating the directory part from the basename of the FileName.  Noticed
that this:

  .file 1 "dir/foo"

when assembled got the two parts switched.  Using the Mac OS X dwarfdump tool
it can be seen easily:

% dwarfdump -a a.out
include_directories[  1] = 'foo'
                Dir  Mod Time   File Len   File Name
                ---- ---------- ---------- ---------------------------
file_names[  1]    1 0x00000000 0x00000000 dir
...

Which should be:
...
include_directories[  1] = 'dir'
                Dir  Mod Time   File Len   File Name
                ---- ---------- ---------- ---------------------------
file_names[  1]    1 0x00000000 0x00000000 foo

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143521 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCContext.cpp
test/MC/MachO/file.s [new file with mode: 0644]

index 814726e..a1a01e3 100644 (file)
@@ -273,8 +273,10 @@ unsigned MCContext::GetDwarfFile(StringRef Directory, StringRef FileName,
     // Separate the directory part from the basename of the FileName.
     std::pair<StringRef, StringRef> Slash = FileName.rsplit('/');
     Directory = Slash.second;
-    if (!Directory.empty())
-      FileName = Slash.first;
+    if (!Directory.empty()) {
+      Directory = Slash.first;
+      FileName = Slash.second;
+    }
   }
 
   // Find or make a entry in the MCDwarfDirs vector for this Directory.
diff --git a/test/MC/MachO/file.s b/test/MC/MachO/file.s
new file mode 100644 (file)
index 0000000..0168747
--- /dev/null
@@ -0,0 +1,22 @@
+// RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | macho-dump --dump-section-data | FileCheck %s
+
+        .file  1 "dir/foo"
+        nop
+
+// CHECK:         ('_section_data', '90')
+// CHECK-NEXT:      # Section 1
+// CHECK-NEXT:     (('section_name', '__debug_line\x00\x00\x00\x00')
+// CHECK-NEXT:      ('segment_name', '__DWARF\x00\x00\x00\x00\x00\x00\x00\x00\x00')
+// CHECK-NEXT:      ('address', 1)
+// CHECK-NEXT:      ('size', 45)
+// CHECK-NEXT:      ('offset', 221)
+// CHECK-NEXT:      ('alignment', 0)
+// CHECK-NEXT:      ('reloc_offset', 0)
+// CHECK-NEXT:      ('num_reloc', 0)
+// CHECK-NEXT:      ('flags', 0x2000000)
+// CHECK-NEXT:      ('reserved1', 0)
+// CHECK-NEXT:      ('reserved2', 0)
+// CHECK-NEXT:     ),
+// CHECK-NEXT:    ('_relocations', [
+// CHECK-NEXT:    ])
+// CHECK-NEXT:    ('_section_data', '29000000 02001e00 00000101 fb0e0d00 01010101 00000001 00000164 69720000 666f6f00 01000000 02000001 01')