1; RUN: llvm-pdbutil yaml2pdb %p/Inputs/symbol-offset.yaml --pdb=%t.pdb 2 3; RUN: llvm-pdbutil dump --symbols --modi=0 --symbol-offset=80 %t.pdb \ 4; RUN: | FileCheck --check-prefix=OFFSET %s 5 6; RUN: llvm-pdbutil dump --symbols --modi=0 --symbol-offset=4 --show-parents \ 7; RUN: %t.pdb | FileCheck --check-prefix=SHOW-PARENT1 %s 8 9; RUN: llvm-pdbutil dump --symbols --modi=0 --symbol-offset=80 --show-parents \ 10; RUN: %t.pdb | FileCheck --check-prefix=SHOW-PARENT2 %s 11 12; RUN: llvm-pdbutil dump --symbols --modi=0 --symbol-offset=308 --show-parents \ 13; RUN: %t.pdb | FileCheck --check-prefix=SHOW-PARENT3 %s 14 15; RUN: llvm-pdbutil dump --symbols --modi=0 --symbol-offset=260 --show-parents \ 16; RUN: --parent-recurse-depth=1 %t.pdb \ 17; RUN: | FileCheck --check-prefix=SHOW-PARENT-DEPTH1 %s 18 19; RUN: llvm-pdbutil dump --symbols --modi=0 --symbol-offset=260 --show-parents \ 20; RUN: --parent-recurse-depth=2 %t.pdb \ 21; RUN: | FileCheck --check-prefix=SHOW-PARENT-DEPTH2 %s 22 23; RUN: llvm-pdbutil dump --symbols --modi=0 --symbol-offset=416 --show-children\ 24; RUN: %t.pdb | FileCheck --check-prefix=SHOW-CHILDREN1 %s 25 26; RUN: llvm-pdbutil dump --symbols --modi=0 --symbol-offset=292 --show-children\ 27; RUN: %t.pdb | FileCheck --check-prefix=SHOW-CHILDREN2 %s 28 29; RUN: llvm-pdbutil dump --symbols --modi=0 --symbol-offset=4 --show-children \ 30; RUN: --children-recurse-depth=1 %t.pdb \ 31; RUN: | FileCheck --check-prefix=SHOW-CHILDREN-DEPTH1 %s 32 33; RUN: llvm-pdbutil dump --symbols --modi=0 --symbol-offset=292 --show-children\ 34; RUN: --children-recurse-depth=2 %t.pdb \ 35; RUN: | FileCheck --check-prefix=SHOW-CHILDREN-DEPTH2 %s 36 37The pdb file is generate from following cpp file and use llvm-pdbutil's pdb2yaml 38functionality to convert pdb to yaml. Unrelated information was removed from the 39yaml test file. 40; [[clang::always_inline]] int func1(int x) { 41; return x * 2; 42; } 43; 44; [[clang::always_inline]] int func2(int x, int y) { 45; return func1(x + y); 46; } 47; 48; [[clang::always_inline]] int func3(int x, int y, int z) { 49; y += func1(x); 50; x += func2(y, z); 51; return x + func1(x); 52; } 53; 54; int main(int argc, char** argv) { 55; return func3(argc, 1, 2); 56; } 57 58 59OFFSET: 80 | S_LOCAL [size = 16] `argc` 60OFFSET-NEXT: type=0x0074 (int), flags = param 61 62SHOW-PARENT1: 4 | S_GPROC32 [size = 44] `main` 63SHOW-PARENT1-NEXT: parent = 0, end = 468, addr = 0001:0176, code size = 137 64SHOW-PARENT1-NEXT: type = `0x1008 (<unknown UDT>)`, debug start = 0, debug end = 0, flags = none 65 66SHOW-PARENT2: 4 | S_GPROC32 [size = 44] `main` 67SHOW-PARENT2-NEXT: parent = 0, end = 468, addr = 0001:0176, code size = 137 68SHOW-PARENT2-NEXT: type = `0x1008 (<unknown UDT>)`, debug start = 0, debug end = 0, flags = none 69SHOW-PARENT2-NEXT: 80 | S_LOCAL [size = 16] `argc` 70SHOW-PARENT2-NEXT: type=0x0074 (int), flags = param 71SHOW-PARENT2-NEXT: 468 | S_END [size = 4] 72 73SHOW-PARENT3: 4 | S_GPROC32 [size = 44] `main` 74SHOW-PARENT3-NEXT: parent = 0, end = 468, addr = 0001:0176, code size = 137 75SHOW-PARENT3-NEXT: type = `0x1008 (<unknown UDT>)`, debug start = 0, debug end = 0, flags = none 76SHOW-PARENT3-NEXT: 144 | S_INLINESITE [size = 16] 77SHOW-PARENT3-NEXT: inlinee = 0x1002 (<unknown UDT>), parent = 4, end = 464 78SHOW-PARENT3-NEXT: 292 | S_INLINESITE [size = 16] 79SHOW-PARENT3-NEXT: inlinee = 0x1001 (<unknown UDT>), parent = 144, end = 412 80SHOW-PARENT3-NEXT: 308 | S_LOCAL [size = 12] `x` 81SHOW-PARENT3-NEXT: type=0x0074 (int), flags = param 82SHOW-PARENT3-NEXT: 412 | S_INLINESITE_END [size = 4] 83SHOW-PARENT3-NEXT: 464 | S_INLINESITE_END [size = 4] 84SHOW-PARENT3-NEXT: 468 | S_END [size = 4] 85 86 87SHOW-PARENT-DEPTH1: 244 | S_INLINESITE [size = 16] 88SHOW-PARENT-DEPTH1-NEXT: inlinee = 0x1000 (<unknown UDT>), parent = 144, end = 288 89SHOW-PARENT-DEPTH1-NEXT: 260 | S_LOCAL [size = 12] `x` 90SHOW-PARENT-DEPTH1-NEXT: type=0x0074 (int), flags = param 91SHOW-PARENT-DEPTH1-NEXT: 288 | S_INLINESITE_END [size = 4] 92 93SHOW-PARENT-DEPTH2: 144 | S_INLINESITE [size = 16] 94SHOW-PARENT-DEPTH2-NEXT: inlinee = 0x1002 (<unknown UDT>), parent = 4, end = 464 95SHOW-PARENT-DEPTH2-NEXT: 244 | S_INLINESITE [size = 16] 96SHOW-PARENT-DEPTH2-NEXT: inlinee = 0x1000 (<unknown UDT>), parent = 144, end = 288 97SHOW-PARENT-DEPTH2-NEXT: 260 | S_LOCAL [size = 12] `x` 98SHOW-PARENT-DEPTH2-NEXT: type=0x0074 (int), flags = param 99SHOW-PARENT-DEPTH2-NEXT: 288 | S_INLINESITE_END [size = 4] 100SHOW-PARENT-DEPTH2-NEXT: 464 | S_INLINESITE_END [size = 4] 101 102SHOW-CHILDREN1: 416 | S_INLINESITE [size = 16] 103SHOW-CHILDREN1-NEXT: inlinee = 0x1000 (<unknown UDT>), parent = 144, end = 460 104SHOW-CHILDREN1-NEXT: 432 | S_LOCAL [size = 12] `x` 105SHOW-CHILDREN1-NEXT: type=0x0074 (int), flags = param 106SHOW-CHILDREN1-NEXT: 444 | S_DEFRANGE_FRAMEPOINTER_REL [size = 16] 107SHOW-CHILDREN1-NEXT: offset = 36, range = [0001:0299,+7) 108SHOW-CHILDREN1-NEXT: gaps = [] 109SHOW-CHILDREN1-NEXT: 460 | S_INLINESITE_END [size = 4] 110 111SHOW-CHILDREN2: 292 | S_INLINESITE [size = 16] 112SHOW-CHILDREN2-NEXT: inlinee = 0x1001 (<unknown UDT>), parent = 144, end = 412 113SHOW-CHILDREN2-NEXT: 308 | S_LOCAL [size = 12] `x` 114SHOW-CHILDREN2-NEXT: type=0x0074 (int), flags = param 115SHOW-CHILDREN2-NEXT: 320 | S_DEFRANGE_FRAMEPOINTER_REL [size = 16] 116SHOW-CHILDREN2-NEXT: offset = 44, range = [0001:0260,+19) 117SHOW-CHILDREN2-NEXT: gaps = [] 118SHOW-CHILDREN2-NEXT: 336 | S_LOCAL [size = 12] `y` 119SHOW-CHILDREN2-NEXT: type=0x0074 (int), flags = param 120SHOW-CHILDREN2-NEXT: 348 | S_DEFRANGE_FRAMEPOINTER_REL [size = 16] 121SHOW-CHILDREN2-NEXT: offset = 48, range = [0001:0260,+19) 122SHOW-CHILDREN2-NEXT: gaps = [] 123SHOW-CHILDREN2-NEXT: 364 | S_INLINESITE [size = 16] 124SHOW-CHILDREN2-NEXT: inlinee = 0x1000 (<unknown UDT>), parent = 292, end = 408 125SHOW-CHILDREN2-NEXT: 380 | S_LOCAL [size = 12] `x` 126SHOW-CHILDREN2-NEXT: type=0x0074 (int), flags = param 127SHOW-CHILDREN2-NEXT: 392 | S_DEFRANGE_FRAMEPOINTER_REL [size = 16] 128SHOW-CHILDREN2-NEXT: offset = 52, range = [0001:0272,+7) 129SHOW-CHILDREN2-NEXT: gaps = [] 130SHOW-CHILDREN2-NEXT: 408 | S_INLINESITE_END [size = 4] 131SHOW-CHILDREN2-NEXT: 412 | S_INLINESITE_END [size = 4] 132 133SHOW-CHILDREN-DEPTH1: 4 | S_GPROC32 [size = 44] `main` 134SHOW-CHILDREN-DEPTH1-NEXT: parent = 0, end = 468, addr = 0001:0176, code size = 137 135SHOW-CHILDREN-DEPTH1-NEXT: type = `0x1008 (<unknown UDT>)`, debug start = 0, debug end = 0, flags = none 136SHOW-CHILDREN-DEPTH1-NEXT: 48 | S_FRAMEPROC [size = 32] 137SHOW-CHILDREN-DEPTH1-NEXT: size = 56, padding size = 0, offset to padding = 0 138SHOW-CHILDREN-DEPTH1-NEXT: bytes of callee saved registers = 0, exception handler addr = 0000:0000 139SHOW-CHILDREN-DEPTH1-NEXT: local fp reg = NONE, param fp reg = NONE 140SHOW-CHILDREN-DEPTH1-NEXT: flags = none 141SHOW-CHILDREN-DEPTH1-NEXT: 80 | S_LOCAL [size = 16] `argc` 142SHOW-CHILDREN-DEPTH1-NEXT: type=0x0074 (int), flags = param 143SHOW-CHILDREN-DEPTH1-NEXT: 96 | S_DEFRANGE_FRAMEPOINTER_REL [size = 16] 144SHOW-CHILDREN-DEPTH1-NEXT: offset = 4, range = [0001:0197,+116) 145SHOW-CHILDREN-DEPTH1-NEXT: gaps = [] 146SHOW-CHILDREN-DEPTH1-NEXT: 112 | S_LOCAL [size = 16] `argv` 147SHOW-CHILDREN-DEPTH1-NEXT: type=0x1006 (<unknown UDT>), flags = param 148SHOW-CHILDREN-DEPTH1-NEXT: 128 | S_DEFRANGE_FRAMEPOINTER_REL [size = 16] 149SHOW-CHILDREN-DEPTH1-NEXT: offset = 8, range = [0001:0197,+116) 150SHOW-CHILDREN-DEPTH1-NEXT: gaps = [] 151SHOW-CHILDREN-DEPTH1-NEXT: 144 | S_INLINESITE [size = 16] 152SHOW-CHILDREN-DEPTH1-NEXT: inlinee = 0x1002 (<unknown UDT>), parent = 4, end = 464 153SHOW-CHILDREN-DEPTH1-NEXT: 464 | S_INLINESITE_END [size = 4] 154SHOW-CHILDREN-DEPTH1-NEXT: 468 | S_END [size = 4] 155 156SHOW-CHILDREN-DEPTH2: 292 | S_INLINESITE [size = 16] 157SHOW-CHILDREN-DEPTH2-NEXT: inlinee = 0x1001 (<unknown UDT>), parent = 144, end = 412 158SHOW-CHILDREN-DEPTH2-NEXT: 308 | S_LOCAL [size = 12] `x` 159SHOW-CHILDREN-DEPTH2-NEXT: type=0x0074 (int), flags = param 160SHOW-CHILDREN-DEPTH2-NEXT: 320 | S_DEFRANGE_FRAMEPOINTER_REL [size = 16] 161SHOW-CHILDREN-DEPTH2-NEXT: offset = 44, range = [0001:0260,+19) 162SHOW-CHILDREN-DEPTH2-NEXT: gaps = [] 163SHOW-CHILDREN-DEPTH2-NEXT: 336 | S_LOCAL [size = 12] `y` 164SHOW-CHILDREN-DEPTH2-NEXT: type=0x0074 (int), flags = param 165SHOW-CHILDREN-DEPTH2-NEXT: 348 | S_DEFRANGE_FRAMEPOINTER_REL [size = 16] 166SHOW-CHILDREN-DEPTH2-NEXT: offset = 48, range = [0001:0260,+19) 167SHOW-CHILDREN-DEPTH2-NEXT: gaps = [] 168SHOW-CHILDREN-DEPTH2-NEXT: 364 | S_INLINESITE [size = 16] 169SHOW-CHILDREN-DEPTH2-NEXT: inlinee = 0x1000 (<unknown UDT>), parent = 292, end = 408 170SHOW-CHILDREN-DEPTH2-NEXT: 380 | S_LOCAL [size = 12] `x` 171SHOW-CHILDREN-DEPTH2-NEXT: type=0x0074 (int), flags = param 172SHOW-CHILDREN-DEPTH2-NEXT: 392 | S_DEFRANGE_FRAMEPOINTER_REL [size = 16] 173SHOW-CHILDREN-DEPTH2-NEXT: offset = 52, range = [0001:0272,+7) 174SHOW-CHILDREN-DEPTH2-NEXT: gaps = [] 175SHOW-CHILDREN-DEPTH2-NEXT: 408 | S_INLINESITE_END [size = 4] 176SHOW-CHILDREN-DEPTH2-NEXT: 412 | S_INLINESITE_END [size = 4]