mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-10 14:36:12 +00:00
![Reid Kleckner](/assets/img/avatar_default.png)
Summary: llvm-symbolizer wants to get linkage names of functions for historical reasons. Linkage names are only recorded in the PDB for public symbols, and the linkage name is apparently stored separately in some "public symbol" record. We had a workaround in PDBContext which would look for such symbols when the user requested linkage names. However, when given an address that was truly in a private function and public funciton, we would accidentally find nearby public symbols and return those function names. The fix is to look for both function symbols and public symbols and only prefer the public symbol name if the addresses of the symbols agree. Fixes PR27492 Reviewers: zturner Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D19571 llvm-svn: 267732
50 lines
1.5 KiB
Plaintext
50 lines
1.5 KiB
Plaintext
RUN: grep '^ADDR:' %s | sed -s 's/ADDR: //' \
|
|
RUN: | llvm-symbolizer -obj="%p/Inputs/test.exe" \
|
|
RUN: | FileCheck %s
|
|
RUN: grep '^ADDR:' %s | sed -s 's/ADDR: //' \
|
|
RUN: | llvm-symbolizer -obj="%p/Inputs/test.exe" -demangle=false \
|
|
RUN: | FileCheck %s --check-prefix=CHECK-NO-DEMANGLE
|
|
|
|
Subtract ImageBase from all the offsets and run the test again with
|
|
--relative-address.
|
|
|
|
RUN: grep '^ADDR:' %s | sed -s 's/ADDR: //' \
|
|
RUN: | %python -c 'import sys;print("\n".join([hex(int(x, 16) - 0x400000) for x in sys.stdin]))' \
|
|
RUN: | llvm-symbolizer -obj="%p/Inputs/test.exe" -demangle=false --relative-address \
|
|
RUN: | FileCheck %s --check-prefix=CHECK-NO-DEMANGLE
|
|
|
|
ADDR: 0x401380
|
|
ADDR: 0x401390
|
|
ADDR: 0x4013A0
|
|
ADDR: 0x4013C0
|
|
ADDR: 0x4013D0
|
|
ADDR: 0x4013E0
|
|
ADDR: 0x4013F0
|
|
ADDR: 0x401420
|
|
|
|
CHECK: foo(void)
|
|
CHECK-NEXT: test.cpp:10
|
|
CHECK: {{^private_symbol$}}
|
|
CHECK-NEXT: test.cpp:13:0
|
|
CHECK: {{^main}}
|
|
CHECK-NEXT: test.cpp:16:0
|
|
CHECK: {{^foo_cdecl$}}
|
|
CHECK: {{^foo_stdcall$}}
|
|
CHECK: {{^foo_fastcall$}}
|
|
CHECK: {{^foo_vectorcall$}}
|
|
CHECK: NS::Foo::bar(void)
|
|
CHECK-NEXT: test.cpp:6:0
|
|
|
|
CHECK-NO-DEMANGLE: ?foo@@YAXXZ
|
|
CHECK-NO-DEMANGLE-NEXT: test.cpp:10
|
|
CHECK-NO-DEMANGLE: private_symbol
|
|
CHECK-NO-DEMANGLE-NEXT: test.cpp:13
|
|
CHECK-NO-DEMANGLE: _main
|
|
CHECK-NO-DEMANGLE-NEXT: test.cpp:16
|
|
CHECK-NO-DEMANGLE: _foo_cdecl
|
|
CHECK-NO-DEMANGLE: _foo_stdcall@0
|
|
CHECK-NO-DEMANGLE: @foo_fastcall@0
|
|
CHECK-NO-DEMANGLE: foo_vectorcall@@0
|
|
CHECK-NO-DEMANGLE: ?bar@Foo@NS@@QAEXXZ
|
|
CHECK-NO-DEMANGLE-NEXT: test.cpp:6
|