Skip to content

Commit 0dc760e

Browse files
NerixyzLukacma
authored andcommitted
[LLDB][PDB] Run pointers.test with both plugins (llvm#163623)
The `pointers.test` was only run with the DIA plugin. I made the following changes: - Remove the check for the function type. The types of the function are different in the plugins: ``` Native: Type{0x00010084} , size = 0, compiler_type = 0x00000209aff60060 int (int) __attribute__((thiscall)) DIA: Type{0x0000000a} , name = "f", decl = PointerTypeTest.cpp:8, compiler_type = 0x0000020bc22356c0 int (int) __attribute__((thiscall)) ``` In DIA, each function gets its own type with a name and decl. In the native plugin, only one unnamed type is created per signature. This matches DWARF. - The check for the `struct ST` fields was split, because the order of members and methods is swapped between the plugins. In DIA, the member is first and in the native plugin the method is first. We still check that both are in the struct. - The type names for the local variables are different. The native plugin includes <code>\`extern "C" main'::\`2'::ST</code> which I added as an allowed prefix. This comes from the mangled name of the struct `ST` - `.?AUST@?1??main@@9@`. - The location of local variables is different. DIA creates one static location (e.g. `DW_OP_breg6 ESI-52`) whereas the native plugin limits the location to the block (e.g. `[0x0040100d, 0x00401038): DW_OP_breg6 ESI-52`). This gets printed on a second line and the `location` starts with `0x00000000:` - DIA adds a decl for each parameter (and local variable). However, this information is not contained in the PDB. I'm not sure how DIA calculates this. It's often wrong and assumes variables are declared earlier. For example, in this test ([PointerTypeTest.cpp](https://github.com/llvm/llvm-project/blob/2b135b931338a57c38d9c4a34ffdd59877ba82d6/lldb/test/Shell/SymbolFile/PDB/Inputs/PointerTypeTest.cpp)), it assumes that all local variables of `main` are created on line 4. The native plugin doesn't include this, so I made the check optional.
1 parent 84f57e9 commit 0dc760e

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

lldb/test/Shell/SymbolFile/PDB/pointers.test

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,44 @@ REQUIRES: target-windows, msvc
22
RUN: mkdir -p %t.dir
33
RUN: %build --compiler=clang-cl --mode=compile --arch=32 --nodefaultlib --output=%t.dir/PointerTypeTest.cpp.obj %S/Inputs/PointerTypeTest.cpp
44
RUN: %build --compiler=msvc --mode=link --arch=32 --nodefaultlib --output=%t.dir/PointerTypeTest.cpp.exe %t.dir/PointerTypeTest.cpp.obj
5-
RUN: lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck %s
6-
RUN: lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=MAIN-ST-F %s
7-
RUN: lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=MAIN-ST %s
8-
RUN: lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=MAIN %s
9-
RUN: lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=F %s
5+
6+
RUN: env LLDB_USE_NATIVE_PDB_READER=0 lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck %s
7+
RUN: env LLDB_USE_NATIVE_PDB_READER=0 lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=MAIN-ST-INT %s
8+
RUN: env LLDB_USE_NATIVE_PDB_READER=0 lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=MAIN-ST-FN %s
9+
RUN: env LLDB_USE_NATIVE_PDB_READER=0 lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=MAIN %s
10+
RUN: env LLDB_USE_NATIVE_PDB_READER=0 lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=F %s
11+
12+
RUN: env LLDB_USE_NATIVE_PDB_READER=1 lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck %s
13+
RUN: env LLDB_USE_NATIVE_PDB_READER=1 lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=MAIN-ST-INT %s
14+
RUN: env LLDB_USE_NATIVE_PDB_READER=1 lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=MAIN-ST-FN %s
15+
RUN: env LLDB_USE_NATIVE_PDB_READER=1 lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=MAIN %s
16+
RUN: env LLDB_USE_NATIVE_PDB_READER=1 lldb-test symbols %t.dir/PointerTypeTest.cpp.exe | FileCheck --check-prefix=F %s
1017

1118
CHECK: Module [[MOD:.*]]
1219
CHECK: {{^[0-9A-F]+}}: CompileUnit{{[{]0x[0-9a-f]+[}]}}, language = "c++", file = '{{.*}}\PointerTypeTest.cpp'
1320

14-
MAIN-ST-F: name = "f"
15-
MAIN-ST-F-SAME: decl = PointerTypeTest.cpp:8
16-
MAIN-ST-F-SAME: compiler_type = {{.*}} int (int)
21+
MAIN-ST-INT-LABEL: name = "ST", size = 4, decl = PointerTypeTest.cpp:6, compiler_type = {{.*}} struct ST {
22+
MAIN-ST-INT: int a;
23+
MAIN-ST-INT-LABEL:}
1724

18-
MAIN-ST: name = "ST", size = 4, decl = PointerTypeTest.cpp:6, compiler_type = {{.*}} struct ST {
19-
MAIN-ST-NEXT: int a;
20-
MAIN-ST-NEXT: int {{.*}}f(int);
21-
MAIN-ST-NEXT:}
25+
MAIN-ST-FN-LABEL: name = "ST", size = 4, decl = PointerTypeTest.cpp:6, compiler_type = {{.*}} struct ST {
26+
MAIN-ST-FN: int {{.*}}f(int);
27+
MAIN-ST-FN-LABEL:}
2228

23-
MAIN: Function{[[FID1:.*]]}, mangled = {{_?}}main
29+
MAIN: Function{[[FID1:.*]]}, {{(de)?}}mangled = {{_?}}main
2430
MAIN-NEXT: Block{[[FID1]]}
2531
MAIN: Variable{{.*}}, name = "array_pointer"
2632
MAIN-SAME: (int (*)[2][4]), scope = local
2733
MAIN: Variable{{.*}}, name = "p_int"
2834
MAIN-SAME: (int *), scope = local
2935
MAIN: Variable{{.*}}, name = "p_member_field"
30-
MAIN-SAME: (int ST::*), scope = local
36+
MAIN-SAME: (int {{(`extern "C" main'::`2'::)?}}ST::*), scope = local
3137
MAIN: Variable{{.*}}, name = "p_member_method"
32-
MAIN-SAME: (int (ST::*)(int){{( __attribute__\(\(thiscall\)\))?}}), scope = local
38+
MAIN-SAME: (int ({{(`extern "C" main'::`2'::)?}}ST::*)(int){{( __attribute__\(\(thiscall\)\))?}}), scope = local
3339

34-
F: Function{[[FID2:.*]]}, demangled = {{.*}}f(int)
40+
F: Function{[[FID2:.*]]}, demangled = {{.*}}main::ST::f
3541
F-NEXT: Block{[[FID2]]}
3642
F: Variable{{.*}}, name = "this"
37-
F-SAME: (ST *), scope = parameter, location = {{(DW_OP.*)|(<empty>)}}, artificial
43+
F-SAME: ({{(`extern "C" main'::`2'::)?}}ST *), scope = parameter, location = {{DW_OP|<empty>|0x00000000}}
3844
F: Variable{{.*}}, name = "x"
39-
F-SAME: (int), scope = parameter, decl = PointerTypeTest.cpp:8
45+
F-SAME: (int), scope = parameter{{(, decl = PointerTypeTest.cpp:8)?}}

0 commit comments

Comments
 (0)