Add support for generating dwarf debugging info with assembly files

run through the 'C' preprocessor.  That is pick up the file name
and line numbers from the cpp hash file line comments for the
dwarf file and line numbers tables.

rdar://9275556



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167237 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Kevin Enderby 2012-11-01 17:31:35 +00:00
parent b6843c28ec
commit 938482f522
2 changed files with 41 additions and 2 deletions

View File

@ -1389,9 +1389,26 @@ bool AsmParser::ParseStatement(ParseStatementInfo &Info) {
// the instruction.
if (!HadError && getContext().getGenDwarfForAssembly() &&
getContext().getGenDwarfSection() == getStreamer().getCurrentSection() ) {
unsigned Line = SrcMgr.FindLineNumber(IDLoc, CurBuffer);
// If we previously parsed a cpp hash file line comment then make sure the
// current Dwarf File is for the CppHashFilename if not then emit the
// Dwarf File table for it and adjust the line number for the .loc.
const std::vector<MCDwarfFile *> &MCDwarfFiles =
getContext().getMCDwarfFiles();
if (CppHashFilename.size() != 0) {
if(MCDwarfFiles[getContext().getGenDwarfFileNumber()]->getName() !=
CppHashFilename)
getStreamer().EmitDwarfFileDirective(
getContext().nextGenDwarfFileNumber(), StringRef(), CppHashFilename);
unsigned CppHashLocLineNo = SrcMgr.FindLineNumber(CppHashLoc, CurBuffer);
Line = CppHashLineNumber - 1 + (Line - CppHashLocLineNo);
}
getStreamer().EmitDwarfLocDirective(getContext().getGenDwarfFileNumber(),
SrcMgr.FindLineNumber(IDLoc, CurBuffer),
0, DWARF2_LINE_DEFAULT_IS_STMT ?
Line, 0, DWARF2_LINE_DEFAULT_IS_STMT ?
DWARF2_FLAG_IS_STMT : 0, 0, 0,
StringRef());
}

View File

@ -0,0 +1,22 @@
// RUN: llvm-mc -g -triple i386-apple-darwin10 %s -filetype=obj -o %t
// RUN: llvm-dwarfdump %t | FileCheck %s
# 100 "t.s" 1
.globl _bar
_bar:
movl $0, %eax
L1: leave
ret
// rdar://9275556
// We check that the source name "t.s" is picked up
// CHECK: Dir Mod Time File Len File Name
// CHECK: ---- ---------- ---------- ---------------------------
// CHECK: file_names[ 1] 1 0x00000000 0x00000000 gen-dwarf-cpp.s
// CHECK: file_names[ 2] 0 0x00000000 0x00000000 t.s
// We check that the source line number 100 is picked up before the "movl"
// CHECK: Address Line Column File ISA Flags
// CHECK: ------------------ ------ ------ ------ --- -------------
// CHECK: 0x0000000000000000 102 0 2 0 is_stmt