Skip to content

Commit

Permalink
Add support for generating dwarf debugging info with assembly files
Browse files Browse the repository at this point in the history
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
  • Loading branch information
enderby committed Nov 1, 2012
1 parent b6843c2 commit 938482f
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 2 deletions.
21 changes: 19 additions & 2 deletions lib/MC/MCParser/AsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
Expand Down
22 changes: 22 additions & 0 deletions test/MC/MachO/gen-dwarf-cpp.s
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 938482f

Please sign in to comment.