summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/test/COFF/Inputs/pdb1.yaml4
-rw-r--r--llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp46
-rw-r--r--llvm/test/DebugInfo/COFF/globals.ll38
-rw-r--r--llvm/test/DebugInfo/PDB/pdb-yaml-symbols.test3
4 files changed, 62 insertions, 29 deletions
diff --git a/lld/test/COFF/Inputs/pdb1.yaml b/lld/test/COFF/Inputs/pdb1.yaml
index 566f2da003c..90905ae191e 100644
--- a/lld/test/COFF/Inputs/pdb1.yaml
+++ b/lld/test/COFF/Inputs/pdb1.yaml
@@ -34,14 +34,10 @@ sections:
Records:
- Kind: S_GPROC32_ID
ProcSym:
- PtrParent: 0
- PtrEnd: 0
- PtrNext: 0
CodeSize: 14
DbgStart: 4
DbgEnd: 9
FunctionType: 4101
- Segment: 0
Flags: [ ]
DisplayName: main
- Kind: S_FRAMEPROC
diff --git a/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp b/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
index edabe415fd0..83f3d55b8e5 100644
--- a/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
+++ b/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
@@ -286,16 +286,15 @@ template <> void SymbolRecordImpl<ExportSym>::map(IO &IO) {
}
template <> void SymbolRecordImpl<ProcSym>::map(IO &IO) {
- // TODO: Print the linkage name
-
- IO.mapRequired("PtrParent", Symbol.Parent);
- IO.mapRequired("PtrEnd", Symbol.End);
- IO.mapRequired("PtrNext", Symbol.Next);
+ IO.mapOptional("PtrParent", Symbol.Parent, 0U);
+ IO.mapOptional("PtrEnd", Symbol.End, 0U);
+ IO.mapOptional("PtrNext", Symbol.Next, 0U);
IO.mapRequired("CodeSize", Symbol.CodeSize);
IO.mapRequired("DbgStart", Symbol.DbgStart);
IO.mapRequired("DbgEnd", Symbol.DbgEnd);
IO.mapRequired("FunctionType", Symbol.FunctionType);
- IO.mapRequired("Segment", Symbol.Segment);
+ IO.mapOptional("Offset", Symbol.CodeOffset, 0U);
+ IO.mapOptional("Segment", Symbol.Segment, uint16_t(0));
IO.mapRequired("Flags", Symbol.Flags);
IO.mapRequired("DisplayName", Symbol.Name);
}
@@ -308,8 +307,8 @@ template <> void SymbolRecordImpl<RegisterSym>::map(IO &IO) {
template <> void SymbolRecordImpl<PublicSym32>::map(IO &IO) {
IO.mapRequired("Flags", Symbol.Flags);
- IO.mapRequired("Seg", Symbol.Segment);
- IO.mapRequired("Off", Symbol.Offset);
+ IO.mapOptional("Offset", Symbol.Offset, 0U);
+ IO.mapOptional("Segment", Symbol.Segment, uint16_t(0));
IO.mapRequired("Name", Symbol.Name);
}
@@ -325,8 +324,8 @@ template <> void SymbolRecordImpl<EnvBlockSym>::map(IO &IO) {
}
template <> void SymbolRecordImpl<InlineSiteSym>::map(IO &IO) {
- IO.mapRequired("PtrParent", Symbol.Parent);
- IO.mapRequired("PtrEnd", Symbol.End);
+ IO.mapOptional("PtrParent", Symbol.Parent, 0U);
+ IO.mapOptional("PtrEnd", Symbol.End, 0U);
IO.mapRequired("Inlinee", Symbol.Inlinee);
// TODO: The binary annotations
}
@@ -368,17 +367,17 @@ template <> void SymbolRecordImpl<DefRangeRegisterRelSym>::map(IO &IO) {
}
template <> void SymbolRecordImpl<BlockSym>::map(IO &IO) {
- // TODO: Print the linkage name
- IO.mapRequired("PtrParent", Symbol.Parent);
- IO.mapRequired("PtrEnd", Symbol.End);
+ IO.mapOptional("PtrParent", Symbol.Parent, 0U);
+ IO.mapOptional("PtrEnd", Symbol.End, 0U);
IO.mapRequired("CodeSize", Symbol.CodeSize);
- IO.mapRequired("Segment", Symbol.Segment);
+ IO.mapOptional("Offset", Symbol.CodeOffset, 0U);
+ IO.mapOptional("Segment", Symbol.Segment, uint16_t(0));
IO.mapRequired("BlockName", Symbol.Name);
}
template <> void SymbolRecordImpl<LabelSym>::map(IO &IO) {
- // TODO: Print the linkage name
- IO.mapRequired("Segment", Symbol.Segment);
+ IO.mapOptional("Offset", Symbol.CodeOffset, 0U);
+ IO.mapOptional("Segment", Symbol.Segment, uint16_t(0));
IO.mapRequired("Flags", Symbol.Flags);
IO.mapRequired("Flags", Symbol.Flags);
IO.mapRequired("DisplayName", Symbol.Name);
@@ -428,8 +427,8 @@ template <> void SymbolRecordImpl<FrameProcSym>::map(IO &IO) {
}
template <> void SymbolRecordImpl<CallSiteInfoSym>::map(IO &IO) {
- // TODO: Map Linkage Name
- IO.mapRequired("Segment", Symbol.Segment);
+ IO.mapOptional("Offset", Symbol.CodeOffset, 0U);
+ IO.mapOptional("Segment", Symbol.Segment, uint16_t(0));
IO.mapRequired("Type", Symbol.Type);
}
@@ -441,14 +440,13 @@ template <> void SymbolRecordImpl<FileStaticSym>::map(IO &IO) {
}
template <> void SymbolRecordImpl<HeapAllocationSiteSym>::map(IO &IO) {
- // TODO: Map Linkage Name
- IO.mapRequired("Segment", Symbol.Segment);
+ IO.mapOptional("Offset", Symbol.CodeOffset, 0U);
+ IO.mapOptional("Segment", Symbol.Segment, uint16_t(0));
IO.mapRequired("CallInstructionSize", Symbol.CallInstructionSize);
IO.mapRequired("Type", Symbol.Type);
}
template <> void SymbolRecordImpl<FrameCookieSym>::map(IO &IO) {
- // TODO: Map Linkage Name
IO.mapRequired("Register", Symbol.Register);
IO.mapRequired("CookieKind", Symbol.CookieKind);
IO.mapRequired("Flags", Symbol.Flags);
@@ -487,16 +485,16 @@ template <> void SymbolRecordImpl<ConstantSym>::map(IO &IO) {
}
template <> void SymbolRecordImpl<DataSym>::map(IO &IO) {
- // TODO: Map linkage name
IO.mapRequired("Type", Symbol.Type);
- IO.mapOptional("DataOffset", Symbol.DataOffset, 0U);
+ IO.mapOptional("Offset", Symbol.DataOffset, 0U);
IO.mapOptional("Segment", Symbol.Segment, uint16_t(0));
IO.mapRequired("DisplayName", Symbol.Name);
}
template <> void SymbolRecordImpl<ThreadLocalDataSym>::map(IO &IO) {
- // TODO: Map linkage name
IO.mapRequired("Type", Symbol.Type);
+ IO.mapOptional("Offset", Symbol.DataOffset, 0U);
+ IO.mapOptional("Segment", Symbol.Segment, uint16_t(0));
IO.mapRequired("DisplayName", Symbol.Name);
}
}
diff --git a/llvm/test/DebugInfo/COFF/globals.ll b/llvm/test/DebugInfo/COFF/globals.ll
index aadf6ab557f..0d1b9413e3d 100644
--- a/llvm/test/DebugInfo/COFF/globals.ll
+++ b/llvm/test/DebugInfo/COFF/globals.ll
@@ -1,5 +1,6 @@
; RUN: llc < %s | FileCheck %s --check-prefix=ASM
; RUN: llc < %s -filetype=obj | llvm-readobj - -codeview | FileCheck %s --check-prefix=OBJ
+; RUN: llc < %s -filetype=obj | obj2yaml | FileCheck %s --check-prefix=YAML
; C++ source to regenerate:
; $ cat t.cpp
@@ -109,6 +110,43 @@
; OBJ: ]
; OBJ: ]
+; YAML-LABEL: - Name: '.debug$S'
+; YAML: Subsections:
+; YAML: - !Symbols
+; YAML: Records:
+; YAML: - Kind: S_COMPILE3
+; YAML: Compile3Sym:
+; YAML: - !Symbols
+; YAML: Records:
+; YAML: - Kind: S_LDATA32
+; YAML: DataSym:
+; YAML-NOT: Segment
+; YAML: Type: 116
+; YAML-NOT: Segment
+; YAML: DisplayName: first
+; YAML-NOT: Segment
+; YAML: - Kind: S_GTHREAD32
+; YAML: ThreadLocalDataSym:
+; YAML: Type: 4097
+; YAML: DisplayName: middle
+; YAML: - Kind: S_GDATA32
+; YAML: DataSym:
+; YAML-NOT: Segment
+; YAML: Type: 116
+; YAML-NOT: Offset
+; YAML-NOT: Segment
+; YAML: DisplayName: last
+; YAML-NOT: Segment
+
+; The missing offsets are represented as relocations against this section.
+; YAML: Relocations:
+; YAML: - VirtualAddress: 92
+; YAML: SymbolName: '?first@@3HA'
+; YAML: Type: IMAGE_REL_AMD64_SECREL
+; YAML: - VirtualAddress: 96
+; YAML: SymbolName: '?first@@3HA'
+; YAML: Type: IMAGE_REL_AMD64_SECTION
+
; ModuleID = 't.cpp'
source_filename = "t.cpp"
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
diff --git a/llvm/test/DebugInfo/PDB/pdb-yaml-symbols.test b/llvm/test/DebugInfo/PDB/pdb-yaml-symbols.test
index 574065176b5..7afa1c3b2a7 100644
--- a/llvm/test/DebugInfo/PDB/pdb-yaml-symbols.test
+++ b/llvm/test/DebugInfo/PDB/pdb-yaml-symbols.test
@@ -55,6 +55,7 @@ YAML: CodeSize: 10
YAML: DbgStart: 3
YAML: DbgEnd: 8
YAML: FunctionType: 4097
+YAML: Offset: 16
YAML: Segment: 1
YAML: Flags: [ HasFP ]
YAML: DisplayName: main
@@ -178,4 +179,4 @@ YAML: Rva: 20480
YAML: Length: 8
YAML: Characteristics: 1107296320
YAML: Name: .reloc
-YAML: ... \ No newline at end of file
+YAML: ...
OpenPOWER on IntegriCloud