Skip to content

Commit

Permalink
[DebugInfo] Handle -main-file-name correctly for asm source.
Browse files Browse the repository at this point in the history
This option provides only the base filename, not a full relative path.

Part of the fix for PR41839.

Differential Revision: https://reviews.llvm.org/D62071

llvm-svn: 361245
  • Loading branch information
pogo59 committed May 21, 2019
1 parent 35150bb commit 116e8d4
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 21 deletions.
19 changes: 15 additions & 4 deletions llvm/lib/MC/MCContext.cpp
Expand Up @@ -582,10 +582,21 @@ void MCContext::setGenDwarfRootFile(StringRef InputFileName, StringRef Buffer) {
}
// Canonicalize the root filename. It cannot be empty, and should not
// repeat the compilation dir.
StringRef FileName =
!getMainFileName().empty() ? StringRef(getMainFileName()) : InputFileName;
if (FileName.empty() || FileName == "-")
FileName = "<stdin>";
// The MCContext ctor initializes MainFileName to the name associated with
// the SrcMgr's main file ID, which might be the same as InputFileName (and
// possibly include directory components).
// Or, MainFileName might have been overridden by a -main-file-name option,
// which is supposed to be just a base filename with no directory component.
// So, if the InputFileName and MainFileName are not equal, assume
// MainFileName is a substitute basename and replace the last component.
SmallString<1024> FileNameBuf = InputFileName;
if (FileNameBuf.empty() || FileNameBuf == "-")
FileNameBuf = "<stdin>";
if (!getMainFileName().empty() && FileNameBuf != getMainFileName()) {
llvm::sys::path::remove_filename(FileNameBuf);
llvm::sys::path::append(FileNameBuf, getMainFileName());
}
StringRef FileName = FileNameBuf;
if (FileName.consume_front(getCompilationDir()))
if (llvm::sys::path::is_separator(FileName.front()))
FileName = FileName.drop_front();
Expand Down
17 changes: 0 additions & 17 deletions llvm/test/DebugInfo/X86/main-file-name.s

This file was deleted.

41 changes: 41 additions & 0 deletions llvm/test/MC/ELF/debug-main-file.s
@@ -0,0 +1,41 @@
// RUN: mkdir -p %t/Inputs
// RUN: cp %s %t/base.s
// RUN: cp %s %t/Inputs/subdir.s
// RUN: cd %t

// RUN: llvm-mc -triple=x86_64-linux-unknown -filetype=obj -dwarf-version=4 \
// RUN: -g base.s -o %t1.o
// RUN: llvm-dwarfdump -debug-info %t1.o | \
// RUN: FileCheck %s --check-prefixes=CHECK,BASE
// RUN: llvm-mc -triple=x86_64-linux-unknown -filetype=obj -dwarf-version=4 \
// RUN: -g base.s -o %t2.o -main-file-name rename.s
// RUN: llvm-dwarfdump -debug-info %t2.o | \
// RUN: FileCheck %s --check-prefixes=CHECK,RENAME
// RUN: llvm-mc -triple=x86_64-linux-unknown -filetype=obj -dwarf-version=4 \
// RUN: -g Inputs\subdir.s -o %t3.o
// RUN: llvm-dwarfdump -debug-info %t3.o | \
// RUN: FileCheck %s --check-prefixes=CHECK,SUBDIR
// RUN: llvm-mc -triple=x86_64-linux-unknown -filetype=obj -dwarf-version=4 \
// RUN: -g Inputs\subdir.s -main-file-name sub-rename.s -o %t4.o
// RUN: llvm-dwarfdump -debug-info %t4.o | \
// RUN: FileCheck %s --check-prefixes=CHECK,SUB-RENAME

// CHECK: DW_TAG_compile_unit
// CHECK-NOT: DW_TAG
// CHECK: DW_AT_name
// BASE-SAME: ("base.s")
// RENAME-SAME: ("rename.s")
// SUBDIR-SAME: ("Inputs{{(/|\\)+}}subdir.s")
// SUB-RENAME-SAME: ("Inputs{{(/|\\)+}}sub-rename.s")

// CHECK: DW_TAG_label
// CHECK-NOT: DW_TAG
// CHECK: DW_AT_decl_file
// BASE-SAME: ("{{.*(/|\\)}}base.s")
// RENAME-SAME: ("{{.*(/|\\)}}rename.s")
// SUBDIR-SAME: ("{{.*Inputs(/|\\)+}}subdir.s")
// SUB-RENAME-SAME: ("{{.*Inputs(/|\\)+}}sub-rename.s")

.text
start:
nop

0 comments on commit 116e8d4

Please sign in to comment.