From eea989a909a3c963a1e99d7e75eb94f25d2bf9fb Mon Sep 17 00:00:00 2001 From: Philip Reames Date: Sat, 13 Apr 2019 03:08:45 +0000 Subject: [PATCH] [StackMaps] Add location size to llvm-readobj -stackmap output The size field of a location can be different for each entry, so it is useful to have this displayed in the output of llvm-readobj -stackmap. Below is an example of how the output would look: Record ID: 2882400000, instruction offset: 16 3 locations: #1: Constant 1, size: 8 #2: Constant 2, size: 8 #3: Constant 3, size: 8 0 live-outs: [ ] Patch By: jacob.hughes@kcl.ac.uk (with heavy modification by me) Differential Revision: https://reviews.llvm.org/D59169 llvm-svn: 358324 --- llvm/include/llvm/Object/StackMapParser.h | 2 +- llvm/test/Object/stackmap-dump.test | 132 +++++++++++----------- llvm/tools/llvm-readobj/StackMapPrinter.h | 12 +- 3 files changed, 73 insertions(+), 73 deletions(-) diff --git a/llvm/include/llvm/Object/StackMapParser.h b/llvm/include/llvm/Object/StackMapParser.h index 602d2f5383054..0aad9148c291c 100644 --- a/llvm/include/llvm/Object/StackMapParser.h +++ b/llvm/include/llvm/Object/StackMapParser.h @@ -116,7 +116,7 @@ class StackMapParser { } /// Get the Size for this location. - uint8_t getSize() const { + unsigned getSizeInBytes() const { return read(P + SizeOffset); } diff --git a/llvm/test/Object/stackmap-dump.test b/llvm/test/Object/stackmap-dump.test index 5d7d8ccbb677e..3c632b836787b 100644 --- a/llvm/test/Object/stackmap-dump.test +++ b/llvm/test/Object/stackmap-dump.test @@ -29,123 +29,123 @@ CHECK-NEXT: #3: 4294967296 CHECK-NEXT: Num Records: 20 CHECK-NEXT: Record ID: 1, instruction offset: 4 CHECK-NEXT: 12 locations: -CHECK-NEXT: #1: Constant 4294967295 -CHECK-NEXT: #2: Constant 4294967295 -CHECK-NEXT: #3: Constant 65536 -CHECK-NEXT: #4: Constant 2000000000 -CHECK-NEXT: #5: Constant 2147483647 -CHECK-NEXT: #6: Constant 4294967295 -CHECK-NEXT: #7: Constant 4294967295 -CHECK-NEXT: #8: Constant 0 -CHECK-NEXT: #9: ConstantIndex #0 (2147483648) -CHECK-NEXT: #10: ConstantIndex #1 (4294967295) -CHECK-NEXT: #11: ConstantIndex #2 (4294967296) -CHECK-NEXT: #12: Constant 4294967295 +CHECK-NEXT: #1: Constant 4294967295, size: 8 +CHECK-NEXT: #2: Constant 4294967295, size: 8 +CHECK-NEXT: #3: Constant 65536, size: 8 +CHECK-NEXT: #4: Constant 2000000000, size: 8 +CHECK-NEXT: #5: Constant 2147483647, size: 8 +CHECK-NEXT: #6: Constant 4294967295, size: 8 +CHECK-NEXT: #7: Constant 4294967295, size: 8 +CHECK-NEXT: #8: Constant 0, size: 8 +CHECK-NEXT: #9: ConstantIndex #0 (2147483648), size: 8 +CHECK-NEXT: #10: ConstantIndex #1 (4294967295), size: 8 +CHECK-NEXT: #11: ConstantIndex #2 (4294967296), size: 8 +CHECK-NEXT: #12: Constant 4294967295, size: 8 CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ] CHECK: Record ID: 3, instruction offset: 22 CHECK-NEXT: 2 locations: -CHECK-NEXT: #1: Register R#3 -CHECK-NEXT: #2: Register R#14 +CHECK-NEXT: #1: Register R#3, size: 8 +CHECK-NEXT: #2: Register R#14, size: 8 CHECK-NEXT: 0 live-outs: [ ] CHECK: Record ID: 4, instruction offset: 10 CHECK-NEXT: 2 locations: -CHECK-NEXT: #1: Register R#5 -CHECK-NEXT: #2: Register R#4 +CHECK-NEXT: #1: Register R#5, size: 8 +CHECK-NEXT: #2: Register R#4, size: 8 CHECK-NEXT: 0 live-outs: [ ] CHECK: Record ID: 5, instruction offset: 4 CHECK-NEXT: 2 locations: -CHECK-NEXT: #1: Register R#0 -CHECK-NEXT: #2: Register R#5 +CHECK-NEXT: #1: Register R#0, size: 8 +CHECK-NEXT: #2: Register R#5, size: 8 CHECK-NEXT: 2 live-outs: [ R#0 (8-bytes) R#7 (8-bytes) ] CHECK: Record ID: 6, instruction offset: 4 CHECK-NEXT: 2 locations: -CHECK-NEXT: #1: Register R#4 -CHECK-NEXT: #2: Register R#2 +CHECK-NEXT: #1: Register R#4, size: 8 +CHECK-NEXT: #2: Register R#2, size: 8 CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ] CHECK: Record ID: 7, instruction offset: 10 CHECK-NEXT: 2 locations: -CHECK-NEXT: #1: Register R#2 -CHECK-NEXT: #2: Register R#8 +CHECK-NEXT: #1: Register R#2, size: 8 +CHECK-NEXT: #2: Register R#8, size: 8 CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ] CHECK: Record ID: 8, instruction offset: 10 CHECK-NEXT: 2 locations: -CHECK-NEXT: #1: Register R#2 -CHECK-NEXT: #2: Register R#8 +CHECK-NEXT: #1: Register R#2, size: 8 +CHECK-NEXT: #2: Register R#8, size: 8 CHECK-NEXT: 2 live-outs: [ R#0 (8-bytes) R#7 (8-bytes) ] CHECK: Record ID: 11, instruction offset: 42 CHECK-NEXT: 17 locations: -CHECK-NEXT: #1: Register R#9 -CHECK-NEXT: #2: Register R#14 -CHECK-NEXT: #3: Register R#10 -CHECK-NEXT: #4: Register R#3 -CHECK-NEXT: #5: Register R#0 -CHECK-NEXT: #6: Register R#13 -CHECK-NEXT: #7: Register R#12 -CHECK-NEXT: #8: Register R#15 -CHECK-NEXT: #9: Indirect [R#6 + 72] -CHECK-NEXT: #10: Indirect [R#6 + 80] -CHECK-NEXT: #11: Indirect [R#6 + 88] -CHECK-NEXT: #12: Indirect [R#6 + 96] -CHECK-NEXT: #13: Indirect [R#6 + 104] -CHECK-NEXT: #14: Indirect [R#6 + 112] -CHECK-NEXT: #15: Indirect [R#6 + 120] -CHECK-NEXT: #16: Indirect [R#6 + 128] -CHECK-NEXT: #17: Indirect [R#6 + 136] +CHECK-NEXT: #1: Register R#9, size: 8 +CHECK-NEXT: #2: Register R#14, size: 8 +CHECK-NEXT: #3: Register R#10, size: 8 +CHECK-NEXT: #4: Register R#3, size: 8 +CHECK-NEXT: #5: Register R#0, size: 8 +CHECK-NEXT: #6: Register R#13, size: 8 +CHECK-NEXT: #7: Register R#12, size: 8 +CHECK-NEXT: #8: Register R#15, size: 8 +CHECK-NEXT: #9: Indirect [R#6 + 72], size: 8 +CHECK-NEXT: #10: Indirect [R#6 + 80], size: 8 +CHECK-NEXT: #11: Indirect [R#6 + 88], size: 8 +CHECK-NEXT: #12: Indirect [R#6 + 96], size: 8 +CHECK-NEXT: #13: Indirect [R#6 + 104], size: 8 +CHECK-NEXT: #14: Indirect [R#6 + 112], size: 8 +CHECK-NEXT: #15: Indirect [R#6 + 120], size: 8 +CHECK-NEXT: #16: Indirect [R#6 + 128], size: 8 +CHECK-NEXT: #17: Indirect [R#6 + 136], size: 8 CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ] CHECK: Record ID: 12, instruction offset: 62 CHECK-NEXT: 17 locations: -CHECK-NEXT: #1: Register R#0 -CHECK-NEXT: #2: Register R#14 -CHECK-NEXT: #3: Register R#10 -CHECK-NEXT: #4: Register R#9 -CHECK-NEXT: #5: Register R#8 -CHECK-NEXT: #6: Register R#4 -CHECK-NEXT: #7: Register R#1 -CHECK-NEXT: #8: Register R#2 -CHECK-NEXT: #9: Register R#5 -CHECK-NEXT: #10: Register R#3 -CHECK-NEXT: #11: Register R#13 -CHECK-NEXT: #12: Register R#12 -CHECK-NEXT: #13: Register R#15 -CHECK-NEXT: #14: Indirect [R#6 + 112] -CHECK-NEXT: #15: Indirect [R#6 + 120] -CHECK-NEXT: #16: Indirect [R#6 + 128] -CHECK-NEXT: #17: Indirect [R#6 + 136] +CHECK-NEXT: #1: Register R#0, size: 8 +CHECK-NEXT: #2: Register R#14, size: 8 +CHECK-NEXT: #3: Register R#10, size: 8 +CHECK-NEXT: #4: Register R#9, size: 8 +CHECK-NEXT: #5: Register R#8, size: 8 +CHECK-NEXT: #6: Register R#4, size: 8 +CHECK-NEXT: #7: Register R#1, size: 8 +CHECK-NEXT: #8: Register R#2, size: 8 +CHECK-NEXT: #9: Register R#5, size: 8 +CHECK-NEXT: #10: Register R#3, size: 8 +CHECK-NEXT: #11: Register R#13, size: 8 +CHECK-NEXT: #12: Register R#12, size: 8 +CHECK-NEXT: #13: Register R#15, size: 8 +CHECK-NEXT: #14: Indirect [R#6 + 112], size: 8 +CHECK-NEXT: #15: Indirect [R#6 + 120], size: 8 +CHECK-NEXT: #16: Indirect [R#6 + 128], size: 8 +CHECK-NEXT: #17: Indirect [R#6 + 136], size: 8 CHECK-NEXT: 0 live-outs: [ ] CHECK: Record ID: 13, instruction offset: 50 CHECK-NEXT: 1 locations: -CHECK-NEXT: #1: Indirect [R#6 + -48] +CHECK-NEXT: #1: Indirect [R#6 + -48], size: 4 CHECK-NEXT: 0 live-outs: [ ] CHECK: Record ID: 14, instruction offset: 24 CHECK-NEXT: 2 locations: -CHECK-NEXT: #1: Register R#0 -CHECK-NEXT: #2: Register R#3 +CHECK-NEXT: #1: Register R#0, size: 1 +CHECK-NEXT: #2: Register R#3, size: 1 CHECK-NEXT: 0 live-outs: [ ] CHECK: Record ID: 15, instruction offset: 4 CHECK-NEXT: 1 locations: -CHECK-NEXT: #1: Constant 33 +CHECK-NEXT: #1: Constant 33, size: 8 CHECK-NEXT: 0 live-outs: [ ] CHECK: Record ID: 16, instruction offset: 32 CHECK-NEXT: 1 locations: -CHECK-NEXT: #1: Direct R#6 + -32 +CHECK-NEXT: #1: Direct R#6 + -32, size: 8 CHECK-NEXT: 0 live-outs: [ ] CHECK: Record ID: 17, instruction offset: 32 CHECK-NEXT: 2 locations: -CHECK-NEXT: #1: Direct R#6 + -8 -CHECK-NEXT: #2: Direct R#6 + -40 +CHECK-NEXT: #1: Direct R#6 + -8, size: 8 +CHECK-NEXT: #2: Direct R#6 + -40, size: 8 CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ] CHECK: Record ID: 4294967295, instruction offset: 4 @@ -166,7 +166,7 @@ CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ] CHECK: Record ID: 16, instruction offset: 18 CHECK-NEXT: 1 locations: -CHECK-NEXT: #1: Indirect [R#6 + -44] +CHECK-NEXT: #1: Indirect [R#6 + -44], size: 4 CHECK-NEXT: 0 live-outs: [ ] CHECK: Record ID: 0, instruction offset: 26 diff --git a/llvm/tools/llvm-readobj/StackMapPrinter.h b/llvm/tools/llvm-readobj/StackMapPrinter.h index c40e65a53a57e..ef75756402688 100644 --- a/llvm/tools/llvm-readobj/StackMapPrinter.h +++ b/llvm/tools/llvm-readobj/StackMapPrinter.h @@ -47,24 +47,24 @@ void prettyPrintStackMap(ScopedPrinter &W, const StackMapParserT &SMP) { OS << " #" << ++LocationIndex << ": "; switch (Loc.getKind()) { case StackMapParserT::LocationKind::Register: - OS << "Register R#" << Loc.getDwarfRegNum() << "\n"; + OS << "Register R#" << Loc.getDwarfRegNum(); break; case StackMapParserT::LocationKind::Direct: - OS << "Direct R#" << Loc.getDwarfRegNum() << " + " << Loc.getOffset() - << "\n"; + OS << "Direct R#" << Loc.getDwarfRegNum() << " + " << Loc.getOffset(); break; case StackMapParserT::LocationKind::Indirect: OS << "Indirect [R#" << Loc.getDwarfRegNum() << " + " << Loc.getOffset() - << "]\n"; + << "]"; break; case StackMapParserT::LocationKind::Constant: - OS << "Constant " << Loc.getSmallConstant() << "\n"; + OS << "Constant " << Loc.getSmallConstant(); break; case StackMapParserT::LocationKind::ConstantIndex: OS << "ConstantIndex #" << Loc.getConstantIndex() << " (" - << SMP.getConstant(Loc.getConstantIndex()).getValue() << ")\n"; + << SMP.getConstant(Loc.getConstantIndex()).getValue() << ")"; break; } + OS << ", size: " << Loc.getSizeInBytes() << "\n"; } raw_ostream &OS = W.startLine();