diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-11-13 01:06:27 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-11-13 01:06:27 +0000 |
commit | 1d37f35eeaf3e31ab40147257789d380725ec5bc (patch) | |
tree | bc397dc927555b5c07ae731ffb09f0a3e2b01189 | |
parent | 573411b53976bc7efaef0cf54f850222623729c3 (diff) | |
download | bcm5719-llvm-1d37f35eeaf3e31ab40147257789d380725ec5bc.tar.gz bcm5719-llvm-1d37f35eeaf3e31ab40147257789d380725ec5bc.zip |
Fix the encoding of negative line deltas.
llvm-svn: 118962
-rw-r--r-- | llvm/lib/MC/MCDwarf.cpp | 2 | ||||
-rw-r--r-- | llvm/test/MC/ELF/debug-loc.s | 32 |
2 files changed, 33 insertions, 1 deletions
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp index c646529645b..679f4eeec1f 100644 --- a/llvm/lib/MC/MCDwarf.cpp +++ b/llvm/lib/MC/MCDwarf.cpp @@ -179,7 +179,7 @@ static inline void EmitDwarfLineTable(MCObjectStreamer *MCOS, if (it->getFlags() & DWARF2_FLAG_EPILOGUE_BEGIN) MCOS->EmitIntValue(dwarf::DW_LNS_set_epilogue_begin, 1); - int64_t LineDelta = it->getLine() - LastLine; + int64_t LineDelta = static_cast<int64_t>(it->getLine()) - LastLine; MCSymbol *Label = it->getLabel(); // At this point we want to emit/create the sequence to encode the delta in diff --git a/llvm/test/MC/ELF/debug-loc.s b/llvm/test/MC/ELF/debug-loc.s new file mode 100644 index 00000000000..36ae485ef06 --- /dev/null +++ b/llvm/test/MC/ELF/debug-loc.s @@ -0,0 +1,32 @@ +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | elf-dump | FileCheck %s + +// Test that we don't regress on the size of the line info section. We used +// to handle negative line diffs incorrectly which manifested as very +// large integers being passed to DW_LNS_advance_line. + +// FIXME: This size is the same as gnu as, but we can probably do a bit better. +// FIXME2: We need a debug_line dumper so that we can test the actual contents. + +// CHECK: # Section 0x00000004 +// CHECK-NEXT: (('sh_name', 0x00000012) # '.debug_line' +// CHECK-NEXT: ('sh_type', 0x00000001) +// CHECK-NEXT: ('sh_flags', 0x00000000) +// CHECK-NEXT: ('sh_addr', 0x00000000) +// CHECK-NEXT: ('sh_offset', 0x00000044) +// CHECK-NEXT: ('sh_size', 0x0000003d) +// CHECK-NEXT: ('sh_link', 0x00000000) +// CHECK-NEXT: ('sh_info', 0x00000000) +// CHECK-NEXT: ('sh_addralign', 0x00000001) +// CHECK-NEXT: ('sh_entsize', 0x00000000) +// CHECK-NEXT: ), + + .section .debug_line,"",@progbits + .text +foo: + .file 1 "Driver.ii" + .loc 1 2 0 + nop + .loc 1 4 0 + nop + .loc 1 3 0 + nop |