mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
Emit the linkage name instead of the function name, when available. This means
that we'll prefer to emit the mangled C++ name (pending a clang change). llvm-svn: 177371
This commit is contained in:
parent
b4a799cf7e
commit
ddf6c7982c
@ -142,6 +142,12 @@ ModulePass *llvm::createGCOVProfilerPass(const GCOVOptions &Options) {
|
||||
return new GCOVProfiler(Options);
|
||||
}
|
||||
|
||||
static std::string getFunctionName(DISubprogram SP) {
|
||||
if (!SP.getLinkageName().empty())
|
||||
return SP.getLinkageName();
|
||||
return SP.getName();
|
||||
}
|
||||
|
||||
namespace {
|
||||
class GCOVRecord {
|
||||
protected:
|
||||
@ -290,7 +296,7 @@ namespace {
|
||||
ReturnBlock = new GCOVBlock(i++, os);
|
||||
|
||||
writeBytes(FunctionTag, 4);
|
||||
uint32_t BlockLen = 1 + 1 + 1 + lengthOfGCOVString(SP.getName()) +
|
||||
uint32_t BlockLen = 1 + 1 + 1 + lengthOfGCOVString(getFunctionName(SP)) +
|
||||
1 + lengthOfGCOVString(SP.getFilename()) + 1;
|
||||
if (UseCfgChecksum)
|
||||
++BlockLen;
|
||||
@ -299,7 +305,7 @@ namespace {
|
||||
write(0); // lineno checksum
|
||||
if (UseCfgChecksum)
|
||||
write(0); // cfg checksum
|
||||
writeGCOVString(SP.getName());
|
||||
writeGCOVString(getFunctionName(SP));
|
||||
writeGCOVString(SP.getFilename());
|
||||
write(SP.getLineNumber());
|
||||
}
|
||||
@ -724,12 +730,12 @@ Function *GCOVProfiler::insertCounterWriteout(
|
||||
Builder.CreateGlobalStringPtr(ReversedVersion));
|
||||
for (unsigned j = 0, e = CountersBySP.size(); j != e; ++j) {
|
||||
DISubprogram SP(CountersBySP[j].second);
|
||||
Builder.CreateCall3(EmitFunction,
|
||||
Builder.getInt32(j),
|
||||
Options.FunctionNamesInData ?
|
||||
Builder.CreateGlobalStringPtr(SP.getName()) :
|
||||
Constant::getNullValue(Builder.getInt8PtrTy()),
|
||||
Builder.getInt8(Options.UseCfgChecksum));
|
||||
Builder.CreateCall3(
|
||||
EmitFunction, Builder.getInt32(j),
|
||||
Options.FunctionNamesInData ?
|
||||
Builder.CreateGlobalStringPtr(getFunctionName(SP)) :
|
||||
Constant::getNullValue(Builder.getInt8PtrTy()),
|
||||
Builder.getInt8(Options.UseCfgChecksum));
|
||||
|
||||
GlobalVariable *GV = CountersBySP[j].first;
|
||||
unsigned Arcs =
|
||||
|
25
test/Transforms/GCOVProfiling/linkagename.ll
Normal file
25
test/Transforms/GCOVProfiling/linkagename.ll
Normal file
@ -0,0 +1,25 @@
|
||||
; RUN: echo '!9 = metadata !{metadata !"%s", metadata !0}' > %t1
|
||||
; RUN: cat %s %t1 > %t2
|
||||
; RUN: opt -insert-gcov-profiling -disable-output < %t2
|
||||
; RUN: grep _Z3foov %S/linkagename.gcno
|
||||
; RUN: rm %S/linkagename.gcno
|
||||
|
||||
define void @_Z3foov() {
|
||||
entry:
|
||||
ret void, !dbg !8
|
||||
}
|
||||
|
||||
!llvm.dbg.cu = !{!0}
|
||||
!llvm.gcov = !{!9}
|
||||
|
||||
!0 = metadata !{i32 786449, i32 0, i32 4, metadata !1, metadata !"clang version 3.3 (trunk 177323)", i1 false, metadata !"", i32 0, metadata !3, metadata !3, metadata !4, metadata !3, metadata !""} ; [ DW_TAG_compile_unit ] [/home/nlewycky/hello.cc] [DW_LANG_C_plus_plus]
|
||||
!1 = metadata !{i32 786473, metadata !2} ; [ DW_TAG_file_type ] [/home/nlewycky/hello.cc]
|
||||
!2 = metadata !{metadata !"hello.cc", metadata !"/home/nlewycky"}
|
||||
!3 = metadata !{i32 0}
|
||||
!4 = metadata !{metadata !5}
|
||||
!5 = metadata !{i32 786478, i32 0, metadata !1, metadata !"foo", metadata !"foo", metadata !"_Z3foov", metadata !1, i32 1, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @_Z3foov, null, null, metadata !3, i32 1} ; [ DW_TAG_subprogram ] [line 1] [def] [foo]
|
||||
!6 = metadata !{i32 786453, i32 0, metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
|
||||
!7 = metadata !{null}
|
||||
!8 = metadata !{i32 1, i32 0, metadata !5, null}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user