[PATCH] D90199: [CodeView] Encode signed int values correctly when emitting S_CONSTANTs
Amy Huang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 29 11:31:41 PDT 2020
akhuang updated this revision to Diff 301699.
akhuang added a comment.
rebase
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90199/new/
https://reviews.llvm.org/D90199
Files:
llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
llvm/test/DebugInfo/COFF/global-constants.ll
llvm/test/DebugInfo/COFF/globals.ll
Index: llvm/test/DebugInfo/COFF/globals.ll
===================================================================
--- llvm/test/DebugInfo/COFF/globals.ll
+++ llvm/test/DebugInfo/COFF/globals.ll
@@ -86,19 +86,19 @@
; ASM: .short 4359 # Record kind: S_CONSTANT
; ASM-NEXT: .long 4100 # Type
-; ASM-NEXT: .byte 0x08, 0x00 # Value
+; ASM-NEXT: .byte 0x00, 0x80, 0x08 # Value
; ASM-NEXT: .asciz "foo::constExpr" # Name
; ASM-NEXT: .p2align 2
; ASM: .short 4359 # Record kind: S_CONSTANT
; ASM-NEXT: .long 4100 # Type
-; ASM-NEXT: .byte 0x09, 0x00 # Value
+; ASM-NEXT: .byte 0x00, 0x80, 0x09 # Value
; ASM-NEXT: .asciz "foo::constVal" # Name
; ASM-NEXT: .p2align 2
; ASM: .short 4359 # Record kind: S_CONSTANT
; ASM-NEXT: .long 4100 # Type
-; ASM-NEXT: .byte 0x0e, 0x00 # Value
+; ASM-NEXT: .byte 0x00, 0x80, 0x0e # Value
; ASM-NEXT: .asciz "foo::Data::DataConstExpr" # Name
; ASM-NEXT: .p2align 2
Index: llvm/test/DebugInfo/COFF/global-constants.ll
===================================================================
--- llvm/test/DebugInfo/COFF/global-constants.ll
+++ llvm/test/DebugInfo/COFF/global-constants.ll
@@ -37,9 +37,8 @@
; ASM: .short 4359 # Record kind: S_CONSTANT
; ASM-NEXT: .long 4101 # Type
-; ASM-NEXT: .byte 0x0a, 0x80, 0x40, 0x61 # Value
-; ASM-NEXT: .byte 0x07, 0x80, 0xff, 0xff
-; ASM-NEXT: .byte 0xff, 0xff
+; ASM-NEXT: .byte 0x03, 0x80, 0x40, 0x61 # Value
+; ASM-NEXT: .byte 0x07, 0x80
; ASM-NEXT: .asciz "ENUM_B" # Name
; ASM-NEXT: .p2align 2
; ASM-NOT: .asciz "S::SEnum" # Name
@@ -64,7 +63,7 @@
; OBJ-NEXT: ConstantSym {
; OBJ-NEXT: Kind: S_CONSTANT (0x1107)
; OBJ-NEXT: Type: TestEnum (0x1005)
-; OBJ-NEXT: Value: 18446744071562551616
+; OBJ-NEXT: Value: -214700000
; OBJ-NEXT: Name: ENUM_B
; OBJ-NEXT: }
; OBJ-NOT: Name: S::SEnum
Index: llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
===================================================================
--- llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
+++ llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
@@ -3191,7 +3191,8 @@
const DIExpression *DIE = CVGV.GVInfo.get<const DIExpression *>();
assert(DIE->isConstant() &&
"Global constant variables must contain a constant expression.");
- uint64_t Val = DIE->getElement(1);
+ APSInt Value(APInt(/*BitWidth=*/64, DIE->getElement(1)),
+ DebugHandlerBase::isUnsignedDIType(DIGV->getType()));
MCSymbol *SConstantEnd = beginSymbolRecord(SymbolKind::S_CONSTANT);
OS.AddComment("Type");
@@ -3202,7 +3203,7 @@
uint8_t data[10];
BinaryStreamWriter Writer(data, llvm::support::endianness::little);
CodeViewRecordIO IO(Writer);
- cantFail(IO.mapEncodedInteger(Val));
+ cantFail(IO.mapEncodedInteger(Value));
StringRef SRef((char *)data, Writer.getOffset());
OS.emitBinaryData(SRef);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90199.301699.patch
Type: text/x-patch
Size: 3205 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201029/2f95bedf/attachment.bin>
More information about the llvm-commits
mailing list