[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