Files
clang-p2996/llvm/test/tools/llvm-symbolizer/pdb/Inputs/test.cpp
Reid Kleckner 0336cc05e7 [PDB] Fix function names for private symbols in PDBs
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
2016-04-27 16:10:29 +00:00

30 lines
386 B
C++

// To generate the corresponding EXE/PDB, run:
// cl /Zi test.cpp
namespace NS {
struct Foo {
void bar() {}
};
}
void foo() {
}
static void private_symbol() {
}
int main() {
foo();
NS::Foo f;
f.bar();
private_symbol();
}
extern "C" {
void __cdecl foo_cdecl() {}
void __stdcall foo_stdcall() {}
void __fastcall foo_fastcall() {}
void __vectorcall foo_vectorcall() {}
}