[llvm] r321907 - [DebugInfo] Align comments in debug_loc section
Bjorn Pettersson via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 5 14:20:30 PST 2018
Author: bjope
Date: Fri Jan 5 14:20:30 2018
New Revision: 321907
URL: http://llvm.org/viewvc/llvm-project?rev=321907&view=rev
Log:
[DebugInfo] Align comments in debug_loc section
Summary:
This commit updates the BufferByteStreamer, used by DebugLocStream
to buffer bytes/comments to put in the debug_loc section, to
make sure that the Buffer and Comments vectors are synced.
Previously, when an SLEB128 or ULEB128 was emitted together with
a comment, the vectors could be out-of-sync if the LEB encoding
added several entries to the Buffer vectors, while we only added
a single entry to the Comments vector.
The goal with this is to get the comments in the debug_loc
section in the .s file correctly aligned.
Example (using ARM as target):
Instead of
.byte 144 @ sub-register DW_OP_regx
.byte 128 @ 256
.byte 2 @ DW_OP_piece
.byte 147 @ 8
.byte 8 @ sub-register DW_OP_regx
.byte 144 @ 257
.byte 129 @ DW_OP_piece
.byte 2 @ 8
.byte 147 @
.byte 8 @
we now get
.byte 144 @ sub-register DW_OP_regx
.byte 128 @ 256
.byte 2 @
.byte 147 @ DW_OP_piece
.byte 8 @ 8
.byte 144 @ sub-register DW_OP_regx
.byte 129 @ 257
.byte 2 @
.byte 147 @ DW_OP_piece
.byte 8 @ 8
Reviewers: JDevlieghere, rnk, aprantl
Reviewed By: aprantl
Subscribers: davide, Ka-Ka, uabelho, aemerson, javed.absar, kristof.beyls, llvm-commits, JDevlieghere
Differential Revision: https://reviews.llvm.org/D41763
Modified:
llvm/trunk/include/llvm/Support/LEB128.h
llvm/trunk/lib/CodeGen/AsmPrinter/ByteStreamer.h
llvm/trunk/test/CodeGen/ARM/debug-info-qreg.ll
llvm/trunk/test/DebugInfo/X86/dw_op_minus.ll
Modified: llvm/trunk/include/llvm/Support/LEB128.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/LEB128.h?rev=321907&r1=321906&r2=321907&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/LEB128.h (original)
+++ llvm/trunk/include/llvm/Support/LEB128.h Fri Jan 5 14:20:30 2018
@@ -19,9 +19,10 @@
namespace llvm {
-/// Utility function to encode a SLEB128 value to an output stream.
-inline void encodeSLEB128(int64_t Value, raw_ostream &OS,
- unsigned PadTo = 0) {
+/// Utility function to encode a SLEB128 value to an output stream. Returns
+/// the length in bytes of the encoded value.
+inline unsigned encodeSLEB128(int64_t Value, raw_ostream &OS,
+ unsigned PadTo = 0) {
bool More;
unsigned Count = 0;
do {
@@ -42,7 +43,9 @@ inline void encodeSLEB128(int64_t Value,
for (; Count < PadTo - 1; ++Count)
OS << char(PadValue | 0x80);
OS << char(PadValue);
+ Count++;
}
+ return Count;
}
/// Utility function to encode a SLEB128 value to a buffer. Returns
@@ -73,9 +76,10 @@ inline unsigned encodeSLEB128(int64_t Va
return (unsigned)(p - orig_p);
}
-/// Utility function to encode a ULEB128 value to an output stream.
-inline void encodeULEB128(uint64_t Value, raw_ostream &OS,
- unsigned PadTo = 0) {
+/// Utility function to encode a ULEB128 value to an output stream. Returns
+/// the length in bytes of the encoded value.
+inline unsigned encodeULEB128(uint64_t Value, raw_ostream &OS,
+ unsigned PadTo = 0) {
unsigned Count = 0;
do {
uint8_t Byte = Value & 0x7f;
@@ -93,6 +97,7 @@ inline void encodeULEB128(uint64_t Value
OS << '\x00';
Count++;
}
+ return Count;
}
/// Utility function to encode a ULEB128 value to a buffer. Returns
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/ByteStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/ByteStreamer.h?rev=321907&r1=321906&r2=321907&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/ByteStreamer.h (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/ByteStreamer.h Fri Jan 5 14:20:30 2018
@@ -93,15 +93,27 @@ public:
}
void EmitSLEB128(uint64_t DWord, const Twine &Comment) override {
raw_svector_ostream OSE(Buffer);
- encodeSLEB128(DWord, OSE);
- if (GenerateComments)
+ unsigned Length = encodeSLEB128(DWord, OSE);
+ if (GenerateComments) {
Comments.push_back(Comment.str());
+ // Add some empty comments to keep the Buffer and Comments vectors aligned
+ // with each other.
+ for (size_t i = 1; i < Length; ++i)
+ Comments.push_back("");
+
+ }
}
void EmitULEB128(uint64_t DWord, const Twine &Comment) override {
raw_svector_ostream OSE(Buffer);
- encodeULEB128(DWord, OSE);
- if (GenerateComments)
+ unsigned Length = encodeULEB128(DWord, OSE);
+ if (GenerateComments) {
Comments.push_back(Comment.str());
+ // Add some empty comments to keep the Buffer and Comments vectors aligned
+ // with each other.
+ for (size_t i = 1; i < Length; ++i)
+ Comments.push_back("");
+
+ }
}
};
Modified: llvm/trunk/test/CodeGen/ARM/debug-info-qreg.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/debug-info-qreg.ll?rev=321907&r1=321906&r2=321907&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/debug-info-qreg.ll (original)
+++ llvm/trunk/test/CodeGen/ARM/debug-info-qreg.ll Fri Jan 5 14:20:30 2018
@@ -4,10 +4,12 @@ target triple = "thumbv7-apple-macosx10.
;CHECK: sub-register DW_OP_regx
;CHECK-NEXT: 256
+;CHECK-NEXT: @
;CHECK-NEXT: DW_OP_piece
;CHECK-NEXT: 8
;CHECK-NEXT: sub-register DW_OP_regx
;CHECK-NEXT: 257
+;CHECK-NEXT: @
;CHECK-NEXT: DW_OP_piece
;CHECK-NEXT: 8
Modified: llvm/trunk/test/DebugInfo/X86/dw_op_minus.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dw_op_minus.ll?rev=321907&r1=321906&r2=321907&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/dw_op_minus.ll (original)
+++ llvm/trunk/test/DebugInfo/X86/dw_op_minus.ll Fri Jan 5 14:20:30 2018
@@ -76,5 +76,5 @@ declare void @Capture(i32*)
; CHECK-NEXT: .byte 6 # DW_OP_deref
; CHECK-NEXT: .byte 16 # DW_OP_constu
; CHECK-NEXT: .byte 144 # 400
-; CHECK-NEXT: .byte 3 # DW_OP_minus
-; CHECK-NEXT: .byte 28
+; CHECK-NEXT: .byte 3 #
+; CHECK-NEXT: .byte 28 # DW_OP_minus
More information about the llvm-commits
mailing list